
    ¯wg                     R    d Z ddlmZ  G d d      Z G d dej                        Zy)z3Functionality for Python <-> C++ frontend inter-op.    )nnc                   P    e Zd ZdZd Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zy)OrderedDictWrappera  A wrapper around a C++ OrderedDict.

    It dynamically evaluates the OrderedDict getter on a bound C++ module, such
    that new changes on the C++ side are picked up. Otherwise accessing e.g.
    ``cpp_module._parameters`` just once would get a frozen copy of the parameters
    at the time of access. ``torch.nn.Module`` accesses ``_parameters`` et al. via ``self.__dict__``
    so using properties does not work.
    c                      || _         || _        y N)
cpp_moduleattr)selfr   r	   s      Q/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/torch/nn/cpp.py__init__zOrderedDictWrapper.__init__   s    $	    c                 B    t        | j                  | j                        S r   )getattrr   r	   r
   s    r   cpp_dictzOrderedDictWrapper.cpp_dict   s    t		22r   c                 6    | j                   j                         S r   )r   itemsr   s    r   r   zOrderedDictWrapper.items   s    }}""$$r   c                 6    | j                   j                         S r   )r   keysr   s    r   r   zOrderedDictWrapper.keys   s    }}!!##r   c                 6    | j                   j                         S r   )r   valuesr   s    r   r   zOrderedDictWrapper.values"   s    }}##%%r   c                 6    | j                   j                         S r   )r   __iter__r   s    r   r   zOrderedDictWrapper.__iter__%   s    }}%%''r   c                 6    | j                   j                         S r   )r   __len__r   s    r   r   zOrderedDictWrapper.__len__(   s    }}$$&&r   c                 8    | j                   j                  |      S r   )r   __contains__r
   keys     r   r   zOrderedDictWrapper.__contains__+   s    }}))#..r   c                 8    | j                   j                  |      S r   )r   __getitem__r   s     r   r!   zOrderedDictWrapper.__getitem__.   s    }}((--r   N)__name__
__module____qualname____doc__r   propertyr   r   r   r   r   r   r   r!    r   r   r   r      sC     3 3%$&('/.r   r   c                   d     e Zd ZdZ fdZddZed        Zej                  d        Zd Z	 xZ
S )ModuleWrapperz\A subclass of ``torch.nn.Module`` that wraps a C++ frontend module and delegates all access.c           	         || _         t        | 	          t        |d      | _        t        |d      | _        t        |d      | _        t        |      D ]5  }|j                  d      rt        | |t        | j                   |             7 y )N_parameters_buffers_modules_)r   superr   r   r+   r,   r-   dir
startswithsetattrr   )r
   r   r	   	__class__s      r   r   zModuleWrapper.__init__5   sz     %-j-H,>z:,V,>z:,V
O 	DD??3'dGDOOT$BC	Dr   c                 &   | j                         D ]Q  } ||j                        |_        |j                  ' ||j                  j                        |j                  _        S | j                         D ]  } ||j                        |_         | S r   )
parametersdata_gradbuffers)r
   fnrecurseparambufs        r   _applyzModuleWrapper._applyB   s{    __& 	8E EJJEJ{{&#%ekk&6&6#7 	8 <<> 	$C#((|CH	$ r   c                 .    | j                   j                  S r   )r   trainingr   s    r   r?   zModuleWrapper.trainingP   s    '''r   c                 :    | j                   j                  |       y r   )r   train)r
   modes     r   r?   zModuleWrapper.trainingT   s    d#r   c                 6    | j                   j                         S r   )r   __repr__r   s    r   rD   zModuleWrapper.__repr__X   s    ''))r   )T)r"   r#   r$   r%   r   r=   r&   r?   setterrD   __classcell__)r3   s   @r   r)   r)   2   sB    fD ( ( __$ $*r   r)   N)r%   torchr   r   Moduler)   r'   r   r   <module>rI      s&    9 (. (.V'*BII '*r   