§
    Þ˜ºh¬˜  ã                   ó¨  — 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mZmZm	Z	 ddl
mZmZ ddlmZmZmZ ddlmZmZmZ ddlmZ ddlmZmZ dd	lmZmZmZmZ ddlZ d
dl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) i Z* e"j+        e,¦  «        Z- e'¦   «         r
ddl.Z.d
dl/m0Z0  G d„ de1¦  «        Z2d„ Z3d„ Z4d„ Z5d„ Z6d„ Z7d„ Z8d„ Z9d„ Z:d„ Z;d„ Z<d„ Z=d„ Z>d„ Z?d„ Z@d„ ZAd „ ZBd!„ ZCd"„ ZDd#„ ZEd$„ ZFd%„ ZGd&„ ZH G d'„ d(e¦  «        ZI e'¦   «         r_ddlJm!c mKZL d)eId*eMeNe         d+f         fd,„ZO	 ddd-ee         d.d+d*eIfd/„ZP eLjQ        eIeO eePeI¬0¦  «        eIjR        › d1eIj,        › �¬2¦  «          G d3„ d4eSe¦  «        ZT G d5„ d6eT¦  «        ZU G d7„ d8eT¦  «        ZV G d9„ d:¦  «        ZWd;„ ZXd<„ ZYded>ed?eSd@eSfdA„ZZedfdCe[fdD„¦   «         Z\dddE„Z]dF„ Z^dddG„Z_dH„ Z`dI„ ZadJ„ ZbdK„ ZcdL„ ZddddMeeN         fdN„Ze G dO„ dPedB¬Q¦  «        ZfdRegeSef         d*e[fdS„ZhdTeSd*e[fdU„ZidVdWdXeSdYefdZ„ZjdVdWdXeSfd[„Zkd\„ Zle e)d]¬^¦  «         G d_„ d`¦  «        ¦   «         ¦   «         Zmda„ Zn G db„ dce¦  «        ZodS )gz
Generic utilities
é    N)ÚOrderedDictÚUserDictÚdefaultdict)ÚIterableÚMutableMapping)ÚAbstractContextManagerÚ	ExitStackÚcontextmanager)Ú	dataclassÚfieldsÚis_dataclass)ÚEnum)ÚpartialÚwraps)ÚAnyÚCallableÚOptionalÚ	TypedDicté   )Úloggingé   )Úis_flax_availableÚis_mlx_availableÚis_tf_availableÚis_torch_availableÚis_torch_fx_proxyÚrequires)Úmodel_addition_debugger_contextc                   ó   — e Zd ZdZdd„ZdS )Úcached_propertyzš
    Descriptor that mimics @property but caches output in member variable.

    From tensorflow_datasets

    Built-in in functools from Python 3.8.
    Nc                 óÊ   — |€| S | j         €t          d¦  «        ‚d| j         j        z   }t          ||d ¦  «        }|€&|                       |¦  «        }t	          |||¦  «         |S )Nzunreadable attributeÚ	__cached_)ÚfgetÚAttributeErrorÚ__name__ÚgetattrÚsetattr)ÚselfÚobjÚobjtypeÚattrÚcacheds        úb/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/utils/generic.pyÚ__get__zcached_property.__get__A   sn   € àˆ;ØˆKØŒ9ÐÝ Ð!7Ñ8Ô8Ð8Ø˜TœYÔ/Ñ/ˆÝ˜˜d DÑ)Ô)ˆØˆ>Ø—Y’Y˜s‘^”^ˆFÝ�C˜˜vÑ&Ô&Ð&Øˆó    ©N)r%   Ú
__module__Ú__qualname__Ú__doc__r.   © r/   r-   r    r    8   s2   € € € € € ðð ðð ð ð ð ð r/   r    c                 óf   — |                       ¦   «         } | dv rdS | dv rdS t          d| ›�¦  «        ‚)zïConvert a string representation of truth to true (1) or false (0).

    True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values are 'n', 'no', 'f', 'false', 'off', and '0'.
    Raises ValueError if 'val' is anything else.
    >   Ú1ÚtÚyÚonÚyesÚtruer   >   Ú0ÚfÚnÚnoÚoffÚfalser   zinvalid truth value )ÚlowerÚ
ValueError)Úvals    r-   Ú	strtoboolrE   P   sJ   € ð �)Š)‰+Œ+€CØ
Ð2Ð2Ð2ØˆqØ
Ð3Ð3Ð3ØˆqÝ
Ð3¨CÐ3Ð3Ñ
4Ô
4Ð4r/   c                 ó$  — t          t          | ¦  «        ¦  «        }|                     d¦  «        rdS |                     d¦  «        rdS |                     d¦  «        rdS |                     d¦  «        rdS |                     d	¦  «        rd
S dS )zÃ
    Tries to guess the framework of an object `x` from its repr (brittle but will help in `is_tensor` to try the
    frameworks in a smart order, without the need to import the frameworks).
    z<class 'torch.Úptz<class 'tensorflow.Útfz<class 'jaxÚjaxz<class 'numpy.Únpz<class 'mlx.ÚmlxN)ÚstrÚtypeÚ
startswith)ÚxÚrepresentations     r-   Úinfer_framework_from_reprrQ   ^   s©   € õ
 �˜a™œ‘\”\€NØ× Ò Ð!1Ñ2Ô2ð 	ØˆtØ	×	"Ò	"Ð#8Ñ	9Ô	9ð ØˆtØ	×	"Ò	" =Ñ	1Ô	1ð ØˆuØ	×	"Ò	"Ð#3Ñ	4Ô	4ð ØˆtØ	×	"Ò	" >Ñ	2Ô	2ð Øˆuðð r/   c                 ó  ‡‡— t           t          t          t          t          dœŠt          | ¦  «        Š‰€g n‰g}‰dk    r|                     d¦  «         |                     ˆfd„‰D ¦   «         ¦  «         ˆfd„|D ¦   «         S )z¿
    Returns an (ordered since we are in Python 3.7+) dictionary framework to test function, which places the framework
    we can guess from the repr first, then Numpy, then the others.
    )rG   rH   rI   rJ   rK   NrJ   c                 ó    •— g | ]
}|‰d fv¯|‘ŒS )rJ   r4   )Ú.0r=   Úpreferred_frameworks     €r-   ú
<listcomp>z1_get_frameworks_and_test_func.<locals>.<listcomp>�   s*   ø€ Ð\Ð\Ð\˜Q°qÐATÐVZÐ@[Ð7[Ð7[�qÐ7[Ð7[Ð7[r/   c                 ó"   •— i | ]}|‰|         “ŒS r4   r4   )rT   r=   Úframework_to_tests     €r-   ú
<dictcomp>z1_get_frameworks_and_test_func.<locals>.<dictcomp>‚   s!   ø€ Ð8Ð8Ð8¨ˆAÐ  Ô#Ð8Ð8Ð8r/   )Úis_torch_tensorÚis_tf_tensorÚis_jax_tensorÚis_numpy_arrayÚis_mlx_arrayrQ   ÚappendÚextend)rO   Ú
frameworksrX   rU   s     @@r-   Ú_get_frameworks_and_test_funcrb   p   s§   øø€ õ ÝÝÝÝðð Ðõ 4°AÑ6Ô6Ðà*Ð2��Ð9LÐ8M€JØ˜dÒ"Ð"Ø×Ò˜$ÑÔÐØ×ÒÐ\Ð\Ð\Ð\Ð"3Ð\Ñ\Ô\Ñ]Ô]Ð]Ø8Ð8Ð8Ð8¨ZÐ8Ñ8Ô8Ð8r/   c                 óÜ   — t          | ¦  «        }|                     ¦   «         D ]} || ¦  «        r dS Œt          | ¦  «        rdS t          ¦   «         rddlm} t          | |¦  «        rdS dS )z°
    Tests if `x` is a `torch.Tensor`, `tf.Tensor`, `jaxlib.xla_extension.DeviceArray`, `np.ndarray` or `mlx.array`
    in the order defined by `infer_framework_from_repr`
    Tr   )ÚTracerF)rb   Úvaluesr   r   Újax.corerd   Ú
isinstance)rO   Úframework_to_test_funcÚ	test_funcrd   s       r-   Ú	is_tensorrj   …   sœ   € õ ;¸1Ñ=Ô=ÐØ+×2Ò2Ñ4Ô4ð ð ˆ	Øˆ9�Q‰<Œ<ð 	Ø�4�4ð	õ ˜ÑÔð ØˆtåÑÔð Ø#Ð#Ð#Ð#Ð#Ð#å�a˜Ñ Ô ð 	Ø�4àˆ5r/   c                 ó6   — t          | t          j        ¦  «        S r0   )rg   rJ   Úndarray©rO   s    r-   Ú	_is_numpyrn   �   s   € Ý�a�œÑ$Ô$Ð$r/   c                 ó    — t          | ¦  «        S )z/
    Tests if `x` is a numpy array or not.
    )rn   rm   s    r-   r]   r]   ¡   s   € õ �Q‰<Œ<Ðr/   c                 ó4   — dd l }t          | |j        ¦  «        S ©Nr   )Útorchrg   ÚTensor©rO   rr   s     r-   Ú	_is_torchru   ¨   ó   € Ø€L€L€Lå�a˜œÑ&Ô&Ð&r/   c                 ó@   — t          ¦   «         sdnt          | ¦  «        S )z]
    Tests if `x` is a torch tensor or not. Safe to call even if torch is not installed.
    F)r   ru   rm   s    r-   rZ   rZ   ®   s   € õ +Ñ,Ô,Ð>ˆ5ˆ5µ)¸A±,´,Ð>r/   c                 ó4   — dd l }t          | |j        ¦  «        S rq   )rr   rg   Údevicert   s     r-   Ú_is_torch_devicerz   µ   rv   r/   c                 ó@   — t          ¦   «         sdnt          | ¦  «        S )z]
    Tests if `x` is a torch device or not. Safe to call even if torch is not installed.
    F)r   rz   rm   s    r-   Úis_torch_devicer|   »   s"   € õ +Ñ,Ô,ÐEˆ5ˆ5Õ2BÀ1Ñ2EÔ2EÐEr/   c                 ó¤   — dd l }t          | t          ¦  «        r#t          || ¦  «        rt	          || ¦  «        } ndS t          | |j        ¦  «        S )Nr   F)rr   rg   rL   Úhasattrr&   Údtypert   s     r-   Ú_is_torch_dtyper€   Â   sW   € Ø€L€L€Lå�!•SÑÔð Ý�5˜!ÑÔð 	Ý˜˜qÑ!Ô!ˆAˆAà�5Ý�a˜œÑ%Ô%Ð%r/   c                 ó@   — t          ¦   «         sdnt          | ¦  «        S )z\
    Tests if `x` is a torch dtype or not. Safe to call even if torch is not installed.
    F)r   r€   rm   s    r-   Úis_torch_dtyper‚   Í   s!   € õ +Ñ,Ô,ÐDˆ5ˆ5µ/À!Ñ2DÔ2DÐDr/   c                 ó4   — dd l }t          | |j        ¦  «        S rq   )Ú
tensorflowrg   rs   ©rO   rH   s     r-   Ú_is_tensorflowr†   Ô   s    € ØÐÐÐå�a˜œÑ#Ô#Ð#r/   c                 ó@   — t          ¦   «         sdnt          | ¦  «        S )zg
    Tests if `x` is a tensorflow tensor or not. Safe to call even if tensorflow is not installed.
    F)r   r†   rm   s    r-   r[   r[   Ú   s!   € õ (Ñ)Ô)Ð@ˆ5ˆ5­~¸aÑ/@Ô/@Ð@r/   c                 ó~   — dd l }t          |d¦  «        r|                     | ¦  «        S t          | |j        ¦  «        S )Nr   Úis_symbolic_tensor)r„   r~   r‰   rg   rs   r…   s     r-   Ú_is_tf_symbolic_tensorrŠ   á   sI   € ØÐÐÐõ ˆrÐ'Ñ(Ô(ð (Ø×$Ò$ QÑ'Ô'Ð'Ý�a˜œÑ#Ô#Ð#r/   c                 ó@   — t          ¦   «         sdnt          | ¦  «        S )z„
    Tests if `x` is a tensorflow symbolic tensor or not (ie. not eager). Safe to call even if tensorflow is not
    installed.
    F)r   rŠ   rm   s    r-   Úis_tf_symbolic_tensorrŒ   ê   s"   € õ
 (Ñ)Ô)ÐHˆ5ˆ5Õ/EÀaÑ/HÔ/HÐHr/   c                 ó8   — dd l m} t          | |j        ¦  «        S rq   )Ú	jax.numpyÚnumpyrg   rl   )rO   Újnps     r-   Ú_is_jaxr‘   ò   s&   € ØÐÐÐÐÐå�a˜œÑ%Ô%Ð%r/   c                 ó@   — t          ¦   «         sdnt          | ¦  «        S )zY
    Tests if `x` is a Jax tensor or not. Safe to call even if jax is not installed.
    F)r   r‘   rm   s    r-   r\   r\   ø   s   € õ *Ñ+Ô+Ð;ˆ5ˆ5µ¸±´Ð;r/   c                 ó8   — dd l m} t          | |j        ¦  «        S rq   )Úmlx.coreÚcorerg   Úarray)rO   Úmxs     r-   Ú_is_mlxr˜   ÿ   s&   € ØÐÐÐÐÐå�a˜œÑ"Ô"Ð"r/   c                 ó@   — t          ¦   «         sdnt          | ¦  «        S )zZ
    Tests if `x` is a mlx array or not. Safe to call even when mlx is not installed.
    F)r   r˜   rm   s    r-   r^   r^     s   € õ )Ñ*Ô*Ð:ˆ5ˆ5µ¸±
´
Ð:r/   c                 ó
  — t          | t          t          f¦  «        r| S t          | t          t          f¦  «        rd„ |                      ¦   «         D ¦   «         S t          | t          t          f¦  «        rŽ	 t          j	        | ¦  «        }t          j
        |j        t          j        ¦  «        s$t          j
        |j        t          j        ¦  «        r|                     ¦   «         S n# t          $ r Y nw xY wd„ | D ¦   «         S d„ d„ d„ d„ dœ}t!          | ¦  «        }|                     ¦   «         D ]#\  }} || ¦  «        r ||         | ¦  «        c S Œ$t          | t          j        ¦  «        r|                      ¦   «         S | S )zc
    Convert a TensorFlow tensor, PyTorch tensor, Numpy array or python list to a python list.
    c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r4   ©Ú	to_py_obj©rT   ÚkÚvs      r-   rY   zto_py_obj.<locals>.<dictcomp>  s$   € Ð8Ð8Ð8¡D A q�•9˜Q‘<”<Ð8Ð8Ð8r/   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r4   rœ   )rT   Úos     r-   rV   zto_py_obj.<locals>.<listcomp>  s   € Ð*Ð*Ð* •	˜!‘”Ð*Ð*Ð*r/   c                 ó*   — |                       ¦   «         S r0   ©Útolist©r)   s    r-   ú<lambda>zto_py_obj.<locals>.<lambda>  ó   € ˜#Ÿ*š*™,œ,€ r/   c                 óN   — |                       ¦   «                              ¦   «         S r0   )r�   r¥   r¦   s    r-   r§   zto_py_obj.<locals>.<lambda>  s   € ˜#Ÿ)š)™+œ+×,Ò,Ñ.Ô.€ r/   c                 óN   — t          j        | ¦  «                             ¦   «         S r0   )rJ   Úasarrayr¥   r¦   s    r-   r§   zto_py_obj.<locals>.<lambda>   s   € �2œ: c™?œ?×1Ò1Ñ3Ô3€ r/   c                 ó*   — |                       ¦   «         S r0   r¤   r¦   s    r-   r§   zto_py_obj.<locals>.<lambda>!  r¨   r/   ©rG   rH   rI   rJ   )rg   ÚintÚfloatÚdictr   ÚitemsÚlistÚtuplerJ   r–   Ú
issubdtyper   ÚintegerÚfloatingr¥   Ú	Exceptionrb   Únumber)r)   ÚarrÚframework_to_py_objrh   Ú	frameworkri   s         r-   r�   r�     s£  € õ �#��U�|Ñ$Ô$ð +Øˆ
Ý	�C�$¥Ð)Ñ	*Ô	*ð 	+Ø8Ð8¨C¯IªI©K¬KÐ8Ñ8Ô8Ð8Ý	�C�$¥˜Ñ	'Ô	'ð +ð	Ý”(˜3‘-”-ˆCÝŒ}˜SœY­¬
Ñ3Ô3ð $µr´}ÀSÄYÕPRÔP[Ñ7\Ô7\ð $Ø—z’z‘|”|Ð#ð$øåð 	ð 	ð 	ØˆDð	øøøà*Ð* cÐ*Ñ*Ô*Ð*ð 'Ð&Ø.Ð.Ø3Ð3Ø&Ð&ð	ð Ðõ ;¸3Ñ?Ô?ÐØ 6× <Ò <Ñ >Ô >ð 7ð 7Ñˆ	�9Øˆ9�S‰>Œ>ð 	7Ø1Ð& yÔ1°#Ñ6Ô6Ð6Ð6Ð6ð	7õ �#•r”yÑ!Ô!ð Ø�zŠz‰|Œ|Ðàˆ
s   Á6A/C' Ã'
C4Ã3C4c                 ó~  — d„ d„ d„ d„ dœ}t          | t          t          f¦  «        rd„ |                      ¦   «         D ¦   «         S t          | t          t
          f¦  «        rt          j        | ¦  «        S t          | ¦  «        }|                     ¦   «         D ]#\  }} || ¦  «        r ||         | ¦  «        c S Œ$| S )zc
    Convert a TensorFlow tensor, PyTorch tensor, Numpy array or python list to a Numpy array.
    c                 ór   — |                       ¦   «                              ¦   «                              ¦   «         S r0   )ÚdetachÚcpur�   r¦   s    r-   r§   zto_numpy.<locals>.<lambda>7  s&   € ˜#Ÿ*š*™,œ,×*Ò*Ñ,Ô,×2Ò2Ñ4Ô4€ r/   c                 ó*   — |                       ¦   «         S r0   )r�   r¦   s    r-   r§   zto_numpy.<locals>.<lambda>8  s   € ˜#Ÿ)š)™+œ+€ r/   c                 ó*   — t          j        | ¦  «        S r0   )rJ   r«   r¦   s    r-   r§   zto_numpy.<locals>.<lambda>9  s   € �2œ: c™?œ?€ r/   c                 ó   — | S r0   r4   r¦   s    r-   r§   zto_numpy.<locals>.<lambda>:  s   € ˜#€ r/   r­   c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r4   )Úto_numpyrž   s      r-   rY   zto_numpy.<locals>.<dictcomp>>  s$   € Ð7Ð7Ð7¡4 1 a�•8˜A‘;”;Ð7Ð7Ð7r/   )	rg   r°   r   r±   r²   r³   rJ   r–   rb   )r)   Úframework_to_numpyrh   r»   ri   s        r-   rÄ   rÄ   1  sé   € ð 5Ð4Ø%Ð%Ø*Ð*Øˆoð	ð Ðõ �#��hÐ'Ñ(Ô(ð Ø7Ð7¨3¯9ª9©;¬;Ð7Ñ7Ô7Ð7Ý	�C�$¥˜Ñ	'Ô	'ð ÝŒx˜‰}Œ}Ðõ ;¸3Ñ?Ô?ÐØ 6× <Ò <Ñ >Ô >ð 6ð 6Ñˆ	�9Øˆ9�S‰>Œ>ð 	6Ø0Ð% iÔ0°Ñ5Ô5Ð5Ð5Ð5ð	6ð €Jr/   c                   ó„   ‡ — e Zd ZdZdd„Zˆ fd„Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zˆ fd„Zˆ fd„Zˆ fd„Zdee         fd„Zˆ xZS )ÚModelOutputa±  
    Base class for all model outputs as dataclass. Has a `__getitem__` that allows indexing by integer or slice (like a
    tuple) or strings (like a dictionary) that will ignore the `None` attributes. Otherwise behaves like a regular
    python dictionary.

    <Tip warning={true}>

    You can't unpack a `ModelOutput` directly. Use the [`~utils.ModelOutput.to_tuple`] method to convert it to a tuple
    before.

    </Tip>
    ÚreturnNc                 ó    — t          ¦   «         r?ddlm}  || t          t	          t
          | ¬¦  «        | j        › d| j        › �¬¦  «         dS dS )zìRegister subclasses as pytree nodes.

        This is necessary to synchronize gradients when using `torch.nn.parallel.DistributedDataParallel` with
        `static_graph=True` with modules that output `ModelOutput` subclasses.
        r   )Úregister_pytree_node©Úoutput_typeú.©Úserialized_type_nameN)r   Útorch.utils._pytreerÊ   Ú_model_output_flattenr   Ú_model_output_unflattenr1   r%   )ÚclsrÊ   s     r-   Ú__init_subclass__zModelOutput.__init_subclass__Y  s~   € õ ÑÔð 	Ø@Ð@Ð@Ð@Ð@Ð@à Ð ØÝ%ÝÕ/¸SÐAÑAÔAØ(+¬Ð%GÐ%G¸¼Ð%GÐ%Gð	ñ ô ð ð ð ð	ð 	r/   c                 óÈ   •—  t          ¦   «         j        |i |¤Ž | j        t          k    }|r3t	          | ¦  «        s&t          | j        › d| j        j        › d�¦  «        ‚d S d S )NrÍ   z` is not a dataclass. This is a subclass of ModelOutput and so must use the @dataclass decorator.)ÚsuperÚ__init__Ú	__class__rÇ   r   Ú	TypeErrorr1   r%   )r(   ÚargsÚkwargsÚis_modeloutput_subclassrØ   s       €r-   r×   zModelOutput.__init__i  s•   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð #'¤.µKÒ"?Ðà"ð 	­<¸Ñ+=Ô+=ð 	ÝØ”?ð _ð _ T¤^Ô%<ð _ð _ð _ñô ð ð	ð 	ð 	ð 	r/   c                 ó@  ‡ — t          ‰ ¦  «        }t          |¦  «        st          ‰ j        j        › d�¦  «        ‚t          d„ |dd…         D ¦   «         ¦  «        st          ‰ j        j        › d�¦  «        ‚t          ‰ |d         j        ¦  «        }t          ˆ fd„|dd…         D ¦   «         ¦  «        }|�r>t          |¦  «        �s.t          |t          ¦  «        r|                     ¦   «         }d}n%	 t          |¦  «        }d}n# t          $ r d	}Y nw xY w|rÅt          |¦  «        D ]±\  }}t          |t          t           f¦  «        r.t          |¦  «        d
k    st          |d         t"          ¦  «        s,|dk    r|‰ |d         j        <   nt          d|› d�¦  «        ‚ n9t%          ‰ |d         |d         ¦  «         |d         �|d         ‰ |d         <   Œ²dS dS |�|‰ |d         j        <   dS dS |D ]#}t          ‰ |j        ¦  «        }	|	�
|	‰ |j        <   Œ$dS )zeCheck the ModelOutput dataclass.

        Only occurs if @dataclass decorator has been used.
        z has no fields.c              3   ó(   K  — | ]}|j         d u V — Œd S r0   )Údefault)rT   Úfields     r-   ú	<genexpr>z,ModelOutput.__post_init__.<locals>.<genexpr>‚  s)   è è € ÐGÐG¨U�5”= DÐ(ÐGÐGÐGÐGÐGÐGr/   r   Nz. should not have more than one required field.r   c              3   óF   •K  — | ]}t          ‰|j        ¦  «        d u V — Œd S r0   ©r&   Úname©rT   rà   r(   s     €r-   rá   z,ModelOutput.__post_init__.<locals>.<genexpr>†  s4   øè è € Ð#dÐ#dÈ%¥G¨D°%´*Ñ$=Ô$=ÀÐ$EÐ#dÐ#dÐ#dÐ#dÐ#dÐ#dr/   TFr   zCannot set key/value for z&. It needs to be a tuple (key, value).)r   ÚlenrC   rØ   r%   Úallr&   rä   rj   rg   r°   r±   ÚiterrÙ   Ú	enumerater²   r³   rL   r'   )
r(   Úclass_fieldsÚfirst_fieldÚother_fields_are_noneÚiteratorÚfirst_field_iteratorÚidxÚelementrà   r    s
   `         r-   Ú__post_init__zModelOutput.__post_init__x  s¦  ø€ õ
 ˜d‘|”|ˆõ �<Ñ Ô ð 	JÝ ¤Ô 7ÐHÐHÐHÑIÔIÐIÝÐGÐG°lÀ1À2À2Ô6FÐGÑGÔGÑGÔGð 	iÝ ¤Ô 7ÐgÐgÐgÑhÔhÐhå˜d L°¤OÔ$8Ñ9Ô9ˆÝ #Ð#dÐ#dÐ#dÐ#dÐS_Ð`aÐ`bÐ`bÔScÐ#dÑ#dÔ#dÑ dÔ dÐà ñ "	)­°;Ñ)?Ô)?ñ "	)Ý˜+¥tÑ,Ô,ð 1Ø&×,Ò,Ñ.Ô.�Ø'+Ð$Ð$ð1Ý# KÑ0Ô0�HØ+/Ð(Ð(øÝ ð 1ð 1ð 1Ø+0Ð(Ð(Ð(ð1øøøð
 $ð 9Ý$-¨hÑ$7Ô$7ð 6ð 6‘L�C˜Ý% gµµe¨}Ñ=Ô=ð 	ÅÀWÁÄÐQRÒARÐARÕZdÐelÐmnÔeoÕqtÑZuÔZuÐARØ !š8˜8à9D˜D ¨a¤Ô!5Ñ6Ð6õ #-Ø k¸GÐ kÐ kÐ kñ#ô #ð ð ˜Ý˜D '¨!¤*¨g°a¬jÑ9Ô9Ð9Ø˜q”zÐ-Ø+2°1¬:˜˜W QœZÑ(øð6ð 6ð ˜ð Ð(Ø-8��\ !”_Ô)Ñ*Ð*Ð*ð )Ð(ð &ð )ð )�Ý˜D %¤*Ñ-Ô-�Ø�=Ø'(�D˜œÑ$øð)ð )s   Ã7D	 Ä	DÄDc                 ó<   — t          d| j        j        › d�¦  «        ‚)Nz$You cannot use ``__delitem__`` on a ú
 instance.©r·   rØ   r%   ©r(   rÚ   rÛ   s      r-   Ú__delitem__zModelOutput.__delitem__¬  s!   € ÝÐb¸t¼~Ô?VÐbÐbÐbÑcÔcÐcr/   c                 ó<   — t          d| j        j        › d�¦  «        ‚)Nz#You cannot use ``setdefault`` on a ró   rô   rõ   s      r-   Ú
setdefaultzModelOutput.setdefault¯  s!   € ÝÐa¸d¼nÔ>UÐaÐaÐaÑbÔbÐbr/   c                 ó<   — t          d| j        j        › d�¦  «        ‚)NzYou cannot use ``pop`` on a ró   rô   rõ   s      r-   ÚpopzModelOutput.pop²  s!   € ÝÐZ°t´~Ô7NÐZÐZÐZÑ[Ô[Ð[r/   c                 ó<   — t          d| j        j        › d�¦  «        ‚)NzYou cannot use ``update`` on a ró   rô   rõ   s      r-   ÚupdatezModelOutput.updateµ  s!   € ÝÐ]¸$¼.Ô:QÐ]Ð]Ð]Ñ^Ô^Ð^r/   c                 ó²   — t          |t          ¦  «        r)t          |                      ¦   «         ¦  «        }||         S |                      ¦   «         |         S r0   )rg   rL   r°   r±   Úto_tuple)r(   rŸ   Ú
inner_dicts      r-   Ú__getitem__zModelOutput.__getitem__¸  sF   € Ý�a�ÑÔð 	&Ý˜dŸjšj™lœlÑ+Ô+ˆJØ˜a”=Ð à—=’=‘?”? 1Ô%Ð%r/   c                 óÀ   •— ||                       ¦   «         v r$|�"t          ¦   «                              ||¦  «         t          ¦   «                              ||¦  «         d S r0   )ÚkeysrÖ   Ú__setitem__Ú__setattr__)r(   rä   ÚvaluerØ   s      €r-   r  zModelOutput.__setattr__¿  sU   ø€ Ø�4—9’9‘;”;ÐÐ 5Ð#4å‰GŒG×Ò  eÑ,Ô,Ð,Ý‰Œ×Ò˜D %Ñ(Ô(Ð(Ð(Ð(r/   c                 ó�   •— t          ¦   «                              ||¦  «         t          ¦   «                              ||¦  «         d S r0   )rÖ   r  r  )r(   Úkeyr  rØ   s      €r-   r  zModelOutput.__setitem__Å  s=   ø€ å‰Œ×Ò˜C Ñ'Ô'Ð'å‰Œ×Ò˜C Ñ'Ô'Ð'Ð'Ð'r/   c                 ó  •‡ — t          ‰ ¦  «        s t          ¦   «                              ¦   «         S t          ¦   «                              ¦   «         ^}}}t          ˆ fd„t	          ‰ ¦  «        D ¦   «         ¦  «        }||g|¢R S )Nc              3   óB   •K  — | ]}t          ‰|j        ¦  «        V — Œd S r0   rã   rå   s     €r-   rá   z)ModelOutput.__reduce__.<locals>.<genexpr>Ï  s/   øè è € ÐIÐI°5•W˜T 5¤:Ñ.Ô.ÐIÐIÐIÐIÐIÐIr/   )r   rÖ   Ú
__reduce__r³   r   )r(   ÚcallableÚ_argsÚ	remainingrÚ   rØ   s   `    €r-   r
  zModelOutput.__reduce__Ë  s�   øø€ Ý˜DÑ!Ô!ð 	(Ý‘7”7×%Ò%Ñ'Ô'Ð'Ý&+¡g¤g×&8Ò&8Ñ&:Ô&:Ð#ˆ�%˜)ÝÐIÐIÐIÐI½FÀ4¹L¼LÐIÑIÔIÑIÔIˆØ˜Ð) 	Ð)Ð)Ð)r/   c                 ó^   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        S )za
        Convert self to a tuple containing all the attributes/keys that are not `None`.
        c              3   ó(   •K  — | ]}‰|         V — Œd S r0   r4   )rT   rŸ   r(   s     €r-   rá   z'ModelOutput.to_tuple.<locals>.<genexpr>Ö  s'   øè è € Ð2Ð2 �T˜!”WÐ2Ð2Ð2Ð2Ð2Ð2r/   )r³   r  ©r(   s   `r-   rþ   zModelOutput.to_tupleÒ  s0   ø€ õ Ð2Ð2Ð2Ð2 d§i¢i¡k¤kÐ2Ñ2Ô2Ñ2Ô2Ð2r/   )rÈ   N)r%   r1   r2   r3   rÔ   r×   rñ   rö   rø   rú   rü   r   r  r  r
  r³   r   rþ   Ú__classcell__)rØ   s   @r-   rÇ   rÇ   K  s'  ø€ € € € € ðð ðð ð ð ð ð ð ð ð ð2)ð 2)ð 2)ðhdð dð dðcð cð cð\ð \ð \ð_ð _ð _ð&ð &ð &ð)ð )ð )ð )ð )ð(ð (ð (ð (ð (ð*ð *ð *ð *ð *ð3˜% œ*ð 3ð 3ð 3ð 3ð 3ð 3ð 3ð 3r/   rÇ   ÚoutputrÈ   z_torch_pytree.Contextc                 ó†   — t          |                      ¦   «         ¦  «        t          |                      ¦   «         ¦  «        fS r0   )r²   re   r  )r  s    r-   rÑ   rÑ   Ü  s-   € Ý�F—M’M‘O”OÑ$Ô$¥d¨6¯;ª;©=¬=Ñ&9Ô&9Ð9Ð9r/   re   Úcontextc           
      óH   —  |di t          t          || ¦  «        ¦  «        ¤ŽS )Nr4   )r°   Úzip)re   r  rÌ   s      r-   rÒ   rÒ   ß  s,   € ð
 ˆ{Ð8Ð8�T¥# g¨vÑ"6Ô"6Ñ7Ô7Ð8Ð8Ð8r/   rË   rÍ   rÎ   c                   ó(   — e Zd ZdZed„ ¦   «         ZdS )ÚExplicitEnumzC
    Enum with more explicit error message for missing values.
    c           
      ó‚   — t          |› d| j        › dt          | j                             ¦   «         ¦  «        › �¦  «        ‚)Nz is not a valid z, please select one of )rC   r%   r²   Ú_value2member_map_r  )rÓ   r  s     r-   Ú	_missing_zExplicitEnum._missing_ó  sG   € åØÐpÐp c¤lÐpÐpÍ4ÐPSÔPf×PkÒPkÑPmÔPmÑKnÔKnÐpÐpñ
ô 
ð 	
r/   N)r%   r1   r2   r3   Úclassmethodr  r4   r/   r-   r  r  î  s9   € € € € € ðð ð ð
ð 
ñ „[ð
ð 
ð 
r/   r  c                   ó   — e Zd ZdZdZdZdZdS )ÚPaddingStrategyz†
    Possible values for the `padding` argument in [`PreTrainedTokenizerBase.__call__`]. Useful for tab-completion in an
    IDE.
    ÚlongestÚ
max_lengthÚ
do_not_padN)r%   r1   r2   r3   ÚLONGESTÚ
MAX_LENGTHÚ
DO_NOT_PADr4   r/   r-   r  r  ú  s)   € € € € € ðð ð
 €GØ€JØ€J€J€Jr/   r  c                   ó&   — e Zd ZdZdZdZdZdZdZdS )Ú
TensorTypez�
    Possible values for the `return_tensors` argument in [`PreTrainedTokenizerBase.__call__`]. Useful for
    tab-completion in an IDE.
    rG   rH   rJ   rI   rK   N)	r%   r1   r2   r3   ÚPYTORCHÚ
TENSORFLOWÚNUMPYÚJAXÚMLXr4   r/   r-   r&  r&    s3   € € € € € ðð ð
 €GØ€JØ€EØ
€CØ
€C€C€Cr/   r&  c                   ó6   — e Zd ZdZdee         fd„Zd„ Zd„ ZdS )ÚContextManagerszš
    Wrapper for `contextlib.ExitStack` which enters a collection of context managers. Adaptation of `ContextManagers`
    in the `fastcore` library.
    Úcontext_managersc                 ó:   — || _         t          ¦   «         | _        d S r0   )r.  r	   Ústack)r(   r.  s     r-   r×   zContextManagers.__init__  s   € Ø 0ˆÔÝ‘[”[ˆŒ
ˆ
ˆ
r/   c                 óN   — | j         D ]}| j                             |¦  «         Œd S r0   )r.  r0  Úenter_context)r(   Úcontext_managers     r-   Ú	__enter__zContextManagers.__enter__  s7   € Ø#Ô4ð 	6ð 	6ˆOØŒJ×$Ò$ _Ñ5Ô5Ð5Ð5ð	6ð 	6r/   c                 ó*   —  | j         j        |i |¤Ž d S r0   )r0  Ú__exit__rõ   s      r-   r6  zContextManagers.__exit__   s"   € ØˆŒ
Ô˜TÐ, VÐ,Ð,Ð,Ð,Ð,r/   N)	r%   r1   r2   r3   r²   r   r×   r4  r6  r4   r/   r-   r-  r-    s]   € € € € € ðð ð
!¨Ð.DÔ)Eð !ð !ð !ð !ð6ð 6ð 6ð-ð -ð -ð -ð -r/   r-  c                 ó$  — t          | ¦  «        }|dk    rt          j        | j        ¦  «        }n9|dk    rt          j        | j        ¦  «        }nt          j        | j        ¦  «        }|j        D ]}|dk    r|j        |         j        du r dS Œ dS )zr
    Check if a given model can return loss.

    Args:
        model_class (`type`): The class of the model.
    rH   rG   Úreturn_lossTF)Úinfer_frameworkÚinspectÚ	signatureÚcallÚforwardÚ__call__Ú
parametersrß   )Úmodel_classr»   r;  Úps       r-   Úcan_return_lossrB  $  s£   € õ   Ñ,Ô,€IØ�DÒÐÝÔ% kÔ&6Ñ7Ô7ˆ	ˆ	Ø	�dÒ	Ð	ÝÔ% kÔ&9Ñ:Ô:ˆ	ˆ	åÔ% kÔ&:Ñ;Ô;ˆ	àÔ!ð ð ˆØ�ÒÐ )Ô"6°qÔ"9Ô"AÀTÐ"IÐ"IØ�4�4øàˆ5r/   c                 ó,  — | j         }t          | ¦  «        }|dk    rt          j        | j        ¦  «        }n9|dk    rt          j        | j        ¦  «        }nt          j        | j        ¦  «        }d|v rd„ |j        D ¦   «         S d„ |j        D ¦   «         S )zq
    Find the labels used by a given model.

    Args:
        model_class (`type`): The class of the model.
    rH   rG   ÚQuestionAnsweringc                 ó"   — g | ]}d |v s|dv ¯
|‘ŒS )Úlabel)Ústart_positionsÚend_positionsr4   ©rT   rA  s     r-   rV   zfind_labels.<locals>.<listcomp>K  s+   € ÐmÐmÐm�a°7¸a°<°<À1ÐHlÐClÐCl�ÐClÐClÐClr/   c                 ó   — g | ]}d |v ¯|‘Œ	S )rF  r4   rI  s     r-   rV   zfind_labels.<locals>.<listcomp>M  s   € Ð@Ð@Ð@�a°7¸a°<°<�°<°<°<r/   )r%   r9  r:  r;  r<  r=  r>  r?  )r@  Ú
model_namer»   r;  s       r-   Úfind_labelsrL  :  s¥   € ð Ô%€JÝ Ñ,Ô,€IØ�DÒÐÝÔ% kÔ&6Ñ7Ô7ˆ	ˆ	Ø	�dÒ	Ð	ÝÔ% kÔ&9Ñ:Ô:ˆ	ˆ	åÔ% kÔ&:Ñ;Ô;ˆ	à˜jÐ(Ð(ØmÐm˜9Ô/ÐmÑmÔmÐmà@Ð@˜9Ô/Ð@Ñ@Ô@Ð@r/   Ú ÚdÚ
parent_keyÚ	delimiterc                 ó>   — dd„}t           || ||¦  «        ¦  «        S )z/Flatten a nested dict into a single level dict.rM  rÍ   c              3   ó  K  — |                       ¦   «         D ]s\  }}|r"t          |¦  «        |z   t          |¦  «        z   n|}|r@t          |t          ¦  «        r+t	          |||¬¦  «                              ¦   «         E d {V —† Œm||fV — Œtd S )N)rP  )r±   rL   rg   r   Úflatten_dict)rN  rO  rP  rŸ   r    r  s         r-   Ú_flatten_dictz#flatten_dict.<locals>._flatten_dictS  s®   è è € Ø—G’G‘I”Ið 	ð 	‰DˆAˆqØ:DÐK•#�j‘/”/ IÑ-µ°A±´Ñ6Ð6È!ˆCØð •Z ¥>Ñ2Ô2ð Ý'¨¨3¸)ÐDÑDÔD×JÒJÑLÔLÐLÐLÐLÐLÐLÐLÐLÐLà˜1�f����ð	ð 	r/   ©rM  rÍ   )r°   )rN  rO  rP  rT  s       r-   rS  rS  P  s4   € ðð ð ð õ ��˜a ¨YÑ7Ô7Ñ8Ô8Ð8r/   FÚuse_temp_dirc              #   óz   K  — |r2t          j        ¦   «         5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S | V — d S r0   )ÚtempfileÚTemporaryDirectory)Úworking_dirrV  Útmp_dirs      r-   Úworking_or_temp_dirr\  ^  s›   è è € àð ÝÔ(Ñ*Ô*ð 	¨gØˆMˆMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð ÐÐÐÐÐs   ˜*ª.±.c                 ó|  — t          | ¦  «        rt          j        | |¬¦  «        S t          | ¦  «        r|€| j        n	 | j        |Ž S t          | ¦  «        rddl}|                     | |¬¦  «        S t          | ¦  «        rddl	m
} |                     | |¬¦  «        S t          dt          | ¦  «        › d�¦  «        ‚)z…
    Framework-agnostic version of `numpy.transpose` that will work on torch/TensorFlow/Jax tensors as well as NumPy
    arrays.
    )ÚaxesNr   )Úpermz"Type not supported for transpose: rÍ   )r]   rJ   Ú	transposerZ   ÚTÚpermuter[   r„   r\   rŽ   r�   rC   rM   )r–   r^  rH   r�   s       r-   r`  r`  g  sà   € õ
 �eÑÔð NÝŒ|˜E¨Ð-Ñ-Ô-Ð-Ý	˜Ñ	Ô	ð NØ˜,ˆuŒwˆw¨M¨E¬M¸4Ð,@Ð@Ý	�eÑ	Ô	ð 	NØÐÐÐà�|Š|˜E¨ˆ|Ñ-Ô-Ð-Ý	�uÑ	Ô	ð NØÐÐÐÐÐà�}Š}˜U¨ˆ}Ñ.Ô.Ð.åÐL½dÀ5¹k¼kÐLÐLÐLÑMÔMÐMr/   c                 ód  — t          | ¦  «        rt          j        | |¦  «        S t          | ¦  «        r
 | j        |Ž S t	          | ¦  «        rddl}|                     | |¦  «        S t          | ¦  «        rddlm} |                     | |¦  «        S t          dt          | ¦  «        › d�¦  «        ‚)zƒ
    Framework-agnostic version of `numpy.reshape` that will work on torch/TensorFlow/Jax tensors as well as NumPy
    arrays.
    r   Nz Type not supported for reshape: rÍ   )r]   rJ   ÚreshaperZ   r[   r„   r\   rŽ   r�   rC   rM   )r–   ÚnewshaperH   r�   s       r-   rd  rd  |  sÏ   € õ
 �eÑÔð LÝŒz˜% Ñ*Ô*Ð*Ý	˜Ñ	Ô	ð LØˆuŒ}˜hÐ'Ð'Ý	�eÑ	Ô	ð 	LØÐÐÐà�zŠz˜% Ñ*Ô*Ð*Ý	�uÑ	Ô	ð LØÐÐÐÐÐà�{Š{˜5 (Ñ+Ô+Ð+åÐJ½DÀ¹K¼KÐJÐJÐJÑKÔKÐKr/   c                 ó®  — t          | ¦  «        rt          j        | |¬¦  «        S t          | ¦  «        r,|€|                      ¦   «         n|                      |¬¦  «        S t	          | ¦  «        rddl}|                     | |¬¦  «        S t          | ¦  «        rddlm} |                     | |¬¦  «        S t          dt          | ¦  «        › d�¦  «        ‚)zƒ
    Framework-agnostic version of `numpy.squeeze` that will work on torch/TensorFlow/Jax tensors as well as NumPy
    arrays.
    ©ÚaxisN©Údimr   z Type not supported for squeeze: rÍ   )r]   rJ   ÚsqueezerZ   r[   r„   r\   rŽ   r�   rC   rM   ©r–   rh  rH   r�   s       r-   rk  rk  ‘  së   € õ
 �eÑÔð LÝŒz˜% dÐ+Ñ+Ô+Ð+Ý	˜Ñ	Ô	ð LØ"& ,ˆu�}Š}‰Œˆ°E·M²MÀd°MÑ4KÔ4KÐKÝ	�eÑ	Ô	ð 	LØÐÐÐà�zŠz˜% dˆzÑ+Ô+Ð+Ý	�uÑ	Ô	ð LØÐÐÐÐÐà�{Š{˜5 tˆ{Ñ,Ô,Ð,åÐJ½DÀ¹K¼KÐJÐJÐJÑKÔKÐKr/   c                 ó€  — t          | ¦  «        rt          j        | |¦  «        S t          | ¦  «        r|                      |¬¦  «        S t          | ¦  «        rddl}|                     | |¬¦  «        S t          | ¦  «        rddlm	} |                     | |¬¦  «        S t          dt          | ¦  «        › d�¦  «        ‚)z‡
    Framework-agnostic version of `numpy.expand_dims` that will work on torch/TensorFlow/Jax tensors as well as NumPy
    arrays.
    ri  r   Nrg  z$Type not supported for expand_dims: rÍ   )r]   rJ   Úexpand_dimsrZ   Ú	unsqueezer[   r„   r\   rŽ   r�   rC   rM   rl  s       r-   rn  rn  ¦  sØ   € õ
 �eÑÔð PÝŒ~˜e TÑ*Ô*Ð*Ý	˜Ñ	Ô	ð PØ�Š 4ˆÑ(Ô(Ð(Ý	�eÑ	Ô	ð 	PØÐÐÐà�~Š~˜e¨$ˆ~Ñ/Ô/Ð/Ý	�uÑ	Ô	ð PØÐÐÐÐÐà�Š˜u¨4ˆÑ0Ô0Ð0åÐNÅÀUÁÄÐNÐNÐNÑOÔOÐOr/   c                 óJ  — t          | ¦  «        rt          j        | ¦  «        S t          | ¦  «        r|                      ¦   «         S t          | ¦  «        rddl}|                     | ¦  «        S t          | ¦  «        r| j        S t          dt          | ¦  «        › d�¦  «        ‚)z|
    Framework-agnostic version of `numpy.size` that will work on torch/TensorFlow/Jax tensors as well as NumPy arrays.
    r   Nz$Type not supported for tensor_size: rÍ   )
r]   rJ   ÚsizerZ   Únumelr[   r„   r\   rC   rM   )r–   rH   s     r-   Útensor_sizers  »  s¨   € õ �eÑÔð PÝŒw�u‰~Œ~ÐÝ	˜Ñ	Ô	ð 	PØ�{Š{‰}Œ}ÐÝ	�eÑ	Ô	ð PØÐÐÐà�wŠw�u‰~Œ~ÐÝ	�uÑ	Ô	ð PØŒzÐåÐNÅÀUÁÄÐNÐNÐNÑOÔOÐOr/   c                 óz  — t          j        | ¦  «        D ]”}|j        }|j        }|                     d¦  «        s|                     d¦  «        s|dk    r dS |                     d¦  «        s|dk    r dS |                     d¦  «        s|                     d	¦  «        s|d
k    r dS Œ•t          d| › d�¦  «        ‚)z 
    Infers the framework of a given model without using isinstance(), because we cannot guarantee that the relevant
    classes are imported or available.
    r„   ÚkerasÚTFPreTrainedModelrH   rr   ÚPreTrainedModelrG   ÚflaxrI   ÚFlaxPreTrainedModelz%Could not infer framework from class rÍ   )r:  Úgetmror1   r%   rN   rÙ   )r@  Ú
base_classÚmodulerä   s       r-   r9  r9  Í  sð   € õ
 ”n [Ñ1Ô1ð ð ˆ
ØÔ&ˆØÔ"ˆØ×Ò˜\Ñ*Ô*ð 	¨f×.?Ò.?ÀÑ.HÔ.Hð 	ÈDÐTgÒLgÐLgØ�4�4Ø×Ò˜wÑ'Ô'ð 	¨4Ð3DÒ+DÐ+DØ�4�4Ø×Ò˜vÑ&Ô&ð 	¨&×*;Ò*;¸EÑ*BÔ*Bð 	ÀdÐNcÒFcÐFcØ�6�6ð Gdå
ÐJ¸KÐJÐJÐJÑ
KÔ
KÐKr/   c                 óò   — t          ¦   «         st          | ¦  «        S ddl}|j                             ¦   «         r/t          | |j        ¦  «        r|                      |j        ¦  «        nt          | ¦  «        S )zk
    Casts an input to a torch int64 tensor if we are in a tracing context, otherwise to a Python int.
    r   N)	r   r®   rr   ÚjitÚ
is_tracingrg   rs   ÚtoÚint64rt   s     r-   Ú	torch_intr‚  Þ  sm   € õ ÑÔð Ý�1‰vŒvˆà€L€L€Là %¤	× 4Ò 4Ñ 6Ô 6Ðb½:ÀaÈÌÑ;VÔ;VÐbˆ1�4Š4�”ÑÔÐÕ\_Ð`aÑ\bÔ\bÐbr/   c                 óò   — t          ¦   «         st          | ¦  «        S ddl}|j                             ¦   «         r/t          | |j        ¦  «        r|                      |j        ¦  «        nt          | ¦  «        S )zo
    Casts an input to a torch float32 tensor if we are in a tracing context, otherwise to a Python float.
    r   N)	r   r®   rr   r~  r  rg   rs   r€  Úfloat32rt   s     r-   Útorch_floatr…  ê  sm   € õ ÑÔð Ý�1‰vŒvˆà€L€L€Là"'¤)×"6Ò"6Ñ"8Ô"8Ðd½ZÈÈ5Ì<Ñ=XÔ=XÐdˆ1�4Š4�”ÑÔÐÕ^aÐbcÑ^dÔ^dÐdr/   Úextrac                 ó8   ‡— | pg } t          | ¦  «        Šˆfd„}|S )aI  
    Decorator to filter out named arguments that are not in the function signature.

    This decorator ensures that only the keyword arguments that match the function's signature, or are specified in the
    `extra` list, are passed to the function. Any additional keyword arguments are filtered out and a warning is issued.

    Parameters:
        extra (`Optional[list]`, *optional*):
            A list of extra keyword argument names that are allowed even if they are not in the function's signature.

    Returns:
        Callable:
            A decorator that wraps the function and filters out invalid keyword arguments.

    Example usage:

        ```python
        @filter_out_non_signature_kwargs(extra=["allowed_extra_arg"])
        def my_function(arg1, arg2, **kwargs):
            print(arg1, arg2, kwargs)

        my_function(arg1=1, arg2=2, allowed_extra_arg=3, invalid_arg=4)
        # This will print: 1 2 {"allowed_extra_arg": 3}
        # And issue a warning: "The following named arguments are not valid for `my_function` and were ignored: 'invalid_arg'"
        ```
    c                 ó  •‡ ‡‡‡— t          j        ‰ ¦  «        }t          |j                             ¦   «         ¦  «        }|                     ‰¦  «        Šd|v Šd|v Šd‰ _        t          ‰ ¦  «        ˆ ˆˆˆfd„¦   «         }|S )Nr(   rÓ   Tc                  ó`  •— i }i }|                      ¦   «         D ]\  }}|‰v r|||<   Œ|||<   Œ|rwd„ |D ¦   «         }d                     |¦  «        }‰
r| d         j        j        dz   }n‰	r| d         j        dz   }nd}t	          j        d|› ‰j        › d|› �t          d¬	¦  «          ‰| i |¤ŽS )
Nc                 ó   — g | ]}d |› d �‘Œ	S )ú'r4   )rT   rŸ   s     r-   rV   zWfilter_out_non_signature_kwargs.<locals>.decorator.<locals>.wrapper.<locals>.<listcomp>,  s    € Ð'IÐ'IÐ'I°Q¨¨A¨¨¨Ð'IÐ'IÐ'Ir/   z, r   rÍ   rM  z1The following named arguments are not valid for `z` and were ignored: r   )Ú
stacklevel)r±   ÚjoinrØ   r%   ÚwarningsÚwarnÚUserWarning)rÚ   rÛ   Úvalid_kwargsÚinvalid_kwargsrŸ   r    Úinvalid_kwargs_namesÚ
cls_prefixÚfuncÚis_class_methodÚis_instance_methodÚvalid_kwargs_to_passs           €€€€r-   ÚwrapperzCfilter_out_non_signature_kwargs.<locals>.decorator.<locals>.wrapper   s   ø€ àˆLØˆNàŸš™œð *ð *‘��1ØÐ,Ð,Ð,Ø&'�L ‘O�Oà()�N 1Ñ%Ð%àð Ø'IÐ'I¸.Ð'IÑ'IÔ'IÐ$Ø'+§y¢yÐ1EÑ'FÔ'FÐ$ð &ð $Ø!% a¤Ô!2Ô!;¸cÑ!A�J�JØ$ð $Ø!% a¤Ô!1°CÑ!7�J�Jà!#�Jå”ðAÈ
ð AÐTXÔTað Að AØ*>ðAð AåØ ð	ñ ô ð ð �4˜Ð. Ð.Ð.Ð.r/   )r:  r;  Úsetr?  r  ÚunionÚ _filter_out_non_signature_kwargsr   )r•  ÚsigÚfunction_named_argsr™  r–  r—  r˜  Úextra_params_to_passs   `   @@@€r-   Ú	decoratorz2filter_out_non_signature_kwargs.<locals>.decorator  sª   øøøøø€ ÝÔ Ñ%Ô%ˆÝ! #¤.×"5Ò"5Ñ"7Ô"7Ñ8Ô8ÐØ2×8Ò8Ð9MÑNÔNÐð $Ð':Ð:ÐØÐ#6Ð6ˆð 15ˆÔ-å	ˆt‰Œð	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ñ 
Œð	/ð> ˆr/   )rš  )r†  r   rŸ  s     @r-   Úfilter_out_non_signature_kwargsr¡  ö  s<   ø€ ð6 ˆK�R€EÝ˜u™:œ:Ðð,ð ,ð ,ð ,ð ,ð\ Ðr/   c                   óÄ   — e Zd ZU dZed         ed<   ee         ed<   ee         ed<   ee         ed<   ed         ed<   ed         ed	<   ee         ed
<   ee         ed<   dS )ÚTransformersKwargsai  
    Keyword arguments to be passed to the loss function

    Attributes:
        num_items_in_batch (`Optional[torch.Tensor]`, *optional*):
            Number of items in the batch. It is recommended to pass it when
            you are doing gradient accumulation.
        output_hidden_states (`Optional[bool]`, *optional*):
            Most of the models support outputting all hidden states computed during the forward pass.
        output_attentions (`Optional[bool]`, *optional*):
            Turn this on to return the intermediary attention scores.
        output_router_logits (`Optional[bool]`, *optional*):
            For MoE models, this allows returning the router logits to compute the loss.
        cu_seq_lens_q (`torch.LongTensor`, *optional*)
            Gets cumulative sequence length for query state.
        cu_seq_lens_k (`torch.LongTensor`, *optional*)
            Gets cumulative sequence length for key state.
        max_length_q (`int`, *optional*):
            Maximum sequence length for query state.
        max_length_k (`int`, *optional*):
            Maximum sequence length for key state.
    ztorch.TensorÚnum_items_in_batchÚoutput_hidden_statesÚoutput_attentionsÚoutput_router_logitsztorch.LongTensorÚcu_seq_lens_qÚcu_seq_lens_kÚmax_length_qÚmax_length_kN)r%   r1   r2   r3   r   Ú__annotations__Úboolr®   r4   r/   r-   r£  r£  E  s£   € € € € € € ðð ð. ! Ô0Ð0Ð0Ñ0Ø" 4œ.Ð(Ð(Ñ(Ø ”~Ð%Ð%Ñ%Ø" 4œ.Ð(Ð(Ñ(ØÐ.Ô/Ð/Ð/Ñ/ØÐ.Ô/Ð/Ð/Ñ/Ø˜3”-ÐÐÑØ˜3”-ÐÐÑÐÐr/   r£  )ÚtotalÚconfig_dictc                 ó
   — d| v S )z3Checks whether a config dict is a timm config dict.Úpretrained_cfgr4   )r¯  s    r-   Úis_timm_config_dictr²  g  s   € à˜{Ð*Ð*r/   Úpretrained_model_pathc                 ó¸  — | €dS t          | ¦  «        } t          j                             | ¦  «        }t          j                             | ¦  «        }|r_|                      d¦  «        rJt          | ¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   t          |¦  «        S |r¥t          j         
                    t          j                             | d¦  «        ¦  «        rht          t          j                             | d¦  «        ¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   t          |¦  «        S dS )zA
    Checks whether a checkpoint is a timm model checkpoint.
    NFz.jsonzconfig.json)rL   ÚosÚpathÚisfileÚisdirÚendswithÚopenÚjsonÚloadr²  Úexistsr�  )r³  Úis_fileÚis_dirr=   r¯  s        r-   Úis_timm_local_checkpointrÀ  l  s¥  € ð Ð$Øˆuõ  Ð 5Ñ6Ô6ÐåŒg�nŠnÐ2Ñ3Ô3€GÝŒW�]Š]Ð0Ñ1Ô1€Fð ð 0Ð(×1Ò1°'Ñ:Ô:ð 0ÝÐ'Ñ(Ô(ð 	'¨AÝœ) A™,œ,ˆKð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'å" ;Ñ/Ô/Ð/ð ð 0•"”'—.’.¥¤§¢Ð.CÀ]Ñ!SÔ!SÑTÔTð 0Ý•"”'—,’,Ð4°mÑDÔDÑEÔEð 	'ÈÝœ) A™,œ,ˆKð	'ð 	'ð 	'ñ 	'ô 	'ð 	'ð 	'ð 	'ð 	'ð 	'ð 	'øøøð 	'ð 	'ð 	'ð 	'å" ;Ñ/Ô/Ð/àˆ5s$   Á8BÂBÂ BÄE Å EÅEr|  ztorch.nn.Moduler  r  c                 óx   — t          | ||¦  «         |                      ¦   «         D ]}t          |||¦  «         ŒdS )z5
    Set a value to a module and all submodules.
    N)r'   ÚchildrenÚset_attribute_for_modules)r|  r  r  Ú	submodules       r-   rÃ  rÃ  ˆ  sN   € õ ˆF�C˜ÑÔÐØ—_’_Ñ&Ô&ð 9ð 9ˆ	Ý! )¨S°%Ñ8Ô8Ð8Ð8ð9ð 9r/   c                 ó”   — t          | |¦  «        rt          | |¦  «         |                      ¦   «         D ]}t          ||¦  «         ŒdS )z:
    Delete a value from a module and all submodules.
    N)r~   ÚdelattrrÂ  Údel_attribute_from_modules)r|  r  rÄ  s      r-   rÇ  rÇ  ‘  s\   € õ
 ˆv�sÑÔð Ý�˜ÑÔÐà—_’_Ñ&Ô&ð 3ð 3ˆ	Ý" 9¨cÑ2Ô2Ð2Ð2ð3ð 3r/   c                 ó<   ‡ — t          ‰ ¦  «        ˆ fd„¦   «         }|S )zö
    Decorator to wrap model method, to call output.to_tuple() if return_dict=False passed as a kwarg or
    use_return_dict=False is set in the config.

    Note:
        output.to_tuple() convert output to tuple skipping all `None` values.
    c                 óæ   •— t          | d¦  «        r| j        j        nd}|                     d|¦  «        }|�|} ‰| g|¢R i |¤Ž}|s)t	          |t
          ¦  «        s|                     ¦   «         }|S )NÚconfigTÚreturn_dict)r~   rÊ  rË  rú   rg   r³   rþ   )r(   rÚ   rÛ   rË  Úreturn_dict_passedr  r•  s         €r-   r™  z!can_return_tuple.<locals>.wrapper¦  sŒ   ø€ å18¸¸xÑ1HÔ1HÐR�d”kÔ-Ð-ÈdˆØ#ŸZšZ¨°{ÑCÔCÐØÐ)Ø,ˆKØ��dÐ,˜TÐ,Ð,Ð, VÐ,Ð,ˆØð 	'¥:¨fµeÑ#<Ô#<ð 	'Ø—_’_Ñ&Ô&ˆFØˆr/   ©r   ©r•  r™  s   ` r-   Úcan_return_tuplerÏ  �  s5   ø€ õ ˆ4�[„[ðð ð ð ñ „[ðð €Nr/   )rr   )Úbackendsc                   ól   — e Zd ZU dZded<   dZee         ed<   dZee	         ed<   dZ
ee	         ed<   dS )	ÚOutputRecordera  
    Configuration for recording outputs from a model via hooks.

    Attributes:
        target_class (Type): The class (e.g., nn.Module) to which the hook will be attached.
        index (Optional[int]): If the output is a tuple/list, optionally record only at a specific index.
        layer_name (Optional[str]): Name of the submodule to target (if needed), e.g., "transformer.layer.3.attn".
        class_name (Optional[str]): Name of the class to which the hook will be attached. Could be the suffix of class name in some cases.
    ztype[torch.nn.Module]Útarget_classr   ÚindexNÚ
layer_nameÚ
class_name)r%   r1   r2   r3   r¬  rÔ  r   r®   rÕ  rL   rÖ  r4   r/   r-   rÒ  rÒ  ¶  sf   € € € € € € ðð ð *Ð)Ð)Ñ)Ø€Eˆ8�CŒ=ÐÐÑØ $€J�˜”Ð$Ð$Ñ$Ø $€J�˜”Ð$Ð$Ñ$Ð$Ð$r/   rÒ  c                 ó<   ‡ — t          ‰ ¦  «        ˆ fd„¦   «         }|S )z€
    Decorator to intercept specific layer outputs without using hooks.
    Compatible with torch.compile (Dynamo tracing).
    c                 óæ  •‡ ‡‡— |                      d¦  «        �|d         nt          ‰ j        dd ¦  «        }|�;t          ‰ dd¦  «        r%‰ j        r|rt                               d¦  «         d}||d<   |                     dd ¦  «        }|€t          ‰ j        dd¦  «        }|                     ¦   «         Šd‰v r%‰d                              ¦   «         D ]
\  }}|‰|<   Œt                                t          ‰ j        ¦  «        i ¦  «        }ˆˆ fd„|D ¦   «         }t          t          ¦  «        Šg }	ˆfd	„}
t          |                     ¦   «         ¦  «        �rqg }|                     ¦   «         D ]´\  }}|                      d
|› �d¦  «        sŒt!          |t"          ¦  «        s|g}|D ]z}t!          |t$          ¦  «        sLd|v rdnd}t!          |t          ¦  «        sd n|}t!          |t          ¦  «        s|nd }t%          |||¬¦  «        }|                     ||f¦  «         Œ{Œµ‰                      ¦   «         D ]‘\  }}|D ]‰\  }}|j        �t!          ||j        ¦  «        s!|j        �a|                     |j        ¦  «        rG|j        �
|j        |vrŒS|j        } |
||||j        ¦  «        |_        |	                     ||f¦  «         ŒŠŒ’ ‰‰ g|¢R i |¤Ž}|	D ]\  }}||_        Œ‰D ]ñ}|dk    rl‰|         d d…         ‰|<   t7          |d¦  «        r‰|xx         |j        fz  cc<   n&t7          |d¦  «        r‰|xx         |j        fz  cc<   ‰|         ||<   Œt|dk    rlt!          ||         t"          ¦  «        rEt=          ||         ¦  «        dk    r,‰|         dd d…         ||<   ‰|         dd d…         |d|z   <   ŒÚ‰|         ||<   Œæ‰|         ||<   Œò|du r|                     ¦   «         }|S )NÚ	use_cacheÚgradient_checkpointingFzX`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`.rË  TrÛ   c                 óÈ   •— i | ]^}d |› �‰                      d |› �t          ‰j        d |› �‰                      dt          ‰j        dd¦  «        ¦  «        ¦  «        ¦  «        “Œ_S )Úoutput_r¦  F)Úgetr&   rÊ  )rT   rŸ   Úall_argsr(   s     €€r-   rY   z7check_model_inputs.<locals>.wrapper.<locals>.<dictcomp>ç  s‡   ø€ ð 

ð 

ð 

ð ð �aˆMˆM˜8Ÿ<š<Ø˜!��ÝØ”KØ!˜a�M�MØ—L’LÐ!4µg¸d¼kÐK^Ð`eÑ6fÔ6fÑgÔgñô ñô ð

ð 

ð 

r/   c                 óL   •‡ ‡‡‡— t          ‰¦  «        ˆˆˆˆ ˆfd„¦   «         }|S )Nc                  ó  •— ‰dk    r0t          ‰‰         ¦  «        dk    r‰‰xx         | d         fz  cc<   |                     dd¦  «        rYt          ‰|                     dd¦  «        |                     d¦  «        ¦  «        5   ‰| i |¤Ž}d d d ¦  «         n# 1 swxY w Y   n ‰| i |¤Ž}t          |t          ¦  «        s‰‰xx         |fz  cc<   n0|‰         �(‰‰vr|‰         f‰‰<   n‰‰xx         |‰         fz  cc<   |S )NÚhidden_statesr   Údebug_ioFÚdebug_io_dirz~/model_debugÚprune_layers)ræ   rÝ  r   rg   r³   )rÚ   rÛ   r  Úcollected_outputsrÔ  r  r|  Úorig_forwards      €€€€€r-   Úwrapped_forwardzZcheck_model_inputs.<locals>.wrapper.<locals>.make_capture_wrapper.<locals>.wrapped_forwardö  s™  ø€ à˜/Ò)Ð)­cÐ2CÀCÔ2HÑ.IÔ.IÈQÒ.NÐ.NØ% cÐ*Ð*Ô*¨t°A¬w¨jÑ8Ð*Ð*Ñ*Ø—:’:˜j¨%Ñ0Ô0ð ;Ý8Ø §
¢
¨>¸?Ñ KÔ KÈVÏZÊZÐXfÑMgÔMgñô ð ?ð ?ð ". ¨tÐ!>°vÐ!>Ð!>˜ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?øð
 *˜\¨4Ð:°6Ð:Ð:�FÝ! &­%Ñ0Ô0ð CØ% cÐ*Ð*Ô*¨v¨iÑ7Ð*Ð*Ñ*Ð*Ø˜E”]Ð.ØÐ"3Ð3Ð3Ø28¸´-Ð1AÐ)¨#Ñ.Ð.à)¨#Ð.Ð.Ô.°6¸%´=Ð2BÑBÐ.Ð.Ñ.Ø�s   Â	BÂBÂ"BrÍ  )r|  ræ  r  rÔ  rç  rå  s   ```` €r-   Úmake_capture_wrapperzAcheck_model_inputs.<locals>.wrapper.<locals>.make_capture_wrapperõ  sO   øøøøø€ Ý�<Ñ Ô ðð ð ð ð ð ð ð ñ !Ô ðð& #Ð"r/   rÜ  rá  r   r   )rÓ  rÔ  rÖ  éÿÿÿÿÚvision_hidden_statesÚlast_hidden_stateÚ
attentionsr   Úcross_) rÝ  r&   rÊ  ÚtrainingÚloggerÚwarning_oncerú   Úcopyr±   Ú_CAN_RECORD_REGISTRYrL   rØ   r   r³   Úanyre   rg   r²   rÒ  r_   Únamed_modulesrÓ  rÖ  r¹  rÕ  r=  rÔ  r~   rê  rë  ræ   rþ   )r(   rÚ   rÛ   rÙ  rË  rŸ   r    Úcapture_flagsÚrecordable_keysÚmonkey_patched_layersrè  Úcapture_tasksr  Úlayer_specsÚspecsrÔ  rÖ  rÓ  rä   r|  Úoriginal_forwardÚoutputsrÞ  rå  r•  s   `                     @@€r-   r™  z#check_model_inputs.<locals>.wrapperÏ  s  øøøø€ ð $*§:¢:¨kÑ#:Ô#:Ð#FˆF�;ÔÐÍGÐTXÔT_ÐalÐnrÑLsÔLsð 	ð Ð Ý�tÐ5°uÑ=Ô=ð "À$Ä-ð "ÐT]ð "Ý×#Ò#Ønñô ð ð "�	à"+ˆF�;Ñà—j’j °Ñ5Ô5ˆØÐÝ! $¤+¨}¸dÑCÔCˆKà—;’;‘=”=ˆØ�xÐÐØ  Ô*×0Ò0Ñ2Ô2ð  ð  ‘��1Ø�˜‘�å,×0Ò0µ°T´^Ñ1DÔ1DÀbÑIÔIˆð

ð 

ð 

ð 

ð 

ð #ð

ñ 

ô 

ˆõ (­Ñ.Ô.ÐØ "Ðð	#ð 	#ð 	#ð 	#ð 	#õ. ˆ×%Ò%Ñ'Ô'Ñ(Ô(ñ 	QØˆMØ$1×$7Ò$7Ñ$9Ô$9ð 7ð 7Ñ ��[Ø&×*Ò*¨?°S¨?¨?¸EÑBÔBð ØÝ! +­tÑ4Ô4ð 0Ø#. -�KØ(ð 7ð 7�EÝ% e­^Ñ<Ô<ð nØ%4¸Ð%;Ð%;  À˜Ý1;¸EÅ3Ñ1GÔ1GÐ%R T TÈU˜
Ý4>¸uÅcÑ4JÔ4JÐ'T u uÐPT˜Ý .¸LÐPUÐblÐ mÑ mÔ m˜Ø!×(Ò(¨#¨u¨Ñ6Ô6Ð6Ð6ð7ð !%× 2Ò 2Ñ 4Ô 4ð Qð Q‘��fØ"/ð 
Qð 
Q‘J�C˜àÔ*Ð6½:ÀfÈeÔN`Ñ;aÔ;aÐ6ØÔ(Ð4¸¿ºÀuÔGWÑ9XÔ9XÐ4à Ô+Ð7¸EÔ<LÐTXÐ<XÐ<XØ$à+1¬>Ð(Ø)=Ð)=¸fÐFVÐX[Ð]bÔ]hÑ)iÔ)i˜œØ-×4Ò4°fÐ>NÐ5OÑPÔPÐPøð
Qð �$�tÐ-˜dÐ-Ð-Ð- fÐ-Ð-ˆà(=ð 	.ð 	.Ñ$ˆFÐ$Ø-ˆFŒNˆNð %ð 	6ð 	6ˆCØ�oÒ%Ð%Ø):¸3Ô)?ÀÀÀÔ)DÐ! #Ñ&Ý˜7Ð$:Ñ;Ô;ð KØ% cÐ*Ð*Ô*¨wÔ/KÐ.MÑMÐ*Ð*Ñ*Ð*Ý˜WÐ&9Ñ:Ô:ð KØ% cÐ*Ð*Ô*¨wÔ/HÐ.JÑJÐ*Ð*Ñ*à0°Ô5�˜‘�Ø˜Ò$Ð$Ý˜m¨CÔ0µ$Ñ7Ô7ð :½CÀÈcÔ@RÑ<SÔ<SÐWXÒ<XÐ<XØ#4°SÔ#9¸!¸$¸Q¸$Ô#?�G˜C‘LØ.?ÀÔ.DÀQÀTÈÀTÔ.J�G˜H s™NÑ+Ð+à#4°SÔ#9�G˜C‘L�Là0°Ô5�˜‘�Ø˜%ÐÐØ×&Ò&Ñ(Ô(ˆGØˆr/   rÍ  rÎ  s   ` r-   Úcheck_model_inputsrý  É  s;   ø€ õ ˆ4�[„[ðqð qð qð qñ „[ðqðf €Nr/   c                   ór   — e Zd ZdZi Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
eded	efd
„¦   «         Zdee         fd„ZdS )ÚGeneralInterfacezé
    Dict-like object keeping track of a class-wide mapping, as well as a local one. Allows to have library-wide
    modifications though the class mapping, as well as local modifications in a single file with the local mapping.
    c                 ó   — i | _         d S r0   ©Ú_local_mappingr  s    r-   r×   zGeneralInterface.__init__P  s   € Ø ˆÔÐÐr/   c                 óH   — || j         v r| j         |         S | j        |         S r0   )r  Ú_global_mapping©r(   r  s     r-   r   zGeneralInterface.__getitem__S  s,   € à�$Ô%Ð%Ð%ØÔ& sÔ+Ð+ØÔ# CÔ(Ð(r/   c                 ó>   — | j                              ||i¦  «         d S r0   )r  rü   )r(   r  r  s      r-   r  zGeneralInterface.__setitem__Y  s#   € àÔ×"Ò" C¨ <Ñ0Ô0Ð0Ð0Ð0r/   c                 ó   — | j         |= d S r0   r  r  s     r-   rö   zGeneralInterface.__delitem__]  s   € ØÔ Ð$Ð$Ð$r/   c                 ó<   — t          i | j        ¥| j        ¥¦  «        S r0   )rè   r  r  r  s    r-   Ú__iter__zGeneralInterface.__iter__`  s!   € åÐC�tÔ+ÐC¨tÔ/BÐCÑDÔDÐDr/   c                 ó‚   — t          | j                             ¦   «         | j                             ¦   «         z  ¦  «        S r0   )ræ   r  r  r  r  s    r-   Ú__len__zGeneralInterface.__len__d  s3   € Ý�4Ô'×,Ò,Ñ.Ô.°Ô1D×1IÒ1IÑ1KÔ1KÑKÑLÔLÐLr/   r  r  c                 ó>   — | j                              ||i¦  «         d S r0   )r  rü   )rÓ   r  r  s      r-   ÚregisterzGeneralInterface.registerg  s#   € àÔ×"Ò" C¨ <Ñ0Ô0Ð0Ð0Ð0r/   rÈ   c                 óD   — t          |                      ¦   «         ¦  «        S r0   )r²   r  r  s    r-   Ú
valid_keyszGeneralInterface.valid_keysk  s   € Ý�D—I’I‘K”KÑ Ô Ð r/   N)r%   r1   r2   r3   r  r×   r   r  rö   r	  r  r  rL   r   r  r²   r  r4   r/   r-   rÿ  rÿ  F  sÒ   € € € € € ðð ð €Oð!ð !ð !ð)ð )ð )ð1ð 1ð 1ð%ð %ð %ðEð Eð EðMð Mð Mð ð1˜3ð 1 xð 1ð 1ð 1ñ „[ð1ð!˜D œIð !ð !ð !ð !ð !ð !r/   rÿ  r0   rU  )F)pr3   r:  r»  rµ  rX  rŽ  Úcollectionsr   r   r   Úcollections.abcr   r   Ú
contextlibr   r	   r
   Údataclassesr   r   r   Úenumr   Ú	functoolsr   r   Útypingr   r   r   r   r�   rJ   Úutilsr   Úimport_utilsr   r   r   r   r   r   rò  Ú
get_loggerr%   rï  rr   Úmodel_debugging_utilsr   Úpropertyr    rE   rQ   rb   rj   rn   r]   ru   rZ   rz   r|   r€   r‚   r†   r[   rŠ   rŒ   r‘   r\   r˜   r^   r�   rÄ   rÇ   rÐ   Ú_pytreeÚ_torch_pytreer³   r²   rÑ   rÒ   rÊ   r1   rL   r  r  r&  r-  rB  rL  rS  r­  r\  r`  rd  rk  rn  rs  r9  r‚  r…  r¡  r£  r°   r²  rÀ  rÃ  rÇ  rÏ  rÒ  rý  rÿ  r4   r/   r-   ú<module>r     s©  ððð ð €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à Ð Ð Ð à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð ð 
ˆÔ	˜HÑ	%Ô	%€àÐÑÔð Hà€L€L€LàGÐGÐGÐGÐGÐGðð ð ð ð �hñ ô ð ð05ð 5ð 5ðð ð ð$9ð 9ð 9ð*ð ð ð0%ð %ð %ðð ð ð'ð 'ð 'ð?ð ?ð ?ð'ð 'ð 'ðFð Fð Fð&ð &ð &ðEð Eð Eð$ð $ð $ðAð Að Að$ð $ð $ðIð Ið Ið&ð &ð &ð<ð <ð <ð#ð #ð #ð;ð ;ð ;ð"ð "ð "ðJð ð ð4K3ð K3ð K3ð K3ð K3�+ñ K3ô K3ð K3ð\ ÐÑÔð Ø/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð: kð :°e¸DÀ¼IÐG^Ð<^Ô6_ð :ð :ð :ð :ð ð9ð 9Ø˜”ð9à(ð9ð 
ð	9ð 9ð 9ð 9ð '€MÔ&ØØØˆÐ'°[ÐAÑAÔAØ +Ô 6ÐOÐO¸Ô9MÐOÐOð	ñ ô ð ð	
ð 	
ð 	
ð 	
ð 	
�3˜ñ 	
ô 	
ð 	
ðð ð ð ð �lñ ô ð ð
ð 
ð 
ð 
ð 
�ñ 
ô 
ð 
ð-ð -ð -ð -ð -ñ -ô -ð -ð$ð ð ð,Að Að Að,9ð 9�Nð 9°ð 9ÀSð 9ð 9ð 9ð 9ð ðð °4ð ð ð ñ „ððNð Nð Nð Nð*Lð Lð Lð*Lð Lð Lð Lð*Pð Pð Pð*Pð Pð Pð$Lð Lð Lð"	cð 	cð 	cð	eð 	eð 	eðLð L¨8°D¬>ð Lð Lð Lð Lð^ ð  ð  ð  ð  ˜¨%ð  ñ  ô  ð  ðD+ T¨#¨s¨(¤^ð +¸ð +ð +ð +ð +ð
°Cð ¸Dð ð ð ð ð89Ð&7ð 9¸cð 9È#ð 9ð 9ð 9ð 9ð	3Ð'8ð 	3¸sð 	3ð 	3ð 	3ð 	3ðð ð ð2 Ø	€�:ÐÑÔð%ð %ð %ð %ð %ñ %ô %ñ Ôñ „ð%ð"zð zð zðz&!ð &!ð &!ð &!ð &!�~ñ &!ô &!ð &!ð &!ð &!r/   