
    Vhr                        U d dl Z d dlmZmZ d dlmZ  G d d      Z e j                         ae j                  ej                  e j                  e   f   ed<   dej                  deddfd	Zdej                  dee   fd
Zy)    N)castOptionalc                       e Zd Zy)_StateN)__name__
__module____qualname__     S/home/dcms/DCMS/lib/python3.12/site-packages/torch/distributed/_composable_state.pyr   r      s    r   r   _module_state_mappingmodulestatereturnc                 b    | t         vsJ d|  d       t        j                  |      t         | <   y )Nz
Inserting z more than once.)r   weakrefref)r   r   s     r   _insert_module_stater      s4    ..U*VHDT0UU.$+KK$6&!r   c                     t        | t              rt        t        |       S | t        v rt        |    } |       }|t	        d      |S y)at  
    Return the ``_State`` in ``model``.

    Given a ``module``, this API finds out if the module is also a ``_State``
    instance or if the module is managed by a composable API. If the module
    is also a ``_State``, ``module`` will be casted to ``_State` and returned.
    If it is managed by a composable API, the corresponding ``_State`` will
    be returned.
    Nz(State has already been garbage collected)
isinstancer   r   r   AssertionError)r   	state_refr   s      r   _get_module_stater      sP     &&!FF## **-f5IKE}$%OPPLr   )r   typingr   r   torch.nnnnr   WeakKeyDictionaryr   ModuleReferenceType__annotations__r   r   r
   r   r   <module>r!      s     ! 	 	 G w00IIw$$V,,  
7 76 7d 7bii HV,< r   