§
    ž²ÅjG  ã                  ó  — U d Z ddlmZ ddlmZmZmZmZ ddlm	c m
Z ddlmZ erddlmZ g Zded	<   ej        rÊddlZddlZddlm	c mZ  eej        j        d
¬¦  «        d d„¦   «         ZdZdD ]*Z eee¦  «        Z  eed
¬¦  «        ej        ¦  «         [Œ+[ eej        d
¬¦  «        	 d!d"d„¦   «         Z eej        d¬¦  «        	 d!d#d„¦   «         Zedgz  Z eej         d
¬¦  «        	 d!d$d„¦   «         Z edgz  ZdS dS )%z)
Python polyfills for torch.utils.pytree
é    )Úannotations)ÚAnyÚCallableÚIterableÚTYPE_CHECKINGNé   )Úsubstitute_in_graph)ÚPyTreez	list[str]Ú__all__T)Úcan_constant_fold_throughÚargsr   ÚkwargsÚreturnÚboolc                 ó    — t          d¦  «        ‚)NzeShould not be called directly because the original function will be called in the constant fold path.)Ú
ValueError)r   r   s     úOC:\Projects\Historical\venv\Lib\site-packages\torch/_dynamo/polyfills/pytree.pyÚ_r      s   € õ ðVñ
ô 
ð 	
ó    Ú )Úis_namedtupleÚis_namedtuple_classÚis_namedtuple_instanceÚis_structseqÚis_structseq_classÚis_structseq_instanceÚnamedtuple_fieldsÚstructseq_fieldsÚtreer
   Úis_leafúCallable[[PyTree], bool] | Nonec                óˆ   — | �|� || ¦  «        rdS t           j                             t          | ¦  «        d¬¦  «        €dS dS )NTÚtorch)Ú	namespaceF)ÚoptreeÚregister_pytree_nodeÚgetÚtype©r   r    s     r   Útree_is_leafr*   9   sL   € ð
 ˆ<˜GÐ/°G°G¸D±M´MÐ/Ø�4ÝÔ&×*Ò*­4°©:¬:ÀÐ*ÑIÔIÐQØ�4Øˆur   FúIterable[Any]c              #  óè   K  — | g}|rj|                      ¦   «         }t          ||¬¦  «        r|V — Œ,t          j        ||dd¬¦  «        ^}}|                     t          |¦  «        ¦  «         |°hd S d S )N©r    Tr#   )r    Únone_is_leafr$   )Úpopr*   r%   Útree_flatten_one_levelÚextendÚreversed)r   r    ÚstackÚnodeÚchildrenr   s         r   Ú	tree_iterr6   D   s¦   è è € ð
 �ˆØð 	-Ø—9’9‘;”;ˆDÝ˜D¨'Ð2Ñ2Ô2ð Ø�
�
�
Øå!Ô8ØØØ!Ø!ð	ñ ô ˆLˆH�qð �LŠL� (Ñ+Ô+Ñ,Ô,Ð,ð ð 	-ð 	-ð 	-ð 	-ð 	-r   r6   ú	list[Any]c                ó>   — t          t          | |¬¦  «        ¦  «        S )Nr-   )Úlistr6   r)   s     r   Útree_leavesr:   Z   s   € õ
 •I˜d¨GÐ4Ñ4Ô4Ñ5Ô5Ð5r   r:   )r   r   r   r   r   r   )N)r   r
   r    r!   r   r   )r   r
   r    r!   r   r+   )r   r
   r    r!   r   r7   )!Ú__doc__Ú
__future__r   Útypingr   r   r   r   Útorch.utils._pytreeÚutilsÚ_pytreeÚpython_pytreeÚ
decoratorsr	   Útorch.utils._cxx_pytreer
   r   Ú__annotations__Ú_cxx_pytree_dynamo_traceabler%   Ú	optree._CÚ_cxx_pytreeÚ
cxx_pytreeÚ_CÚis_dict_insertion_orderedr   Ú__nameÚgetattrÚ__funcÚ__python_implementation__r*   r6   r:   © r   r   ú<module>rP      sj  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à ,Ð ,Ð ,Ð ,Ð ,Ð ,ð ð /Ø.Ð.Ð.Ð.Ð.Ð.ð €Ð Ð Ð Ñ ð Ô-ð LØ€M€M€MØÐÐÐà0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ð0àÐØŒ	Ô+Ø"&ðñ ô ð
ð 
ð 
ñ	ô ð
ð €Fð	ð ð ˆð �˜ Ñ(Ô(ˆØCÐÐ˜F¸dÐCÑCÔCØÔ,ñ	
ô 	
ð 	
ð ˆFØàÐ˜Ô0ÈDÐQÑQÔQð 48ðð ð ð ñ RÔQðð Ð˜Ô-ÈÐOÑOÔOð 48ð-ð -ð -ð -ñ PÔOð-ð& �ˆ}Ñ€GàÐ˜Ô/È4ÐPÑPÔPð 48ð6ð 6ð 6ð 6ñ QÔPð6ð �ˆÑ€G€G€GðYLð Lr   