Ë
    M²j  ã            
       óÎ  — d dl mZmZmZmZ d dlmZmZ d dlm	Z	 d dl
Z
d dlmZ d dlmZ d dlmZ eez  Zeedf   Z ed	«      ZeZeeef   Zg d
¢Zdede	e
j6                     fd„Zefdedeeegdf   deegef   ddfd„Zefdedeeegdf   deegef   ddfd„Zdedededdfd„Z 	 ddedededz  dedz  fd„Z!de"fdededeegdf   ddfd„Z#e"fdededeegdf   ddfd„Z$y)é    )ÚCallableÚ
CollectionÚMappingÚMutableMapping)ÚcastÚTypeVar)ÚTypeIsN)ÚShardedTensor)ÚSTATE_DICT_TYPE)ÚDTensor.ÚT)Útraverse_state_dictÚset_elementÚget_elementÚprint_tensorÚvalueÚreturnc                 ó6   — t        | t        j                  «      S ©N)Ú
isinstanceÚtorchÚTensor)r   s    úe/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/distributed/checkpoint/_traverse.pyÚ_keep_visiting_tensorsr      s   € Ü�eœUŸ\™\Ó*Ð*ó    Ú
state_dictÚvisitorÚkeep_traversingc                 ó¸   ‡‡‡‡— dt         dt        fˆˆfd„Šdt        dt         ddfˆˆˆfd„Š| j                  «       D ]  \  }} ‰t	        |«      f|«       Œ ‹‹y)a  
    Invoke ``visitor`` for each value recursively in ``state_dict``.
    Mapping will be traversed and ``visitor`` will be applied to the leaf elements.
    ``visitor`` will only be applied to elements in a list or a tuple, if the
    container contains tensors or mappings.
    r   r   c                 ó¸   •— t        | t        «      ryt        | t        «      r| }ny|D ]/  }t        |t        t        f«      r
 ‰|«      s y‰€Œ& ‰|«      sŒ/ y y)NFT)r   r   Úlist©r   ÚvaluesÚentryÚ_is_terminalr   s      €€r   r%   z)traverse_state_dict.<locals>._is_terminal)   s^   ø€ ä�eœWÔ%ØÜ˜œtÔ$Ø‰Fààò 	ˆEÜ˜%¤'¬4 Ô1¹,ÀuÔ:MÙØÑ*©¸uÕ/EÙð		ð
 r   ÚpathNc                 ó  •— t        |t        «      r/|j                  «       D ]  \  }} ‰| t        |«      fz   |«       Œ y  ‰|«      r
 ‰| |«       y t        |t        t
        f«      r!t        |«      D ]  \  }} ‰| |fz   |«       Œ y y r   )r   r   ÚitemsÚstrr!   ÚtupleÚ	enumerate©r&   r   ÚkÚvÚir%   Ú_traverse_objr   s        €€€r   r0   z*traverse_state_dict.<locals>._traverse_obj9   sˆ   ø€ Ü�eœWÔ%ØŸ™›ò 3‘��1Ù˜d¤c¨!£f YÑ.°Õ2ñ3á˜%Ô Ù�D˜%Õ Ü˜¤¤e˜}Ô-Ü! %Ó(ò .‘��1Ù˜d a T™k¨1Õ-ñ.ð .r   ©ÚSTATE_DICT_ITEMÚboolÚOBJ_PATHr(   r)   ©r   r   r   Úkeyr   r%   r0   s    ``  @@r   r   r      se   û€ ðœOð ´ö ð .œHð .¬_ð .À÷ .ð !×&Ñ&Ó(ò *‰
ˆˆUÙ”s˜3“x�k 5Õ)ð*ð 	‘|r   c                 ó¸   ‡‡‡‡— dt         dt        fˆˆfd„Šdt        dt         ddfˆˆˆfd„Š| j                  «       D ]  \  }} ‰t	        |«      f|«       Œ ‹‹y)a8  
    Traversal is short-circuited when if finds a collection for which ``keep_visiting_tensors`` evaluates
    to false for all elements.
    By default, all collections with at least one ``torch.Tensor`` element are traversed.
    Visitor takes a path argument that is a tuple of the keys used to reach it.
    r   r   c                 óØ   •— t        | t        «      r| j                  «       }nt        | t        «      r| }ny|D ]/  }t        |t        t        f«      r
 ‰|«      s y‰€Œ& ‰|«      sŒ/ y y)NTF)r   r   r#   r!   r"   s      €€r   r%   z/traverse_state_dict_v_2_3.<locals>._is_terminalW   sf   ø€ ä�eœWÔ%Ø—\‘\“^‰FÜ˜œtÔ$Ø‰Fààò 	ˆEÜ˜%¤'¬4 Ô1¹,ÀuÔ:MÙØÑ*©¸uÕ/EÙð		ð
 r   r&   Nc                 ó
  •—  ‰|«      r
 ‰| |«       y t        |t        «      r/|j                  «       D ]  \  }} ‰| t        |«      fz   |«       Œ y t        |t        «      r!t        |«      D ]  \  }} ‰| |fz   |«       Œ y y r   )r   r   r(   r)   r!   r+   r,   s        €€€r   r0   z0traverse_state_dict_v_2_3.<locals>._traverse_objg   s„   ø€ Ù˜ÔÙ�D˜%Õ Ü˜œwÔ'ØŸ™›ò 3‘��1Ù˜d¤c¨!£f YÑ.°Õ2ñ3ä˜œtÔ$Ü! %Ó(ò .‘��1Ù˜d a T™k¨1Õ-ñ.ð %r   r1   r5   s    ``  @@r   Útraverse_state_dict_v_2_3r:   J   se   û€ ðœOð ´ö ð .œHð .¬_ð .À÷ .ð !×&Ñ&Ó(ò *‰
ˆˆUÙ”s˜3“x�k 5Õ)ð*ð 	‘|r   Ú	root_dictr&   c                 óî  — t        t        | «      }dt        t           dt        ddfd„}t        dt        |«      «      D ]{  }||dz
     }||   }t        t        t        |«      t        u ri ng «      }t        |t        «      r!t        t        |j                  ||«      «      }Œd |||«       ||   €|||<   ||   }Œ} |d   }t        |«      t        u r |t        t        t           |«      |«       |||<   y)z>Set ``value`` in ``root_dict`` along the ``path`` object path.ÚlstÚidxr   Nc                 ób   — t        | «      |k  r!| j                  d «       t        | «      |k  rŒ y y r   )ÚlenÚappend)r=   r>   s     r   Úextend_listz set_element.<locals>.extend_list~   s&   € Ü�#‹h˜#ŠoØ�J‰J�tÔô �#‹h˜#�or   é   éÿÿÿÿ)r   ÚCONTAINER_TYPEr!   r2   ÚintÚranger@   Útyper)   r   r   Ú
setdefault)	r;   r&   r   Úcur_containerrB   r/   Úprev_keyr6   Údef_vals	            r   r   r   x   s  € ô œ¨Ó3€MðœœoÑ.ð ´Sð ¸Tó ô �1”c˜$“iÓ ò 4ˆØ˜˜A™‘;ˆØ�1‰gˆÜ”¬d°3«i¼3Ñ.>©ÀBÓGˆä�m¤WÔ-Ü Ü × 8Ñ 8¸À7Ó Kó‰Mñ
 ˜ xÔ0Ø˜XÑ&Ð.Ø*1�˜hÑ'Ø)¨(Ñ3‰Mð4ð  ˆr‰(€CÜˆCƒy”CÑÙ”DœœoÑ.°Ó>ÀÔDà€M�#Òr   Údefault_valuec                 ó  — t        t        | «      }|D ]`  }t        |«      t        u r"t	        |t
        «      rt        |«      |k  r|c S t	        |t        «      r||vr|c S t        t        ||   «      }Œb t        t        dz  |«      S )z[Retrieve the value at ``path``from ``root_dict``, returning ``default_value`` if not found.N)	r   rE   rH   rF   r   r!   r@   r   r   )r;   r&   rM   Ú	cur_valueÚparts        r   r   r   ™   s€   € ô ”^ YÓ/€IØò :ˆÜ�‹:œÑÜ˜i¬Ô.´#°i³.À4Ò2GØ$Ò$Ü˜I¤wÔ/°4¸yÑ3HØ Ò äœ¨°4©Ó9‰	ð:ô ”�D‘˜)Ó$Ð$r   Ú ÚprefixÚ	print_func                 ó  — t        | «      t        u r` ||› d| j                  «       › �«       | j                  «       D ]1  }t	        |j
                  |j                  j                  › d�|¬«       Œ3 y t        | «      t        u r3 ||› d| j                  «       › �«       t	        | j                  |¬«       y t        | t        j                  «      r ||› d| j                  «       › �«       y  ||› dt        | «      › �«       y )Nz ShardedTensor size: ú )rS   z DistributedTensor size: z Tensor size: z Type: )rH   r
   ÚsizeÚlocal_shardsÚ_print_nestedÚtensorÚmetadataÚshard_offsetsr   Ú_local_tensorr   r   r   )r   rR   rS   Úshards       r   rX   rX   «   så   € ô
 ˆEƒ{”mÑ#Ù�V�HÐ1°%·*±*³,°Ð@ÔAØ×'Ñ'Ó)ò 	ˆEÜØ—‘Ø—>‘>×/Ñ/Ð0°Ð2Ø#öñ	ô 
ˆe‹œÑ	!Ù�V�HÐ5°e·j±j³l°^ÐDÔEäØ×ÑØö	
ô 
�Eœ5Ÿ<™<Ô	(Ù�V�H˜N¨5¯:©:«<¨.Ð9Õ:á�V�H˜G¤D¨£K =Ð1Õ2r   c                 ó2   — t        |t        | «      |¬«       y)zÖ
    Use this callback with traverse_state_dict to print its content.

    By default the content is printed using the builtin ``print`` but this can
    be change by passing a different ``print_fun` callable.
    )rR   rS   N)rX   r)   )r&   r   rS   s      r   r   r   Å   s   € ô �%¤ D£	°YÖ?r   r   )%Úcollections.abcr   r   r   r   Útypingr   r   Útyping_extensionsr	   r   Ú+torch.distributed._shard.sharded_tensor.apir
   Ú%torch.distributed.checkpoint.metadatar   Útorch.distributed.tensorr   r)   rF   Ú	PATH_ITEMr*   r4   r   Úobjectr2   rE   Ú__all__r   r   r3   r   r:   r   r   ÚprintrX   r   © r   r   ú<module>rj      så  ð÷ JÓ Iß  Ý $ã Ý EÝ AÝ ,ð �#‰I€	Ø�˜C�Ñ €ÙˆCƒL€à€Ø 	¨?Ð :Ñ;€â
O€ð+ /ð +°f¸U¿\¹\Ñ6Jó +ð :Pñ*$Øð*$à�x Ð1°4Ð7Ñ8ð*$ð ˜Ð/°Ð5Ñ6ð*$ð 
ó	*$ð` :Pñ+$Øð+$à�x Ð1°4Ð7Ñ8ð+$ð ˜Ð/°Ð5Ñ6ð+$ð 
ó	+$ð\ØðØ&.ðØ7Fðà	óðH #ñ%Øð%à
ð%ð �t‘8ð%ð ˆ�Xó	%ð( Ø',ñ3Øð3àð3ð ˜˜˜t˜Ñ$ð3ð 
ó	3ð: (-ñ@Ø
ð@àð@ð ˜˜˜t˜Ñ$ð@ð 
ô	@r   