
    Χg                     V    d Z ddlmZ  G d d          Z G d dej                  ZdS )z3Functionality for Python <-> C++ frontend inter-op.    )nnc                   X    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dS )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                 "    || _         || _        d S N)
cpp_moduleattr)selfr   r	   s      H/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/nn/cpp.py__init__zOrderedDictWrapper.__init__   s    $			    c                 6    t          | j        | j                  S r   )getattrr   r	   r
   s    r   cpp_dictzOrderedDictWrapper.cpp_dict   s    t	222r   c                 4    | j                                         S r   )r   itemsr   s    r   r   zOrderedDictWrapper.items   s    }""$$$r   c                 4    | j                                         S r   )r   keysr   s    r   r   zOrderedDictWrapper.keys   s    }!!###r   c                 4    | j                                         S r   )r   valuesr   s    r   r   zOrderedDictWrapper.values"   s    }##%%%r   c                 4    | j                                         S r   )r   __iter__r   s    r   r   zOrderedDictWrapper.__iter__%   s    }%%'''r   c                 4    | j                                         S r   )r   __len__r   s    r   r   zOrderedDictWrapper.__len__(   s    }$$&&&r   c                 6    | j                             |          S r   )r   __contains__r
   keys     r   r   zOrderedDictWrapper.__contains__+   s    }))#...r   c                 6    | 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      s            3 3 X3% % %$ $ $& & &( ( (' ' '/ / /. . . . .r   r   c                   f     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           	      j   || _         t                                                       t          |d          | _        t          |d          | _        t          |d          | _        t          |          D ];}|                    d          s$t          | |t          | j         |                     <d S )N_parameters_buffers_modules_)r   superr   r   r+   r,   r-   dir
startswithsetattrr   )r
   r   r	   	__class__s      r   r   zModuleWrapper.__init__5   s     %-j-HH,>z:,V,V,>z:,V,V
OO 	D 	DD??3'' DdGDOT$B$BCCC	D 	Dr   Tc                    |                                  D ]=} ||j                  |_        |j         ||j        j                  |j        _        >|                                 D ]} ||j                  |_        | S r   )
parametersdata_gradbuffers)r
   fnrecurseparambufs        r   _applyzModuleWrapper._applyB   s    __&& 	8 	8E EJEJ{&#%2ek&6#7#7 <<>> 	$ 	$Cr#(||CHHr   c                     | j         j        S r   )r   trainingr   s    r   r?   zModuleWrapper.trainingP   s    ''r   c                 :    | j                             |           d S r   )r   train)r
   modes     r   r?   zModuleWrapper.trainingT   s    d#####r   c                 4    | 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   s        ffD D D D D    ( ( X( _$ $ _$* * * * * * *r   r)   N)r%   torchr   r   Moduler)   r'   r   r   <module>rI      s|    9 9      (. (. (. (. (. (. (. (.V'* '* '* '* '*BI '* '* '* '* '*r   