Ë
    3êñ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      úN/var/www/pod-logistic/pod-ai/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Õ'Ü˜˜d¤G¨D¯O©O¸TÓ$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{   € Ø—_‘_Ó&ò 	8ˆEñ ˜EŸJ™J›ˆEŒJØ�{‰{Ñ&Ù#% e§k¡k×&6Ñ&6Ó#7�—‘Õ ð	8ð —<‘<“>ò 	$ˆCÙ˜#Ÿ(™(“|ˆC�Hð	$ð ˆ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(*�B—I‘Iõ (*r   