§
    ŠŠtjÏc  ã            	      óz  — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlZddlZddlZddlmZmZmZmZmZmZmZmZ ddlmc mZ ddlmc mZ ddlmZmZ d	d
l m!Z! e
rddl"Z"ddl#m$Z$m%Z%m&Z& ddl'm(Z(m)Z) ddlm*Z* g d¢Z+ ed¦  «        Z, ed¦  «        Z- ed¦  «        Z. e!ej/        j0        d¬¦  «        d_d„¦   «         Z1dZ2defdefdefdefdefd efd!efd"effD ],\  Z2Z3  e!e3d¬¦  «        e3j4        ¦  «         e5¦   «         e2<   [3Œ-[2 e!ej6        d¬¦  «        	 d`d#dd$œdad,„¦   «         Z6 e!ej7        d#¬¦  «        	 d`d#dd$œdbd.„¦   «         Z7 e!ej8        d¬¦  «        	 d`d#dd$œdcd0„¦   «         Z8 G d1„ d2e9¦  «        Z: e:¦   «         Z;[: edd¬3¦  «         G d4„ d5¦  «        ¦   «         Z<ddd8„Z= e!ej>        d#¬¦  «        d#dd$œded9„¦   «         Z> e!ej?        d#¬¦  «        	 dfd#dd$œdgd=„¦   «         Z? e!ej@        d#¬¦  «        	 dfd#dd$œdhd@„¦   «         Z@ e!ejA        d#¬¦  «        	 d`d#dd$œdidB„¦   «         ZA e!ej/        jB        d#¬¦  «        	 	 	 djdkdD„¦   «         ZC e!ejD        d#¬¦  «        	 d`d#dd$œdldF„¦   «         ZD e!ej/        jE        d#¬¦  «        	 	 	 djdmdG„¦   «         ZF e!ejG        d#¬¦  «        	 d`d#dd$œdndH„¦   «         ZG e!ejH        d#¬¦  «        dodK„¦   «         ZHejI         J                     eKd¦  «        ¦  «        ZLeL€ eMdL¦  «        ‚ e!eLjN        dd¬M¦  «        dpdR„¦   «         ZO ejP        d#dS¬T¦  «        5  ejI         J                    eQ¦  «        ZReR€ eMdU¦  «        ‚	 ddd¦  «         n# 1 swxY w Y    e!eRjS        dd¬M¦  «        dqdY„¦   «         ZT e!eRjN        dd¬M¦  «        drd^„¦   «         ZUdS )sz)
Python polyfills for torch.utils.pytree
é    )Úannotations)Údeque)Ú	dataclassÚfield)ÚAnyÚTYPE_CHECKINGÚTypeVarN)Úis_namedtupleÚis_namedtuple_classÚis_namedtuple_instanceÚis_structseqÚis_structseq_classÚis_structseq_instanceÚnamedtuple_fieldsÚstructseq_fields)ÚBUILTIN_TYPESÚSTANDARD_DICT_TYPESé   )Úsubstitute_in_graph)ÚCallableÚIterableÚMapping)ÚSelfÚTypeIs)ÚPyTree)r
   r   r   r   r   r   r   r   Útreespec_leafÚtreespec_tupleÚtreespec_dictÚtree_is_leafÚ	tree_iterÚtree_leavesÚtree_flattenÚtree_flatten_with_pathÚtree_structureÚtree_unflattenÚ_TÚ_KTÚ_VTT)Ú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     ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/polyfills/pytree.pyÚ_r1   E   s   € õ ð	Rñô ð ó    Ú r
   r   r   r   r   r   r   r   F©Únone_is_leafÚ	namespaceÚis_leafúCallable[[PyTree], bool] | NoneÚtreer   r5   r6   Ústrc              óŒ   — | €|s|� || ¦  «        rdS t           j                             t          | ¦  «        |¬¦  «        €dS dS )NT©r6   F)ÚoptreeÚregister_pytree_nodeÚgetÚtype©r9   r7   r5   r6   s       r0   r   r   e   sP   € ð 	ˆ˜ˆ¨7Ð+>À7À7È4Á=Ä=Ð+>ØˆtÝÔ"×&Ò&¥t¨D¡z¤z¸YÐ&ÑGÔGÐOØˆtØˆ5r2   úIterable[Any]c            #  óì   K  — | g}|rl|                      ¦   «         }t          ||||¬¦  «        r|V — Œ.t          j        ||||¬¦  «        ^}}|                     t          |¦  «        ¦  «         |°jd S d S ©N©r7   r5   r6   )Úpopr   r=   Útree_flatten_one_levelÚextendÚreversed)r9   r7   r5   r6   ÚstackÚnodeÚchildrenr1   s           r0   r    r    u   s¶   è è € ð ˆF€EØ
ð )Ø�yŠy‰{Œ{ˆÝØØØ%Øð	
ñ 
ô 
ð 	ð ˆJˆJˆJØåÔ4ØØØ%Øð	
ñ 
ô 
ˆˆ�1ð 	�Š•X˜hÑ'Ô'Ñ(Ô(Ð(ð# ð )ð )ð )ð )ð )r2   ú	list[Any]c              óB   — t          t          | |||¬¦  «        ¦  «        S rD   )Úlistr    rA   s       r0   r!   r!   “   s4   € õ ÝØØØ%Øð		
ñ 	
ô 	
ñô ð r2   c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )	Ú	_Asterisk© r,   r   c                óH   •— t          ¦   «                              | d¦  «        S ©NÚ*)ÚsuperÚ__new__)ÚclsÚ	__class__s    €r0   rW   z_Asterisk.__new__©   s   ø€ Ý‰wŒw�Š˜s CÑ(Ô(Ð(r2   r:   c                ó   — dS rT   rR   ©Úselfs    r0   Ú__repr__z_Asterisk.__repr__¬   s   € Øˆsr2   )r,   r   ©r,   r:   )Ú__name__Ú
__module__Ú__qualname__Ú	__slots__rW   r]   Ú__classcell__)rY   s   @r0   rQ   rQ   ¦   sV   ø€ € € € € Ø€Ið)ð )ð )ð )ð )ð )ðð ð ð ð ð ð ð r2   rQ   )ÚfrozenÚslotsc                  ó8  — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   ded<   ded<    ed¬¦  «        Zded<    ed¬¦  «        Zded<    ed¬¦  «        Zded<   d0d„Z	d1d„Z
d2d„Zed3d„¦   «         Zd4d„Zd5d„Zd6d „Zd7d"„Zd8d$„Zd9d&„Zd:d'„Zd;d+„Zd<d.„Zd/S )=Ú
PyTreeSpecz0Analog for :class:`optree.PyTreeSpec` in Python.ztuple[PyTreeSpec, ...]Ú	_childrenúbuiltins.type | NoneÚ_typer   Ú	_metadataztuple[Any, ...]Ú_entriesz7Callable[[Any | None, Iterable[PyTree]], PyTree] | NoneÚ_unflatten_funcr-   r5   r:   r6   F)ÚinitÚintÚ	num_nodesÚ
num_leavesÚnum_childrenr,   ÚNonec               óV  — | j         €tt          | j        ¦  «        dk    rt          d¦  «        ‚| j        �t          d¦  «        ‚| j        dk    rt          d¦  «        ‚| j        �t          d¦  «        ‚d}d}d}nYt          | j        ¦  «        st          d¦  «        ‚d}d}| j        D ]}||j        z  }||j	        z  }Œt          | j        ¦  «        }t                               | d	|¦  «         t                               | d
|¦  «         t                               | d|¦  «         d S )Nr   zLeaf node must have no childrenzLeaf node must have no metadatarR   zLeaf node must have no entriesz%Leaf node must have no unflatten_funcé   ú1Non-leaf node must have a callable unflatten_funcrp   rq   rr   )rj   Úlenrh   ÚAssertionErrorrk   rl   rm   Úcallablerp   rq   ÚobjectÚ__setattr__)r\   rp   rq   rr   Úchilds        r0   Ú__post_init__zPyTreeSpec.__post_init__Ä   sG  € ØŒ:ÐÝ�4”>Ñ"Ô" aÒ'Ð'Ý$Ð%FÑGÔGÐGØŒ~Ð)Ý$Ð%FÑGÔGÐGØŒ} Ò"Ð"Ý$Ð%EÑFÔFÐFØÔ#Ð/Ý$Ð%LÑMÔMÐMØˆIØˆJØˆLˆLå˜DÔ0Ñ1Ô1ð Ý$ØGñô ð ð ˆIØˆJØœð /ð /�Ø˜Uœ_Ñ,�	Ø˜eÔ.Ñ.�
�
Ý˜tœ~Ñ.Ô.ˆLå×Ò˜4 ¨iÑ8Ô8Ð8Ý×Ò˜4 ¨zÑ:Ô:Ð:Ý×Ò˜4 °Ñ>Ô>Ð>Ð>Ð>r2   c               ó¤   ‡ ‡— dˆˆ fd„Št           ‰‰ ¦  «        ¦  «        g‰ j        rdgng ¢d‰ j        ›�‘}dd	                     |¦  «        › d
�S )NÚtreespecrg   r,   r:   c                óJ  •— |                       ¦   «         r| j        �t          d¦  «        ‚t          S | j        €t          d¦  «        ‚t	          | j        ¦  «        st          d¦  «        ‚ˆfd„| j        D ¦   «         }| j        t          v sO| j        t          d ¦  «        u r‰j        r2t          j
        | j        ¦  «        st          j        | j        ¦  «        r|                      | j        |¦  «        S d| j        j        › d| j        ›dd                     |¦  «        › d	�S )
Nz!Leaf treespec must have type Noneú"Non-leaf treespec must have a typez5Non-leaf treespec must have a callable unflatten_funcc                ó&   •— g | ]} ‰|¦  «        ‘ŒS rR   rR   )Ú.0ÚsubspecÚhelpers     €r0   ú
<listcomp>z7PyTreeSpec.__repr__.<locals>.helper.<locals>.<listcomp>î   s.   ø€ ð (ð (ð (Ø$+���w‘”ð(ð (ð (r2   zCustomTreeNode(ú[z], [ú, z]))r7   r@   rx   Ú	_asteriskry   rm   rh   r   r5   r=   r   r   rk   r_   Újoin)r   Úchildren_representationsr…   r\   s     €€r0   r…   z#PyTreeSpec.__repr__.<locals>.helperâ   s_  ø€ Ø×ÒÑ!Ô!ð !Ø”=Ð,Ý(Ð)LÑMÔMÐMÝ Ð àŒ}Ð$Ý$Ð%IÑJÔJÐJÝ˜HÔ4Ñ5Ô5ð Ý$ØKñô ð ð(ð (ð (ð (Ø/7Ô/Að(ñ (ô (Ð$ð ”¥Ð.Ð.Ø”M¥T¨$¡Z¤ZÐ/Ð/¸Ô8IÐ/ÝÔ-¨h¬mÑ<Ô<ð 0åÔ,¨X¬]Ñ;Ô;ð 0ð  ×/Ò/ØÔ&Ø,ñô ð ð
< (¤-Ô"8ð <ð <¸8Ô;Mð <ð <Ø—I’IÐ6Ñ7Ô7ð<ð <ð <ðr2   Ú
NoneIsLeafz
namespace=zPyTreeSpec(rˆ   ú))r   rg   r,   r:   )r:   r5   r6   rŠ   )r\   Úinnerr…   s   ` @r0   r]   zPyTreeSpec.__repr__á   sŒ   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	õ> ���t‘”ÑÔð
à $Ô 1Ð9ˆ|ˆnˆn°rð
ð ,˜œÐ+Ð+ð
ˆð
 1˜TŸYšY uÑ-Ô-Ð0Ð0Ð0Ð0r2   c               ó   — | j         S ©N)rq   r[   s    r0   Ú__len__zPyTreeSpec.__len__  s
   € ØŒÐr2   c               ó   — | j         S r�   )rj   r[   s    r0   r@   zPyTreeSpec.type
  s
   € àŒzÐr2   c               ó.   — | j         dk    o
| j        dk    S )Nru   )rp   rq   r[   s    r0   r7   zPyTreeSpec.is_leaf  s   € ØŒ~ Ò"Ð; t¤¸!Ò';Ð;r2   úlist[tuple[Any, ...]]c               óH   ‡‡— d	ˆˆfd„Šg Š ‰| g ¦  «         d„ ‰D ¦   «         S )
Nr   rg   Úpath_prefixrM   r,   rs   c                óÂ   •— |                       ¦   «         r‰                     |¦  «         d S t          | j        | j        d¬¦  «        D ]\  }} ‰|||gz   ¦  «         Œd S ©NT©Ústrict)r7   ÚappendÚziprl   rh   )r   r–   Úentryr„   r…   Úpathss       €€r0   r…   z PyTreeSpec.paths.<locals>.helper  s‡   ø€ Ø×ÒÑ!Ô!ð Ø—’˜[Ñ)Ô)Ð)Ø�å"%ØÔ!ØÔ"Øð#ñ #ô #ð 7ð 7‘��wð
 ��w ¨u¨gÑ 5Ñ6Ô6Ð6Ð6ð7ð 7r2   c                ó,   — g | ]}t          |¦  «        ‘ŒS rR   )Útuple©rƒ   Úpaths     r0   r†   z$PyTreeSpec.paths.<locals>.<listcomp>   s   € Ð.Ð.Ð. •�d‘”Ð.Ð.Ð.r2   )r   rg   r–   rM   r,   rs   rR   )r\   r…   rž   s    @@r0   rž   zPyTreeSpec.paths  sT   øø€ ð
	7ð 
	7ð 
	7ð 
	7ð 
	7ð 
	7ð 
	7ð "$ˆØˆˆt�RÑÔÐØ.Ð.¨Ð.Ñ.Ô.Ð.r2   úlist[optree.PyTreeAccessor]c               óH   ‡‡— d	ˆˆfd„Šg Š ‰| g ¦  «         d„ ‰D ¦   «         S )
Nr   rg   Úentry_path_prefixúlist[optree.PyTreeEntry]r,   rs   c           
     ó˜  •— |                       ¦   «         r‰                     |¦  «         d S | j        }|€t          d¦  «        ‚t          j                             || j        ¬¦  «        }|€t          d|› �¦  «        ‚|j        }|j	        }t          | j        | j        d¬¦  «        D ] \  }} ‰	|| ||||¦  «        gz   ¦  «         Œ!d S )Nr�   r<   z!No pytree handler registered for Tr™   )r7   r›   r@   rx   r=   r>   r?   r6   ÚkindÚpath_entry_typerœ   rl   rh   )
r   r¥   Ú	node_typeÚhandlerr¨   r©   r�   r„   Úentry_pathsr…   s
           €€r0   r…   z$PyTreeSpec.accessors.<locals>.helper#  s  ø€ ð ×ÒÑ!Ô!ð Ø×"Ò"Ð#4Ñ5Ô5Ð5Ø�à œˆIØÐ Ý$Ð%IÑJÔJÐJÝÔ1×5Ò5Ø XÔ%7ð 6ñ ô ˆGð ˆÝ$Ð%TÈÐ%TÐ%TÑUÔUÐUØ&-¤lˆDØ8?Ô8OˆOå"%ØÔ!ØÔ"Øð#ñ #ô #ð ð ‘��wð
 �ØØ%¨¨¸À	È4Ñ)PÔ)PÐ(QÑQñô ð ð ðð r2   c                ó6   — g | ]}t          j        |¦  «        ‘ŒS rR   )r=   ÚPyTreeAccessorr¡   s     r0   r†   z(PyTreeSpec.accessors.<locals>.<listcomp>B  s#   € ÐDÐDÐD°•Ô% dÑ+Ô+ÐDÐDÐDr2   )r   rg   r¥   r¦   r,   rs   rR   )r\   r¬   r…   s    @@r0   Ú	accessorszPyTreeSpec.accessors"  sT   øø€ ð	ð 	ð 	ð 	ð 	ð 	ð 	ð: 79ˆØˆˆt�RÑÔÐØDÐD¸ÐDÑDÔDÐDr2   úlist[PyTreeSpec]c               ó*   — t          | j        ¦  «        S r�   )rO   rh   r[   s    r0   rL   zPyTreeSpec.childrenD  s   € Ý�D”NÑ#Ô#Ð#r2   Úindexc               ó   — | j         |         S r�   )rh   ©r\   r²   s     r0   r|   zPyTreeSpec.childG  s   € ØŒ~˜eÔ$Ð$r2   rM   c               ó*   — t          | j        ¦  «        S r�   )rO   rl   r[   s    r0   ÚentrieszPyTreeSpec.entriesJ  s   € Ý�D”MÑ"Ô"Ð"r2   c               ó   — | j         |         S r�   )rl   r´   s     r0   r�   zPyTreeSpec.entryM  s   € ØŒ}˜UÔ#Ð#r2   r9   r   úlist[PyTree]c               ó6   ‡ ‡— d
ˆˆ fd	„Šg } ‰‰ ||¦  «         |S )Nr   rg   rK   r   Úsubtreesr¸   r,   rs   c           	     ó8  •‡— |                       ¦   «         r|                     ‰¦  «         d S t          ‰¦  «        }| j        t          vr¯|| j        k    rt	          d| j        ›d|›d�¦  «        ‚t          j        ‰‰j        ‰j        ¬¦  «        ^}}}t          |¦  «        | j
        k    r(t	          d| j
        › dt          |¦  «        › d�¦  «        ‚|| j        k    rt	          d| j        ›d�¦  «        ‚�nv| j        t          v o|t          v }|s&|| j        k    rt	          d| j        ›d|›d�¦  «        ‚t          ‰¦  «        | j
        k    r(t	          d| j
        › dt          ‰¦  «        › d�¦  «        ‚|rš|                      ¦   «         }t          ‰¦  «        }	t          |¦  «        }
|	|
k    rS|
                     |	¦  «        }|	                     |
¦  «        }d}|r|d	|› �z  }|r|d
|› �z  }t	          d|› d�¦  «        ‚ˆfd„|D ¦   «         }n[t          j        ‰‰j        ‰j        ¬¦  «        ^}}}|t           ur.|| j        k    r#t	          d| j        ›d| j        ›d|›d�¦  «        ‚t#          || j        d¬¦  «        D ]\  }} ‰|||¦  «         Œd S )NzType mismatch; expected z
, but got ú.r4   zNode arity mismatch; expected z+Node context mismatch for custom node type zNode type mismatch; expected r3   z; missing key(s): z; extra key(s): zNode keys mismatchc                ó    •— g | ]
}‰|         ‘ŒS rR   rR   )rƒ   ÚkeyrK   s     €r0   r†   z<PyTreeSpec.flatten_up_to.<locals>.helper.<locals>.<listcomp>‘  s   ø€ ÐCÐCÐC¨c  S¤	ÐCÐCÐCr2   z%Node metadata mismatch for node type z; expected Tr™   )r7   r›   r@   r   r/   r=   rG   r5   r6   rw   rr   rk   r   r¶   ÚsetÚ
differencer   rœ   rh   )r   rK   rº   rª   rL   Úmetadatar1   Úboth_standard_dictÚexpected_keysÚgot_key_setÚexpected_key_setÚmissing_keysÚ
extra_keysÚmessageÚsubtreer„   r…   r\   s    `              €€r0   r…   z(PyTreeSpec.flatten_up_to.<locals>.helperQ  sÝ  øø€ ð
 ×ÒÑ!Ô!ð Ø—’ Ñ%Ô%Ð%Ø�å˜T™
œ
ˆIØŒ}¥MÐ1Ð1à ¤Ò-Ð-Ý$ðNØ$,¤MðNð NØ?HðNð Nð Nñô ð õ
 *0Ô)FØØ!%Ô!2Ø"œnð*ñ *ô *Ð&�˜( Qõ
 �x‘=”= HÔ$9Ò9Ð9Ý$ðVØ$,Ô$9ðVð VÝEHÈÁ]Ä]ðVð Vð Vñô ð ð ˜xÔ1Ò1Ð1Ý$ØXÀhÄmÐXÐXÐXñô ð ñ 2ð ”MÕ%8Ð8ð 9Ø!Õ%8Ð8ð #ð *ð ¨i¸8¼=Ò.HÐ.HÝ$ðNØ$,¤MðNð NØ?HðNð Nð Nñô ð õ �t‘9”9 Ô 5Ò5Ð5Ý$ðRØ$,Ô$9ðRð RÝEHÈÁYÄYðRð Rð Rñô ð ð
 &ð à$,×$4Ò$4Ñ$6Ô$6�MÝ"% d¡)¤)�KÝ'*¨=Ñ'9Ô'9Ð$Ø"Ð&6Ò6Ð6Ø'7×'BÒ'BÀ;Ñ'OÔ'O˜Ø%0×%;Ò%;Ð<LÑ%MÔ%M˜
Ø"$˜Ø'ð KØ#Ð'J¸LÐ'JÐ'JÑJ˜GØ%ð GØ#Ð'F¸*Ð'FÐ'FÑF˜GÝ(Ð)H¸gÐ)HÐ)HÐ)HÑIÔIÐIØCÐCÐCÐC°]ÐCÑCÔC�H�Hõ .4Ô-JØØ%)Ô%6Ø"&¤.ð.ñ .ô .Ð*�H˜h¨ð "­Ð.Ð.Ø" hÔ&8Ò8Ð8Ý(ðVÀHÄMð Vð VØ(0Ô(:ðVð VØHPðVð Vð Vñô ð õ
 %(¨°(Ô2DÈTÐ$RÑ$RÔ$Rð 3ð 3Ñ �˜Ø��w ¨Ñ2Ô2Ð2Ð2ð3ð 3r2   )r   rg   rK   r   rº   r¸   r,   rs   rR   )r\   r9   rº   r…   s   `  @r0   Úflatten_up_tozPyTreeSpec.flatten_up_toP  sO   øø€ ðQ	3ð Q	3ð Q	3ð Q	3ð Q	3ð Q	3ð Q	3ðf "$ˆØˆˆt�T˜8Ñ$Ô$Ð$Øˆr2   ÚleavesrB   c          	     ó*  — t          |t          t          f¦  «        st          |¦  «        }t          |¦  «        | j        k    r+t          dt          |¦  «        › d| j        › d| › d�¦  «        ‚|                      ¦   «         r|d         S d}d}g }| j        D ]>}||j        z  }|                     | 	                    |||…         ¦  «        ¦  «         |}Œ?t          | j        ¦  «        st          d¦  «        ‚|                      | j        |¦  «        S )Nz0treespec.unflatten(leaves): `leaves` has length z, but the spec refers to a pytree that holds z items (z).r   rv   )Ú
isinstancerO   r    rw   rq   r/   r7   rh   r›   Ú	unflattenry   rm   rx   rk   )r\   rË   ÚstartÚendrº   r„   s         r0   rÎ   zPyTreeSpec.unflatten¨  s6  € Ý˜&¥4­ -Ñ0Ô0ð 	"Ý˜&‘\”\ˆFÝˆv‰;Œ;˜$œ/Ò)Ð)Ýð#Å3ÀvÁ;Ä;ð #ð #Ø>B¼oð#ð #àð#ð #ð #ñô ð ð
 �<Š<‰>Œ>ð 	Ø˜!”9Ðð ˆØˆØˆØ”~ð 	ð 	ˆGØ�7Ô%Ñ%ˆCØ�OŠO˜G×-Ò-¨f°U¸3°YÔ.?Ñ@Ô@ÑAÔAÐAØˆEˆEå˜Ô,Ñ-Ô-ð 	VÝ Ð!TÑUÔUÐUØ×#Ò# D¤N°HÑ=Ô=Ð=r2   N)r,   rs   r^   )r,   ro   )r,   ri   )r,   r-   )r,   r”   )r,   r£   )r,   r°   )r²   ro   r,   rg   )r,   rM   )r²   ro   r,   r   )r9   r   r,   r¸   )rË   rB   r,   r   )r_   r`   ra   Ú__doc__Ú__annotations__r   rp   rq   rr   r}   r]   r‘   Úpropertyr@   r7   rž   r¯   rL   r|   r¶   r�   rÊ   rÎ   rR   r2   r0   rg   rg   ´   sß  € € € € € € à:Ð:à%Ð%Ð%Ñ%ØÐÐÑØ€N€N�NØÐÐÑØLÐLÐLÑLØÐÐÑØ€N€N�Nà�U Ð&Ñ&Ô&€IÐ&Ð&Ð&Ñ&Ø�e Ð'Ñ'Ô'€JÐ'Ð'Ð'Ñ'Ø˜ 5Ð)Ñ)Ô)€LÐ)Ð)Ð)Ñ)ð?ð ?ð ?ð ?ð:$1ð $1ð $1ð $1ðLð ð ð ð ðð ð ñ „Xðð<ð <ð <ð <ð/ð /ð /ð /ð" Eð  Eð  Eð  EðD$ð $ð $ð $ð%ð %ð %ð %ð#ð #ð #ð #ð$ð $ð $ð $ðVð Vð Vð Vðp>ð >ð >ð >ð >ð >r2   rg   Úobjú+TypeIs[PyTreeSpec | python_pytree.TreeSpec]c               óD   — t          | t          t          j        f¦  «        S r�   )rÍ   rg   Úpython_pytreeÚTreeSpec)rÔ   s    r0   Ú_is_pytreespec_instancerÙ   Â  s   € Ý�c�J­Ô(>Ð?Ñ@Ô@Ð@r2   c           	     ó.   — t          dd d dd | d¬¦  «        S )NrR   r3   r4   )rg   r4   s     r0   r   r   Æ  s0   € õ Ø
ØØØ
ØØ!Øðñ ô ð r2   rR   ÚiterableúIterable[PyTreeSpec]c              óV  ‡‡— t          | ¦  «        }t          d„ |D ¦   «         ¦  «        rt          d|›d�¦  «        ‚t          ˆfd„|D ¦   «         ¦  «        rt          d‰› d|›d�¦  «        ‚t          ˆfd„|D ¦   «         ¦  «        rt          d‰›d|›d�¦  «        ‚t          j                             t           ‰¬	¦  «        }|€t          d
¦  «        ‚t          t          |¦  «        t           d t          t          t          |¦  «        ¦  «        ¦  «        |j
        ‰‰¬¦  «        S )Nc              3  ó6   K  — | ]}t          |¦  «         V — Œd S r�   ©rÙ   ©rƒ   r|   s     r0   ú	<genexpr>z!treespec_tuple.<locals>.<genexpr>ê  s.   è è € Ð
DÐ
D°%Õ& uÑ-Ô-Ð-Ð
DÐ
DÐ
DÐ
DÐ
DÐ
Dr2   z&Expected a tuple of PyTreeSpecs, got: r¼   c              3  ó.   •K  — | ]}|j         ‰k    V — Œd S r�   ©r5   ©rƒ   r|   r5   s     €r0   rá   z!treespec_tuple.<locals>.<genexpr>ì  s+   øè è € Ð
DÐ
D°%ˆ5Ô Ò-Ð
DÐ
DÐ
DÐ
DÐ
DÐ
Dr2   úYAll children PyTreeSpecs must have the same `none_is_leaf` value as the parent; expected ú, got: c              3  ó.   •K  — | ]}|j         ‰d fvV — ŒdS ©r3   Nr<   ©rƒ   r|   r6   s     €r0   rá   z!treespec_tuple.<locals>.<genexpr>ñ  s.   øè è € Ð
HÐ
H°eˆ5Œ? 9¨b /Ð1Ð
HÐ
HÐ
HÐ
HÐ
HÐ
Hr2   úVAll children PyTreeSpecs must have the same `namespace` value as the parent; expected r<   z&No pytree handler registered for tupler4   )r    Úanyr/   r=   r>   r?   rx   rg   Úrangerw   Úunflatten_func)rÛ   r5   r6   rL   r«   s    ``  r0   r   r   Ü  s‹  øø€ õ �X‰Œ€HÝ
Ð
DÐ
D¸8Ð
DÑ
DÔ
DÑDÔDð QÝÐOÀ(ÐOÐOÐOÑPÔPÐPÝ
Ð
DÐ
DÐ
DÐ
D¸8Ð
DÑ
DÔ
DÑDÔDð 
ÝðJØ'3ðJð JØ<DðJð Jð Jñ
ô 
ð 	
õ Ð
HÐ
HÐ
HÐ
H¸xÐ
HÑ
HÔ
HÑHÔHð 
ÝðIØ'0ðIð IØ;CðIð Ið Iñ
ô 
ð 	
õ Ô)×-Ò-­e¸yÐ-ÑIÔI€GØ€ÝÐEÑFÔFÐFÝÝˆh‰ŒÝØÝ�e•C˜‘M”MÑ"Ô"Ñ#Ô#ØÔØ!Øðñ ô ð r2   Úmappingú;Mapping[Any, PyTreeSpec] | Iterable[tuple[Any, PyTreeSpec]]c         	     ó0  ‡‡— t          | fi |¤Ž}t          d„ |                     ¦   «         D ¦   «         ¦  «        rt          d|›d�¦  «        ‚t          ˆfd„|                     ¦   «         D ¦   «         ¦  «        rt          d‰› d|›d�¦  «        ‚t          ˆfd„|                     ¦   «         D ¦   «         ¦  «        rt          d‰›d|›d�¦  «        ‚t	          j        |‰‰¬	¦  «        \  }}}}t          t          |¦  «        t           |||‰‰¬	¦  «        S )
Nc              3  ó6   K  — | ]}t          |¦  «         V — Œd S r�   rß   rà   s     r0   rá   z treespec_dict.<locals>.<genexpr>  s.   è è € Ð
HÐ
H°%Õ& uÑ-Ô-Ð-Ð
HÐ
HÐ
HÐ
HÐ
HÐ
Hr2   z)Expected a dictionary of TreeSpecs, got: r¼   c              3  ó.   •K  — | ]}|j         ‰k    V — Œd S r�   rã   rä   s     €r0   rá   z treespec_dict.<locals>.<genexpr>  s+   øè è € Ð
HÐ
H°%ˆ5Ô Ò-Ð
HÐ
HÐ
HÐ
HÐ
HÐ
Hr2   rå   ræ   c              3  ó.   •K  — | ]}|j         ‰d fvV — ŒdS rè   r<   ré   s     €r0   rá   z treespec_dict.<locals>.<genexpr>  s.   øè è € Ð
LÐ
L°eˆ5Œ? 9¨b /Ð1Ð
LÐ
LÐ
LÐ
LÐ
LÐ
Lr2   rê   r4   )Údictrë   Úvaluesr/   r=   rG   rg   r    )	rî   r5   r6   r+   ÚdctrL   rÁ   r¶   rí   s	    ``      r0   r   r     s–  øø€ õ ˆwÐ
!Ð
!˜&Ð
!Ð
!€CÝ
Ð
HÐ
H¸3¿:º:¹<¼<Ð
HÑ
HÔ
HÑHÔHð OÝÐMÀSÐMÐMÐMÑNÔNÐNÝ
Ð
HÐ
HÐ
HÐ
H¸3¿:º:¹<¼<Ð
HÑ
HÔ
HÑHÔHð 
ÝðEØ'3ðEð EØ<?ðEð Eð Eñ
ô 
ð 	
õ Ð
LÐ
LÐ
LÐ
L¸s¿zºz¹|¼|Ð
LÑ
LÔ
LÑLÔLð 
ÝðDØ'0ðDð DØ;>ðDð Dð Dñ
ô 
ð 	
õ 	Ô%ØØ!Øð	ñ 	ô 	ñØØØØõ Ýˆh‰ŒÝØØØØ!Øðñ ô ð r2   útuple[list[Any], PyTreeSpec]c              ó@   ‡‡‡‡— dˆˆˆˆfd„Šg } ‰| |¦  «        }||fS )	NrK   r   rË   rM   r,   rg   c           	     ó:  •‡— t          | ‰‰
‰	¬¦  «        r+‰                     | ¦  «         t          dd d dd ‰
‰	¬¦  «        S t          j        | ‰‰
‰	¬¦  «        \  }}}}t          ˆˆfd„|D ¦   «         ¦  «        }t          |t          | ¦  «        |||‰
‰	¬¦  «        S )NrE   rR   r4   c              3  ó0   •K  — | ]} ‰|‰¦  «        V — Œd S r�   rR   )rƒ   r|   r…   rË   s     €€r0   rá   z/tree_flatten.<locals>.helper.<locals>.<genexpr>b  s/   øè è € ÐEÐE°5˜˜  vÑ.Ô.ÐEÐEÐEÐEÐEÐEr2   )r   r›   rg   r=   rG   r    r@   )rK   rË   rL   rÁ   r¶   rí   Úsubspecsr…   r7   r6   r5   s    `     €€€€r0   r…   ztree_flatten.<locals>.helperC  sô   øø€ ÝØØØ%Øð	
ñ 
ô 
ð 	ð �MŠM˜$ÑÔÐÝØØØØØØ)Ø#ðñ ô ð õ Ô)ØØØ%Øð	
ñ 
ô 
ñ	
ØØØØõ ÐEÐEÐEÐEÐE¸HÐEÑEÔEÑEÔEˆÝØÝ�‰JŒJØØØØ%Øð
ñ 
ô 
ð 	
r2   )rK   r   rË   rM   r,   rg   rR   )r9   r7   r5   r6   rË   r   r…   s    ```  @r0   r"   r"   5  sW   øøøø€ ð(
ð (
ð (
ð (
ð (
ð (
ð (
ð (
ð (
ðT €FØˆv�d˜FÑ#Ô#€HØ�8ÐÐr2   Úleaf_predicatec               ó(   — t          | |||¬¦  «        S rD   ©r"   ©r9   rü   r5   r6   s       r0   Ú
_C_flattenr   r  s'   € õ ØØØ!Øð	ñ ô ð r2   ú3tuple[list[tuple[Any, ...]], list[Any], PyTreeSpec]c              ó\   — t          | |||¬¦  «        \  }}|                     ¦   «         ||fS rD   )r"   rž   )r9   r7   r5   r6   rË   r   s         r0   r#   r#   ‡  sB   € õ $ØØØ!Øð	ñ ô Ñ€FˆHð �>Š>ÑÔ˜V XÐ-Ð-r2   c               ó(   — t          | |||¬¦  «        S rD   )r#   rÿ   s       r0   Ú_C_flatten_with_pathr  ž  s'   € õ "ØØØ!Øð	ñ ô ð r2   c              ó4   — t          | |||¬¦  «        d         S )NrE   ru   rþ   rA   s       r0   r$   r$   ³  s1   € õ ØØØ!Øð	ñ ô ð
 ô	ð 	r2   r   rË   c                óŠ   — t          | ¦  «        s t          dt          | ¦  «        › d�¦  «        ‚|                      |¦  «        S )NzIExpected `treespec` to be an instance of PyTreeSpec but got item of type r¼   )rÙ   Ú	TypeErrorr@   rÎ   )r   rË   s     r0   r%   r%   É  s]   € õ # 8Ñ,Ô,ð 
ÝðAÝ/3°H©~¬~ðAð Að Añ
ô 
ð 	
ð ×Ò˜fÑ%Ô%Ð%r2   z)No pytree handler registered for NoneType)r)   Úskip_signature_checkr1   rs   rL   úIterable[_T]c               ód   — t          t          |¦  «        ¦  «        dk    rt          d¦  «        ‚d S )Nr   zExpected no children.)rw   rO   r/   )r1   rL   s     r0   Únone_unflattenr  Ý  s1   € õ �4�‰>Œ>ÑÔ˜aÒÐÝÐ0Ñ1Ô1Ð1Øˆ4r2   Útorchr<   z%No pytree handler registered for dictrö   údict[_KT, _VT]ú>tuple[list[_VT], tuple[list[_KT], list[_KT]], tuple[_KT, ...]]c               ó¤   ‡ — t           j                             ‰ ¦  «        }ˆ fd„|D ¦   «         }t          ‰ ¦  «        }|||ft	          |¦  «        fS )Nc                ó    •— g | ]
}‰|         ‘ŒS rR   rR   )rƒ   r¾   rö   s     €r0   r†   z dict_flatten.<locals>.<listcomp>÷  s   ø€ Ð.Ð.Ð.˜3ˆc�#ŒhÐ.Ð.Ð.r2   )r=   ÚutilsÚtotal_order_sortedrO   r    )rö   Úsorted_keysrõ   Úoriginal_keyss   `   r0   Údict_flattenr  î  sX   ø€ õ ”,×1Ò1°#Ñ6Ô6€KØ.Ð.Ð.Ð. +Ð.Ñ.Ô.€FÝ˜‘I”I€MØ�M ;Ð/µ°{Ñ1CÔ1CÐCÐCr2   rÁ   útuple[list[_KT], list[_KT]]rõ   úIterable[_VT]c               óŽ   — | \  }}t                                |¦  «        }|                     t          ||d¬¦  «        ¦  «         |S r˜   )rô   ÚfromkeysÚupdaterœ   )rÁ   rõ   r  r  Úds        r0   Údict_unflattenr  ü  sE   € ð "*Ñ€M�;Ý�Š�mÑ$Ô$€AØ‡H‚H�S�˜f¨TÐ2Ñ2Ô2Ñ3Ô3Ð3Ø€Hr2   )r*   r   r+   r   r,   r-   r�   )
r7   r8   r9   r   r5   r-   r6   r:   r,   r-   )
r7   r8   r9   r   r5   r-   r6   r:   r,   rB   )
r7   r8   r9   r   r5   r-   r6   r:   r,   rM   )rÔ   r   r,   rÕ   )r5   r-   r6   r:   r,   rg   )rR   )rÛ   rÜ   r5   r-   r6   r:   r,   rg   )
rî   rï   r5   r-   r6   r:   r+   rg   r,   rg   )
r7   r8   r9   r   r5   r-   r6   r:   r,   r÷   )NFr3   )
rü   r8   r5   r-   r6   r:   r9   r   r,   r÷   )
r7   r8   r9   r   r5   r-   r6   r:   r,   r  )
rü   r8   r5   r-   r6   r:   r9   r   r,   r  )
r7   r8   r9   r   r5   r-   r6   r:   r,   rg   )r   rg   rË   rB   r,   r   )r1   rs   rL   r	  r,   rs   )rö   r  r,   r  )rÁ   r  rõ   r  r,   r  )VrÑ   Ú
__future__r   Úcollectionsr   Údataclassesr   r   Útypingr   r   r	   r=   Ú	optree._CÚoptree.utilsr
   r   r   r   r   r   r   r   Útorch.utils._cxx_pytreer  Ú_cxx_pytreeÚ
cxx_pytreeÚtorch.utils._pytreeÚ_pytreer×   r   r   Ú
decoratorsr   ÚbuiltinsÚcollections.abcr   r   r   Útyping_extensionsr   r   r   Ú__all__r&   r'   r(   Ú_CÚis_dict_insertion_orderedr1   Ú__nameÚ__funcÚ__python_implementation__Úglobalsr   r    r!   r:   rQ   r‰   rg   rÙ   r   r   r   r"   Úflattenr   r#   Úflatten_with_pathr  r$   r%   r>   r?   r@   Ú_none_registrationrx   rí   r  Údict_insertion_orderedrô   Ú_dict_registrationÚflatten_funcr  r  rR   r2   r0   ú<module>r9     s'	  ððð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à €€€Ø Ð Ð Ð Ø Ð Ð Ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð -Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà ,Ð ,Ð ,Ð ,Ð ,Ð ,ð ð /Ø€O€O€OØ;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø.Ð.Ð.Ð.Ð.Ð.Ð.Ð.à.Ð.Ð.Ð.Ð.Ð.ðð ð €ð, €WˆT�]„]€Ø€gˆe�n„n€Ø€gˆe�n„n€ð ÐØ
„IÔ'Ø"ðñ ô ðð ð ñ	ô ðð 
€à�mÐ$ØÐ/Ð0ØÐ5Ð6Ø�\Ð"ØÐ-Ð.ØÐ3Ð4ØÐ+Ð,ØÐ)Ð*ð	ð ð �N€FˆFðÐ+Ð+ØØ"&ðñ ô ð Ô&ñ(ô (€G€G�I„IˆfÑð 	ˆØ
ð Ð�VÔ(ÀDÐIÑIÔIð 04ðð
 Øðð ð ð ð ñ JÔIðð Ð�VÔ%ÀÐGÑGÔGð 04ð)ð
 Øð)ð )ð )ð )ð )ñ HÔGð)ð: Ð�VÔ'À4ÐHÑHÔHð 04ðð
 Øðð ð ð ð ñ IÔHðð$ð ð ð ð �ñ ô ð ð ˆI‰KŒK€	Øð €�$˜dÐ#Ñ#Ô#ðJ>ð J>ð J>ð J>ð J>ñ J>ô J>ñ $Ô#ðJ>ðZAð Að Að Að ÐØ
Ôð $ð	ñ ô ð Øðð ð ð ð ñô ðð  ÐØ
Ôð $ð	ñ ô ð &(ðð Øðð ð ð ð ñô ððD ÐØ
Ôð $ð	ñ ô ð LNð(ð Øð(ð (ð (ð (ð (ñô ð(ðV ÐØ
Ôð $ð	ñ ô ð 04ð4ð
 Øð4ð 4ð 4ð 4ð 4ñô ð4ðn ÐØ
„IÔð $ð	ñ ô ð 7;ØØðð ð ð ñô ðð ÐØ
Ô!ð $ð	ñ ô ð 04ð.ð
 Øð.ð .ð .ð .ð .ñô ð.ð" ÐØ
„IÔð $ð	ñ ô ð 7;ØØðð ð ð ñô ðð ÐØ
Ôð $ð	ñ ô ð 04ð	ð
 Øð	ð 	ð 	ð 	ð 	ñô ð	ð  ÐØ
Ôð $ð	ñ ô ð&ð &ð &ñô ð&ð Ô0×4Ò4°T°T¸$±Z´ZÑ@Ô@Ð ØÐØ
ˆ.ÐDÑ
EÔ
EÐEð ÐØÔ%Ø"Øðñ ô ð
ð ð ñô ð
ð #€VÔ" 5°GÐ<Ñ<Ô<ð Fð FØÔ4×8Ò8¸Ñ>Ô>ÐØÐ!ØˆnÐDÑEÔEÐEð "ðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fð ÐØÔ#Ø"Øðñ ô ð
Dð Dð Dñô ð
Dð ÐØÔ%Ø"Øðñ ô ð
ð ð ñô ð
ð ð s   Í(M6Í6M:Í=M: