L iWA@ddlmZddlZddlmZmZmZddlmZddl m Z m Z ddl m Z mZddlmZddlmZdd lmZer4dd lmZdd lmZdd lmZmZmZmZdd lmZddl m!Z!ddlm"Z"m#Z#m$Z$ddl%m&Z&ddddddddddddddddZ' d#dZ(Gd d!ed"efZ)y)$) annotationsN) TYPE_CHECKINGAnycast) EagerExpr)evaluate_nodes!evaluate_output_names_and_aliases)_REMAP_ORDERED_INDEXPandasLikeGroupBy)PandasLikeSeries)make_group_by_kwargs)generate_temporary_column_name)Sequence)Self) AliasNames EvalNames EvalSeriesNarwhalsAggregation)PandasLikeDataFramePandasLikeNamespace)ImplementationVersion_LimitedContext) PythonLiteralcumsumcummincummaxcumprodsummeanstdvarshiftrankdifffillnaquantile)cum_sumcum_mincum_maxcum_prod cum_count rolling_sum rolling_mean rolling_std rolling_varr$r%r& fill_nullr(ewm_meanc|dk(rd|vsJd|di}|S|dk(r%d|vsJd|vsJ|d}|dk(rdn||d d d d }|S|jd rd di}|S|dk(rdd i}|S|jdr#d|vsJd|vsJd|vsJ|d|d|dd}|S|dvrd|vsJd|di}|S|dk(rd|vsJd|vsJ|d|dd}|S|dk(rd|vsJd|vsJ|d|dd}|S|jdrKd |vsJd!|vsJd"|vsJd#|vsJd$|vsJd|vsJd%|vsJ|d |d!|d"|d#|d$|d|d%d&}|S|d'vrdttd(|i}|Si}|S))Nr$nperiodsr%method descendingordinalfirstkeepF)r7 ascending na_optionpctcum_skipnaTn_uniquedropnarolling_ min_samples window_sizecenter) min_periodswindowrF>r"r#ddofr2strategylimit)rJrKr( interpolation)qrLewm_comspan half_lifealphaadjust ignore_nulls)rOrPhalfliferRrSrG ignore_na>lastr:r) startswithr r) function_namekwargs pandas_kwargs_methods `/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_pandas_like/expr.py"window_kwargs_to_pandas_equivalentr^3sf}}3.funcs (=R'@  $ %((5')'9'9 "  334I"4MNN5NQ& s( A 6AA A A6A11A6rjrkrlrmrwrreturnzlist[PandasLikeSeries])rfrg)clsr{contextr|s ` r]from_column_namesz PandasLikeExpr.from_column_namess2  "7#"22$$   r_cpdfd }|||jd|j|jS)Nc|j}Dcgc]*}tj|jdd|f|,c}Scc}w)N)r)nativer from_nativeiloc)rwricolumn_indicess r]r|z0PandasLikeExpr.from_column_indices..funcsHYYF(!,,V[[A->K s/Ar}r~)_eval_names_indicesrfrg)rrrr|s ` r]from_column_indicesz"PandasLikeExpr.from_column_indicess=  "%"9"9."I#"22$$   r_c 4|jd|||||||S)Nr3)rOrPrQrRrSrDrT) _reuse_series)rhrOrPrQrRrSrDrTs r]r3zPandasLikeExpr.ewm_means4!! #%"  r_cdfd }j|jjjjS)Nc 4td|j}|j|djddd} |j |gd} j }||j ry|jj} jj}|Dcgc]=}|j|j|j||j?c}S|j|}|D]}|j!|||Scc}w)Norder_byFr8 nulls_lastT)strict)indexname)rcolumnswith_row_indexsortdrop _metadatais_scalar_likerrrfto_native_namespace _with_nativeSeriesitemr get_column_scatter_in_place) rwtokenresultsmetarnsssorting_indicesrrhs r]r|z7PandasLikeExpr._over_without_partition_by..funcs 21bjjAE=""54"8==eB277E74789G>>DD$7$7 ))==?%NN299QVVXU9#PQ !mmE2O 8##OQ7 8Ns$ADr}rwrrzSequence[PandasLikeSeries]) __class__rdrerfrg)rhrr|s`` r]_over_without_partition_byz)PandasLikeExpr._over_without_partition_bysE ,~~ "&"="=#77//MM   r_c   ssJjSjr/j#jjs d}t |t t t jj d}|jtjjtd}tj| Gdddjtddjtjd}t ||j t!  d    f d }j#|j$j&j(j* S) NzOnly elementary expressions are supported for `.over` in pandas-like backends when `partition_by` is specified. Please see: https://narwhals-dev.github.io/narwhals/concepts/improve_group_by_operation/rzUnsupported function: z- in `over` context. Supported functions are z, z and .c  Jj}j(|jtdt dd|}t |g\}}dk(r-|j|j |j}jdr dvsJd}ndvsJd}rttj|j}td|}|j|j|dj||d }|j!|}nN|rLttj|}|j|j#t%ddd}t'd }|j(j*fi|} jd rS| t|j,d&i} d vrd vsJt/| d } n)t/| } njdrj0j3rFj0j5dkr)dj0j5d} t7| | t|j8d&i} Jt/| } npdk(redvsJdvsJ| t|}ddk(r|j;d} n2ddk(r|j=d} nd} t7| dk(r?t?|dk7r d} tA| | jCdjE|d} n‰dvrtGjH5tGjJd d!"t/| g|d&i}dddjMd#d#$|jNtjQ|t%t|} n| t|jBfi} |jS| }|Dcgc]}|j!|}}rPtGjH5tGjJd d!"|D]}|jU||cdddS|r*|Dcgc]}|j#t%ddd c}S|S#1swY*xYwcc}w#1swYIxYwcc}w)'Nrarr-r?reverseFrrr)drop_null_keysrolling>r"r#rI)rIewm)zpExponentially weighted calculation is not available in over context for pandas versions older than 1.2.0, found rr2rJrKforward)rKbackwardzF`fill_null` with `over` without `strategy` specified is not supported.lenrz)Safety check failed, please report a bug.sizer>rWr:ignorez .*copy of a slice)messageT)rinplace)on)+rqprev with_columnsrrr colis_nullrXlistsetunionr simple_selectrrr _gather_sliceslicer rtgroupbyrgetattrrf is_pandas_backend_versionNotImplementedErrorrffillbfillrAssertionError transformto_framewarningscatch_warningsfilterwarnings reset_indexrmergerr)rwplx_aliasesrrrrgroup_by_kwargsgroupedr res_nativemsgr df_grouped_nth result_framerrrrYrnodesrpandas_function_namer[ partition_by scalar_kwargsrhs r]r|z!PandasLikeExpr.over..func!sF'3 33--/Cyy$__)>%*c+JK;4RHJAw +__gcggw&7&?&?&A%AB''/ M111' 2 555s<066w?EEhOP6q'B$B$$g.#^ED^9T8GM #%--"6s<066w?@%R%%w/==eD$PR>ST2%HO.b&&..|OOG'' 28'$w-088I=I'>9!]222!G2F!G*62"J"H2F!G!IJ))%0''113((99;9OOSOcOcOtOtOvNwwxz.c220gd7m,00A=A+777?WS*>?A +-!]222-///$T']3  , 9!+!1!1 g8N!1!OJ":.*ST7 9, 9 9:WT']3==(,9 ??:6LAHI|..t4IGI,,.#++H>ST$@++OQ?@" ## HOP1dD"(=>PPN3''J##Qs$;1S:S!*2S&,#S2S&S/r}r)rrris_elementwiserrreversediter_nodes_reversedrr _REMAP_AGGSgetr%WINDOW_FUNCTIONS_TO_PANDAS_EQUIVALENTjoinrZr^rrdrerfrg) rhrrr leaf_node pandas_aggr|rYrrrr[rs ``` @@@@@@r]overzPandasLikeExpr.oversO8228< <~~ TYY2499;S;S_  &c* *Xd4>>#E#E#GHIJ"I ! &2266 & 6  EHH :  '(8++/995Z+[*\]yy!2!>!>?@C  &c* *!(( :=-X a a F~~ "&"="=#77//MM   r_N) riz1EvalSeries[PandasLikeDataFrame, PandasLikeSeries]rjEvalNames[PandasLikeDataFrame]rkzAliasNames | NonerlrrmrrNone)rr)rz type[Self]r{rrrrr)rintrrrr)rO float | NonerPrrQrrRrrSboolrDrrTrrr)r Sequence[str]rr)rrrrrr) __name__ __module__ __qualname__rnrq classmethodrrr3rrrr_r]rarays  ?   >  .  '       P   = !     <               ,  DT )T 5BT T r_rar)rYstrrZzdict[str, Any]rzdict[str, PythonLiteral])* __future__rrtypingrrrnarwhals._compliantrnarwhals._expression_parsingrr narwhals._pandas_like.group_byr r narwhals._pandas_like.seriesr narwhals._pandas_like.utilsr narwhals._utilsrcollections.abcrtyping_extensionsrnarwhals._compliant.typingrrrrnarwhals._pandas_like.dataframerrprrrrnarwhals.typingrrr^rarr_r]r s"++)ZR9<:(& DCHH-   %)%,CC .CCLQ Y46FFGQ r_