o
    b²“ij  ã                   @   s<   d dl mZmZ ddlmZ G dd„ dƒZG dd„ dƒZdS )	é    )ÚListÚTypeé   )ÚPlanc                   @   sV   e Zd ZdZdedefdd„Zedeed   fdd„ƒZ	edeed   fdd	„ƒZ
d
S )ÚRulez%Abstract class for optimization rule.ÚplanÚreturnc                 C   ó   t ‚)z2Apply the optimization rule to the execution plan.©ÚNotImplementedError)Úselfr   © r   úc/home/ubuntu/.local/lib/python3.10/site-packages/ray/data/_internal/logical/interfaces/optimizer.pyÚapply	   s   z
Rule.applyc                 C   ó   g S )z4List of rules that must be applied before this rule.r   ©Úclsr   r   r   Údependencies   ó   zRule.dependenciesc                 C   r   )z3List of rules that must be applied after this rule.r   r   r   r   r   Ú
dependents   r   zRule.dependentsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úclassmethodr   r   r   r   r   r   r   r   r      s    r   c                   @   s8   e Zd ZdZedee fdd„ƒZdedefdd„Z	dS )	Ú	OptimizerzuAbstract class for optimizers.

    An optimizers transforms a DAG of operators with a list of predefined rules.
    r   c                 C   r	   )z,List of predefined rules for this optimizer.r
   )r   r   r   r   Úrules   r   zOptimizer.rulesr   c                 C   s8   |}	 | j D ]}| |¡}q|jj|jjkr	 |S |}q)z(Optimize operators with a list of rules.)r   r   ÚdagÚdag_str)r   r   Úprevious_planÚruler   r   r   Úoptimize#   s   
ÿùzOptimizer.optimizeN)
r   r   r   r   Úpropertyr   r   r   r   r!   r   r   r   r   r      s
    r   N)Útypingr   r   r   r   r   r   r   r   r   r   Ú<module>   s    