
    hh6                       d dl mZ d dlZd dlmZmZmZmZmZm	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 d dlmZmZmZmZmZmZmZmZ d d	lmZ d d
lmZm Z m!Z!m"Z"m#Z# er{d dl$m%Z%m&Z& d dl'm(c m)Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z: d dlm;Z; d dl<m=Z=m>Z>m?Z?  ede*j@                  ZAe3e8e*j@        f         ZBe.e*j@                 ZC G d ded                   ZDdS )    )annotationsN)TYPE_CHECKINGAnyCallableLiteralTypeVarcastIbisExprDateTimeNamespaceIbisExprListNamespaceIbisExprStringNamespaceIbisExprStructNamespace)
IntoColumnasc_nulls_firstasc_nulls_lastdesc_nulls_firstdesc_nulls_lastis_floatinglitnarwhals_to_native_dtype)SQLExpr)ImplementationVersionextend_boolnot_implemented
zip_strict)IteratorSequence)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)ExprKindExprMetadata)IbisLazyFrameIbisNamespace)_LimitedContext)	IntoDType
RankMethodRollingInterpolationMethodExprT)boundc                  N   e Zd Zej        Z	 doej        ddpdZedqd            Z	 	 	 	 drddddsd"Z	dtd$Z
dtd%Zdud'Zdvd+Zed,d,ddwd1            Zedxd7            Zedyd:            Zdzd?Zd{dAZed|dD            Zd}dEZd}dFZd}dGZd~dLZddPZd}dQZd}dRZddTZddUZd}dVZd}dWZ d}dXZ!ddZZ"dd^Z#ddaZ$d}dbZ%ddfZ&eddh            Z'eddj            Z(eddl            Z)eddn            Z* e+            Z, e+            Z- e+            Z. e+            Z/ e+            Z0dS )IbisExprN)implementationcall#EvalSeries[IbisLazyFrame, ir.Value]window_functionIbisWindowFunction | Noneevaluate_output_namesEvalNames[IbisLazyFrame]alias_output_namesAliasNames | Noneversionr   r5   r   returnNonec               Z    || _         || _        || _        || _        d | _        || _        d S N)_call_evaluate_output_names_alias_output_names_version	_metadata_window_function)selfr6   r8   r:   r<   r>   r5   s          J/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/_ibis/expr.py__init__zIbisExpr.__init__:   s7     
&;##5 .2;J    IbisWindowFunctionc                "     d fd} j         p|S )	Ndfr*   window_inputsIbisWindowInputsr?   Sequence[ir.Value]c                6    fd |           D             S )Nc           
         g | ]=}|                     t          j        j         j        j                              >S )group_byorder_by)overibiswindowpartition_by_sortrW   ).0exprrI   rP   s     rJ   
<listcomp>zIIbisExpr.window_function.<locals>.default_window_func.<locals>.<listcomp>P   sb         		K!.!;!+]-C!D     rL    )rO   rP   rI   s    `rJ   default_window_funcz5IbisExpr.window_function.<locals>.default_window_funcM   s>         !DHH   rL   )rO   r*   rP   rQ   r?   rR   )rH   )rI   ra   s   ` rJ   r8   zIbisExpr.window_functionK   s2    	 	 	 	 	 	 $;(;;rL   r`   
descending
nulls_lastr^   ir.Valuer[   Sequence[str | ir.Value]rW   Sequence[IntoColumn]
rows_start
int | Nonerows_endrc   Sequence[bool] | Nonerd   c          
         |	|| |d}n|d|i}n
|d| i}ni }|pd}	|pd}
t          j        d| | j        ||	|
dd|}|                    |          S )N)	preceding	followingrn   rm   Frb   rU   r`   )rY   rZ   r\   rX   )rI   r^   r[   rW   rh   rj   rc   rd   rows_betweendesclastrZ   s               rJ   _window_expressionzIbisExpr._window_expression\   s     !h&:*48LLLL!'2LL#'*5LLL"U"U 
!TZdtLLL
 
 
 

 yy   rL   strc                \    t          d|                               | j        | d          S N	ir.ColumnT)rW   include_null)r	   firstr\   rI   r^   rW   s      rJ   _firstzIbisExpr._firstx   s7    K&&,,TZ* - 
 
 	
rL   c                \    t          d|                               | j        | d          S ru   )r	   rq   r\   ry   s      rJ   _lastzIbisExpr._last}   s7    K&&++TZ* , 
 
 	
rL   r,   c                0    ddl m}  || j                  S )Nr   r+   )r>   )narwhals._ibis.namespacer,   rF   )rI   r,   s     rJ   __narwhals_namespace__zIbisExpr.__narwhals_namespace__   s)    ::::::}T]3333rL   kind/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]r"   c                    | S rB   r`   )rI   r   s     rJ   	broadcastzIbisExpr.broadcast   s    rL   Fcolsr   Sequence[bool] | boolIterator[ir.Column]c              '     K   t          |          }t          | |          } t          ||          }t          t          t          t
          d}t          || |          D ]\  }}} |||f         |          V  d S )N))FF)FT)TF)TT)lenr   r   r   r   r   r   )rc   rd   r   nmappingcol_desc_nulls_lasts           rJ   r\   zIbisExpr._sort   s       II Q//
 Q//
+)+)	
 
 (2$
J'O'O 	5 	5#C/'5+./444444	5 	5rL   cls
type[Self]evaluate_column_namescontextr-   c              8    dfd} | |d |j                   S )NrO   r*   r?   Sequence[ir.Column]c                4      fd            D             S )Nc                *    g | ]}j         |         S r`   native)r]   namerO   s     rJ   r_   z<IbisExpr.from_column_names.<locals>.func.<locals>.<listcomp>   s    JJJBIdOJJJrL   r`   )rO   r   s   `rJ   funcz(IbisExpr.from_column_names.<locals>.func   s*    JJJJ0E0Eb0I0IJJJJrL   r:   r<   r>   rO   r*   r?   r   )rF   )r   r   r   r   s    `  rJ   from_column_nameszIbisExpr.from_column_names   sQ    	K 	K 	K 	K 	K 	K s"7#$	
 
 
 	
rL   column_indicesintc               ^    dfd} | ||                                d |j                  S )NrO   r*   r?   r   c                "      fdD             S )Nc                *    g | ]}j         |         S r`   r   )r]   irO   s     rJ   r_   z>IbisExpr.from_column_indices.<locals>.func.<locals>.<listcomp>   s    999QBIaL999rL   r`   )rO   r   s   `rJ   r   z*IbisExpr.from_column_indices.<locals>.func   s    9999.9999rL   r   r   )_eval_names_indicesrF   )r   r   r   r   s     ` rJ   from_column_indiceszIbisExpr.from_column_indices   sY    	: 	: 	: 	: 	: 	: s"%"9"9."I"I#$	
 
 
 	
rL   opCallable[..., ir.Value]other
Self | Anyc                0    |                      ||          S )N)r   _with_callable)rI   r   r   s      rJ   _with_binaryzIbisExpr._with_binary   s    ""2U"333rL   expressifiable_argsc                    | j         |fi |S rB   r   )rI   r   r   s      rJ   _with_elementwisezIbisExpr._with_elementwise   s      #t"2==)<===rL   r1   r   c               H    t          d|                    |                    S )Nr1   )r	   r   )r   r^   r   s      rJ   _alias_nativezIbisExpr._alias_native   s    GTYYt__---rL   c                `    t          dt          j                  }|                     |          S )Nr   )r	   operatorinvertr   )rI   r   s     rJ   
__invert__zIbisExpr.__invert__   s(    /AA""6***rL   c                .    |                      d           S )Nc                j    |                                                      t          d                    S )NT)all	fill_nullr   r^   s    rJ   <lambda>zIbisExpr.all.<locals>.<lambda>   s"    

0D0DSYY0O0O rL   r   rI   s    rJ   r   zIbisExpr.all   s    ""#O#OPPPrL   c                .    |                      d           S )Nc                j    |                                                      t          d                    S NF)anyr   r   r   s    rJ   r   zIbisExpr.any.<locals>.<lambda>   s"    

0D0DSZZ0P0P rL   r   r   s    rJ   r   zIbisExpr.any   s    ""#P#PQQQrL   quantilefloatinterpolationr0   c                b    |dk    rd}t          |          |                     fd          S )NlinearzBOnly linear interpolation methods are supported for Ibis quantile.c                .    |                                S rB   )r   )r^   r   s    rJ   r   z#IbisExpr.quantile.<locals>.<lambda>   s    h0G0G rL   NotImplementedErrorr   )rI   r   r   msgs    `  rJ   r   zIbisExpr.quantile   sA     H$$VC%c***""#G#G#G#GHHHrL   lower_boundr   upper_boundc                    	 ddd}||                      ||          S ||                      ||	          S |                      |||
          S )Nr^   ir.NumericValuelower
Any | Noneupperr?   c                0    |                      ||          S )Nr   r   )clip)r^   r   r   s      rJ   _clipzIbisExpr.clip.<locals>._clip   s     9959666rL   )r   )r   r   )NN)r^   r   r   r   r   r   r?   r   r   )rI   r   r   r   s       rJ   r   zIbisExpr.clip   sy    QU	7 	7 	7 	7 	7
 &&uK&@@@&&uK&@@@""5;"OOOrL   c                .    |                      d           S )Nc                    |                                  |                                                                                     d          z   S )Nint8)nuniqueisnullr   r	   r   s    rJ   r   z#IbisExpr.n_unique.<locals>.<lambda>   s5    $++--*;*;*=*=*B*B6*J*JJ rL   r   r   s    rJ   n_uniquezIbisExpr.n_unique   s     ""JJ
 
 	
rL   c                `     d fd}                      | j         j         j                  S )NrO   r*   r?   Sequence[ir.IntegerScalar]c                H      fd                                D             S )Nc                B    g | ]}j                                         S r`   )r   count)r]   _rO   s     rJ   r_   z.IbisExpr.len.<locals>.func.<locals>.<listcomp>   s%    OOO!BIOO%%OOOrL   )rD   )rO   rI   s   `rJ   r   zIbisExpr.len.<locals>.func   s,    OOOOt/J/J2/N/NOOOOrL   r   )rO   r*   r?   r   )	__class__rD   rE   rF   rI   r   s   ` rJ   r   zIbisExpr.len   sX    	P 	P 	P 	P 	P 	P ~~"&"=#7M	  
 
 	
rL   ddofc               @    d	d|                      fd          S )
Nr^   ir.NumericColumnr   r   r?   re   c                B   |dk    r|                      d          S |dk    r|                      d          S |                                 }|                      d          }t          |          }||                                z  ||z
                                  z  S Nr   pop)how   sample)stdr   r   sqrt)r^   r   	n_samplesstd_popddof_lits        rJ   _stdzIbisExpr.std.<locals>._std   s    qyyxxEx***qyyxxHx---

Ihh5h))G4yyHY^^---X1E0K0K0M0MMMrL   c                     |           S rB   r`   )r^   r   r   s    rJ   r   zIbisExpr.std.<locals>.<lambda>       T40@0@ rL   r^   r   r   r   r?   re   r   )rI   r   r   s    `@rJ   r   zIbisExpr.std   s?    	N 	N 	N 	N ""#@#@#@#@#@AAArL   c               @    d	d|                      fd          S )
Nr^   r   r   r   r?   re   c                    |dk    r|                      d          S |dk    r|                      d          S |                                 }|                      d          }t          |          }||z  ||z
  z  S r   )varr   r   )r^   r   r   var_popr   s        rJ   _varzIbisExpr.var.<locals>._var  s|    qyyxxEx***qyyxxHx---

Ihh5h))G4yyHY&)h*>??rL   c                     |           S rB   r`   )r^   r   r   s    rJ   r   zIbisExpr.var.<locals>.<lambda>  r   rL   r   r   )rI   r   r   s    `@rJ   r   zIbisExpr.var  s?    	@ 	@ 	@ 	@ ""#@#@#@#@#@AAArL   c                .    |                      d           S )Nc                N    |                                                                  S rB   )r   sumr   s    rJ   r   z%IbisExpr.null_count.<locals>.<lambda>  s    0A0A0C0C rL   r   r   s    rJ   
null_countzIbisExpr.null_count  s    ""#C#CDDDrL   c                4    dd}|                      |          S )Nr^   ir.FloatingValue | Anyr?   re   c                    t          |                                           r|                                 nd}t          j        |                                 d |          S r   )r   typeisnanrY   ifelser   )r^   	otherwises     rJ   r   zIbisExpr.is_nan.<locals>.func  sD    (3DIIKK(@(@K

eI;t{{}}dI>>>rL   )r^   r   r?   re   r   r   s     rJ   is_nanzIbisExpr.is_nan  s,    	? 	? 	? 	? ""4(((rL   c                .    |                      d           S )Nc                V    |                                  |                                 z   S rB   )isinfr  r   s    rJ   r   z$IbisExpr.is_finite.<locals>.<lambda>  s    $**,,2M0N rL   r   r   s    rJ   	is_finitezIbisExpr.is_finite  s    ""#N#NOOOrL   Sequence[Any]c                4    |                      fd          S )Nc                .    |                                S rB   )isin)r^   r   s    rJ   r   z IbisExpr.is_in.<locals>.<lambda>  s    		%0@0@ rL   r   )rI   r   s    `rJ   is_inzIbisExpr.is_in  s!    ""#@#@#@#@AAArL   valuestrategylimitc                    |d}t          |          |d}t          |          d
d}|                     ||	          S )Nz0`strategy` is not supported for the Ibis backendz-`limit` is not supported for the Ibis backendr^   re   r  	ir.Scalarr?   c                ,    |                      |          S rB   )r   )r^   r  s     rJ   
_fill_nullz&IbisExpr.fill_null.<locals>._fill_null)  s    >>%(((rL   )r  )r^   re   r  r  r?   re   r   )rI   r  r  r  r   r  s         rJ   r   zIbisExpr.fill_null  se     DC%c***AC%c***	) 	) 	) 	) "":U";;;rL   dtyper.   c                >     d fd}                      |          S )Nr^   rv   r?   re   c                X    t          j                  }|                     |          S rB   )r   rF   r	   )r^   native_dtyper  rI   s     rJ   _funczIbisExpr.cast.<locals>._func/  s&    3E4=IIL99\***rL   r^   rv   r?   re   r   )rI   r  r  s   `` rJ   r	   zIbisExpr.cast.  s=    	+ 	+ 	+ 	+ 	+ 	+ 	+
 ""5)))rL   c                .    |                      d           S )Nc                    |                                                                                      t          j        |                     dk    S )NrV   r   )r   r   rX   rY   rZ   r   s    rJ   r   z$IbisExpr.is_unique.<locals>.<lambda>8  s;    ,,..33DK$4P4P4PQQUVV rL   r   r   s    rJ   	is_uniquezIbisExpr.is_unique6  s     ""VV
 
 	
rL   methodr/   boolc               T     d fdd fd}                      |          S )Nr^   rv   r?   re   c                F   t          	                    | d                    }t          j        |          }dk    r|                                }nAdk    r't          j                                        |          }n|                                }|t          d          z   }dk    rSt          j        | g          }| 	                                                    |          }||z   t          d          z
  }nxd	k    rrt          j        | g          }| 	                                                    |          }t          d
|t          d          z
  t          d          z            }||z   }t          j        |                                 |f          S )NTrb   )rW   denseordinalr   maxr  averager   g       @)nextr\   rY   rZ   
dense_rank
row_numberrX   rankr   r   r	   casesnotnull)
r^   rW   rZ   rank_	partitioncntavgrc   r!  rI   s
          rJ   _rankzIbisExpr.rank.<locals>._rank<  sm   DJJt
tJTTUUH[(333F   ++--9$$))..v66  CFFNE  K$888	jjll''	22c!ff,9$$ K$888	jjll''	22,sSVV|s3xx.GHH:t||~~u5666rL   rO   r*   inputsWindowInputs[ir.Value]list[ir.Value]c                f    j         rd}t          |          fd |           D             S )NzV`rank` followed by `over` with `order_by` specified is not supported for Ibis backend.c                    g | ]F} t          d |                                        t          j        j                            GS )rv   r  )r	   rX   rY   rZ   r[   )r]   r^   r3  r4  s     rJ   r_   z3IbisExpr.rank.<locals>.window_f.<locals>.<listcomp>\  sb         d;--..33K)<===   rL   )rW   r   )rO   r4  r   r3  rI   s    ` rJ   window_fzIbisExpr.rank.<locals>.window_fX  s[     /n)#...     !DHH	   rL   r  )rO   r*   r4  r5  r?   r6  r   )rI   r!  rc   r9  r3  s   ``` @rJ   r,  zIbisExpr.rank;  si    	7 	7 	7 	7 	7 	7 	7 	78		 		 		 		 		 		 		 ""5(333rL   r   c                     t          |           S rB   r   r   s    rJ   rs   zIbisExpr.stre      &t,,,rL   r   c                     t          |           S rB   r
   r   s    rJ   dtzIbisExpr.dti  s    (...rL   r   c                     t          |           S rB   r   r   s    rJ   listzIbisExpr.listm  s    $T***rL   r   c                     t          |           S rB   r   r   s    rJ   structzIbisExpr.structq  r;  rL   rB   )r6   r7   r8   r9   r:   r;   r<   r=   r>   r   r5   r   r?   r@   )r?   rM   )r`   r`   NN)r^   re   r[   rf   rW   rg   rh   ri   rj   ri   rc   rk   rd   rk   r?   re   )r^   re   rW   rs   r?   re   )r?   r,   )r   r   r?   r"   )r   r   rc   r   rd   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^   r1   r   rs   r?   r1   )r?   r"   )r   r   r   r0   r?   r"   )r   r   r   r   r?   r"   )r   r   r?   r"   )r   r  r?   r"   )r  r   r  r   r  ri   r?   r"   )r  r.   r?   r"   )r!  r/   rc   r"  r?   r"   )r?   r   )r?   r   )r?   r   )r?   r   )1__name__
__module____qualname__r   IBIS_implementationrK   propertyr8   rr   rz   r|   r   r   staticmethodr\   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r   r	   r   r,  rs   r=  r?  rA  r   cum_prodskewkurtosis_count_star_push_down_window_functionr`   rL   rJ   r4   r4   7   s       $)O
 6:K *8)<K K K K K K" < < < X<& 24)+!%#! -1,0! ! ! ! ! !8
 
 
 


 
 
 

4 4 4 4
     -2,15 5 5 5 5 \5" 
 
 
 [
" 	
 	
 	
 [	
4 4 4 4> > > >
 . . . [.+ + + +Q Q Q QR R R RI I I I
P 
P 
P 
P
 
 
 

	
 	
 	
 	
B B B BB B B BE E E E) ) ) )P P P PB B B B< < < <* * * *
 
 
 

(4 (4 (4 (4T - - - X- / / / X/ + + + X+ - - - X-   H ?D  H!/##K "1!2!2rL   r4   )r*   re   )E
__future__r   r   typingr   r   r   r   r   r	   rY   narwhals._ibis.expr_dtr   narwhals._ibis.expr_listr   narwhals._ibis.expr_strr   narwhals._ibis.expr_structr   narwhals._ibis.utilsr   r   r   r   r   r   r   r   narwhals._sql.exprr   narwhals._utilsr   r   r   r   r   collections.abcr    r!   ibis.expr.typesr^   typesirtyping_extensionsr"   narwhals._compliantr#   narwhals._compliant.typingr$   r%   r&   r'   narwhals._expression_parsingr(   r)   narwhals._ibis.dataframer*   r~   r,   r-   narwhals.typingr.   r/   r0   Valuer1   rM   rQ   r4   r`   rL   rJ   <module>rc     s   " " " " " "  G G G G G G G G G G G G G G G G  < < < < < < : : : : : : ; ; ; ; ; ; > > > > > >	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ' & & & & &               .22222222         &&&&&&000000            DCCCCCCC666666666666//////QQQQQQQQQQGG28,,,E'rx(?@#BH-H3 H3 H3 H3 H3w23 H3 H3 H3 H3 H3rL   