o
    "j
                     @   s^   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	 ee j
ZG dd	 d	eZdS )
    N)core   )
get_logger   )PassBase)set_skip_gc_varsc                       sD   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )PipelinePassBasec                    s   t    d S )N)super__init__self	__class__ m/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/passes/pipeline_pass_base.pyr
      s   zPipelinePassBase.__init__c                 C      dS NTr   r   r   r   r   _check_self      zPipelinePassBase._check_selfc                 C   r   r   r   )r   Z
other_passr   r   r   _check_conflict"   r   z PipelinePassBase._check_conflictc                 C   r   )zF
        An interface that MUST be implemented by subclasses.
        Nr   r   r   r   r   _create_job_list%   s   z!PipelinePassBase._create_job_listc                 C   r   )aG  
        An interface that MUST be implemented by subclasses.
        The return value MUST be two lists, one is a list of types(str), another
        is a list of sub programs.
        For example:
        return [FORWARD, BACKWARD, OPT], [fwd_prog, bwd_prog, opt_prog]
        or
        return [FORWARD], [fwd_prog]
        Nr   )r   programr   r   r   _partial_programs+   s   
z"PipelinePassBase._partial_programsc                 C   s   |  |\}}tt|D ]}td||  d||   q|  }t| d|||}| D ]}	t	j
dd rGt	j||	 j||	< q1||	 j||	< q1t||}
|d|
 dS )z
        The shared process is implemented in this function and new subclass only need
        to implement two interfaces above, 'create_job_list' and 'partial_programs'.
        zsub_program type: z, sum_program:
Znum_micro_batchesZFLAGS_enable_pir_in_executorplanN)r   rangelenloggerdebugr   r   Zget_attrkeyspaddleZ	frameworkZ	get_flagsZpirZtranslate_to_pirdescr   ZPlanZset_attr)r   Zmain_programZstartup_programcontextZ	job_typesZsub_programsijobsZtype_to_programtyper   r   r   r   _apply_single_impl7   s&   

z#PipelinePassBase._apply_single_impl)
__name__
__module____qualname__r
   r   r   r   r   r%   __classcell__r   r   r   r   r      s    r   )loggingr   Zpaddle.baser   Zutils.log_utilsr   Z	pass_baser   Z
pass_utilsr   INFOr   r   r   r   r   r   <module>   s   
