
    jz#                       d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ  ej        e          5  d dlmZ ddd           n# 1 swxY w Y   e	rd dlmZ d d	lmZ d d
lmZm Z m!Z! dddddddEdZ"dFdZ#dGd Z$dGd!Z%ed"dd#dHd*            Z&ed"d+dId.            Z&d/d/d#dJd0Z&d/d+dKd2Z'ddd3dLd6Z(dMd9Z)dNd;Z*dd<dOd?Z+dPdBZ,dQdCZ-dRdDZ.dS )S    )annotationsN)
CollectionIterableMapping)TYPE_CHECKINGAnyLiteraloverload)	functions)qualified_type_name)ComputeError)Expr)PyExpr)ColumnNameOrSelectorIntoExprPolarsDataTypeF)
str_as_litlist_as_series	structifydtyperequire_selectorinputr   r   boolr   r   r   PolarsDataType | Noner   returnr   c                  t          | t          j                  r| }|rt          |          }nt          | t                    r|st          j        |           }nz|r"dt          |           d}t          |          t          | t                    r+|r)t          j
        t          j        |           |          }nt          j
        | |          }|j        S )a	  
    Parse a single input into an expression.

    Parameters
    ----------
    input
        The input to be parsed as an expression.
    str_as_lit
        Interpret string input as a string literal. If set to `False` (default),
        strings are parsed as column names.
    list_as_series
        Interpret list input as a Series literal. If set to `False` (default),
        lists are parsed as list literals.
    structify
        Convert multi-column expressions to a single struct expression.
    dtype
        If the input is expected to resolve to a literal with a known dtype, pass
        this to the `lit` constructor.
    require_selector
        Require that the input is a valid selector (eg: column name or selector).

    Returns
    -------
    PyExpr
    cannot turn  into selector)r   )
isinstanceplr   _structify_expressionstrFcolr   	TypeErrorlistlitSeries_pyexpr)r   r   r   r   r   r   exprmsgs           ]/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/polars/_utils/parse/expr.pyparse_into_expressionr-      s    D %!! - 	/(..D	E3		 	-
 	-uU|| 	-M!4U!;!;MMMCC.. t$$ 	- 	-55))777DD5e,,,D<    r*   r   c                6   | j                                         }|j                                         rf	 | j                                         }t	          j        |                              |          } n$# t          $ r t	          j        |           } Y nw xY w| S N)metaundo_aliaseshas_multiple_outputsoutput_namer#   structaliasr   )r*   unaliased_expr	expr_names      r,   r!   r!   J   s    Y++--N//11 =	=	--//I 8N++11)<<DD  	" 	" 	"8D>>DDD	" Ks   A5 5BBinputsIntoExpr | Iterable[IntoExpr]named_inputslist[PyExpr]c                     t          t          t          j                            dd                              }t          | |          }|r&t          ||          }|                    |           |S )a  
    Parse multiple inputs into a list of expressions.

    Parameters
    ----------
    *inputs
        Inputs to be parsed as expressions, specified as positional arguments.
    **named_inputs
        Additional inputs to be parsed as expressions, specified as keyword arguments.
        The expressions will be renamed to the keyword used.

    Returns
    -------
    list of PyExpr
    POLARS_AUTO_STRUCTIFYr   r   r   intosenvironget_parse_positional_inputs_parse_named_inputsextendr9   r;   r   exprsnamed_exprss        r,   parse_into_list_of_expressionsrK   V   sm    & S(?CCDDEEI$VyAAAE "),)LLL[!!!Lr.   c                     t          t          t          j                            dd                              }t          | |d          }|r&t          ||          }|                    |           |S )a  
    Parse multiple inputs (required to be valid selectors) into a list of expressions.

    Parameters
    ----------
    *inputs
        Inputs to be parsed as expressions, specified as positional arguments.
    **named_inputs
        Additional inputs to be parsed as expressions, specified as keyword arguments.
        The expressions will be renamed to the keyword used.

    Returns
    -------
    list of PyExpr
    r>   r   T)r   require_selectorsr?   r@   rH   s        r,   0parse_into_list_of_expressions_require_selectorsrN   q   sz    & S(?CCDDEEI$  E
  "),)LLL[!!!Lr.   .)strictraise_if_not_selectorir   rO   rP   Literal[False]pl.Selectorc                   d S r0    rQ   rO   rP   s      r,   parse_into_selectorrW      s	     #r.   rO   Literal[True]pl.Selector | Nonec                   d S r0   rU   rV   s      r,   rW   rW      s	     r.   Tc               \   t          | t                    r#t          j                            | g|d          S t          | t          j                  r| S t          | t          j                  r| j                                        S |r"dt          |           d}t          |          d S )NTnamesrO   expand_patternsr   r   )
r   r"   r    Selector_by_namer   r1   as_selectorr   r%   )rQ   rO   rP   r+   s       r,   rW   rW      s     !S {###  $ 
 
 	

 
Ar{	#	# 	Arw		 v!!###	 E033EEEnn4r.   7ColumnNameOrSelector | Collection[ColumnNameOrSelector]c                  t          | t                    rt          | t                    sd | D             }t          j                            ||d          }t          |          t          |           k    r|S t          |          dk    rdd lm} |	                                }| D ]}|t          ||          z  }|S t          | |          S )Nc                <    g | ]}t          |t                    |S rU   )r   r"   ).0rQ   s     r,   
<listcomp>z,parse_list_into_selector.<locals>.<listcomp>   s'    FFFA:a3E3EFaFFFr.   Tr]   r   rX   )r   r   r"   r    r`   ra   lenpolars.selectors	selectorsemptyrW   )r9   rO   columnsselectorcsrQ   s         r,   parse_list_into_selectorro      s    
 &*%% :j.E.E :FFFFF;''  ( 
 

 w<<3v;;&&Ow<<1))))))xxzzH 	> 	>A+Af====HH"6&9999r.   )rM   r   0tuple[IntoExpr, ...] | tuple[Iterable[IntoExpr]]rM   c               B    t          |           }fd|D             S )Nc                4    g | ]}t          |           S ))r   r   )r-   )rf   erM   r   s     r,   rg   z,_parse_positional_inputs.<locals>.<listcomp>   sC         	.	
 	
 	
  r.   )_parse_inputs_as_iterable)r9   rM   r   inputs_iters    `` r,   rE   rE      sE     ,F33K        r.   &tuple[Any, ...] | tuple[Iterable[Any]]Iterable[Any]c                    | sg S t          |           dk    r,t          | d         t                    rd}t          |          t          |           dk    rt	          | d                   r| d         S | S )N   r   u8  Cannot pass a dictionary as a single positional argument.
If you merely want the *keys*, use:
  • df.method(*your_dict.keys())
If you need the key value pairs, use one of:
  • unpack as keywords:    df.method(**your_dict)
  • build expressions:     df.method(expr.alias(k) for k, expr in your_dict.items()))rh   r   r   r%   _is_iterable)r9   r+   s     r,   rt   rt      s      	 6{{aJvay'::e 	 nn 6{{aL33ayMr.   r   c                |    t          | t                    o't          | t          t          t          j        f           S r0   )r   r   r"   bytesr    r(   )r   s    r,   rz   rz      s8    eX&& zUBI&0 0 , r.   r?   dict[str, IntoExpr]Iterable[PyExpr]c             #     K   |                                  D ]+\  }}t          ||                              |          V  ,d S )Nr?   )itemsr-   r6   )r;   r   namer   s       r,   rF   rF     s_       $))++ L Le#EY???EEdKKKKKKL Lr.   
predicatesconstraintsc                     t          |           }|r$t          |          }|                    |           t          |          S )a  
    Parse predicates and constraints into a single expression.

    The result is an AND-reduction of all inputs.

    Parameters
    ----------
    *predicates
        Predicates to be parsed, specified as positional arguments.
    **constraints
        Constraints to be parsed, specified as keyword arguments.
        These will be converted to predicates of the form "keyword equals input value".

    Returns
    -------
    PyExpr
    )rE   _parse_constraintsrG   _combine_predicates)r   r   all_predicatesconstraint_predicatess       r,   ,parse_predicates_constraints_into_expressionr   
  sJ    * .j99N 5 2; ? ?3444~...r.   c              #     K   |                                  D ]3\  }}t          j        |                              |          j        V  4d S r0   )r   r#   r$   eqr)   )r   r   values      r,   r   r   (  sU      "((** , ,eeDkknnU##+++++, ,r.   c                    | sd}t          |          t          |           dk    r| d         S t          j        |           S )Nz5at least one predicate or constraint must be providedry   r   )r%   rh   plrall_horizontal)r   r+   s     r,   r   r   -  sG     Enn
:!!}j)))r.   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r*   r   r   r   )r9   r:   r;   r   r   r<   )rQ   r   rO   r   rP   rR   r   rS   )rQ   r   rO   r   rP   rY   r   rZ   )rQ   r   rO   r   rP   r   r   rZ   )r9   rc   rO   r   r   rS   )r9   rp   rM   r   r   r   r   r<   )r9   rv   r   rw   )r   r   r   r   )r;   r}   r   r   r   r~   )r   r:   r   r   r   r   )r   r}   r   r~   )r   r<   r   r   )/
__future__r   
contextlibrB   collections.abcr   r   r   typingr   r   r	   r
   polars._reexport	_reexportr    polarsr   r#   polars._utils.variousr   polars.exceptionsr   suppressImportErrorpolars._plr_plrr   r   r   polars._typingr   r   r   r-   r!   rK   rN   rW   ro   rE   rt   rz   rF   r   r   r   rU   r.   r,   <module>r      sQ   " " " " " "     				 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8       ! ! ! ! ! ! 5 5 5 5 5 5 * * * * * *Z%%                  N""""""MMMMMMMMMM  #'"1 1 1 1 1 1h	 	 	 	   6   > 
 ,1	     
 
      
 "&	     2 : : : : : :< $	     "   2    =BL L L L L L/ / / /<, , , ,
* * * * * *s   A  A$'A$