L i?UddlmZddlZddlmZddlmZmZmZddl Z ddl m cm Z ddlmZddlmZmZmZddlmZddlmZmZmZmZmZmZmZmZdd lm Z erwdd l!m"Z"m#Z#m$Z$m%Z%dd l&m'Z'dd l m(Z(ddl)Z*ddl+Z,dd l-m.Z.ddl/m0Z0m1Z1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8ddl9m:Z:ddl;mm?Z?ddl@mAZAddlBmCZDddlEmFZFmGZGmHZHdZIdeJd<GddedeZKy)) annotationsN)BytesIO) TYPE_CHECKINGAnycastIbisExpr)evaluate_exprslitnative_to_narwhals_dtype) SQLLazyFrame)ImplementationValidateBackendVersionVersiongenerate_temporary_column_namenot_implementedparse_columns_to_dropto_pyarrow_table zip_strict)InvalidOperationError)IterableIteratorMappingSequence)Path) ModuleType)Binary)Self TypeAliasTypeIs)CompliantDataFrameAny IbisGroupBy IbisNamespaceIbisInterchangeSeries)_EagerAllowedImpl)_LimitedContext) LazyFrame)DType DataFrame)AsofJoinStrategy JoinStrategyUniqueKeepStrategyz*Sequence[ir.BooleanColumn] | Sequence[str]rJoinPredicatesc>eZdZejZdd d,dZed-dZe d.dZ d/dZ d0dZ d0dZ d1d Zd2d Zd3d Zd4d Z d5d Zd6dZd7dZd8dZd8dZd9dZd:d;dZd8dZddZd?dZd@dZdAdZ dBdZ! dCdZ"dDdZ#edEdZ$ dFd Z% dGd!Z& dHd"Z'd=d#Z( dId$Z)dJd%Z*dKd&Z+dLd'Z,dMd(Z- dNd)Z.dOd*Z/dPd+Z0e1Z2y)Q IbisLazyFrameF)validate_backend_versioncb||_||_d|_d|_|r|j yyN) _native_frame_version_cached_schema_cached_columns_validate_backend_version)selfdfversionr4s ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_ibis/dataframe.py__init__zIbisLazyFrame.__init__7s7(* 7;15 #  * * , $c6t|tjSr6) isinstanceirTable)objs r? _is_nativezIbisLazyFrame._is_nativeAs#rxx((rAc*|||jSNr>)r8)clsdatacontexts r? from_nativezIbisLazyFrame.from_nativeEs4!1!122rAc|jtjurddlm}||dS|jj |dS)Nrr, interchange)levellazy)r8rV1narwhals.stable.v1r- lazyframe)r<r-s r? to_narwhalszIbisLazyFrame.to_narwhalsIs< ==GJJ & 4T7 7}}&&t6&::rAcX|jtjur d}t||S)Nz;__narwhals_dataframe__ is not implemented for IbisLazyFrame)r8rrSAttributeError)r<msgs r?__narwhals_dataframe__z$IbisLazyFrame.__narwhals_dataframe__Ps' == *OC % % rAc|Sr6r<s r?__narwhals_lazyframe__z$IbisLazyFrame.__narwhals_lazyframe__Ws rActSr6)ibisr]s r?__native_namespace__z"IbisLazyFrame.__native_namespace__Zs rAc4ddlm}||jS)Nrr$rJ)narwhals._ibis.namespacer%r8)r<r%s r?__narwhals_namespace__z$IbisLazyFrame.__narwhals_namespace__]s:T]]33rAchddlm}||jj||jS)Nrr&rJ)narwhals._ibis.seriesr'nativeselectr8)r<namer's r? get_columnzIbisLazyFrame.get_columnbs%?$T[[%7%7%=t}}UUrAc#PK|jD]}|j|ywr6)columnsrg)r<ris r? _iter_columnszIbisLazyFrame._iter_columnsgs(LL $D++d# # $s$&c ||tjur=ddlm}|t |j j d|jdS|tjurCddl m }||j jtjd|jdS|tjur3ddl m}||j jd|jSd |}t!|) Nr)ArrowDataFrameT)r4r>validate_column_names)PandasLikeDataFrame)implementationr4r>rp)PolarsDataFrame)r4r>zUnsupported `backend` value: )rPYARROWnarwhals._arrow.dataframerorrg to_pyarrowr8PANDASnarwhals._pandas_like.dataframerq to_pandasPOLARSnarwhals._polars.dataframers to_polars ValueError)r<backendkwargsrorqrsrYs r?collectzIbisLazyFrame.collectks ?g)?)?? @! !7!7!9:)- &*   n++ + K& %%'-44)- &*   n++ + B" %%')-   .gY7orAcV|j|jj|Sr6) _with_nativerghead)r<ns r?rzIbisLazyFrame.heads"  !1!1!!455rAcR|j|jj|Sr6)rrgrh)r< column_namess r? simple_selectzIbisLazyFrame.simple_selects%  !3!3!3\!BCCrAc t|g|Dcgc] \}}td|j|"}}}|j|jj |Scc}}w)Nz ir.Scalar)r rrirrg aggregate)r<exprsrival selections r?rzIbisLazyFrame.aggregatese,D959 c chhtn -    !6!6y!ABB  s%A"ct|g|Dcgc]\}}|j|}}}|s d}t||jj|}|j |Scc}}w)NzKAt least one expression must be provided to `select` with the Ibis backend.)r rir}rgrhr)r<rrirrrYts r?rhzIbisLazyFrame.selectsj5CD5Q55QR cSXXd^R R_CS/ ! DKK   *  ## SsA'ct|||fd|jD}|j|jj|S)N)strictc3,K|] }|vs| ywr6r\).0colcolumns_to_drops r? z%IbisLazyFrame.drop..sOSC4NSOs )rrlrrgrh)r<rlrrrs @r?dropzIbisLazyFrame.dropsB/gfMODLLO   !3!3!3Y!?@@rANc $| d}t||S)Nz,`backend` argument is not supported for Ibis)r})r<r~_rYs r?rRzIbisLazyFrame.lazys  @CS/ ! rActt|g|}|j|jjdi|S)Nr\)dictr rrgmutate)r<rnew_columns_maps r? with_columnszIbisLazyFrame.with_columnss<~d;U;<  !3!3!3!Fo!FGGrActd||d}|j|jj|S)Nzir.BooleanValuer)rrrgfilter)r< predicatemasks r?rzIbisLazyFrame.filters8%yq'9:  !3!3D!9::rAc |j_|jjjj Dcic]\}}|t ||j c}}|_|jScc}}wr6)r9rgschemafieldsitemsr r8r<ridtypes r?rzIbisLazyFrame.schemaso    & $(;;#5#5#7#>#>#D#D#F#D%.udmmDD#D """ #s!A8c|jE|jt|jnt|jj |_|jSr6)r:r9listrrgrlr]s r?rlzIbisLazyFrame.columnssR    '&&2T[[!$++--.  ###rAc6|jjSr6)rgryr]s r?ryzIbisLazyFrame.to_pandass{{$$&&rAc6|jjSr6)rgrvr]s r?to_arrowzIbisLazyFrame.to_arrows{{%%''rAc<|j|j|SrI) __class__rg)r<r>s r? _with_versionzIbisLazyFrame._with_versions~~dkk7~;;rAc<|j||jSrI)rr8)r<r=s r?rzIbisLazyFrame._with_natives~~b$--~88rAc$ddlm}||||S)Nrr")drop_null_keys)narwhals._ibis.group_byr#)r<keysrr#s r?group_byzIbisLazyFrame.group_bys 84nEErAcddfd }|j|jj|S)Nc(j||Sr6)get)rmappings r?_renamez%IbisLazyFrame.rename.._renames;;sC( (rA)rstrreturnr)rrgrename)r<rrs ` r?rzIbisLazyFrame.renames* )  !3!3G!<==rAcpt|jj|}|r|j|S|S)zWIbis adds a suffix to the right table col, even when it matches the left during a join.)setrl intersectionr)r=rl duplicatess r?_join_drop_duplicate_columnsz*IbisLazyFrame._join_drop_duplicate_columnss4_11': '1wrww #9r9rAc|dk(rdn|}dz}||k(r)|j|jj}|dk(r9|jj|j||}|j|S|J|J|j |||} |jj|j| ||}|dk(rfd|D} |j || }d| D} g} | D]R} | j j}||jvs(| jj|k7sB| j|T| r|j| }|j|S) Nfullouter{name}cross)howrnameleftc3(K|] }|z ywr6r\rrsuffixs r?rz%IbisLazyFrame.join.. 8!1v:8c3rK|]/}t|trtd|j1yw)rN)rCrrop)rps r?rz%IbisLazyFrame.join.. s'WQJqRUDV$x(Ws77) rrgviewjoin_convert_predicatesrrightrirlrappendr)r<otherrleft_onright_onr how_nativerjoined predicates right_namesitto_droppredrs ` r?rzIbisLazyFrame.joinsb!$v W3 6! D=%%ell&7&7&9:E  [[%%ell %%PF$$V, ,"""###--eWhG !!%,, RW!X  8x8K66v{KFW*WBG *  ,51HNN5)  * $g.  ((rAcdz}tjtjd} g} | j|x} r$| |j||j|} n d} t | |||j |||} |jj|j| | |}|j||zg}|fd|D}|j||}|j|S)Nr)backwardforwardzIOnly `backward` and `forward` strategies are currently supported for Ibis)rc3(K|] }|z ywr6r\rs r?rz*IbisLazyFrame.join_asof../rr) operatorgelerrgNotImplementedErrorr asof_joinrr)r<rrrby_leftby_rightstrategyrr strategy_oprronrYrrs ` r? join_asofzIbisLazyFrame.join_asofs6!#+;;8;;G %' * *2 *#%dkk'&:ELL;;$$&++F3D??$))&1CF:D DKK   2(D!1 2 VDFF8$A. / T(^   $$rAcddlm}|j|||d}|j|jj |S)Nrrr)narwhals._ibis.exprr rrrgr)r<rrbyr colss r?sortzIbisLazyFrame.sort`s<0x~~rjZP  !5!5!5t!<==rAcddlm}t|tr| n|Dcgc]}| c}}|j||dd}|j |j j|j|Scc}w)NrrTr) rr rCboolrrrgrr)r<krreverser eldescrs r?top_kzIbisLazyFrame.top_kfsl0($77{w=W"f=Wx~~rdtD  !5!5!5t!Xs A5cv||n |j}|j|jj|Sr6)rlrrg drop_null)r<rrs r? drop_nullszIbisLazyFrame.drop_nullsms2".&DLL  !6!6w!?@@rAc:|jj}|j}|D]'}||}||jk7sd|d}t |t |dk7r d}t ||j|jj|ddS)Nz-`explode` operation not supported for dtype `z`, expected List typerzExploding on multiple columns is not supported with Ibis backend since we cannot guarantee that the exploded columns have matching element counts.rT) keep_empty) r8dtypesrListrlenrrrgunnest)r<rlrrrrrYs r?explodezIbisLazyFrame.explodeqs%%$$& 1C3KE #CE7K)),C00 1 w<1 ^ &c* *  !3!3GAJ4!3!PQQrAcDddlm}|gn|}||jDcgc] }||vs| c}n|}ttj g|||} |j j|j|||} |j| j| Scc}w)Nr)names_to values_to) ibis.selectors selectorsrlrrfromkeysrg pivot_longerrrrh) r<rindex variable_name value_namesindex_con_ final_columns unpivoteds r?unpivotzIbisLazyFrame.unpivots #&+m<>J 81Q 8B T]]+OV+O]+OJ+OPQ KK,, AFFCL=J-   !1!1!1=!ABB 9s BBctjjtj|j |tj j g}|j|jj|S)N)r) r`rrrrir'allrrgrh)r<rir to_selects r?with_row_indexzIbisLazyFrame.with_row_indexsg OO  " "4;;#A B G G M NN      !3!3!3Y!?@@rActt|tr d}t||jj |y)Nz5Writing to BytesIO is not supported for Ibis backend.)rCrrrg to_parquet)r<filerYs r? sink_parquetzIbisLazyFrame.sink_parquets. dG $IC%c* * t$rA)r=ir.Tabler>rr4rrNone)rFzir.Table | AnyrzTypeIs[ir.Table])rLr<rMr)rr)r+LazyFrame[ir.Table] | DataFrameV1[ir.Table])rr)rr)rr%)rirrr')rzIterator[ir.Expr])r~z_EagerAllowedImpl | Nonerrrr!)rintrr)rrrr)rr rr)rl Sequence[str]rrrrr6)r~r=rr=rr)rr rr)rzdict[str, DType])rz list[str])rz pd.DataFrame)rzpa.Table)r>rrr)r=r<rr)rz"Sequence[str] | Sequence[IbisExpr]rrrr#)rzMapping[str, str]rr)r=r<rl Iterable[str]rr<) rrrr/rSequence[str] | NonerrBrrrr)rrrrrrrrBrrBrr.rrrr)rrrr@rr@rr1)rrBrr0rrBrr)rrrbool | Sequence[bool]rrrr)rr?rrArrCrr)rrBrr)rlr@rr) rrBr*rBr+rr,rrr)rirrr@rr)r:zstr | Path | BytesIOrr=)3__name__ __module__ __qualname__rIBIS_implementationr@ staticmethodrG classmethodrNrVrZr^rardrjrmrrrrrhrrRrrpropertyrrlryrrrrrrrrrrr rrrr"r3r7r;r_evaluate_window_exprr\rAr?r3r31s%))OSX--(/-KO- -))33;4 V $"/";>" "H6DC$A H; ##$$'(<9F6FKOF F> :: ")") ") & ") ' ")") ")H)) )  ) & )')#)) )8  $1 =J   %$%! % ' %  %:> FAR,C C$C C  C  C,A%,-rAr3)r r<r>)L __future__rriortypingrrrr`ibis.expr.typesr typesrDrr narwhals._ibis.utilsr r r narwhals._sql.dataframer narwhals._utilsrrrrrrrrnarwhals.exceptionsrcollections.abcrrrrpathlibrrpandaspdpyarrowpaibis.expr.operationsrtyping_extensionsrrr narwhals._compliant.typingr!rr#rcr%rfr'narwhals._typingr(r)narwhals.dataframer*narwhals.dtypesr+rTr- DataFrameV1narwhals.typingr.r/r0r1__annotations__r3r\rAr?res"++ (NN0   6EE +99@36;2/,%;RR LNILz.VWz.rA