L iG/ddlmZddlZddlmZmZmZmZddlm Z m Z ddl m Z ddl mZddlmZddlmZdd lmZmZmZmZmZmZmZmZmZdd lmZdd lm Z m!Z!m"Z"m#Z#erRdd l$m%Z%dd lm&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5ddlm6Z6ddl7m8Z8m9Z9m:Z:e/e1e&fZ;e*e&Z<GddedZ=y)) annotationsN) TYPE_CHECKINGAnyCallablecast)CoalesceOperatorStarExpressionDuckDBExprDateTimeNamespaceDuckDBExprListNamespaceDuckDBExprStringNamespaceDuckDBExprStructNamespace) DeferredTimeZoneFcolgenerate_order_by_sqllitnarwhals_to_native_dtypesql_expressionwhenwindow_expression)SQLExpr)ImplementationVersion extend_bool no_default)Sequence) Expression)Self) WindowInputs) AliasNames EvalNames EvalSeriesWindowFunction)DuckDBLazyFrameDuckDBNamespace) NoDefault)_LimitedContext)FillNullStrategy IntoDTypeRollingInterpolationMethodceZdZejZ dejd d dZd!dZ d"ddd d#dZ d$dZ d%dZ d%d Z d&d Z d'd Z e d(d Zed)d Zed*dZd'dZd'dZd'dZ d+dZd'dZd'dZd'dZd'dZd,dZ d-dZd.dZ d/dZed0dZed1dZ ed2dZ!ed3dZ"y)4 DuckDBExprN)implementationcJ||_||_||_||_||_yN)_call_evaluate_output_names_alias_output_names_version_window_function)selfcallwindow_functionevaluate_output_namesalias_output_namesversionr2s [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_duckdb/expr.py__init__zDuckDBExpr.__init__4s* &;##5  =Lc*tdtSNcount)rr r:s r@ _count_starzDuckDBExpr._count_starDs.*++rB descending nulls_lastc &t|||||||S)NrH)r)r:expr partition_byorder_by rows_startrows_endrIrJs r@_window_expressionzDuckDBExpr._window_expressionGs&!     !!  rBcltdt|}t|||d}t|d|d|dS)NFrH( ))rlenrr)r:functionrLrNflags order_by_sqls r@ _first_lastzDuckDBExpr._first_last\sEE3x=1, %E  !D6<.BCCrBc(|jd||S)NfirstrZr:rLrNs r@_firstzDuckDBExpr._firstfsx88rBc(|jd||S)Nlastr]r^s r@_lastzDuckDBExpr._lastish77rBc4ddlm}||jS)Nrr))r?)narwhals._duckdb.namespacer*r8)r:r*s r@__narwhals_namespace__z!DuckDBExpr.__narwhals_namespace__ls>t}}55rBc:|jtdggS)N)overrrFs r@ broadcastzDuckDBExpr.broadcastqsyy#a&2&&rBc<dfd }||d|jS)NcL|Dcgc] }t|c}Scc}wr4)r)dfnameevaluate_column_namess r@funcz*DuckDBExpr.from_column_names..func|s *?*CD$CID DDs!r=r>r?rlr(returnlist[Expression])r8)clsrncontextros ` r@from_column_nameszDuckDBExpr.from_column_namests* E "7#$$   rBcZdfd }|||jd|jS)Nc^|j}Dcgc]}t||c}Scc}wr4)columnsr)rlryicolumn_indicess r@roz,DuckDBExpr.from_column_indices..funcs(jjG-;<C O< <.funcsgt$E*d#3q6>#FEUSV^456  QT3==Uc!f_c%,&78BB#a&#c(3==oN rBc <g}|D] }td||j}td||j|tdz ztd||tdz zz }|jt |tdk(tdj t |tdk(tt dj t |tdk(tdj ||Sr)rrMrappendrrr)rlinputsretrLrErWr:s r@window_fz!DuckDBExpr.skew..window_fsCR !GT*F,?,?@a D)6+>+>?s1v~'Q 89:  #a&#d)4>>Uc!f_c%,.?@JJ #a&#c(;EEoV JrBrLr!rrr!rlr(rDuckDBWindowInputsrrrs)rQ_with_callable)r:rorrs` @r@skewzDuckDBExpr.skews-  # #  &""422rBc&|jdS)Nctd|S)N kurtosis_poprrLs r@z%DuckDBExpr.kurtosis..s .$0GrBrrFs r@kurtosiszDuckDBExpr.kurtosiss""#GHHrBc6dfd }|j|S)NcTdk(rtd|tSd}t|)Nlinear quantile_contzDOnly linear interpolation methods are supported for DuckDB quantile.)rrNotImplementedError)rLmsg interpolationquantiles r@roz!DuckDBExpr.quantile..funcs.($H >>XC%c* *rBrr)r:rrros `` r@rzDuckDBExpr.quantiles + ""4((rBc&|jdS)NctdSrDr)_exprs r@rz DuckDBExpr.len..s 7rBrrFs r@rVzDuckDBExpr.lens""#;<.s%9K9KE9R0SrBrrFs r@ null_countzDuckDBExpr.null_counts""#STTrBc&|jdS)Nctd|S)Nisnanrrs r@rz#DuckDBExpr.is_nan..s 1Wd3CrBrrFs r@is_nanzDuckDBExpr.is_nans%%&CDDrBc&|jdS)Nctd|S)Nisfiniterrs r@rz&DuckDBExpr.is_finite..s 1Z3FrBrrFs r@ is_finitezDuckDBExpr.is_finites%%&FGGrBc,|jfdS)Nc0tdt|S)Ncontains)rr)rLothers r@rz"DuckDBExpr.is_in..s1ZUT3RrBr)r:rs `r@is_inzDuckDBExpr.is_ins%%&RSSrBc?jdkrdd}t| dfd }j|Sdd}|Jj||S) N)rgz`fill_null` with `strategy=z'` is only available in 'duckdb>=1.3.0'.c dk(rdnd}dk(r  nddfndf\}}|Dcgc]1}tt|||j|j||d3c}Scc}w)Nforward last_value first_valuerT)rOrP ignore_nulls)rrrMrN) rlr fill_funcrOrPrLlimitr:strategys r@_fill_with_strategyz1DuckDBExpr.fill_null.._fill_with_strategys-5 ,AL}  9, %0eVdA>U% H!%R &)T*++#-!)%)    s6A#ct||Sr4)r)rLvalues r@_fill_constantz,DuckDBExpr.fill_null.._fill_constants#D%0 0rB)r)rlr(rrrrzSequence[Expression])rLr!rrrrr!)_backend_versionr_with_window_functionr)r:rrrrrrs` `` r@ fill_nullzDuckDBExpr.fill_nulls  $$v-3H:=de)#.. # -? % *--.AB B 1   %%nE%BBrBcdfd }dfd }j||jjjS)Nct|j}tj|}|Dcgc]}|j |c}Scc}wr4)rnativerr8r)rltz native_dtyperLdtyper:s r@rozDuckDBExpr.cast..funcsD!")),B3E4=="ML8.window_f sN!")),B3E4=="ML8<8L8LRQW8XYDIIl+Y YYsArprqr) __class__r6r7r8)r:rrors`` r@rzDuckDBExpr.castsF B  Z ~~  "&"="=#77MM   rBc tur d}t|tt|tt|c }t d |d fd }j |dj jjS)NzM`replace_strict` requires an explicit value for `default` for duckdb backend.mapc|j} |Dcgc]G}ttd |tdtd|tdj |I}} rKt |j }t j|}|Dcgc]}|j|c}S|Scc}wcc}w)Nr list_extract map_extractrg) _evaluate_single_output_exprrrrrrrrr8r) rl default_colrLresultsrrresdefault mapping_exprold_ return_dtyper:s r@roz'DuckDBExpr.replace_strict..func%s99'BK!H j$-na |T&JCPQFS  )K( )G%bii07 dmmUWX :AB3.BBNCs A B:B?rprq) r ValueErrorrlistrrr6r7r8) r:roldnewrrnew_rorrs `` ` @@r@replace_strictzDuckDBExpr.replace_stricts j aCS/ !c^Sc^ dd+   &~~  "&"="=#77MM   rBct|Sr4rrFs r@strzDuckDBExpr.str@ (..rBct|Sr4r rFs r@dtz DuckDBExpr.dtDs *400rBct|Sr4r rFs r@rzDuckDBExpr.listHs &t,,rBct|Sr4rrFs r@structzDuckDBExpr.structLrrBr4)r;z'EvalSeries[DuckDBLazyFrame, Expression]r<zDuckDBWindowFunction | Noner=EvalNames[DuckDBLazyFrame]r>zAliasNames | Noner?rr2rrrNone)rrr!)rNN)rLr!rMSequence[str | Expression]rNrrO int | NonerPrrISequence[bool] | NonerJrrrr!)rWrrLr!rNz Sequence[str]rrr!)rLr!rNrrrr!)rrr*)rrr")rnrrur,rrr")r{rrur,rrr")rLr!rmrrrr!)rrrr/rrr")r Sequence[Any]rrr")rz Self | NonerzFillNullStrategy | Nonerrrrr")rr.rrr") rzDuckDBExpr | NoDefaultrrrrrzIntoDType | Nonerrr")rrr)rrr )rrr )rrr)#__name__ __module__ __qualname__rDUCKDB_implementationrArGrQrZr_rbreri classmethodrvr}rrrrrrVrrrrrrrpropertyrrrrrrBr@r1r11s~$++O 8<M*8)>)>M5M5M : M . MM'M M , 46/1!%#  -1,0  1 -      * *   *DD#-D9FD D986 ' 9 !     "      .$3LI ) ).H )  )=UEHT#C #C,C#CLV#C #CJ &( '( (  ( ' (  ( T//11--//rBr1)r(r!)> __future__rrtypingrrrrduckdbrr narwhals._duckdb.expr_dtr narwhals._duckdb.expr_listr narwhals._duckdb.expr_strrnarwhals._duckdb.expr_structrnarwhals._duckdb.utilsrrrrrrrrrnarwhals._sql.exprrnarwhals._utilsrrrrcollections.abcr r!typing_extensionsr"narwhals._compliantr#narwhals._compliant.typingr$r%r&r'narwhals._duckdb.dataframer(rdr*narwhals._typingr+r,narwhals.typingr-r.r/DuckDBWindowFunctionrr1rrBr@rs"553@>?B   'LL(!&0 ;:*/WW)/:*EF%j1]/89]/rB