§
    Ÿ²ÅjË  ã            
       óþ  — d dl mZmZmZmZmZ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#dS )é    )
ÚCallableÚcastÚ
CollectionÚListÚMappingÚMutableMappingÚOptionalÚTupleÚ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    úWC:\Projects\Historical\venv\Lib\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„Š|                      ¦   «         D ]\  }} ‰t	          |¦  «        f|¦  «         Œ dS )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dS t          | t          ¦  «        r| }ndS |D ]<}t          |t          t          f¦  «        r ‰|¦  «        s dS ‰� ‰|¦  «        r dS Œ=dS )NFT)r   r   Úlist©r   ÚvaluesÚentryÚ_is_terminalr!   s      €€r   r(   z)traverse_state_dict.<locals>._is_terminal0   s—   ø€ å�e�WÑ%Ô%ð 	Ø�5Ý˜�tÑ$Ô$ð 	ØˆFˆFà�4àð 	ð 	ˆEÝ˜%¥'­4 Ñ1Ô1ð ¸,¸,ÀuÑ:MÔ:Mð Ø�u�uØÐ*¨¨¸uÑ/EÔ/EÐ*Ø�u�uøØˆtr   ÚpathNc                 ó\  •— t          |t          ¦  «        r9|                     ¦   «         D ]"\  }} ‰| t          |¦  «        fz   |¦  «         Œ#d S  ‰|¦  «        r ‰| |¦  «         d S t          |t          t
          f¦  «        r%t          |¦  «        D ]\  }} ‰| |fz   |¦  «         Œd S d S r   )r   r   ÚitemsÚstrr$   ÚtupleÚ	enumerate©r)   r   ÚkÚvÚir(   Ú_traverse_objr    s        €€€r   r3   z*traverse_state_dict.<locals>._traverse_obj@   sæ   ø€ Ý�e�WÑ%Ô%ð 	.ØŸš™œð 3ð 3‘��1Ø�˜d¥c¨!¡f¤f YÑ.°Ñ2Ô2Ð2Ð2ð3ð 3àˆ\˜%Ñ Ô ð 	.ØˆG�D˜%Ñ Ô Ð Ð Ð Ý˜¥¥e˜}Ñ-Ô-ð 	.Ý! %Ñ(Ô(ð .ð .‘��1Ø�˜d a T™k¨1Ñ-Ô-Ð-Ð-ð	.ð 	.ð.ð .r   ©ÚSTATE_DICT_ITEMÚboolÚOBJ_PATHr+   r,   ©r   r    r!   Úkeyr   r(   r3   s    ``  @@r   r   r   $   s¼   øøøø€ ð�Oð µð ð ð ð ð ð ð ð .�Hð .­_ð .Àð .ð .ð .ð .ð .ð .ð .ð .ð !×&Ò&Ñ(Ô(ð *ð *‰
ˆˆUØˆ•s˜3‘x”x�k 5Ñ)Ô)Ð)Ð)ð*ð *r   c                 óÐ   ‡‡‡‡— dt           dt          fˆˆfd„Šdt          dt           ddfˆˆˆfd„Š|                      ¦   «         D ]\  }} ‰t	          |¦  «        f|¦  «         Œ dS )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|                      ¦   «         }nt          | t          ¦  «        r| }ndS |D ]<}t          |t          t          f¦  «        r ‰|¦  «        s dS ‰� ‰|¦  «        r dS Œ=dS )NTF)r   r   r&   r$   r%   s      €€r   r(   z/traverse_state_dict_v_2_3.<locals>._is_terminal[   s¡   ø€ å�e�WÑ%Ô%ð 	Ø—\’\‘^”^ˆFˆFÝ˜�tÑ$Ô$ð 	ØˆFˆFà�4àð 	ð 	ˆEÝ˜%¥'­4 Ñ1Ô1ð ¸,¸,ÀuÑ:MÔ:Mð Ø�u�uØÐ*¨¨¸uÑ/EÔ/EÐ*Ø�u�uøØˆtr   r)   Nc                 óN  •—  ‰|¦  «        r ‰| |¦  «         d S t          |t          ¦  «        r9|                     ¦   «         D ]"\  }} ‰| t          |¦  «        fz   |¦  «         Œ#d S t          |t          ¦  «        r%t          |¦  «        D ]\  }} ‰| |fz   |¦  «         Œd S d S r   )r   r   r+   r,   r$   r.   r/   s        €€€r   r3   z0traverse_state_dict_v_2_3.<locals>._traverse_objk   sâ   ø€ Øˆ<˜ÑÔð 	.ØˆG�D˜%Ñ Ô Ð Ð Ð Ý˜�wÑ'Ô'ð 	.ØŸš™œð 3ð 3‘��1Ø�˜d¥c¨!¡f¤f YÑ.°Ñ2Ô2Ð2Ð2ð3ð 3å˜�tÑ$Ô$ð 	.Ý! %Ñ(Ô(ð .ð .‘��1Ø�˜d a T™k¨1Ñ-Ô-Ð-Ð-ð	.ð 	.ð.ð .r   r4   r8   s    ``  @@r   Útraverse_state_dict_v_2_3r=   N   s¼   øøøø€ ð�Oð µð ð ð ð ð ð ð ð .�Hð .­_ð .Àð .ð .ð .ð .ð .ð .ð .ð .ð !×&Ò&Ñ(Ô(ð *ð *‰
ˆˆUØˆ•s˜3‘x”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          |                     ||¦  «        ¦  «        }Œƒ |||¦  «         ||         €|||<   ||         }Œ¥|d         }t          |¦  «        t          k    r* |t          t          t                   |¦  «        |¦  «         |||<   dS )z>Set ``value`` in ``root_dict`` along the ``path`` object path.ÚlstÚidxr   Nc                 ó€   — t          | ¦  «        |k    r*|                      d ¦  «         t          | ¦  «        |k    °(d S d S r   )ÚlenÚappend)r@   rA   s     r   Úextend_listz set_element.<locals>.extend_list   s<   € Ý�#‰hŒh˜#ŠoˆoØ�JŠJ�tÑÔÐõ �#‰hŒh˜#Šoˆoˆoˆoˆoˆor   é   éÿÿÿÿ)r   ÚCONTAINER_TYPEr   r5   ÚintÚrangerC   Útyper,   r   r   Ú
setdefault)	r>   r)   r   Úcur_containerrE   r2   Úprev_keyr9   Údef_vals	            r   r   r   y   sS  € õ �¨Ñ3Ô3€Mð��oÔ.ð µSð ¸Tð ð ð ð õ �1•c˜$‘i”iÑ Ô ð 4ð 4ˆØ˜˜A™”;ˆØ�1ŒgˆÝ•­d°3©i¬i½3Ò.>Ð.>¨¨ÀBÑGÔGˆå�m¥WÑ-Ô-ð 	4Ý Ý × 8Ò 8¸À7Ñ KÔ Kñô ˆMˆMð ˆK˜ xÑ0Ô0Ð0Ø˜XÔ&Ð.Ø*1�˜hÑ'Ø)¨(Ô3ˆMˆMà
ˆrŒ(€CÝˆC�y„y•CÒÐØˆ•D��oÔ.°Ñ>Ô>ÀÑDÔDÐDà€M�#ÑÐÐr   Údefault_valuec                 ól  — t          t          | ¦  «        }|D ]}}t          |¦  «        t          u r-t	          |t
          ¦  «        rt          |¦  «        |k     r|c S nt	          |t          ¦  «        r||vr|c S t          t          ||         ¦  «        }Œ~t          t          t                   |¦  «        S )z[Retrieve the value at ``path``from ``root_dict``, returning ``default_value`` if not found.)
r   rH   rK   rI   r   r$   rC   r   r	   r   )r>   r)   rP   Ú	cur_valueÚparts        r   r   r   ™   s¸   € õ •^ YÑ/Ô/€IØð :ð :ˆÝ�‰:Œ:�ÐÐÝ˜i­Ñ.Ô.ð %µ#°i±.´.À4Ò2GÐ2GØ$Ð$Ð$Ð$ð 3Hå˜I¥wÑ/Ô/ð 	!°4¸yÐ3HÐ3HØ Ð Ð Ð å�¨°4¬Ñ9Ô9ˆ	ˆ	Ý•�”˜YÑ'Ô'Ð'r   Ú ÚprefixÚ	print_func                 óF  — t          | ¦  «        t          u r_ ||› d|                      ¦   «         › �¦  «         |                      ¦   «         D ]&}t	          |j        |j        j        › d�|¬¦  «         Œ'd S t          | ¦  «        t          u r: ||› d|                      ¦   «         › �¦  «         t	          | j	        |¬¦  «         d S t          | t          j        ¦  «        r$ ||› d|                      ¦   «         › �¦  «         d S  ||› dt          | ¦  «        › �¦  «         d S )Nz ShardedTensor size: ú )rV   z DistributedTensor size: z Tensor size: z Type: )rK   r   ÚsizeÚlocal_shardsÚ_print_nestedÚtensorÚmetadataÚshard_offsetsr   Ú_local_tensorr   r   r   )r   rU   rV   Úshards       r   r[   r[   «   sd  € õ
 ˆE�{„{•mÐ#Ð#Øˆ	�VÐ@Ð@°%·*²*±,´,Ð@Ð@ÑAÔAÐAØ×'Ò'Ñ)Ô)ð 	ð 	ˆEÝØ”Ø”>Ô/Ð2Ð2Ð2Ø#ðñ ô ð ð ð	ð 	õ 
ˆe‰Œ�Ð	!Ð	!Øˆ	�VÐDÐD°e·j²j±l´lÐDÐDÑEÔEÐEåØÔØð	
ñ 	
ô 	
ð 	
ð 	
ð 	
õ 
�E�5œ<Ñ	(Ô	(ð 3Øˆ	�VÐ9Ð9¨5¯:ª:©<¬<Ð9Ð9Ñ:Ô:Ð:Ð:Ð:àˆ	�VÐ1Ð1¥D¨¡K¤KÐ1Ð1Ñ2Ô2Ð2Ð2Ð2r   c                 óD   — t          |t          | ¦  «        |¬¦  «         dS )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.
    )rU   rV   N)r[   r,   )r)   r   rV   s      r   r   r   Å   s%   € õ �%¥ D¡	¤	°YÐ?Ñ?Ô?Ð?Ð?Ð?r   r   )$Útypingr   r   r   r   r   r   r	   r
   r   r   r   Ú+torch.distributed._shard.sharded_tensor.apir   Ú%torch.distributed.checkpoint.metadatar   Útorch.distributed.tensorr   r,   rI   Ú	PATH_ITEMr7   r   Úobjectr5   rH   Ú__all__r6   r   r   r=   r   r   Úprintr[   r   © r   r   ú<module>rk      s  ððð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð €€€Ø EÐ EÐ EÐ EÐ EÐ EØ AÐ AÐ AÐ AÐ AÐ AØ ,Ð ,Ð ,Ð ,Ð ,Ð ,ð �#�s�(ŒO€	Ø�˜C�Ô €Ø€GˆC�L„L€à€Ø 	¨?Ð :Ô;€à
OÐ
OÐ
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àð3ð ˜˜˜t˜Ô$ð3ð 
ð	3ð 3ð 3ð 3ð: (-ð@ð @Ø
ð@àð@ð ˜˜˜t˜Ô$ð@ð 
ð	@ð @ð @ð @ð @ð @r   