o
    "j                     @   sd   d dl Z d dlZd dlmZ d dlmZ d dlmZ ddlm	Z	m
Z
 G dd dZG d	d
 d
ZdS )    N)Variable)LayerHelper)static_pylayer   )convert_to_staticunwrap_decoratorsc                   @   sB   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdefddZ	dS )StaticPyLayerContextc                 C   s
   g | _ d S N)
saved_vars)self r   ^/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/jit/dy2static/py_layer.py__init__   s   
zStaticPyLayerContext.__init__c                 G   s(   |D ]}t |tsJ | j| qd S r	   )
isinstancer   r
   append)r   ZtensorsZtensorr   r   r   save_for_backward   s   z&StaticPyLayerContext.save_for_backwardc                 C   s@   t d}g }| jD ]}|j|j|j|j|jd}|| q	|S )Nr   )namedtypeshapetype)r   r
   Zcreate_variabler   r   r   r   r   )r   helperZout_listZ	saved_varoutr   r   r   saved_tensor"   s   
z!StaticPyLayerContext.saved_tensorc                 G      t  r	   NotImplementedErrorr   argsr   r   r   mark_not_inplace1      z%StaticPyLayerContext.mark_not_inplacec                 G   r   r	   r   r   r   r   r   mark_non_differentiable5   r   z,StaticPyLayerContext.mark_non_differentiablevaluec                 C   r   r	   r   )r   r!   r   r   r   set_materialize_grads9   r   z*StaticPyLayerContext.set_materialize_gradsN)
__name__
__module____qualname__r   r   r   r   r    boolr"   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd Zdd ZdS )StaticPyLayerc                 C   s^   || _ t|j\}| _t|j\}| _t | _t	t
| j| j| _t	t
| j| j| _d S r	   )dyfunc_selfr   forwardZorig_forward_fnZbackwardZorig_backward_fnr   Zstatic_pylayer_context	functoolspartialr   forward_fn_with_ctxbackward_fn_with_ctx)r   r(   _r   r   r   r   >   s   
zStaticPyLayer.__init__c                 O   sZ   t | jj}|j| jg|R i |}|  dd t|j D }t	| j
|| jdS )Nc                 S   s   g | ]
\}}|d kr|qS )r   r   ).0iitemr   r   r   
<listcomp>R   s
    z'StaticPyLayer.apply.<locals>.<listcomp>)Z
forward_fnZinputsZbackward_fn)inspect	signaturer(   r)   bindapply_defaults	enumerate	argumentsvaluesr   r,   r-   )r   r   kwargsZ
dyfunc_sigZ
bound_argsZ
input_argsr   r   r   applyM   s   zStaticPyLayer.applyN)r#   r$   r%   r   r;   r   r   r   r   r'   =   s    r'   )r*   r3   Zpaddle.base.frameworkr   Zpaddle.common_ops_importr   Zpaddle.static.nnr   Zprogram_translatorr   r   r   r'   r   r   r   r   <module>   s   $