
    ei$                        d dl mZ d dlmZmZmZ d dlZd dlm	Z
 d dlmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ er*d d	lmZ d d
lmZ d dlmZ d dlm Z  d dl!m"Z"m#Z#m$Z$ d dlm%Z%m&Z&  G d dedef         Z'y)    )annotations)TYPE_CHECKINGAnycastN)ArrowSeries)	EagerExpr)evaluate_nodes!evaluate_output_names_and_aliases)Implementationgenerate_temporary_column_namenot_implemented)col)Sequence)Self)ArrowDataFrameArrowNamespace)
AliasNames	EvalNames
EvalSeries)Version_LimitedContextc                      e Zd ZU ej                  Zded<   ej                  d	 	 	 	 	 	 	 	 	 	 	 ddZe	 	 	 	 	 	 	 	 dd       Z	edd       Z
ddZdd		 	 	 dd
ZddZddZ e       Zy)	ArrowExprr   _implementation)implementationc               <    || _         || _        || _        || _        y )N)_call_evaluate_output_names_alias_output_names_version)selfcallevaluate_output_namesalias_output_namesversionr   s         V/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/narwhals/_arrow/expr.py__init__zArrowExpr.__init__    s"     
&;##5     c              <    dfd} | |d |j                         S )Nc                    	  |       D cg c]'  }t        | j                  |   || j                        ) c}S c c}w # t        $ r"}| j	                   |             x}r|| d }~ww xY w)N)namer&   )r   nativer!   KeyError_check_columns_exist)dfcolumn_nameeerrorevaluate_column_namess       r'   funcz)ArrowExpr.from_column_names.<locals>.func6   s    

 (=R'@	 $  		+.["++    334I"4MNN5NQ&s%   
A ,<A A 	A,
A''A,r$   r%   r&   r0   r   returnzlist[ArrowSeries])r!   )clsr4   contextr5   s    `  r'   from_column_nameszArrowExpr.from_column_names.   s)    	 "7#$$	
 	
r)   c               Z    dfd} | || j                        d |j                        S )Nc                    | j                   }| j                  }D cg c]   }t        j                  ||   ||   |       " c}S c c}w )N)r,   r:   )r-   columnsr   from_native)r0   tblcolsicolumn_indicess       r'   r5   z+ArrowExpr.from_column_indices.<locals>.funcL   sN    ))C::D ( ''AT!WbI  s   %Ar6   r7   )_eval_names_indicesr!   )r9   r:   rC   r5   s     ` r'   from_column_indiceszArrowExpr.from_column_indicesJ   s4    	 "%"9"9."I#$$	
 	
r)   c                4    ddl m}  || j                        S )Nr   r   )r&   )narwhals._arrow.namespacer   r!   )r"   r   s     r'   __narwhals_namespace__z ArrowExpr.__narwhals_namespace__[   s    <dmm44r)   F)returns_scalarc                   |rddiS i S )N_return_py_scalarF )r"   rI   s     r'   _reuse_series_extra_kwargsz$ArrowExpr._reuse_series_extra_kwargs`   s     0>#U+E2Er)   c                     sJ  j                   d fd} j                  | j                   j                   j                        S )Nc           	     @   t        d| j                        } | j                  |d       j                  ddd}  | j	                  |gd            }Xj
                  rLt        |       }|D cg c]5  }|j                  t        j                  |j                         |            7 c}S t        j                  | j                  |      j                        }|D cg c],  }|j                  |j                  j                  |            . c}S c c}w c c}w )N   )order_byF
descending
nulls_lastT)strict)r   r>   with_row_indexsortdropis_scalar_likelen_with_nativeparepeatitempcsort_indices
get_columnr-   take)	r0   tokenresultssizessorting_indicesmetarQ   r"   s	         r'   r5   z2ArrowExpr._over_without_partition_by.<locals>.funck   s    21bjjAE=""54"8==eB 277E74789GD$7$7 2wKRSaryy4'@ASS
 !oobmmE.B.I.IJOLSTqANN188==#ABTT T Us   3:D"1Dr6   r0   r   r8   zSequence[ArrowSeries])	_metadata	__class__r   r    r!   )r"   rQ   r5   rh   s   `` @r'   _over_without_partition_byz$ArrowExpr._over_without_partition_bye   sO     x~~	U$ ~~"&"="=#77MM	  
 	
r)   c                    ssJ  j                        S  j                  rOj                  j                  j                  r"j
                  #j
                  j                  sd}t        |      t        t        t         j                  j                                           d fd} j                  | j                   j                   j                        S )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                         }j                  l| j                  t        dt	        d d |                  } t        | g       \  }}t        dt        | j                  d         j                  |            }nt        | g       \  }}}r | j                  ddd} t        |      j                        x}rd| d}t        |       | j                   }|j                  j                  D cg c]  }|j                   dkD   }	}t#        |	      sW| j%                  d      j'                  |      }
|j)                  |
d	d
      }
|D cg c]  }|
j+                  |       c}S | j                  | j                  }}j                         }g }g }t-        |j                  |	      D ]  \  }}|s|j/                  |       t1        d|      }|j/                  |       |j/                  |       |j2                  j5                  |j7                  |      j9                  d      j;                         j<                  ||      }|j/                  |j>                  jA                  |               | j                  | }|j%                  |d      j'                  |      } |j                  | j)                  |||dd
      }|D cg c]  }|j+                  |       c}S c c}w c c}w c c}w )Nr   FrR   zColumn names zV appear in both expression output names and in `over` keys.
This is not yet supported.r   )drop_null_keysleft_right)howleft_onright_onsuffixrP   encode)r:   r,   inner)rt   ru   rs   rv   )!rH   prevwith_columnsr   r	   r
   nw_col_append_node_to_compliant_exprrW   setintersectionNotImplementedErrorsimple_selectr-   r>   
null_countanygroup_byaggjoinra   zipappendr   _seriesr?   columndictionary_encodecombine_chunksindices_expr_from_series)r0   plx_aliasesleaf_ceoverlapmsgpartition_tblca	has_nullstmpalias
tbl_nativecurrent_cols
group_keysencoded_colscol_namehas_nulltmp_namer   tbl_encodedwindowedretrh   nodesrQ   partition_byr"   s                          r'   r5   zArrowExpr.over.<locals>.func   s   --/Cyy$__T+~eCRjRU7V%WX>tRL
7G$11%)<OOPST
 ?tRL
7RWWh5UKg,33LAAwA $G9 -1 1  *#..,B,,l;M5B5I5I5Q5QRr*RIRy>kk,ukEII'R#((()# )  <CC%u-CC')yy"**J--/C$&J,.L&)-*?*?&K I"(%%h/=aNH%%h/ ''1!kk55&--h7..x8+^-$W #% 6 	G !''		(>(>w(GH)I, *"//<8K"++Ju+MQQRYZH++++Z8=="# > C 8??eCNN5)??a S DL @s   K<$L!Lr6   ri   )rl   rj   current_nodekindrY   ry   is_elementwiser   listreversediter_nodes_reversedrk   r   r    r!   )r"   r   rQ   r   r5   rh   r   s   ```  @@r'   overzArrowExpr.over   s    O8228<< ~~!!&&55		%dii.F.F_  &c**Xd4>>#E#E#GHIJI	@ I	@V ~~"&"="=#77MM	  
 	
r)   N)r#   z'EvalSeries[ArrowDataFrame, ArrowSeries]r$   EvalNames[ArrowDataFrame]r%   zAliasNames | Noner&   r   r   r   r8   None)r9   z
type[Self]r4   r   r:   r   r8   r   )rC   intr:   r   r8   r   )r8   r   )rI   boolr8   zdict[str, Any])rQ   Sequence[str]r8   r   )r   r   rQ   r   r8   r   )__name__
__module____qualname__r   PYARROWr   __annotations__r(   classmethodr;   rE   rH   rM   rl   r   r   ewm_meanrL   r)   r'   r   r      s    &4&<&<O^< *8)?)? 5   9	 
 .    '  
  

8

 !
 

 
6 
 
 5 ).F!%F	F

>i
V  Hr)   r   r   )(
__future__r   typingr   r   r   pyarrowr\   pyarrow.computecomputer_   narwhals._arrow.seriesr   narwhals._compliantr   narwhals._expression_parsingr	   r
   narwhals._utilsr   r   r   narwhals.functionsr   r{   collections.abcr   typing_extensionsr   narwhals._arrow.dataframer   rG   r   narwhals._compliant.typingr   r   r   r   r   r   rL   r)   r'   <module>r      s]    " + +   . ) Z 
 -(&88LL8R!	*K78 R!r)   