
    [iA                    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    n/var/www/html/userprofiledev.eatanceapp.com/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       Sra   c                     y rZ   r[   )r]   dfs     r^   _with_nativezCompliantFrame._with_nativei       sra   c                     y rZ   r[   )r]   versions     r^   _with_versionzCompliantFrame._with_versionj   rh   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   s    Sra   c                    y rZ   r[   )r]   rt   stricts      r^   dropzCompliantFrame.dropw   s    Sra   c                     y rZ   r[   r]   subsets     r^   
drop_nullszCompliantFrame.drop_nullsx       ra   c                     y rZ   r[   r]   rt   s     r^   explodezCompliantFrame.explodey   rh   ra   c                     y rZ   r[   )r]   	predicates     r^   filterzCompliantFrame.filterz       Sra   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       Cra   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       #ra   c                     y rZ   r[   r]   exprss     r^   selectzCompliantFrame.select       Sra   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   s    3ra   c                     y rZ   r[   r]   namer   s      r^   with_row_indexzCompliantFrame.with_row_index       #ra   N)returnr/   )r   r
   )rf   rT   r   r0   )rj   r!   r   r0   )ro   rT   rp   r:   r   r0   )r   Sequence[str])r   rT   )r   zMapping[str, DType])rt   r   r}   boolr   r0   )r   Sequence[str] | Noner   r0   )rt   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   rg   rk   classmethodrq   propertyrt   rw   ry   r{   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__       cra   c                   y rZ   r[   rm   s      r^   
from_arrowzCompliantDataFrame.from_arrow   rr   ra   c                   y rZ   r[   rn   ro   rp   ry   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__   s    sra   c                     y rZ   r[   )r]   items     r^   __getitem__zCompliantDataFrame.__getitem__   r   ra   c                     y rZ   r[   r\   s    r^   shapezCompliantDataFrame.shape   ru   ra   c                     y rZ   r[   r\   s    r^   clonezCompliantDataFrame.clone   s    Sra   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       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   s    cra   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   rd   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      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  s    QTra   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#  s    ra   r   r0   )ro   r6   rp   r:   r   r0   )ro   zMapping[str, Any]rp   r   ry   .IntoSchema | Mapping[str, DType | None] | Noner   r0   )ro   zSequence[Mapping[str, Any]]rp   r:   ry   r0  r   r0   )ro   rI   rp   r:   ry   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   r2  r  zfloat | Noner  r   r  r2  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$  r1  r   r   r   r0   )r   r   r   r   r   r0   )r)  Noner   r   r)  zstr | Path | BytesIOr   r4  )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])r3  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 | Noner>  r
   r   r   r5  )r   r   r   r8  r:  r<  r?  rA  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^   rD  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^   r<  zEagerDataFrame.aggregateO  s     t{{E""ra   T)validate_column_namesc                    y rZ   r[   )r]   rf   rL  s      r^   rg   zEagerDataFrame._with_nativeY  r   ra   c                0    t        || j                        S )N)	available)r#   rt   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   )rS  ).0rU  r]   s     r^   	<genexpr>z1EagerDataFrame._evaluate_exprs.<locals>.<genexpr>o  s     (Uut)<)<T)Bus   )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]   rU  aliasesrV  sresult_aliasesrW  s          r^   rS  zEagerDataFrame._evaluate_exprq  sn     ((.d=/56v!qvvv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[   )r[  xs     r^   r\  z5EagerDataFrame._numpy_column_names.<locals>.<genexpr>  s     L7K!'!7Ks   rR  )rb  ranger   )ro   rt   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[   rp  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  s    ra   c                     y rZ   r[   r   s     r^   _select_slice_namez!EagerDataFrame._select_slice_name  s    sra   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[   )r[  colr   s      r^   r\  z-EagerDataFrame.__getitem__.<locals>.<genexpr>  s     W-Lkc6PVc-Ls   
)r+   
isinstancer   rT  r   r$   r   ziprt   r&   r*   r'   ry  r%   ru  rw   slicer{  rw  r(   r   r   rq  rm  rs  r)   )r]   r   r  rt   	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^   rA  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   )rf   r   rL  r   r   r0   )r   r   r   zColumnNotFoundError | None)rU  r   r   r   )r   r   r   Sequence[EagerSeriesT])rU  r   r   r  )r   r   r   r
   )ro   rI   rt   r   r   z	list[str])r  &SizedMultiIndexSelector[NativeSeriesT]r   r0   )r  _SliceIndex | ranger   r0   )rt   r  r   r0   )rt   z%SizedMultiNameSelector[NativeSeriesT]r   r0   )rt   r  r   r0   )rt   rK   r   r0   )r   z]tuple[SingleIndexSelector | MultiIndexSelector[EagerSeriesT], MultiColSelector[EagerSeriesT]]r   r0   r5  )r   r   r   r   rD  rc   rJ  r<  rg   rP  rX  r_  rS  rh  staticmethodrn  rq  rs  ru  rw  ry  r{  r   rA  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   r  )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   