L iSJUddlmZddlmZmZddlmZddlm Z m Z ddl m Z m Z ddlmZddlmZmZmZmZmZmZmZmZmZddlmZdd lmZersdd lmZm Z m!Z!m"Z"dd l#m$Z$dd l%m&Z&dd l'm(Z(ddl)mcm*Z+ddl,m-Z-m.Z.m/Z/ddl0m1Z1ddl2m3Z3ddl4m5Z5ddl6m7Z7ddl8m9Z9ddlm:Z:m;Z;ddlm?Z?ddlm@Z@ddlmAZAmBZBmCZCdZDdeEd< GddedeZFy)) annotations) TYPE_CHECKINGAnyN) add_row_indexevaluate_exprs)native_to_narwhals_dtypeselect_columns_by_name) assert_never) ImplementationValidateBackendVersion_remap_full_join_keyscheck_column_names_are_uniquecheck_columns_existgenerate_temporary_column_namenot_implementedparse_columns_to_drop zip_strict)MultiOutputExpressionError)CompliantLazyFrame)IterableIteratorMappingSequence)BytesIO)Path) ModuleType)Self TypeAliasTypeIs)CompliantDataFrameAny)DaskExprDaskLazyGroupBy DaskNamespace)_EagerAllowedImpl)Version_LimitedContext) LazyFrame)DType)ColumnNotFoundError)AsofJoinStrategy JoinStrategyUniqueKeepStrategyrr IncompleteceZdZejZdd d/dZed0dZe d1dZ d2dZ d3dZ d4dZ d5d Zd6d Zd7d Zd8d Zd9d Zd:dZd;dZ ddZd?dZd;dZd;dZd@dZedAdZdAdZdBdZdCdZ dDdZ!dEdZ" dFdZ#dGdZ$dHdZ% dId Z& dId!Z' dId"Z(dJd#Z) dKd$Z* dKd%Z+ dLd&Z, dMd'Z- dNd(Z. dOd)Z/dEd*Z0dPd+Z1 dQd,Z2dRd-Z3e4Z5y.)S DaskLazyFrameF)validate_backend_versioncb||_||_d|_d|_|r|j yyN) _native_frame_version_cached_schema_cached_columns_validate_backend_version)selfnative_dataframeversionr2s ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_dask/dataframe.py__init__zDaskLazyFrame.__init__:s7,< 7;15 #  * * , $c6t|tjSr4) isinstancedd DataFrame)objs r= _is_nativezDaskLazyFrame._is_nativeHs#r||,,r?c*|||jSNr<)r6)clsdatacontexts r= from_nativezDaskLazyFrame.from_nativeLs4!1!122r?c<|jj|dS)Nlazy)level)r6 lazyframer:s r= to_narwhalszDaskLazyFrame.to_narwhalsPs}}&&t6&::r?c|jtjur|jjSdt |j}t |)NzExpected dask, got: )_implementationr DASKto_native_namespacetypeAssertionError)r:msgs r=__native_namespace__z"DaskLazyFrame.__native_namespace__SsN   >#6#6 6'';;= =$T$*>*>%?$@AS!!r?c4ddlm}||jS)Nrr$rH)narwhals._dask.namespacer%r6)r:r%s r=__narwhals_namespace__z$DaskLazyFrame.__narwhals_namespace__Zs:T]]33r?c|Sr4rQs r=__narwhals_lazyframe__z$DaskLazyFrame.__narwhals_lazyframe___s r?c<|j|j|SrG) __class__native)r:r<s r= _with_versionzDaskLazyFrame._with_versionbs~~dkk7~;;r?c<|j||jSrG)rbr6)r:dfs r= _with_nativezDaskLazyFrame._with_nativees~~b$--~88r?c0t||jS)N) available)rcolumns)r:subsets r=_check_columns_existz"DaskLazyFrame._check_columns_exisths"6T\\BBr?c#XK|jjD] \}}| ywr4)rcitems)r:_colsers r= _iter_columnszDaskLazyFrame._iter_columnsks+**, ID#I s(*cd|j|}t|dk7r d}t||dS)Nz4multi-output expressions not allowed in this contextr)_calllenr)r:rDresultsrYs r=_evaluate_single_output_exprz*DaskLazyFrame._evaluate_single_output_expros5))D/ w<1 HC,S1 1qzr?c t|g|}|j|jjdit |S)Nr_)rrgrcassigndict)r:exprs new_seriess r= with_columnszDaskLazyFrame.with_columnsvs<#D151   !3!3!3!Gd:6F!GHHr?c |jjd i|}||tjur+ddlm}||tjd|j dS|tjur.ddl}ddl m }||j|d|j S|tjur9ddl }ddlm}||j j|d|j dSd |} t#| ) Nr)PandasLikeDataFrameT)implementationr2r<validate_column_names)PolarsDataFrame)r2r<)ArrowDataFrame)r2r<rzUnsupported `backend` value: r_)rccomputer PANDASnarwhals._pandas_like.dataframerr6POLARSpolarsnarwhals._polars.dataframer from_pandasPYARROWpyarrownarwhals._arrow.dataframerTable ValueError) r:backendkwargsresultrplrparrYs r=collectzDaskLazyFrame.collectzs%$$.v. ?g)>)>> K&-44)- &*   n++ +  B"v&)-   n,, , @!$$V,)- &*  .gY7or?c|jJ|jt|jn#|jj j |_|jSr4)r8r7listschemarcrjtolistrQs r=rjzDaskLazyFrame.columnssV    '&&2T[[![[((//1  ###r?ch||d}|j|jj|S)Nr)rgrcloc)r: predicatemasks r=filterzDaskLazyFrame.filters.q!  !677r?c||j}t|t||j}|j |Sr4)rcr rrTrg)r: column_namesrfrcs r= simple_selectzDaskLazyFrame.simple_selects5'D,>@T@TU  ((r?c t|g|}tj|Dcgc]\}}|j|c}}d}|j |Scc}}w)Nrs)axis)rrBconcatrenamerg)r:r{r|namevalrfs r= aggregatezDaskLazyFrame.aggregatesP#D151 YY*EYT3 4(EA N  $$FsA c t|g|}|j}t|jdit ||Dcgc]}|d c}|j }|j |Scc}w)Nrr_)rrcr ryrzrTrg)r:r{r|rfss r=selectzDaskLazyFrame.selectsm#D151  # BII )Z( )% &aQqT &      $$ 's A+ c|)|j|jjS|j}|j |j |j d}|j|S)NT) ignore_nulls)rgrcdropnar]any_horizontalcolis_nullr)r:rkplxrs r= drop_nullszDaskLazyFrame.drop_nullssn >$$T[[%7%7%9: :))+""7377F#3#;#;#=D"QQ{{4  r?c |jb|jj}|jjDcic]'}|t |||j |j )c}|_|jScc}wr4)r7rcdtypesrjrr6rT)r: native_dtypesrs r=rzDaskLazyFrame.schemas|    & KK..M  ;;.. #-!#& t7K7K#D  """ #s,A;c|jSr4)rrQs r=collect_schemazDaskLazyFrame.collect_schemas {{r?ctt|||}|j|jj|S)Nstrictrj)rrgrcdrop)r:rjrto_drops r=rzDaskLazyFrame.drops3'gfE  !1!1'!1!BCCr?c|%|jt|j|S|j}|j}|j ddj |j}|j|jdjg||j ddjz }|j|j||j|S)NrsdtypeF)reverse) partition_byorder_by) rgrrcr]rjlitalias broadcastrcum_sumoverr}r)r:rrrrj const_exprrow_index_exprs r=with_row_indexzDaskLazyFrame.with_row_indexs  $$]4;;%EF F))+,,WWQdW+11$7AAC GGDM ! !% ! 0 5 52PX 5 Yggatg$..0 1   ,33NGCGGWDUVVr?cX|j|jj|S)Nr)rgrcr)r:mappings r=rzDaskLazyFrame.renames%  !3!3G!3!DEEr?c\|j|jj|ddS)NFnr npartitions)rgrchead)r:rs r=rzDaskLazyFrame.heads*  !1!1AuRT!1!UVVr?c<|r|j|x}r||dk(r|xs |j}td|d}|jj |j j |}||dk(}|jj|}|jj||d}nSd d ij||} |r|j|d d d j} n |j} | j|| }|j|S)Nnonecount_n_bytesrjprefixrsrinner)onhowanyfirstF) descending nulls_last)rkkeep)rlrjrrcgroupbysizer reset_indexrmergegetsortdrop_duplicatesrg) r:rkrrerrortokenrpuniquer mapped_keeprcs r=rzDaskLazyFrame.uniques  9 9& AAuAK 6>+t||F26(E++%%f-224;;EBCcQh-C__&++E+:F[[&&v&g&FF '*..tT:K"H5QXX++6 +LF  ((r?ct|tr| }n|Dcgc]}| }}|rdnd}|j|jj t |||Scc}w)Nlastr) ascending na_position)rAboolrgrc sort_valuesr)r:rrbyrdpositions r=rzDaskLazyFrame.sortsf j$ '/9>I(231Q3I3'6W  KK # #DH x # X  4s A!c|j}|jt|}t|trXt fd|DrD|r!|j |j||S|j |j||St|tr|gt|z}|j |j|t|j|ddS)Nc3DK|]}|jywr4) is_numeric).0xrs r= z&DaskLazyFrame.top_k..s,PVAY-A-A-C,Ps )rFrr) rcrrrArallrg nsmallestnlargestrurr)r:krrrfrs @r=top_kzDaskLazyFrame.top_ks [[ "X gt $,PR,P)P((a)<==$$R[[B%78 8 gt $i#b')G  NN2gN 7 < <U =   r?cZ|jj|j||dd|fS)Nrleft_onright_onrsuffixes)rcr)r:otherrrsuffixs r= _join_innerzDaskLazyFrame._join_inner+s7{{  LL&\ !  r?c|jj|jd||d|f}t||Dcgc] \}}||k7r||jvr|n||"}}}|j |Scc}}w)Nleftrrrrrr)rcrrrjr) r:r rrr  result_nativeleft_key right_keyextras r= _join_leftzDaskLazyFrame._join_left6s )) LL&\ * (2'8'D #)H$#$,,6Iyk&> >GX  DKK   0)Q 0 U# ##5y!n5!"f T)T $ r?c |j|t|tt||}|jj |d||S)Nr columns_to_selectcolumns_mappingr)rrr)_join_filter_renamerrzziprcr)r:r rrrs r= _join_semizDaskLazyFrame._join_semiisY//"8n Xw!780 {{  gw!  r?c (tdg|j|jd}|j|t|t t ||}|j j|d|||}|||dk(j|gS) Nrjoin_indicator_rr r )r indicatorrr left_onlyr) rrjr#rrzr$rcrr)r:r rrindicator_tokenrrfs r= _join_antizDaskLazyFrame._join_antius9>> >GX //"8n Xw!780 [[   %  "_%45::OCT:UUr?c|j}t|||jj|j S)zHelper function to avoid creating extra columns and row duplication. Used in `"anti"` and `"semi`" join's. Notice that a native object is returned. r)rcr rTrr)r:r r!r"rs r=r#z!DaskLazyFrame._join_filter_renames;$)<<  #<1BDDXDX Y VOV , _  r?c|dk(r|j||}n|| t|||dk(r|j||||}nu|dk(r|j|||}n[|dk(r|j |||}nA|dk(r|j ||||}n&|d k(r|j ||||}n t||jS) Ncross)r r r)r rrr anti)r rrsemir full) rrr r+r%rrr rg)r:r rrrr rs r=joinzDaskLazyFrame.joins '>%%E&%AF _ 0Wh/ / G^%%Wx&FF]__5'H_UF F]__5'H_UF F]__Wx%FF]__Wx%F    ((r?c |j}|j|j|j|j|||||d|fS)Nr)rrleft_byright_by directionr)rZrg merge_asofrc) r:r rrby_leftby_rightstrategyr rs r= join_asofzDaskLazyFrame.join_asofsZ'')  NN  !!"f    r?c$ddlm}||||S)Nrr")drop_null_keys)narwhals._dask.group_byr#)r:keysr=r#s r=group_byzDaskLazyFrame.group_bys <tT.IIr?c|j}|j}|dk(r,|j|jj|dSd}t |)NrsF)rrzL`LazyFrame.tail` is not supported for Dask backend with multiple partitions.)rcrrgtailNotImplementedError)r:r native_frame n_partitionsrYs r=rBzDaskLazyFrame.tailsX{{ #// 1 $$T[[%5%55%5%IJ J Z "#&&r?ctd|jd}|j}|j|dj }|j|dj }|jddj }|j |dj |j||k\|j||z |z|k(zj|gdS) Nr row_index_rrr)rFr) rrjr]rrrrrr)r:roffsetrow_index_tokenr offset_exprn_expr zero_exprs r= gather_everyzDaskLazyFrame.gather_everys8t||L ))+ggfDg1;;= $'113GGATG*446   $  ? V)[8GGO,{:fD QST?#ET 2  r?c^|j|jj||||S)N)id_vars value_varsvar_name value_name)rgrcmelt)r:rindex variable_namerRs r=unpivotzDaskLazyFrame.unpivots:  KK  &%    r?c:|jj|yr4)rc to_parquet)r:files r= sink_parquetzDaskLazyFrame.sink_parquet s t$r?N)r; dd.DataFramer<r'r2rreturnNone)rDzdd.DataFrame | Anyr\zTypeIs[dd.DataFrame])rJr[rKr(r\r)r\LazyFrame[dd.DataFrame])r\r)r\r%)r\r)r<r'r\r)rfrr\r)rk Sequence[str]r\zColumnNotFoundError | None)r\zIterator[dx.Series])rDr!r\z dx.Series)r{r!r\r)rz_EagerAllowedImpl | Nonerrr\r )r\ list[str])rr!r\r)rstrr\r)rkSequence[str] | Noner\r)r\zdict[str, DType])rjr_rrr\r)rrarrbr\r)rzMapping[str, str]r\r)rintr\r)rkrbrr.rrbr\r)rrarbool | Sequence[bool]rrr\r)rrcrz Iterable[str]rrdr\r) r rrr_rr_r rar\r[)r rr rar\r[)r rrr_rr_r\r[)r rr!r`r"zdict[str, str]r\r[) r rrr-rrbrrbr rar\r)r rrrarrar8rbr9rbr:r,r rar\r)r?z"Sequence[str] | Sequence[DaskExpr]r=rr\r#)rrcrHrcr\r) rrbrTrbrUrarRrar\r)rYzstr | Path | BytesIOr\r])6__name__ __module__ __qualname__r rUrTr> staticmethodrE classmethodrLrRrZr]r`rdrgrlrqrwr}rpropertyrjrrrrrrrrrrrrrrr rrrr%r+r#r2r;r@rBrMrVrZrexploder_r?r=r1r14sN%))O*/ -& - - #' -  ---33;"4 <9CI(/(;>( (T$$8 ) % %! # #D WFW)$)! ) ' )  )6     '4  @M  WZ    11'41@M1WZ1 1"  '4 @M WZ  $    '4  @M    VV'4V@MV V(  .7 JX  "!)!) !) & !) ' !)!) !)F      &  ' #    2J6JKOJ J ' "  $       %Gr?r1)r!r[r^)G __future__rtypingrrdask.dataframe dataframerBnarwhals._dask.utilsrrnarwhals._pandas_like.utilsrr narwhals._typing_compatr narwhals._utilsr r r rrrrrrnarwhals.exceptionsrnarwhals.typingrcollections.abcrrrriorpathlibrtypesrdask.dataframe.dask_expr dask_exprdxtyping_extensionsrrrnarwhals._compliant.typingr narwhals._dask.exprr!r>r#r\r%narwhals._typingr&r'r(narwhals.dataframer)narwhals.dtypesr*r+r,r-r.r/__annotations__r1r_r?r=rs"%>X0   ;.EE ))99@,7628,%7RR IX LMX r?