L iO$ddlmZddlmZmZmZddlZddlm Z ddl m Z ddl mZddlmZmZddlmZmZmZddlmZer*dd lmZdd lmZdd lmZdd lm Z dd l!m"Z"m#Z#m$Z$ddlm%Z%m&Z&Gddede fZ'y)) annotations) TYPE_CHECKINGAnycastN) ArrowSeries) EagerExpr)evaluate_nodes!evaluate_output_names_and_aliases)Implementationgenerate_temporary_column_namenot_implemented)col)Sequence)Self)ArrowDataFrameArrowNamespace) AliasNames EvalNames EvalSeries)Version_LimitedContextceZdZUejZded<ejd ddZe ddZ eddZ ddZ dd  dd Z dd Z dd ZeZy ) ArrowExprr _implementation)implementationc<||_||_||_||_y)N)_call_evaluate_output_names_alias_output_names_version)selfcallevaluate_output_namesalias_output_namesversionrs Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/narwhals/_arrow/expr.py__init__zArrowExpr.__init__ s" &;##5  c<dfd }||d|jS)Nc |Dcgc]'}t|j|||j)c}Scc}w#t$r"}|j |x}r||d}~wwxYw)N)namer&)rnativer!KeyError_check_columns_exist)df column_nameeerrorevaluate_column_namess r'funcz)ArrowExpr.from_column_names..func6s  (=R'@ $  +.["++  334I"4MNN5NQ& s% A,<AA A, A''A,r$r%r&r0rreturnzlist[ArrowSeries])r!)clsr4contextr5s ` r'from_column_nameszArrowExpr.from_column_names.s)  "7#$$   r)cZdfd }|||jd|jS)Nc|j}|j}Dcgc] }tj|||||"c}Scc}w)N)r,r:)r-columnsr from_native)r0tblcolsicolumn_indicess r'r5z+ArrowExpr.from_column_indices..funcLsN))C::D(''AT!WbI s%Ar6r7)_eval_names_indicesr!)r9r:rCr5s ` r'from_column_indiceszArrowExpr.from_column_indicesJs4  "%"9"9."I#$$   r)c4ddlm}||jS)Nrr)r&)narwhals._arrow.namespacerr!)r"rs r'__narwhals_namespace__z ArrowExpr.__narwhals_namespace__[s<dmm44r)F)returns_scalarc|rddiSiS)N_return_py_scalarF)r"rIs r'_reuse_series_extra_kwargsz$ArrowExpr._reuse_series_extra_kwargs`s0>#U+E2Er)csJjdfd }j|jjjS)Nc @td|j}|j|djddd}|j |gd}Xj rLt |}|Dcgc]5}|jtj|j|7c}Stj|j|j}|Dcgc],}|j|jj|.c}Scc}wcc}w)N)order_byF descending nulls_lastTstrict)r r>with_row_indexsortdropis_scalar_likelen _with_nativeparepeatitempc sort_indices get_columnr-take) r0tokenresultssizessorting_indicesmetarQr"s r'r5z2ArrowExpr._over_without_partition_by..funcks21bjjAE=""54"8==eB277E74789GD$7$72wKRSaryy4'@ASS !oobmmE.B.I.IJOLSTqANN188==#ABT T T Us 3:D"1Dr6r0rr8zSequence[ArrowSeries]) _metadata __class__rr r!)r"rQr5ris`` @r'_over_without_partition_byz$ArrowExpr._over_without_partition_byesOx~~ U$~~ "&"="=#77MM   r)cssJjSjrOjjjr"j #j j s d}t|tttjjdfd }j|jjjS)NzOnly elementary aggregations are supported for `.over` in PyArrow backend when `partition_by` is specified. Please see: https://narwhals-dev.github.io/narwhals/concepts/improve_group_by_operation/c j}jl|jtdt dd|}t |g\}}tdt |jdj|}nt |g\}}}r|jddd}t|jx}rd|d}t|td|jjj Dsd|j#dj%|}|jj'|d d }|Dcgc]}|j)|c}St+d k(r>j}t-d |j } |jj/dj1dj3} | j4} |j6j9|j:j=| |} |j| j?| } | j#| gdj%|}| j| j'|| g| gdd jA| gd}|Dcgc]}|j)|c}Sd}t|cc}wcc}w)NrFrRz Column names zV appear in both expression output names and in `over` keys. This is not yet supported.c3:K|]}|jdkDyw)rN) null_count).0cas r' z/ArrowExpr.over..func..s&( !s)drop_null_keysleft_right)howleft_onright_onsuffixrPrencode)r:inner)rzr{ryr|rUzk`over` with `partition_by` and multiple columns which contains null values is not yet supported for PyArrow)!rHprev with_columnsrr r nw_col _append_node_to_compliant_exprrXset intersectionNotImplementedErrorany simple_selectr-r>group_byaggjoinrbr[r columndictionary_encodecombine_chunksindices_expr _from_series_seriesr?aliasrY)r0plx_aliasesleaf_ceoverlapmsgtmprtmp_name dict_arrayr indices_expr table_encodedwindowedretrinodesrQ partition_byr"s r'r5zArrowExpr.over..funcs--/Cyy$__T+~eCRjRU7V%WX>tRL 7G$11%)<OOPST ?tRL 7RWWh5UKg,33LAAwA$G9-11*#..,>#E#E#GHIJA +A +F~~ "&"="=#77MM   r)N) r#z'EvalSeries[ArrowDataFrame, ArrowSeries]r$EvalNames[ArrowDataFrame]r%zAliasNames | Noner&rrr r8None)r9z type[Self]r4rr:rr8r)rCintr:rr8r)r8r)rIboolr8zdict[str, Any])rQ Sequence[str]r8r)rrrQrr8r)__name__ __module__ __qualname__r PYARROWr__annotations__r( classmethodr;rErHrMrmrr ewm_meanrLr)r'rrs&4&<&a F Hr)rr)( __future__rtypingrrrpyarrowr]pyarrow.computecomputer`narwhals._arrow.seriesrnarwhals._compliantrnarwhals._expression_parsingr r narwhals._utilsr r r narwhals.functionsrrcollections.abcrtyping_extensionsrnarwhals._arrow.dataframerrGrnarwhals._compliant.typingrrrrrrrLr)r'rs]"++.)Z -(&88LL8J! *K78J!r)