§
    2@Äjî  ã                  ó–   — d Z ddlmZ ddlZddlZddlZddlmZmZ 	 ddl	Z	dZ
n# e$ r dZ
Y nw xY we
Zdd	„Zdd„Z G d„ d¦  «        ZdS )a  
Memory monitoring utilities for measuring memory usage.

Example usage:
    tracker = MemoryTracker("my_function")
    with tracker.monitor():
        my_function()
    # Access data: tracker.rss_delta, tracker.duration, etc.
    # Get formatted string: tracker.get_summary()
é    )ÚannotationsN)ÚDictÚOptionalTFÚreturnúOptional[int]c                 ój   — t           r+	 t          j        ¦   «         } | j        S # t          $ r Y nw xY wdS )zÐ
    Get current available system memory in bytes.

    Used for memory threshold checking in parallel test execution.

    Returns:
        int or None: Available memory in bytes, or None if unavailable
    N)Ú_HAS_PSUTILÚpsutilÚvirtual_memoryÚ	availableÚ	Exception)Úsys_mems    úGC:\Projects\Historical\venv\Lib\site-packages\numba/misc/memoryutils.pyÚget_available_memoryr      sO   € õ ð ð	ÝÔ+Ñ-Ô-ˆGØÔ$Ð$øÝð 	ð 	ð 	ØˆDð	øøøð ˆ4s   ‰# £
0¯0úDict[str, Optional[int]]c                 óB  — i } t           rƒ	 t          j        t          j        ¦   «         ¦  «        }|                     ¦   «         }|j        | d<   t          j        ¦   «         }|j        | d<   n!# t          j	        t          j
        f$ r Y nw xY wd| vrd| d<   d| vrd| d<   | S )a^  
    Get memory usage information needed for monitoring.

    Returns only RSS and available memory which are the fields
    actually used by the MemoryTracker.

    Returns:
        dict: Memory usage information including:
            - rss: Current process RSS (physical memory currently used)
            - available: Available system memory
    Úrssr   N)r	   r
   ÚProcessÚosÚgetpidÚmemory_infor   r   r   ÚNoSuchProcessÚAccessDenied)r   ÚprocessÚmem_infor   s       r   Úget_memory_usager   /   sÅ   € ð €Kåð ð	å”n¥R¤Y¡[¤[Ñ1Ô1ˆGØ×*Ò*Ñ,Ô,ˆHØ!)¤ˆK˜Ñõ Ô+Ñ-Ô-ˆGØ'.Ô'8ˆK˜Ñ$Ð$øåÔ$¥fÔ&9Ð:ð 	ð 	ð 	ØˆDð	øøøð �KÐÐØ!ˆ�EÑØ˜+Ð%Ð%Ø#'ˆ�KÑ àÐs   ‹A A, Á,B
Â	B
c                  ó”   — e Zd ZU dZded<   ded<   ded<   ded<   d	ed
<   d	ed<   ded<   ded<   dd„Zej        d„ ¦   «         Zdd„Z	dS )ÚMemoryTrackerzÏ
    A simple memory monitor that tracks RSS delta and timing.

    Stores monitoring data in instance attributes for later access.
    Each instance is typically used for monitoring a single operation.
    ÚintÚpidÚstrÚnamezfloat | NoneÚ
start_timeÚend_timezDict[str, int | None] | NoneÚstart_memoryÚ
end_memoryÚdurationz
int | NoneÚ	rss_deltac                ó˜   — t          j        ¦   «         | _        || _        d| _        d| _        d| _        d| _        d| _        d| _	        dS )z6Initialize a MemoryTracker with empty monitoring data.N)
r   r   r    r"   r#   r$   r%   r&   r'   r(   )Úselfr"   s     r   Ú__init__zMemoryTracker.__init__d   sE   € å”9‘;”;ˆŒØˆŒ	ØˆŒØˆŒØ ˆÔØˆŒØˆŒØˆŒˆˆó    c              #  óˆ  K  — t          j         ¦   «         | _        t          ¦   «         | _        	 | V — t          j         ¦   «         | _        t          ¦   «         | _        | j        | j        z
  | _        | j                             dd¦  «        }| j                             dd¦  «        }|r|r||z
  nd| _        dS # t          j         ¦   «         | _        t          ¦   «         | _        | j        | j        z
  | _        | j                             dd¦  «        }| j                             dd¦  «        }|r|r||z
  nd| _        w xY w)a§  
        Context manager to monitor memory usage during function execution.

        Records start/end memory usage and timing, calculates RSS delta,
        and stores all data in instance attributes.

        Args:
            name (str): Name/identifier for the function or operation being
                        monitored

        Yields:
            self: The MemoryTracker instance for accessing stored data
        r   r   N)	Útimer#   r   r%   r$   r&   r'   Úgetr(   )r*   Ú	start_rssÚend_rsss      r   ÚmonitorzMemoryTracker.monitoro   sL  è è € õ  œ)™+œ+ˆŒÝ,Ñ.Ô.ˆÔð	?ØˆJˆJˆJõ !œI™KœKˆDŒMÝ.Ñ0Ô0ˆDŒOØ œM¨D¬OÑ;ˆDŒMð Ô)×-Ò-¨e°QÑ7Ô7ˆIØ”o×)Ò)¨%°Ñ3Ô3ˆGà!*ð>Ø/6ð>˜w¨Ñ2Ð2Ø<=ð ŒNˆNˆNøõ !œI™KœKˆDŒMÝ.Ñ0Ô0ˆDŒOØ œM¨D¬OÑ;ˆDŒMð Ô)×-Ò-¨e°QÑ7Ô7ˆIØ”o×)Ò)¨%°Ñ3Ô3ˆGà!*ð>Ø/6ð>˜w¨Ñ2Ð2Ø<=ð ŒNð ?ð ?ð ?ð ?s   ¯B: Â:BEr   c                ó"  — | j         �| j        €t          d¦  «        ‚| j                             d¦  «        }dd„}t	          j        dt	          j        | j        ¦  «        ¦  «        }| j                              dd¦  «        }| j                             dd¦  «        }d	| j        › �d
| j	        › �d|› �d| j
        d›d�d ||¦  «        › �d ||¦  «        › �d || j        d¬¦  «        › �d ||¦  «        › �g}d                     |¦  «        S )aÄ  
        Return a formatted summary of the memory monitoring data.

        Formats the stored monitoring data into a human-readable string
        containing name, PID, RSS delta, available memory, duration,
        and start time.

        Returns:
            str: Formatted summary string with monitoring results

        Note:
            Should be called after monitor() context has completed
            to ensure all data is available.
        Nz$Memory monitoring data not availabler   Fc                óœ   — | €dS | dk    rdS d}|r
| dk     rdnd}t          | ¦  «        } dD ]}| d	k     r|› | d
›d|› �c S | d	z  } Œ|› | d
›d�S )z&Convert bytes to human readable formatNzN/Ar   z0 BÚ ú-ú+)ÚBÚKBÚMBÚGBg      �@z.2fú z TB)Úabs)Ú	bytes_valÚ	show_signÚsignÚunits       r   Úformat_bytesz/MemoryTracker.get_summary.<locals>.format_bytes¤   s£   € àÐ Ø�uØ˜AŠ~ˆ~Ø�uàˆDØð 5Ø'¨!šm˜m�s�s°�Ý˜I™œˆIà/ð $ð $�Ø˜vÒ%Ð%Ø"Ð: IÐ:Ð:Ð:°DÐ:Ð:Ð:Ð:Ð:Ø˜VÑ#�	�	ØÐ.˜IÐ.Ð.Ð.Ð.Ð.r,   z%H:%M:%Sr   r   zName: zPID: zStart: z
Duration: z.3fÚszStart RSS: z	End RSS: zRSS delta: T)r?   zAvail memory: z | )F)r%   r&   Ú
ValueErrorr/   r.   ÚstrftimeÚ	localtimer#   r"   r    r'   r(   Újoin)r*   Úcurrent_availablerB   Ústart_tsr0   r1   Úbufs          r   Úget_summaryzMemoryTracker.get_summary�   sJ  € ð ÔÐ$¨¬Ð(?ÝÐCÑDÔDÐDà œO×/Ò/°Ñ<Ô<Ðð	/ð 	/ð 	/ð 	/õ$ ”= ­T¬^¸D¼OÑ-LÔ-LÑMÔMˆØÔ%×)Ò)¨%°Ñ3Ô3ˆ	Ø”/×%Ò% e¨QÑ/Ô/ˆð !�T”YÐ Ð Ø�D”HÐÐØ �hÐ Ð Ø-˜œÐ-Ð-Ð-Ð-Ø3˜,˜, yÑ1Ô1Ð3Ð3Ø/˜˜ WÑ-Ô-Ð/Ð/ØH˜,˜, t¤~ÀÐFÑFÔFÐHÐHØ>˜\˜\Ð*;Ñ<Ô<Ð>Ð>ð	
ˆð �zŠz˜#‰ŒÐr,   N)r"   r!   )r   r!   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r+   Ú
contextlibÚcontextmanagerr2   rK   © r,   r   r   r   T   sÄ   € € € € € € ðð ð €H€H�HØ€I€I�IØÐÐÑØÐÐÑØ.Ð.Ð.Ñ.Ø,Ð,Ð,Ñ,ØÐÐÑØÐÐÑð	ð 	ð 	ð 	ð Ôð?ð ?ñ Ôð?ð@4ð 4ð 4ð 4ð 4ð 4r,   r   )r   r   )r   r   )rO   Ú
__future__r   r   rQ   r.   Útypingr   r   r
   r	   ÚImportErrorÚIS_SUPPORTEDr   r   r   rS   r,   r   ú<module>rX      sþ   ðð	ð 	ð #Ð "Ð "Ð "Ð "Ð "Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !ðØ€M€M€MØ€K€KøØð ð ð Ø€K€K€Kðøøøð €ðð ð ð ð&"ð "ð "ð "ðJpð pð pð pð pñ pô pð pð pð ps   ž% ¥/®/