o
    ·2úh$  ã                   @   s8   d dl Z d dlmZ d dlmZ G dd„ de jjƒZdS )é    N)Úin_stateless_scope)Ú	Operationc                   @   sX   e Zd Zedd„ ƒZdd„ Zdd„ Z			dd	d
„Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )Ú
TorchLayerc                 C   s   t | dƒs	|  ¡  | jS ©NÚ_torch_params)ÚhasattrÚ_track_variablesr   ©Úself© r   úX/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/torch/layer.pyÚtorch_params   s   
zTorchLayer.torch_paramsc                 C   s   t ƒ rd S |  ¡  d S ©N)r   r   r	   r   r   r   Ú_post_build   s   zTorchLayer._post_buildc                 C   s   t j dd„ | jD ƒ¡| _d S )Nc                 S   s   i | ]}|j |j“qS r   )ÚpathÚvalue)Ú.0Úvariabler   r   r   Ú
<dictcomp>   s    z/TorchLayer._track_variables.<locals>.<dictcomp>)ÚtorchÚnnÚParameterDictÚ	variablesr   r	   r   r   r   r      s   
ÿzTorchLayer._track_variablesÚ Tc                 C   s&   t | dƒs	|  ¡  tjj | |||¡S r   )r   r   r   r   ÚModuleÚnamed_parameters)r
   ÚprefixÚrecurseÚremove_duplicater   r   r   r      s
   
ÿzTorchLayer.named_parametersc                 O   s   t j| g|¢R i |¤ŽS r   )r   Ú__call__)r
   ÚargsÚkwargsr   r   r   Úforward(   s   zTorchLayer.forwardc                 C   sR   ddl m} t|tjjƒr%t||ƒs%|dks%ddlm} t| |ƒs%||ƒ}||fS )Nr   )ÚLayerr   )ÚTorchModuleWrapper)Úkeras.src.layersr#   Ú
isinstancer   r   r   Úkeras.src.utils.torch_utilsr$   )r
   Únamer   r#   r$   r   r   r   Ú_setattr_hook+   s   ÿþ
zTorchLayer._setattr_hookc                 C   s0   t | dƒr|j| jvr|j| j|j< d S d S d S r   )r   r   r   r   ©r
   r   r   r   r   Ú_post_track_variable9   ó
   
þzTorchLayer._post_track_variablec                 C   s0   t | dƒr|j| jv r| j |j¡ d S d S d S r   )r   r   r   Úpopr*   r   r   r   Ú_post_untrack_variable>   r,   z!TorchLayer._post_untrack_variableN)r   TT)Ú__name__Ú
__module__Ú__qualname__Úpropertyr   r   r   r   r"   r)   r+   r.   r   r   r   r   r      s    
	
ür   )r   Ú(keras.src.backend.common.stateless_scoper   Úkeras.src.ops.operationr   r   r   r   r   r   r   r   Ú<module>   s    