
    eiA                    J   U d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
mZmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZm Z m!Z! d dl"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d d	l1m2Z2 e
rd d
l3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9Z:d dl;Z<d dl=Z>d dl?m@Z@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZH d dlmIZI d dlJmKZKmLZL d dl$mMZMmNZN d dlOmPZP d dlQmRZR d dl1mSZS d dlTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb eZcdedd<   g dZe ed      ZfdZgdedd<    ed      Zh G d  d!e'eh   eeh   e e!   eeehe!f         Zi G d" d#ed$   ed%eejef   f   ed&   eeieee!f   eeeee!f         Zk G d' d(eieee!f   eeee!f         Zl G d) d*ekeeed+f   eledd+f   e%eeeeef         Zmy),    )annotations)IteratorMappingSequenceSized)chain)TYPE_CHECKINGAnyLiteralProtocolTypeVaroverload)
CompliantDataFrameAnyCompliantExprT_contraCompliantLazyFrameAnyCompliantNamespaceAnyCompliantSeriesT
EagerExprTEagerSeriesTNativeDataFrameTNativeLazyFrameTNativeSeriesT)ArrowConvertibleDictConvertible
FromNativeNumpyConvertible
ToNarwhalsToNarwhalsT_co)assert_never)ValidateBackendVersionVersion_StoresNativecheck_columns_existis_boolean_selectoris_compliant_seriesis_index_selectoris_rangeis_sequence_likeis_sized_multi_index_selectoris_slice_indexis_slice_none)MultiOutputExpressionError)BytesIO)Path)
ModuleTypeN)Self	TypeAlias)CompliantGroupByDataFrameGroupBy)EagerNamespace)SparkSession)IntoArrowTable)_EagerAllowedImpl_LazyAllowedImpl)Implementation_LimitedContext)	DataFrame)DType)ColumnNotFoundError)AsofJoinStrategy
IntoSchemaJoinStrategyMultiColSelectorMultiIndexSelectorPivotAggSingleIndexSelectorSizedMultiIndexSelectorSizedMultiNameSelectorSizeUnitUniqueKeepStrategy_2DArray_SliceIndex
_SliceNamer1   
Incomplete)CompliantDataFrameCompliantFrameCompliantLazyFrameEagerDataFrameT2dict[str, CompliantSeriesT] | dict[str, list[Any]]_ToDict_NativeFrameTc                     e Zd ZU dZded<   ded<   ded<   d"dZd#d	Zd$d
Zd%dZe	d&d       Z
ed'd       Zed(d       Zed)d       Zd)dZd*dZd+dZd,dZd-dZ	 	 	 	 	 	 d.dZd/dZ	 	 	 	 	 	 	 	 	 	 	 	 d0dZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d1dZd2dZd3dZd4dZ	 	 	 	 	 	 	 	 d5dZ	 	 	 	 	 	 	 	 d6dZ	 	 	 	 	 	 	 	 	 	 d7dZd3dZd8d Zy!)9rN   z)Common parts of `DataFrame`, `LazyFrame`.rT   _native_framer9   _implementationr!   _versionc                     y N selfs    _/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/narwhals/_compliant/dataframe.py__native_namespace__z#CompliantFrame.__native_namespace__g           c                     y rZ   r[   r\   s    r^   __narwhals_namespace__z%CompliantFrame.__narwhals_namespace__h   r`   ra   c                     y rZ   r[   )r]   dfs     r^   _with_nativezCompliantFrame._with_nativei   r`   ra   c                     y rZ   r[   )r]   versions     r^   _with_versionzCompliantFrame._with_versionj   r`   ra   c                   y rZ   r[   clsdatacontexts      r^   from_nativezCompliantFrame.from_nativek       WZra   c                     y rZ   r[   r\   s    r^   columnszCompliantFrame.columnsm       (+ra   c                    | j                   S rZ   )rV   r\   s    r^   nativezCompliantFrame.nativeo   s    !!!ra   c                     y rZ   r[   r\   s    r^   schemazCompliantFrame.schemas   s    -0ra   c                     y rZ   r[   r\   s    r^   collect_schemazCompliantFrame.collect_schemav   r`   ra   c                    y rZ   r[   )r]   rr   stricts      r^   dropzCompliantFrame.dropw   r`   ra   c                     y rZ   r[   r]   subsets     r^   
drop_nullszCompliantFrame.drop_nullsx   r`   ra   c                     y rZ   r[   r]   rr   s     r^   explodezCompliantFrame.explodey   r`   ra   c                     y rZ   r[   )r]   	predicates     r^   filterzCompliantFrame.filterz   r`   ra   c                    y rZ   r[   r]   keysdrop_null_keyss      r^   group_byzCompliantFrame.group_by{   s    
 9<ra   c                     y rZ   r[   )r]   ns     r^   headzCompliantFrame.head   r`   ra   c                    y rZ   r[   )r]   otherhowleft_onright_onsuffixs         r^   joinzCompliantFrame.join        ra   c                    y rZ   r[   )r]   r   r   r   by_leftby_rightstrategyr   s           r^   	join_asofzCompliantFrame.join_asof   s     ra   c                     y rZ   r[   )r]   mappings     r^   renamezCompliantFrame.rename   r`   ra   c                     y rZ   r[   r]   exprss     r^   selectzCompliantFrame.select   r`   ra   c                     y)z)`select` where all args are column names.Nr[   )r]   column_namess     r^   simple_selectzCompliantFrame.simple_select       ra   c                    y rZ   r[   )r]   
descending
nulls_lastbys       r^   sortzCompliantFrame.sort       ra   c                    y rZ   r[   )r]   r   keeporder_bys       r^   uniquezCompliantFrame.unique        ra   c                     y rZ   r[   )r]   onindexvariable_name
value_names        r^   unpivotzCompliantFrame.unpivot   r   ra   c                     y rZ   r[   r   s     r^   with_columnszCompliantFrame.with_columns   r`   ra   c                     y rZ   r[   r]   namer   s      r^   with_row_indexzCompliantFrame.with_row_index   r`   ra   N)returnr/   )r   r
   )re   rT   r   r0   )rh   r!   r   r0   )rm   rT   rn   r:   r   r0   )r   Sequence[str])r   rT   )r   zMapping[str, DType])rr   r   r{   boolr   r0   )r   Sequence[str] | Noner   r0   )rr   r   r   r0   )r   z"CompliantExprT_contra | Incompleter   r0   )r   /Sequence[str] | Sequence[CompliantExprT_contra]r   r   r   z-CompliantGroupBy[Self, CompliantExprT_contra])r   intr   r0   )r   r0   r   r@   r   r   r   r   r   strr   r0   )r   r0   r   r   r   r   r   r   r   r   r   r>   r   r   r   r0   )r   zMapping[str, str]r   r0   r   r   r   r0   )r   r   r   r0   )r   r   r   zbool | Sequence[bool]r   r   r   r0   )r   r   r   rH   r   r   r   r0   )
r   r   r   r   r   r   r   r   r   r0   )r   r   r   r   r   r0   ) __name__
__module____qualname____doc____annotations__r_   rc   rf   ri   classmethodro   propertyrr   ru   rw   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   ra   r^   rN   rN   [   s    4  ##50::Z Z+ +" " 0 08HC:P<=< 	<
 
7< ( 	
 & '  


 	

 
 &
 '
 #
 
 

 >@$9GK	$ !	
 ' 
  $ 	
  
 GMra   rN   c                  *   e Zd Zd%dZed&d       Ze	 	 	 	 	 	 	 	 d'd       Ze	 	 	 	 	 	 	 	 d(d       Ze	 	 	 	 	 	 	 	 d)d       Zd*dZ		 	 	 	 d+dZ
ed,d       Zd%d	Zd-d
Zd.dZd/dZ	 	 	 	 	 	 d0dZd1dZd2dZ	 	 	 	 	 	 d3dZd4dZ	 	 	 	 	 	 d5dZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6dZd7dZ	 	 	 	 d8dZ	 	 	 	 	 	 	 	 	 	 d9dZd:dZd;dZd<dZed=d       Zed>d       Z	 	 	 	 d?dZdd	 	 	 	 	 	 	 	 	 d@dZ dAd Z!edBd!       Z"edCd"       Z"dDd#Z"dCd$Z#y)ErM   c                     y rZ   r[   r\   s    r^   __narwhals_dataframe__z)CompliantDataFrame.__narwhals_dataframe__   r`   ra   c                   y rZ   r[   rk   s      r^   
from_arrowzCompliantDataFrame.from_arrow   rp   ra   c                   y rZ   r[   rl   rm   rn   rw   s       r^   	from_dictzCompliantDataFrame.from_dict   r   ra   c                   y rZ   r[   r   s       r^   
from_dictszCompliantDataFrame.from_dicts   r   ra   c                   y rZ   r[   r   s       r^   
from_numpyzCompliantDataFrame.from_numpy   r   ra   c                    y rZ   r[   )r]   dtypecopys      r^   	__array__zCompliantDataFrame.__array__   r`   ra   c                     y rZ   r[   )r]   items     r^   __getitem__zCompliantDataFrame.__getitem__   r   ra   c                     y rZ   r[   r\   s    r^   shapezCompliantDataFrame.shape   rs   ra   c                     y rZ   r[   r\   s    r^   clonezCompliantDataFrame.clone   r`   ra   c                     y rZ   r[   )r]   units     r^   estimated_sizez!CompliantDataFrame.estimated_size   r`   ra   c                     y rZ   r[   )r]   r   offsets      r^   gather_everyzCompliantDataFrame.gather_every   r`   ra   c                     y rZ   r[   )r]   r   s     r^   
get_columnzCompliantDataFrame.get_column   r`   ra   c                    y rZ   r[   r   s      r^   r   zCompliantDataFrame.group_by   s    
 '*ra   c                     y rZ   r[   )r]   rowcolumns      r^   r   zCompliantDataFrame.item   r`   ra   c                     y rZ   r[   r\   s    r^   iter_columnszCompliantDataFrame.iter_columns   r`   ra   c                    y rZ   r[   )r]   namedbuffer_sizes      r^   	iter_rowszCompliantDataFrame.iter_rows       BEra   c                     y rZ   r[   r\   s    r^   	is_uniquezCompliantDataFrame.is_unique   r`   ra   c                    y rZ   r[   )r]   backendsessions      r^   lazyzCompliantDataFrame.lazy        #ra   c                    y rZ   r[   )r]   r   r   valuesaggregate_functionsort_columns	separators          r^   pivotzCompliantDataFrame.pivot   s     ra   c                     y rZ   r[   )r]   r   s     r^   r   zCompliantDataFrame.row   r`   ra   c                    y rZ   r[   )r]   r   s     r^   rowszCompliantDataFrame.rows   r   ra   c                    y rZ   r[   )r]   r   fractionwith_replacementseeds        r^   samplezCompliantDataFrame.sample       ra   c                     y rZ   r[   r\   s    r^   to_arrowzCompliantDataFrame.to_arrow  r`   ra   c                     y rZ   r[   r\   s    r^   	to_pandaszCompliantDataFrame.to_pandas  r`   ra   c                     y rZ   r[   r\   s    r^   	to_polarszCompliantDataFrame.to_polars  r`   ra   c                    y rZ   r[   r]   	as_seriess     r^   to_dictzCompliantDataFrame.to_dict  s    SVra   c                    y rZ   r[   r  s     r^   r  zCompliantDataFrame.to_dict  s    MPra   c                    y rZ   r[   r  s     r^   r  zCompliantDataFrame.to_dict  s    =@ra   N)maintain_orderc                    y rZ   r[   )r]   r   r   r  r   s        r^   r   zCompliantDataFrame.unique  r  ra   c                     y rZ   r[   r   s      r^   r   z!CompliantDataFrame.with_row_index  r`   ra   c                     y rZ   r[   r]   files     r^   	write_csvzCompliantDataFrame.write_csv  s    ,/ra   c                     y rZ   r[   r  s     r^   r  zCompliantDataFrame.write_csv   s    =@ra   c                     y rZ   r[   r  s     r^   r  zCompliantDataFrame.write_csv"  r`   ra   c                     y rZ   r[   r  s     r^   write_parquetz CompliantDataFrame.write_parquet#  r`   ra   r   r0   )rm   r6   rn   r:   r   r0   )rm   zMapping[str, Any]rn   r   rw   .IntoSchema | Mapping[str, DType | None] | Noner   r0   )rm   zSequence[Mapping[str, Any]]rn   r:   rw   r%  r   r0   )rm   rI   rn   r:   rw   z!IntoSchema | Sequence[str] | Noner   r0   )r   r
   r   bool | Noner   rI   )r   zetuple[SingleIndexSelector | MultiIndexSelector[CompliantSeriesT], MultiColSelector[CompliantSeriesT]]r   r0   )r   ztuple[int, int])r   rG   r   zint | float)r   r   r   r   r   r0   )r   r   r   r   )r   r   r   r   r   zDataFrameGroupBy[Self, Any])r   
int | Noner   zint | str | Noner   r
   )r   zIterator[CompliantSeriesT])r   r   r   r   r   z7Iterator[tuple[Any, ...]] | Iterator[Mapping[str, Any]])r   r   )r   z_LazyAllowedImpl | Noner   zSparkSession | Noner   r   )r   r   r   r   r   r   r   zPivotAgg | Noner  r   r  r   r   r0   )r   r   r   ztuple[Any, ...])r   r   r   z7Sequence[tuple[Any, ...]] | Sequence[Mapping[str, Any]])
r   r'  r  zfloat | Noner	  r   r
  r'  r   r0   )r   pa.Table)r   zpd.DataFrame)r   zpl.DataFrame)r  zLiteral[True]r   zdict[str, CompliantSeriesT])r  zLiteral[False]r   zdict[str, list[Any]])r  r   r   rR   )
r   r   r   rH   r  r&  r   r   r   r0   )r   r   r   r   r   r0   )r  Noner   r   r  zstr | Path | BytesIOr   r)  )r  zstr | Path | BytesIO | Noner   z
str | None)$r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r  r  r   r  r   r   r  r#  r[   ra   r^   rM   rM      s    2Z Z
 ' ? 
  )
 ! ? 
  
 ! 2 
  K
 
 + + @<<*=* 	*
 
%* J=FF+.F	@F 1$.$<O$	$		 $		
 %	 ,	 	 	 
	 6FF	@F 	
   
 (,,V VP PA A	;A '+$ !	
 $ ' 
 U/ /@ @MDra   rM   )rI   rI   z_ToDict[CompliantSeriesT])r(  r6   c                  @    e Zd ZddZddZd	dZ	 	 	 	 	 	 d
dZddZy)rO   c                     y rZ   r[   r\   s    r^   __narwhals_lazyframe__z)CompliantLazyFrame.__narwhals_lazyframe__*  r`   ra   c                     y rZ   r[   r\   s    r^   _iter_columnsz CompliantLazyFrame._iter_columns,  r`   ra   c                     y)zk`select` where all args are aggregations or literals.

        (so, no broadcasting is necessary).
        Nr[   r   s     r^   	aggregatezCompliantLazyFrame.aggregate-  s    
 	ra   c                     y rZ   r[   )r]   r   kwargss      r^   collectzCompliantLazyFrame.collect4  r   ra   c                     y rZ   r[   r  s     r^   sink_parquetzCompliantLazyFrame.sink_parquet7  r`   ra   Nr$  )r   zIterator[Any]r   )r   z_EagerAllowedImpl | Noner3  r
   r   r   r*  )r   r   r   r-  r/  r1  r4  r6  r[   ra   r^   rO   rO   &  s2     21$/$;>$	$ Dra   rO   c                      e Zd Zedd       Z	 	 ddZddZddZdd	 	 	 	 	 ddZddZ	dd	Z
dd
ZddZd dZe	 	 	 	 	 	 d!d       Zd"dZd#dZ	 	 	 	 d$dZ	 	 	 	 d%dZd&dZd'dZ	 	 	 	 d(dZd)dZy)*rP   c                6    | j                   j                         S rZ   )rW   _backend_versionr\   s    r^   r9  zEagerDataFrame._backend_versionB  s    ##4466ra   c                     y rZ   r[   r\   s    r^   rc   z%EagerDataFrame.__narwhals_namespace__F  s     ra   c                <    | j                   j                  | d      S )Nfull)level)rX   	dataframer\   s    r^   to_narwhalszEagerDataFrame.to_narwhalsL  s    }}&&t6&::ra   c                      | j                   | S rZ   )r   r   s     r^   r1  zEagerDataFrame.aggregateO  s     t{{E""ra   T)validate_column_namesc                    y rZ   r[   )r]   re   rA  s      r^   rf   zEagerDataFrame._with_nativeY  r   ra   c                0    t        || j                        S )N)	available)r#   rr   r~   s     r^   _check_columns_existz#EagerDataFrame._check_columns_exist]  s    "6T\\BBra   c               d    | j                  |      }t        |      dk7  rd}t        |      |d   S )z6Evaluate `expr` and ensure it has a **single** output.   z4multi-output expressions not allowed in this contextr   )_evaluate_exprlenr,   )r]   exprresultmsgs       r^   _evaluate_single_output_exprz+EagerDataFrame._evaluate_single_output_expr`  s:    
 $$T*v;!HC,S11ayra   c                R     t        t        j                   fd|D                    S )Nc              3  @   K   | ]  }j                  |        y wrZ   )rH  ).0rJ  r]   s     r^   	<genexpr>z1EagerDataFrame._evaluate_exprs.<locals>.<genexpr>o  s     (Ut)<)<T)B(Us   )tupler   from_iterabler   s   ` r^   _evaluate_exprszEagerDataFrame._evaluate_exprsk  s!     U(((Uu(UUVVra   c                   |j                  |       } ||       }t        |      |D cg c]  }|j                   c}x}k7  rd| d| }t        |      |S c c}w )a  Return list of raw columns.

        For eager backends we alias operations at each step.

        As a safety precaution, here we can check that the expected result names match those
        we were expecting from the various `evaluate_output_names` / `alias_output_names` calls.

        Note that for PySpark / DuckDB, we are less free to liberally set aliases whenever we want.
        z"Safety assertion failed, expected z, got )_evaluate_aliaseslistr   AssertionError)r]   rJ  aliasesrK  sresult_aliasesrL  s          r^   rH  zEagerDataFrame._evaluate_exprq  sj     ((.d=/56!qvv66N
 7wivnEUVC %%	 7s   Ac                    y)z@Extract native Series, broadcasting to `len(self)` if necessary.Nr[   )r]   r   s     r^   _extract_comparandz!EagerDataFrame._extract_comparand  r   ra   c               Z    t        |xs d t        | j                  d         D              S )Nc              3  &   K   | ]	  }d |   yw)column_Nr[   )rP  xs     r^   rQ  z5EagerDataFrame._numpy_column_names.<locals>.<genexpr>  s     L!'!Ls   rG  )rW  ranger   )rm   rr   s     r^   _numpy_column_namesz"EagerDataFrame._numpy_column_names  s'     GLLuTZZ]7KLMMra   c                     y rZ   r[   r]   r  s     r^   _gatherzEagerDataFrame._gather  r`   ra   c                     y rZ   r[   re  s     r^   _gather_slicezEagerDataFrame._gather_slice  r`   ra   c                     y rZ   r[   r   s     r^   _select_multi_indexz"EagerDataFrame._select_multi_index  r   ra   c                     y rZ   r[   r   s     r^   _select_multi_namez!EagerDataFrame._select_multi_name  r   ra   c                     y rZ   r[   r   s     r^   _select_slice_indexz"EagerDataFrame._select_slice_index  r`   ra   c                     y rZ   r[   r   s     r^   _select_slice_namez!EagerDataFrame._select_slice_name  r`   ra   c                    |\  }}| }t        |      sAt        |t              rt        |      dk(  r|j	                         S t        |      r+ |j                  d t        |j                  |      D         }nt        |      rat        |      st        |      r|j                  |      }nt        |      r| j                  |j                        }n|j                  |      }nqt        |t               r|j#                  |      }nOt        |      r| j%                  |j                        }n(t'        |      r| j%                  |      }nt)        |       t        |      st        |t*              r|j-                  |g      }|S t        |t         t.        f      r|j1                  |      }|S t        |      r|j-                  |j                        }|S t3        |      r|j-                  |      }|S t)        |       |S )Nr   c              3  ,   K   | ]  \  }}|s	|  y wrZ   r[   )rP  colr   s      r^   rQ  z-EagerDataFrame.__getitem__.<locals>.<genexpr>  s     Wkc6PVcWs   
)r+   
isinstancer   rI  r   r$   r   ziprr   r&   r*   r'   rn  r%   rj  ru   slicerp  rl  r(   r   r   rf  rb  rh  r)   )r]   r   r  rr   	compliants        r^   r   zEagerDataFrame.__getitem__  s    g	W%'5)c'la.? ''))"7+3I33WS1B1BG-LW	 #7+!'*hw.? ) = =g FI(1 $ 8 8 HI ) = =g FIGU+%88A	$W- 33GNNC	!'* 33G<	W%T"$$%--tf5	  D5%.1%33D9	  %T*%--dkk:	  /t4%--d3	  T"ra   c                $    | j                  |      S rZ   )r#  r  s     r^   r6  zEagerDataFrame.sink_parquet  s    !!$''ra   N)r   ztuple[int, ...])r   zOEagerNamespace[Self, EagerSeriesT, EagerExprT, NativeDataFrameT, NativeSeriesT])r   DataFrame[NativeDataFrameT])r   r   r   r0   )re   r   rA  r   r   r0   )r   r   r   zColumnNotFoundError | None)rJ  r   r   r   )r   r   r   Sequence[EagerSeriesT])rJ  r   r   rz  )r   r   r   r
   )rm   rI   rr   r   r   z	list[str])r  &SizedMultiIndexSelector[NativeSeriesT]r   r0   )r  _SliceIndex | ranger   r0   )rr   r{  r   r0   )rr   z%SizedMultiNameSelector[NativeSeriesT]r   r0   )rr   r|  r   r0   )rr   rK   r   r0   )r   z]tuple[SingleIndexSelector | MultiIndexSelector[EagerSeriesT], MultiColSelector[EagerSeriesT]]r   r0   r*  )r   r   r   r   r9  rc   r?  r1  rf   rE  rM  rT  rH  r]  staticmethodrc  rf  rh  rj  rl  rn  rp  r   r6  r[   ra   r^   rP   rP   :  s     7 7
;# FJ">B	C	W& NN!5N	N N
 QC=	<	 MB,
, 
,\(ra   rP   ry  )n
__future__r   collections.abcr   r   r   r   	itertoolsr   typingr	   r
   r   r   r   r   narwhals._compliant.typingr   r   r   r   r   r   r   r   r   r   narwhals._translater   r   r   r   r   r   narwhals._typing_compatr   narwhals._utilsr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   narwhals.exceptionsr,   ior-   pathlibr.   typesr/   pandaspdpolarsplpyarrowpatyping_extensionsr0   r1   narwhals._compliant.group_byr2   r3   narwhals._compliant.namespacer4   narwhals._spark_like.utilsr5   r6   narwhals._typingr7   r8   r9   r:   narwhals.dataframer;   narwhals.dtypesr<   r=   narwhals.typingr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r   __all__rQ   rS   rT   rN   r   rM   rO   rP   r[   ra   r^   <module>r     s   " > >  K K    1    ; 1O<72D?,%7   "  J	
ZCLI I(SN- }~"M>AB	SNlrE+,/c1BBC12	(*:NJK46FVWrEjD(*:NJK"$4nDED(M(j"24QQ z<1NNO\:'7FGM(ra   