L igddlmZddlZddlmZmZmZmZddlZ ddl m Z m Z ddl mZddlmZddlmZmZmZmZddlmZmZdd lmZdd lmZmZdd lmZm Z m!Z!m"Z"dd l#m$Z$erGdd l%m&Z&ddl'm(cm)Z*ddl+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1ddl2m3Z3ddl4m5Z5ddl6m7Z7ddlm8Z8m9Z9ddl:m;Z;mZ>ddZ?ddZ@ddZAddZBGdde de dZCy)) annotationsN) TYPE_CHECKINGAnyCallablecast)DepthTrackingExprLazyExprDaskExprDateTimeNamespaceDaskExprStringNamespace) add_row_indexalign_series_full_broadcastmake_group_by_kwargsnarwhals_to_native_dtype)evaluate_nodes!evaluate_output_names_and_aliases)"window_kwargs_to_pandas_equivalent)get_dtype_backendnative_to_narwhals_dtype)Implementationgenerate_temporary_column_name no_defaultnot_implementedInvalidOperationError)Sequence)Self) AliasNames EvalNames EvalSeriesNarwhalsAggregation) DaskLazyFrame DaskNamespace) NoDefault)Version_LimitedContext)FillNullStrategy IntoDTypeModeKeepStrategyRollingInterpolationMethodcfdS)Nc0|jfdS)NcDt|dijSN)getattr to_seriesexprattrkwargss Y/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_dask/expr.pyz6simple_aggregation....7s"(WT4(262<<>_with_callableselfr7r6s `r8r9z$simple_aggregation..6s$"5"5>#r:r1r6s`r8simple_aggregationr@4  r:cfdS)Nc0|jfdS)Nc(t|diSr0r2r4s r8r9z1simple_method....>s(WT4(262r:r;r=s `r8r9zsimple_method..=s$"5"52#r:r1r?s`r8 simple_methodrF;rAr:cfdS)Nc(|j|SN) _binary_op)r>otherr6s r8r9zsimple_binary..DsttU;r:r1r?s`r8 simple_binaryrLBs ;;r:cfdS)Nc(|j|SrI)_reverse_binary_op)r>rKops r8r9z&trivial_binary_right..Ist66r5Ar:r1)rPs`r8trivial_binary_rightrQGs AAr:c@eZdZUejZded<edZedZ edZ edZ edZ edZ ed Zed Zed Zed Zed ZedZedZedZedZedZedZedZedZedZedZedZedZ edZ!edZ"edZ#edZ$edZ%edZ&e'd Z(e'd!Z)e'd"Z*e'd#Z+e'd$Z,e'd%Z-e'd&Z. d^d'Z/d_d(Z0d`d)Z1dad*Z2e3 dbd+Z4e3dcd,Z5 ddd-Z6ded.Z7 dfd/Z8dgd0Z9 dhd1Z:did2Z;did3Zdkd6Z?dkd7Z@dkd8ZAdkd9ZBdkd:ZCdld;ZDdld<ZE dmd=ZF dmd>ZGdad?ZHdad@ZIdndAZJ dodBZKdpdCZLdqdDZMdrdEZNdadFZOdadGZPdadHZQ dsdIZRdadJZSdadKZTdadLZUdidMZVdadNZWdtdOZXdudPZYdvdQZZdadRZ[dwdSZ\dadTZ]dadUZ^dxdVZ_ dydWZ`eadzdXZbead{dYZcedZeedZfedZgedZhedZidZed[<edZjdZed\<y])|DaskExprr_implementation__add____sub____mul__ __truediv____pow____mod____eq____ne____gt____ge____lt____le____and____or__c ||z SrIr1xys r8r9zDaskExpr.b Qr:c ||z SrIr1rds r8r9zDaskExpr.cs QUr:c ||zSrIr1rds r8r9zDaskExpr.ds Ar:c ||zSrIr1rds r8r9zDaskExpr.ergr:allanycountkurtosismaxmeanminskewstdsumvar __invert__absdiffdropnaisnarounduniquec<||_||_||_||_yrI)_call_evaluate_output_names_alias_output_names_version)r>callevaluate_output_namesalias_output_namesversions r8__init__zDaskExpr.__init__ys" &;##5  r:c$|j|SrI)r~)r>dfs r8__call__zDaskExpr.__call__szz"~r:c4ddlm}||jS)Nrr$)r)narwhals._dask.namespacer%r)r>r%s r8__narwhals_namespace__zDaskExpr.__narwhals_namespace__s:T]]33r:cvdfd }j|jjjS)NcZ|Dcgc]}|jddc}Scc}wNr)loc)rresultr>s r8funcz DaskExpr.broadcast..funcs*488<FJJqM!$< <rs` r8 broadcastzDaskExpr.broadcasts< = ~~ "&"="=#77MM   r:c<dfd }||d|jS)Nc |Dcgc]}|j|c}Scc}w#t$r"}|j|x}r||d}~wwxYwrI) _native_frameKeyError_check_columns_exist)r column_nameeerrorevaluate_column_namess r8rz(DaskExpr.from_column_names..funcss (=R'@#$$[1 334I"4MNN5NQ& s +&++ AAArr)r)clsrcontextrs ` r8from_column_nameszDaskExpr.from_column_namess)  "7#$$   r:cZdfd }|||jd|jS)NcdDcgc]}|jjdd|f!c}Scc}wrI)nativeiloc)ricolumn_indicess r8rz*DaskExpr.from_column_indices..funcs(2@AQBIINN1a4(A AAs$-rr)_eval_names_indicesr)rrrrs ` r8from_column_indiceszDaskExpr.from_column_indicess5 B "%"9"9."I#$$   r:c ~dfd }j|jjjS)Ncg} j|} jDcic]\}}||j|}}}|D]}|fi|}|j||Scc}}wrI)r~items_evaluate_single_output_exprappend) rnative_resultsnative_series_listkeyvalueother_native_series native_series result_nativerexpressifiable_argsr>s r8rz%DaskExpr._with_callable..funcs.0N!%B #6";";"=#CR44U;;# #"4 5 $] J6I J %%m4 5" !#sA*rrr)r>rrrs``` r8r<zDaskExpr._with_callables< "~~ "&"="=#77MM   r:c|jdn nfd}t||j|j||jS)Nc |SrIr1) output_namescurrent_alias_output_namesrs r8r9z3DaskExpr._with_alias_output_names..sd+El+S&Tr:)rrrr)rtyper~rr)r>rrrs ` @r8_with_alias_output_namesz!DaskExpr._with_alias_output_namess_%)%=%="| *1T tDz"&"="=1MM   r:c0|jfd|S)Nc||SrIr1)r5rKrs r8r9z'DaskExpr._with_binary..stD%7Hr:)rKr;)r>rrKs ` r8 _with_binaryzDaskExpr._with_binarys""#HPU"VVr:c.|jfd|S)Nc(t||SrIrE)r5rKop_names r8r9z%DaskExpr._binary_op..s5KWT75KE5Rr:)r)r>rrKs ` r8rJzDaskExpr._binary_ops  !RTYZZr:cL|jfd|jdS)Nc||SrIr1)r5rK operator_funcs r8r9z-DaskExpr._reverse_binary_op..s eT :r:literal)ralias)r>rrKs ` r8rOzDaskExpr._reverse_binary_ops'  :E %  r:c dddfd }j|jjjS)Ncjt|||\}}|j|j|dk7dSrr __floordiv__whererseriesrKs r8 _floordivz(DaskExpr.__floordiv__.._floordivs88FEJMFE''.55eqj$G Gr:cl|j}|Dcgc] }|||c}Scc}wrIr)r other_seriesrrrKr>s r8rz#DaskExpr.__floordiv__..funcs4::5ALFJ2hOFIb&,7O OO1rrr#r dx.SeriesrKrrrrr)r>rKrrs`` @r8rzDaskExpr.__floordiv__sg H H'0 H9B H  H  P~~ "&"="=#77MM   r:c dddfd }j|jjjj dS)Ncjt|||\}}|j|j|dk7dSrrrs r8 _rfloordivz*DaskExpr.__rfloordiv__.._rfloordiv s88FEJMFE&&v.55fk4H Hr:cl|j}|Dcgc] }|||c}Scc}wrIr)r other_nativerrrKr>s r8rz$DaskExpr.__rfloordiv__..funcs4::5ALGKBxPVJr6<8P PPrrrrr)rrrrr)r>rKrrs`` @r8 __rfloordiv__zDaskExpr.__rfloordiv__ ss I I'0 I9B I  I  Q~~ "&"="=#77MM  %   r:cBddlmdfd }j|S)Nrrct|jjtj}|j s d}||j jS)Nz<`median` operation not supported for non-numeric input type.)rdtyperrDASK is_numericmedian_approximater3)srmsgrr>s r8rzDaskExpr.median..func!sS,QWWdmm^EXEXYE##%T+C00'')335 5r:)rrrr)narwhals.exceptionsrr<)r>rrs` @r8medianzDaskExpr.medians= 6""4((r:c,|jfdS)Nc&|jSrI)shift)r5ns r8r9z DaskExpr.shift..+s 1 r:r;)r>rs `r8rzDaskExpr.shift*s""#=>>r:cD|r d}t||jdS)Nz:`cum_sum(reverse=True)` is not supported with Dask backendc"|jSrI)cumsumr5s r8r9z"DaskExpr.cum_sum..3  r:NotImplementedErrorr<r>reversers r8cum_sumzDaskExpr.cum_sum-s' NC%c* *""#=>>r:cD|r d}t||jdS)Nz<`cum_count(reverse=True)` is not supported with Dask backendcf|jjtjSrI)rzastypeintrrs r8r9z$DaskExpr.cum_count..:s"$))+0E0Ec0J0Q0Q0Sr:rrs r8 cum_countzDaskExpr.cum_count5s' PC%c* *""#STTr:cD|r d}t||jdS)Nz:`cum_min(reverse=True)` is not supported with Dask backendc"|jSrI)cumminrs r8r9z"DaskExpr.cum_min..Arr:rrs r8cum_minzDaskExpr.cum_min<' NC%c* *""#=>>r:cD|r d}t||jdS)Nz:`cum_max(reverse=True)` is not supported with Dask backendc"|jSrI)cummaxrs r8r9z"DaskExpr.cum_max..Hrr:rrs r8cum_maxzDaskExpr.cum_maxCrr:cD|r d}t||jdS)Nz;`cum_prod(reverse=True)` is not supported with Dask backendc"|jSrI)cumprodrs r8r9z#DaskExpr.cum_prod..Os  r:rrs r8cum_prodzDaskExpr.cum_prodJs' OC%c* *""#>??r:c4|jfdS)NcH|jjSN)window min_periodscenter)rollingrtr5r min_samples window_sizes r8r9z&DaskExpr.rolling_sum..Ss&" F&cer:r;r>rrrs ```r8 rolling_sumzDaskExpr.rolling_sumQs""   r:c4|jfdS)NcH|jjSr )rrprs r8r9z'DaskExpr.rolling_mean..Zs&" F&dfr:r;rs ```r8 rolling_meanzDaskExpr.rolling_meanXs""   r:cX|dk(r|jfdSd}t|)NcH|jjSr )rrurs r8r9z&DaskExpr.rolling_var..d&T\\&K*#%r:z5Dask backend only supports `ddof=1` for `rolling_var`r<rr>rrrddofrs ``` r8 rolling_varzDaskExpr.rolling_var_7 19&&  F!#&&r:cX|dk(r|jfdSd}t|)NrcH|jjSr )rrsrs r8r9z&DaskExpr.rolling_std..prr:z5Dask backend only supports `ddof=1` for `rolling_std`rrs ``` r8 rolling_stdzDaskExpr.rolling_stdkr!r:cDddlm}|j|jSr) dask.arrayarrayr<floorr>das r8r(zDaskExpr.floorws""288,,r:cDddlm}|j|jSr)r&r'r<ceilr)s r8r,z DaskExpr.ceil|""277++r:c|tjn|| tdn|dfd }j|S)Nnanctd||k7}|jd}t|jjrn}|j ||S)NrF)rfillnarrrTmask)r5r2fillr>value_nullable value_numpys r8rzDaskExpr.fill_nan..funcsW TT\2D;;u%D%TZZ1E1EF   99T4( (r:r5rrr)pdNAfloatr<)r>rrr4r5s` @@r8fill_nanzDaskExpr.fill_nans9"'-U&+meEl  )""4((r:c:dfd }|j|S)Nc|j}|Sdk(r|jn|j}|S)Nforward)limit)r1ffillbfill)r5res_serr>strategyrs r8rz DaskExpr.fill_null..funcsR ++e,N 9,JJUJ+%0 Nr:r6r;)r>rrBr>rs ``` r8 fill_nullzDaskExpr.fill_nulls ""4((r:c,|jd||S)Nc(|j||S)N)lowerupperclip)r5 lower_bound upper_bounds r8r9zDaskExpr.clip..s499!4=4r:)rJrKr;)r>rJrKs r8rIz DaskExpr.clips'"" $# #  r:c*|jd|S)Nc&|j|S)N)rFrH)r5rJs r8r9z%DaskExpr.clip_lower..diiki&Br:)rJr;)r>rJs r8 clip_lowerzDaskExpr.clip_lower "" B##  r:c*|jd|S)Nc&|j|S)N)rGrH)r5rKs r8r9z%DaskExpr.clip_upper..rNr:)rKr;)r>rKs r8 clip_upperzDaskExpr.clip_upperrPr:c&|jdS)NcB|jdjS)NF)ry)nuniquer3rs r8r9z#DaskExpr.n_unique..s E 0J0T0T0Vr:r;r>s r8n_uniquezDaskExpr.n_uniques""#VWWr:c2dfd }j|S)Nct|jjj}|j r||k7Sd|d}t |)Nz4`.is_nan` only supported for numeric dtypes and not z, did you mean `.is_null`?)rrrrTrr)r5rrr>s r8rzDaskExpr.is_nan..funcsT, DMM4+?+?E!t|#HOijC', ,r:r6r;rs` r8is_nanzDaskExpr.is_nans -""4((r:c&|jdS)Nc6|jjSrI)sizer3rs r8r9zDaskExpr.len..s 0C0C0Er:r;rWs r8lenz DaskExpr.lens""#EFFr:cV|dk(rdfd }|j|Sd}t|)Nlinearc~|jdkDr d}t||jdjS)NrzK`Expr.quantile` is not supported for Dask backend with multiple partitions.dask)qmethod) npartitionsrquantiler3)r5rrgs r8rzDaskExpr.quantile..funcsC##a'gC-c22}}v%)+r:zx`higher`, `lower`, `midpoint`, `nearest` - interpolation methods are not supported by Dask. Please use `linear` instead.r6r)r>rg interpolationrrs ` r8rgzDaskExpr.quantiles8 H $ &&t, ,I!#&&r:c,dd}|j|S)Nc|j}td|gd}t|j|}t d}|j |fi|j |di|}||j|S)N row_index_n_bytescolumnsprefixFdrop_null_keysrqnamerrto_framergroupbyaggisin)r5_name col_tokenframegroup_by_kwargsfirst_distinct_indexs r8rz(DaskExpr.is_first_distinct..funcsIIE6E7<I"$--/9=E2%HO#05==#J/#J#N#NE"$$ #(()=> >r:r6r;rs r8is_first_distinctzDaskExpr.is_first_distincts ?""4((r:c,dd}|j|S)Nc|j}td|gd}t|j|}t d}|j |fi|j |di|}||j|S)NrkrlrmFrqrors)r5ryrzr{r|last_distinct_indexs r8rz'DaskExpr.is_last_distinct..funcsIIE6E7<I"$--/9=E2%HO"/%--"I"I"M"ME"## #(()<= =r:r6r;rs r8is_last_distinctzDaskExpr.is_last_distincts >""4((r:c,dd}|j|S)Nc|j}td}|jj|fi|j d|t fdk(S)NFrqr^)metar)rtrrurv transformr)r5ryr|s r8rz DaskExpr.is_unique..funcsUIIE2%HO 3"136 5 r:r6r;rs r8 is_uniquezDaskExpr.is_uniques ""4((r:c,|jfdS)Nc&|jSrI)rx)r5rKs r8r9z DaskExpr.is_in..s %0@r:r;)r>rKs `r8is_inzDaskExpr.is_ins""#@AAr:c&|jdS)NcZ|jjjSrI)rzrtr3rs r8r9z%DaskExpr.null_count.. s 0A0K0K0Mr:r;rWs r8 null_countzDaskExpr.null_counts""#MNNr:czdfd }j|jjjS)Nc6|jdddS)NF) descending nulls_last)sort)rorder_byr>s r8rz1DaskExpr._over_without_partition_by..funcseNO Or:rrr#rzSequence[dx.Series]r)r>rrs`` r8_over_without_partition_byz#DaskExpr._over_without_partition_by s= P~~ "&"="=#77MM   r:c s|sJj|Sddlm}j r/ j# jj s d}t ||r d}t |tttjj d}td|j} |j|t||j  d  fd }j#|j$j&j( S#t$r/d|dd j|jd }t |dwxYw)Nr)PandasLikeGroupByzOnly elementary expressions are supported for `.over` in dask backend when `partition_by` is specified. Please see: https://narwhals-dev.github.io/narwhals/concepts/improve_group_by_operation/z4`over` with `order_by` is not yet supported in Dask.r"zUnsupported function: z- in `over` context. Supported functions are z,  c j} j(|jtdt dd|}t |g\}}t j5t jddttd}|jjfi|} dk(rAt|d k7r d }t||j fi j!|d }n|t#|j fi }ddd|j%j}|D cgc]} ||  c} S#1swY7xYwcc} w) NrSrignorez.*`meta` is not specified)messagecategoryFrqr^rz)Safety check failed, please report a bug.r)rprev with_columnsrrrwarningscatch_warningsfilterwarnings UserWarningrrrvr_AssertionErrorrrulist _with_native)rplx_aliasesr|groupedr res_native result_framertdask_function_name dask_kwargsrnodes partition_byr>s r8rzDaskExpr.over..funcEsY--/Cyy$__T*nU3BZQT6U%VW:4RHJAw((* ''&AK#7e"L+"))++LLOL%/7|q(I,S11!2!2!2*".9"hwqz*"Bg!7!A!A*".9"J $??:6==L3:;4L&; ;'  &rrrr leaf_node function_namerrrrrs `` @@@@r8overz DaskExpr.oversfO8228< <D~~  II !$))*B*B_  &c* * HC%c* *Xd4>>#E#E#GHIJ"I 2INNC  5!2!>!>}!M 9 HXHXY  < <6~~ "&"="=#77MM   I 5)8++/995F5R5R+S*TTVX &c* 4  5s D$$8Ec6dfd }j|S)NcRtj}|j|SrI)rrr)r5 native_dtyperr>s r8rzDaskExpr.cast..funchs"3E4==IL;;|, ,r:r6r;)r>rrs`` r8rz DaskExpr.castgs -""4((r:cDddlm}|j|jSr)r&r'r<isfiniter)s r8 is_finitezDaskExpr.is_finitens""2;;//r:cBddlmdfd }|j|S)NrcJj|jz SrI)log)r5baser*s r8_logzDaskExpr.log.._logvs66$<"&&,. .r:r6)r&r'r<)r>rrr*s ` @r8rz DaskExpr.logss /""4((r:cDddlm}|j|jSr)r&r'r<expr)s r8rz DaskExpr.exp{s""266**r:cDddlm}|j|jSr)r&r'r<sqrtr)s r8rz DaskExpr.sqrtr-r:c2dfd }|j|S)Nc|j}|jj|}dk(r|jdS|S)Nrlr)rtrumodehead)r5ryrkeeps r8rzDaskExpr.mode..funcs>IIE]]_))+E2F%)U]6;;q> > >r:r6r;)r>rrs ` r8rz DaskExpr.modes ? ""4((r:ctur d}t|tt||t |dfd }j |j jjS)NzK`replace_strict` requires an explicit value for `default` for dask backend.c2|j} |Dcgc]2}|jj|j|4}} r5t j }|Dcgc]}|j |c}S|Scc}wcc}wrI)rreplacerrxrrr) rdefault_seriesrresultsrresdefaultmappingold_ return_dtyper>s r8rz%DaskExpr.replace_strict..funcs<roldnewrrrrrs `` ` @@r8replace_strictzDaskExpr.replace_strictss j _CS/ !s3}%Cy  ~~ "&"="=#77MM   r:ct|SrIr rWs r8strz DaskExpr.strs &t,,r:ct|SrIr rWs r8dtz DaskExpr.dts (..r:rrstructN) rz$EvalSeries[DaskLazyFrame, dx.Series]rEvalNames[DaskLazyFrame]rAliasNames | Nonerr'rNoner)rr%)rr)rz type[Self]rrrr(rr)rrrr(rr)rCallable[..., dx.Series]rrrr)rrrr)rz%Callable[[dx.Series, Any], dx.Series]rKrrr)rrrKrrr)rrrKrrr)rKrrr)rrrr)rboolrr)rrrrrrrr) rrrrrrrrrr)rz float | Nonerr)rz Self | NonerBzFillNullStrategy | Noner>z int | Nonerr)rJrrKrrr)rJrrr)rKrrr)rgr9rhr,rr)r Sequence[str]rr)rrrrrr)rr*rr)rr9rr)rr+rr) rzDaskExpr | NoDefaultr Sequence[Any]rrrzIntoDType | Nonerr)rr )rr )k__name__ __module__ __qualname__rrrT__annotations__rLrUrVrWrXrYrZr[r\r]r^r_r`rarbrQ__rsub__ __rtruediv____rpow____rmod__r@rkrlrmrnrorprqrrrsrtrurFrvrwrx drop_nullsis_nullr{r|rrrr classmethodrrr<rrrJrOrrrrrrrrr rrr r$r(r,r:rCrIrOrSrXr[r_rgr~rrrrrrrrrrrrrpropertyrrrfilterfirstranklastrrr1r:r8rSrSLsc'5&9&9O^9I&GI&GI&G .KI&GI&G 8 $F 8 $F 8 $F 8 $F 8 $F 8 $FI&G 8 $F#$67H'(:;L#$56H#$67H U #C U #C w 'E!*-H U #C f %D U #C f %D U #C U #C U #C|,J  C  Dx(JF#G ' "E 8 $F  2   8  .       4    7 !     2     ' $    4 W9WBEW W [5>A  $$ )??U??@   ' '03 '=A 'IL '  ' ' '03 '=A 'IL '  '- , )") ),C)LV) )    X )G''.H' '" ) ) )BO  M ^)0 )+ , )! %! !  ! ' !  ! F--// F  E  D  D,-D/--/FO/r:rS)r#r)r6rrr)rPrrr)D __future__rrtypingrrrrpandasr7narwhals._compliantrr narwhals._dask.expr_dtr narwhals._dask.expr_strr narwhals._dask.utilsrrrrnarwhals._expression_parsingrrnarwhals._pandas_like.exprrnarwhals._pandas_like.utilsrrnarwhals._utilsrrrrrrcollections.abcrdask.dataframe.dask_expr dataframe dask_exprdxtyping_extensionsrnarwhals._compliant.typingrr r!r"narwhals._dask.dataframer#rr%narwhals._typingr&r'r(narwhals.typingr)r*r+r,r@rFrLrQrSr1r:r8rs"55;<; [IS 6())& 76*8< B s 0 )*23s 0r: