
    n
qi                     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                   f    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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.
    returnNc                 "    || _         || _        d S N)
cpp_moduleattr)selfr	   r
   s      l/var/www/html/bestrading.cuttalo.com/services/ml-inference/venv/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   r   N)__name__
__module____qualname____doc__r   propertyr   r   r   r   r   intr   boolr   r"    r   r   r   r      s             3 3 X3% % %$ $ $& & &( ( (' ' ' ' '/4 / / / /. . . . .r   r   c                   p     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   Nc           	      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/   r0   r1   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   rC   zModuleWrapper.trainingP   s     ''r   c                 :    | j                             |           d S r   )r	   train)r   modes     r   rC   zModuleWrapper.trainingU   s    d#####r   c                 4    | 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   s        ffD D D D D D    ( ( X( _$ $ $ _$*# * * * * * * * *r   r-   N)r'   torchr   r   Moduler-   r+   r   r   <module>rN      s|    9 9      (. (. (. (. (. (. (. (.V(* (* (* (* (*BI (* (* (* (* (*r   