§
    Ë²Åjß  ã                   ól  — U d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z) g d¢Z* e&d¦  «        Z+ e&d	¦  «        Z, e&d
¦  «        Z- e&d¦  «        Z.dZ/dZ0 G d„ de"¦  «        Z1 G d„ dej2        ¦  «        Z3eZ4eZ5ee5ge$ee         e4f         f         Z6eee         e4ge5f         Z7eZ8ee4ge8f         Z9ee8ge4f         Z:edee;         ge;f         Z<ee;gee$ee4e;f                  f         Z=e$e1df         Z>ee5ge$ee$e1ef                  ef         f         Z? G d„ de¦  «        Z@ ejA        ¦   «         ZBi ZCee%e         e@f         eDd<    G d„ de¦  «        ZEi ZFee%e         eEf         eDd<   i ZGee;e%e         f         eDd<   	 ejH         I                    d¦  «        ZJdZKddlLmMZM  eMeJ¦  «         eMd¦  «        k    ZNeNs e	jO        deP¦  «         [Mn# ejH        jQ        $ r d xZNZKY nw xY wd ZRg ZSee         eDd!<   ddddd"œd#e%e         d$e6d%e7d&ee;         d'ee9         d(ee:         d)ee?         d*dfd+„ZTd#e%e         d&e;d*dfd,„ZU e)d-eP¬.¦  «        	 	 d¸ddddd"œd#e%e         d$e6d%e7d/ee<         d0ee=         d&ee;         d'ee9         d(ee:         d)ee?         d*dfd1„¦   «         ZVddddd"œd#e%e         d$e6d%e7d&ee;         d'ee9         d(ee:         d)ee?         d*dfd2„ZW ejX        d¬3¦  «         G d4„ d5ee+         ¦  «        ¦   «         ZY e&d6e¬7¦  «        ZZ ejX        d¬3¦  «         G d8„ d9eeZe+f         ¦  «        ¦   «         Z[ ejX        d¬3¦  «         G d:„ d;¦  «        ¦   «         Z\d<e$edf         d*e$ee         e4f         fd=„Z]d<e$edf         d*e$ee$e1ef                  e4f         fd>„Z^d?ee         d@e4d*e$edf         fdA„Z_d<ee         d*e$ee         e4f         fdB„Z`d<ee         d*e$ee$e1ef                  e4f         fdC„Zad?ee         d@e4d*ee         fdD„Zbd<eeef         d*e$ee         e4f         fdE„Zcd<eeef         d*e$ee$e1ef                  e4f         fdF„Zdd?ee         d@e4d*eeef         fdG„Zed<ed*e$ee         e4f         fdH„Zfd<ed*e$ee$e1ef                  e4f         fdI„Zgd?ee         d@e4d*efdJ„Zhd@e4d*e8fdK„ZidLe8d*e4fdM„Zjd<e eef         d*e$ee         e4f         fdN„Zkd<e eef         d*e$ee$e1ef                  e4f         fdO„Zld?ee         d@e4d*e eef         fdP„ZmekZnemZod<eeef         d*e$ee         e4f         fdQ„Zpd<eeef         d*e$ee$e1ef                  e4f         fdR„Zqd?ee         d@e4d*eeef         fdS„Zrd@e4d*e8fdT„ZsdLe8d*e4fdU„Ztd<ee         d*e$ee         e4f         fdV„Zud<ee         d*e$ee$e1ef                  e4f         fdW„Zvd?ee         d@e4d*ee         fdX„Zw eWexe]e_dYe^¬Z¦  «          eWeye`ebd[ea¬Z¦  «          eWezeceed\ed¬Z¦  «          eWeefehd]eiejeg¬"¦  «          eWeekemd^el¬Z¦  «          eWeeperd_eseteq¬"¦  «          eWeeuewd`ev¬Z¦  «          e{ezeeh¦  «        Z|ee}         eDda<    e{exeyezeeeeh¦  «        Z~ee}         eDdb<   dced*efdd„Z€dced*efde„Z�d¹dce5dfeee5gef                  d*efdg„Z‚ ejX        dddd ¬h¦  «         G di„ d¦  «        ¦   «         Zƒ G dj„ dkeƒ¦  «        Z„ e„¦   «         Z…	 d¹dce5dlee         dfeee5gef                  d*eƒfdm„Z†	 d¹dce5dfeee5gef                  d*e$ee         eƒf         fdn„Z‡dlee         doeƒd*e5fdp„Zˆ	 d¹dce5dfeee5gef                  d*ee         fdq„Z‰	 d¹dce5dfeee5gef                  d*ee         fdr„ZŠ	 d¹dce5dfeee5gef                  d*eƒfds„Z‹ddtœduedef         dce5dve5dfeee5gef                  d*e5f
dw„ZŒddtœduedef         dce5dve5dfeee5gef                  d*e5f
dx„Z�e$e%e+         e%e,         f         ZŽe$e%e+         e%e,         e%e-         f         Z�ej�        dyk    r%e'e%e         e$e%e         df         ej‘        f         Z’ne'e%e         e$e%e         df         f         Z’ee'e+e,f         ge.f         Z“ee'e+e,e-f         ge.f         Z”ee+ge.f         Z•eege.f         Z–ee+geegef         f         Z—e!dzeŽe+e,f         d*e—e“e+e,ef                  fd{„¦   «         Z˜e!dze�e+e,e-f         d*e—e”e+e,e-ef                  fd|„¦   «         Z˜e!dze%e+         d*e—e•e+ef                  fd}„¦   «         Z˜e!dze’d*e—e–e                  fd~„¦   «         Z˜e!dzeegef         d*e—e–e                  fd„¦   «         Z˜dze'e’eegef         f         d*e—e–e                  fd€„Z˜e!	 d¹dze%e+         due•e+ef         dce5dfeee5gef                  d*e5f
d�„¦   «         Z™e!	 d¹dzeŽe+e,f         due“e+e,ef         dce5dfeee5gef                  d*e5f
d‚„¦   «         Z™e!	 d¹dze�e+e,e-f         due”e+e,e-ef         dce5dfeee5gef                  d*e5f
dƒ„¦   «         Z™e!	 d¹dzeegef         due–e         dce5dfeee5gef                  d*e5f
d„„¦   «         Z™	 d¹dze'e’eegef         f         due–e         dce5dfeee5gef                  d*e5f
d…„Z™e!	 d¹dze%e+         due•e+ef         dce5dfeee5gef                  d*e5f
d†„¦   «         Zše!	 d¹dzeŽe+e,f         due“e+e,ef         dce5dfeee5gef                  d*e5f
d‡„¦   «         Zše!	 d¹dze�e+e,e-f         due”e+e,e-ef         dce5dfeee5gef                  d*e5f
dˆ„¦   «         Zše!	 d¹dzeegef         due–e         dce5dfeee5gef                  d*e5f
d‰„¦   «         Zš	 d¹dze'e’eegef         f         due–e         dce5dfeee5gef                  d*e5f
dŠ„Zš	 d¹d‹eegef         dce5dfeee5gef                  d*efdŒ„Z›	 d¹d‹eegef         dce5dfeee5gef                  d*efd�„Zœe!	 d¹dŽe%e+         d‹e•e+ef         dce5dfeee5gef                  d*ef
d�„¦   «         Z�e!	 d¹dŽeŽe+e,f         d‹e“e+e,ef         dce5dfeee5gef                  d*ef
d�„¦   «         Z�e!	 d¹dŽe�e+e,e-f         d‹e”e+e,e-ef         dce5dfeee5gef                  d*ef
d‘„¦   «         Z�	 d¹dŽe’d‹e–e         dce5dfeee5gef                  d*ef
d’„Z�e!	 d¹dŽe%e+         d‹e•e+ef         dce5dfeee5gef                  d*ef
d“„¦   «         Zže!	 d¹dŽeŽe+e,f         d‹e“e+e,ef         dce5dfeee5gef                  d*ef
d”„¦   «         Zže!	 d¹dŽe�e+e,e-f         d‹e”e+e,e-ef         dce5dfeee5gef                  d*ef
d•„¦   «         Zž	 d¹dŽe’d‹e–e         dce5dfeee5gef                  d*ef
d–„Zž	 d¹dce5doeƒdfeee5gef                  d*eee                  fd—„ZŸejX         G d˜„ d™¦  «        ¦   «         Z  G dš„ d›e¦  «        Z¡i Z¢ee£e¡f         eDdœ<   doeƒd*e fd�„Z¤dže8d*eƒfdŸ„Z¥ e¡e¤e¥¦  «        e¢d<   d¹doeƒd ee£         d*e;fd¡„Z¦d¢e;d*eƒfd£„Z§ G d¤„ d¥¦  «        Z¨doeƒd*e;fd¦„Z© e)d§eP¬.¦  «        doeƒd*e;fd¨„¦   «         Zª e)d©eP¬.¦  «        dªe;d*eƒfd«„¦   «         Z«d¬e5d­e5d*ee         fd®„Z¬	 d¹dce5dfeee5gef                  d*e$ee$e>ef                  eƒf         fd¯„Z­	 d¹dce5dfeee5gef                  d*ee$e>ef                  fd°„Z®	 d¹d±e>dce5dfeee5gef                  d*ee$e>ef                  fd²„Z¯ddtœduedef         dce5dve5dfeee5gef                  d*e5f
d³„Z°d´e>d*e;fdµ„Z±d¶ed´e>d*efd·„Z²dS )ºa  
Contains utility functions for working with nested python data structures.

A *pytree* is 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)ÚEnum)ÚAnyÚCallableÚcastÚDefaultDictÚDequeÚDictÚ	FrozenSetÚGenericÚHashableÚIterableÚListÚMappingÚ
NamedTupleÚOptionalr   ÚoverloadÚProtocolÚSequenceÚTupleÚTypeÚTypeVarÚUnion)Ú
deprecated)ÚPyTreeÚContextÚFlattenFuncÚUnflattenFuncÚDumpableContextÚToDumpableContextFnÚFromDumpableContextFnÚTreeSpecÚLeafSpecÚkeystrÚkey_getÚregister_pytree_nodeÚ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ÚTÚSÚUÚRé   ÚNO_SERIALIZED_TYPE_NAME_FOUNDc                   óF   — e Zd Zdefd„Zdedefd„Zdefd„Z	de
de
fd„ZdS )	ÚKeyEntryÚreturnc                 ó   — d S ©N© ©Úselfs    úDC:\Projects\Historical\venv\Lib\site-packages\torch/utils/_pytree.pyÚ__hash__zKeyEntry.__hash__f   ó   € Øˆó    Úotherc                 ó   — d S rG   rH   )rJ   rO   s     rK   Ú__eq__zKeyEntry.__eq__i   rM   rN   c                 ó   — d S rG   rH   rI   s    rK   Ú__str__zKeyEntry.__str__l   rM   rN   Úparentc                 ó   — d S rG   rH   )rJ   rT   s     rK   ÚgetzKeyEntry.geto   rM   rN   N)Ú__name__Ú
__module__Ú__qualname__ÚintrL   ÚobjectÚboolrQ   ÚstrrS   r   rV   rH   rN   rK   rD   rD   e   sŽ   € € € € € ð˜#ð ð ð ð ð˜Fð  tð ð ð ð ð˜ð ð ð ð ð˜#ð  #ð ð ð ð ð ð rN   rD   c                   ó(   ‡ — e Zd Zdedefˆ fd„Zˆ xZS )ÚEnumEncoderÚobjrE   c                 ó~   •— t          |t          ¦  «        r|j        S t          ¦   «                              |¦  «        S rG   )Ú
isinstancer   ÚvalueÚsuperÚdefault)rJ   r`   Ú	__class__s     €rK   re   zEnumEncoder.defaultt   s3   ø€ Ý�c�4Ñ Ô ð 	Ø”9ÐÝ‰wŒw�Š˜sÑ#Ô#Ð#rN   )rW   rX   rY   r[   r]   re   Ú__classcell__©rf   s   @rK   r_   r_   s   sK   ø€ € € € € ð$˜6ð $ cð $ð $ð $ð $ð $ð $ð $ð $ð $ð $rN   r_   r%   .c                   óP   — e Zd ZU ee         ed<   eed<   eed<   ee	         ed<   dS )ÚNodeDefÚtypeÚ
flatten_fnÚunflatten_fnÚflatten_with_keys_fnN)
rW   rX   rY   r   r   Ú__annotations__r    r!   r   ÚFlattenWithKeysFuncrH   rN   rK   rj   rj   �   sI   € € € € € € Ø
ˆsŒ)€O€O�OØÐÐÑØÐÐÑØ"Ð#6Ô7Ð7Ð7Ñ7Ð7Ð7rN   rj   ÚSUPPORTED_NODESc                   ó\   — e Zd ZU ee         ed<   eed<   ee         ed<   ee	         ed<   dS )Ú_SerializeNodeDefÚtypÚserialized_type_nameÚto_dumpable_contextÚfrom_dumpable_contextN)
rW   rX   rY   r   r   ro   r]   r   r#   r$   rH   rN   rK   rs   rs   ¢   sO   € € € € € € Ø	ˆcŒ€N€N�NØÐÐÑØ!Ð"5Ô6Ð6Ð6Ñ6Ø#Ð$9Ô:Ð:Ð:Ñ:Ð:Ð:rN   rs   ÚSUPPORTED_SERIALIZED_TYPESÚSERIALIZED_TYPE_TO_PYTHON_TYPEÚoptreeT)ÚVersionz0.13.0zÓoptree is installed but the version is too old to support PyTorch Dynamo in C++ pytree. C++ pytree support is disabled. Please consider upgrading optree using `python3 -m pip install --upgrade 'optree>=0.13.0'`.FÚ_cxx_pytree_pending_imports©ru   rv   rw   rn   Úclsrl   rm   ru   rv   rw   rn   rE   c          	      ó\  — t           5  | t          v rt          | › d�¦  «        ‚	 ddd¦  «         n# 1 swxY w Y   t          | ||||||¬¦  «         t          sdS t
          r#ddlm} |                     | |||||¬¦  «         dS | ||f}|||dœ}	t           	                    ||	f¦  «         dS )aŒ  Register a container-like type as 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.Nr}   rA   )Ú_cxx_pytree)ru   rv   rw   )
Ú_NODE_REGISTRY_LOCKrq   Ú
ValueErrorÚ_private_register_pytree_nodeÚ_cxx_pytree_existsÚ_cxx_pytree_importedÚ r€   r|   Úappend)
r~   rl   rm   ru   rv   rw   rn   ÚcxxÚargsÚkwargss
             rK   r)   r)   Æ   sk  € õD 
ð Mð MØ•/Ð!Ð!Ý ÐKÐKÐKÑLÔLÐLð "ðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mõ "ØØØØ1Ø/Ø3Ø1ðñ ô ð õ ð Øˆåð ;Ø(Ð(Ð(Ð(Ð(Ð(à×)Ò)ØØØØ!5Ø 3Ø"7ð 	*ñ 	
ô 	
ð 	
ð 	
ð 	
ð �Z Ð.ˆà$8Ø#6Ø%:ð
ð 
ˆõ
 	$×*Ò*¨D°&¨>Ñ:Ô:Ð:Ð:Ð:s   ˆ1±5¸5c          	      ód   — t          | t          t          |t          t          t
          ¬¦  «         dS )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~   ru   s     rK   Ú_register_namedtupler‘     s:   € õ" "ØÝÝØ1Ý1Ý5Ý:ðñ ô ð ð ð rN   zy`torch.utils._pytree._register_pytree_node` is deprecated. Please use `torch.utils._pytree.register_pytree_node` instead.)ÚcategoryÚ	to_str_fnÚmaybe_from_str_fnc          	      ór   — |€|�t          j        dt          d¬¦  «         t          | ||||||¬¦  «         dS )a§  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~   rl   rm   r“   r”   ru   rv   rw   rn   s	            rK   Ú_register_pytree_noder›   *  sn   € ðR ÐÐ 1Ð =ÝŒðTåØð		
ñ 	
ô 	
ð 	
õ "ØØØØ1Ø/Ø3Ø1ðñ ô ð ð ð rN   c                óT  — t           5  | t          v rt          j        | › d�¦  «         t	          | |||¦  «        }|t          | <   |du |du z  rt          d| › d�¦  «        ‚|€t          }t          | |||¦  «        }|t          | <   | t          |<   ddd¦  «         dS # 1 swxY w Y   dS )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.
    zM is already registered as pytree node. Overwriting the previous registration.Nz7Both to_dumpable_context and from_dumpable_context for z must be None or registered.)
r�   rq   r˜   r™   rj   r‚   rB   rs   rx   ry   )	r~   rl   rm   ru   rv   rw   rn   Únode_defÚserialize_node_defs	            rK   rƒ   rƒ   f  sV  € õ 
ð Cð CØ•/Ð!Ð!åŒMØð 9ð 9ð 9ñô ð õ
 ˜3 
¨LÐ:NÑOÔOˆØ'�˜Ñà 4Ð'Ð,AÀTÐ,IÑJð 	Ýð)È#ð )ð )ð )ñô ð ð
  Ð'Ý#@Ð å.ØØ ØØ!ñ	
ô 
Ðð +=Õ" 3Ñ'Ø?BÕ&Ð';Ñ<ð7Cð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cð Cð Cs   ˆBBÂB!Â$B!)Úfrozenc                   óB   — e Zd ZU eed<   defd„Zdee         defd„Z	dS )ÚSequenceKeyÚidxrE   c                 ó   — d| j         ›d�S ©Nú[ú]©r¢   rI   s    rK   rS   zSequenceKey.__str__–  ó   € Ø �4”8Ð Ð Ð Ð rN   Úsequencec                 ó   — || j                  S rG   r§   )rJ   r©   s     rK   rV   zSequenceKey.get™  s   € Ø˜œÔ!Ð!rN   N)
rW   rX   rY   rZ   ro   r]   rS   r   r=   rV   rH   rN   rK   r¡   r¡   ’  s`   € € € € € € à	€H€H�Hð!˜ð !ð !ð !ð !ð"˜H QœKð "¨Að "ð "ð "ð "ð "ð "rN   r¡   ÚK)Úboundc                   óF   — e Zd ZU eed<   defd„Zdeeef         defd„Z	dS )Ú
MappingKeyÚkeyrE   c                 ó   — d| j         ›d�S r¤   ©r¯   rI   s    rK   rS   zMappingKey.__str__¤  r¨   rN   Úmappingc                 ó   — || j                  S rG   r±   )rJ   r²   s     rK   rV   zMappingKey.get§  s   € Ø�t”xÔ Ð rN   N)
rW   rX   rY   r«   ro   r]   rS   r   r=   rV   rH   rN   rK   r®   r®      sd   € € € € € € à	
€F€F�Fð!˜ð !ð !ð !ð !ð!˜7 1 a 4œ=ð !¨Qð !ð !ð !ð !ð !ð !rN   r®   c                   ó6   — e Zd ZU eed<   defd„Zdedefd„ZdS )Ú
GetAttrKeyÚnamerE   c                 ó   — d| j         › �S )Nú.)r¶   rI   s    rK   rS   zGetAttrKey.__str__¯  s   € Ø�4”9ˆˆÐrN   r`   c                 ó,   — t          || j        ¦  «        S rG   )Úgetattrr¶   )rJ   r`   s     rK   rV   zGetAttrKey.get²  s   € Ý�s˜DœIÑ&Ô&Ð&rN   N)rW   rX   rY   r]   ro   rS   r   rV   rH   rN   rK   rµ   rµ   «  s\   € € € € € € à
€I€I�Ið˜ð ð ð ð ð'�sð '˜sð 'ð 'ð 'ð 'ð 'ð 'rN   rµ   Údc                 ó$   — t          | ¦  «        d fS rG   ©Úlist©r»   s    rK   Ú_tuple_flattenrÀ   ¶  s   € Ý�‰7Œ7�Dˆ=ÐrN   c                 ó\   — t          | ¦  «        \  }}d„ t          |¦  «        D ¦   «         |fS )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rH   ©r¡   ©Ú.0ÚiÚvs      rK   ú
<listcomp>z,_tuple_flatten_with_keys.<locals>.<listcomp>¾  ó'   € Ð>Ð>Ð>¡D A q�[˜‰^Œ^˜QÐÐ>Ð>Ð>rN   )rÀ   Ú	enumerate©r»   ÚvaluesÚcontexts      rK   Ú_tuple_flatten_with_keysrÎ   º  ó6   € õ % QÑ'Ô'�O€FˆGØ>Ð>­I°fÑ,=Ô,=Ð>Ñ>Ô>ÀÐGÐGrN   rÌ   rÍ   c                 ó    — t          | ¦  «        S rG   )Útuple©rÌ   rÍ   s     rK   Ú_tuple_unflattenrÓ   Á  s   € Ý�‰=Œ=ÐrN   c                 ó
   — | d fS rG   rH   r¿   s    rK   Ú_list_flattenrÕ   Å  s   € Øˆdˆ7€NrN   c                 ó\   — t          | ¦  «        \  }}d„ t          |¦  «        D ¦   «         |fS )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rH   rÃ   rÄ   s      rK   rÈ   z+_list_flatten_with_keys.<locals>.<listcomp>Ë  rÉ   rN   )rÕ   rÊ   rË   s      rK   Ú_list_flatten_with_keysrØ   É  s4   € Ý# AÑ&Ô&�O€FˆGØ>Ð>­I°fÑ,=Ô,=Ð>Ñ>Ô>ÀÐGÐGrN   c                 ó    — t          | ¦  «        S rG   r½   rÒ   s     rK   Ú_list_unflattenrÚ   Î  s   € Ý�‰<Œ<ÐrN   c                 ó†   — t          |                      ¦   «         ¦  «        t          |                      ¦   «         ¦  «        fS rG   ©r¾   rÌ   Úkeysr¿   s    rK   Ú_dict_flattenrÞ   Ò  ó+   € Ý�—’‘
”
ÑÔ�T !§&¢&¡(¤(™^œ^Ð+Ð+rN   c                 ó^   — t          | ¦  «        \  }}d„ t          ||¦  «        D ¦   «         |fS )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rH   ©r®   ©rÅ   ÚkrÇ   s      rK   rÈ   z+_dict_flatten_with_keys.<locals>.<listcomp>Ú  ó'   € Ð@Ð@Ð@¡4 1 a�Z˜‰]Œ]˜AÐÐ@Ð@Ð@rN   )rÞ   ÚziprË   s      rK   Ú_dict_flatten_with_keysrç   Ö  s8   € õ $ AÑ&Ô&�O€FˆGØ@Ð@­3¨w¸Ñ+?Ô+?Ð@Ñ@Ô@À'ÐIÐIrN   c                 ó<   — t          t          || ¦  «        ¦  «        S rG   )Údictræ   rÒ   s     rK   Ú_dict_unflattenrê   Ý  s   € Ý•�G˜VÑ$Ô$Ñ%Ô%Ð%rN   c                 ó>   — t          | ¦  «        t          | ¦  «        fS rG   )r¾   rk   r¿   s    rK   rŒ   rŒ   á  s   € Ý�‰7Œ7•D˜‘G”GÐÐrN   c                 óh   — t          | ¦  «        \  }}d„ t          |j        |¦  «        D ¦   «         |fS )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rH   )rµ   )rÅ   ÚfieldrÇ   s      rK   rÈ   z1_namedtuple_flatten_with_keys.<locals>.<listcomp>ê  s)   € ÐMÐMÐM¡H E¨1�*�UÑ
Ô
˜QÐ	ÐMÐMÐMrN   )rŒ   ræ   Ú_fieldsrË   s      rK   r�   r�   å  s?   € õ *¨!Ñ,Ô,�O€FˆGàMÐMµ°G´OÀVÑ0LÔ0LÐMÑMÔMØðð rN   c                 ó2   — t          t           || Ž ¦  «        S rG   )r
   r   rÒ   s     rK   r�   r�   ï  s   € Ý•
˜G˜G VÐ,Ñ-Ô-Ð-rN   c                 ó¢   — | t           vrt          d| › d�¦  «        ‚t           |          }|j        }|t          k    rt          d| › d�¦  «        ‚|S )Nz-Can't serialize TreeSpec of namedtuple class zc because we didn't register a serializated_type_name. Please register using `_register_namedtuple`.za because we couldn't find a serializated_type_name. Please register using `_register_namedtuple`.)rx   ÚNotImplementedErrorru   rB   )rÍ   rž   ru   s      rK   rŽ   rŽ   ó  sˆ   € ØÕ0Ð0Ð0Ý!ð&¸Gð &ð &ð &ñ
ô 
ð 	
õ 4°GÔ<ÐØ-ÔBÐàÕ<Ò<Ð<Ý!ð&¸Gð &ð &ð &ñ
ô 
ð 	
ð
  ÐrN   Údumpable_contextc                 óX   — | t           vrt          d| › d�¦  «        ‚t           |          }|S )Nz/Can't deserialize TreeSpec of namedtuple class z. because we couldn't find a serializated name.)ry   rò   )ró   rt   s     rK   r�   r�     sI   € ØÕ=Ð=Ð=Ý!ð<Ð>Nð <ð <ð <ñ
ô 
ð 	
õ
 )Ð)9Ô
:€CØ€JrN   c                 ó†   — t          |                      ¦   «         ¦  «        t          |                      ¦   «         ¦  «        fS rG   rÜ   r¿   s    rK   Ú_ordereddict_flattenrö     rß   rN   c                 ó^   — t          | ¦  «        \  }}d„ t          ||¦  «        D ¦   «         |fS )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rH   râ   rã   s      rK   rÈ   z2_ordereddict_flatten_with_keys.<locals>.<listcomp>  rå   rN   )rö   ræ   rË   s      rK   Ú_ordereddict_flatten_with_keysrù     s8   € õ +¨1Ñ-Ô-�O€FˆGØ@Ð@­3¨w¸Ñ+?Ô+?Ð@Ñ@Ô@À'ÐIÐIrN   c                 óP   — t          d„ t          || ¦  «        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]\  }}||fV — Œd S rG   rH   )rÅ   r¯   rc   s      rK   ú	<genexpr>z)_ordereddict_unflatten.<locals>.<genexpr>!  s*   è è € ÐKÐK©
¨¨U˜˜U�|ÐKÐKÐKÐKÐKÐKrN   )r   ræ   rÒ   s     rK   Ú_ordereddict_unflattenrý     s+   € õ ÐKÐKµc¸'À6Ñ6JÔ6JÐKÑKÔKÑKÔKÐKrN   c                 ó<   — t          | ¦  «        \  }}|| j        |gfS rG   )rÞ   Údefault_factory)r»   rÌ   Údict_contexts      rK   Ú_defaultdict_flattenr  (  s'   € Ý(¨Ñ+Ô+Ñ€FˆLØ�AÔ% |Ð4Ð4Ð4rN   c                 óh   — t          | ¦  «        \  }}|\  }}d„ t          ||¦  «        D ¦   «         |fS )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rH   râ   rã   s      rK   rÈ   z2_defaultdict_flatten_with_keys.<locals>.<listcomp>2  s'   € ÐEÐEÐE¡4 1 a�Z˜‰]Œ]˜AÐÐEÐEÐErN   )r  ræ   )r»   rÌ   rÍ   Ú_r   s        rK   Ú_defaultdict_flatten_with_keysr  -  sA   € õ +¨1Ñ-Ô-�O€FˆGØ�O€A€|ØEÐE­3¨|¸VÑ+DÔ+DÐEÑEÔEÀwÐNÐNrN   c                 óH   — |\  }}t          |t          | |¦  «        ¦  «        S rG   )r   rê   )rÌ   rÍ   rÿ   r   s       rK   Ú_defaultdict_unflattenr  5  s(   € ð %,Ñ!€O�\Ý�­¸ÀÑ(MÔ(MÑNÔNÐNrN   c                 ó0   — | \  }}|j         |j        |dœ}|S )N)Údefault_factory_moduleÚdefault_factory_namer   )rX   rY   )rÍ   rÿ   r   Újson_defaultdicts       rK   Ú_defaultdict_serializer  =  s0   € Ø$+Ñ!€O�\à"1Ô"<Ø /Ô <Ø$ðð Ðð
 ÐrN   c                 ó:  — t          | t          ¦  «        sJ ‚t          | ¦  «        h d£k    sJ ‚| d         }| d         }t          |t          ¦  «        sJ ‚t          |t          ¦  «        sJ ‚t	          j        |¦  «        }t          ||¦  «        }| d         }||gS )N>   r   r
  r	  r	  r
  r   )rb   ré   Úsetr]   Ú	importlibÚimport_modulerº   )ró   r	  r
  Úmodulerÿ   r   s         rK   Ú_defaultdict_deserializer  G  sÆ   € ÝÐ&­Ñ-Ô-Ð-Ð-Ð-ÝÐÑ Ô ð %ð %ð %ò ð ð ð ð .Ð.FÔGÐØ+Ð,BÔCÐÝÐ,­cÑ2Ô2Ð2Ð2Ð2ÝÐ*­CÑ0Ô0Ð0Ð0Ð0ÝÔ$Ð%;Ñ<Ô<€FÝ˜fÐ&:Ñ;Ô;€Oà# NÔ3€LØ˜\Ð*Ð*rN   c                 ó.   — t          | ¦  «        | j        fS rG   )r¾   Úmaxlenr¿   s    rK   Ú_deque_flattenr  Z  s   € Ý�‰7Œ7�A”HÐÐrN   c                 ó\   — t          | ¦  «        \  }}d„ t          |¦  «        D ¦   «         |fS )Nc                 ó6   — g | ]\  }}t          |¦  «        |f‘ŒS rH   rÃ   rÄ   s      rK   rÈ   z,_deque_flatten_with_keys.<locals>.<listcomp>b  rÉ   rN   )r  rÊ   rË   s      rK   Ú_deque_flatten_with_keysr  ^  rÏ   rN   c                 ó$   — t          | |¬¦  «        S )N©r  )r   rÒ   s     rK   Ú_deque_unflattenr  e  s   € Ý� Ð(Ñ(Ô(Ð(rN   zbuiltins.tuple)ru   rn   zbuiltins.listzbuiltins.dictzcollections.namedtuplezcollections.OrderedDictzcollections.defaultdictzcollections.dequeÚSTANDARD_DICT_TYPESÚBUILTIN_TYPESÚtreec                 óü   — t          | ¦  «        }|j        }t          |¦  «        dk    s|d         t          k    rdS t	          |dd ¦  «        }t          |t          ¦  «        sdS t          d„ |D ¦   «         ¦  «        S )NrA   r   Frï   c              3   óF   K  — | ]}t          |¦  «        t          k    V — Œd S rG   )rk   r]   )rÅ   Úentrys     rK   rü   z*_is_namedtuple_instance.<locals>.<genexpr>±  s-   è è € Ð6Ð6 e�t�E‰{Œ{�cÒ!Ð6Ð6Ð6Ð6Ð6Ð6rN   )rk   Ú	__bases__ÚlenrÑ   rº   rb   Úall)r  rt   ÚbasesÚfieldss       rK   Ú_is_namedtuple_instancer'  ©  s{   € Ý
ˆt‰*Œ*€CØŒM€EÝ
ˆ5�z„z�Q‚€˜% œ(¥eÒ+Ð+ØˆuÝ�S˜) TÑ*Ô*€FÝ�f�eÑ$Ô$ð ØˆuÝÐ6Ð6¨vÐ6Ñ6Ô6Ñ6Ô6Ð6rN   c                 óL   — t          | ¦  «        rt          S t          | ¦  «        S rG   )r'  r   rk   )r  s    rK   Ú_get_node_typer)  ´  s$   € Ý˜tÑ$Ô$ð ÝÐÝ�‰:Œ:ÐrN   Úis_leafc                 óL   — |d ur || ¦  «        pt          | ¦  «        t          vS rG   )r)  rq   ©r  r*  s     rK   Ú_is_leafr-  »  s8   € Ø˜4ÐÐ1 G G¨D¡M¤Mð µnØñ7ô 7åð7ð rN   )ÚinitrŸ   ÚeqÚreprc                   ó<  — e Zd ZU eed<   eed<   ed          ed<    ej        d¬¦  «        Z	e
ed<    ej        d¬¦  «        Ze
ed<    ej        d¬¦  «        Ze
ed<   dd„Zdde
d	efd„Zd	efd„Zdedee         d	d
fd„Zded	ee         fd„Zdee         d	efd„Zd
S )r%   rk   rÍ   Úchildren_specsF)r.  Ú	num_nodesÚ
num_leavesÚnum_childrenrE   Nc                 óR  — t          d„ | j        D ¦   «         d¬¦  «        }t          d„ | j        D ¦   «         ¦  «        }t          | j        ¦  «        }t                               | d|¦  «         t                               | d|¦  «         t                               | d|¦  «         d S )Nc              3   ó$   K  — | ]}|j         V — Œd S rG   )r3  ©rÅ   Úspecs     rK   rü   z)TreeSpec.__post_init__.<locals>.<genexpr>Ñ  s$   è è € ÐHÐH¨D˜œÐHÐHÐHÐHÐHÐHrN   rA   )Ústartc              3   ó$   K  — | ]}|j         V — Œd S rG   )r4  r8  s     rK   rü   z)TreeSpec.__post_init__.<locals>.<genexpr>Ò  s$   è è € ÐIÐI¨T˜œÐIÐIÐIÐIÐIÐIrN   r3  r4  r5  )Úsumr2  r#  r[   Ú__setattr__)rJ   r3  r4  r5  s       rK   Ú__post_init__zTreeSpec.__post_init__Ð  s¤   € ÝÐHÐH°DÔ4GÐHÑHÔHÐPQÐRÑRÔRˆ	ÝÐIÐI°TÔ5HÐIÑIÔIÑIÔIˆ
Ý˜4Ô.Ñ/Ô/ˆÝ×Ò˜4 ¨iÑ8Ô8Ð8Ý×Ò˜4 ¨zÑ:Ô:Ð:Ý×Ò˜4 °Ñ>Ô>Ð>Ð>Ð>rN   r   Úindentc                 ó8  ‡— d| j         j        › d| j        › d�}d}| j        dk    rk‰dz  Š|| j        d                              ‰¦  «        z  }|| j        dk    rdndz  }|d                     ˆfd	„| j        dd …         D ¦   «         ¦  «        z  }|› d
�}||z   S )Nz	TreeSpec(z, z, [r†   r   r–   rA   ú,c                 óL   •— g | ] }d d‰z  z   |                      ‰¦  «        z   ‘Œ!S )ú
ú )Ú__repr__)rÅ   Úchildr?  s     €rK   rÈ   z%TreeSpec.__repr__.<locals>.<listcomp>à  sC   ø€ ð ð ð àð ˜3 ™<Ñ'¨%¯.ª.¸Ñ*@Ô*@Ñ@ðð ð rN   z]))rk   rW   rÍ   r5  r2  rE  Újoin)rJ   r?  Úrepr_prefixÚchildren_specs_strÚrepr_suffixs    `   rK   rE  zTreeSpec.__repr__Ø  sä   ø€ ØN t¤yÔ'9ÐNÐN¸T¼\ÐNÐNÐNˆØ"$ÐØÔ˜qÒ Ð Ø�a‰KˆFØ $Ô"5°aÔ"8×"AÒ"AÀ&Ñ"IÔ"IÑIÐØ¨Ô):¸QÒ)>Ð)> # #ÀBÑFÐØ #§(¢(ðð ð ð à!%Ô!4°Q°R°RÔ!8ðñ ô ñ#ô #ñ Ðð 1Ð4Ð4Ð4ˆØ˜[Ñ(Ð(rN   c                 ó.   — | j         dk    o
| j        dk    S )NrA   )r3  r4  rI   s    rK   r*  zTreeSpec.is_leafè  s   € ØŒ~ Ò"Ð; t¤¸!Ò';Ð;rN   r  Úsubtreesc           	      ó^  ‡— |                       ¦   «         r|                     ‰¦  «         d S t          ‰¦  «        }| j        t          vr«|| j        k    rt          d| j        ›d|›d�¦  «        ‚t          |         j        } |‰¦  «        \  }}t          |¦  «        | j	        k    r(t          d| j	        › dt          |¦  «        › d�¦  «        ‚|| j
        k    rt          d| j        ›d�¦  «        ‚�n‡| j        t          v o|t          v }|| j        k    r|st          d| j        ›d|›d�¦  «        ‚t          ‰¦  «        | j	        k    r(t          d| j	        › dt          ‰¦  «        › d�¦  «        ‚|rª| j        t          ur| j
        n| j
        d         }|}	t          ‰¦  «        }
t          |	¦  «        }|
|k    rS|                     |
¦  «        }|
                     |¦  «        }d}|r|d	|› �z  }|r|d
|› �z  }t          d|› d�¦  «        ‚ˆfd„|	D ¦   «         }n\t          |         j        } |‰¦  «        \  }}|| j
        k    r1| j        t          ur#t          d| j        ›d| j
        ›d|›d�¦  «        ‚t!          || j        ¦  «        D ]\  }}|                     ||¦  «         Œd S )NzType mismatch; expected z
, but got r¸   zNode arity mismatch; expected z+Node context mismatch for custom node type zNode type mismatch; expected rA   r†   z; missing key(s): z; extra key(s): zNode keys mismatchc                 ó    •— g | ]
}‰|         ‘ŒS rH   rH   )rÅ   r¯   r  s     €rK   rÈ   z2TreeSpec._flatten_up_to_helper.<locals>.<listcomp>'  s   ø€ Ð DÐ DÐ D¨s  c¤Ð DÐ DÐ DrN   z$Node context mismatch for node type z; expected )r*  r‡   r)  rk   r  r‚   rq   rl   r#  r5  rÍ   r  r   r  Ú
differencer   ræ   r2  Ú_flatten_up_to_helper)rJ   r  rL  Ú	node_typerl   Úchild_pytreesrÍ   Úboth_standard_dictr   Úexpected_keysÚgot_key_setÚexpected_key_setÚmissing_keysÚ
extra_keysÚmessageÚchild_pytreeÚ
child_specs    `               rK   rP  zTreeSpec._flatten_up_to_helperë  sÚ  ø€ Ø�<Š<‰>Œ>ð 	Ø�OŠO˜DÑ!Ô!Ð!ØˆFå" 4Ñ(Ô(ˆ	ØŒ9�MÐ)Ð)à˜DœIÒ%Ð%Ý ðFØ $¤	ðFð FØ7@ðFð Fð Fñô ð õ )¨Ô3Ô>ˆJØ%/ Z°Ñ%5Ô%5Ñ"ˆM˜7Ý�=Ñ!Ô! TÔ%6Ò6Ð6Ý ðSØ $Ô 1ðSð SÝ=@ÀÑ=OÔ=OðSð Sð Sñô ð ð ˜$œ,Ò&Ð&Ý ØPÀ$Ä)ÐPÐPÐPñô ð ñ 'ð ”	Õ0Ð0ÐU°YÕBUÐ5Uð ð ˜DœIÒ%Ð%Ð.@Ð%Ý ðFØ $¤	ðFð FØ7@ðFð Fð Fñô ð õ �4‰yŒy˜DÔ-Ò-Ð-Ý ðJØ $Ô 1ðJð JÝ=@À¹Y¼YðJð Jð Jñô ð ð
 "ð ð ”y­Ð3Ð3ð ”L�Lð œ aœð	 ð !-�Ý! $™iœi�Ý#& }Ñ#5Ô#5Ð ØÐ"2Ò2Ð2Ø#3×#>Ò#>¸{Ñ#KÔ#K�LØ!,×!7Ò!7Ð8HÑ!IÔ!I�JØ �GØ#ð GØÐ#F¸Ð#FÐ#FÑF˜Ø!ð CØÐ#B°jÐ#BÐ#BÑB˜Ý$Ð%D¸'Ð%DÐ%DÐ%DÑEÔEÐEØ DÐ DÐ DÐ D°mÐ DÑ DÔ D��å,¨YÔ7ÔB�
Ø)3¨°DÑ)9Ô)9Ñ&�˜wà˜tœ|Ò+Ð+Øœ	­Ð.Ð.å$ðK¸t¼yð Kð KØ$(¤LðKð KØ>EðKð Kð Kñô ð õ
 ),¨M¸4Ô;NÑ(OÔ(Oð 	Eð 	EÑ$ˆL˜*Ø×,Ò,¨\¸8ÑDÔDÐDÐDð	Eð 	ErN   c                 ó6   — g }|                       ||¦  «         |S rG   )rP  )rJ   r  rL  s      rK   Úflatten_up_tozTreeSpec.flatten_up_to7  s"   € Ø!#ˆØ×"Ò" 4¨Ñ2Ô2Ð2ØˆrN   Úleavesc           	      óþ  — t          |t          t          f¦  «        st          |¦  «        }t          |¦  «        | j        k    r+t          dt          |¦  «        › d| j        › d| › d�¦  «        ‚|                      ¦   «         r|d         S t          | j                 j	        }d}d}g }| j
        D ]>}||j        z  }|                     |                     |||…         ¦  «        ¦  «         |}Œ? ||| j        ¦  «        S )Nz0treespec.unflatten(leaves): `leaves` has length z, but the spec refers to a pytree that holds z items (z).r   )rb   r¾   rÑ   r#  r4  r‚   r*  rq   rk   rm   r2  r‡   Ú	unflattenrÍ   )rJ   r^  rm   r:  ÚendrR  r[  s          rK   r`  zTreeSpec.unflatten<  s!  € Ý˜&¥4­ -Ñ0Ô0ð 	"Ý˜&‘\”\ˆFÝˆv‰;Œ;˜$œ/Ò)Ð)Ýð#Å3ÀvÁ;Ä;ð #ð #Ø>B¼oð#ð #àð#ð #ð #ñô ð ð
 �<Š<‰>Œ>ð 	Ø˜!”9Ðå& t¤yÔ1Ô>ˆð ˆØˆØˆØÔ-ð 	ð 	ˆJØ�:Ô(Ñ(ˆCØ× Ò  ×!5Ò!5°f¸UÀ3¸YÔ6GÑ!HÔ!HÑIÔIÐIØˆEˆEàˆ|˜M¨4¬<Ñ8Ô8Ð8rN   ©rE   N©r   )rW   rX   rY   r   ro   r   r   Údataclassesrî   r3  rZ   r4  r5  r>  r]   rE  r\   r*  r   rP  r]  r   r`  rH   rN   rK   r%   r%   Æ  sz  € € € € € € à
€I€I�IØÐÐÑØ˜Ô$Ð$Ð$Ñ$à&�[Ô&¨EÐ2Ñ2Ô2€IˆsÐ2Ð2Ñ2Ø'�kÔ'¨UÐ3Ñ3Ô3€J�Ð3Ð3Ñ3Ø)˜Ô)¨uÐ5Ñ5Ô5€L�#Ð5Ð5Ñ5ð?ð ?ð ?ð ?ð)ð )˜sð )¨3ð )ð )ð )ð )ð <˜ð <ð <ð <ð <ðJE¨&ð JE¸DÀ¼Lð JEÈTð JEð JEð JEð JEðX &ð ¨T°&¬\ð ð ð ð ð
9 ¨¤ð 9°&ð 9ð 9ð 9ð 9ð 9ð 9rN   c                   ó:   ‡ — e Zd Zdˆ fd„Zdd„Zd	dedefd„Zˆ xZS )
r&   rE   Nc                 óN   •— t          ¦   «                              d d g ¦  «         d S rG   )rd   Ú__init__)rJ   rf   s    €rK   rg  zLeafSpec.__init__W  s%   ø€ Ý‰Œ×Ò˜˜t RÑ(Ô(Ð(Ð(Ð(rN   c                 ó®   — t                                | dd¦  «         t                                | dd¦  «         t                                | dd¦  «         d S )Nr3  rA   r4  r5  r   )r[   r=  rI   s    rK   r>  zLeafSpec.__post_init__Z  sP   € Ý×Ò˜4 ¨aÑ0Ô0Ð0Ý×Ò˜4 ¨qÑ1Ô1Ð1Ý×Ò˜4 °Ñ3Ô3Ð3Ð3Ð3rN   r   r?  c                 ó   — dS ©NÚ*rH   )rJ   r?  s     rK   rE  zLeafSpec.__repr___  ó   € ØˆsrN   rb  rc  )	rW   rX   rY   rg  r>  rZ   r]   rE  rg   rh   s   @rK   r&   r&   V  sx   ø€ € € € € ð)ð )ð )ð )ð )ð )ð4ð 4ð 4ð 4ð
ð ˜sð ¨3ð ð ð ð ð ð ð ð rN   r&   r^  c                 óþ   ‡‡— t          | ‰¬¦  «        r‰                     | ¦  «         t          S t          | ¦  «        }t          |         j        } || ¦  «        \  }}ˆˆfd„|D ¦   «         }t          |||¦  «        S )N©r*  c                 ó4   •— g | ]}t          |‰‰¬ ¦  «        ‘ŒS )rn  ©Ú_tree_flatten_helper)rÅ   rF  r*  r^  s     €€rK   rÈ   z(_tree_flatten_helper.<locals>.<listcomp>v  s6   ø€ ð ð ð ØAFÕ˜U F°GÐ<Ñ<Ô<ðð ð rN   )r-  r‡   Ú
_LEAF_SPECr)  rq   rl   r%   )r  r^  r*  rQ  rl   rR  rÍ   r2  s    ``     rK   rq  rq  h  s¢   øø€ õ
 �˜gÐ&Ñ&Ô&ð Ø�Š�dÑÔÐÝÐå˜tÑ$Ô$€IÝ  Ô+Ô6€JØ'˜Z¨Ñ-Ô-Ñ€M�7ðð ð ð ð ØJWðñ ô €Nõ �I˜w¨Ñ7Ô7Ð7rN   c                 ó2   — g }t          | ||¬¦  «        }||fS )zkFlattens a pytree into a list of values and a TreeSpec that can be used
    to reconstruct the pytree.
    rn  rp  )r  r*  r^  r9  s       rK   r*   r*   }  s'   € ð €FÝ  f°gÐ>Ñ>Ô>€DØ�4ˆ<ÐrN   Útreespecc                 ó–   — t          |t          ¦  «        s t          dt          |¦  «        › d�¦  «        ‚|                     | ¦  «        S )zqGiven a list of values and a TreeSpec, builds a pytree.
    This is the inverse operation of `tree_flatten`.
    zftree_unflatten(leaves, treespec): Expected `treespec` to be instance of TreeSpec but got item of type r¸   )rb   r%   Ú	TypeErrorrk   r`  )r^  rt  s     rK   r,   r,   ‰  s_   € õ �h¥Ñ)Ô)ð 
ÝðKÝ9=¸h¹¼ðKð Kð Kñ
ô 
ð 	
ð ×Ò˜fÑ%Ô%Ð%rN   c              #   óÎ   K  — t          | |¬¦  «        r| V — dS t          | ¦  «        }t          |         j        } || ¦  «        \  }}|D ]}t	          ||¬¦  «        E d{V —† ŒdS )z,Get an iterator over the leaves of a pytree.rn  N)r-  r)  rq   rl   r-   )r  r*  rQ  rl   rR  r  rF  s          rK   r-   r-   •  s›   è è € õ
 �˜gÐ&Ñ&Ô&ð 	9Øˆ
ˆ
ˆ
ˆ
ˆ
å" 4Ñ(Ô(ˆ	Ý$ YÔ/Ô:ˆ
Ø%˜: dÑ+Ô+Ñˆ�qð #ð 	9ð 	9ˆEÝ  °Ð8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ð	9ð 	9rN   c                 ó>   — t          t          | |¬¦  «        ¦  «        S )z!Get a list of leaves of a pytree.rn  )r¾   r-   r,  s     rK   r.   r.   ¦  s   € õ
 •	˜$¨Ð0Ñ0Ô0Ñ1Ô1Ð1rN   c                 ó0   — t          | |¬¦  «        d         S )zGet the TreeSpec for a pytree.rn  rA   )r*   r,  s     rK   r0   r0   ®  s   € õ
 ˜ gÐ.Ñ.Ô.¨qÔ1Ð1rN   rn  ÚfuncÚrestsc                ó�   ‡— t          ||¬¦  «        \  }Š|gˆfd„|D ¦   «         z   }‰                     t          | g|¢R Ž ¦  «        S )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``.
    rn  c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rH   ©r]  ©rÅ   Úrrt  s     €rK   rÈ   ztree_map.<locals>.<listcomp>Þ  ó'   ø€ ÐEÐEÐE¸!˜H×2Ò2°1Ñ5Ô5ÐEÐEÐErN   )r*   r`  Úmap©rz  r  r*  r{  r^  Ú	flat_argsrt  s         @rK   r1   r1   ¶  sb   ø€ õN $ D°'Ð:Ñ:Ô:Ñ€FˆHØ�ÐEÐEÐEÐE¸uÐEÑEÔEÑE€IØ×Ò�c $Ð3¨Ð3Ð3Ð3Ñ4Ô4Ð4rN   c                óŒ   ‡— t          ||¬¦  «        \  }Š|gˆfd„|D ¦   «         z   }t          t          | g|¢R Ž d¬¦  «         |S )aT  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``.
    rn  c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rH   r~  r  s     €rK   rÈ   ztree_map_.<locals>.<listcomp>ÿ  r�  rN   r   r  )r*   r   r‚  rƒ  s         @rK   r3   r3   â  se   ø€ õ8 $ D°'Ð:Ñ:Ô:Ñ€FˆHØ�ÐEÐEÐEÐE¸uÐEÑEÔEÑE€IÝ	�#ˆdÐ
�YÐ
Ð
Ð
¨Ð*Ñ*Ô*Ð*Ø€KrN   ©é   é
   Ú__type_or_types_or_predc                 ó   — d S rG   rH   ©rŠ  s    rK   Úmap_onlyr�    ó   € à€CrN   c                 ó   — d S rG   rH   rŒ  s    rK   r�  r�    rŽ  rN   c                 ó   — d S rG   rH   rŒ  s    rK   r�  r�    rŽ  rN   c                 ó   — d S rG   rH   rŒ  s    rK   r�  r�  %  rŽ  rN   c                 ó   — d S rG   rH   rŒ  s    rK   r�  r�  *  rŽ  rN   c                 óv  ‡ ‡— t          ‰ t          t          f¦  «        s*t          j        dk    r/t          ‰ t
          j        ¦  «        rdt          dt          fˆ fd„Šn!t          ‰ ¦  «        r‰ Šnt          d¦  «        ‚dt          t          gt          f         dt          t          gt          f         fˆfd„}|S )a«  
    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'
    r‡  ÚxrE   c                 ó$   •— t          | ‰¦  «        S rG   ©rb   )r”  rŠ  s    €rK   Úpredzmap_only.<locals>.predI  s   ø€ Ý˜aÐ!8Ñ9Ô9Ð9rN   z9Argument must be a type, a tuple of types, or a callable.rz  c                 óh   •‡ — t          j        ‰ ¦  «        dt          dt          fˆ ˆfd„¦   «         }|S )Nr”  rE   c                 ó4   •—  ‰| ¦  «        r ‰| ¦  «        S | S rG   rH   )r”  rz  r—  s    €€rK   Úwrappedz*map_only.<locals>.wrapper.<locals>.wrappedR  s%   ø€ àˆt�A‰wŒwð Ø�t˜A‘w”w�ØˆHrN   )Ú	functoolsÚwrapsr=   r   )rz  rš  r—  s   ` €rK   Úwrapperzmap_only.<locals>.wrapperQ  sQ   øø€ Ý	Œ˜Ñ	Ô	ð	•qð 	�Sð 	ð 	ð 	ð 	ð 	ð 	ñ 
Ô	ð	ð
 ˆrN   )rb   rk   rÑ   ÚsysÚversion_infoÚtypesÚ	UnionTyper   r\   Úcallablerv  r	   r=   )rŠ  r�  r—  s   ` @rK   r�  r�  /  så   øø€ õ* Ð)­Dµ%¨=Ñ9Ô9ð UÝÔ˜GÒ#Ð#ÝÐ.µ´Ñ@Ô@ð 	$ð	:•Cð 	:�Dð 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:õ 
Ð)Ñ	*Ô	*ð UØ&ˆˆåÐSÑTÔTÐTð•h¥˜s¥C˜xÔ(ð ­Xµs°e½S°jÔ-Að ð ð ð ð ð ð €NrN   c                 ó   — d S rG   rH   ©rŠ  rz  r  r*  s       rK   r4   r4   ]  ó	   € ð €CrN   c                 ó   — d S rG   rH   r¤  s       rK   r4   r4   g  r¥  rN   c                 ó   — d S rG   rH   r¤  s       rK   r4   r4   q  r¥  rN   c                 ó   — d S rG   rH   r¤  s       rK   r4   r4   {  r¥  rN   c                 óR   — t           t          | ¦  «        |¦  «        ||¬¦  «        S ©Nrn  )r1   r�  r¤  s       rK   r4   r4   …  s-   € õ Ð5•HÐ4Ñ5Ô5°dÑ;Ô;¸TÈ7ÐSÑSÔSÐSrN   c                 ó   — d S rG   rH   r¤  s       rK   r5   r5   Ž  r¥  rN   c                 ó   — d S rG   rH   r¤  s       rK   r5   r5   ˜  r¥  rN   c                 ó   — d S rG   rH   r¤  s       rK   r5   r5   ¢  r¥  rN   c                 ó   — d S rG   rH   r¤  s       rK   r5   r5   ¬  r¥  rN   c                 óR   — t           t          | ¦  «        |¦  «        ||¬¦  «        S rª  )r3   r�  r¤  s       rK   r5   r5   ¶  s-   € õ Ð6•XÐ5Ñ6Ô6°tÑ<Ô<¸dÈGÐTÑTÔTÐTrN   r—  c                 ó^   — t          ||¬¦  «        }t          t          | |¦  «        ¦  «        S rª  )r-   r$  r‚  ©r—  r  r*  r„  s       rK   r6   r6   ¿  ó.   € õ
 ˜$¨Ð0Ñ0Ô0€IÝ�s�4˜Ñ#Ô#Ñ$Ô$Ð$rN   c                 ó^   — t          ||¬¦  «        }t          t          | |¦  «        ¦  «        S rª  )r-   Úanyr‚  r±  s       rK   r7   r7   È  r²  rN   Ú__type_or_typesc                 ó   — d S rG   rH   ©rµ  r—  r  r*  s       rK   r8   r8   Ñ  r¥  rN   c                 ó   — d S rG   rH   r·  s       rK   r8   r8   Û  r¥  rN   c                 ó   — d S rG   rH   r·  s       rK   r8   r8   å  r¥  rN   c                 ó`   ‡ ‡— t          ||¬¦  «        }t          ˆ ˆfd„|D ¦   «         ¦  «        S )Nrn  c              3   óN   •K  — | ]}t          |‰¦  «        ¯ ‰|¦  «        V — Œ d S rG   r–  ©rÅ   r”  rµ  r—  s     €€rK   rü   z tree_all_only.<locals>.<genexpr>ö  ó:   øè è € ÐLÐL˜1­Z¸¸?Ñ-KÔ-KÐLˆtˆt�A‰wŒwÐLÐLÐLÐLÐLÐLrN   )r-   r$  ©rµ  r—  r  r*  r„  s   ``   rK   r8   r8   ï  ó>   øø€ õ ˜$¨Ð0Ñ0Ô0€IÝÐLÐLÐLÐLÐL 	ÐLÑLÔLÑLÔLÐLrN   c                 ó   — d S rG   rH   r·  s       rK   r9   r9   ù  r¥  rN   c                 ó   — d S rG   rH   r·  s       rK   r9   r9     r¥  rN   c                 ó   — d S rG   rH   r·  s       rK   r9   r9     r¥  rN   c                 ó`   ‡ ‡— t          ||¬¦  «        }t          ˆ ˆfd„|D ¦   «         ¦  «        S )Nrn  c              3   óN   •K  — | ]}t          |‰¦  «        ¯ ‰|¦  «        V — Œ d S rG   r–  r¼  s     €€rK   rü   z tree_any_only.<locals>.<genexpr>  r½  rN   )r-   r´  r¾  s   ``   rK   r9   r9     r¿  rN   c                 óÌ  — t          |t          ¦  «        sJ ‚t          | |¬¦  «        r| g|j        z  S |                     ¦   «         rd S t          | ¦  «        }||j        k    rd S t          |         j        } || ¦  «        \  }}t          |¦  «        |j
        k    s||j        k    rd S g }t          ||j        ¦  «        D ]!\  }}	t          ||	|¬¦  «        }
|
�||
z  }Œ d S |S rª  )rb   r%   r-  r4  r*  r)  rk   rq   rl   r#  r5  rÍ   ræ   r2  Ú_broadcast_to_and_flatten)r  rt  r*  rQ  rl   rR  ÚctxÚresultrF  r[  Úflats              rK   rÆ  rÆ  )  s  € õ
 �h¥Ñ)Ô)Ð)Ð)Ð)å�˜gÐ&Ñ&Ô&ð ,Øˆv˜Ô+Ñ+Ð+Ø×ÒÑÔð ØˆtÝ˜tÑ$Ô$€IØ�H”MÒ!Ð!Øˆtå  Ô+Ô6€JØ#˜ DÑ)Ô)Ñ€M�3õ ˆ=ÑÔ˜XÔ2Ò2Ð2°c¸XÔ=MÒ6MÐ6MØˆtð €FÝ  °Ô0GÑHÔHð ð ÑˆˆzÝ(¨°
ÀGÐLÑLÔLˆØÐØ�d‰NˆFˆFà�4�4à€MrN   c                   óJ   — e Zd ZU dZee         ed<   eed<   ed          ed<   dS )Ú_TreeSpecSchemaa  
    _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.
    rk   rÍ   Úchildren_specN)	rW   rX   rY   Ú__doc__r   r]   ro   r"   r   rH   rN   rK   rË  rË  K  sL   € € € € € € ðð ð �3Œ-ÐÐÑØÐÐÑØÐ)Ô*Ð*Ð*Ñ*Ð*Ð*rN   rË  c                   óH   — e Zd ZU eegef         ed<   eegef         ed<   dS )Ú_ProtocolFnÚtreespec_to_jsonÚjson_to_treespecN)rW   rX   rY   r	   r%   r"   ro   rH   rN   rK   rÏ  rÏ  Z  sC   € € € € € € Ø ˜z¨?Ð:Ô;Ð;Ð;Ñ;Ø Ð0°(Ð:Ô;Ð;Ð;Ñ;Ð;Ð;rN   rÏ  Ú_SUPPORTED_PROTOCOLSc                 ó  — |                       ¦   «         rt          d d g ¦  «        S | j        t          vrt	          d| j        › d�¦  «        ‚t          | j                 }|j        }|t          k    rt	          d| j        › d�¦  «        ‚|j        €D	 t          j	        | j
        t          ¬¦  «        }n<# t          $ r}t          d¦  «        |‚d }~ww xY w|                     | j
        ¦  «        }d„ | j        D ¦   «         }t          |||¦  «        S )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.c                 ó,   — g | ]}t          |¦  «        ‘ŒS rH   )Ú_treespec_to_json)rÅ   rF  s     rK   rÈ   z%_treespec_to_json.<locals>.<listcomp>�  s!   € ÐSÐSÐS°%Õ& uÑ-Ô-ÐSÐSÐSrN   )r*  rË  rk   rx   rò   ru   rB   rv   ÚjsonÚdumpsrÍ   r_   rv  r2  )rt  rž   ru   Úserialized_contextÚeÚchild_schemass         rK   rÖ  rÖ  b  sT  € Ø×ÒÑÔð /Ý˜t T¨2Ñ.Ô.Ð.à„}Õ6Ð6Ð6Ý!ØG˜8œ=ÐGÐGÐGñ
ô 
ð 	
õ 4°H´MÔBÐà-ÔBÐàÕ<Ò<Ð<Ý!ða°H´Mð að að añ
ô 
ð 	
ð
 Ô-Ð5ð	Ý!%¤¨HÔ,<Å+Ð!NÑ!NÔ!NÐÐøÝð 	ð 	ð 	ÝðAñô ð ð	øøøøð	øøøð 0×CÒCÀHÔDTÑUÔUÐàSÐS¸8Ô;RÐSÑSÔS€MåÐ/Ð1CÀ]ÑSÔSÐSs   Â B1 Â1
CÂ;CÃCÚjson_schemac                 óø  — | d         €(| d         € t          | d         ¦  «        dk    rt          S | d         t          vrt          d| d         › d�¦  «        ‚t          | d                  }t          |         }|j        €>	 t          j        | d         ¦  «        }n=# t          $ r}t          d¦  «        |‚d }~ww xY w|                     | d         ¦  «        }d„ | d         D ¦   «         }t          |||¦  «        S )	Nrk   rÍ   rÌ  r   zDeserializing rÔ  zƒUnable to deserialize context. Please make the context json load-able, or register a custom serializer using _register_pytree_node.c                 ó,   — g | ]}t          |¦  «        ‘ŒS rH   )Ú_json_to_treespec)rÅ   Úchild_strings     rK   rÈ   z%_json_to_treespec.<locals>.<listcomp>¢  s.   € ð ð ð Ø,8Õ˜,Ñ'Ô'ðð ð rN   )
r#  rr  ry   rò   rx   rw   r×  Úloadsrv  r%   )rÜ  rt   rž   rÍ   Úexr2  s         rK   rß  rß  †  s9  € à�FÔÐ#Ø˜	Ô"Ð*Ý�˜OÔ,Ñ-Ô-°Ò2Ð2åÐà�6ÔÕ"@Ð@Ð@Ý!ØO˜[¨Ô0ÐOÐOÐOñ
ô 
ð 	
õ )¨°VÔ)<Ô
=€CÝ3°CÔ8ÐàÔ/Ð7ð	Ý”j ¨YÔ!7Ñ8Ô8ˆGˆGøÝð 	ð 	ð 	ÝðAñô ð ð	øøøøð	øøøð %×:Ò:¸;ÀyÔ;QÑRÔRˆðð Ø<GÈÔ<Xðñ ô €Nõ �C˜ .Ñ1Ô1Ð1s   ÂB Â
B;Â&B6Â6B;Úprotocolc           	      ó˜  — t          | t          ¦  «        s t          dt          | ¦  «        › d�¦  «        ‚|€t          }|t
          v r!t
          |                              | ¦  «        }n9t          d|› dt          t
           	                    ¦   «         ¦  «        › �¦  «        ‚t          j        |t          j        |¦  «        f¦  «        }|S )Nzhtreespec_dumps(treespec, protocol): Expected `treespec` to be instance of TreeSpec but got item of type r¸   úUnknown protocol ú. Available protocols: )rb   r%   rv  rk   Ú'DEFAULT_TREESPEC_SERIALIZATION_PROTOCOLrÒ  rÐ  r‚   r¾   rÝ   r×  rØ  rd  Úasdict)rt  rã  Ú	json_specÚstr_specs       rK   r:   r:   ¬  sæ   € Ý�h¥Ñ)Ô)ð 
Ýð?Ý-1°(©^¬^ð?ð ?ð ?ñ
ô 
ð 	
ð
 ÐÝ:ˆàÕ'Ð'Ð'Ý(¨Ô2×CÒCÀHÑMÔMˆ	ˆ	åðH ð Hð HÝ$(Õ)=×)BÒ)BÑ)DÔ)DÑ$EÔ$EðHð Hñ
ô 
ð 	
õ
 Œz˜8¥[Ô%7¸	Ñ%BÔ%BÐCÑDÔD€HØ€OrN   Ú
serializedc           	      óô   — t          j        | ¦  «        \  }}|t          v r t          |                              |¦  «        S t	          d|› dt          t                               ¦   «         ¦  «        › �¦  «        ‚)Nrå  ræ  )r×  rá  rÒ  rÑ  r‚   r¾   rÝ   )rë  rã  rÜ  s      rK   r;   r;   Â  s…   € Ý œJ zÑ2Ô2Ñ€HˆkàÕ'Ð'Ð'Ý# HÔ-×>Ò>¸{ÑKÔKÐKÝ
ð	D˜Hð 	Dð 	DÝ $Õ%9×%>Ò%>Ñ%@Ô%@Ñ AÔ Að	Dð 	Dñô ð rN   c                   ó   — e Zd Zdefd„ZdS )Ú
_DummyLeafrE   c                 ó   — dS rj  rH   rI   s    rK   rE  z_DummyLeaf.__repr__Î  rl  rN   N)rW   rX   rY   r]   rE  rH   rN   rK   rî  rî  Í  s/   € € € € € ð˜#ð ð ð ð ð ð rN   rî  c                 óx   — t          d„ t          | j        ¦  «        D ¦   «         | ¦  «        }t          |¦  «        S )Nc                 ó*   — g | ]}t          ¦   «         ‘ŒS rH   )rî  )rÅ   r  s     rK   rÈ   z#treespec_pprint.<locals>.<listcomp>Ô  s   € Ð:Ð:Ð:˜!�‰ŒÐ:Ð:Ð:rN   )r,   Úranger4  r0  )rt  Ú
dummy_trees     rK   r<   r<   Ò  s@   € ÝØ:Ð:�u XÔ%8Ñ9Ô9Ð:Ñ:Ô:Øñô €Jõ �
ÑÔÐrN   zC`pytree_to_str` is deprecated. Please use `treespec_dumps` instead.c                 ó    — t          | ¦  «        S rG   )r:   )rt  s    rK   Úpytree_to_strrõ  Û  s   € õ
 ˜(Ñ#Ô#Ð#rN   zC`str_to_pytree` is deprecated. Please use `treespec_loads` instead.r×  c                 ó    — t          | ¦  «        S rG   )r;   )r×  s    rK   Ústr_to_pytreer÷  ä  s   € õ
 ˜$ÑÔÐrN   r‰   rŠ   c                  óÊ   — g }| D ]$}|                      t          |¦  «        ¦  «         Œ%|                     ¦   «         D ]$}|                      t          |¦  «        ¦  «         Œ%|S )zpGet a flat list of arguments to this function

    A slightly faster version of tree_leaves((args, kwargs))
    )Úextendr-   rÌ   )r‰   rŠ   r^  Úas       rK   Úarg_tree_leavesrû  ì  sj   € ð
 €FØð $ð $ˆØ�Š•i ‘l”lÑ#Ô#Ð#Ð#Ø�]Š]‰_Œ_ð $ð $ˆØ�Š•i ‘l”lÑ#Ô#Ð#Ð#Ø€MrN   c                 óh   — t          | |¦  «        \  }}t          t          d| |¦  «        ¦  «        |fS )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.
    rH   )r*   r¾   Ú_generate_key_paths)r  r*  r  rt  s       rK   r+   r+   ù  s7   € õ( ˜t WÑ-Ô-�K€A€xÝÕ# B¨¨gÑ6Ô6Ñ7Ô7¸ÐAÐArN   c                 ó>   — t          t          d| |¦  «        ¦  «        S )a8  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.
    rH   )r¾   rý  r,  s     rK   r/   r/     s   € õ$ Õ# B¨¨gÑ6Ô6Ñ7Ô7Ð7rN   Úkey_pathc              #   ó6  K  — |r ||¦  «        r| |fV — d S t          |¦  «        }t                               |¦  «        }|s| |fV — d S |j        }|r4 ||¦  «        \  }}|D ]!\  }}	t	          g | ¢|‘R |	|¦  «        E d {V —† Œ"d S t          d|› d�¦  «        ‚)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)  rq   rV   rn   rý  r‚   )
rÿ  r  r*  rQ  ÚhandlerÚflatten_with_keysÚkey_childrenr  rä   Úcs
             rK   rý  rý  &  s  è è € ð
 ð �7�7˜4‘=”=ð Ø˜ˆnÐÐÐØˆå˜tÑ$Ô$€IÝ×!Ò! )Ñ,Ô,€GØð à˜ˆnÐÐÐØˆàÔ4ÐØð 	
Ø+Ð+¨DÑ1Ô1‰ˆ�aØ ð 	Gð 	G‰DˆAˆqÝ*¨>¨X¨>°q¨>¨>¸1¸gÑFÔFÐFÐFÐFÐFÐFÐFÐFÐFð	Gð 	Gõ ðS¸Yð Sð Sð Sñ
ô 
ð 	
rN   c                óÊ   ‡ ‡— t          ||¦  «        \  }Št          t          |Ž ¦  «        }|ˆfd„|D ¦   «         z   }‰                     ˆ fd„t          |Ž D ¦   «         ¦  «        S )a¶  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``.
    c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS rH   r~  r  s     €rK   rÈ   z&tree_map_with_path.<locals>.<listcomp>b  s'   ø€ Ð*TÐ*TÐ*TÈ¨8×+AÒ+AÀ!Ñ+DÔ+DÐ*TÐ*TÐ*TrN   c              3   ó"   •K  — | ]	} ‰|Ž V — Œ
d S rG   rH   )rÅ   Úxsrz  s     €rK   rü   z%tree_map_with_path.<locals>.<genexpr>c  s)   øè è € ÐKÐK¨B˜d˜d B˜iÐKÐKÐKÐKÐKÐKrN   )r+   r¾   ræ   r`  )rz  r  r*  r{  Úkeypath_leavesÚall_keypath_leavesrt  s   `     @rK   r2   r2   C  s{   øø€ õ:  6°d¸GÑDÔDÑ€N�HÝ�#˜~Ð.Ñ/Ô/€NØ'Ð*TÐ*TÐ*TÐ*TÈeÐ*TÑ*TÔ*TÑTÐØ×ÒÐKÐKÐKÐKµ#Ð7IÐ2JÐKÑKÔKÑKÔKÐKrN   Úkpc                 ó@   — d                      d„ | D ¦   «         ¦  «        S )z9Given a key path, return a pretty-printed representation.r†   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rH   )r]   )rÅ   rä   s     rK   rÈ   zkeystr.<locals>.<listcomp>h  s   € Ð'Ð'Ð'˜q•C˜‘F”FÐ'Ð'Ð'rN   )rG  )r  s    rK   r'   r'   f  s#   € à�7Š7Ð'Ð' BÐ'Ñ'Ô'Ñ(Ô(Ð(rN   r`   c                 ó:   — |D ]}|                      | ¦  «        } Œ| S )zAGiven an object and a key path, return the value at the key path.)rV   )r`   r  rä   s      rK   r(   r(   k  s'   € àð ð ˆØ�eŠe�C‰jŒjˆˆØ€JrN   )NNrG   )³rÍ  rd  r›  r  Úimportlib.metadatar×  rž  Ú	threadingr   r˜   Úcollectionsr   r   r   r   Úenumr   Útypingr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   ÚGenericOrderedDictr   r   r   r   r   r   r   Útyping_extensionsr   Ú__all__r=   r>   r?   r@   rç  rB   rD   ÚJSONEncoderr_   r   r   r    r!   r"   r#   r$   r]   Ú	ToStrFuncÚMaybeFromStrFuncÚKeyPathrp   rj   ÚLockr�   rq   ro   rs   rx   ry   ÚmetadataÚversionÚ_optree_versionr„   Útorch._vendor.packaging.versionr{   Ú_cxx_pytree_dynamo_traceabler™   rš   ÚPackageNotFoundErrorr…   r|   r)   r‘   r›   rƒ   Ú	dataclassr¡   r«   r®   rµ   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é   Ú	frozensetr  rk   r  r\   r'  r)  r-  r%   r&   rr  rq  r*   r,   r-   r.   r0   r1   r3   ÚType2ÚType3rŸ  r¡  ÚTypeAnyÚFn2ÚFn3ÚFnÚFnAnyÚ	MapOnlyFnr�  r4   r5   r6   r7   r8   r9   rÆ  rË  rÏ  rÒ  rZ   rÖ  rß  r:   r;   rî  r<   rõ  r÷  rû  r+   r/   rý  r2   r'   r(   rH   rN   rK   ú<module>r.     s)#  ððð ð ð" Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø €€€Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð0 )Ð (Ð (Ð (Ð (Ð (ð ð  ð  €ðF €GˆC�L„L€Ø€GˆC�L„L€Ø€GˆC�L„L€Ø€GˆC�L„L€ð +,Ð 'Ø ?Ð ðð ð ð ð ˆxñ ô ð ð$ð $ð $ð $ð $�$Ô"ñ $ô $ð $ð €Ø	€Ø˜�x  t¨C¤y°'Ð'9Ô!:Ð:Ô;€Ø˜( 3œ-¨Ð1°6Ð9Ô:€Ø€Ø ˜y¨/Ð9Ô:Ð Ø  /Ð!2°GÐ!;Ô<Ð Ø�j $ s¤)Ð,¨cÐ1Ô2€	Ø˜S˜E 8¨E°#°wÀÐ2CÔ,DÔ#EÐEÔFÐ Ø
�˜#�Ô
€Ø ˜x¨¨t°E¸(ÀC¸-Ô4HÔ/IÈ3Ð/NÔ)OÐOÔPÐ ð8ð 8ð 8ð 8ð 8ˆjñ 8ô 8ð 8ð %�i”nÑ&Ô&Ð Ø,.€��d˜3”i Ð(Ô)Ð .Ð .Ñ .ð;ð ;ð ;ð ;ð ;˜
ñ ;ô ;ð ;ð BDÐ ˜D  c¤Ð,=Ð!=Ô>Ð CÐ CÑ CØ79Ð   S¨$¨s¬) ^Ô 4Ð 9Ð 9Ñ 9ð
ØÔ(×0Ò0°Ñ:Ô:€Oð ÐØ7Ð7Ð7Ð7Ð7Ð7à#* 7¨?Ñ#;Ô#;¸w¸wÀxÑ?PÔ?PÒ#PÐ Ø'ð 
ØˆŒðjð ñ		
ô 	
ð 	
ð 	ˆøð ÔÔ.ð >ð >ð >Ø8=Ð=Ð Ð#5Ð#5Ð#5ð>øøøð" Ð Ø)+Ð ˜T #œYÐ +Ð +Ñ +ð +/Ø9=Ø=AØ:>ðE;ð E;ð E;Ø	ˆcŒðE;àðE;ð  ðE;ð
 # 3œ-ðE;ð "Ð"5Ô6ðE;ð $Ð$9Ô:ðE;ð #Ð#6Ô7ðE;ð 
ðE;ð E;ð E;ð E;ðPØ	ˆcŒðð ðð 
ð	ð ð ð ð8 €ðEàðñ ô ð &*Ø48ð4ð +/Ø9=Ø=AØ:>ð4ð 4ð 4Ø	ˆcŒð4àð4ð  ð4ð ˜	Ô"ð	4ð
  Ð 0Ô1ð4ð # 3œ-ð4ð "Ð"5Ô6ð4ð $Ð$9Ô:ð4ð #Ð#6Ô7ð4ð 
ð4ð 4ð 4ñô ð
4ðx +/Ø9=Ø=AØ:>ð)Cð )Cð )CØ	ˆcŒð)Càð)Cð  ð)Cð
 # 3œ-ð)Cð "Ð"5Ô6ð)Cð $Ð$9Ô:ð)Cð #Ð#6Ô7ð)Cð 
ð)Cð )Cð )Cð )CðX €Ô˜dÐ#Ñ#Ô#ð"ð "ð "ð "ð "�'˜!”*ñ "ô "ñ $Ô#ð"ð €GˆC�xÐ Ñ Ô €ð €Ô˜dÐ#Ñ#Ô#ð!ð !ð !ð !ð !�˜˜A˜”ñ !ô !ñ $Ô#ð!ð €Ô˜dÐ#Ñ#Ô#ð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ $Ô#ð'ð�e˜C ˜H”oð ¨%°°S´	¸7Ð0BÔ*Cð ð ð ð ðHØˆS�#ˆX„ðHà
ˆ4��h �mÔ$Ô% wÐ.Ô/ðHð Hð Hð Hð˜X cœ]ð °Wð ÀÀsÈCÀxÄð ð ð ð ð�T˜#”Yð  5¨¨c¬°GÐ);Ô#<ð ð ð ð ðH˜t Cœyð H¨U°4¸¸hÈ¸mÔ8LÔ3MÈwÐ3VÔ-Wð Hð Hð Hð Hð
˜H SœMð °Gð ÀÀSÄ	ð ð ð ð ð,�T˜#˜s˜(”^ð ,¨¨d°3¬i¸Ð.@Ô(Að ,ð ,ð ,ð ,ðJØˆC�ˆH„~ðJà
ˆ4��h �mÔ$Ô% wÐ.Ô/ðJð Jð Jð Jð&˜H SœMð &°Gð &ÀÀSÈ#ÀXÄð &ð &ð &ð &ð˜:ð ¨%°°S´	¸7Ð0BÔ*Cð ð ð ð ðØðà
ˆ4��h �mÔ$Ô% wÐ.Ô/ðð ð ð ð. (¨3¤-ð .¸'ð .Àjð .ð .ð .ð .ð  7ð  ¨ð  ð  ð  ð  ð(¨oð À'ð ð ð ð ð,Ð.¨s°C¨xÔ8ð ,¸UÀ4ÈÄ9ÈgÐCUÔ=Vð ,ð ,ð ,ð ,ðJØ˜#˜s˜(Ô#ðJà
ˆ4��h �mÔ$Ô% wÐ.Ô/ðJð Jð Jð JðLØ�SŒMðLàðLð ˜˜S˜Ô!ðLð Lð Lð Lð &€Ø)Ð ð5˜K¨¨S¨Ô1ð 5°e¸DÀ¼IÀwÐ<NÔ6Oð 5ð 5ð 5ð 5ð
OØ�3˜�8ÔðOà
ˆ4��h �mÔ$Ô% wÐ.Ô/ðOð Oð Oð OðOØ�SŒMðOàðOð ��c�ÔðOð Oð Oð Oð Gð °ð ð ð ð ð+¨ð +À7ð +ð +ð +ð +ð&�e˜C”jð  U¨4°¬9°gÐ+=Ô%>ð ð ð ð ðHØˆS„zðHà
ˆ4��h �mÔ$Ô% wÐ.Ô/ðHð Hð Hð Hð)˜X cœ]ð )°Wð )ÀÀsÄð )ð )ð )ð )ð Ð Ø	ØØØ)Ø1ðñ ô ð ð Ð ØØØØ(Ø0ðñ ô ð ð Ð ØØØØ(Ø0ðñ ô ð ð Ð ØØØØ1Ø-Ø1Ø6ðñ ô ð ð Ð ØØØØ2Ø7ðñ ô ð ð Ð ØØØØ2Ø.Ø2Ø7ðñ ô ð ð Ð Ø	ØØØ,Ø1ðñ ô ð ð (1 yØ	ˆ;˜Ð$ñ(ô (Ð �Y˜t”_ð ð ñ ð "+ Ø
ˆD�$˜
 K°¸eÐDñ"ô "€ˆy˜Œð ð ñ ð7 #ð 7¨$ð 7ð 7ð 7ð 7ð˜ð  ð ð ð ð ðð �6ð  H¨X°v°hÀ°nÔ-EÔ$Fð ÐRVð ð ð ð ð €Ô˜D¨°$¸UÐCÑCÔCðL9ð L9ð L9ð L9ð L9ñ L9ô L9ñ DÔCðL9ð^
ð 
ð 
ð 
ð 
ˆxñ 
ô 
ð 
ð ˆX‰ZŒZ€
ð 37ð8ð 8Ø
ð8à�ŒIð8ð �h ˜x¨˜~Ô.Ô/ð8ð ð	8ð 8ð 8ð 8ð. 37ð	ð 	Ø
ð	à�h ˜x¨˜~Ô.Ô/ð	ð ˆ4�Œ9�hÐÔð	ð 	ð 	ð 	ð	&˜8 Cœ=ð 	&°Hð 	&Àð 	&ð 	&ð 	&ð 	&ð 37ð9ð 9Ø
ð9à�h ˜x¨˜~Ô.Ô/ð9ð ˆc„]ð9ð 9ð 9ð 9ð& 37ð2ð 2Ø
ð2à�h ˜x¨˜~Ô.Ô/ð2ð 
ˆ#„Yð2ð 2ð 2ð 2ð 37ð2ð 2Ø
ð2à�h ˜x¨˜~Ô.Ô/ð2ð ð2ð 2ð 2ð 2ð 37ð	)5ð )5ð )5Ø
�3˜�8Ô
ð)5à
ð)5ð ð)5ð �h ˜x¨˜~Ô.Ô/ð	)5ð
 ð)5ð )5ð )5ð )5ð` 37ð	ð ð Ø
�3˜�8Ô
ðà
ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ð ðD 	ˆd�1Œg�t˜A”wÐÔ€Øˆd�1Œg�t˜A”w  Q¤Ð'Ô(€ØÔ�wÒÐØ�D˜”I˜u T¨#¤Y° ^Ô4°e´oÐEÔF€G€Gà�D˜”I˜u T¨#¤Y° ^Ô4Ð4Ô5€Gà��a˜�d”ˆ}˜aÐÔ €Ø��a˜˜A�g”Ð Ð"Ô#€Øˆqˆc�1ˆfÔ€Ø�#�˜�Ô€à�a�S˜( C 5¨# :Ô.Ð.Ô/€	ð
 
ð e¨A¨q¨D¤kð °iÀÀAÀqÈ#ÀIÄÔ6Oð ð ð ñ 
„ðð 
ð e¨A¨q°!¨G¤nð ¸À3ÀqÈ!ÈQÐPSÀ|ÔCTÔ9Uð ð ð ñ 
„ðð 
ð d¨1¤gð °)¸B¸qÀ#¸v¼JÔ2Gð ð ð ñ 
„ðð
 
ð gð °)¸EÀ#¼JÔ2Gð ð ð ñ 
„ðð 
ð h°¨u°d¨{Ô&;ð À	È%ÐPSÌ*Ô@Uð ð ð ñ 
„ðð+Ø" 7¨H°c°U¸D°[Ô,AÐ#AÔBð+àˆu�SŒzÔð+ð +ð +ð +ð\ 
ð
 37ð	ð Ø! !œWðà
ˆQ�ˆVŒ*ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 
ð
 37ð	ð Ø" 1 a 4œ[ðà
ˆa��CˆiŒ.ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 
ð
 37ð	ð Ø" 1 a¨ 7œ^ðà
ˆa��A�sˆlÔ
ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 
ð
 37ð	ð Ø% s e¨T kÔ2ðà
�Œ*ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 37ð	Tð TØ" 7¨H°c°U¸D°[Ô,AÐ#AÔBðTà
�Œ*ðTð ðTð �h ˜x¨˜~Ô.Ô/ð	Tð
 ðTð Tð Tð Tð 
ð
 37ð	ð Ø! !œWðà
ˆQ�ˆVŒ*ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 
ð
 37ð	ð Ø" 1 a 4œ[ðà
ˆa��CˆiŒ.ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 
ð
 37ð	ð Ø" 1 a¨ 7œ^ðà
ˆa��A�sˆlÔ
ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 
ð
 37ð	ð Ø% s e¨T kÔ2ðà
�Œ*ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 ðð ð ñ 
„ðð 37ð	Uð UØ" 7¨H°c°U¸D°[Ô,AÐ#AÔBðUà
�Œ*ðUð ðUð �h ˜x¨˜~Ô.Ô/ð	Uð
 ðUð Uð Uð Uð 37ð%ð %Ø
�C�5˜$�;Ô
ð%à
ð%ð �h ˜x¨˜~Ô.Ô/ð%ð 
ð	%ð %ð %ð %ð 37ð%ð %Ø
�C�5˜$�;Ô
ð%à
ð%ð �h ˜x¨˜~Ô.Ô/ð%ð 
ð	%ð %ð %ð %ð 
ð
 37ð	ð Ø˜!”Wðà
ˆQ�ˆWŒ+ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 
ðð ð ñ 
„ðð 
ð
 37ð	ð Ø˜1˜a˜4”[ðà
ˆa��DˆjŒ/ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 
ðð ð ñ 
„ðð 
ð
 37ð	ð Ø˜1˜a ˜7”^ðà
ˆa��A�tˆmÔ
ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 
ðð ð ñ 
„ðð 37ð	Mð MØðMà
�Œ+ðMð ðMð �h ˜x¨˜~Ô.Ô/ð	Mð
 
ðMð Mð Mð Mð 
ð
 37ð	ð Ø˜!”Wðà
ˆQ�ˆWŒ+ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 
ðð ð ñ 
„ðð 
ð
 37ð	ð Ø˜1˜a˜4”[ðà
ˆa��DˆjŒ/ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 
ðð ð ñ 
„ðð 
ð
 37ð	ð Ø˜1˜a ˜7”^ðà
ˆa��A�tˆmÔ
ðð ðð �h ˜x¨˜~Ô.Ô/ð	ð
 
ðð ð ñ 
„ðð 37ð	Mð MØðMà
�Œ+ðMð ðMð �h ˜x¨˜~Ô.Ô/ð	Mð
 
ðMð Mð Mð Mð* 37ðð Ø
ðàðð �h ˜x¨˜~Ô.Ô/ðð ˆd�3ŒiÔð	ð ð ð ðD Ôð+ð +ð +ð +ð +ñ +ô +ñ Ôð+ð<ð <ð <ð <ð <�*ñ <ô <ð <ð
 02Ð �d˜3 Ð+Ô,Ð 1Ð 1Ñ 1ð!T ð !T¨_ð !Tð !Tð !Tð !TðH 2 ?ð  2°xð  2ð  2ð  2ð  2ðF &˜+Ð&7Ð9JÑKÔKÐ �QÑ ðð ˜Xð °¸#´ð È#ð ð ð ð ð,˜sð  xð ð ð ð ðð ð ð ð ñ ô ð ð
˜hð ¨3ð ð ð ð ð €ØIØðñ ô ð$˜Hð $¨ð $ð $ð $ñ	ô ð$ð
 €ØIØðñ ô ð ˜ð   ð  ð  ð  ñ	ô ð ð
˜6ð 
¨Vð 
¸¸S¼	ð 
ð 
ð 
ð 
ð 37ðBð BØ
ðBà�h ˜x¨˜~Ô.Ô/ðBð ˆ4��g˜s�lÔ#Ô$ hÐ.Ô/ðBð Bð Bð Bð4 37ð8ð 8Ø
ð8à�h ˜x¨˜~Ô.Ô/ð8ð 
ˆ%�˜�Ô
Ôð8ð 8ð 8ð 8ð0 37ð
ð 
Øð
à
ð
ð �h ˜x¨˜~Ô.Ô/ð
ð ˆe�G˜S�LÔ!Ô"ð	
ð 
ð 
ð 
ðB 37ð	 Lð  Lð  LØ
�3˜�8Ô
ð Là
ð Lð ð Lð �h ˜x¨˜~Ô.Ô/ð	 Lð
 ð Lð  Lð  Lð  LðF)ˆwð )˜3ð )ð )ð )ð )ð
�ð ˜'ð  cð ð ð ð ð ð s   ÇH ÈH3È2H3