o
    i0                  
   @  s  U d dl mZ d dlZd dlmZ ee d dlmZ W d   n1 s'w   Y  d dl	Z	d dl
mZ d dlmZmZ erZd dlmZ d dlmZ d d	lmZ ed
ZedZG dd dZded< ze ZW n eefy Z zdZW Y dZ[ndZ[ww dddZdS )    )annotationsN)issue_deprecation_warning)
PyOptFlags)wraps)TYPE_CHECKINGTypeVar)Callable)	ParamSpec)IdentityFunctionPTc                   @  s  e Zd ZdZddddddddddd
dCddZedDddZeddddddddddd
dEddZddddddddddd
dEddZ	edFddZ
dFddZdFdd ZdGd!d"ZedHd$d%ZejdId'd%ZedHd(d)ZejdId*d)ZedHd+d,ZejdId-d,ZedHd.d/ZejdId0d/ZedHd1d2ZejdId3d2ZedHd4d5ZejdId6d5ZedHd7d8ZejdId9d8ZedHd:d;ZejdId<d;ZedHd=d>ZejdId?d>ZdJdAdBZdS )KQueryOptFlagsz
    The set of the optimizations considered during query optimization.

    .. warning::
        This functionality is considered **unstable**. It may be changed
        at any point without it being considered a breaking change.
    N
predicate_pushdownprojection_pushdownsimplify_expressionslice_pushdowncomm_subplan_elimcomm_subexpr_elimcluster_with_columnscollapse_joinscheck_order_observefast_projectionr   None | boolr   r   r   r   r   r   r   r   r   returnNonec       
         C  s,   t  | _| j|||||||||	|
d
 d S )Nr   )r   default_pyoptflagsupdateselfr   r   r   r   r   r   r   r   r   r    r!   Q/home/app/Keep/.python/lib/python3.10/site-packages/polars/lazyframe/opt_flags.py__init__!   s   

zQueryOptFlags.__init__
pyoptflagsr   c                 C  s   |  | }||_|S N)__new__r   )r    r$   optflagsr!   r!   r"   _from_pyoptflags=   s   
zQueryOptFlags._from_pyoptflagsc        
         C  s,   t  }
|
  |
j| |||||||||	d
S )'Create new empty set off optimizations.r   )r   no_optimizationsr   )r   r   r   r   r   r   r   r   r   r   r'   r!   r!   r"   noneC   s   zQueryOptFlags.nonec       
         C  s   |dur|| _ |dur|| _|dur|| _|dur|| _|dur#|| _|dur*|| _|dur1|| _|dur@tddd |s@d| _ |	durG|	| _|
durN|
| _	| S )z&Update the current optimization flags.Nzcthe `collapse_joins` parameter for `QueryOptFlags` is deprecated. Use `predicate_pushdown` instead.z1.33.1)versionF)
r   r   r   r   r   r   r   r   r   r   r   r!   r!   r"   r   a   s4   zQueryOptFlags.updatec                  C  s    t  } |   d| j_d| _| S )r)   T)r   r*   r   eagerr   )r'   r!   r!   r"   _eager   s
   zQueryOptFlags._eagerc                 C     t | j S r%   r   r(   r   copyr    r!   r!   r"   __copy__      zQueryOptFlags.__copy__c                 C  r/   r%   r0   r2   r!   r!   r"   __deepcopy__   r4   zQueryOptFlags.__deepcopy__c                 C  s   | j   dS )zRemove selected optimizations.N)r   r*   r2   r!   r!   r"   r*      s   zQueryOptFlags.no_optimizationsboolc                 C     | j jS )z3Only read columns that are used later in the query.r   r   r2   r!   r!   r"   r         z!QueryOptFlags.projection_pushdownvaluec                 C     || j _d S r%   r8   r    r:   r!   r!   r"   r         c                 C  r7   )z.Apply predicates/filters as early as possible.r   r   r2   r!   r!   r"   r      r9   z QueryOptFlags.predicate_pushdownc                 C  r;   r%   r>   r<   r!   r!   r"   r      r=   c                 C  r7   )z=Cluster sequential `with_columns` calls to independent calls.r   r   r2   r!   r!   r"   r      r9   z"QueryOptFlags.cluster_with_columnsc                 C  r;   r%   r?   r<   r!   r!   r"   r      r=   c                 C  r7   )z9Run many expression optimization rules until fixed point.r   r   r2   r!   r!   r"   r      r9   z!QueryOptFlags.simplify_expressionc                 C  r;   r%   r@   r<   r!   r!   r"   r      r=   c                 C  r7   )zPushdown slices/limits.r   r   r2   r!   r!   r"   r      r9   zQueryOptFlags.slice_pushdownc                 C  r;   r%   rA   r<   r!   r!   r"   r      r=   c                 C  r7   )z/Elide duplicate plans and caches their outputs.r   r   r2   r!   r!   r"   r      r9   zQueryOptFlags.comm_subplan_elimc                 C  r;   r%   rB   r<   r!   r!   r"   r      r=   c                 C  r7   )z5Elide duplicate expressions and caches their outputs.r   r   r2   r!   r!   r"   r      r9   zQueryOptFlags.comm_subexpr_elimc                 C  r;   r%   rC   r<   r!   r!   r"   r      r=   c                 C  r7   )z9Do not maintain order if the order would not be observed.r   r   r2   r!   r!   r"   r      r9   z!QueryOptFlags.check_order_observec                 C  r;   r%   rD   r<   r!   r!   r"   r      r=   c                 C  r7   )z]Replace simple projections with a faster inlined projection that skips the expression engine.r   r   r2   r!   r!   r"   r      r9   zQueryOptFlags.fast_projectionc                 C  r;   r%   rE   r<   r!   r!   r"   r      r=   strc                 C  sz   d| j j d| j j d| j d| j d| j d| j d| j d| j d	| j	 d
| j
 d| j d| j j d| j j d S )Nz$
QueryOptFlags {
    type_coercion: z
    type_check: z

    predicate_pushdown: z
    projection_pushdown: z
    simplify_expression: z
    slice_pushdown: z
    comm_subplan_elim: z
    comm_subexpr_elim: z
    cluster_with_columns: z
    check_order_observe: z
    fast_projection: z

    eager: z
    streaming: z
}
        )r   type_coercion
type_checkr   r   r   r   r   r   r   r   r   r-   Z	streamingstripr2   r!   r!   r"   __str__   s:   	
zQueryOptFlags.__str__)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r$   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r   )r   r6   )r:   r6   r   r   )r   rF   )__name__
__module____qualname____doc__r#   classmethodr(   staticmethodr+   r   r.   r3   r5   r*   propertyr   setterr   r   r   r   r   r   r   r   rJ   r!   r!   r!   r"   r      s     ,


r   DEFAULT_QUERY_OPT_FLAGSr!   r   r
   c                    s   d$dd	d$d
dd%ddd%ddfddfddfddfddfddfddfddfddfddfddfddfddfddd d& fd!d"} | S )'z8Decorator to mark to forward the old optimization flags.fr   
field_namerF   r:   r6   r   c                 S  s   t | || | S r%   )setattrrT   rU   r:   r!   r!   r"   helper  s   z%forward_old_opt_flags.<locals>.helperc                 S  s   t | j|| | S r%   )rV   r   rW   r!   r!   r"   helper_hidden  s   z,forward_old_opt_flags.<locals>.helper_hiddenc                 S     |rt  S | S r%   )r   r+   rT   r:   r!   r!   r"   clear_optimizations     z2forward_old_opt_flags.<locals>.clear_optimizationsc                 S  rZ   r%   )r   r.   r[   r!   r!   r"   r-     r]   z$forward_old_opt_flags.<locals>.eagerc                   
    | |S r%   r!   rT   v)r\   r!   r"   <lambda>&     
 z'forward_old_opt_flags.<locals>.<lambda>c                   r^   r%   r!   r_   )r-   r!   r"   ra   '  rb   c                       | d|S )NrG   r!   r_   rY   r!   r"   ra   (      c                   rc   )NrH   r!   r_   rd   r!   r"   ra   )  re   c                   rc   )Nr   r!   r_   rX   r!   r"   ra   *  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   +  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   ,  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   -  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   .  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   /  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   0  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   1  re   c                   rc   )Nr   r!   r_   rf   r!   r"   ra   2  re   )Zno_optimizationr.   rG   _type_checkr   r   r   r   r   r   r   r   Z_check_orderfunctionCallable[P, T]c                   s(   t  d	 fdd}t |_|S )
NargsP.argskwargsP.kwargsr   r   c                    s   | dt}| }t| D ]$}  |}|d ur4ddlm} d| d}||t ||||}q||d< | i |S )NZoptimizationsr   )issue_warningzoptimization flag `zT` is deprecated. Please use `optimizations` parameter
(Deprecated in version 1.30.0))	getrS   r3   listkeyspolars._utils.variousrn   DeprecationWarningpop)rj   rl   r'   keycbrn   message)OLD_OPT_PARAMETERS_MAPPINGrh   r!   r"   wrapper6  s   

z8forward_old_opt_flags.<locals>.decorate.<locals>.wrapper)rj   rk   rl   rm   r   r   )r   inspect	signature__signature__)rh   ry   )rx   )rh   r"   decorate5  s   z'forward_old_opt_flags.<locals>.decorateN)rT   r   rU   rF   r:   r6   r   r   )rT   r   r:   r6   r   r   )rh   ri   r   ri   r!   )r}   r!   )rx   r\   r-   rX   rY   r"   forward_old_opt_flags  s(   
















r~   )r   r
   )
__future__r   
contextlibZpolars._utils.deprecationr   suppressImportErrorZpolars._plrr   rz   	functoolsr   typingr   r   collections.abcr   r	   rr   r
   r   r   r   __annotations__rS   	NameError_r~   r!   r!   r!   r"   <module>   s2     p
