o
    `Û·i£  ã                   @   s  d dl mZmZ ddlmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZ d dlmZ eeeeeegƒZeeeeegƒZedefdd	„ƒZedefd
d„ƒZG dd„ deƒZG dd„ deƒZdeee	ge	f  fdd„Zdedefdd„ZdS )é    )ÚCallableÚListé   )ÚRuleset)ÚLogicalPlanÚ	OptimizerÚPhysicalPlanÚPlanÚRule)	ÚCombineShufflesÚ%ConfigureMapTaskMemoryUsingOutputSizeÚFuseOperatorsÚInheritBatchFormatRuleÚInheritTargetMaxBlockSizeRuleÚLimitPushdownRuleÚPredicatePushdownÚProjectionPushdownÚSetReadParallelismRule)ÚDeveloperAPIÚreturnc                   C   ó   t S ©N)Ú_LOGICAL_RULESET© r   r   ú[/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/data/_internal/logical/optimizers.pyÚget_logical_ruleset-   ó   r   c                   C   r   r   )Ú_PHYSICAL_RULESETr   r   r   r   Úget_physical_ruleset2   r   r   c                   @   ó&   e Zd ZdZedee fdd„ƒZdS )ÚLogicalOptimizerz$The optimizer for logical operators.r   c                 C   ó   dd„ t ƒ D ƒS )Nc                 S   ó   g | ]}|ƒ ‘qS r   r   ©Ú.0Úrule_clsr   r   r   Ú
<listcomp><   ó    z*LogicalOptimizer.rules.<locals>.<listcomp>)r   ©Úselfr   r   r   Úrules:   ó   zLogicalOptimizer.rulesN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r
   r*   r   r   r   r   r    7   ó    r    c                   @   r   )ÚPhysicalOptimizerz%The optimizer for physical operators.r   c                 C   r!   )Nc                 S   r"   r   r   r#   r   r   r   r&   D   r'   z+PhysicalOptimizer.rules.<locals>.<listcomp>)r   r(   r   r   r   r*   B   r+   zPhysicalOptimizer.rulesNr,   r   r   r   r   r3   ?   r2   r3   c                  C   s"   ddl m}  tƒ j| ƒ jtƒ jgS )ad  Get the list of transformation functions to convert a logical plan
    to an optimized physical plan.

    This returns the 3 transformation steps:
    1. Logical optimization
    2. Planning (logical -> physical operators)
    3. Physical optimization

    Returns:
        A list of transformation functions, each taking a Plan and returning a Plan.
    r   ©Úcreate_planner)Úray.data._internal.plannerr5   r    ÚoptimizeÚplanr3   r4   r   r   r   Úget_plan_conversion_fnsG   s
   ýr9   Úlogical_planc                 C   s,   t ƒ \}}}|| ƒ}|j| _||ƒ}||ƒS )a  Get the physical execution plan for the provided logical plan.

    This process has 3 steps:
    (1) logical optimization: optimize logical operators.
    (2) planning: convert logical to physical operators.
    (3) physical optimization: optimize physical operators.
    )r9   ÚdagÚ_dag)r:   Úoptimize_logicalr8   Úoptimize_physicalÚoptimized_logical_planÚphysical_planr   r   r   Úget_execution_plan\   s
   
rA   N)Útypingr   r   Úrulesetr   Ú%ray.data._internal.logical.interfacesr   r   r   r	   r
   Ú ray.data._internal.logical.rulesr   r   r   r   r   r   r   r   r   Úray.util.annotationsr   r   r   r   r   r    r3   r9   rA   r   r   r   r   Ú<module>   s8    ,ûÿüÿ
