o
    "j                     @   s   g Z G d d dZdS )c                   @   sN   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdddZ	dd Z
dS )ProgramDepsc                 C   s>   || _ || _|| _i | _i | _i | _t | _d | _| 	  d S N)
_block_start_varsZ	_end_vars_var_to_use_op_sub_block_deps_var_to_generate_opset_should_removed_var_father_block_deps_build_deps)selfblockZ
start_varsZend_vars r   x/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/fleet/meta_optimizers/sharding/prune.py__init__   s   zProgramDeps.__init__c                 C      || j v r
| j | S d S r   )r   )r   idxr   r   r   get_sub_block_deps#      

zProgramDeps.get_sub_block_depsc                 C   r   r   )r   )r   var_namer   r   r   get_var_deps)   r   zProgramDeps.get_var_depsc                 C   s@  | j D ]}g | j|< g | j|< qt| jjD ]\}}|jdv r q|j }|j	 }d}|D ]	}|| jv r7d}q.|s;q|D ]}|| jv rL| j| 
| q=|D ] }|| jvr[g | j|< || jvrg|g| j|< qO| j| 
| qO|jdkr|jds}J |jdj}	t| jj|	|j |j	 }
|
| j|	< | |
_qd S )N)Zc_allreduce_sumZc_sync_comm_streamZc_calc_comm_streamFTZconditional_blockZ	sub_block)r   r   r   	enumerater   opstypedescinput_arg_namesoutput_arg_namesappendZhas_attrattridr   programr   r   r
   )r   r   r   opZ
input_varsZoutput_varsZdeps_reduce
input_nameoutput_nameZsubblock_idxZsubblock_depsr   r   r   r   /   sJ   











zProgramDeps._build_depsc                 C   s   || j v rb| j | g kr(|| j | vr td|||| j | | j | | || jv r5| j| d S | j | g krD| j| d S | j| d | j | d krZ| j| d S | j| d S d S )NzKop_idx: {} is not in self._var_to_use_op[{}], self._var_to_use_op[{}] is {})	r   
ValueErrorformatremover   r	   discardaddr   r   op_idxr   r   r   r   crop_input_var_from_op[   s.   
	
z"ProgramDeps.crop_input_var_from_opc                 C   sl   || j v r|| j | v sJ | j | | | j|r2|| j vs(| j | g kr4| jj|dd d S d S d S NF)sync)r   r'   r   Zhas_varZ_remove_varr*   r   r   r   crop_output_var_from_opz   s   

z#ProgramDeps.crop_output_var_from_opNc                 C   s|   | j j| }|j D ]}|d ur||v rq| || q|j D ]}|d ur-||v r-q"| || q"| j j|dd d S r-   )r   r   r   r   r,   r   r/   Z
_remove_op)r   r+   Zreserved_varsr!   r"   r#   r   r   r   	remove_op   s   zProgramDeps.remove_opc                 C   sF   | j j| }t|j dkrdS |j D ]
}|| jvr  dS qdS )N    FT)r   r   lenr   r   r	   )r   r+   r!   r#   r   r   r   should_remove_op   s   
zProgramDeps.should_remove_opr   )__name__
__module____qualname__r   r   r   r   r,   r/   r0   r3   r   r   r   r   r      s    ,
r   N)__all__r   r   r   r   r   <module>   s   