
    [Th@=                       % S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	J
r
JrJr  SSKJr  SSKJs  Jr  SSKJrJr  S	S
KJr  \(       a  SSKrSSKJr  SSKJr  / rS\S'   \R:                  (       Ga  SSKrSSKrSSK Js  J!r"  \(       a  SSK J#r#  \" \RH                  RJ                  SS9S-S j5       r&Sr'S H$  r'\(" \\'5      r)\" \)SS9" \)RT                  5        C)M&     C'\" \"RV                  SS9 S.     S/S jj5       r+\" \"RX                  SS9 S.     S0S jj5       r,\S/-  r\" \"RZ                  SS9 S.     S1S jj5       r-\S/-  r " S S\.5      r/\/" 5       r0C/\" SS9 " S S5      5       r1\1" S SSS S5      r2S2S! jr3\" \"Rh                  SS9 S.     S3S" jj5       r4\S#/-  r\" \"Rj                  SS9 S.     S4S$ jj5       r5\S%/-  r\" \"Rl                  SS9S5S& j5       r6\S'/-  r\" \"Rn                  SS9SS(.         S6S) jj5       r7\S*/-  r\" \"Rp                  SS9SS(.         S6S+ jj5       r8\S,/-  rgg)7z)
Python polyfills for torch.utils.pytree
    )annotations)deque)	dataclassfield)AnyCallableLiteralTYPE_CHECKING)TypeIsN)BUILTIN_TYPESSTANDARD_DICT_TYPES   )substitute_in_graph)Iterable)Selfz	list[str]__all__)PyTreeT)can_constant_fold_throughc                     [        S5      e)NzeShould not be called directly because the original function will be called in the constant fold path.)
ValueError)argskwargss     V/var/www/auris/envauris/lib/python3.13/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_fieldsc                ~    U b  Ub  U" U 5      (       a  g[         R                  R                  [        U 5      SS9c  gg)NTtorch	namespaceF)optreeregister_pytree_nodegettypetreeis_leafs     r   tree_is_leafr0   B   s?    
 <G/GDMM&&**4:*IQr   Fc              #     #    U /nU(       a`  UR                  5       n[        X1S9(       a  Uv   M+  [        R                  " UUSSS9tpEUR	                  [        U5      5        U(       a  M_  g g 7f)Nr/   Tr&   r/   none_is_leafr(   )popr0   r)   tree_flatten_one_levelextendreversed)r.   r/   stacknodechildrenr   s         r   	tree_iterr<   M   sd     
 99;DD2
!88!!	LH LL(+, es   A(A.,A.r<   c                &    [        [        XS95      $ Nr2   )listr<   r-   s     r   tree_leavesr@   c   s    
 Id455r   r@   c                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )	_Asteriskl    c                $   > [         TU ]  U S5      $ N*)super__new__)cls	__class__s    r   rI   _Asterisk.__new__o   s    7?3,,r   c                    grF   rD   selfs    r   __repr___Asterisk.__repr__r   s    r   )returnr   rR   str)	__name__
__module____qualname____firstlineno__	__slots__rI   rP   __static_attributes____classcell__)rK   s   @r   rB   rB   l   s    		-	 	r   rB   )frozenc                  2   \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   \" SS9rS\S'   \" SS9rS\S'   \" SS9r	S\S'   \" SS9r
S\S'   \" SS9rS\S'   S$S jrS%S jrS&S jr\S'S j5       rS(S jrS)S jrS*S jrS+S jrS,S jrS-S  jrS.S! jrS"rg#)/
PyTreeSpecx   z0Analog 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_funcF)initint	num_nodes
num_leavesnum_childrenzLiteral[True]r4   zLiteral['torch']r(   c                x   U R                   cR  [        U R                  5      S:X  d   eU R                  b   eU R                  S:X  d   eU R
                  b   eSnSnSnOh[        U R
                  5      (       d   e[        S U R                   5       SS9n[        S U R                   5       5      n[        U R                  5      n[        R                  U SU5        [        R                  U SU5        [        R                  U S	U5        [        R                  U S
S5        [        R                  U SS5        g )Nr   rD      c              3  8   #    U  H  oR                   v   M     g 7fN)rh   .0specs     r   	<genexpr>+PyTreeSpec.__post_init__.<locals>.<genexpr>   s      KNDN   )startc              3  8   #    U  H  oR                   v   M     g 7frn   ri   ro   s     r   rr   rs      s      L^T^rt   rh   ri   rj   r4   Tr(   r&   )
rb   lenr`   rc   rd   re   callablesumobject__setattr__)rO   rh   ri   rj   s       r   __post_init__PyTreeSpec.__post_init__   s   zz!4>>*a///~~---}}***++333	
  4 45555 KDNN KSTU	  LT^^ LL
"4>>2t[)<t\:>t^\Bt^T:t[':r   c                H   ^ SU4S jjmST" U 5       SU R                   < S3$ )Nc                d  > U R                  5       (       a  U R                  b   e[        $ U R                  c   e[        U R                  5      (       d   eU R
                   Vs/ s H  nT" U5      PM     nnU R                  [        ;   dJ  [        R                  " U R                  5      (       d%  [        R                  " U R                  5      (       a  U R	                  U R                  U5      $ SU R                  R                   SU R                  < SSR                  U5       S3$ s  snf )NzCustomTreeNode([z], [z, z]))r/   r,   	_asteriskry   re   r`   r   r)   r   r!   rc   rU   join)treespecsubspecchildren_representationshelpers      r   r   #PyTreeSpec.__repr__.<locals>.helper   s   ##%%#==000$$}}000 8 899993;3E3E,3EF7O3E ) , MM]211(--@@00??#33 **0 
 &hmm&<&<%=Qx?Q?Q>T U		":;<B@,s   %D-zPyTreeSpec(z, NoneIsLeaf, namespace=))r   r^   rR   rT   r'   )rO   r   s    @r   rP   PyTreeSpec.__repr__   s,    2 fTl^+CDNNCUUVWr   c                    U R                   $ rn   rw   rN   s    r   __len__PyTreeSpec.__len__   s    ??"r   c                    U R                   $ rn   )rb   rN   s    r   r,   PyTreeSpec.type   s    ::r   c                L    U R                   S:H  =(       a    U R                  S:H  $ )Nrl   )rh   ri   rN   s    r   r/   PyTreeSpec.is_leaf   s    >>Q&?4??a+??r   c                ,    [        U R                  5      $ rn   )r?   r`   rN   s    r   r;   PyTreeSpec.children   s    ''r   c                     U R                   U   $ rn   )r`   rO   indexs     r   childPyTreeSpec.child   s    >>%((r   c                ,    [        U R                  5      $ rn   )r?   rd   rN   s    r   entriesPyTreeSpec.entries   s    &&r   c                     U R                   U   $ rn   )rd   r   s     r   entryPyTreeSpec.entry   s    ==''r   c                >   ^         SU4S jjm/ nT" XU5        U$ )Nc           	     Z  > U R                  5       (       a  UR                  U5        g [        U5      nU R                  [        ;  a  X0R                  :w  a  [	        SU R                  < SU< S35      e[
        R                  " USSS9tpEn[        U5      U R                  :w  a%  [	        SU R                   S[        U5       S35      eXPR                  :w  a  [	        SU R                  < S35      eGOU R                  [        ;   =(       a	    U[        ;   nU(       d-  X0R                  :w  a  [	        S	U R                  < SU< S35      e[        U5      U R                  :w  a%  [	        SU R                   S[        U5       S35      eU(       a  U R                  5       n[        U5      n	[        U5      n
X:w  aQ  U
R                  U	5      nU	R                  U
5      nS
nU(       a  USU 3-  nU(       a  USU 3-  n[	        SU S35      eU Vs/ s H  oU   PM	     nnO\[
        R                  " USSS9tpEnU[        La;  XPR                  :w  a,  [	        SU R                  < SU R                  < SU< S35      e[        X@R                   5       H  u  nnT" UX5        M     g s  snf )NzType mismatch; expected z
, but got .Tr&   )r4   r(   zNode arity mismatch; expected z+Node context mismatch for custom node type zNode type mismatch; expected r   z; missing key(s): z; extra key(s): zNode keys mismatchz%Node metadata mismatch for node type z; expected )r/   appendr,   r   r   r)   r6   rx   rj   rc   r   r   set
differencer   zipr`   )r   r:   subtrees	node_typer;   metadatar   both_standard_dictexpected_keysgot_key_setexpected_key_setmissing_keys
extra_keysmessagekeysubtreer   r   s                    r   r   (PyTreeSpec.flatten_up_to.<locals>.helper   s   
 ##%%OOD) J	==5 MM1(((0'8
9-qR 
 .4-J-J%)").*H
 8}(=(==(((0(=(='>jXWXZ   #5#55(I(--IZZ[\  6 !)<< =%)<< ' .)}}2L(((0'8
9-qR  4yH$9$99(((0(=(='>jTSTV 
 *(0(8(8(:&)$i+.}+=(&:+;+F+F{+SL)4)?)?@P)QJ&(G+ '-?~+N N) '-=j\+J J",/A'!-L"MM9F#G#I#G 281N1N )-&-2.Q &#()&*<*<<","GGX Y,,4,>,>+AH<WX!Z# 
 ),H6H6H(I$GW7G6 )J# $Hs   J()r   r^   r:   r   r   list[PyTree]rR   NonerD   )rO   r.   r   r   s      @r   flatten_up_toPyTreeSpec.flatten_up_to   sH    R7$R7R7 'R7 	R7h &(H4x(Or   c           	     
   [        U[        [        45      (       d  [        U5      n[        U5      U R                  :w  a(  [        S[        U5       SU R                   SU  S35      eU R                  5       (       a  US   $ SnSn/ nU R                   H5  nX5R                  -  nUR                  UR                  XU 5      5        UnM7     [        U R                  5      (       d   eU R                  U R                  U5      $ )Nz0treespec.unflatten(leaves): `leaves` has length z, but the spec refers to a pytree that holds z items (z).r   )
isinstancer?   tuplerx   ri   r   r/   r`   r   	unflattenry   re   rc   )rO   leavesru   endr   r   s         r   r   PyTreeSpec.unflatten)  s    ftUm44f6{doo- Fs6{m TBBF//AR S"V2' 
 ||~~ay  ECH>>))) 1 1&s2C DE *
 D001111''AAr   rD   N)rR   r   rS   )rR   rg   )rR   ra   )rR   bool)rR   zlist[PyTreeSpec])r   rg   rR   r^   )rR   	list[Any])r   rg   rR   r   )r.   r   rR   r   )r   Iterable[Any]rR   r   )rU   rV   rW   rX   __doc____annotations__r   rh   ri   rj   r4   r(   r}   rP   r   propertyr,   r/   r;   r   r   r   r   r   rZ   rD   r   r   r^   r^   x   s    >))##!!PPE*	3*U+
C+!u-c-&+&7m7&+&7	#7	;*	:	# 
	 
		@	(	)	'	(W	r	Br   r^   rD   c               "    [        U [        5      $ rn   )r   r^   )objs    r   _is_pytreespec_instancer   C  s    #z**r   c                2   ^^ SUU4S jjm/ nT" X5      nX#4$ )Nc                   >^ [        U TS9(       a  TR                  U 5        [        $ [        R                  " U TSSS9u  nnnn[        UU4S jU 5       5      n[        U[        U 5      X4U5      $ )Nr2   Tr&   r3   c              3  6   >#    U  H  nT" UT5      v   M     g 7frn   rD   )rp   r   r   r   s     r   rr   /tree_flatten.<locals>.helper.<locals>.<genexpr>b  s     IuVE622s   )r0   r   
_LEAF_SPECr)   r6   r   r^   r,   )	r:   r   r;   r   r   unflatten_funcsubspecsr   r/   s	    `     r   r   tree_flatten.<locals>.helperP  ss    D'2d#!! --!!	 IIIHhT
H~VVr   )r:   r   r   r   rR   r^   rD   )r.   r/   r   r   r   s    `  @r   tree_flattenr   F  s)    	W 	W* $'r   r   c                    [        XS9S   $ )Nr2   rl   )r   r-   s     r   tree_structurer   k  s     D2155r   r   c                t    [        U5      (       d  [        S[        U5       S35      eUR                  U 5      $ )Nzhtree_unflatten(leaves, treespec): Expected `treespec` to be instance of PyTreeSpec but got item of type r   )r   	TypeErrorr,   r   )r   r   s     r   tree_unflattenr   y  sF     'x00337>2B!E  !!&))r   r   r2   c                   [        XS9u  pEU/U Vs/ s H  oeR                  U5      PM     sn-   nUR                  [        U /UQ76 5      $ s  snf r>   )r   r   r   mapfuncr.   r/   restsr   r   r	flat_argss           r   tree_mapr     sV     (>H5I5a 6 6q 95II	!!#d"7Y"788  Js   Ar   c                   [        XS9u  pEU/U Vs/ s H  oeR                  U5      PM     sn-   n[        [        U /UQ76 SS9  U$ s  snf )Nr2   r   )maxlen)r   r   r   r   r   s           r   	tree_map_r     sT     (>H5I5a 6 6q 95II	c$##A.  Js   Ar   )r   r   r   r   rR   r   rn   )r.   r   r/   Callable[[PyTree], bool] | NonerR   r   )r.   r   r/   r   rR   r   )r.   r   r/   r   rR   r   )r   r   rR   zTypeIs[PyTreeSpec])r.   r   r/   r   rR   ztuple[list[Any], PyTreeSpec])r.   r   r/   r   rR   r^   )r   r   r   r^   rR   r   )
r   zCallable[..., Any]r.   r   r   r   r/   r   rR   r   )9r   
__future__r   collectionsr   dataclassesr   r   typingr   r   r	   r
   typing_extensionsr   torch.utils._pytreeutils_pytreepython_pytreer   r   
decoratorsr   builtinscollections.abcr   r   r   r   _cxx_pytree_dynamo_traceabler)   	optree._Ctorch.utils._cxx_pytree_cxx_pytree
cxx_pytreer   _Cis_dict_insertion_orderedr   __namegetattr__func__python_implementation__r0   r<   r@   rT   rB   r   r^   r   r   r   r   r   r   r   rD   r   r   <module>r      s   #  ( 8 8 $ + + B , (&   ---002		++"&
	
 F	 (FdC,,	
 	 	00DQ 480 
 R --O 48--0- 
- P-& }G//4P 486606 
6 Q6 GC  IdFB FB FBP BdB5J+  #(	 48  0  
&  : G!! #(	 486606 
66  !!G!! #(	**  !!G,,M
 48	9 99 9 1	9
 
9 N9 
|G--N
 48		 		 	 1		
 
	 O	 }GO .r   