o
     jq                     @   sN   d dl Z d dlZd dlmZ d dlmZ G dd dZdd Zedd	 ZdS )
    N)core)signature_safe_contextmanagerc                   @   s*   e Zd ZdZdd Zd
ddZdd	 ZdS )Statezt
    record relationship of forward op/value and backward op/value
    one state must be bining with a program

    c                 C   sR   || _ tt| _tt| _tt| _tt| _tt| _tt| _	d S N)
blockcollectionsdefaultdictlistvalue_to_valuegradvalue_to_sumvaluegradop_to_opgradvaluegrad_to_valuesumvaluegrad_to_valueopgrad_to_op)selfr    r   _/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/autograd/backward_utils.py__init__   s   zState.__init__returnNc                 C   s   t t| _t t| _t t| _| j D ]\}}|g kr,|d D ]}|g| j|< q#q| j D ]\}}|g krG|d D ]}|g| j|< q>q2| j	 D ]\}}|g kr]|g| j|d < qMd S )Nr   )
r   r   r	   r   r   r   r
   itemsr   r   )r   kvvaluer   r   r   turn_map+   s$   zState.turn_mapc                 C   sT   t |}| j |_| j |_| j |_| j |_| j |_| j |_|S r   )r   r
   copyr   r   r   r   r   )r   Z	new_blockstater   r   r   r   <   s   z
State.copy)r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r      s
    
r   c              	   C   sL   |D ]!}|D ]}|j }d|v r"td|j  d|   d   dS qqd S )NzB[Prim] Decomp op does not support dynamic shape -1, but got shape z in inputs of op z . Prim will skip its vjp op.T)shapewarningswarnname)opinputsr   itemr!   r   r   r   _check_vjp_dynamic_shapeM   s   r(   c              	   c   s\    t  ot  ot| |}z|rt d d V  W |r#t d d S d S |r-t d w w )NFT)r   Z_is_bwd_prim_enabledZ_enable_prim_dynamic_shaper(   Z_set_prim_backward_enabled)r%   r&   Z	skip_primr   r   r   dynamic_shape_prim_vjp_guardY   s   
r)   )	r   r"   Zpaddle.baser   Zpaddle.base.wrapped_decoratorr   r   r(   r)   r   r   r   r   <module>   s   7