Ë
    pPêjN  ã                  óŠ   — d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	lmZ dd
„Zddd„Zdd„Zy)z˜Utility for dumping memory usage stats.

This is tailored to mypy and knows (a little) about which list objects are
owned by particular AST nodes, etc.
é    )ÚannotationsN)Údefaultdict)ÚIterable)Úcast)ÚFakeInfoÚNode)ÚType)Úget_class_descriptorsc                 óÔ  — t        j                  «       } t        | «       i }| D �]?  }t        |«      t        u rŒt        |«      j
                  }t        |d«      r|› d�|t        |j                  «      <   t        |t        t        f«      sŒit        |d«      rb|j                  j                  «       D ]E  }t        |t        «      r|› d�|t        |«      <   t        |t        «      sŒ5|› d�|t        |«      <   ŒG t        t        |«      «      D ]R  }t!        ||d«      }t        |t        «      r|› d�|t        |«      <   t        |t        «      sŒB|› d�|t        |«      <   ŒT �ŒB i }i }| D ]v  }t        |«      |v r|t        |«         }nt        |«      j
                  }|j#                  |d«      dz   ||<   |j#                  |d«      t%        j&                  |«      z   ||<   Œx ||fS )zÛReturn stats about memory use.

    Return a tuple with these items:
      - Dict from object kind to number of instances of that kind
      - Dict from object kind to total bytes used by all instances of that kind
    Ú__dict__z (__dict__)z (list)z (tuple)Nr   é   )ÚgcÚget_objectsÚfind_recursive_objectsÚtyper   Ú__name__ÚhasattrÚidr   Ú
isinstancer   r	   ÚvaluesÚlistÚtupler
   ÚgetattrÚgetÚsysÚ	getsizeof)	ÚobjsÚinferredÚobjÚnÚxÚkÚfreqsÚmemuseÚnames	            úT/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/memprofile.pyÚcollect_memory_statsr'      sË  € ô �>‰>Ó€DÜ˜4Ô à€HØó 5ˆÜ�‹9œÑ àÜ�‹I×ÑˆÜ�3˜
Ô#à,-¨3¨kÐ):ˆH”R˜Ÿ™Ó%Ñ&Ü�cœD¤$˜<Õ(Ü�s˜JÔ'ØŸ™×,Ñ,Ó.ò 9�AÜ! !¤TÔ*à-.¨C¨w¨-˜¤ A£™Ü! !¤UÕ+à-.¨C¨x¨.˜¤ A£šð9ô +¬4°«9Ó5ò 5�Ü˜C  DÓ)�Ü˜a¤Ô&Ø)*¨¨7 m�HœR ›U‘OÜ˜a¤Õ'Ø)*¨¨8 n�HœR ›U’Oò5ð%5ð2 €EØ€FØò @ˆÜˆc‹7�hÑØœB˜s›GÑ$‰Dä˜“9×%Ñ%ˆDØ—i‘i  aÓ(¨1Ñ,ˆˆd‰Ø—z‘z $¨Ó*¬S¯]©]¸3Ó-?Ñ?ˆˆtŠð@ð �&ˆ=Ðó    c                ó
  — t         j                  j                  d«      s*dd l}|j	                  |j
                  «      j                  }nd}| rt        j                  «        t        «       \  }}t        ddz  «       t        d«       d}d}t        |j                  «       d„ ¬«      D ]1  \  }}||   }	|d	k  rt        d
|	|dz  ||	z  |fz  «       |dz  }||z  }Œ3 t        «        t        d|dz  «       t        d|dz  «       y )NÚwinr   éÿÿÿÿz%7s  %7s  %7s  %s)ÚFreqzSize(k)ÚAvgSizer	   z+-------------------------------------------c                ó   — | d    S )Nr   © )r!   s    r&   ú<lambda>z&print_memory_profile.<locals>.<lambda>S   s   € ¸¸!¹°u€ r(   )Úkeyé2   z%7d  %7d  %7.0f  %si   r   zMem usage RSS   zTotal reachable )r   ÚplatformÚ
startswithÚresourceÚ	getrusageÚRUSAGE_SELFÚ	ru_maxrssr   Úcollectr'   ÚprintÚsortedÚitems)
Úrun_gcr5   Úsystem_memuser#   r$   ÚtotalmemÚir    ÚmemÚfs
             r&   Úprint_memory_profilerC   E   sú   € Ü�<‰<×"Ñ" 5Ô)Ûà ×*Ñ*¨8×+?Ñ+?Ó@×JÑJ‰àˆÙÜ
�
‰
ŒÜ(Ó*�M€Eˆ6Ü	Ð
Ð FÑ
FÔGÜ	Ð
7Ô8Ø€HØ	€AÜ˜Ÿ™›©_Ô=ò ‰ˆˆ3Ø�!‰HˆØˆrŠ6ÜÐ'¨1¨c°T©k¸3À¹7ÀAÐ*FÑFÔGØ	ˆQ‰ˆØ�C‰‰ðô 
„GÜ	Ð
˜m¨tÑ3Ô4Ü	Ð
˜h¨$Ñ.Õ/r(   c           	     óš  ‡ ‡	— ‰ D �ch c]  }t        |«      ’Œ c}Š	dˆ ˆ	fd„}‰ j                  «       D �]  }t        |«      t        u rŒt        |«      t        t
        fv rCt        t        t        t        f   |«      j                  «       D ]  \  }} ||«        ||«       Œ t        |«      t        t        t        fv r$t        t        t           |«      D ]
  } ||«       Œ t        |d«      sŒ½t        j                  t        |«      «      D ]3  }t        |dd«      D ]!  }t        ||«      sŒ |t        ||«      «       Œ# Œ5 �Œ yc c}w )z¶Find additional objects referenced by objs and append them to objs.

    We use this since gc.get_objects() does not return objects without pointers
    in them such as strings.
    c                óx   •— t        | «      ‰vr,‰j                  | «       ‰j                  t        | «      «       y y )N)r   ÚappendÚadd)Úor   Úseens    €€r&   Úvisitz%find_recursive_objects.<locals>.visitf   s.   ø€ Üˆa‹5˜ÑØ�K‰K˜ŒNØ�H‰H”R˜“U�Oð r(   Ú	__slots__r/   N)rH   ÚobjectÚreturnÚNone)r   Úcopyr   r   Údictr   r   rL   r<   r   r   Úsetr   r   Úmror   )
r   rH   rJ   r   r1   Úvalr!   ÚbaseÚslotrI   s
   `        @r&   r   r   ^   s"  ù€ ð  Ö �aŒBˆq�EÒ €Döð
 �y‰y‹{ó 2ˆÜ�‹9œÑ àÜ�‹9œœ{Ð+Ñ+Ü ¤¤f¬f nÑ!5°sÓ;×AÑAÓCò ‘��SÙ�c”
Ù�c•
ðô �‹9œœu¤cÐ*Ñ*Üœ(¤6Ñ*¨CÓ0ò �Ù�a•ðä�3˜Õ$ÜŸ™¤ c£Ó+ò 2�Ü# D¨+°rÓ:ò 2�DÜ˜s DÕ)Ùœg c¨4Ó0Õ1ñ2ò2ñ2ùò !s   ‡E)rM   z%tuple[dict[str, int], dict[str, int]])T)r=   ÚboolrM   rN   )r   zlist[object]rM   rN   )Ú__doc__Ú
__future__r   r   r   Úcollectionsr   Úcollections.abcr   Útypingr   Ú
mypy.nodesr   r   Ú
mypy.typesr	   Ú	mypy.utilr
   r'   rC   r   r/   r(   r&   ú<module>r_      s7   ðñõ #ã 	Û 
Ý #Ý $Ý ç %Ý Ý +ó.ôb0ô22r(   