Ë
    g^(hÜ  ã            
       ó´  — d dl mZmZmZ d dlmZmZmZmZm	Z	 d dl
Z
d dlmZ d dlmZ d dlmZ e	eef   Zeedf   Z ed«      ZeZeeef   Zg d	¢Zd
ede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e   dee   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)é    )Ú
CollectionÚMappingÚMutableMapping)ÚCallableÚcastÚOptionalÚTypeVarÚUnionN)Ú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    úd/var/www/skyplay_api_hub/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   r1   z*traverse_state_dict.<locals>._traverse_obj6   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&   r1   s    ``  @@r   r   r      s^   û€ ðœ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_terminalQ   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   r1   z0traverse_state_dict_v_2_3.<locals>._traverse_obja   s„   ø€ Ù˜ÔÙ�D˜%Õ Ü˜œwÔ'ØŸ™›ò 3‘��1Ù˜d¤c¨!£f YÑ.°Õ2ñ3ä˜œtÔ$Ü! %Ó(ò .‘��1Ù˜d a T™k¨1Õ-ñ.ð %r   r2   r6   s    ``  @@r   Útraverse_state_dict_v_2_3r;   D   s^   û€ ðœ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        k(  ri ng «      }t        |t        «      r!t        t        |j                  ||«      «      }Œe |||«       ||   €|||<   ||   }Œ~ |d   }t        |«      t        k(  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_listu   s&   € Ü�#‹h˜#ŠoØ�J‰J�tÔô �#‹h˜#�or   é   éÿÿÿÿ)r   ÚCONTAINER_TYPEr"   r3   ÚintÚrangerA   Útyper*   r   r   Ú
setdefault)	r<   r'   r   Úcur_containerrC   r0   Úprev_keyr7   Údef_vals	            r   r   r   o   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        t           |«      S )z[Retrieve the value at ``path``from ``root_dict``, returning ``default_value`` if not found.)
r   rF   rI   rG   r   r"   rA   r   r   r   )r<   r'   rN   Ú	cur_valueÚparts        r   r   r   �   s€   € ô ”^ YÓ/€IØò :ˆÜ�‹:œÑÜ˜i¬Ô.´#°i³.À4Ò2GØ$Ò$Ü˜I¤wÔ/°4¸yÑ3HØ Ò äœ¨°4©Ó9‰	ð:ô ”œ‘˜YÓ'Ð'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: ú )rT   z DistributedTensor size: z Tensor size: z Type: )rI   r   ÚsizeÚlocal_shardsÚ_print_nestedÚtensorÚmetadataÚshard_offsetsr   Ú_local_tensorr   r   r   )r   rS   rT   Úshards       r   rY   rY   ¡   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.
    )rS   rT   N)rY   r*   )r'   r   rT   s      r   r   r   »   s   € ô �%¤ D£	°YÖ?r   r   )$Úcollections.abcr   r   r   Útypingr   r   r   r	   r
   r   Ú+torch.distributed._shard.sharded_tensor.apir   Ú%torch.distributed.checkpoint.metadatar   Útorch.distributed.tensorr   r*   rG   Ú	PATH_ITEMr+   r5   r   Úobjectr3   rF   Ú__all__r4   r   r   r;   r   r   ÚprintrY   r   © r   r   ú<module>rj      sÝ  ðç ?Ñ ?ß ;Õ ;ã Ý EÝ AÝ ,ð �#�s�(‰O€	Ø�˜C�Ñ €ÙˆCƒL€à€Ø 	¨?Ð :Ñ;€â
O€ð+ /ð +°dó +ð :Pñ'*Øð'*à�x Ð1°4Ð7Ñ8ð'*ð ˜Ð/°Ð5Ñ6ð'*ð 
ó	'*ðZ :Pñ(*Øð(*à�x Ð1°4Ð7Ñ8ð(*ð ˜Ð/°Ð5Ñ6ð(*ð 
ó	(*ðVØðØ&.ðØ7Fðà	óðF "&ñ(Øð(à
ð(ð ˜A‘;ð(ð ˆa�[ó	(ð( Ø',ñ3Øð3àð3ð ˜˜˜t˜Ñ$ð3ð 
ó	3ð: (-ñ@Ø
ð@àð@ð ˜˜˜t˜Ñ$ð@ð 
ô	@r   