
    i                     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                   ^    e Zd ZdZddZed        Zd Zd Zd Z	d	 Z
defd
Zdef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.
    returnNc                      || _         || _        y N)
cpp_moduleattr)selfr	   r
   s      F/var/www/html/engine/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   r   N)__name__
__module____qualname____doc__r   propertyr   r   r   r   r   intr   boolr   r"    r   r   r   r      sQ     3 3%$&(' '/4 /.r   r   c                   n     e Zd ZdZd fdZd	dZed        Zej                  dd       Zde	fdZ
 xZS )
ModuleWrapperz\A subclass of ``torch.nn.Module`` that wraps a C++ frontend module and delegates all access.r   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/   r0   r1   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   rC   zModuleWrapper.trainingP   s     '''r   c                 :    | j                   j                  |       y r   )r	   train)r   modes     r   rC   zModuleWrapper.trainingU   s    d#r   c                 6    | j                   j                         S r   )r	   __repr__r   s    r   rH   zModuleWrapper.__repr__Y   s    ''))r   r#   )T)r$   r%   r&   r'   r   rA   r(   rC   setterstrrH   __classcell__)r7   s   @r   r-   r-   2   sI    fD ( ( __$ $*# *r   r-   N)r'   torchr   r   Moduler-   r+   r   r   <module>rN      s&    9 (. (.V(*BII (*r   