
    Wh3                       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mZ d d	lmZ d d
lm Z m!Z!m"Z"m#Z# erd 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         ZDy)    )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extend_boolis_floatinglitnarwhals_to_native_dtype)SQLExpr)ImplementationVersionnot_implemented
zip_strict)IteratorSequence)Self)WindowInputs)
AliasNames	EvalNames
EvalSeriesWindowFunction)ExprKindExprMetadata)IbisLazyFrameIbisNamespace)_LimitedContext)	IntoDType
RankMethodRollingInterpolationMethodExprT)boundc                  j   e Zd Zej                  Z	 d%ej                  d	 	 	 	 	 	 	 	 	 	 	 	 	 d&dZed'd       Z	 	 	 	 d(ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)dZ	d*dZ
d+dZed	d	d	 	 	 	 	 	 	 d,d
       Ze	 	 	 	 	 	 	 	 d-d       Zed.d       Zd/dZ	 	 	 	 	 	 d0dZed1d       Zd2dZd2dZd2dZ	 	 	 	 	 	 d3dZd4dZd2dZd2dZd5dZd5dZd2dZd2dZd2dZd6dZ d7dZ!d8dZ"d2dZ#d9d Z$ed:d!       Z%ed;d"       Z&ed<d#       Z'ed=d$       Z( e)       Z* e)       Z+ e)       Z, e)       Z- e)       Z.y)>IbisExprN)implementationc               X    || _         || _        || _        || _        d | _        || _        y N)_call_evaluate_output_names_alias_output_names_version	_metadata_window_function)selfcallwindow_functionevaluate_output_namesalias_output_namesversionr5   s          M/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_ibis/expr.py__init__zIbisExpr.__init__5   s1     
&;##5 .2;J    c                <     	 	 	 	 	 	 d fd} j                   xs |S )Nc                     |       D cg c]I  }|j                  t        j                  |j                   j                  |j
                               K c}S c c}w )Ngroup_byorder_by)overibiswindowpartition_by_sortrK   )dfwindow_inputsexprr>   s      rD   default_window_funcz5IbisExpr.window_function.<locals>.default_window_funcH   s]     !H  		KK!.!;!;!+]-C-C!D  s   AA)rQ   r*   rR   IbisWindowInputsreturnzSequence[ir.Value])r=   )r>   rT   s   ` rD   r@   zIbisExpr.window_functionF   s4    		.>		 $$;(;;rF   
descending
nulls_lastc          
         |	|| |d}n|d|i}n
|d| i}ni }|xs d}	|xs d}
t        j                  d| | j                  ||	|
dd|}|j                  |      S )N)	preceding	followingr\   r[   FrW   rI    )rM   rN   rP   rL   )r>   rS   rO   rK   
rows_startrows_endrX   rY   rows_betweendesclastrN   s               rD   _window_expressionzIbisExpr._window_expressionW   s     !h&:*48LL!'2L#'*5LL"U"U 
!TZZdtL
 

 yy  rF   c                4    ddl m}  || j                        S )Nr   r+   )rC   )narwhals._ibis.namespacer,   r;   )r>   r,   s     rD   __narwhals_namespace__zIbisExpr.__narwhals_namespace__s   s    :T]]33rF   c                    | S r7   r]   )r>   kinds     rD   	broadcastzIbisExpr.broadcastx   s    rF   Fc              '     K   t        |      }t        | |      } t        ||      }t        t        t        t
        d}t        || |      D ]  \  }}} |||f   |        y w)N))FF)FT)TF)TT)lenr   r   r   r   r   r   )rX   rY   colsnmappingcol_desc_nulls_lasts           rD   rP   zIbisExpr._sort|   st      I Q/
 Q/
+)+)	
 (2$
J'O 	5#C/'5+./44	5s   A!A#c              <    dfd} | |d |j                         S )Nc                T     |       D cg c]  }| j                   |    c}S c c}w r7   native)rQ   nameevaluate_column_namess     rD   funcz(IbisExpr.from_column_names.<locals>.func   s$    0Eb0IJBIIdOJJJs   %rA   rB   rC   rQ   r*   rV   zSequence[ir.Column])r;   )clsrw   contextrx   s    `  rD   from_column_nameszIbisExpr.from_column_names   s*    	K "7#$$	
 	
rF   c               Z    dfd} | || j                        d |j                        S )Nc                H    D cg c]  }| j                   |    c}S c c}w r7   rt   )rQ   icolumn_indicess     rD   rx   z*IbisExpr.from_column_indices.<locals>.func   s    *89QBIIaL999s   ry   rz   )_eval_names_indicesr;   )r{   r|   r   rx   s     ` rD   from_column_indiceszIbisExpr.from_column_indices   s4    	: "%"9"9."I#$$	
 	
rF   c                (    | j                  ||      S )N)other_with_callable)r>   opr   s      rD   _with_binaryzIbisExpr._with_binary   s    ""2U"33rF   c               (     | j                   |fi |S r7   r   )r>   r   expressifiable_argss      rD   _with_elementwisezIbisExpr._with_elementwise   s     #t""2=)<==rF   c               8    t        d|j                  |            S )Nr1   )r	   rv   )r{   rS   rv   s      rD   _alias_nativezIbisExpr._alias_native   s    GTYYt_--rF   c                X    t        dt        j                        }| j                  |      S )NCallable[..., ir.Value])r	   operatorinvertr   )r>   r   s     rD   
__invert__zIbisExpr.__invert__   s$    /A""6**rF   c                &    | j                  d       S )Nc                R    | j                         j                  t        d            S )NT)all	fill_nullr   rS   s    rD   <lambda>zIbisExpr.all.<locals>.<lambda>   s    
0D0DSY0O rF   r   r>   s    rD   r   zIbisExpr.all   s    ""#OPPrF   c                &    | j                  d       S )Nc                R    | j                         j                  t        d            S NF)anyr   r   r   s    rD   r   zIbisExpr.any.<locals>.<lambda>   s    
0D0DSZ0P rF   r   r   s    rD   r   zIbisExpr.any   s    ""#PQQrF   c                P    |dk7  rd}t        |      | j                  fd      S )NlinearzBOnly linear interpolation methods are supported for Ibis quantile.c                &    | j                        S r7   )quantile)rS   r   s    rD   r   z#IbisExpr.quantile.<locals>.<lambda>   s    h0G rF   NotImplementedErrorr   )r>   r   interpolationmsgs    `  rD   r   zIbisExpr.quantile   s/     H$VC%c**""#GHHrF   c                    	 d	 	 	 	 	 	 	 dd}|| j                  ||      S || j                  ||      S | j                  |||      S )Nc                (    | j                  ||      S )Nlowerupper)clip)rS   r   r   s      rD   _clipzIbisExpr.clip.<locals>._clip   s     995966rF   )r   )r   r   )NN)rS   ir.NumericValuer   
Any | Noner   r   rV   r   r   )r>   lower_boundupper_boundr   s       rD   r   zIbisExpr.clip   s|    QU	7!	7*4	7DN	7	7
 &&uK&@@&&uK&@@""5;"OOrF   c                &    | j                  d       S )Nc                ~    | j                         | j                         j                         j                  d      z   S )Nint8)nuniqueisnullr   r	   r   s    rD   r   z#IbisExpr.n_unique.<locals>.<lambda>   s+    $++-*;*;*=*B*B6*JJ rF   r   r   s    rD   n_uniquezIbisExpr.n_unique   s    ""J
 	
rF   c                v     d fd} j                  | j                   j                   j                        S )Nc                |    j                  |       D cg c]  }| j                  j                          c}S c c}w r7   )r9   ru   count)rQ   _r>   s     rD   rx   zIbisExpr.len.<locals>.func   s-    /3/J/J2/NO!BIIOO%OOOs   !9ry   )rQ   r*   rV   zSequence[ir.IntegerScalar])	__class__r9   r:   r;   r>   rx   s   ` rD   rk   zIbisExpr.len   s=    	P ~~"&"="=#77MM	  
 	
rF   c               8    dd| j                  fd      S )Nc                   |dk(  r| j                  d      S |dk(  r| j                  d      S | j                         }| j                  d      }t        |      }||j                         z  ||z
  j                         z  S Nr   pop)how   sample)stdr   r   sqrt)rS   ddof	n_samplesstd_popddof_lits        rD   _stdzIbisExpr.std.<locals>._std   s{    qyxxEx**qyxxHx--

Ihh5h)G4yHY^^--X1E0K0K0MMMrF   c                     |       S r7   r]   )rS   r   r   s    rD   r   zIbisExpr.std.<locals>.<lambda>       T40@ rF   rS   zir.NumericColumnr   intrV   ir.Valuer   )r>   r   r   s    `@rD   r   zIbisExpr.std   s    	N ""#@AArF   c               8    dd| j                  fd      S )Nc                    |dk(  r| j                  d      S |dk(  r| j                  d      S | j                         }| j                  d      }t        |      }||z  ||z
  z  S r   )varr   r   )rS   r   r   var_popr   s        rD   _varzIbisExpr.var.<locals>._var   sk    qyxxEx**qyxxHx--

Ihh5h)G4yHY&)h*>??rF   c                     |       S r7   r]   )rS   r   r   s    rD   r   zIbisExpr.var.<locals>.<lambda>   r   rF   r   r   )r>   r   r   s    `@rD   r   zIbisExpr.var   s    	@ ""#@AArF   c                &    | j                  d       S )Nc                >    | j                         j                         S r7   )r   sumr   s    rD   r   z%IbisExpr.null_count.<locals>.<lambda>  s    0A0A0C rF   r   r   s    rD   
null_countzIbisExpr.null_count   s    ""#CDDrF   c                ,    dd}| j                  |      S )Nc                    t        | j                               r| j                         nd}t        j                  | j                         d |      S r   )r   typeisnanrM   ifelser   )rS   	otherwises     rD   rx   zIbisExpr.is_nan.<locals>.func  s5    (3DIIK(@

eI;;t{{}dI>>rF   )rS   zir.FloatingValue | AnyrV   r   r   r   s     rD   is_nanzIbisExpr.is_nan  s    	? ""4((rF   c                &    | j                  d       S )Nc                F    | j                         | j                         z   S r7   )isinfr   r   s    rD   r   z$IbisExpr.is_finite.<locals>.<lambda>  s    $**,2M0N rF   r   r   s    rD   	is_finitezIbisExpr.is_finite
  s    ""#NOOrF   c                ,    | j                  fd      S )Nc                &    | j                        S r7   )isin)rS   r   s    rD   r   z IbisExpr.is_in.<locals>.<lambda>  s    		%0@ rF   r   )r>   r   s    `rD   is_inzIbisExpr.is_in  s    ""#@AArF   c                l    |d}t        |      |d}t        |      dd}| j                  ||      S )Nz0`strategy` is not supported for the Ibis backendz-`limit` is not supported for the Ibis backendc                $    | j                  |      S r7   )r   )rS   values     rD   
_fill_nullz&IbisExpr.fill_null.<locals>._fill_null  s    >>%((rF   )r   )rS   r   r   z	ir.ScalarrV   r   r   )r>   r   strategylimitr   r   s         rD   r   zIbisExpr.fill_null  sM     DC%c**AC%c**	) "":U";;rF   c                6     d fd} j                  |      S )Nc                R    t        j                        }| j                  |      S r7   )r   r;   r	   )rS   native_dtypedtyper>   s     rD   _funczIbisExpr.cast.<locals>._func   s"    3E4==IL99\**rF   rS   z	ir.ColumnrV   r   r   )r>   r   r   s   `` rD   r	   zIbisExpr.cast  s    	+
 ""5))rF   c                &    | j                  d       S )Nc                    | j                         j                         j                  t        j                  |             dk(  S )NrJ   r   )r   r   rL   rM   rN   r   s    rD   r   z$IbisExpr.is_unique.<locals>.<lambda>)  s/    ,,.33DKK$4PQUVV rF   r   r   s    rD   	is_uniquezIbisExpr.is_unique'  s    ""V
 	
rF   c               :     d fd} j                  |      S )Nc                   t        	j                  | d            }t        j                  |      }dk(  r|j	                         }n9dk(  r$t        j
                         j                  |      }n|j                         }|t        d      z   }dk(  rHt        j                  | g      }| j                         j                  |      }||z   t        d      z
  }ndd	k(  r_t        j                  | g      }| j                         j                  |      }t        d
|t        d      z
  t        d      z        }||z   }t        j                  | j                         |f      S )NTrW   )rK   denseordinalr   maxr   averager   g       @)nextrP   rM   rN   
dense_rank
row_numberrL   rankr   r   r	   casesnotnull)
rS   rK   rN   rank_	partitioncntavgrX   methodr>   s
          rD   _rankzIbisExpr.rank.<locals>._rank-  s)   DJJt
tJTUH[[(3F  ++-9$)..v6  CFNE  KK$8	jjl''	2c!f,9$ KK$8	jjl''	2,sSV|s3x.GH::t||~u566rF   r   r   )r>   r
  rX   r  s   ``` rD   r  zIbisExpr.rank,  s    	78 ""5))rF   c                    t        |       S r7   r   r   s    rD   strzIbisExpr.strK      &t,,rF   c                    t        |       S r7   r
   r   s    rD   dtzIbisExpr.dtO  s    (..rF   c                    t        |       S r7   r   r   s    rD   listzIbisExpr.listS  s    $T**rF   c                    t        |       S r7   r   r   s    rD   structzIbisExpr.structW  r  rF   r7   )r?   z#EvalSeries[IbisLazyFrame, ir.Value]r@   zIbisWindowFunction | NonerA   EvalNames[IbisLazyFrame]rB   zAliasNames | NonerC   r   r5   r   rV   None)rV   IbisWindowFunction)r]   r]   NN)rS   r   rO   zSequence[str | ir.Value]rK   zSequence[IntoColumn]r^   
int | Noner_   r  rX   Sequence[bool] | NonerY   r  rV   r   )rV   r,   )rh   z/Literal[ExprKind.AGGREGATION, ExprKind.LITERAL]rV   r"   )rl   r   rX   Sequence[bool] | boolrY   r  rV   zIterator[ir.Column])r{   z
type[Self]rw   r  r|   r-   rV   r"   )r   r   r|   r-   rV   r"   )r   r   r   
Self | AnyrV   r"   )r   r   r   r  rV   r"   )rS   r1   rv   r  rV   r1   )rV   r"   )r   floatr   r0   rV   r"   )r   r   r   r   rV   r"   )r   r   rV   r"   )r   zSequence[Any]rV   r"   )r   r  r   r   r   r  rV   r"   )r   r.   rV   r"   )r
  r/   rX   boolrV   r"   )rV   r   )rV   r   )rV   r   )rV   r   )/__name__
__module____qualname__r   IBIS_implementationrE   propertyr@   rc   rf   ri   staticmethodrP   classmethodr}   r   r   r   r   r   r   r   r   r   r   rk   r   r   r   r   r   r   r   r	   r   r  r  r  r  r  r   cum_prodskewkurtosis_count_star_push_down_window_functionr]   rF   rD   r4   r4   2   s   $))O
 6:K *8)<)<K1K 3K
  8K .K K 'K 
K" < <& 24)+!%#! -1,0!! /! '	!
 ! ! *! *! 
!84
  -2,155)5 *5 
	5 5" 

7

 !
 

 
" 	
 	
4>)>EO>	>
 . .+QRII.HI	I
P

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

*> - - / / + + - -  H D H!#K "1!2rF   r4   )r*   r   )E
__future__r   r   typingr   r   r   r   r   r	   rM   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   r   narwhals._sql.exprr   narwhals._utilsr   r   r   r   collections.abcr    r!   ibis.expr.typesrS   typesirtyping_extensionsr"   narwhals._compliantr#   narwhals._compliant.typingr$   r%   r&   r'   narwhals._expression_parsingr(   r)   narwhals._ibis.dataframer*   re   r,   r-   narwhals.typingr.   r/   r0   Valuer1   r  rU   r4   r]   rF   rD   <module>r?     s    "  G G  < : ; >
 
 
 ' P P2  &0  D66/QQG288,E'rxx(?@#BHH-s3w23 s3rF   