+
    ˜°³jˆ4 ã            
       óR  a € ER= t×0 t R t^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHtHtHtHt ^ RIHtHtHtHtHt ^ RIHt ^ RIHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$ ^ RI%H&t&H't'H(t(H)t) ^ RI*H+t, ]PZ                  ! ].4      t/]"'       d
   ^ RI0H1u H2t3 . RNR	NR
NRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.Nt4]$! R/4      t5]$! R04      t6]$! R14      t7]$! R24      t8^t9R3t: ! R4 R5]!4      t; ! R6 R7]Px                  4      t=]t>]t?]]?.]@]A],          ]>3,          3,          tB]]],          ]>.]?3,          tC]tD]]>.]D3,          tE]]D.]>3,          tF]R]A]G,          .]G3,          tH]]G.]@]]>]G3,          R,          3,          tI]@];R83,          tJ]]?.]@]A]@];]3,          ,          ]3,          3,          tK]BtL]CtM]KtN ! R9 R:]'4      tO]	P                   ! 4       tQ/ tR] ^ k  ! R; R<]'4      tS/ tT] ^k / tU] ^k ],! R=4      tV ]P®                  P±                  R>4      tY],! ]Y4      tY]Y]V8  d   R?;tZt[MR@;tZt[ R?t]. t^] ^k RBRRCRRDRRER/RF RG llt_RHRRIRRBR/RJ RK llt`]a! 4       tb] ^k RL RM ltcRN RO ltd]PÊ                  ! R@R@RP7       ! RQ RR]]5,          4      4       tfRS RT ltgRU RV lthRW RX lti]&! RY]jRZ7      ER>RBRRCRRDRRER/R[ R\ lll4       tkR] R^ ltlRBRRCRRDRRER/R_ R` lltm]PÊ                  ! R@R@RP7       ! Ra Rb]]5,          4      4       tn]$! Rc]Rd7      to]PÊ                  ! R@R@RP7       ! Re Rf]]o]53,          4      4       tp]PÊ                  ! R@R@RP7       ! Rg Rh4      4       tqRi Rj ltrRk Rl ltsRm Rn ltt]$! RoR@Rp7      tu ! Rq Rr]@]uR83,          4      tvRs Rt ltwER?tx] ^k Ru Rv ltyRw Rx ltzRy Rz lt{R{ R| lt|R} R~ lt}R R€ lt~R� R‚ ltRƒ R„ lt€R… R† lt�R‡ Rˆ lt‚R‰ RŠ ltƒR‹ RŒ lt„R� RŽ lt…R� R� lt†R‘ R’ lt‡R“ R” ltˆR• R– lt‰R— R˜ ltŠR™ Rš lt‹]‰tŒ]‹t�R› Rœ ltŽR� Rž lt�RŸ R  lt�R¡ R¢ lt‘R£ R¤ lt’R¥ R¦ lt“R§ R¨ lt”R© Rª lt•]m! ]@]{]}R«]|R¬7       ]m! ]A]~]€R­]R¬7       ]m! ]–]�]ƒR®]‚R¬7       ]m! ]]„]†R¯]‡]ˆ]…R°7       ]m! ]]‰]‹R±]ŠR¬7       ]m! ]]Ž]�R²]‘]’]�R°7       ]m! ]]“]•R³]”R¬7       ]—! ]–]]04      t˜] ^k ]—! ]@]A]–]]]]04      t™] ^k ]&! R´]jRZ7      Rµ R¶ l4       tšR· R¸ lt›ER@R¹ Rº lltœ]&! R»]jRZ7      ER@R¼ R½ ll4       t�]PÊ                  ! R?R@R@R?R@R¾7       ! R¿ R4      4       tž]žtŸ] ^k ]&! RÀ]jRZ7      ]PÊ                  ! R?R@R?R?R@R¾7       ! RÁ R]ž4      4       4       t ]EPB                  ! 4       ;_uu_ 4        ]EPD                  ! RÂ]j].R?RÃ7       ] ! 4       t£RRR4       RÄ RÅ lt¤ERARÆ RÇ llt¥ERARÈ RÉ llt¦RÊ RË lt§RÌ RÍ lt¨ER@RÎ RÏ llt©RÐ RÑ ltªER@RÒ RÓ llt«ER@RÔ RÕ llt¬ER@RÖ R× llt­RØR/RÙ RÚ llt®RØR/RÛ RÜ llt¯]@]°]5,          ]°]6,          3,          t±]@]°]5,          ]°]6,          ]°]7,          3,          t²]°],          ]@]°],          R83,          ,          ]
EPf                  ,          t´]]5]6,          .]83,          tµ]]5]6,          ]7,          .]83,          t¶]]5.]83,          t·]].]83,          t¸]]5.]].]3,          3,          t¹] RÝ RÞ l4       tº] Rß Rà l4       tº] Rá Râ l4       tº] Rã Rä l4       tº] Rå Ræ l4       tºRç Rè ltº] ER@Ré Rê ll4       t»] ER@Rë Rì ll4       t»] ER@Rí Rî ll4       t»] ER@Rï Rð ll4       t»] ER@Rñ Rò ll4       t»ER@Ró Rô llt»] ER@Rõ Rö ll4       t¼] ER@R÷ Rø ll4       t¼] ER@Rù Rú ll4       t¼] ER@Rû Rü ll4       t¼] ER@Rý Rþ ll4       t¼ER@Rÿ ER  llt¼ER@ER ER llt½ER@ER ER llt¾] ER@ER ER ll4       t¿] ER@ER ER ll4       t¿] ER@ER	 ER
 ll4       t¿ER@ER ER llt¿] ER@ER ER ll4       tÀ] ER@ER ER ll4       tÀ] ER@ER ER ll4       tÀER@ER ER lltÀER@ER ER lltÁ]PÊ                   ! ER ER4      4       tÂ ! ER ER]'4      tÃ/ tÄ] ^	k ER ER ltÅER ER ltÆER ER  ltÇ]Ã! ]Å]Ç4      ]Ä^&   ER@ER! ER" lltÈ]EP’                  ER# ER$ l4       tÊ ! ER% ER&]G4      tË]Ë! 4       tÌAËER' ER( ltÍ]&! ER)]jRZ7      ER* ER+ l4       tÎ]&! ER,]jRZ7      ER- ER. l4       tÏER/ ER0 ltÐER@ER1 ER2 lltÑER@ER3 ER4 lltÒER@ER5 ER6 lltÓRØR/ER7 ER8 lltÔER9 ER: ltÕER; ER< ltÖR#   ]P®                  P¸                   d    R?;tZt[],! RA4      tY EL1i ; i  + '       g   i     ELà; i(B  a  
Contains utility functions for working with nested python data structures.

A *pytree* is a Python nested data structure. It is a tree in the sense that
nodes are Python collections (e.g., list, tuple, dict) and the leaves are
Python values. Furthermore, a pytree should not contain reference cycles.

pytrees are useful for working with nested collections of Tensors. For example,
one can use `tree_map` to map a function over all Tensors inside some nested
collection of Tensors and `tree_leaves` to get a flat list of all Tensors
inside some nested collection. pytrees are helpful for implementing nested
collection support for PyTorch APIs.

This pytree implementation is not very performant due to Python overhead
To improve the performance we can move parts of the implementation to C++.
N)ÚdefaultdictÚdequeÚ
namedtupleÚOrderedDict)ÚCallableÚHashableÚIterableÚMappingÚSequence)ÚEnum)ÚAnyÚcastÚClassVarÚFinalÚGenericÚNoReturnÚoverloadÚProtocolÚTYPE_CHECKINGÚ	TypeAliasÚTypeVar)Ú
deprecatedÚ
NamedTupleÚSelfÚTypeIs)ÚTorchVersionÚPyTreeÚContextÚ	FlattenFnÚUnflattenFnÚDumpableContextÚToDumpableContextFnÚFromDumpableContextFnÚ
PyTreeSpecÚTreeSpecÚLeafSpecÚkeystrÚkey_getÚregister_pytree_nodeÚtree_is_leafÚtree_flattenÚtree_flatten_with_pathÚtree_unflattenÚ	tree_iterÚtree_leavesÚtree_leaves_with_pathÚtree_structureÚtree_mapÚtree_map_with_pathÚ	tree_map_Útree_map_onlyÚtree_map_only_Útree_allÚtree_anyÚtree_all_onlyÚtree_any_onlyÚtreespec_dumpsÚtreespec_loadsÚtreespec_pprintÚis_namedtupleÚis_namedtuple_classÚis_namedtuple_instanceÚis_structseqÚis_structseq_classÚis_structseq_instanceÚTÚSÚUÚRÚNO_SERIALIZED_TYPE_NAME_FOUNDc                   óh   a € ] tR t^ot o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltR	tV t	R
# )ÚKeyEntryc                ó    <€ V ^8„  d   QhRS[ /# ©é   Úreturn©Úint)ÚformatÚ__classdict__s   "€ÚT/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/utils/_pytree.pyÚ__annotate__ÚKeyEntry.__annotate__p   s   ø€ ×"Ñ"™#Ñ"ó    c                ó   € R # ©N© ©Úselfs   &rR   Ú__hash__ÚKeyEntry.__hash__p   s   € ™srU   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©rL   ÚotherrM   ©ÚobjectÚbool)rP   rQ   s   "€rR   rS   rT   r   s   ø€ ×0Ñ0™FÐ0¡tÑ0rU   c                ó   € R # rW   rX   ©rZ   r_   s   &&rR   Ú__eq__ÚKeyEntry.__eq__r   s   € ©SrU   c                ó    <€ V ^8„  d   QhRS[ /# rK   ©Ústr)rP   rQ   s   "€rR   rS   rT   t   s   ø€ ×!Ñ!™Ñ!rU   c                ó   € R # rW   rX   rY   s   &rR   Ú__str__ÚKeyEntry.__str__t   s   € ™crU   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )rL   ÚparentrM   ©r   )rP   rQ   s   "€rR   rS   rT   v   s   ø€ ×*Ñ*™#Ð*¡#Ñ*rU   c                ó   € R # rW   rX   )rZ   rn   s   &&rR   ÚgetÚKeyEntry.getv   s   € ¡srU   rX   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r[   re   rk   rq   Ú__static_attributes__Ú__classdictcell__©rQ   s   @rR   rI   rI   o   s   ø‡ € ß"Ð"ç0Ð0ç!Ð!ç*Ö*rU   rI   c                   ó>   a a€ ] tR t^yt oV3R lV 3R lltRtVtV ;t# )ÚEnumEncoderc                óL   <€ V ^8„  d   QhRS[ RS[S[S[S[3,          ,          /# ©rL   ÚobjrM   )ra   ri   Údictr   )rP   rQ   s   "€rR   rS   ÚEnumEncoder.__annotate__z   s(   ø€ ÷ /ñ /™6ð /¡c©D±±c°­NÕ&:ñ /rU   c                óè   <€ \        V\        4      '       d@   R RRVP                  P                   RVP                  P                   2RVP
                  /# \        \        \        SV `%  V4      4      # )Ú__enum__TÚfqnÚ:Úname)
Ú
isinstancer   Ú	__class__rt   ru   r…   r   ri   ÚsuperÚdefault)rZ   r~   r‡   s   &&€rR   r‰   ÚEnumEncoder.defaultz   sf   ø€ Ü�cœ4× Ò à˜DØ˜#Ÿ-™-×2Ñ2Ð3°1°S·]±]×5OÑ5OÐ4PÐQØ˜Ÿ™ðð ô
 ”Cœ™™¨Ó-Ó.Ð.rU   rX   )rs   rt   ru   rv   r‰   rw   rx   Ú__classcell__©r‡   rQ   s   @@rR   r{   r{   y   s   ù‡ € ÷/÷ /ó /rU   r{   .c                   ó,   a € ] tR t^Ÿt o V 3R ltRtV tR# )ÚNodeDefc                óh   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[;R&   S[;R&   S[R,          ;R&   # )rL   ÚtypeÚ
flatten_fnÚunflatten_fnNÚflatten_with_keys_fn)r�   r   r   r   ÚFlattenWithKeysFn)rP   rQ   s   "€rR   rS   ÚNodeDef.__annotate__Ÿ   s=   ø‡ ‚ Ù
‰s�)�Oñ áÑñ ñ Ññ ñ ,¨dÕ2Ñ2ò	 rU   rX   N©rs   rt   ru   rv   Ú__annotate_func__rw   rx   ry   s   @rR   rŽ   rŽ   Ÿ   ó   ø‡ ‡ „ rU   rŽ   c                   ó,   a € ] tR t^±t o V 3R ltRtV tR# )Ú_SerializeNodeDefc                óv   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[;R&   S[R,          ;R&   S[R,          ;R&   # )rL   ÚtypÚserialized_type_nameNÚto_dumpable_contextÚfrom_dumpable_context)r�   r   ri   r!   r"   )rP   rQ   s   "€rR   rS   Ú_SerializeNodeDef.__annotate__±   sB   ø‡ ‚ Ù	‰c��Nñ áÑñ ñ -¨tÕ3Ñ3ñ ñ 1°4Õ7Ñ7ò	 rU   rX   Nr–   ry   s   @rR   rš   rš   ±   r˜   rU   rš   z0.13.0ÚoptreeFTz0.0.0a0r�   rž   rŸ   r“   c                ó¾   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R,          R\
        R,          R\        R,          R\        R,          R	R/# ©
rL   Úclsr‘   r’   r�   Nrž   rŸ   r“   rM   ©r�   r   r   r   ri   r!   r"   r”   )rP   s   "rR   rS   rS   Ô   sy   € ÷ I;ñ I;Ü	Œc�ðI;äðI;ô ðI;ô
  �*ðI;ô -¨tÕ3ðI;ô 1°4Õ7ðI;ô ,¨dÕ2ðI;ð 
ñI;rU   c          
     óp  € \         ;_uu_ 4        V \        9   d   \        V  R24      h RRR4       \        V VVVVVVR7       \        '       g   R# \
        '       d$   ^ RIHu Hp VP                  ! V VVVVVR7       R# WV3pRVRVRV/p	\        P                  W‰34       R#   + '       g   i     Lƒ; i)a¦  Register a container-like type as pytree node.

Note:
    :func:`register_dataclass` is a simpler way of registering a container-like
    type as a pytree node.

Args:
    cls: the type to register
    flatten_fn: A callable that takes a pytree and returns a flattened
        representation of the pytree and additional context to represent the
        flattened pytree.
    unflatten_fn: A callable that takes a flattened version of the pytree,
        additional context, and returns an unflattened pytree.
    serialized_type_name: A keyword argument used to specify the fully qualified
        name used when serializing the tree spec.
    to_dumpable_context: An optional keyword argument to custom specify how
        to convert the context of the pytree to a custom json dumpable
        representation. This is used for json serialization, which is being
        used in torch.export right now.
    from_dumpable_context: An optional keyword argument to custom specify how
        to convert the custom json dumpable representation of the context
        back to the original context. This is used for json deserialization,
        which is being used in torch.export right now.
    flatten_with_keys_fn: An optional keyword argument to specify how to
        access each pytree leaf's keypath when flattening and tree-mapping.
        Like ``flatten_fn``, but in place of a List[leaf], it should return
        a List[(keypath, leaf)].
z& is already registered as pytree node.N©r�   rž   rŸ   r“   )r�   rž   rŸ   r�   rž   rŸ   )Ú_NODE_REGISTRY_LOCKÚSUPPORTED_NODESÚ
ValueErrorÚ_private_register_pytree_nodeÚ_cxx_pytree_existsÚ_cxx_pytree_importedÚtorch.utils._cxx_pytreeÚutilsÚ_cxx_pytreeÚ_cxx_pytree_pending_importsÚappend)
r¤   r‘   r’   r�   rž   rŸ   r“   Ú
cxx_pytreeÚargsÚkwargss
   &&&$$$$   rR   r(   r(   Ô   sÇ   € ÷L 
Ö	Ø”/Ô!Ü ˜uÐ$JÐKÓLÐLð "÷ 
ô "ØØØØ1Ø/Ø3Ø1õ÷ ÓÙçÓß4Ð4à×0Ò0ØØØØ!5Ø 3Ø"7÷	
ð  Ð.ˆà"Ð$8Ø!Ð#6Ø#Ð%:ð
ˆô
 	$×*Ñ*¨D¨>Ö:÷G 
×	ús   �B%Â%B5	Úfield_namesÚdrop_field_namesc          
      ó¸   € V ^8„  d   QhR\         \        ,          R\        \        ,          R,          R\        \        ,          R,          R\        R,          RR/# )rL   r¤   r¶   Nr·   r�   rM   )r�   r   Úlistri   )rP   s   "rR   rS   rS      s]   € ÷ pñ pÜ	Œc�ðpô ”c•˜TÕ!ðpô œ3•i $Õ&ð	pô
  �*ðpð 
ñprU   c               óü  a aa€ T;'       g    . p\         P                  ! S 4      '       g   Sf   \        RS  R24      hEMSfE   \         P                  ! S 4       Uu. uF"  qDP                  '       g   K  VP
                  NK$  	  upoM¾\         P                  ! S 4       Uu0 uF"  qDP                  '       g   K  VP
                  kK$  	  ppVP                  V4       V\        S4      8w  d\   RpV\        S4      ,
          ;p'       d   VRV R2,          p\        S4      V,
          ;p'       d   VRV R2,          p\        V4      hR	 V3R
 lloR V 3R llp	R V3R llp
\        S SV	VV
R7       R# u upi u upi )a,  
Registers a type that has the semantics of a ``dataclasses.dataclass`` type
as a pytree node.

This is a simpler API than :func:`register_pytree_node` for registering
a dataclass or a custom class with the semantics of a dataclass.

Args:
    cls: The python type to register. The class must have the semantics of a
    dataclass; in particular, it must be constructed by passing the fields
    in.
    field_names (Optional[List[str]]): A list of field names that correspond
        to the **non-constant data** in this class. This list must contain
        all the fields that are used to initialize the class. This argument
        is optional if ``cls`` is a dataclass, in which case the fields will
        be taken from ``dataclasses.fields()``.
    drop_field_names (Optional[List[str]]): A list of field names that
        should not be included in the pytree.
    serialized_type_name: A keyword argument used to specify the fully
        qualified name used when serializing the tree spec. This is only
        needed for serializing the treespec in torch.export.

Example:

    >>> from torch import Tensor
    >>> from dataclasses import dataclass
    >>> import torch.utils._pytree as pytree
    >>>
    >>> @dataclass
    >>> class Point:
    >>>     x: Tensor
    >>>     y: Tensor
    >>>
    >>> pytree.register_dataclass(Point)
    >>>
    >>> point = Point(torch.tensor(0), torch.tensor(1))
    >>> point = pytree.tree_map(lambda x: x + 1, point)
    >>> assert torch.allclose(point.x, torch.tensor(1))
    >>> assert torch.allclose(point.y, torch.tensor(2))

NzKfield_names must be specified with a list of all fields used to initialize z, as it is not a dataclass.z3field_names does not include all dataclass fields.
z!Missing fields in `field_names`: zˆ. If you want to include these fields in the pytree, please add them to `field_names`, otherwise please add them to `drop_field_names`.
z$Unexpected fields in `field_names`: zA. Please remove these fields, or add them to `drop_field_names`.
c                óh   € V ^8„  d   QhR\         R\        \        \         ,          \        3,          /# r}   ©r   Útupler¹   r   )rP   s   "rR   rS   Ú(register_dataclass.<locals>.__annotate__q  s(   € ÷ 3ñ 3œð 3¤¤t¬C¥y´'Ð'9Õ!:ñ 3rU   c                 ó´   <€ . p. p. pS FG  p\        W4      pVe%   VP                  V4       VP                  V4       K6  VP                  V4       KI  	  WV.3# rW   )Úgetattrr²   )r~   Ú	flattenedÚ
flat_namesÚ
none_namesr…   Úvalr¶   s   &     €rR   Ú_flatten_fnÚ'register_dataclass.<locals>._flatten_fnq  se   ø€ Øˆ	Øˆ
Øˆ
ÛˆDÜ˜#Ó$ˆCØŠØ× Ñ  Ô%Ø×!Ñ! $Ö'à×!Ñ! $Ö'ñ  ð  zÐ2Ð2Ð2rU   c                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# ©rL   ÚvaluesÚcontextrM   )r   r   r   )rP   s   "rR   rS   r¾   ~  s%   € ÷ 
ñ 
œh¤s�mð 
´gð 
Ä#ñ 
rU   c                 ón   <€ Vw  r#S! R/ \        \        W R R7      4      B\         P                  V4      B # )T©ÚstrictrX   )r   ÚzipÚfromkeys)rÉ   rÊ   rÂ   rÃ   r¤   s   &&  €rR   Ú_unflatten_fnÚ)register_dataclass.<locals>._unflatten_fn~  s=   ø€ Ø!(Ñˆ
Ùñ 
Ü”3�z°$Ô7Ó8ð
Ü<@¿M¹MÈ*Ó<Uñ
ð 	
rU   c                óh   € V ^8„  d   QhR\         R\        \        \         ,          \        3,          /# r}   r¼   )rP   s   "rR   rS   r¾   „  s(   € ÷ ñ ¤3ð ¬5´´cµ¼GÐ1CÕ+Dñ rU   c                 ó†   <€ S! V 4      w  pw  r#\        W!R R7       UUu. uF  w  rE\        V4      V3NK  	  uppV3# u uppi ©TrÌ   )rÎ   Ú
GetAttrKey)r~   rÁ   rÂ   Ú_none_namesÚkÚvrÅ   s   &     €rR   Ú_flatten_fn_with_keysÚ1register_dataclass.<locals>._flatten_fn_with_keys„  sQ   ø€ Ù/:¸3Ó/?Ñ,ˆ	Ñ,�Jä+.¨zÈTÕ+Rô
Ù+R¡4 1ŒZ˜‹]˜AÓÑ+Rò
àðð 	ùó 
s   Ÿ=©r�   r“   )	ÚdataclassesÚis_dataclassrª   ÚfieldsÚinitr…   Údifference_updateÚsetr«   )r¤   r¶   r·   r�   ÚfÚdataclass_init_fieldsÚ	error_msgÚmissingÚ
unexpectedrÐ   rÙ   rÅ   s   fd$$       @rR   Úregister_dataclassrç      s„  ú€ ð` (×-Ð-¨2Ðä×#Ò# C×(Ò(ØÒÜðØ!˜UÐ"=ð?óð ñ ð
 
Ò	Ü'2×'9Ò'9¸#Ô'>ÓIÑ'> !Ç&Å&”v�q—v”vÑ'>ÑI‰ä1<×1CÒ1CÀCÔ1HÓ SÑ1H¨AÏFÍF¤ §¤Ñ1HÐÐ SØ×/Ñ/Ð0@ÔAà ¤C¨Ó$4Ô4ØNˆIà/´#°kÓ2BÕBÐBˆwÖBØØ7¸°yð A,ð ,õ�	ô ! Ó-Ð0EÕEÐEˆzÖEØØ:¸:¸,ð GWð Wõ�	ô
 ˜YÓ'Ð'÷3ð 3÷
ð 
÷ð ô "ØØØØ1Ø2÷ùòc Jùâ Ss   ÁE4Á5E4Â!E9Â9E9c                ó>   € V ^8„  d   QhR\         \        ,          RR/# ©rL   r¤   rM   N©r�   r   )rP   s   "rR   rS   rS   –  s"   € ÷ K ñ K œ4¤�9ð K ¨ñ K rU   c           	     ó:  € V P                   \        P                   J d   \        R4      hV P                  f   \        R4      hR pR pR p\        ;_uu_ 4        \        V VVVR7       \        P                  V 4       RRR4       R#   + '       g   i     R# ; i)a  Registers a type as a pytree node with no leaves.

In a :func:`torch.compile` region, if instances of these types get passed to
:func:`torch._dynamo.nonstrict_trace`-ed function, they treated as a
constant (sometimes referred to as "static"):

1. if the instance object existed before the :func:`torch.compile` region,
we _assume_ no mutation will happen to it inside the :func:`torch.compile`
region, require that it has non-default `__eq__` and `__hash__` methods, and
we guard on the instance based on its `__eq__` method, i.e., if a new
instance fails to match any instances from the previous compilations,
:func:`torch.compile` will recompile the function using the new instance.

2. else if the instance object is created inside the :func:`torch.compile`
region, we currently don't support using it in a
:func:`torch._dynamo.nonstrict_trace`-ed function.

In general, if your class holds Tensors or dynamic int/float/bool (values that
may change from run-to-run of a function being compiled), then you probably
do not want to register it as a constant.

Otherwise if you want to pass instance of a class to a
:func:`torch._dynamo.nonstrict_trace`-ed function, but you either can't use
:func:`register_pytree_node` on the class, or the class is "constant" enough
that you don't want to bother using :func:`register_pytree_node`, you should
consider using this function.

Args:
    cls: the type to register as a constant. This type must be hashable.

Example:

    >>> from dataclasses import dataclass
    >>> import torch.utils._pytree as pytree
    >>>
    >>> @dataclass(frozen=True)
    >>> class Config:
    >>>     norm: str
    >>>
    >>> pytree.register_constant(Config)
    >>>
    >>> config = Config("l2")
    >>> values, spec = pytree.tree_flatten(config)
    >>> assert len(values) == 0

zSregister_constant(cls) expects `cls` to have a non-default `__eq__` implementation.NzUregister_constant(cls) expects `cls` to have a non-default `__hash__` implementation.c                 ó   € . \        V 4      3# rW   ©ÚConstantNode©Úxs   &rR   Ú_flattenÚ#register_constant.<locals>._flattenÑ  ó   € Ø”< “?Ð"Ð"rU   c                 ó   € VP                   # rW   )Úvalue)Ú_rÊ   s   &&rR   Ú
_unflattenÚ%register_constant.<locals>._unflattenÔ  s   € Ø�}‰}ÐrU   c                 ó   € . \        V 4      3# rW   rí   rï   s   &rR   Ú_flatten_with_keysÚ-register_constant.<locals>._flatten_with_keys×  ró   rU   )r“   )re   ra   Ú	TypeErrorr[   r¨   r«   ÚCONSTANT_NODESÚadd)r¤   rñ   r÷   rú   s   &   rR   Úregister_constantrÿ   –  s‹   € ð^ ‡z�z”V—]‘]Ó"ÜØaó
ð 	
ð ‡|�|ÒÜØcó
ð 	
ò#òò#÷ 
Ö	Ü%ØØØØ!3õ		
ô 	×Ñ˜3Ô÷ 
×	×	Ò	ús   Á%B	Â	B	c                óF   € V ^8„  d   QhR\         \        ,          R\        /# ©rL   r¤   rM   )r�   r   rb   )rP   s   "rR   rS   rS   ä  s   € ÷ ;ñ ;œ4¤�9ð ;¬ñ ;rU   c                 óD   € \        V \        4      ;'       d
    V \        9   # rW   )r†   r�   rý   ©r¤   s   &rR   Úis_constant_classr  ä  s   € Ü�cœ4Ó ×:Ð: S¬NÑ%:Ð:rU   )ÚfrozenÚslotsc                   ó,   a € ] tR tRt o V 3R ltRtV tR# )rî   iè  c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )rL   rõ   )rC   )rP   rQ   s   "€rR   rS   ÚConstantNode.__annotate__è  s   ø‡ ‚ á�Hò rU   rX   Nr–   ry   s   @rR   rî   rî   è  r˜   rU   rî   c                ó(   € V ^8„  d   QhRRR\         /# ©rL   Úspecr$   rM   ©rb   )rP   s   "rR   rS   rS   í  s   € ÷ 3ñ 3˜jð 3¬Tñ 3rU   c                ó6   € \        V P                  \        4      # )zEChecks if the spec is from a pytree registered with register_constant)r†   Ú_contextrî   ©r  s   &rR   Ú_is_constant_holderr  í  s   € ä�d—m‘m¤\Ó2Ð2rU   c                ó(   € V ^8„  d   QhRRR\         /# r  ro   )rP   s   "rR   rS   rS   ò  s   € ÷ $ñ $˜Zð $¬Cñ $rU   c                óR   € \        V 4      '       g   \        R4      h\        . V 4      # )zTGiven a spec from a pytree registered with register_constant, retrieves the constantz8spec does not correspond to a registered constant pytree)r  ÚAssertionErrorr,   r  s   &rR   Ú_retrieve_constantr  ò  s&   € ä˜t×$Ò$ÜÐWÓXÐXÜ˜"˜dÓ#Ð#rU   c                óJ   € V ^8„  d   QhR\         \        ,          R\        RR/# )rL   r¤   r�   rM   N)r�   r   ri   )rP   s   "rR   rS   rS   ù  s,   € ÷ ñ Ü	Œc�ðô ðð 
ñ	rU   c          
     óR   € \        V \        \        V\        \        \
        R7       R# )a·  
Registers a namedtuple as a valid pytree node. By default namedtuples are
valid pytree nodes, but they are not serializable. This API provides the
argument `serialized_type_name` which allows these namedtuples to be
serialized.

Args:
    cls: the dataclass type to register
    serialized_type_name: The serialized name for the dataclass. This is
    required if you want to serialize the pytree TreeSpec containing this
    namedtuple.
r§   N)r«   Ú_namedtuple_flattenÚ_namedtuple_unflattenÚ_namedtuple_serializeÚ_namedtuple_deserializeÚ_namedtuple_flatten_with_keys)r¤   r�   s   &$rR   Ú_register_namedtupler  ù  s!   € ô" "ØÜÜØ1Ü1Ü5Ü:÷rU   zy`torch.utils._pytree._register_pytree_node` is deprecated. Please use `torch.utils._pytree.register_pytree_node` instead.©Úcategoryc                óò   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R,          R\
        R,          R\        R,          R\        R,          R	\        R,          R
\        R,          RR/
# )rL   r¤   r‘   r’   Ú	to_str_fnNÚmaybe_from_str_fnr�   rž   rŸ   r“   rM   )
r�   r   r   r   Ú	ToStrFuncÚMaybeFromStrFuncri   r!   r"   r”   )rP   s   "rR   rS   rS     s�   € ÷ 4ñ 4Ü	Œc�ð4äð4ô ð4ô ˜4Õð	4ô
 (¨$Õ.ð4ô  �*ð4ô -¨tÕ3ð4ô 1°4Õ7ð4ô ,¨dÕ2ð4ð 
ñ4rU   c          
     ót   € Vf   Ve   \         P                  ! R\        ^R7       \        V VVVVVVR7       R# )aO  Register a container-like type as pytree node for the Python pytree only.

Args:
    cls: the type to register
    flatten_fn: A callable that takes a pytree and returns a flattened
        representation of the pytree and additional context to represent the
        flattened pytree.
    unflatten_fn: A callable that takes a flattened version of the pytree,
        additional context, and returns an unflattened pytree.
    serialized_type_name: A keyword argument used to specify the fully qualified
        name used when serializing the tree spec.
    to_dumpable_context: An optional keyword argument to custom specify how
        to convert the context of the pytree to a custom json dumpable
        representation. This is used for json serialization, which is being
        used in torch.export right now.
    from_dumpable_context: An optional keyword argument to custom specify how
        to convert the custom json dumpable representation of the context
        back to the original context. This is used for json deserialization,
        which is being used in torch.export right now.
    flatten_with_keys_fn: An optional keyword argument to specify how to
        access each pytree leaf's keypath when flattening and tree-mapping.
        Like ``flatten_fn``, but in place of a List[leaf], it should return
        a List[(keypath, leaf)].
Nzx`to_str_fn` and `maybe_from_str_fn` is deprecated. Please use `to_dumpable_context` and `from_dumpable_context` instead.©Ú
stacklevelr§   )ÚwarningsÚwarnÚFutureWarningr«   )	r¤   r‘   r’   r!  r"  r�   rž   rŸ   r“   s	   &&&&&$$$$rR   Ú_register_pytree_noder+    sH   € ðR ÒÐ 1Ò =Ü�ŠðTäØõ		
ô "ØØØØ1Ø/Ø3Ø1÷rU   c                ó>   € V ^8„  d   QhR\         \        ,          RR/# ré   rê   )rP   s   "rR   rS   rS   Q  s    € ÷ $ñ $Ü	Œc�ð$à	ñ$rU   c                óÞ   € \         ;_uu_ 4        \        V  \        V ,          p\        VP                   \        V  \
        P                  V 4       RRR4       R#   + '       g   i     R# ; i)z�This is an internal function that is used to deregister a pytree node type
for the Python pytree only. This should be only used inside PyTorch.
N)r¨   r©   ÚSUPPORTED_SERIALIZED_TYPESÚSERIALIZED_TYPE_TO_PYTHON_TYPEr�   rý   Údiscard)r¤   Únode_defs   & rR   Ú_deregister_pytree_noder2  Q  sO   € ÷ 
Ö	Ü˜CÐ Ü-¨cÕ2ˆÜ*¨8×+HÑ+HÐIÜ& sÐ+Ü×Ñ˜sÔ#÷ 
×	×	Ò	ús   �AAÁA,	c                ó¾   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R,          R\
        R,          R\        R,          R\        R,          R	R/# r£   r¥   )rP   s   "rR   rS   rS   _  sƒ   € ÷ @Cñ @CÜ	Œc�ð@Cäð@Cô ð@Cô
  �*ð@Cô -¨tÕ3ð@Cô 1°4Õ7ð@Cô ,¨dÕ2ð@Cð 
ñ@CrU   c               óF  € ^ RI Hp \        V \        4      '       dS   V! V 4      '       dE   ^ RIp\        WP                  4      '       d   \        P                  RV 4       M\        V  R24      h\        ;_uu_ 4        V \        9   d   \        P                  ! V  R2^R7       \        WW&4      p	V	\        V &   VRJ VRJ ,          '       d   \        RV  R24      hVf   \        p\!        V VVV4      p
V
\"        V &   V \$        V&   RRR4       R#   + '       g   i     R# ; i)	z This is an internal function that is used to register a pytree node type
for the Python pytree only. End-users should use :func:`register_pytree_node`
instead.
)Úis_custom_classNzÅ%s is an Enum subclass and is now natively supported by torch.compile as an opaque value type. Calling register_constant() on Enum subclasses is deprecated and will be an error in a future release.zv cannot be registered as a pytree as it has been registered as an opaque object. Opaque objects must be pytree leaves.zM is already registered as pytree node. Overwriting the previous registration.r&  z7Both to_dumpable_context and from_dumpable_context for z must be None or registered.)Útorch._library.opaque_objectr5  r†   r�   ÚenumÚ
issubclassr   ÚlogÚwarningrª   r¨   r©   r(  r)  rŽ   rG   rš   r.  r/  )r¤   r‘   r’   r�   rž   rŸ   r“   r5  r7  r1  Úserialize_node_defs   &&&$$$$    rR   r«   r«   _  s0  € õ =ä�#”t×Ò¡°×!5Ò!5ó 	ä�cŸ9™9×%Ò%Ü�K‰Kð8ð õô Ø�%ð Xð Xóð ÷
 
Ö	Ø”/Ô!ä�MŠMØ�%ð 9ð 9àõô ˜3¨LÓOˆØ'Œ˜Ñà 4Ð'Ð,AÀTÐ,I×JÔJÜØIÈ#Èð O)ð )óð ð
  Ò'Ü#@Ð ä.ØØ ØØ!ó	
Ðð +=Ô" 3Ñ'Ø?BÔ&Ð';Ñ<÷9 
×	×	Ò	ús   Á=BDÄD 	c                   óP   a € ] tR tRt o V 3R lR ltV 3R lR ltV 3R ltRtV tR# )	ÚSequenceKeyi¢  c                ó    <€ V ^8„  d   QhRS[ /# rK   rh   )rP   rQ   s   "€rR   rS   ÚSequenceKey.__annotate__¦  ó   ø€ ÷ !ñ !™ñ !rU   c                ó$   € R V P                   : R2# ©Ú[Ú]©ÚidxrY   s   &rR   rk   ÚSequenceKey.__str__¦  ó   € Ø�4—8‘8‘,˜aÐ Ð rU   c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# )rL   ÚsequencerM   )r
   rC   )rP   rQ   s   "€rR   rS   r?  ©  s   ø€ ÷ "ñ "™H¡Q�Kð "©Añ "rU   c                ó&   € WP                   ,          # rW   rE  )rZ   rJ  s   &&rR   rq   ÚSequenceKey.get©  s   € ØŸ™Õ!Ð!rU   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )rL   rF  rN   )rP   rQ   s   "€rR   rS   r?  ¢  s   ø‡ ‚ á	�Hò rU   rX   N©	rs   rt   ru   rv   rk   rq   r—   rw   rx   ry   s   @rR   r=  r=  ¢  s    ø‡ € ÷!ð !÷"ð "÷ ƒ rU   r=  ÚK)Úboundc                   óP   a € ] tR tRt o V 3R lR ltV 3R lR ltV 3R ltRtV tR# )	Ú
MappingKeyi°  c                ó    <€ V ^8„  d   QhRS[ /# rK   rh   )rP   rQ   s   "€rR   rS   ÚMappingKey.__annotate__´  r@  rU   c                ó$   € R V P                   : R2# rB  ©ÚkeyrY   s   &rR   rk   ÚMappingKey.__str__´  rH  rU   c                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# )rL   ÚmappingrM   )r	   rO  rC   )rP   rQ   s   "€rR   rS   rT  ·  s#   ø€ ÷ !ñ !™7¡1¡a 4�=ð !©Qñ !rU   c                ó&   € WP                   ,          # rW   rV  )rZ   rZ  s   &&rR   rq   ÚMappingKey.get·  s   € Ø—x‘xÕ Ð rU   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )rL   rW  )rO  )rP   rQ   s   "€rR   rS   rT  °  s   ø‡ ‚ á	
�Fò rU   rX   NrN  ry   s   @rR   rR  rR  °  s    ø‡ € ÷!ð !÷!ð !÷ ƒ rU   rR  c                   óP   a € ] tR tRt o V 3R lR ltV 3R lR ltV 3R ltRtV tR# )	rÕ   i»  c                ó    <€ V ^8„  d   QhRS[ /# rK   rh   )rP   rQ   s   "€rR   rS   ÚGetAttrKey.__annotate__¿  s   ø€ ÷ ñ ™ñ rU   c                ó    € R V P                    2# )Ú.)r…   rY   s   &rR   rk   ÚGetAttrKey.__str__¿  s   € Ø�4—9‘9�+ˆÐrU   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r}   ro   )rP   rQ   s   "€rR   rS   r`  Â  s   ø€ ÷ 'ñ '‘sð '™sñ 'rU   c                ó,   € \        WP                  4      # rW   )rÀ   r…   )rZ   r~   s   &&rR   rq   ÚGetAttrKey.getÂ  s   € Ü�sŸI™IÓ&Ð&rU   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )rL   r…   rh   )rP   rQ   s   "€rR   rS   r`  »  s   ø‡ ‚ á
�Iò rU   rX   NrN  ry   s   @rR   rÕ   rÕ   »  s    ø‡ € ÷ð ÷'ð '÷ ƒ rU   rÕ   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# r}   ©ra   r�   rb   )rP   s   "rR   rS   rS   Ç  s   € ÷ $ñ $”v¤•}ð $¬ñ $rU   c                ó^   € \        V \        4      '       d   T M
\        V 4      p\        V4      # )zSReturn whether the object is an instance of namedtuple or a subclass of namedtuple.)r†   r�   r>   ©r~   r¤   s   & rR   r=   r=   Ç  s$   € ä˜C¤×&Ò&‰#¬D°«I€CÜ˜sÓ#Ð#rU   c                ó0   € V ^8„  d   QhR\         R\        /# r  ©r�   rb   )rP   s   "rR   rS   rS   Î  s   € ÷ 	ñ 	œTð 	¤dñ 	rU   c                ó°  € \        V \        4      ;'       dÀ    \        V \        4      ;'       d¨    \        \	        V RR4      \        4      ;'       d…    \
        ;QJ d&    R V P                   4       F  '       d   K   RM	  RM! R V P                   4       4      ;'       d5    \        \	        V RR4      4      ;'       d    \        \	        V RR4      4      # )z5Return whether the class is a subclass of namedtuple.Ú_fieldsNc              3   óD   "  € T F  p\        V4      \        J x € K  	  R # 5irW   )r�   ri   )Ú.0Úfields   & rR   Ú	<genexpr>Ú&is_namedtuple_class.<locals>.<genexpr>Ô  s   é € Ð<± u”�U“œsÕ"³ùs   ‚ FTÚ_makeÚ_asdict)r†   r�   r8  r½   rÀ   Úallro  Úcallabler  s   &rR   r>   r>   Î  s°   € ô 	�3œÓ÷ 	4ð 	4Ü�sœEÓ"÷	4ð 	4ä”w˜s I¨tÓ4´eÓ<÷	4ð 	4÷ ‹CÑ<°·²Ó<�C�CŠCÑ<°·²Ó<Ó<÷	4ð 	4ô ”W˜S '¨4Ó0Ó1÷		4ð 	4ô
 ”W˜S )¨TÓ2Ó3ðrU   c                ó0   € V ^8„  d   QhR\         R\        /# r}   r`   )rP   s   "rR   rS   rS   Û  s   € ÷ *ñ *¤ð *¬4ñ *rU   c                ó*   € \        \        V 4      4      # )z7Return whether the object is an instance of namedtuple.)r>   r�   ©r~   s   &rR   r?   r?   Û  s   € äœt C›yÓ)Ð)rU   Ú_T_co)Ú	covariantc                   ó\   a € ] tR tRt o RtRtV 3R lR ltR
V 3R lR lltV 3R ltRt	V t
R	# )Ú	structseqiä  z<A generic type stub for CPython's ``PyStructSequence`` type.c                ó    <€ V ^8„  d   QhRS[ /# rK   )r   )rP   rQ   s   "€rR   rS   Ústructseq.__annotate__í  s   ø€ ÷ Kñ K¡(ñ KrU   c                ó   € \        R4      h)zProhibit subclassing.z/type 'structseq' is not an acceptable base type)rü   r  s   &rR   Ú__init_subclass__Ústructseq.__init_subclass__í  s   € äÐIÓJÐJrU   c                óh   <€ V ^8„  d   QhRS[ S[,          RS[S[,          RS[S[S[3,          RS[/# )rL   r¤   rJ  r   rM   )r�   r   r   r|  r   ri   r   )rP   rQ   s   "€rR   rS   r�  ñ  sA   ø€ ÷ "ñ "Ù‘$�Zð"á™5•/ð"ñ ‘3™�8�nð	"ñ
 
ñ"rU   c                ó   € \         hrW   )ÚNotImplementedError)r¤   rJ  r   s   &&&rR   Ú__new__Ústructseq.__new__ñ  s
   € ô "Ð!rU   c                ó˜   <€ V ^8„  d   Qh/ S[ S[R,          ,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   # )rL   Ú	__slots__Ún_fieldsÚn_sequence_fieldsÚn_unnamed_fieldsrX   )r   r½   r   rO   )rP   rQ   s   "€rR   rS   r�  ä  sN   ø‡ ‚ ñ ™˜b�	Õ"Ñ'ñ ñ
 ‘C�jÑñ ñ ™S•zÑ!ñ ñ ™C•jÑ ò rU   rX   N).)rs   rt   ru   rv   Ú__doc__r‹  rƒ  rˆ  r—   rw   rx   ry   s   @rR   r  r  ä  s*   ø‡ € ÙFà%'€I÷Kð K÷"ò "÷ ƒ rU   r  c                óF   € V ^8„  d   QhR\         \        ,          R\        /# r}   ri  )rP   s   "rR   rS   rS   û  s   € ÷ #ñ #”fœt•mð #¬ñ #rU   c                ó^   € \        V \        4      '       d   T M
\        V 4      p\        V4      # )z\Return whether the object is an instance of PyStructSequence or a class of PyStructSequence.)r†   r�   rA   rk  s   & rR   r@   r@   û  s$   € ä˜C¤×&Ò&‰#¬D°«I€CÜ˜cÓ"Ð"rU   c                ó0   € V ^8„  d   QhR\         R\        /# r  rm  )rP   s   "rR   rS   rS     s   € ÷ ñ œDð ¤Tñ rU   c                ó†  € \        V \        4      ;'       d«    V P                  \        38H  ;'       d�    \        \	        V RR4      \
        4      ;'       dl    \        \	        V RR4      \
        4      ;'       dI    \        \	        V RR4      \
        4      ;'       d&    \        V P                  \        ,          4      '       * # )z8Return whether the class is a class of PyStructSequence.rŒ  Nr�  rŽ  )	r†   r�   Ú	__bases__r½   rÀ   rO   rb   Ú	__flags__ÚPy_TPFLAGS_BASETYPEr  s   &rR   rA   rA     s«   € ô 	�3œÓ÷ 	:ð 	:à�M‰Mœe˜XÑ%÷	:ð 	:ô ”w˜s J°Ó5´sÓ;÷		:ð 	:ô
 ”w˜sÐ$7¸Ó>ÄÓD÷	:ð 	:ô ”w˜sÐ$6¸Ó=¼sÓC÷	:ð 	:ô �S—]‘]Ô%8Õ8Ó9Ô9ð
rU   c                ó0   € V ^8„  d   QhR\         R\        /# r}   r`   )rP   s   "rR   rS   rS     s   € ÷ )ñ )œvð )¬$ñ )rU   c                ó*   € \        \        V 4      4      # )z=Return whether the object is an instance of PyStructSequence.)rA   r�   r{  s   &rR   rB   rB     s   € äœd 3›iÓ(Ð(rU   c                ó‚   € V ^8„  d   QhR\         \        R3,          R\         \        \        ,          \        3,          /# ©rL   Úd.rM   )r½   rC   r¹   r   )rP   s   "rR   rS   rS     s0   € ÷ ñ ”eœA˜s˜F•mð ¬¬d´1­g´wÐ.>Õ(?ñ rU   c                 ó   € \        V 4      R 3# rW   ©r¹   ©r›  s   &rR   Ú_tuple_flattenrŸ    s   € Ü�‹7�Dˆ=ÐrU   c                ó¤   € V ^8„  d   QhR\         \        R3,          R\         \        \         \        \        3,          ,          \        3,          /# rš  )r½   rC   r¹   rI   r   )rP   s   "rR   rS   rS     s@   € ÷ Hñ HÜŒQ�ˆV…}ðHä
Œ4””h¤�kÕ"Õ#¤WÐ,Õ-ñHrU   c                 ó€   € \        V 4      w  r\        V4       UUu. uF  w  r4\        V4      V3NK  	  uppV3# u uppi rW   )rŸ  Ú	enumerater=  ©r›  rÉ   rÊ   ÚirØ   s   &    rR   Ú_tuple_flatten_with_keysr¥    ó?   € ô % QÓ'�O€Fä,5°fÔ,=Ô>Ñ,=¡D AŒ[˜‹^˜QÓÑ,=Ò>ÀÐGÐGùÓ>ó   œ:c                ól   € V ^8„  d   QhR\         \        ,          R\        R\        \        R3,          /# )rL   rÉ   rÊ   rM   .)r   rC   r   r½   )rP   s   "rR   rS   rS   '  s-   € ÷ ñ œX¤a�[ð ´7ð ¼uÄQÈÀV½}ñ rU   c                 ó   € \        V 4      # rW   )r½   ©rÉ   rÊ   s   &&rR   Ú_tuple_unflattenr«  '  s   € Ü�‹=ÐrU   c                ó~   € V ^8„  d   QhR\         \        ,          R\        \         \        ,          \        3,          /# ©rL   r›  rM   )r¹   rC   r½   r   )rP   s   "rR   rS   rS   +  s,   € ÷ ñ ”Tœ!•Wð ¤¤t¬A¥w´Ð'7Õ!8ñ rU   c                 ó
   € V R 3# rW   rX   rž  s   &rR   Ú_list_flattenr¯  +  s   € Øˆdˆ7€NrU   c                ó    € V ^8„  d   QhR\         \        ,          R\        \         \        \        \        3,          ,          \        3,          /# r­  )r¹   rC   r½   rI   r   )rP   s   "rR   rS   rS   /  s:   € ÷ Hñ Hœt¤A�wð H¬5´´e¼HÄa¸KÕ6HÕ1IÌ7Ð1RÕ+Sñ HrU   c                 ó€   € \        V 4      w  r\        V4       UUu. uF  w  r4\        V4      V3NK  	  uppV3# u uppi rW   )r¯  r¢  r=  r£  s   &    rR   Ú_list_flatten_with_keysr²  /  s=   € Ü# AÓ&�O€Fä,5°fÔ,=Ô>Ñ,=¡D AŒ[˜‹^˜QÓÑ,=Ò>ÀÐGÐGùÓ>r§  c                óh   € V ^8„  d   QhR\         \        ,          R\        R\        \        ,          /# rÈ   )r   rC   r   r¹   )rP   s   "rR   rS   rS   5  s)   € ÷ ñ œH¤Q�Kð ´'ð ¼dÄ1½gñ rU   c                 ó   € \        V 4      # rW   r�  rª  s   &&rR   Ú_list_unflattenrµ  5  s   € Ü�‹<ÐrU   c                óŠ   € V ^8„  d   QhR\         \        \        3,          R\        \        \        ,          \
        3,          /# r­  )r   r   rC   r½   r¹   r   )rP   s   "rR   rS   rS   9  s0   € ÷ ,ñ ,”Tœ#œq˜&•\ð ,¤e¬D´­G´WÐ,<Õ&=ñ ,rU   c                 óf   € \        V P                  4       4      \        V P                  4       4      3# rW   ©r¹   rÉ   Úkeysrž  s   &rR   Ú_dict_flattenrº  9  ó"   € Ü�—‘“
ÓœT !§&¡&£(›^Ð+Ð+rU   c                ó¬   € V ^8„  d   QhR\         \        \        3,          R\        \        \        \
        \        3,          ,          \        3,          /# r­  )r   r   rC   r½   r¹   rI   r   )rP   s   "rR   rS   rS   =  s@   € ÷ Wñ WÜŒC”ˆF…|ðWä
Œ4””h¤�kÕ"Õ#¤WÐ,Õ-ñWrU   c                 ó„   € \        V 4      w  r\        W!R R7       UUu. uF  w  r4\        V4      V3NK  	  uppV3# u uppi rÔ   )rº  rÎ   rR  ©r›  rÉ   rÊ   r×   rØ   s   &    rR   Ú_dict_flatten_with_keysr¿  =  sA   € ô $ AÓ&�O€Fä+.¨wÀtÕ+LÔMÑ+L¡4 1ŒZ˜‹]˜AÓÑ+LÒMÈwÐVÐVùÓMó   ž<c                ót   € V ^8„  d   QhR\         \        ,          R\        R\        \        \        3,          /# rÈ   )r   rC   r   r   r   )rP   s   "rR   rS   rS   E  s-   € ÷ 3ñ 3œH¤Q�Kð 3´'ð 3¼dÄ3ÌÀ6½lñ 3rU   c                 ó.   € \        \        WR R7      4      # rÔ   )r   rÎ   rª  s   &&rR   Ú_dict_unflattenrÃ  E  s   € Ü”�G¨DÔ1Ó2Ð2rU   c                óh   € V ^8„  d   QhR\         R\        \        \        ,          \        3,          /# r­  )r   r½   r¹   r   r   )rP   s   "rR   rS   rS   I  s(   € ÷ ñ œ:ð ¬%´´Sµ	¼7Ð0BÕ*Cñ rU   c                 ó.   € \        V 4      \        V 4      3# rW   )r¹   r�   rž  s   &rR   r  r  I  s   € Ü�‹7”D˜“GÐÐrU   c                óŠ   € V ^8„  d   QhR\         R\        \        \        \        \        3,          ,          \
        3,          /# r­  )r   r½   r¹   rI   r   r   )rP   s   "rR   rS   rS   M  s4   € ÷ ñ Üðä
Œ4””h¤�mÕ$Õ%¤wÐ.Õ/ñrU   c                 óš   € \        V 4      w  r\        VP                  VR R7       UUu. uF  w  r4\        V4      V3NK  	  uppV3# u uppi rÔ   )r  rÎ   ro  rÕ   )r›  rÉ   rÊ   rr  rØ   s   &    rR   r  r  M  sZ   € ô *¨!Ó,�O€Fô
   §¡°ÀÕEô	
áE‘�ô ˜Ó Ó"ÙEò	
ð 	ðð ùó	
s   ©Ac                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# rÈ   )r   rC   r   r   )rP   s   "rR   rS   rS   [  s%   € ÷ .ñ .¤(¬1¥+ð .¼ð .ÄJñ .rU   c                 ó*   € \        \        V! V !  4      # rW   )r   r   rª  s   &&rR   r  r  [  s   € Ü”
™G VÑ,Ó-Ð-rU   c                ó0   € V ^8„  d   QhR\         R\        /# ©rL   rÊ   rM   ©r   r    )rP   s   "rR   rS   rS   _  s   € ÷  ñ  ¤7ð  ¬ñ  rU   c                 ó    € V \         9  d   \        R V  R24      h\         V ,          pVP                  pV\        8X  d   \        R V  R24      hV# )z-Can't serialize TreeSpec of namedtuple class za because we didn't register a serialized_type_name. Please register using `_register_namedtuple`.z_ because we couldn't find a serialized_type_name. Please register using `_register_namedtuple`.)r.  r‡  r�   rG   )rÊ   r;  r�   s   &  rR   r  r  _  ss   € ØÔ0Ô0Ü!Ø;¸G¸9ð E&ð &ó
ð 	
ô 4°GÕ<ÐØ-×BÑBÐàÔ<Ô<Ü!Ø;¸G¸9ð E&ð &ó
ð 	
ð
  ÐrU   c                ó0   € V ^8„  d   QhR\         R\        /# ©rL   Údumpable_contextrM   ©r    r   )rP   s   "rR   rS   rS   s  s   € ÷ ñ ¬oð Ä'ñ rU   c                 óT   € V \         9  d   \        R V  R24      h\         V ,          pV# )z/Can't deserialize TreeSpec of namedtuple class z, because we couldn't find a serialized name.)r/  r‡  )rÐ  rœ   s   & rR   r  r  s  s>   € ØÔ=Ô=Ü!Ø=Ð>NÐ=Oð P:ð :ó
ð 	
ô
 )Ð)9Õ
:€CØ€JrU   c                óŠ   € V ^8„  d   QhR\         \        \        3,          R\        \        \        ,          \
        3,          /# r­  )r   r   rC   r½   r¹   r   )rP   s   "rR   rS   rS   ~  s1   € ÷ ,ñ ,œK¬¬Q¨Õ/ð ,´E¼$¼q½'Ä7Ð:JÕ4Kñ ,rU   c                 óf   € \        V P                  4       4      \        V P                  4       4      3# rW   r¸  rž  s   &rR   Ú_ordereddict_flattenrÕ  ~  r»  rU   c                ó¬   € V ^8„  d   QhR\         \        \        3,          R\        \        \        \
        \        3,          ,          \        3,          /# r­  )r   r   rC   r½   r¹   rI   r   )rP   s   "rR   rS   rS   ‚  sA   € ÷ Wñ WÜ”3œ�6ÕðWä
Œ4””h¤�kÕ"Õ#¤WÐ,Õ-ñWrU   c                 ó„   € \        V 4      w  r\        W!R R7       UUu. uF  w  r4\        V4      V3NK  	  uppV3# u uppi rÔ   )rÕ  rÎ   rR  r¾  s   &    rR   Ú_ordereddict_flatten_with_keysrØ  ‚  sA   € ô +¨1Ó-�O€Fä+.¨wÀtÕ+LÔMÑ+L¡4 1ŒZ˜‹]˜AÓÑ+LÒMÈwÐVÐVùÓMrÀ  c                ót   € V ^8„  d   QhR\         \        ,          R\        R\        \        \        3,          /# rÈ   )r   rC   r   r   r   )rP   s   "rR   rS   rS   Š  s8   € ÷ Yñ YÜ”Q�KðYäðYô ””a�ÕñYrU   c           	      ó<   € \        R  \        WRR7       4       4      # )c              3   ó,   "  € T F
  w  rW3x € K  	  R # 5irW   rX   )rq  rW  rõ   s   &  rR   rs  Ú)_ordereddict_unflatten.<locals>.<genexpr>Ž  s   é € ÐXÑ6W©
¨˜•|Ó6Wùs   ‚TrÌ   )r   rÎ   rª  s   &&rR   Ú_ordereddict_unflattenrÝ  Š  s   € ô ÑX´c¸'ÐRVÕ6WÓXÓXÐXrU   c                óŠ   € V ^8„  d   QhR\         \        \        3,          R\        \        \        ,          \
        3,          /# r­  )r   r   rC   r½   r¹   r   )rP   s   "rR   rS   rS   •  s1   € ÷ 5ñ 5œK¬¬Q¨Õ/ð 5´E¼$¼q½'Ä7Ð:JÕ4Kñ 5rU   c                 ó:   € \        V 4      w  rWP                  V.3# rW   )rº  Údefault_factory)r›  rÉ   Údict_contexts   &  rR   Ú_defaultdict_flattenrâ  •  s#   € Ü(¨Ó+Ñ€FØ×%Ñ% |Ð4Ð4Ð4rU   c                ó¬   € V ^8„  d   QhR\         \        \        3,          R\        \        \        \
        \        3,          ,          \        3,          /# r­  )r   r   rC   r½   r¹   rI   r   )rP   s   "rR   rS   rS   š  s=   € ÷ ñ Ü”3œ�6Õðä
Œ4””h¤�kÕ"Õ#¤WÐ,Õ-ñrU   c                 óŒ   € \        V 4      w  rVw  r4\        WAR R7       UUu. uF  w  rV\        V4      V3NK  	  uppV3# u uppi rÔ   )râ  rÎ   rR  )r›  rÉ   rÊ   rö   rá  r×   rØ   s   &      rR   Ú_defaultdict_flatten_with_keysrå  š  sU   € ô +¨1Ó-�O€FØ�O€Aô (+¨<ÈÕ'MôÙ'M™t˜qŒ�A‹˜ÓÑ'Mòàðð ùó s   ¢A c                ót   € V ^8„  d   QhR\         \        ,          R\        R\        \        \        3,          /# rÈ   )r   rC   r   r   r   )rP   s   "rR   rS   rS   ¥  s8   € ÷ Oñ OÜ”Q�KðOäðOô ””a�ÕñOrU   c                 ó4   € Vw  r#\        V\        W4      4      # rW   )r   rÃ  )rÉ   rÊ   rà  rá  s   &&  rR   Ú_defaultdict_unflattenrè  ¥  s   € ð %,Ñ!€OÜ�¬¸Ó(MÓNÐNrU   c                ó0   € V ^8„  d   QhR\         R\        /# rË  rÌ  )rP   s   "rR   rS   rS   ­  s   € ÷ ñ ¤Gð ´ñ rU   c                 óF   € V w  rR VP                   RVP                  RV/pV# )Údefault_factory_moduleÚdefault_factory_namerá  )rt   ru   )rÊ   rà  rá  Újson_defaultdicts   &   rR   Ú_defaultdict_serializerî  ­  s5   € Ø$+Ñ!€Oà  /×"<Ñ"<Ø × <Ñ <Ø˜ðÐð
 ÐrU   c                ó0   € V ^8„  d   QhR\         R\        /# rÏ  rÑ  )rP   s   "rR   rS   rS   ·  s   € ÷ +ñ +¬ð +Ä7ñ +rU   c                 ó¢  € \        V \        4      '       g   \        R 4      h0 Rmp\        V 4      V8w  d   \        RV R\        V 4       24      hV R,          pV R,          p\        V\        4      '       g   \        R4      h\        V\        4      '       g   \        R4      h\
        P                  ! V4      p\        WC4      pV R,          pWV.# )	zdumpable_context must be a dictrë  rì  rá  zdumpable_context keys must be z, got z'default_factory_module must be a stringz%default_factory_name must be a string>   rá  rì  rë  )r†   r   r  rá   ri   Ú	importlibÚimport_modulerÀ   )rÐ  Úexpected_keysrë  rì  Úmodulerà  rá  s   &      rR   Ú_defaultdict_deserializerõ  ·  sÓ   € ÜÐ&¬×-Ò-ÜÐ>Ó?Ð?ò€Mô
 ÐÓ Ô-ÜØ,¨]¨O¸6Ä#ÐFVÓBWÐAXÐYó
ð 	
ð .Ð.FÕGÐØ+Ð,BÕCÐÜÐ,¬c×2Ò2ÜÐFÓGÐGÜÐ*¬C×0Ò0ÜÐDÓEÐEÜ×$Ò$Ð%;Ó<€FÜ˜fÓ;€Oà# NÕ3€LØÐ*Ð*rU   c                ó~   € V ^8„  d   QhR\         \        ,          R\        \        \        ,          \        3,          /# r­  )r   rC   r½   r¹   r   )rP   s   "rR   rS   rS   Ò  s,   € ÷ ñ ”eœA•hð ¤5¬¬a­´'Ð)9Õ#:ñ rU   c                 ó0   € \        V 4      V P                  3# rW   )r¹   Úmaxlenrž  s   &rR   Ú_deque_flattenrù  Ò  s   € Ü�‹7�A—H‘HÐÐrU   c                ó    € V ^8„  d   QhR\         \        ,          R\        \        \        \        \        3,          ,          \
        3,          /# r­  )r   rC   r½   r¹   rI   r   )rP   s   "rR   rS   rS   Ö  s<   € ÷ Hñ HÜŒQ…xðHä
Œ4””h¤�kÕ"Õ#¤WÐ,Õ-ñHrU   c                 ó€   € \        V 4      w  r\        V4       UUu. uF  w  r4\        V4      V3NK  	  uppV3# u uppi rW   )rù  r¢  r=  r£  s   &    rR   Ú_deque_flatten_with_keysrü  Ö  r¦  r§  c                óh   € V ^8„  d   QhR\         \        ,          R\        R\        \        ,          /# rÈ   )r   rC   r   r   )rP   s   "rR   rS   rS   Þ  s)   € ÷ )ñ )œX¤a�[ð )´7ð )¼uÄQ½xñ )rU   c                 ó   € \        WR 7      # )©rø  )r   rª  s   &&rR   Ú_deque_unflattenr   Þ  s   € Ü�Ô(Ð(rU   zbuiltins.tuplerÛ   zbuiltins.listzbuiltins.dictzcollections.namedtupler§   zcollections.OrderedDictzcollections.defaultdictzcollections.dequezžtorch.utils._pytree._is_namedtuple_instance is private and will be removed in a future release. Please use torch.utils._pytree.is_namedtuple_instance instead.c                ó0   € V ^8„  d   QhR\         R\        /# ©rL   ÚtreerM   ©r   rb   )rP   s   "rR   rS   rS   .  s   € ÷ (ñ (¤#ð (¬$ñ (rU   c                 ó   € \        V 4      # rW   )r?   )r  s   &rR   Ú_is_namedtuple_instancer  )  s   € ô " $Ó'Ð'rU   c                ó0   € V ^8„  d   QhR\         R\         /# r  ro   )rP   s   "rR   rS   rS   2  s   € ÷ ñ œð ¤ñ rU   c                 óJ   € \        V 4      p\        V4      '       d   \        # V# rW   )r�   r>   r   )r  Ú	node_types   & rR   Ú_get_node_typer
  2  s$   € Ü�T“
€Iô
 ˜9×%Ò%ÜÐØÐrU   c                ón   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        /# ©rL   r  Úis_leafNrM   ©r   r   rb   )rP   s   "rR   rS   rS   >  s6   € ÷ 7ñ 7Ü
ð7ä”v�h¤�nÕ%¨Õ,ð7ô 
ñ7rU   c                óN   € Ve   V! V 4      '       d   R# \        V 4      \        9  # )a#  Check if a pytree is a leaf.

>>> tree_is_leaf(1)
True
>>> tree_is_leaf(None)
True
>>> tree_is_leaf([1, 2, 3])
False
>>> tree_is_leaf((1, 2, 3), is_leaf=lambda x: isinstance(x, tuple))
True
>>> tree_is_leaf({"a": 1, "b": 2, "c": 3})
False
>>> tree_is_leaf({"a": 1, "b": 2, "c": None})
False
T)r
  r©   ©r  r  s   &&rR   r)   r)   >  s%   € ð& Ò™w tŸ}š}ÙÜ˜$Ó¤Ñ6Ð6rU   z…torch.utils._pytree._is_leaf is private and will be removed in a future release. Please use torch.utils._pytree.tree_is_leaf instead.c                ón   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        /# r  r  )rP   s   "rR   rS   rS   [  s1   € ÷ /ñ /”6ð /¤H¬f¨X´t¨^Õ$<¸tÕ$Cð /Ìtñ /rU   c                 ó   € \        WR 7      # ©©r  )r)   r  s   &&rR   Ú_is_leafr  V  s   € ô ˜Ô.Ð.rU   )rß   r  ÚeqÚreprr  c                   ó¬  a € ] tR tRt o Rt]P                  ! RR7      t]P                  ! RR7      t]P                  ! RR7      t	V 3R lR lt
V 3R lR ltR"V 3R	 lR
 lltV 3R lR lt]V 3R lR l4       t]]! R]R7      V 3R lR l4       4       tV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R ltR tV tR!# )#r$   ig  z)Representing the structure of the pytree.F)rß   c                ó@   <€ V ^8„  d   QhRS[ RS[RS[S[,          RR/# )rL   r�   rÊ   Úchildren_specsrM   N©r   r   r¹   r   )rP   rQ   s   "€rR   rS   ÚTreeSpec.__annotate__s  s7   ø€ ÷ 	ñ 	áð	ñ ð	ñ ™T�
ð		ð
 
ñ	rU   c                ó°   € \         P                  V R V4       \         P                  V RV4       \         P                  V RV4       V P                  4        R# )r�   r  Ú	_childrenN)ra   Ú__setattr__Ú__post_init__)rZ   r�   rÊ   r  s   &&&&rR   Ú__init__ÚTreeSpec.__init__s  sF   € ô 	×Ñ˜4 ¨Ô.Ü×Ñ˜4 ¨WÔ5Ü×Ñ˜4 ¨nÔ=Ø×ÑÖrU   c                ó   <€ V ^8„  d   QhRR/# ©rL   rM   NrX   )rP   rQ   s   "€rR   rS   r  ~  s   ø€ ÷ ?ñ ?˜tñ ?rU   c                óÖ  € V P                   fF   V P                  e   \        R4      h\        V P                  4      ^ 8w  d   \        R4      h^p^p^ pMP^p^ pV P                   F'  pWP
                  ,          pW$P                  ,          pK)  	  \        V P                  4      p\        P                  V RV4       \        P                  V RV4       \        P                  V RV4       R # )Nz#leaf node should not have a contextz"leaf node should not have childrenÚ	num_nodesÚ
num_leavesÚnum_children)	r�   r  r  Úlenr  r&  r'  ra   r  )rZ   r&  r'  r(  Úchilds   &    rR   r   ÚTreeSpec.__post_init__~  sÆ   € Ø�9‰9ÒØ�}‰}Ò(Ü$Ð%JÓKÐKÜ�4—>‘>Ó" aÔ'Ü$Ð%IÓJÐJØˆIØˆJØ‰LàˆIØˆJØŸœ�ØŸ_™_Õ,�	Ø×.Ñ.Õ.’
ñ (ô ˜tŸ~™~Ó.ˆLÜ×Ñ˜4 ¨iÔ8Ü×Ñ˜4 ¨zÔ:Ü×Ñ˜4 °Ö>rU   c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©rL   ÚindentrM   ©rO   ri   )rP   rQ   s   "€rR   rS   r  ’  s   ø€ ÷ )ñ )™sð )©3ñ )rU   c           
     óì  € R V P                   P                   RV P                   R2pRpV P                  ^ 8”  dª   V^,          pW0P                  ^ ,          P                  V4      ,          pY0P                  ^8”  d   RMR,          pTRP                  V P                  R,           Uu. uF)  pRRV,          ,           VP                  V4      ,           NK+  	  up4      ,          pV R2pW%,           # u upi )	z	TreeSpec(z, z, [Ú Ú,:é   NNÚ
Ú z]))r�   rs   r  r(  r  Ú__repr__Újoin)rZ   r.  Úrepr_prefixÚchildren_specs_strr*  Úrepr_suffixs   &&    rR   r6  ÚTreeSpec.__repr__’  sê   € Ø& t§y¡y×'9Ñ'9Ð&:¸"¸T¿]¹]¸OÈ3ÐOˆØ"$ÐØ×Ñ˜qÔ Ø�a�KˆFØ§.¡.°Õ"3×"<Ñ"<¸VÓ"DÕDÐØ×):Ñ):¸QÔ)>¡#ÀBÕFÐØ #§(¡(ð "&§¡°Ö!3óá!3˜ð ˜3 �<Õ'¨%¯.©.¸Ó*@×@Ð@Ù!3ñó#õ Ðð 1Ð1°Ð4ˆØÕ(Ð(ùòs   Â(/C1
c                ó&   <€ V ^8„  d   QhRS[ RS[/# r^   )r   rb   )rP   rQ   s   "€rR   rS   r  ¢  s   ø€ ÷ ñ ™Fð ¡tñ rU   c                ó&  € WJ d   R # VP                   V P                   J dl   \        V P                  4      \        VP                  4      8w  d   R# V P                  VP                  8w  d   R# V P                  VP                  8w  d   R# R # \
        # )TF)r‡   ri   r�   r  r  ÚNotImplementedrd   s   &&rR   re   ÚTreeSpec.__eq__¢  sd   € Ø‹=ÙØ�_‰_ §¡Ó.Ü�4—9‘9‹~¤ U§Z¡Z£Ô0ÙØ�}‰} §¡Ô.ÙØ—‘ 5§?¡?Ô2ÙÙÜÐrU   c                ó    <€ V ^8„  d   QhRS[ /# rK   )r   )rP   rQ   s   "€rR   rS   r  °  s   ø€ ÷ ñ ™ñ rU   c                ó   € V P                   # rW   )r  rY   s   &rR   rÊ   ÚTreeSpec.context¯  s   € à�}‰}ÐrU   zŒ`treespec.children_specs` is deprecated. Use `treespec.child(index)` to access a single child, or `treespec.children()` to get all children.r  c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rK   ©r¹   r   )rP   rQ   s   "€rR   rS   r  º  s   ø€ ÷ ñ ¡¡T¥
ñ rU   c                ó   € V P                   # rW   ©r  rY   s   &rR   r  ÚTreeSpec.children_specs³  s   € ð �~‰~ÐrU   c                ó    <€ V ^8„  d   QhRS[ /# rK   r  )rP   rQ   s   "€rR   rS   r  ½  s   ø€ ÷ <ñ <™ñ <rU   c                óN   € V P                   ^8H  ;'       d    V P                  ^8H  # )z,Test whether the treespec represents a leaf.)r&  r'  rY   s   &rR   r  ÚTreeSpec.is_leaf½  s"   € à�~‰~ Ñ"×;Ð; t§¡¸!Ñ';Ð;rU   c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rK   rD  )rP   rQ   s   "€rR   rS   r  Á  s   ø€ ÷ %ñ %™$™t�*ñ %rU   c                ó6   € V P                   P                  4       # )zGet all the child treespecs.)r  ÚcopyrY   s   &rR   ÚchildrenÚTreeSpec.childrenÁ  s   € à�~‰~×"Ñ"Ó$Ð$rU   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )rL   ÚindexrM   )rO   r   )rP   rQ   s   "€rR   rS   r  Å  s   ø€ ÷ %ñ %™3ð %¡4ñ %rU   c                ó(   € V P                   V,          # )z*Get the child treespec at the given index.rF  )rZ   rQ  s   &&rR   r*  ÚTreeSpec.childÅ  s   € à�~‰~˜eÕ$Ð$rU   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# r  )r   r¹   )rP   rQ   s   "€rR   rS   r  É  s#   ø€ ÷ Sñ S¡&ð S©T±&­\ñ SrU   c                ó0   a€ R V3R llo. pS! WV4       V# )zdFlatten the subtrees in ``tree`` up to the structure of this treespec and return a list of subtrees.c                óV   € V ^8„  d   QhR\         R\        R\        \        ,          RR/# )rL   ÚtreespecÚnodeÚsubtreesrM   N)r$   r   r¹   )rP   s   "rR   rS   Ú,TreeSpec.flatten_up_to.<locals>.__annotate__Ì  s3   € ÷ L	3ñ L	3œXð L	3¬Vð L	3¼tÄF½|ð L	3ÐPTñ L	3rU   c           	      ó  <€ V P                  4       '       d   VP                  V4       R # \        V4      pV P                  \        9  d»   W0P                  8w  d   \        RV P                  : RV: R24      h\        V,          P                  pV! V4      w  rV\        V4      V P                  8w  d&   \        RV P                   R\        V4       R24      hW`P                  8w  d   \        RV P                  : R24      hEMÌV P                  \        9   ;'       d
    V\        9   pV'       g/   W0P                  8w  d   \        RV P                  : RV: R24      h\        V4      V P                  8w  d&   \        RV P                   R\        V4       R24      hV'       dÅ   V P                  \        Jd   V P                  MV P                  ^,          pTp	\        V4      p
\        V	4      pW«8w  d\   VP                  V
4      pV
P                  V4      pRpV'       d   VRV 2,          pV'       d   VR	V 2,          p\        R
V R24      hV	 Uu. uF  qñV,          NK  	  ppMg\        V,          P                  pV! V4      w  rVV\        Jd=   W`P                  8w  d-   \        RV P                  : RV P                  : RV: R24      h\!        WPP"                  RR7       F  w  ppS! VVV4       K  	  R # u upi )NzType mismatch; expected z
, but got rb  zNode arity mismatch; expected z+Node context mismatch for custom node type zNode type mismatch; expected r1  z; missing key(s): z; extra key(s): zNode keys mismatchz$Node context mismatch for node type z; expected TrÌ   )r  r²   r
  r�   ÚBUILTIN_TYPESrª   r©   r‘   r)  r(  r  ÚSTANDARD_DICT_TYPESr   rá   Ú
differencer   rÎ   r  )rW  rX  rY  r	  r‘   rN  rÊ   Úboth_standard_dictrá  ró  Úgot_key_setÚexpected_key_setÚmissing_keysÚ
extra_keysÚmessagerW  ÚsubtreeÚsubspecÚhelpers   &&&               €rR   rg  Ú&TreeSpec.flatten_up_to.<locals>.helperÌ  s  ø€ Ø×Ñ×!Ò!Ø—‘ Ô%Ùä& tÓ,ˆIØ�}‰}¤MÔ1à§¡Ô-Ü$ð$Ø$,§M¡MÑ#4°J¸y¹mÈ1ðNóð ô -¨YÕ7×BÑB�
Ù$.¨tÓ$4Ñ!�Ü�x“= H×$9Ñ$9Ô9Ü$ð$Ø$,×$9Ñ$9Ð#:¸*ÄSÈÃ]ÀOÐSTðVóð ð ×/Ñ/Ô/Ü$ØEÀhÇmÁmÑEVÐVWÐXóð ñ 0ð —M‘MÔ%8Ñ8÷ 9ð 9Ø!Ô%8Ñ8ð #÷ *¨i¿=¹=Ô.HÜ$ð$Ø$,§M¡MÑ#4°J¸y¹mÈ1ðNóð ô �t“9 × 5Ñ 5Ô5Ü$ð$Ø$,×$9Ñ$9Ð#:¸*ÄSÈÃYÀKÈqðRóð ÷
 &ð $Ÿ=™=´Ó;ð !×)Ò)ð &×.Ñ.¨qÕ1ð	 !ð %1�MÜ"% d£)�KÜ'*¨=Ó'9Ð$Ø"Ô6Ø'7×'BÑ'BÀ;Ó'O˜Ø%0×%;Ñ%;Ð<LÓ%M˜
Ø"$˜ß'Ø#Ð);¸L¸>Ð'JÕJ˜Gß%Ø#Ð)9¸*¸Ð'FÕF˜GÜ(Ð+=¸g¸YÀaÐ)HÓIÐIÙ5BÓC±]¨c S§	 	±]�HÐC�Hô "1°Õ!;×!FÑ!F�JÙ(2°4Ó(8Ñ%�Hà!¬Ó.Ø!×%6Ñ%6Ô6Ü(ØBÀ8Ç=Á=ÑBSð T(Ø(0×(9Ñ(9Ñ'<¸JÀwÁkÐQRðTóð ô
 %(¨×2DÑ2DÈT×$RÑ �˜Ù�w ¨Ö2ó %Sùò  Ds   ÉK>rX   )rZ   r  rY  rg  s   && @rR   Úflatten_up_toÚTreeSpec.flatten_up_toÉ  s&   ø€ ÷L	3ð L	3ð\ "$ˆÙˆt˜8Ô$ØˆrU   c                ó6   <€ V ^8„  d   QhRS[ S[,          RS[/# )rL   ÚleavesrM   )r   r   r   )rP   rQ   s   "€rR   rS   r    s   ø€ ÷ :ñ :¡©¥ð :±&ñ :rU   c           	     ó  € \        V\        \        34      '       g   \        V4      p\        V4      V P                  8w  d)   \        R\        V4       RV P                   RV  R24      hV P                  4       '       d
   V^ ,          # \        V P                  ,          P                  p^ p^ p. pV P                   F9  pWFP                  ,          pVP                  VP                  WV 4      4       TpK;  	  V! WPP                  4      # )z%Reconstruct a pytree from the leaves.z0treespec.unflatten(leaves): `leaves` has length z, but the spec refers to a pytree that holds z items (z).)r†   r¹   r½   r)  r'  rª   r  r©   r�   r’   r  r²   Ú	unflattenr  )rZ   rl  r’   ÚstartÚendÚchild_pytreesÚ
child_specs   &&     rR   rn  ÚTreeSpec.unflatten  sò   € ä˜&¤4¬ -×0Ò0Ü˜&“\ˆFÜˆv‹;˜$Ÿ/™/Ô)ÜØBÄ3ÀvÃ;À-ð P>Ø>B¿o¹oÐ=Nð OØ˜˜rð#óð ð
 �<‰<�>Š>Ø˜!•9Ðä& t§y¡yÕ1×>Ñ>ˆð ˆØˆØˆØŸ.œ.ˆJØ×(Ñ(Õ(ˆCØ× Ñ  ×!5Ñ!5°fÀ3Ð6GÓ!HÔIØŠEñ )ñ
 ˜M¯=©=Ó9Ð9rU   c                ó    <€ V ^8„  d   QhRS[ /# rK   rN   )rP   rQ   s   "€rR   rS   r  8  s   ø€ ÷ Jñ J™#ñ JrU   c                óž  € V P                   pV\        J d   V P                  w  r#V\        V4      3pM|V\        \
        39   d   \        V P                  4      pMUVe   V\        9   d   V P                  pM9\        V P                  \        4      '       d   V P                  P                  pMR p\        W\        V P                  4      34      # rW   )r�   r   r  r½   r   r   r\  r†   rî   rõ   Úhashr  )rZ   r	  rà  rá  Úhashable_contexts   &    rR   r[   ÚTreeSpec.__hash__8  s¤   € Ø—I‘Iˆ	ØœÓ#Ø,0¯M©MÑ)ˆOØ /´°|Ó1DÐEÑØœ4¤Ð-Ô-Ü$ T§]¡]Ó3ÑØÒ )¬}Ô"<Ø#Ÿ}™}ÑÜ˜Ÿ™¤|×4Ò4Ø#Ÿ}™}×2Ñ2Ñð  $ÐÜ�Y´%¸¿¹Ó2GÐHÓIÐIrU   c                ór   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[;R&   S[;R&   S[;R&   # )rL   r�   r  r  r&  r'  r(  )r   r   r¹   r   rO   )rP   rQ   s   "€rR   rS   r  g  sV   ø‡ ‚ ñ �Iñ	 ñ
 Ññ ñ ‘D�zÑñ ñ Ñ2ñ ñ Ñ3ñ ñ Ñ5ò rU   rX   N©é    )rs   rt   ru   rv   r�  rÜ   rr  r&  r'  r(  r!  r   r6  re   ÚpropertyrÊ   r   r*  r  r  rN  r*  ri  rn  r[   r—   rw   rx   ry   s   @rR   r$   r$   g  sê   ø‡ € á3ð !×&Ò&¨EÔ2€IØ!×'Ò'¨UÔ3€JØ#×)Ò)¨uÔ5€L÷	ð 	÷?ð ?÷()ò )÷ ð ð ÷ó ðð Ùð	8ð ô	÷óó ð÷<ð <÷%ð %÷%ð %÷Sð S÷j:ð :÷4Jð J÷c ƒ rU   zt`isinstance(treespec, LeafSpec)` is deprecated, use `isinstance(treespec, TreeSpec) and treespec.is_leaf()` instead.c                   óÞ   a € ] tR tRt o ]P
                  ! RRR7      t]P
                  ! RRR7      t]P
                  ! ]RR7      t	V 3R lR lt
RV 3R lR	 lltV 3R
 lR ltV 3R ltRtV tR# )r%   iT  NF)r‰   rß   )rà  rß   c                ó   <€ V ^8„  d   QhRR/# r$  rX   )rP   rQ   s   "€rR   rS   ÚLeafSpec.__annotate___  s   ø€ ÷ 
4ñ 
4˜$ñ 
4rU   c                ó  € \         P                  V R R4       \         P                  V RR4       \         P                  V R. 4       \         P                  V R^4       \         P                  V R^4       \         P                  V R^ 4       R# )r�   Nr  r  r&  r'  r(  )ra   r  rY   s   &rR   r!  ÚLeafSpec.__init___  sp   € ô
 	×Ñ˜4 ¨Ô.Ü×Ñ˜4 ¨TÔ2Ü×Ñ˜4 ¨bÔ1Ü×Ñ˜4 ¨aÔ0Ü×Ñ˜4 ¨qÔ1Ü×Ñ˜4 °Ö3rU   c                ó&   <€ V ^8„  d   QhRS[ RS[/# r-  r/  )rP   rQ   s   "€rR   rS   r  k  s   ø€ ÷ ñ ™sð ©3ñ rU   c                ó   € R # ©Ú*rX   )rZ   r.  s   &&rR   r6  ÚLeafSpec.__repr__k  ó   € ÙrU   c                óV   <€ V ^8„  d   QhRS[ S[. R3,          S[ R,          3,          /# )rL   rM   r%   rX   )r½   r   )rP   rQ   s   "€rR   rS   r  n  s+   ø€ ÷ #ñ #™E¡(¨2¨z¨>Õ":¹EÀ"½IÐ"EÕFñ #rU   c                ó   € \         R3# )NrX   )Útreespec_leafrY   s   &rR   Ú
__reduce__ÚLeafSpec.__reduce__n  s   € ô ˜rÐ"Ð"rU   c                óN   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   # )rL   r�   r  r  r  )rP   rQ   s   "€rR   rS   r  T  s0   ø‡ ‚ ñ Ñ;ñ ñ ÑCñ ñ ‘D�zÑOò rU   rX   rz  )rs   rt   ru   rv   rÜ   rr  r�   r  r¹   r  r!  r6  r‹  r—   rw   rx   ry   s   @rR   r%   r%   T  sb   ø‡ € ð ×!Ò!¨$°UÔ;€DØ#×)Ò)°$¸UÔC€HØ'×-Ò-¸dÈÔO€I÷
4ð 
4÷ò ÷#ð #÷5 ƒ rU   Úignore)r  rô  r²   c                ó$   € V ^8„  d   QhR\         /# rK   )r%   )rP   s   "rR   rS   rS   ~  s   € ÷ ñ ”xñ rU   c                 ó   € \         # )z)Make a treespec representing a leaf node.)Ú
_LEAF_SPECrX   rU   rR   rŠ  rŠ  ~  s   € äÐrU   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )rL   ÚiterablerM   )r   r$   )rP   s   "rR   rS   rS   ƒ  s   € ÷ +ñ +œX¤hÕ/ð +¼Hñ +rU   c               óÎ   € \        V 4      p\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        RV: R24      h\        \        RV4      # )z:Make a tuple treespec from an iterable of child treespecs.c              3   óL   "  € T F  p\        V\        4      '       * x € K  	  R # 5irW   ©r†   r$   ©rq  r*  s   & rR   rs  Ú!treespec_tuple.<locals>.<genexpr>†  s   é € Ð
A¹¨uŒz˜%¤Ó*×*Ñ*»ùó   ‚"$TFz*Expected a tuple of TreeSpec values, got: rb  N)r¹   Úanyrª   r$   r½   )r“  rN  s   " rR   Útreespec_tupler›  ƒ  sQ   € ä�H‹~€Hß
ƒsÑ
A¹Ó
A‡s‡s‚sÑ
A¹Ó
A×AÒAÜÐEÀhÁ\ÐQRÐSÓTÐTÜ”E˜4 Ó*Ð*rU   c                ó¬   € V ^8„  d   QhR\         \        \        3,          \        \        \        \        3,          ,          ,          R\        R\        /# )rL   rZ  rµ   rM   )r	   r   r$   r   r½   )rP   s   "rR   rS   rS   ‹  sI   € ÷ 	@ñ 	@Ü”Sœ(�]Õ#¤h¬u´S¼(°]Õ/CÕ&DÕDð	@ô ð	@ô ñ		@rU   c               ód  € \        V 3/ VB p\        ;QJ d*    R VP                  4        4       F  '       g   K   RM	  RM! R VP                  4        4       4      '       d   \        RV: R24      h\	        \         \        VP                  4       4      \        VP                  4       4      4      # )z4Make a dict treespec from a dict of child treespecs.c              3   óL   "  € T F  p\        V\        4      '       * x € K  	  R # 5irW   r–  r—  s   & rR   rs  Ú treespec_dict.<locals>.<genexpr>’  s   é € Ð
E¹¨uŒz˜%¤Ó*×*Ñ*»ùr™  TFz/Expected a dictionary of TreeSpec values, got: rb  )r   rš  rÉ   rª   r$   r¹   r¹  )rZ  rµ   Údcts   ", rR   Útreespec_dictr¡  ‹  s{   € ô ˆwÑ
!˜&Ñ
!€Cß
ƒsÑ
E¸¿
¹
¼Ó
E‡s‡s‚sÑ
E¸¿
¹
¼Ó
E×EÒEÜÐJÈ3É'ÐQRÐSÓTÐTÜ”Dœ$˜sŸx™x›zÓ*¬D°·±³Ó,>Ó?Ð?rU   c                ó>   € V ^8„  d   QhR\         R\        R,          /# )rL   r~   rM   ú TreeSpec | cxx_pytree.PyTreeSpec)r   r   )rP   s   "rR   rS   rS   —  s"   € ÷ ñ Ü	ðäÐ.Õ/ñrU   c                 ó  € \        V \        4      '       d   R # R\        P                  9   d'   ^ RIHu Hp \        WP                  4      '       d   R # R\        P                  9   d"   ^ RIH	u H
u Hp \        WP                  4      # R# )Tztorch.utils._cxx_pytreeNztorch._dynamo.polyfills.pytreeF)r†   r$   ÚsysÚmodulesr®   r¯   r°   r#   Útorch._dynamo.polyfills.pytreeÚ_dynamoÚ	polyfillsÚpytree)r~   r³   Údynamo_pytrees   &  rR   Ú_is_pytreespec_instancer¬  —  sd   € ô �#”x× Ò ÙØ ¤C§K¡KÔ/÷ 	5Ð4ä�c×0Ñ0×1Ò1ÙØ'¬3¯;©;Ô6÷ 	?Ó>ä˜#×7Ñ7Ó8Ð8ÙrU   c                ó(   € V ^8„  d   QhRRR\         /# )rL   rW  r£  rM   )r$   )rP   s   "rR   rS   rS   ®  s   € ÷ &ñ &Ø0ð&äñ&rU   c                 óà   € \        V \        4      '       d   V # \        V 4      '       g   \        R \	        V 4       R24      hV P                  ^ .V P                  ,          4      p\        V4      # )úIExpected `treespec` to be an instance of PyTreeSpec but got item of type rb  )r†   r$   r¬  rü   r�   rn  r'  r0   ©rW  Ú
dummy_trees   & rR   Ú _ensure_python_treespec_instancer²  ®  so   € ô �(œH×%Ò%Øˆä" 8×,Ò,Üð/Ü/3°H«~Ð.>¸aðAó
ð 	
ð ×#Ñ# Q C¨(×*=Ñ*=Õ$=Ó>€JÜ˜*Ó%Ð%rU   c                ó¦   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        \        \
        ,          \        3,          /# r  )r   r   rb   r½   r¹   r   r$   )rP   s   "rR   rS   rS   ½  sD   € ÷ ñ Ü
ðä”v�h¤�nÕ%¨Õ,ðô Œ4”�9”hÐÕñrU   c                ó4   aa€ R VV3R llo. pS! W4      pW#3# )zcFlattens a pytree into a list of values and a TreeSpec that can be used
to reconstruct the pytree.
c                óR   € V ^8„  d   QhR\         R\        \        ,          R\        /# )rL   rX  rl  rM   )r   r¹   r   r$   )rP   s   "rR   rS   Ú"tree_flatten.<locals>.__annotate__Å  s%   € ÷ 6ñ 6”Vð 6¤T¬#¥Yð 6´8ñ 6rU   c                 ó   <€ \        V S	R 7      '       d   VP                  V 4       \        # \        V 4      p\        V,          P
                  pV! V 4      w  rEV Uu. uF  pS! Wa4      NK  	  pp\        W%V4      # u upi r  )r)   r²   r‘  r
  r©   r‘   r$   )
rX  rl  r	  r‘   rN  rÊ   r*  Úsubspecsrg  r  s
   &&      €€rR   rg  Útree_flatten.<locals>.helperÅ  sx   ø€ Ü˜ g×.Ó.Ø�M‰M˜$ÔÜÐä" 4Ó(ˆ	Ü$ YÕ/×:Ñ:ˆ
Ù& tÓ,Ñˆñ 8@Ó@±x¨e‘F˜5Ö)±xˆÐ@Ü˜	¨HÓ5Ð5ùò As   ÁA;rX   )r  r  rl  rW  rg  s   &f  @rR   r*   r*   ½  s'   ù€ ÷6ñ 6ð €FÙ�dÓ#€HØÐÐrU   c                óR   € V ^8„  d   QhR\         \        ,          R\        R\        /# )rL   rl  rW  rM   )r   r   r$   r   )rP   s   "rR   rS   rS   ×  s%   € ÷ &ñ &œ8¤C�=ð &´Hð &Äñ &rU   c                óœ   € \        V4      '       g,   \        V 4      '       g   \        R\        V4       R24      hYrVP                  V 4      # )ziGiven a list of values and a TreeSpec, builds a pytree.
This is the inverse operation of `tree_flatten`.
r¯  rb  )r¬  rü   r�   rn  )rl  rW  s   &&rR   r,   r,   ×  sV   € ô # 8×,Ò,Ü& v×.Ò.Üð3Ü37¸³>Ð2BÀ!ðEóð ð
 $�Ø×Ñ˜fÓ%Ð%rU   c                ó„   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        \        ,          /# r  )r   r   rb   r   r   )rP   s   "rR   rS   rS   æ  s:   € ÷ 9ñ 9Ü
ð9ä”v�h¤�nÕ%¨Õ,ð9ô Œc…]ñ9rU   c              #  óÔ   "  € \        WR7      '       d   V x € R# \        V 4      p\        V,          P                  pV! V 4      w  rEV F  p\	        WaR7       Rj  x€L
  K  	  R#  L
5i)z,Get an iterator over the leaves of a pytree.r  N)r)   r
  r©   r‘   r-   )r  r  r	  r‘   rq  rö   r*  s   &&     rR   r-   r-   æ  s[   é € ô
 �D×*Ó*ØŒ
ä" 4Ó(ˆ	Ü$ YÕ/×:Ñ:ˆ
Ù% dÓ+Ñˆó #ˆEÜ  Ô8×8Ò8ó #Ù8ùs   ‚AA(ÁA&ÁA(c                ó„   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        \        ,          /# r  ©r   r   rb   r¹   r   )rP   s   "rR   rS   rS   ÷  s:   € ÷ 2ñ 2Ü
ð2ä”v�h¤�nÕ%¨Õ,ð2ô 
Œ#…Yñ2rU   c                ó,   € \        \        WR7      4      # )z!Get a list of leaves of a pytree.r  )r¹   r-   r  s   &&rR   r.   r.   ÷  s   € ô
 ”	˜$Ô0Ó1Ð1rU   c                ón   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        /# r  )r   r   rb   r$   )rP   s   "rR   rS   rS   ÿ  s6   € ÷ 2ñ 2Ü
ð2ä”v�h¤�nÕ%¨Õ,ð2ô ñ2rU   c                ó(   € \        WR7      ^,          # )zGet the TreeSpec for a pytree.r  )r*   r  s   &&rR   r0   r0   ÿ  s   € ô
 ˜Ô.¨qÕ1Ð1rU   r  c          
      ó    € V ^8„  d   QhR\         R\        3,          R\        R\        R\         \        .\        3,          R,          R\        /# ©rL   Úfunc.r  Úrestsr  NrM   ©r   r   r   rb   )rP   s   "rR   rS   rS     sS   € ÷ )5ñ )5Ü
�3œ�8Õ
ð)5ä
ð)5ô ð)5ô ”v�h¤�nÕ%¨Õ,ð	)5ô
 ñ)5rU   c               ó°   € \        WR7      w  rEV.V Uu. uF  qeP                  V4      NK  	  up,           pVP                  \        V .VO5!  4      # u upi )a  Map a multi-input function over pytree args to produce a new pytree.

See also :func:`tree_map_`.

>>> tree_map(lambda x: x + 1, {"x": 7, "y": (42, 64)})
{'x': 8, 'y': (43, 65)}
>>> tree_map(lambda x: x is None, {"x": 7, "y": (42, 64), "z": None})
{'x': False, 'y': (False, False), 'z': True}

If multiple inputs are given, the structure of the tree is taken from the first input;
subsequent inputs need only have ``tree`` as a prefix:

>>> tree_map(lambda x, y: [x] + y, [5, 6], [[7, 9], [1, 2]])
[[5, 7, 9], [6, 1, 2]]

Args:
    func (callable): A function that takes ``1 + len(rests)`` arguments, to be applied at the
        corresponding leaves of the pytrees.
    tree (pytree): A pytree to be mapped over, with each leaf providing the first positional
        argument to function ``func``.
    rests (tuple of pytree): A tuple of pytrees, each of which has the same structure as
        ``tree`` or has ``tree`` as a prefix.
    is_leaf (callable, optional): An extra leaf predicate function that will be called at each
        flattening step. The function should have a single argument with signature
        ``is_leaf(node) -> bool``. If it returns :data:`True`, the whole subtree being treated
        as a leaf. Otherwise, the default pytree registry will be used to determine a node is a
        leaf or not. If the function is not specified, the default pytree registry will be used.

Returns:
    A new pytree with the same structure as ``tree`` but with the value at each leaf given by
    ``func(x, *xs)`` where ``x`` is the value at the corresponding leaf in ``tree`` and ``xs``
    is the tuple of values at corresponding nodes in ``rests``.
r  )r*   ri  rn  Úmap©rÅ  r  r  rÆ  rl  rW  ÚrÚ	flat_argss   &&$*    rR   r1   r1     sW   € ôN $ DÔ:Ñ€FØ�¹uÓE¹u¸!×2Ñ2°1Ö5¹uÑEÕE€IØ×Ñœc $Ð3¨Ó3Ó4Ð4ùò Fs   •Ac          
      ó    € V ^8„  d   QhR\         R\        3,          R\        R\        R\         \        .\        3,          R,          R\        /# rÄ  rÇ  )rP   s   "rR   rS   rS   3  sS   € ÷ ñ Ü
�3œ�8Õ
ðä
ðô ðô ”v�h¤�nÕ%¨Õ,ð	ô
 ñrU   c               ó¬   € \        WR7      w  rEV.V Uu. uF  qeP                  V4      NK  	  up,           p\        \        V .VO5!  ^ R7       V# u upi )a  Like :func:`tree_map`, but do an inplace call on each leaf and return the original tree.

See also :func:`tree_map`.

Args:
    func (callable): A function that takes ``1 + len(rests)`` arguments, to be applied at the
        corresponding leaves of the pytrees.
    tree (pytree): A pytree to be mapped over, with each leaf providing the first positional
        argument to function ``func``.
    rests (tuple of pytree): A tuple of pytrees, each of which has the same structure as
        ``tree`` or has ``tree`` as a prefix.
    is_leaf (callable, optional): An extra leaf predicate function that will be called at each
        flattening step. The function should have a single argument with signature
        ``is_leaf(node) -> bool``. If it returns :data:`True`, the whole subtree being treated
        as a leaf. Otherwise, the default pytree registry will be used to determine a node is a
        leaf or not. If the function is not specified, the default pytree registry will be used.

Returns:
    The original ``tree`` with the value at each leaf is given by the side-effect of function
    ``func(x, *xs)`` (not the return value) where ``x`` is the value at the corresponding leaf
    in ``tree`` and ``xs`` is the tuple of values at values at corresponding nodes in ``rests``.
r  rÿ  )r*   ri  r   rÉ  rÊ  s   &&$*    rR   r3   r3   3  sT   € ô8 $ DÔ:Ñ€FØ�¹uÓE¹u¸!×2Ñ2°1Ö5¹uÑEÕE€IÜ	Œ#ˆdÐ
�YÓ
¨Õ*Ø€Kùò Fs   •Ac                ó~   € V ^8„  d   QhR\         \        ,          R\        \        \        \        3,          ,          /# ©rL   Útype_or_types_or_predrM   )r�   rC   Ú	MapOnlyFnÚFnr   )rP   s   "rR   rS   rS   d  s#   € × MÑ M¤D¬¥GÐ M´9¼RÄÄ3À½ZÕ3HÑ MrU   c                ó   € R # rW   rX   ©rÑ  s   "rR   Úmap_onlyrÖ  c  ó   € ÙJMrU   c                ó”   € V ^8„  d   QhR\         \        \        3,          R\        \        \        \        \
        3,          ,          /# rÐ  )ÚType2rC   rD   rÒ  ÚFn2r   )rP   s   "rR   rS   rS   h  s)   € × UÑ U¤E¬!¬Q¨$¥KÐ U´yÄÄQÌÌ3ÀYÅÕ7PÑ UrU   c                ó   € R # rW   rX   rÕ  s   "rR   rÖ  rÖ  g  s   € ÙRUrU   c          	      ó¨   € V ^8„  d   QhR\         \        \        \        3,          R\        \
        \        \        \        \        3,          ,          /# rÐ  )ÚType3rC   rD   rE   rÒ  ÚFn3r   )rP   s   "rR   rS   rS   l  s8   € ÷ 'ñ 'Ü ¤¤A¤q �>ð'äŒs”1”aœœC�<Õ Õ!ñ'rU   c                ó   € R # rW   rX   rÕ  s   "rR   rÖ  rÖ  k  s   € ñ $'rU   c                ó\   € V ^8„  d   QhR\         R\        \        \        ,          ,          /# rÐ  )ÚTypeAnyrÒ  ÚFnAnyr   )rP   s   "rR   rS   rS   s  s   € × MÑ M¤GÐ M´9¼UÄ3½ZÕ3HÑ MrU   c                ó   € R # rW   rX   rÕ  s   "rR   rÖ  rÖ  r  r×  rU   c                ó€   € V ^8„  d   QhR\         \        .\        3,          R\        \        \        ,          ,          /# rÐ  )r   r   rb   rÒ  râ  )rP   s   "rR   rS   rS   w  s0   € ÷  ñ  Ü#¤S E¬4 KÕ0ð äŒu”S�zÕñ rU   c                ó   € R # rW   rX   rÕ  s   "rR   rÖ  rÖ  v  s   € ñ  rU   c                ó–   € V ^8„  d   QhR\         \        \        .\        3,          ,          R\        \
        \        ,          ,          /# rÐ  )rá  r   r   rb   rÒ  râ  )rP   s   "rR   rS   rS   |  s5   € ÷ (ñ (Ü"¤X¬s¨e´T¨kÕ%:Õ:ð(äŒu”S�zÕñ(rU   c               óÄ   a a€ \        S \        \        \        P                  34      '       d   R V 3R lloM\        S 4      '       d   S oM\        R4      hR V3R llpV# )aw  
Suppose you are writing a tree_map over tensors, leaving everything
else unchanged.  Ordinarily you would have to write:

    def go(t):
        if isinstance(t, Tensor):
            return ...
        else:
            return t

With this function, you only need to write:

    @map_only(Tensor)
    def go(t):
        return ...

You can also directly use 'tree_map_only'
c                ó0   € V ^8„  d   QhR\         R\        /# ©rL   rð   rM   r  )rP   s   "rR   rS   Úmap_only.<locals>.__annotate__“  s   € ÷ 	8ñ 	8”Cð 	8œDñ 	8rU   c                 ó   <€ \        V S4      # rW   ©r†   )rð   rÑ  s   &€rR   ÚpredÚmap_only.<locals>.pred“  s   ø€ Ü˜aÐ!6Ó7Ð7rU   z9Argument must be a type, a tuple of types, or a callable.c                óx   € V ^8„  d   QhR\         \        .\        3,          R\         \        .\        3,          /# )rL   rÅ  rM   )r   rC   r   )rP   s   "rR   rS   rê  ›  s0   € ÷ ñ ”h¤˜s¤C˜xÕ(ð ¬X´s°e¼S°jÕ-Añ rU   c                 óP   <a € \         P                  ! S 4      R  V V3R ll4       pV# )c                ó0   € V ^8„  d   QhR\         R\        /# ré  )rC   r   )rP   s   "rR   rS   Ú/map_only.<locals>.wrapper.<locals>.__annotate__�  s   € ÷ 	ñ 	”qð 	œSñ 	rU   c                 ó4   <€ S! V 4      '       d	   S! V 4      # V # rW   rX   )rð   rÅ  rí  s   &€€rR   ÚwrappedÚ*map_only.<locals>.wrapper.<locals>.wrappedœ  s   ø€ á�A�wŠwÙ˜A“w�ØˆHrU   )Ú	functoolsÚwraps)rÅ  rô  rí  s   f €rR   ÚwrapperÚmap_only.<locals>.wrapper›  s*   ù€ Ü	�Š˜Ó	÷	ð 	ó 
ð	ð
 ˆrU   )r†   r�   r½   ÚtypesÚ	UnionTyperx  rü   )rÑ  rø  rí  s   b @rR   rÖ  rÖ  |  sX   ù€ ô* Ð'¬$´´u·±Ð)G×HÒH÷	8ñ 	8ô 
Ð'×	(Ò	(Ø$‰äÐSÓTÐT÷ð ð €NrU   c          
      ó¾   € V ^8„  d   QhR\         \        \        3,          R\        R\        \        .\
        3,          R,          R\        \        ,          R\        /# ©rL   rÅ  r  r  NrÑ  rM   ©rÓ  rC   r   r   r   rb   r�   )rP   s   "rR   rS   rS   ¨  óX   € ÷ ñ ô ŒQ”ˆV�*ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜ¤�7ðô ñrU   c                ó   € R # rW   rX   ©rÑ  rÅ  r  r  s   "&&&rR   r4   r4   §  ó   € ñ rU   c          
      óÔ   € V ^8„  d   QhR\         \        \        \        3,          R\        R\
        \        .\        3,          R,          R\        \        \        3,          R\        /# rý  ©rÚ  rC   rD   r   r   r   rb   rÙ  )rP   s   "rR   rS   rS   ²  ó^   € ÷ ñ ô Œa””Cˆi�.ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜ ¤¤A �;ðô ñrU   c                ó   € R # rW   rX   r  s   "&&&rR   r4   r4   ±  r  rU   c                óè   € V ^8„  d   QhR\         \        \        \        \        3,          R\
        R\        \
        .\        3,          R,          R\        \        \        \        3,          R\
        /# rý  ©	rÞ  rC   rD   rE   r   r   r   rb   rÝ  )rP   s   "rR   rS   rS   ¼  óc   € ÷ ñ ô Œa””A”sˆlÕ
ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜ ¤¤A¤q �>ðô ñrU   c                ó   € R # rW   rX   r  s   "&&&rR   r4   r4   »  r  rU   c          
      óœ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\
        R\        /# rý  ©râ  r   r   r   rb   rá  )rP   s   "rR   rS   rS   Æ  óP   € ÷ ñ ô ”�*ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜ"ðô ñrU   c                ó   € R # rW   rX   r  s   "&&&rR   r4   r4   Å  r  rU   c          
      óÀ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\        \        .\        3,          R\        /# rý  ©râ  r   r   r   rb   )rP   s   "rR   rS   rS   Ð  ó[   € ÷ ñ ô ”�*ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜ#¤S E¬4 KÕ0ðô ñrU   c                ó   € R # rW   rX   r  s   "&&&rR   r4   r4   Ï  r  rU   c                óÖ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\
        \        \        .\        3,          ,          R\        /# rý  r  )rP   s   "rR   rS   rS   Ù  sg   € ÷ Rñ Rô ”�*ðRô ð	Rô
 ”v�h¤�nÕ%¨Õ,ðRÜ"¤X¬s¨e´T¨kÕ%:Õ:ðRô ñRrU   c                ó:   € \        \        V 4      ! V4      W#R 7      # r  )r1   rÖ  r  s   "&&&rR   r4   r4   Ù  s   € ô ”HÐ2Ô3°DÓ9¸4ÔQÐQrU   c          
      ó¾   € V ^8„  d   QhR\         \        \        3,          R\        R\        \        .\
        3,          R,          R\        \        ,          R\        /# rý  rþ  )rP   s   "rR   rS   rS   ä  rÿ  rU   c                ó   € R # rW   rX   r  s   "&&&rR   r5   r5   ã  r  rU   c          
      óÔ   € V ^8„  d   QhR\         \        \        \        3,          R\        R\
        \        .\        3,          R,          R\        \        \        3,          R\        /# rý  r  )rP   s   "rR   rS   rS   î  r  rU   c                ó   € R # rW   rX   r  s   "&&&rR   r5   r5   í  r  rU   c                óè   € V ^8„  d   QhR\         \        \        \        \        3,          R\
        R\        \
        .\        3,          R,          R\        \        \        \        3,          R\
        /# rý  r  )rP   s   "rR   rS   rS   ø  r	  rU   c                ó   € R # rW   rX   r  s   "&&&rR   r5   r5   ÷  r  rU   c          
      óœ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\
        R\        /# rý  r  )rP   s   "rR   rS   rS     r  rU   c                ó   € R # rW   rX   r  s   "&&&rR   r5   r5     r  rU   c          
      óÀ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\        \        .\        3,          R\        /# rý  r  )rP   s   "rR   rS   rS     r  rU   c                ó   € R # rW   rX   r  s   "&&&rR   r5   r5     r  rU   c                óÖ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\
        \        \        .\        3,          ,          R\        /# rý  r  )rP   s   "rR   rS   rS     sg   € ÷ Sñ Sô ”�*ðSô ð	Sô
 ”v�h¤�nÕ%¨Õ,ðSÜ"¤X¬s¨e´T¨kÕ%:Õ:ðSô ñSrU   c                ó:   € \        \        V 4      ! V4      W#R 7      # r  )r3   rÖ  r  s   "&&&rR   r5   r5     s   € ô ”XÐ3Ô4°TÓ:¸DÔRÐRrU   c                óž   € V ^8„  d   QhR\         \        .\        3,          R\        R\         \        .\        3,          R,          R\        /# ©rL   rí  r  r  NrM   ©r   r   rb   r   )rP   s   "rR   rS   rS     óK   € ÷ %ñ %Ü
”C�5œ$�;Õ
ð%ä
ð%ô ”v�h¤�nÕ%¨Õ,ð%ô 
ñ	%rU   c                 óB   € \        WR 7      p\        \        W4      4      # r  )r-   rw  rÉ  ©rí  r  r  rÌ  s   &&& rR   r6   r6     ó   € ô
 ˜$Ô0€IÜŒs�4Ó#Ó$Ð$rU   c                óž   € V ^8„  d   QhR\         \        .\        3,          R\        R\         \        .\        3,          R,          R\        /# r"  r#  )rP   s   "rR   rS   rS   (  r$  rU   c                 óB   € \        WR 7      p\        \        W4      4      # r  )r-   rš  rÉ  r&  s   &&& rR   r7   r7   (  r'  rU   c          
      ó¾   € V ^8„  d   QhR\         \        \        3,          R\        R\        \        .\        3,          R,          R\
        \        ,          R\        /# ©rL   rí  r  r  NÚtype_or_typesrM   ©rÓ  rC   rb   r   r   r�   )rP   s   "rR   rS   rS   2  óX   € ÷ ñ ô ŒQ”ˆW�+ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜœ•7ðô 
ñrU   c                ó   € R # rW   rX   ©r,  rí  r  r  s   "&&&rR   r8   r8   1  ó   € ñ rU   c          
      óÔ   € V ^8„  d   QhR\         \        \        \        3,          R\        R\
        \        .\        3,          R,          R\        \        \        3,          R\        /# r+  ©rÚ  rC   rD   rb   r   r   rÙ  )rP   s   "rR   rS   rS   <  ó^   € ÷ ñ ô Œa””Dˆj�/ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜœœA˜•;ðô 
ñrU   c                ó   € R # rW   rX   r0  s   "&&&rR   r8   r8   ;  r1  rU   c                óè   € V ^8„  d   QhR\         \        \        \        \        3,          R\
        R\        \
        .\        3,          R,          R\        \        \        \        3,          R\        /# r+  ©rÞ  rC   rD   rE   rb   r   r   rÝ  )rP   s   "rR   rS   rS   F  óc   € ÷ ñ ô Œa””A”tˆmÕ
ðô ð	ô
 ”v�h¤�nÕ%¨Õ,ðÜœœAœq˜•>ðô 
ñrU   c                ó   € R # rW   rX   r0  s   "&&&rR   r8   r8   E  r1  rU   c          
      óœ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\        R\        /# r+  ©râ  rb   r   r   rá  )rP   s   "rR   rS   rS   O  óW   € ÷ Kñ Kô ”�+ðKô ð	Kô
 ”v�h¤�nÕ%¨Õ,ðKÜðKô 
ñKrU   c                ó–   a a€ \        W#R 7      p\        ;QJ d     VV 3R lV 4       F  '       d   K   R# 	  R# ! VV 3R lV 4       4      # )r  c              3   ó\   <"  € T F!  p\        VS4      '       g   K  S! V4      x € K#  	  R # 5irW   rì  ©rq  rð   rí  r,  s   & €€rR   rs  Ú tree_all_only.<locals>.<genexpr>W  ó"   øé € ÐJ¡	˜1¬Z¸¸=×-IŒw‰t�A�wˆw£	ùó   ƒ,œ,FT)r-   rw  ©r,  rí  r  r  rÌ  s   bf&& rR   r8   r8   O  ó8   ù€ ô ˜$Ô0€Iß‹3ÕJ¡	ÓJ�3Œ3ÐJŠ3ÐJˆ3ÕJ¡	ÓJÓJÐJrU   c          
      ó¾   € V ^8„  d   QhR\         \        \        3,          R\        R\        \        .\        3,          R,          R\
        \        ,          R\        /# r+  r-  )rP   s   "rR   rS   rS   [  r.  rU   c                ó   € R # rW   rX   r0  s   "&&&rR   r9   r9   Z  r1  rU   c          
      óÔ   € V ^8„  d   QhR\         \        \        \        3,          R\        R\
        \        .\        3,          R,          R\        \        \        3,          R\        /# r+  r3  )rP   s   "rR   rS   rS   e  r4  rU   c                ó   € R # rW   rX   r0  s   "&&&rR   r9   r9   d  r1  rU   c                óè   € V ^8„  d   QhR\         \        \        \        \        3,          R\
        R\        \
        .\        3,          R,          R\        \        \        \        3,          R\        /# r+  r7  )rP   s   "rR   rS   rS   o  r8  rU   c                ó   € R # rW   rX   r0  s   "&&&rR   r9   r9   n  r1  rU   c          
      óœ   € V ^8„  d   QhR\         \        ,          R\        R\        \        .\        3,          R,          R\        R\        /# r+  r;  )rP   s   "rR   rS   rS   x  r<  rU   c                ó–   a a€ \        W#R 7      p\        ;QJ d     VV 3R lV 4       F  '       g   K   R# 	  R# ! VV 3R lV 4       4      # )r  c              3   ó\   <"  € T F!  p\        VS4      '       g   K  S! V4      x € K#  	  R # 5irW   rì  r?  s   & €€rR   rs  Ú tree_any_only.<locals>.<genexpr>€  rA  rB  TF)r-   rš  rC  s   bf&& rR   r9   r9   x  rD  rU   c          	      óž   € V ^8„  d   QhR\         R\        R\        \         .\        3,          R,          R\        \
        ,          R,          /# )rL   r  rW  r  NrM   )r   r$   r   rb   r¹   r   )rP   s   "rR   rS   rS   ‹  sI   € ÷ ñ Ü
ðäðô ”v�h¤�nÕ%¨Õ,ðô 
Œ#…Y�Õñ	rU   c                 óˆ   € RR R llp\        ^ .VP                  ,          V4      p V! WVR7      #   \         d     R # i ; i)Nc          	      ó�   € V ^8„  d   QhR\         R\         R\        \         .\        3,          R,          R\        \        ,          /# )rL   Úprefix_treeÚ	full_treer  NrM   r¿  )rP   s   "rR   rS   Ú/_broadcast_to_and_flatten.<locals>.__annotate__�  sD   € ÷ ñ Üðäðô œ6˜(¤D˜.Õ)¨DÕ0ðô 
Œc�ñ	rU   c                 ó@   aa€ . oR  VV3R llp\        VV VSR7       S# )c                ó4   € V ^8„  d   QhR\         R\        RR/# )rL   rð   re  rM   N)r   r   )rP   s   "rR   rS   ÚI_broadcast_to_and_flatten.<locals>.broadcast_prefix.<locals>.__annotate__—  s!   € ÷ 	8ñ 	8œ#ð 	8¬ð 	8°4ñ 	8rU   c                 óh   <€ \        VSR 7      pSP                  V .VP                  ,          4       R# )r  N)r0   Úextendr'  )rð   re  Úsubtreespecr  Úresults   && €€rR   Ú
add_leavesÚG_broadcast_to_and_flatten.<locals>.broadcast_prefix.<locals>.add_leaves—  s(   ø€ Ü(¨¸'ÔBˆKØ�M‰M˜1˜# × 6Ñ 6Õ6Ö7rU   r  )r3   )rR  rS  r  r\  r[  s   &&f @rR   Úbroadcast_prefixÚ3_broadcast_to_and_flatten.<locals>.broadcast_prefix�  s1   ù€ ð
 ˆ÷	8ñ 	8ô 	ØØØØõ		
ð ˆrU   r  rW   )r,   r'  rª   )r  rW  r  r^  rS  s   &&&  rR   Ú_broadcast_to_and_flattenr`  ‹  sF   € ÷
ô&  ˜s X×%8Ñ%8Õ8¸(ÓC€IðÙ ¸ÔAÐAøÜô Úðús   ¨	2 ²AÁ Ac                   ó0   a € ] tR tRt o RtV 3R ltRtV tR# )Ú_TreeSpecSchemaiª  a  
_TreeSpecSchema is the schema used to serialize the TreeSpec
It contains the following fields:
- type: A string name of the type. null for the case of a LeafSpec.
- context: Any format which is json dumpable
- children_spec: A list of children serialized specs.
c                óZ   <€ V ^8„  d   Qh/ S[ R,          ;R&   S[;R&   S[R,          ;R&   # )rL   Nr�   rÊ   rb  Úchildren_spec)ri   r    r¹   )rP   rQ   s   "€rR   rS   Ú_TreeSpecSchema.__annotate__ª  s6   ø‡ ‚ ñ ��*Ññ ñ Ññ ñ Ð)Õ*Ñ*ò rU   rX   N)rs   rt   ru   rv   r�  r—   rw   rx   ry   s   @rR   rb  rb  ª  s   ø‡ € ñ÷ ƒ rU   rb  c                   ó,   a € ] tR tRt o V 3R ltRtV tR# )Ú_ProtocolFni¹  c                ób   <€ V ^8„  d   Qh/ S[ S[.S[3,          ;R&   S[ S[.S[3,          ;R&   # )rL   Útreespec_to_jsonÚjson_to_treespec)r   r$   r    )rP   rQ   s   "€rR   rS   Ú_ProtocolFn.__annotate__¹  s4   ø‡ ‚ Ù¡˜z©?Ð:Õ;Ñ;ñ á¡Ð0±(Ð:Õ;Ñ;ò rU   rX   Nr–   ry   s   @rR   rg  rg  ¹  r˜   rU   rg  c                ó0   € V ^8„  d   QhR\         R\        /# ©rL   rW  rM   )r$   rb  )rP   s   "rR   rS   rS   Á  s   € ÷ !Tñ !T¤ð !T¬_ñ !TrU   c                 ó|  € V P                  4       '       d   \        R R . 4      # V P                  \        9  d   \	        RV P                   R24      h\        V P                  ,          pVP
                  pV\        8X  d   \	        RV P                   R24      hVP                  f)    \        P                  ! V P                  \        R7      pMVP                  V P                  4      pV P                   Uu. uF  p\        V4      NK  	  pp\        W#V4      #   \         d   p\        R4      ThR p?ii ; iu upi )NzSerializing ú in pytree is not registered.z%No registered serialization name for zZ found. Please update your _register_pytree_node call with a `serialized_type_name` kwarg.r  z�Unable to serialize context. Please make the context json dump-able, or register a custom serializer using _register_pytree_node.)r  rb  r�   r.  r‡  r�   rG   rž   ÚjsonÚdumpsr  r{   rü   r  Ú_treespec_to_json)rW  r;  r�   Úserialized_contextÚer*  Úchild_schemass   &      rR   rr  rr  Á  s8  € Ø×Ñ×ÒÜ˜t T¨2Ó.Ð.à‡}�}Ô6Ô6Ü!Ø˜8Ÿ=™=˜/Ð)FÐGó
ð 	
ô 4°H·M±MÕBÐà-×BÑBÐàÔ<Ô<Ü!Ø3°H·M±M°?ð Cað aó
ð 	
ð
 ×-Ñ-Ò5ð	Ü!%§¢¨H×,=Ñ,=Ä;Ô!OÑð 0×CÑCÀH×DUÑDUÓVÐà;C×;MÒ;MÓNÑ;M°%Ô& uÖ-Ñ;M€MÐNäÐ/À]ÓSÐSøô ô 	ÜðAóð ð	ûð	üò Os   Â(&D Ã8D9ÄD6Ä%D1Ä1D6c                óŠ   € V ^8„  d   QhR\         \        \        3,          R\        \         \        \        3,          ,          /# r}   )r   ri   r   r   )rP   s   "rR   rS   rS   å  s/   € ÷ 
ñ 
œ$œs¤C˜x�.ð 
¬T´D¼¼c¸µNÕ-Bñ 
rU   c                 ó  € R V 9   d�   V R,          P                  R4      w  rp\        P                  ! V4      pTpVP                  R4       F  p\	        WV4      pK  	  \        \        \        ,          V4      pWPR,          ,          # V # )r‚   rƒ   r„   rb  r…   )Ú	partitionrñ  rò  ÚsplitrÀ   r   r�   r   )r~   Úmodnamerö   Ú	classnameÚmodÚenum_clsÚattrs   &      rR   Úenum_object_hookr  å  sw   € Ø�SÔØ # E¥
× 4Ñ 4°SÓ 9Ñˆ�IÜ×%Ò% gÓ.ˆØˆØ—O‘O CÖ(ˆDÜ˜xÓ.ŠHñ )äœœT�
 HÓ-ˆà˜F�Õ$Ð$Ø€JrU   c                ó0   € V ^8„  d   QhR\         R\        /# )rL   Újson_schemarM   )r    r$   )rP   s   "rR   rS   rS   ò  s   € ÷  2ñ  2¤?ð  2´xñ  2rU   c                 ó2  € V R ,          f)   V R,          f   \        V R,          4      ^ 8X  d   \        # V R ,          \        9  d   \        RV R ,           R24      h\        V R ,          ,          p\        V,          pVP
                  f&    \        P                  ! V R,          \        R7      pMVP                  V R,          4      pV R,           Uu. uF  p\        V4      NK  	  pp\        WV4      #   \         d   p\        R4      ThRp?ii ; iu upi )r�   NrÊ   rd  zDeserializing ro  )Úobject_hookzƒUnable to deserialize context. Please make the context json load-able, or register a custom serializer using _register_pytree_node.)r)  r‘  r/  r‡  r.  rŸ   rp  Úloadsr  rü   Ú_json_to_treespecr$   )r�  rœ   r;  rÊ   ÚexÚchild_stringr  s   &      rR   r…  r…  ò  s   € à�FÕÒ#Ø˜	Õ"Ò*Ü�˜OÕ,Ó-°Ô2äÐà�6ÕÔ"@Ô@Ü!Ø˜[¨Õ0Ð1Ð1NÐOó
ð 	
ô )¨°VÕ)<Õ
=€CÜ3°CÕ8Ðà×/Ñ/Ò7ð	Ü—j’j ¨YÕ!7ÔEUÔV‰Gð %×:Ñ:¸;ÀyÕ;QÓRˆð =HÈÖ<XóÙ<X¨LÔ˜,Ö'Ñ<Xð ð ô �C .Ó1Ð1øô ô 	ÜðAóð ð	ûð	üòs   Â#C5 ÃDÃ5DÄ DÄDc                óJ   € V ^8„  d   QhR\         R\        R,          R\        /# )rL   rW  ÚprotocolNrM   )r$   rO   ri   )rP   s   "rR   rS   rS     s%   € ÷ ñ œXð ´°tµð Äsñ rU   c           	      ó<  € \        V 4      p Vf   \        pV\        9   d   \        V,          P                  V 4      pM,\	        RV R\        \        P                  4       4       24      h\        P                  ! V\        P                  ! V4      3\        R7      pV# )NúUnknown protocol ú. Available protocols: r  )r²  Ú'DEFAULT_TREESPEC_SERIALIZATION_PROTOCOLÚ_SUPPORTED_PROTOCOLSri  rª   r¹   r¹  rp  rq  rÜ   Úasdictr{   )rW  r‰  Ú	json_specÚstr_specs   &&  rR   r:   r:     s�   € Ü/°Ó9€HàÒÜ:ˆàÔ'Ô'Ü(¨Õ2×CÑCÀHÓM‰	äØ ˜zð *$Ü$(Ô)=×)BÑ)BÓ)DÓ$EÐ#FðHó
ð 	
ô
 �zŠz˜8¤[×%7Ò%7¸	Ó%BÐCÌÔU€HØ€OrU   c                ó0   € V ^8„  d   QhR\         R\        /# )rL   Ú
serializedrM   ©ri   r$   )rP   s   "rR   rS   rS   +  s   € ÷ ñ œsð ¤xñ rU   c           	      óØ   € \         P                  ! V 4      w  rV\        9   d   \        V,          P                  V4      # \	        R V R\        \        P                  4       4       24      h)r‹  rŒ  )rp  r„  rŽ  rj  rª   r¹   r¹  )r“  r‰  r�  s   &  rR   r;   r;   *  sf   € ä ŸJšJ zÓ2Ñ€HàÔ'Ô'Ü# HÕ-×>Ñ>¸{ÓKÐKÜ
Ø
˜H˜:ð & Ü $Ô%9×%>Ñ%>Ó%@Ó AÐBð	Dóð rU   c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )Ú	_Asteriski6  c                ó    <€ V ^8„  d   QhRS[ /# rK   )r   )rP   rQ   s   "€rR   rS   Ú_Asterisk.__annotate__9  s   ø€ ÷ )ñ )™ñ )rU   c                ó$   <€ \         SV `  V R 4      # r„  )rˆ   rˆ  )r¤   r‡   s   &€rR   rˆ  Ú_Asterisk.__new__9  s   ø€ Ü‰w‰˜s CÓ(Ð(rU   c                ó    <€ V ^8„  d   QhRS[ /# rK   rh   )rP   rQ   s   "€rR   rS   r™  <  s   ø€ ÷ ñ ™#ñ rU   c                ó   € R # r„  rX   rY   s   &rR   r6  Ú_Asterisk.__repr__<  r‡  rU   rX   )
rs   rt   ru   rv   r‹  rˆ  r6  rw   rx   r‹   rŒ   s   @@rR   r—  r—  6  s#   ù‡ € Ø€I÷)ó )÷÷ ð rU   r—  c                ó0   € V ^8„  d   QhR\         R\        /# rm  ©r$   ri   )rP   s   "rR   rS   rS   D  s   € ÷ ñ œhð ¬3ñ rU   c                 ó\   € \        \        .V P                  ,          V 4      p\        V4      # rW   )r,   Ú	_asteriskr'  r  r°  s   & rR   r<   r<   D  s&   € Ü¤ ¨h×.AÑ.AÕ AÀ8ÓL€JÜ�
ÓÐrU   zC`pytree_to_str` is deprecated. Please use `treespec_dumps` instead.c                ó0   € V ^8„  d   QhR\         R\        /# rm  r   )rP   s   "rR   rS   rS   N  s   € ÷ $ñ $œHð $¬ñ $rU   c                 ó   € \        V 4      # rW   )r:   )rW  s   &rR   Úpytree_to_strr¥  J  s   € ô
 ˜(Ó#Ð#rU   zC`str_to_pytree` is deprecated. Please use `treespec_loads` instead.c                ó0   € V ^8„  d   QhR\         R\        /# )rL   rp  rM   r”  )rP   s   "rR   rS   rS   W  s   € ÷  ñ  œð  ¤ñ  rU   c                 ó   € \        V 4      # rW   )r;   )rp  s   &rR   Ústr_to_pytreer¨  S  s   € ô
 ˜$ÓÐrU   c                óR   € V ^8„  d   QhR\         R\         R\        \        ,          /# )rL   r´   rµ   rM   )r   r¹   r   )rP   s   "rR   rS   rS   [  s%   € ÷ 
ñ 
œ6ð 
¬Vð 
¼¼S½	ñ 
rU   c                 ó²   € . pV  F  pVP                  \        V4      4       K  	  VP                  4        F  pVP                  \        V4      4       K  	  V# )zhGet a flat list of arguments to this function

A slightly faster version of tree_leaves((args, kwargs))
)rY  r-   rÉ   )r´   rµ   rl  Úas   *,  rR   Úarg_tree_leavesr¬  [  sH   € ð
 €FÛˆØ�‰”i “lÖ#ñ à�]‰]Ž_ˆØ�‰”i “lÖ#ñ à€MrU   c          
      óÈ   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        \        \        \
        \        3,          ,          \        3,          /# r  )r   r   rb   r½   r¹   ÚKeyPathr   r$   )rP   s   "rR   rS   rS   h  sS   € ÷ Bñ BÜ
ðBä”v�h¤�nÕ%¨Õ,ðBô Œ4””gœs�lÕ#Õ$¤hÐ.Õ/ñBrU   c                óJ   € \        W4      w  r#\        \        RW4      4      V3# )aŸ  Flattens a pytree like :func:`tree_flatten`, but also returns each leaf's key path.

Args:
    tree: a pytree to flatten. If it contains a custom type, that type must be
        registered with an appropriate `tree_flatten_with_path_fn` when registered
        with :func:`register_pytree_node`.
    is_leaf: An extra leaf predicate function that will be called at each
        flattening step. The function should have a single argument with signature
        ``is_leaf(node) -> bool``. If it returns :data:`True`, the whole subtree being treated
        as a leaf. Otherwise, the default pytree registry will be used to determine a node is a
        leaf or not. If the function is not specified, the default pytree registry will be used.
Returns:
    A tuple where the first element is a list of (key path, leaf) pairs, and the
    second element is a :class:`TreeSpec` representing the structure of the flattened
    tree.
rX   )r*   r¹   Ú_generate_key_paths)r  r  rö   rW  s   &&  rR   r+   r+   h  s(   € ô( ˜tÓ-�K€AÜÔ# B¨Ó6Ó7¸ÐAÐArU   c          	      ó¦   € V ^8„  d   QhR\         R\        \         .\        3,          R,          R\        \        \
        \        3,          ,          /# r  )r   r   rb   r¹   r½   r®  r   )rP   s   "rR   rS   rS   €  sD   € ÷ 8ñ 8Ü
ð8ä”v�h¤�nÕ%¨Õ,ð8ô 
Œ%”œ�Õ
Õñ8rU   c                ó,   € \        \        RW4      4      # )a  Gets the leaves of a pytree like ``tree_leaves`` and returns each leaf's key path.

Args:
    tree: a pytree. If it contains a custom type, that type must be
        registered with an appropriate `tree_flatten_with_path_fn` when registered
        with :func:`register_pytree_node`.
    is_leaf: An extra leaf predicate function that will be called at each
        flattening step. The function should have a single argument with signature
        ``is_leaf(node) -> bool``. If it returns :data:`True`, the whole subtree being treated
        as a leaf. Otherwise, the default pytree registry will be used to determine a node is a
        leaf or not. If the function is not specified, the default pytree registry will be used.
Returns:
    A list of (key path, leaf) pairs.
rX   )r¹   r°  r  s   &&rR   r/   r/   €  s   € ô$ Ô# B¨Ó6Ó7Ð7rU   c                ó²   € V ^8„  d   QhR\         R\        R\        \        .\        3,          R,          R\        \
        \         \        3,          ,          /# )rL   Úkey_pathr  r  NrM   )r®  r   r   rb   r   r½   r   )rP   s   "rR   rS   rS   •  sN   € ÷ 
ñ 
Üð
ä
ð
ô ”v�h¤�nÕ%¨Õ,ð
ô Œe”GœS�LÕ!Õ"ñ	
rU   c              #   óL  "  € V'       d   V! V4      '       d   W3x € R # \        V4      p\        P                  V4      pV'       g   W3x € R # VP                  pV'       d1   V! V4      w  rgV F  w  r‰\	        . V OVN5W’4       R j  x€L
  K   	  R # \        RV R24      h L5i)Nz.Did not find a flatten_with_keys_fn for type: zF. Please pass a flatten_with_keys_fn argument to register_pytree_node.)r
  r©   rq   r“   r°  rª   )
r´  r  r  r	  ÚhandlerÚflatten_with_keysÚkey_childrenrö   r×   Úcs
   &&&       rR   r°  r°  •  s­   é € ÷
 ‘7˜4—=’=ØˆnÒÙä˜tÓ$€IÜ×!Ñ! )Ó,€GßàˆnÒÙà×4Ñ4ÐßÙ+¨DÓ1‰ˆÛ ‰DˆAÜ*¨>¨X¨>°q©>¸1ÓF×FÒFó !ô Ø<¸Y¸Kð HSð Só
ð 	
ñ Gùs   ‚B$™A	B$Á#%B$ÂB"Â	B$c          
      ó    € V ^8„  d   QhR\         R\        3,          R\        R\        R\         \        .\        3,          R,          R\        /# rÄ  rÇ  )rP   s   "rR   rS   rS   ²  sZ   € ÷  Yñ  YÜ
�3œ�8Õ
ð Yä
ð Yô ð Yô ”v�h¤�nÕ%¨Õ,ð	 Yô
 ñ YrU   c               óä   a € \        W4      w  rE\        \        VRR/ 4      pYC Uu. uF  qeP                  V4      NK  	  up,           pVP	                  V 3R l\        VRR/  4       4      # u upi )af  Like :func:`tree_map`, but the provided callable takes an additional key path argument.

Args:
    func: A function that takes ``2 + len(rests)`` arguments, to be applied at the
        corresponding leaves of the pytrees. The first positional argument
        to ``func`` is the key path of the leaf in question. The second
        positional argument is the value of the leaf.
    tree: A pytree to be mapped over, with each leaf providing the first positional
        argument to function ``func``.
    rests: A tuple of pytrees, each of which has the same structure as
        ``tree`` or has ``tree`` as a prefix.
    is_leaf: An extra leaf predicate function that will be called at each
        flattening step. The function should have a single argument with signature
        ``is_leaf(node) -> bool``. If it returns :data:`True`, the whole subtree being treated
        as a leaf. Otherwise, the default pytree registry will be used to determine a node is a
        leaf or not. If the function is not specified, the default pytree registry will be used.

Returns
    A new pytree with the same structure as ``tree`` but with the value at each leaf given by
    ``func(keypath, x, *xs)`` where ``keypath`` is the key path at the
    corresponding leaf in ``tree``, ``x`` is the value at that leaf, and
    ``xs`` is the tuple of values at corresponding nodes in ``rests``.
rÍ   Tc              3   ó0   <"  € T F  pS! V!  x € K  	  R # 5irW   rX   )rq  ÚxsrÅ  s   & €rR   rs  Ú%tree_map_with_path.<locals>.<genexpr>Ò  s   øé € ÐXÑ2W¨B™d BžiÓ2Wùs   ƒ)r+   r¹   rÎ   ri  rn  )rÅ  r  r  rÆ  Úkeypath_leavesrW  rË  Úall_keypath_leavess   f&$*    rR   r2   r2   ²  sr   ø€ ô:  6°dÓDÑ€NÜœ#˜~Ð;°dÑ;Ó<€NØ'ÈeÓ*TÉeÈ×+AÑ+AÀ!Ö+DÉeÑ*TÕTÐØ×ÑÔX´#Ð7IÐ2WÐRVÒ2WÓXÓXÐXùò +Us   §A-c                ó0   € V ^8„  d   QhR\         R\        /# )rL   ÚkprM   )r®  ri   )rP   s   "rR   rS   rS   Õ  s   € ÷ )ñ )Œwð )œ3ñ )rU   c                ó`   € RP                  V  Uu. uF  p\        V4      NK  	  up4      # u upi )z9Given a key path, return a pretty-printed representation.r1  )r7  ri   )rÂ  r×   s   & rR   r&   r&   Õ  s'   € à�7‰7¡BÓ'¡B˜q”C˜–F¡BÑ'Ó(Ð(ùÒ's   �+c                ó<   € V ^8„  d   QhR\         R\        R\         /# )rL   r~   rÂ  rM   )r   r®  )rP   s   "rR   rS   rS   Ú  s!   € ÷ ñ ”ð œ'ð ¤cñ rU   c                ó:   € V F  pVP                  V 4      p K  	  V # )zAGiven an object and a key path, return the value at the key path.)rq   )r~   rÂ  r×   s   && rR   r'   r'   Ú  s   € ãˆØ�e‰e�C‹jŠñ à€JrU   c                óÊ  € V ^8„  d   Qh/ ^ \         9   d&   \        \        \        ,          \        3,          ;R&   ^\         9   d&   \        \        \        ,          \
        3,          ;R&   ^\         9   d&   \        \        \        \        ,          3,          ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d
   \        ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d   \        \        ,          ;R&   ^\         9   d
   \        ;R	&   ^	\         9   d   \        \        \        3,          ;R
&   # )rL   r©   r.  r/  r±   rý   r–  r]  r\  r#   rŽ  )Ú__conditional_annotations__r   r�   r   rŽ   rš   ri   r¹   rá   rO   Ú	frozensetr   rg  )rP   s   "rR   rS   rS      s  € ÷ ñ ÷H /Ò .””dœ3•i¤Ð(Õ)Ñ .ñI÷j DÒ CœD¤¤c¥Ô,=Ð!=Õ>Ñ Cñk÷l :Ò 9¤¤S¬$¬s­) ^Õ 4Ñ 9ñm÷\ ,Ò +œT¤#�YÑ +ñ]÷` "Ò !””D•	Ñ !ña÷~ #Ò "”SÑ "ñ÷l  SÒ R”Yœt•_Ñ Rñm ÷p ò Œyœ�ñ ñq ÷T* !Ò  ŒIÑ  ñU*÷v= 2Ò 1”dœ3¤Ð+Õ,Ñ 1òw=rU   )NNi   rW   )rX   )ØrÇ  r�  rÜ   rö  rñ  Úimportlib.metadatarp  Úloggingr¥  Ú	threadingrú  r(  Úcollectionsr   r   r   r   Úcollections.abcr   r   r   r	   r
   r7  r   Útypingr   r   r   r   r   r   r   r   r   r   r   Útyping_extensionsr   r   r   r   Útorch.torch_versionr   Ú_TorchVersionÚ	getLoggerrs   r9  r®   r¯   r°   r³   Ú__all__rC   rD   rE   rF   r�  rG   rI   ÚJSONEncoderr{   r   r   r½   r¹   r   r   r    r!   r"   ri   r#  r$  r®  r”   ÚFlattenFuncÚUnflattenFuncÚFlattenWithKeysFuncrŽ   ÚRLockr¨   r©   rš   r.  r/  Ú_optree_minimum_versionÚmetadataÚversionÚ_optree_versionÚ_cxx_pytree_dynamo_traceabler¬   ÚPackageNotFoundErrorr­   r±   r(   rç   rá   rý   rÿ   r  Ú	dataclassrî   r  r  r  r*  r+  r2  r«   r=  rO  rR  rÕ   r=   r>   r?   r|  r  r@   r–  rA   rB   rŸ  r¥  r«  r¯  r²  rµ  rº  r¿  rÃ  r  r  r  r  r  rÕ  rØ  rÝ  Ú_odict_flattenÚ_odict_unflattenrâ  rå  rè  rî  rõ  rù  rü  r   r   rÈ  r]  r\  r  r
  r)   r  r$   r#   r%   Úcatch_warningsÚfilterwarningsr‘  rŠ  r›  r¡  r¬  r²  r*   r,   r-   r.   r0   r1   r3   r�   rÙ  rÝ  rû  rá  rÚ  rÞ  rÓ  râ  rÒ  rÖ  r4   r5   r6   r7   r8   r9   r`  rb  rg  rŽ  rr  r  r…  r:   Ú	lru_cacher;   r—  r¢  r<   r¥  r¨  r¬  r+   r/   r°  r2   r&   r'   rS   )rÇ  s   @rR   Ú<module>rå     sX  øð÷ó" Û Û Û Û Û Û 
Û Û Û ß CÓ Cß KÕ KÝ ÷÷ ÷ ñ ÷ CÓ Bå =ð ×Ò˜Ó!€÷ ß0Ð0ð(Øð(àð(ð ð(ð ð	(ð
 ð(ð ð(ð ð(ð ð(ð ð(ð ð(ð ð(ð ð(ð ð(ð ð(ð ð(ð  ð!(ð" ð#(ð$ ð%(ð& ð'(ð( ð)(ð* ð+(ð, ð-(ð. ð/(ð0 ð1(ð2 ð3(ð4 ð5(ð6 ð7(ð8 ð9(ð: ð;(ð< ð=(ð> ð?(ð@ ðA(ðB ðC(ðD ðE(ðF ðG(ðH ðI(ðJ ðK(ðL ðM(ðN ðO(€ñV ˆCƒL€ÙˆCƒL€ÙˆCƒL€ÙˆCƒL€ð +,Ð 'Ø ?Ð ô+ˆxô +ô/�$×"Ñ"ô /ð €Ø	€Ø�f�X˜u T¨#¥Y°Ð%7Õ8Ð8Õ9€	Ø˜ � wÐ/°Ð7Õ8€Ø€Ø ˜y¨/Ð9Õ:Ð Ø  /Ð!2°GÐ!;Õ<Ð Ø�j $ s¥)Ð,¨cÐ1Õ2€	Ø˜S˜E 5¨¨g°sÐ):Õ#;¸dÕ#BÐBÕCÐ Ø
�˜#�Õ
€Ø˜f˜X u¨T°%¸À#¸Õ2FÕ-GÈÐ-LÕ'MÐMÕNÐ ð €Ø€Ø'Ð ô3ˆjô 3ð  —o’oÓ'Ð Ø,.€Ó .ô8˜
ô 8ð BDÐ Ó CØ79Ð Ó 9ñ
 (¨Ó1Ð ðAØ×(Ñ(×0Ñ0°Ó:€Oñ $ OÓ4€OØÐ0Ô0ð
 =BÐAÐ$Ñ'9à<@Ð@Ð$Ñ'9àÐ Ø)+Ð Ó +ðI;ð
 (,ðI;ð 7;ðI;ð ;?ðI;ð 6:÷I;ðXpð %)ðpð *.ð	pð
 (,÷pñf  ›E€Ó !õK õ\;ð ×Ò˜d¨$Ô/ô�7˜1•:ó ó 0ðõ3õ
$õñ8 ðEàôò
4ð (,ð4ð 7;ð4ð ;?ð4ð 6:÷4óð
4õn$ð@Cð
 (,ð@Cð 7;ð@Cð ;?ð@Cð 6:÷@CðF ×Ò˜d¨$Ô/ô"�'˜!•*ó "ó 0ð"ñ ˆC�xÔ €ð ×Ò˜d¨$Ô/ô!�˜˜A˜•ó !ó 0ð!ð ×Ò˜d¨$Ô/÷'ð 'ó 0ð'õ$õ	õ*ñ
 	� 4Ô(€ô"��e˜S�jÕ!ô "õ.#ñ #Ð Ó "õõ )õ
õHõõõHõõ,õWõ3õõõ.õ õ(õ,õWõYð &€Ø)Ð õ5õ
õOõõ+õ6õHõ)ñ Ø	ØØØ)Ø1õñ ØØØØ(Ø0õñ ØØØØ(Ø0õñ ØØØØ1Ø-Ø1Ø6õñ ØØØØ2Ø7õñ ØØØØ2Ø.Ø2Ø7õñ Ø	ØØØ,Ø1õñ (1°$¸À[Ð1QÓ'RÐ Ó Rá!*ð 	ØØØØØØðó"€ó ñ ðEàôô
(óð
(õ÷7ð 7ñ0 ð;àô÷
/óð
/ð ×Ò˜E¨$°4¸eÈ4ÔP÷bJð bJó QðbJðJ !€
Ó  ñ ðKàôð
 ×Ò˜E¨$°5¸uÈDÔQô#ˆxó #ó Róð#ð: ×Ó×ÕØ×ÓØ˜=°À%õñ “€J÷	 õ÷
+ð +÷	@ð 	@õõ.&÷ð õ4&÷9ð 9÷"2ð 2÷2ð 2ð)5ð 04÷	)5ðXð 04÷	ðD 	ˆd�1�g�t˜A•wÐÕ€Øˆd�1�g�t˜A•w  Q¥Ð'Õ(€Ø
ˆs�)�e˜D �I s˜NÕ+Õ
+¨e¯oªoÕ
=€à��A•ˆw˜ˆzÕ€Ø��A•˜•	ˆ{˜Aˆ~Õ€Øˆqˆc�1ˆfÕ€Ø�#�˜�Õ€à�a�S˜( C 5¨# :Õ.Ð.Õ/€	ð
 
Ü Mó 
Ø Mð 
Ü Uó 
Ø Uð 
ô'ó 
ð'ð 
Ü Mó 
Ø Mð 
ô ó 
ð õ
(ðV 
÷ó 
ðð 
÷ó 
ðð 
÷ó 
ðð 
÷ó 
ðð 
÷ó 
ð÷Rð Rð 
÷ó 
ðð 
÷ó 
ðð 
÷ó 
ðð 
÷ó 
ðð 
÷ó 
ð÷Sñ S÷%ò %÷%ò %ð 
÷ñ ó 
ðð 
÷ñ ó 
ðð 
÷ñ ó 
ð÷Kò Kð 
÷ñ ó 
ðð 
÷ñ ó 
ðð 
÷ñ ó 
ð÷Kò K÷&ò ð> ×Ñ÷+ò +ó ð+ö<�*ô <ð
 02Ð Ó 1÷!T÷H
÷ 2ñF &Ð&7Ð9JÓKÐ �QÑ ÷ò ð$ ×Òöó ðö�ô ñ ‹K€	Ø÷ñ ÙIØôö$ó	ð$ñ
 ÙIØôö ó	ð ÷
÷Bò B÷08ò 8÷*
ò 
ð: Yð 04÷	 Yñ  Y÷F)÷
ñ øðs@ ×Ñ×.Ñ.ô /à8=Ð=Ð Ð#5Ù# IÓ.ƒOð/ú÷l% ×Ðús   È,e' Öfå''fæfæf&	