ó
    Û“,jv  ã                   ó˜   • S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSK	r
SSKJr  \" S5      r S rS rS r S	 rS
 r " S S\5      rg)z�
Logging service for tracking dr tree changes from root objective 
and record every step that incrementally changes the dr tree

é    Né   )Ú
reorderingi   c                  óR   • SSK Jn   U " 5       nUS:”  a  SS Ko"R                  5         g g )Nr   )Úget_current_memoryiX  r   )Úmonitorr   ÚpdbÚ	set_trace)r   Úmemr   s      ÚœC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\chumpy/monitor.pyÚpdb_memr      s"   € Ý+Ù
Ó
€CØ
ˆTƒzÛ—=‘=•?ð ó    c                  ó’   • SSK n Sn[        R                  S:X  a  X-  nU R                  U R                  5      R
                  U-  nU$ )zN
this returns peak memory use since process starts till the moment its called
r   Ng      �@Údarwin)ÚresourceÚsysÚplatformÚ	getrusageÚRUSAGE_SELFÚ	ru_maxrss)r   Úrusage_denomr
   s      r   Úget_peak_memr      sF   € ó Ø€LÜ
‡|�|�xÓà#Ñ2ˆØ
×
Ñ
˜X×1Ñ1Ó
2×
<Ñ
<¸|Ñ
K€CØ€Jr   c                  óŒ   • [         R                  " [        R                  " 5       5      n U R	                  5       S   [
        -  nU$ )Nr   )ÚpsutilÚProcessÚosÚgetpidÚmemory_infoÚ_TWO_20)Úpr
   s     r   r   r   &   s0   € Ü�Š”r—y’y“{Ó#€AØ
�-‰-‹/˜!Ñ
œWÑ
$€Cà€Jr   c                 óì   • Ubq  [         R                  " U5      nUR                  nU(       a  [        UR                  5      nO[
        R                  " U5      nU[        U5      US.X R                  '   g g )N)ÚsparseÚsizeÚnonzero)	ÚspÚissparser"   ÚlenÚdataÚnpÚcount_nonzeroÚstrÚ
short_name)ÚkÚvÚ	info_dictr%   r"   r#   s         r   Úbuild_cache_infor/   0   s]   € Ø�}Ü—;’;˜q“>ˆØ�v‰vˆÞÜ˜!Ÿ&™&“k‰Gä×&Ò& qÓ)ˆGàÜ˜“YØñ#
ˆ	—,‘,Òð r   c                 óš  • 0 n[        U [        R                  5      (       a[  [        U S5      (       aJ  [	        U R
                  5      S:”  a1  U R
                  R                  5        H  u  p#[        X#U5        M     U$ [	        U R                  S   5      S:”  a2  U R                  S   R                  5        H  u  p#[        X#U5        M     U$ )NÚ	dr_cachedr   Údrs)	Ú
isinstancer   ÚConcatenateÚhasattrr&   r1   Úitemsr/   Ú_cache)Úch_nodeÚresultr,   r-   s       r   Ú
cache_infor:   ?   s®   € Ø€FÜ�'œ:×1Ñ1×2Ñ2´w¸wÈ×7TÑ7TÔY\Ð]d×]nÑ]nÓYoÐrsÓYsØ×%Ñ%×+Ñ+Ö-‰DˆAÜ˜Q 6Ö*ñ .ð €Mô	 
ˆW�^‰^˜EÑ"Ó	# aÓ	'Ø—N‘N 5Ñ)×/Ñ/Ö1‰DˆAÜ˜Q 6Ö*ñ 2ð €Mr   c                   óv   • \ rS rSr\R
                  R                  S5      rSS jrS r	SS jr
S rS rS	 rS
rg)ÚDrWrtProfileréJ   ÚprofilesNc                 ó"  • UR                   U l        / U l        [        R                  " 5       nU(       a  X l        [
        R                  R                  U R                  S[        U5      -  5      U l        [
        R                  R                  U R                  S[        U5      -  5      U l	        [        U R                  S5       n[        R                  " U R                  U R                  5      USS9  S S S 5        g ! , (       d  f       g = f)Nzprofile_%s.jsonzroot_%s.jsonÚwé   ©Úindent)ÚobjÚrootÚhistoryÚtimeÚ	base_pathr   ÚpathÚjoinr*   Ú	root_pathÚopenÚjsonÚdumpÚ	dump_tree)ÚselfrE   rH   ÚtsÚfs        r   Ú__init__ÚDrWrtProfiler.__init__M   s©   € Ø—H‘HˆŒ	ØˆŒä�YŠY‹[ˆÞØ&ŒNä—G‘G—L‘L §¡Ð1BÄSÈÃWÑ1LÓMˆŒ	ÜŸ™Ÿ™ d§n¡n°nÄsÈ2ÃwÑ6NÓOˆŒô �$—.‘. #Ô&¨!Ü�IŠI�d—n‘n T§Y¡YÓ/°¸1Ò=÷ '×&Ö&ús   Ã0D Ä 
Dc                 óÚ  • [        US5      (       d  / $ U R                  USS9n[        US5      (       a&  UR                  (       a  UR                  SS05        U$ SUl        / nUR                   Hd  n[        X5      (       d  M  [        X5      n[        US5      (       d  [        US5      (       d  MD  UR                  U R                  U5      5        Mf     UR                  SU05        U$ )	NÚdtermsF)ÚverboseÚvisitedÚindirectTÚtermsÚchildren)r5   Úserialize_noderX   ÚupdaterV   ÚgetattrÚappendrO   )rP   ÚnodeÚ	node_dictÚchildren_listÚdtermÚchilds         r   rO   ÚDrWrtProfiler.dump_tree\   sÏ   € Ü�t˜X×&Ñ&ØˆIà×'Ñ'¨°eÐ'Ð<ˆ	Ü�4˜×#Ñ#¨¯¯Ø×Ñ˜j¨Ð.Ô/ØÐàˆŒØˆØ—[”[ˆEÜ�t×#Ó#Ü Ó,�Ü˜5 (×+Ñ+¬w°u¸g×/FÓ/FØ!×(Ñ(¨¯©¸Ó)>Ö?ñ	 !ð
 	×Ñ˜* ]Ð3Ô4ØÐr   c                 óø   • [        U5      nUR                  n[        R                  " 5       nUR                  n[	        5       n[        U5      n[        U5      SS.n	U(       a  U	R                  UUUUUS.5        U	$ )NF)ÚidrY   )ÚnamerQ   Ústatusr
   Úcache)rg   r+   rG   Ú_statusr   r:   r*   r]   )
rP   r8   rW   Únode_idrh   rQ   ri   r
   Únode_cache_infoÚrecs
             r   r\   ÚDrWrtProfiler.serialize_nodeo   s{   € Ü�W“+ˆØ×!Ñ!ˆÜ�YŠY‹[ˆØ—‘ˆÜ Ó"ˆÜ$ WÓ-ˆô �g“,Øñ
ˆö Ø�J‰JØØØØØ(ñô ð ˆ
r   c                 ó:   • U R                   R                  U5        g)z
show tree from the root node
N)rE   Úshow_tree_cache)rP   Úlabels     r   Ú	show_treeÚDrWrtProfiler.show_tree…   s   € ð 	�	‰	×!Ñ! %Õ(r   c                 ó\   • U R                  U5      nU R                  R                  U5        g)z
Incremental changes
N)r\   rF   r_   )rP   r8   rn   s      r   ÚrecordÚDrWrtProfiler.record‹   s&   € ð ×!Ñ! 'Ó*ˆØ�‰×Ñ˜CÕ r   c                 óÔ   • [        SU R                  -  5        [        U R                  S5       n[        R                  " U R
                  USS9  S S S 5        g ! , (       d  f       g = f)Nzcollecting and dump to file %sr@   rA   rB   )ÚprintrI   rL   rM   rN   rF   )rP   rR   s     r   ÚharvestÚDrWrtProfiler.harvest’   sD   € ÜÐ.°·±Ñ:Ô;Ü�$—)‘)˜SÔ! QÜ�IŠI�d—l‘l A¨aÒ0÷ "×!Ö!ús   ¯!AÁ
A')rH   rF   rI   rE   rK   )N)T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   rI   ÚabspathrH   rS   rO   r\   rs   rv   rz   Ú__static_attributes__© r   r   r<   r<   J   s2   † Ø—‘—‘ 
Ó+€Iô>òô&ò,)ò!õ1r   r<   )Ú__doc__r   r   rG   rM   r   Úscipy.sparser!   r$   Únumpyr(   Ú r   Úfloatr   r   r   r   r/   r:   Úobjectr<   r‚   r   r   Ú<module>r‰      s[   ðñ÷
 Ó Û Û å Û Ý á
�‹-€ðò#ò
òðò
ò	ôK1�Fõ K1r   