ó
    EñiFZ  ã                   óÌ  • S SK r S SKrS SKJrJr  S SKJrJrJrJ	r	  S SK
JrJr  S SKJr  / SQrS\R                   S\\R                   /\R                   S-  4   4S jrS\R                   S	\\R                   \\\4   4   S
\S\\R                   /\R                   S-  4   4S jrS\R                   S\\\R                         S\\R                      S\\\4   S	\\R                   \\\4   4   4
S jrS\4S jr " S S\5      rS\R                   S\S\S\\\R                         S\4
S jr " S S\5      r " S S\5      rS\R                   S\S\S\S\4
S jrS\R                   S\S\S\\\R                         S\4
S jr S\R                   S\	\   S\4S  jr!S\R                   S\S\S\4S! jr"\" S"5      SS4S\R                   S\S\S#\S$\\\R                         S-  S%\\\R                         S-  S\4S& jjr#\RH                  \RJ                  1\#l&        \RN                  1\#l(        \ RR                  S'\S(\S\S)   4S* j5       r*S\R                   S+\S\R                   4S, jr+S\R                   S'\S\R                   4S- jr, S5S\R                   S.\S'\S\\R                      S/\\RZ                     S0\S1\S\.\R                   \4   4S2 jjr/ " S3 S45      r0g)6é    N)ÚABCÚabstractmethod)ÚCallableÚ	GeneratorÚIterableÚSequence)ÚAnyÚcast)Úalways_wrap_policyÚlambda_auto_wrap_policyÚtransformer_auto_wrap_policyÚsize_based_auto_wrap_policyÚenable_wrapÚwrapÚCustomPolicyÚModuleWrapPolicyÚroot_moduleÚfnc                 óŠ   ^^^• U 1mS[         R                  S[        S[         R                  S-  4UUU4S jjmT" U SS5        g)a9  
This applies ``fn`` to every module in the module tree of ``root_module``
following a post-order traversal. If ``fn`` returns an :class:`nn.Module`,
then this replaces the original module with the newly returned one in the
tree. Otherwise, ``fn`` should return ``None``, in which case the module is
not changed.
ÚmoduleÚmodule_nameÚparent_moduleNc                 ó�  >• U R                  5        H'  u  p4UT;  d  M  TR                  U5        T" XCU 5        M)     T" U 5      nUb  [        U[        R                  5      (       d  [        SU SU  35      eU(       d  [        SU  35      e[        U[        R                  5      (       d  [        SU 35      e[        X!U5        g g )Nz=Non-root modules should have their parent module set but got z for zTNon-root modules should have their module name set but got an empty module name for z.fn should return None or an nn.Module but got )Únamed_childrenÚaddÚ
isinstanceÚnnÚModuleÚAssertionErrorÚsetattr)	r   r   r   Úchild_module_nameÚchild_moduleÚoptional_moduleÚ_post_order_apply_innerr   Úvisited_moduless	         €€€ÚX/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/distributed/fsdp/wrap.pyr$   Ú2_post_order_apply.<locals>._post_order_apply_inner-   sÜ   ø€ ð
 06×/DÑ/DÖ/FÑ+ÐØ ?Õ2Ø×#Ñ# LÔ1Ù'¨ÈÖPñ 0Gñ ˜V›*ˆØÑ&Ü˜m¬R¯Y©Y×7Ñ7Ü$ØSØ$�o U¨6¨(ð4óð ö Ü$ð0Ø06¨xð9óð ô ˜o¬r¯y©y×9Ñ9Ü$ØDÀ_ÐDUÐVóð ô �M°Õ@ð 'ó    Ú )r   r   Ústr)r   r   r$   r%   s    `@@r&   Ú_post_order_applyr+      sP   ú€ ð (3 m€OðAÜ—	‘	ðAäðAô —y‘y 4Ñ'÷Añ Añ6 ˜K¨¨TÕ2r(   Útarget_module_to_kwargsÚfsdp_fnÚreturnc                 óf   ^ ^^• S[         R                  S[         R                  S-  4UU U4S jjnU$ )z¦
This constructs the "wrap" function to pass to :func:`_post_order_apply`
based on ``target_module_to_kwargs``, which should be constructed from the
wrapping policy.
r   r.   Nc                 ó8   >• U T;   a  U TLa  TU    nT" U 40 UD6$ g ©N© )r   Úkwargsr-   r   r,   s     €€€r&   r   Ú_construct_wrap_fn.<locals>.fnV   s2   ø€ ð Ð,Ó,°¸{Ò1JØ,¨VÑ4ˆFÙ˜6Ñ, VÑ,Ð,Ør(   )r   r   )r   r,   r-   r   s   ``` r&   Ú_construct_wrap_fnr5   K   s/   ú€ ð”2—9‘9ð ¤§¡¨TÑ!1÷ ñ ð €Ir(   Úmodule_classesÚignored_modulesÚroot_kwargsc                 ó®   • [        [        U5      5      nU R                  5        H,  nXb;   a  M
  [        Xe5      (       d  M  Xd;  a  X4U'   S XF   S'   M.     U$ )NÚmixed_precision)ÚtupleÚsetÚmodulesr   )r   r6   r7   r8   r,   Úmodule_classes_tupler   s          r&   Ú$_run_mixed_precision_override_policyr?   a   s`   € ô !¤ ^Ó!4Ó5ÐØ×%Ñ%Ö'ˆØÓ$ÙÜ˜×5Ó5àÓ4à2=¨Ñ/ØAEÐ#Ñ+Ð,=Ó>ñ (ð #Ð"r(   c                  ó   • g)zš
A simple recursive wrap policy that always returns ``True``. This means
that every submodule is wrapped by the wrapper class in
:func:`_recursive_wrap`.
Tr2   )Úargsr3   s     r&   r   r   u   s   € ð r(   c                   óœ   • \ rS rSrSr\S\R                  S\\R                     S\	\
\4   S\	\R                  \	\
\4   4   4S j5       rSrg	)
Ú_Policyé~   z_
This defines an abstract base class that represents a policy for applying
a module-level API.
r   r7   r8   r.   c                 ó   • g)zp
This should return a dict ``target_module_to_kwargs`` that maps from
each target module to wrap to its kwargs.
Nr2   )Úselfr   r7   r8   s       r&   Ú_run_policyÚ_Policy._run_policy„   s   € ð 	r(   r2   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r<   Údictr*   r	   rG   Ú__static_attributes__r2   r(   r&   rC   rC   ~   sk   † ñð
 ð
à—Y‘Yð
ð ˜RŸY™Y™ð
ð ˜#˜s˜(‘^ð	
ð
 
ˆb�i‰i˜˜c 3˜h™Ð'Ñ	(ó
ó ó
r(   rC   r   ÚrecurseÚnonwrapped_numelc                 ó<   • U(       a  g[        U [        U5      5      $ )a¸  
This auto wrap policy wraps every module that is an instance of any type in
``module_classes`` as its own FSDP instance. The root module given by
``module`` is always wrapped as an FSDP instance regardless. Since the
wrapping proceeds bottom up, each FSDP instance manages the parameters in
its subtree excluding any already managed by a child FSDP instance.

Args:
    module (nn.Module): Current module being considered.
    recurse (bool): If ``False``, then this function must decide whether
        ``module`` should be wrapped as an FSDP instance or not. If
        ``True``, then the function is still recursing down the module
        tree as a part of the DFS.
    nonwrapped_numel (int): Parameter numel not yet wrapped.
    module_classes (Set[Type[nn.Module]]): Set of module classes that are
        wrapped as FSDP instances.

Returns:
    ``True`` if ``recurse=True``, and whether ``module`` should be wrapped
    if ``recurse=False``.
T©r   r;   )r   rP   rQ   r6   s       r&   Ú_module_wrap_policyrT   ’   s   € ö6 ØÜ�fœe NÓ3Ó4Ð4r(   c                   óâ   ^ • \ rS rSrSrS\\\R                        4S jr	S\R                  S\
\R                     S\\\4   S\\R                  \\\4   4   4S	 jrS
 rS\4U 4S jjrSrU =r$ )r   é²   zo
This policy applies to every module of the specified module classes,
passing in the kwargs given to the root.
r6   c                 óF   • [        U5      nX l        [        U5      U l        g r1   )r<   Ú_module_classesr*   Ú_module_classes_str)rF   r6   Úmodule_classes_sets      r&   Ú__init__ÚModuleWrapPolicy.__init__¸   s!   € Ü  Ó0ÐØ1ÔÜ#&Ð'9Ó#:ˆÕ r(   r   r7   r8   r.   c                 óÄ   • [        U R                  5      n0 nUR                  5        H4  nXb;   a  M
  [        Xd5      (       d  M  [        R                  " U5      XV'   M6     U$ r1   )r;   rX   r=   r   Úcopy)rF   r   r7   r8   r6   r,   r   s          r&   rG   ÚModuleWrapPolicy._run_policy½   s[   € ô ˜t×3Ñ3Ó4ˆØCEÐØ!×)Ñ)Ö+ˆFØÓ(ÙÜ˜F×3Ó3ä26·)²)¸KÓ2HÐ'Ó/ñ ,ð 'Ð&r(   c                 ó,   • [        XSU R                  S9$ )Néÿÿÿÿ)rQ   r6   )rT   rX   )rF   r   rP   rA   r3   s        r&   Ú__call__ÚModuleWrapPolicy.__call__Í   s   € ä"Ø¨bÀ×AUÑAUñ
ð 	
r(   c                 óB   >• [         TU ]  5       SU R                   S3-   $ )NÚ(Ú))ÚsuperÚ__repr__rY   )rF   Ú	__class__s    €r&   rh   ÚModuleWrapPolicy.__repr__Ó   s&   ø€ Ü‰wÑÓ! a¨×(@Ñ(@Ð'AÀÐ$CÑCÐCr(   )rX   rY   )rI   rJ   rK   rL   rM   r   Útyper   r   r[   r<   rN   r*   r	   rG   rb   rh   rO   Ú__classcell__)ri   s   @r&   r   r   ²   s�   ø† ñð
; x°°R·Y±Y±Ñ'@ô ;ð
'à—Y‘Yð'ð ˜RŸY™Y™ð'ð ˜#˜s˜(‘^ð	'ð
 
ˆb�i‰i˜˜c 3˜h™Ð'Ñ	(ô'ò 
ðD˜#÷ Dõ Dr(   r   c                   óÐ   • \ rS rSrSrS\\R                  /\\	\
\4   -  4   4S jrS\R                  S\\R                     S\	\
\4   S\	\R                  \	\
\4   4   4S	 jrS
rg)r   é×   a­  
This policy takes in a lambda function that maps a given ``nn.Module`` to
either ``False``, ``True``, or a kwarg dictionary.
- If the function returns ``False`` or an empty dictionary, then the module
  does not have the API applied.
- If the function returns ``True``, then the module has the API applied
  with the root's kwargs.
- If the function returns a non-empty dictionary, then the module has the
  API applied, and the dictionary overrides the root's kwargs.

Example::

    >>> # xdoctest: +SKIP("undefined variables")
    >>> model = init_transformer_model(...)
    >>> def lambda_fn(module: nn.Module):
    >>>     if module is model.lm_head:
    >>>         return {"sharding_strategy": ShardingStrategy.SHARD_GRAD_OP}
    >>>     elif isinstance(module, TransformerBlock):
    >>>         return True
    >>>     return False
    >>> policy = CustomPolicy(lambda_fn)
    >>> fsdp_model = FSDP(model, auto_wrap_policy=policy)
Ú	lambda_fnc                 ó   • Xl         g r1   ©Ú
_lambda_fn)rF   ro   s     r&   r[   ÚCustomPolicy.__init__ð   s   € Ø#�r(   r   r7   r8   r.   c                 óL  • 0 nUR                  5        H�  nXR;   a  M
  U R                  U5      n[        U[        [        45      (       d  [        SU 35      eU(       d  MM  [        R                  " U5      n[        U[        5      (       a  UR                  U5        XtU'   M�     U$ )Nz_The lambda_fn passed to CustomPolicy should return False/True or a kwarg dict, but it returned )r=   rr   r   rN   ÚboolÚ
ValueErrorr^   Úupdate)rF   r   r7   r8   r,   r   Úresr3   s           r&   rG   ÚCustomPolicy._run_policyó   s¦   € ð DFÐØ!×)Ñ)Ö+ˆFØÓ(ÙØ—/‘/ &Ó)ˆCÜ˜c¤D¬$ <×0Ñ0Ü ðCØCFÀ%ðIóð ö ÙÜ—Y’Y˜{Ó+ˆFÜ˜#œt×$Ñ$ð —‘˜cÔ"Ø.4 FÓ+ñ! ,ð" 'Ð&r(   rq   N)rI   rJ   rK   rL   rM   r   r   r   ru   rN   r*   r	   r[   r<   rG   rO   r2   r(   r&   r   r   ×   s…   † ñð0$ (¨B¯I©I¨;¸¸tÀCÈÀH¹~Ñ8MÐ+MÑ"Nô $ð'à—Y‘Yð'ð ˜RŸY™Y™ð'ð ˜#˜s˜(‘^ð	'ð
 
ˆb�i‰i˜˜c 3˜h™Ð'Ñ	(÷'r(   r   ro   c                 ó"   • U(       a  gU" U 5      $ )a  
A convenient auto wrap policy to wrap submodules based on an arbitrary user
function. If `lambda_fn(submodule) == True``, the submodule will be wrapped as
a `wrapper_cls` unit.

Return if a module should be wrapped during auto wrapping.

The first three parameters are required by :func:`_recursive_wrap`.

Args:
    module (nn.Module): Current module being considered.
    recurse (bool): If ``False``, then this function must decide whether
        ``module`` should be wrapped as an FSDP instance or not. If
        ``True``, then the function is still recursing down the module
        tree as a part of the DFS.
    nonwrapped_numel (int): Parameter numel not yet wrapped.

    lambda_fn (Callable[[nn.Module], bool]): If this returns ``True``, then
        this module will be wrapped.
Tr2   )r   rP   rQ   ro   s       r&   r   r     s   € ö. ØÙ�VÓÐr(   Útransformer_layer_clsc                 ó   • [        XX#5      $ )a  
See :func:`_module_wrap_policy`, where ``transformer_layer_cls`` is the
same as ``module_classes``. Note that shared parameters must be wrapped in
the same FSDP instance, so this auto wrap policy can help wrap shared
embeddings into the same FSDP instance for transformer models.
)rT   )r   rP   rQ   r{   s       r&   r   r   *  s   € ô ˜vÐ0@ÓXÐXr(   c                 ó<   • U(       a  g[        U [        U5      5      $ )NTrS   )r   r6   rP   rA   r3   s        r&   Ú_wrap_module_cls_individuallyr~   9  s   € ö àô ˜&¤%¨Ó"7Ó8Ð8r(   c                 ó6   ^ ^^• [        U UU4S jU 5       5      $ )zj
A policy that wraps ``module`` if any policy in the passed in iterable of
``policies`` returns ``True``.
c              3   ó4   >#   • U  H  nU" TTTS 9v •  M     g7f)©r   rP   rQ   Nr2   )Ú.0Úpolicyr   rQ   rP   s     €€€r&   Ú	<genexpr>Ú_or_policy.<locals>.<genexpr>O  s"   øé € ð âˆFñ 	�f gÐ@PÖQÚùs   ƒ)Úany)r   rP   rQ   Úpoliciess   ``` r&   Ú
_or_policyrˆ   E  s   ú€ ô ö áóó ð r(   g    „×—AÚmin_num_paramsÚforce_leaf_modulesÚexclude_wrap_modulesc                 óü   • Uc  [         R                  OUnUc  [         R                  OUnUnX&:¬  nU(       a#  U=(       a    [        U [	        U5      5      (       + $ U=(       a    [        U [	        U5      5      (       + $ )a{  
A size-based auto wrap policy.

Args:
    module (nn.Module): Current module being considered.
    recurse (bool): If ``False``, then this function must decide whether
        ``module`` should be wrapped as an FSDP instance or not. If
        ``True``, then the function is still recursing down the module
        tree as a part of the DFS.
    nonwrapped_numel (int): Parameter numel not yet wrapped.

    min_num_params (int): Customizable policy input that controls the size
        threshold over which a module is ready to be wrapped. This is in
        units of numel.
    force_leaf_modules (Optional[set[type[nn.Module]]]): Set of module types to keep
        as leaves, i.e. their children will never be wrapped.
    exclude_wrap_modules (Optional[set[type[nn.Module]]]): Set of module types to be
        excluded in wrapping.

Returns:
    Whether ``module`` should be wrapped.
)r   ÚFORCE_LEAF_MODULESÚEXCLUDE_WRAP_MODULESr   r;   )r   rP   rQ   r‰   rŠ   r‹   Úmin_nonwrapped_numelÚis_larges           r&   r   r   U  s„   € ðB Ñ%ô 	$×6Ò6àð ð  Ñ'ô 	$×8Ò8à!ð ð *ÐØÑ7€HÞà×M¤
¨6´5Ð9KÓ3LÓ MÔMÐMð ×O¤
¨6´5Ð9MÓ3NÓ OÔOÐOr(   Úwrapper_clsÚwrapper_kwargs)NNNc              +   ój   #   • SU 0UEn[        S0 UD6   Sv •  SSS5        g! , (       d  f       g= f7f)a…  
Context manager to wrap modules using a wrapper.

Useful for when you'd like to apply the same configuration arguments to all
child modules that you wrap. A particularly important use case is wrapping
large layers so that they get sharded (in-place) during initialization, to
avoid running out of system memory. Large layers can indicate that they
should be sharded via the ``wrap`` annotation and this context manager can
provide the exact configuration for these nested instances.

Usage::

    with enable_wrap(wrapper_cls, **params):
        # Wraps layer in FSDP by default if within context
        self.l1 = wrap(torch.nn.Linear(5, 5))

Args:
    wrapper_cls:
        Class that `wrap` annotation will `wrap` modules with, such as
        `FullyShardedDataParallel`.
    **wrapper_kwargs:
        Configuration settings that will be passed to all ``wrap``
        instances inside the context
r‘   Nr2   )Ú_ConfigAutoWrap)r‘   r’   r3   s      r&   r   r   �  s6   é € ð: 	�{ðà
ð€Fô 
Ñ	"˜6Ó	"Û÷ 
#×	"Ö	"üs   ‚3”"™	3¢
0¬3Úwrap_overridesc                 óÆ   • [         R                  (       aK  [         R                  c  [        S5      e0 [         R                  EUEn[        U [         R                  40 UD6$ U $ )aÓ  
Annotate that a module should be wrapped. Annotated modules will only be
wrapped if inside of an :func:`enable_wrap` context manager. This allows
a module to be initialized both with and without a wrapper without code
change.

The class that this function wraps the passed in ``nn.Module`` with is the
passed in ``wrapper_cls`` argument into ``enable_wrap``. Both
``enable_wrap`` and ``wrap`` can take in kwargs specifying how to construct
the ``wrapper_cls`` instance. In the case of duplicate kwargs in
``enable_wrap`` and ``wrap``, the argument passed into ``wrap`` will be
respected.

Usage::

    with enable_wrap(wrapper_cls=FSDP, **fsdp_config):
        # Wraps layer in FSDP by default if within context
        self.l1 = wrap(torch.nn.Linear(5, 5))

Args:
    module (nn.Module): module to wrap (if in :func:`enable_wrap` context)
    **wrap_overrides: configuration overrides that will take priority over
        the values provided by the :func:`enable_wrap` context
z.Expected _ConfigAutoWrap.wrapper_cls to be set)r”   Úin_autowrap_contextr‘   r   r3   Ú_wrap)r   r•   s     r&   r   r   ´  sd   € ô2 ×*×*Ü×&Ñ&Ñ.Ü Ð!QÓRÐRàEœO×2Ñ2ÐE°nÐEˆÜØÜ×'Ñ'ñ
ð ñ
ð 	
ð
 €Mr(   c                 ó„   • Uc  [        S5      e[        U S5      (       a  0 UEU R                  EnU" U 40 UD6$ U" U 40 UD6$ )NzExpected wrapper_cls to be setÚ_wrap_overrides)r   Úhasattrrš   )r   r‘   r3   Ú	overridess       r&   r˜   r˜   Ú  sY   € ØÑÜÐ=Ó>Ð>ÜˆvÐ(×)Ñ)ð
 9�vÐ8 ×!7Ñ!7Ð8ˆ	Ù˜6Ñ/ YÑ/Ð/á�vÑ( Ñ(Ð(r(   Úauto_wrap_policyÚignored_paramsÚonly_wrap_childrenr3   c           
      ó`  ^• Uc  [        S5      eUc  [        S5      eU R                  5        H=  u  pxXƒ;   a  M   [        U[        [        U5      5      (       a  [        SU SU 35      eM?     [        U4S jU R                  5        5       5      n	Uc  [        S5      eU" U SU	S9(       an  S	n
U R                  5        H/  u  p¸Xƒ;   a  M  [        SUUUUTS
.UD6u  pÍ[        XU5        X­-  n
M1     Xš-
  nU(       d  U" U SUS9(       a  [        X40 UD6U	4$ X
4$ U S	4$ ! [
         a     Mþ  f = f)až  
Wraps submodules of ``module`` for which ``auto_wrap_policy`` returns
``True`` with ``wrapper_cls``.

Args:
    module (nn.Module): Module to recursively wrap.
    auto_wrap_policy (Callable): A callable representing a policy that
        determines which modules to recursively wrap with ``wrapper_cls``.
    ignored_modules (set[torch.nn.Module]): Modules to ignore when
        wrapping.
    ignored_params (set[torch.nn.Parameter]): Parameters to ignore when
        wrapping; these should be the parameters contained in the modules
        in ``ignored_modules``.
Returns:
    (nn.Module, int):
        ``module`` after wrapping and the numel recursively wrapped.
zMust specify auto_wrap_policy.zMust specify wrapper_clszChild module z is already wrapped by c              3   óR   >#   • U  H  oT;  d  M
  UR                  5       v •  M     g 7fr1   )Únumel)r‚   Úprž   s     €r&   r„   Ú"_recursive_wrap.<locals>.<genexpr>  s$   øé € ð Ú.�a¸>Ñ2I‹	ˆ�‰�	ˆ	Ò.ùs   ƒ	'�'z#Expected auto_wrap_policy to be setTr�   r   )r   r�   r‘   r7   rž   Fr2   )r   Únamed_modulesr   r
   rk   Ú	TypeErrorÚsumÚ
parametersr   Ú_recursive_wrapr    r˜   )r   r�   r‘   r7   rž   rŸ   r3   Ú_ÚchildrQ   Útotal_wrapped_numelÚnameÚwrapped_childÚnum_wrapped_paramsÚ	remainders       `          r&   r©   r©   è  s‡  ø€ ð4 ÑÜÐ=Ó>Ð>ØÑÜÐ7Ó8Ð8à×(Ñ(Ö*‰ˆØÓ#Ùð	Ü˜%¤¤d¨KÓ!8×9Ñ9Ü$Ø# E 7Ð*AÀ+ÀÐOóð ñ :ñ	 +ô ô Ø!×,Ñ,Ô.óó Ðð ÑÜÐBÓCÐCÙ˜v¨tÐFV×WØÐà!×0Ñ0Ö2‰KˆDØÓ'ÙÜ0?ð 1ØØ!1Ø'Ø /Ø-ñ1ð ñ1Ñ-ˆMô �F -Ô0àÑ5Òñ 3ð  %Ñ:ˆ	Þ!Ñ&6Ø 5¸9÷'
ô ˜Ñ7°Ñ7Ð9IÐIÐIàÐ.Ð.Ø�1ˆ9ÐøôM ó 	âð	ús   »0DÄ
D-Ä,D-c                   óÀ   • \ rS rSr% SrSr\\S'   Sr\	S-  \S'   0 r
\\\4   \S'   S\\\4   4S jr\S\S	S4S
 j5       r\SS j5       rSS jrS\S\S\S	S4S jrSrg)r”   i8  z€
Helper class to wrap modules based on default config args via a context manager.
See :func:`enable_wrap` for more information.
Fr—   Nr‘   r3   c                 ó   • Xl         g r1   ©r3   )rF   r3   s     r&   r[   Ú_ConfigAutoWrap.__init__B  s   € Ø�r(   r.   c                 óÐ   • [         R                  (       a  [        S5      eS[         l        SU ;  a  [        S5      e[	        [
        U S   5      [         l        U S	 U [         l        g )Nz]You are already within an autowrap context and we currently do not supported nested autowrap.Tr‘   z9Expected to pass in wrapper_cls arg into _ConfigAutoWrap.)r”   r—   ÚNotImplementedErrorr   r
   r   r‘   r3   r³   s    r&   Úenable_autowrap_contextÚ'_ConfigAutoWrap.enable_autowrap_contextE  sc   € ä×.×.Ü%Øoóð ð /3ŒÔ+à Ó&Ü ØKóð ô '+¬8°V¸MÑ5JÓ&KŒÔ#Ø�=Ð!à!'ŒÕr(   c                  óF   • S[         l        S [         l        0 [         l        g )NF)r”   r—   r‘   r3   r2   r(   r&   Údisable_autowrap_contextÚ(_ConfigAutoWrap.disable_autowrap_contextV  s   € à.3ŒÔ+Ø&*ŒÔ#Ø!#ŒÕr(   c                 ó:   • U R                  U R                  5        g r1   )r·   r3   )rF   s    r&   Ú	__enter__Ú_ConfigAutoWrap.__enter__\  s   € Ø×$Ñ$ T§[¡[Õ1r(   Úexc_typeÚexc_valÚexc_tbc                 ó$   • U R                  5         g r1   )rº   )rF   r¿   rÀ   rÁ   s       r&   Ú__exit__Ú_ConfigAutoWrap.__exit___  s   € Ø×%Ñ%Õ'r(   r³   )r.   N)rI   rJ   rK   rL   rM   r—   ru   Ú__annotations__r‘   r   r3   rN   r*   r	   r[   Ústaticmethodr·   rº   r½   rÃ   rO   r2   r(   r&   r”   r”   8  s¤   ‡ ñð
 !&Ð˜Ó%Ø#'€K�˜D‘Ó'Ø€FˆD��c�‰NÓð  c¨3 h¡ô ð ð(¨ð (°ó (ó ð(ð  ó$ó ð$ô
2ð( ð (¨sð (¸Cð (ÀD÷ (r(   r”   )F)1Ú
contextlibr^   Úabcr   r   Úcollections.abcr   r   r   r   Útypingr	   r
   Útorch.nnr   Ú__all__r   r+   rN   r*   r5   rk   r<   r?   ru   r   rC   ÚintrT   r   r   r   r   r~   rˆ   r   Ú
ModuleListÚ
ModuleDictrŽ   ÚMultiheadAttentionr�   Úcontextmanagerr   r   r˜   Ú	Parameterr;   r©   r”   r2   r(   r&   Ú<module>rÓ      s  ðó Û ß #ß CÓ Cß å ò	€ð)3Ø—‘ð)3à�"—)‘)�˜bŸi™i¨$Ñ.Ð.Ñ/ô)3ðXØ—‘ðà! "§)¡)¨T°#°s°(©^Ð";Ñ<ðð ðð ˆr�y‰yˆk˜2Ÿ9™9 tÑ+Ð+Ñ,ô	ð,#Ø—‘ð#à˜T "§)¡)™_Ñ-ð#ð ˜Ÿ™‘^ð#ð �c˜3�h‘ð	#ð
 " "§)¡)¨T°#°s°(©^Ð";Ñ<ô#ð(¨4ô ôˆcô ð(5Ø�I‰Ið5àð5ð ð5ð ˜˜RŸY™Y™Ñ(ð	5ð
 
ô5ô@"D�wô "DôJ4'�7ô 4'ðnØ�I‰IðØ $ðØ8;ðØHPðà	ôð8YØ�I‰IðYàðYð ðYð ˜t B§I¡I™Ñ/ð	Yð
 
ôYð	9Ø�I‰Ið	9Ø'/°¡~ð	9Ø@Dô	9ðØ�I‰Iðàðð ðð
 
ôñ* ˜c›(Ø6:Ø8<ñ3PØ�I‰Ið3Pàð3Pð ð3Pð
 ð3Pð ˜D §¡™OÑ,¨tÑ3ð3Pð ˜d 2§9¡9™oÑ.°Ñ5ð3Pð 
õ3Pðn 57·M±MÀ2Ç=Á=Ð3QÐ Ô 0Ø24×2GÑ2GÐ1HÐ Ô .ð ×Ñð Øð Ø+.ð àÐÑ ó ó ð ðF#�—‘ð #¨cð #°b·i±iô #ðL)�"—)‘)ð )¨(ð )ÀÇÁô )ð(  %ñMØ�I‰IðMàðMð ðMð ˜Ÿ™‘^ð	Mð
 ˜Ÿ™Ñ%ðMð ðMð ðMð ˆ2�9‰9�cˆ>ÑõM÷`((ò ((r(   