
    Wh;                    6   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 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. e
rd d	l/m0Z0 d d
l1m2Z2 d dl3m4Z4 d dl5Z6d dl7Z8d dl9Z:d dl;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZD d dlmEZE d dlFmGZGmHZH d dl#mIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_ eZ`dead<   g dZb ed      ZcdZddead<    ed      Ze G d d e&ee   eee   ee    eeeee f         Zf G d! d"ed#   ed$eegef   f   ed%   eefeee f   eeeee f         Zh G d& d'efeee f   eeee f         Zi G d( d)eheeed*f   eiedd*f   e$eeeeef         Zjy)+    )annotations)IteratorMappingSequenceSized)chain)TYPE_CHECKINGAnyLiteralProtocolTypeVaroverload)	CompliantDataFrameAnyCompliantExprT_contraCompliantLazyFrameAnyCompliantSeriesT
EagerExprTEagerSeriesTNativeDataFrameTNativeLazyFrameTNativeSeriesT)ArrowConvertibleDictConvertible
FromNativeNumpyConvertible
ToNarwhalsToNarwhalsT_co)assert_never)ValidateBackendVersionVersion_StoresNativecheck_columns_existis_compliant_seriesis_index_selectoris_rangeis_sequence_likeis_sized_multi_index_selectoris_slice_indexis_slice_none)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
_SliceNamer.   
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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	 	 	 	 	 	 	 	 	 	 	 	 d/dZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d0dZd1dZd2dZd3dZ	 	 	 	 	 	 	 	 d4dZd.dZ	 	 	 	 	 	 	 	 d5dZ	 	 	 	 	 	 	 	 	 	 d6dZd2dZd7d Zy!)8rK   z)Common parts of `DataFrame`, `LazyFrame`.rQ   _native_framer6   _implementationr    _versionc                     y N selfs    W/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_compliant/dataframe.py__native_namespace__z#CompliantFrame.__native_namespace__d           c                     y rW   rX   rY   s    r[   __narwhals_namespace__z%CompliantFrame.__narwhals_namespace__e   r]   r^   c                     y rW   rX   )rZ   versions     r[   _with_versionzCompliantFrame._with_versionf   r]   r^   c                   y rW   rX   clsdatacontexts      r[   from_nativezCompliantFrame.from_nativeg       WZr^   c                     y rW   rX   rY   s    r[   columnszCompliantFrame.columnsi       (+r^   c                    | j                   S rW   )rS   rY   s    r[   nativezCompliantFrame.nativek   s    !!!r^   c                     y rW   rX   rY   s    r[   schemazCompliantFrame.schemao   s    -0r^   c                     y rW   rX   rY   s    r[   collect_schemazCompliantFrame.collect_schemar   r]   r^   c                    y rW   rX   )rZ   rl   stricts      r[   dropzCompliantFrame.drops   r]   r^   c                     y rW   rX   rZ   subsets     r[   
drop_nullszCompliantFrame.drop_nullst   r]   r^   c                     y rW   rX   rZ   rl   s     r[   explodezCompliantFrame.explodeu   r]   r^   c                     y rW   rX   )rZ   	predicates     r[   filterzCompliantFrame.filterv   r]   r^   c                    y rW   rX   rZ   keysdrop_null_keyss      r[   group_byzCompliantFrame.group_byw   s    
 9<r^   c                     y rW   rX   rZ   ns     r[   headzCompliantFrame.head}   r]   r^   c                    y rW   rX   )rZ   otherhowleft_onright_onsuffixs         r[   joinzCompliantFrame.join~        r^   c                    y rW   rX   )rZ   r   r   r   by_leftby_rightstrategyr   s           r[   	join_asofzCompliantFrame.join_asof   s     r^   c                     y rW   rX   )rZ   mappings     r[   renamezCompliantFrame.rename   r]   r^   c                     y rW   rX   rZ   exprss     r[   selectzCompliantFrame.select   r]   r^   c                     y)z)`select` where all args are column names.NrX   )rZ   column_namess     r[   simple_selectzCompliantFrame.simple_select       r^   c                    y rW   rX   )rZ   
descending
nulls_lastbys       r[   sortzCompliantFrame.sort       r^   c                     y rW   rX   r   s     r[   tailzCompliantFrame.tail   r]   r^   c                    y rW   rX   )rZ   ry   keeporder_bys       r[   uniquezCompliantFrame.unique        r^   c                     y rW   rX   )rZ   onindexvariable_name
value_names        r[   unpivotzCompliantFrame.unpivot   r   r^   c                     y rW   rX   r   s     r[   with_columnszCompliantFrame.with_columns   r]   r^   c                     y rW   rX   rZ   namer   s      r[   with_row_indexzCompliantFrame.with_row_index   r]   r^   N)returnr,   )r   r
   )rb   r    r   r-   )rg   rQ   rh   r7   r   r-   )r   Sequence[str])r   rQ   )r   zMapping[str, DType])rl   r   ru   boolr   r-   )ry   Sequence[str] | Noner   r-   )rl   r   r   r-   )r   z"CompliantExprT_contra | Incompleter   r-   )r   /Sequence[str] | Sequence[CompliantExprT_contra]r   r   r   z-CompliantGroupBy[Self, CompliantExprT_contra])r   intr   r-   )r   r-   r   r=   r   r   r   r   r   strr   r-   )r   r-   r   r   r   r   r   r   r   r   r   r;   r   r   r   r-   )r   zMapping[str, str]r   r-   r   r   r   r-   )r   r   r   r-   )r   r   r   zbool | Sequence[bool]r   r   r   r-   )ry   r   r   rE   r   r   r   r-   )
r   r   r   r   r   r   r   r   r   r-   )r   r   r   r   r   r-   ) __name__
__module____qualname____doc____annotations__r\   r`   rc   classmethodri   propertyrl   ro   rq   rs   rv   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rX   r^   r[   rK   rK   X   s    4  ##50:Z Z+ +" " 0 08HC:P<=< 	<
 
7< ( 	
 & '  


 	

 
 &
 '
 #
 
 

 >@$9GK	 ($ !	
 ' 
  $ 	
  
 GMr^   rK   c                     e Zd Z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	 	 	 	 	 	 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ed;d       Zed<d       Z	 	 	 	 d=dZdd	 	 	 	 	 	 	 	 	 d>dZd?dZ ed@d        Z!edAd!       Z!dBd"Z!dAd#Z"y)CrJ   c                     y rW   rX   rY   s    r[   __narwhals_dataframe__z)CompliantDataFrame.__narwhals_dataframe__   r]   r^   c                   y rW   rX   re   s      r[   
from_arrowzCompliantDataFrame.from_arrow   rj   r^   c                   y rW   rX   rf   rg   rh   rq   s       r[   	from_dictzCompliantDataFrame.from_dict   r   r^   c                   y rW   rX   r   s       r[   
from_numpyzCompliantDataFrame.from_numpy   r   r^   c                    y rW   rX   )rZ   dtypecopys      r[   	__array__zCompliantDataFrame.__array__   r]   r^   c                     y rW   rX   )rZ   items     r[   __getitem__zCompliantDataFrame.__getitem__   r   r^   c                     y rW   rX   rY   s    r[   shapezCompliantDataFrame.shape   rm   r^   c                     y rW   rX   rY   s    r[   clonezCompliantDataFrame.clone   r]   r^   c                     y rW   rX   )rZ   units     r[   estimated_sizez!CompliantDataFrame.estimated_size   r]   r^   c                     y rW   rX   )rZ   r   offsets      r[   gather_everyzCompliantDataFrame.gather_every   r]   r^   c                     y rW   rX   )rZ   r   s     r[   
get_columnzCompliantDataFrame.get_column   r]   r^   c                    y rW   rX   r   s      r[   r   zCompliantDataFrame.group_by   s    
 '*r^   c                     y rW   rX   )rZ   rowcolumns      r[   r   zCompliantDataFrame.item   r]   r^   c                     y rW   rX   rY   s    r[   iter_columnszCompliantDataFrame.iter_columns   r]   r^   c                    y rW   rX   )rZ   namedbuffer_sizes      r[   	iter_rowszCompliantDataFrame.iter_rows       BEr^   c                     y rW   rX   rY   s    r[   	is_uniquezCompliantDataFrame.is_unique   r]   r^   c                    y rW   rX   )rZ   backendsessions      r[   lazyzCompliantDataFrame.lazy        #r^   c                    y rW   rX   )rZ   r   r   valuesaggregate_functionsort_columns	separators          r[   pivotzCompliantDataFrame.pivot   s     r^   c                     y rW   rX   )rZ   r   s     r[   r   zCompliantDataFrame.row   r]   r^   c                    y rW   rX   )rZ   r   s     r[   rowszCompliantDataFrame.rows   r   r^   c                    y rW   rX   )rZ   r   fractionwith_replacementseeds        r[   samplezCompliantDataFrame.sample        r^   c                     y rW   rX   rY   s    r[   to_arrowzCompliantDataFrame.to_arrow   r]   r^   c                     y rW   rX   rY   s    r[   	to_pandaszCompliantDataFrame.to_pandas   r]   r^   c                     y rW   rX   rY   s    r[   	to_polarszCompliantDataFrame.to_polars  r]   r^   c                    y rW   rX   rZ   	as_seriess     r[   to_dictzCompliantDataFrame.to_dict  s    SVr^   c                    y rW   rX   r  s     r[   r  zCompliantDataFrame.to_dict  s    MPr^   c                    y rW   rX   r  s     r[   r  zCompliantDataFrame.to_dict  s    =@r^   N)maintain_orderc                    y rW   rX   )rZ   ry   r   r  r   s        r[   r   zCompliantDataFrame.unique	  r  r^   c                     y rW   rX   r   s      r[   r   z!CompliantDataFrame.with_row_index  r]   r^   c                     y rW   rX   rZ   files     r[   	write_csvzCompliantDataFrame.write_csv  s    ,/r^   c                     y rW   rX   r  s     r[   r  zCompliantDataFrame.write_csv  s    =@r^   c                     y rW   rX   r  s     r[   r  zCompliantDataFrame.write_csv  r]   r^   c                     y rW   rX   r  s     r[   write_parquetz CompliantDataFrame.write_parquet  r]   r^   r   r-   )rg   r3   rh   r7   r   r-   )rg   zMapping[str, Any]rh   r7   rq   zIntoSchema | Noner   r-   )rg   rF   rh   r7   rq   z!IntoSchema | Sequence[str] | Noner   r-   )r   r
   r   bool | Noner   rF   )r   zetuple[SingleIndexSelector | MultiIndexSelector[CompliantSeriesT], MultiColSelector[CompliantSeriesT]]r   r-   )r   ztuple[int, int])r   rD   r   zint | float)r   r   r   r   r   r-   )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   r-   )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   r-   )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   rO   )
ry   r   r   rE   r  r   r   r   r   r-   )r   r   r   r   r   r-   )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  rX   r^   r[   rJ   rJ      sk    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Dr^   rJ   )rF   rF   z_ToDict[CompliantSeriesT])r"  r3   c                  @    e Zd ZddZddZd	dZ	 	 	 	 	 	 d
dZddZy)rL   c                     y rW   rX   rY   s    r[   __narwhals_lazyframe__z)CompliantLazyFrame.__narwhals_lazyframe__  r]   r^   c                     y rW   rX   rY   s    r[   _iter_columnsz CompliantLazyFrame._iter_columns   r]   r^   c                     y)zk`select` where all args are aggregations or literals.

        (so, no broadcasting is necessary).
        NrX   r   s     r[   	aggregatezCompliantLazyFrame.aggregate!  s    
 	r^   c                     y rW   rX   )rZ   r   kwargss      r[   collectzCompliantLazyFrame.collect(  r   r^   c                     y rW   rX   r  s     r[   sink_parquetzCompliantLazyFrame.sink_parquet+  r]   r^   Nr  )r   zIterator[Any]r   )r   z_EagerAllowedImpl | Noner-  r
   r   r   r$  )r   r   r   r'  r)  r+  r.  r0  rX   r^   r[   rL   rL     s2     21$/$;>$	$ Dr^   rL   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)*rM   c                6    | j                   j                         S rW   )rT   _backend_versionrY   s    r[   r3  zEagerDataFrame._backend_version6  s    ##4466r^   c                     y rW   rX   rY   s    r[   r`   z%EagerDataFrame.__narwhals_namespace__:  s     r^   c                <    | j                   j                  | d      S )Nfull)level)rU   	dataframerY   s    r[   to_narwhalszEagerDataFrame.to_narwhals@  s    }}&&t6&::r^   c                      | j                   | S rW   )r   r   s     r[   r+  zEagerDataFrame.aggregateC  s     t{{E""r^   T)validate_column_namesc                    y rW   rX   )rZ   dfr;  s      r[   _with_nativezEagerDataFrame._with_nativeI  r   r^   c                0    t        || j                        S )N)	available)r"   rl   rx   s     r[   _check_columns_existz#EagerDataFrame._check_columns_existM  s    "6T\\BBr^   c               <     ||       }t        |      dk(  sJ |d   S )z6Evaluate `expr` and ensure it has a **single** output.   r   )len)rZ   exprresults      r[   _evaluate_exprzEagerDataFrame._evaluate_exprP  s'    )-d6{aayr^   c                R     t        t        j                   fd|D                    S )Nc              3  @   K   | ]  }j                  |        y wrW   )_evaluate_into_expr).0rE  rZ   s     r[   	<genexpr>z6EagerDataFrame._evaluate_into_exprs.<locals>.<genexpr>Z  s     'Y4(@(@(F'Ys   )listr   from_iterabler   s   ` r[   _evaluate_into_exprsz#EagerDataFrame._evaluate_into_exprsV  s"     E'''YSX'YYZZr^   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_aliasesrM  r   AssertionError)rZ   rE  aliasesrF  sresult_aliasesmsgs          r[   rJ  z"EagerDataFrame._evaluate_into_expr\  sj     ((.d=/56!qvv66N
 7wivnEUVC %%	 7s   Ac                    y)z@Extract native Series, broadcasting to `len(self)` if necessary.NrX   )rZ   r   s     r[   _extract_comparandz!EagerDataFrame._extract_comparando  r   r^   c               Z    t        |xs d t        | j                  d         D              S )Nc              3  &   K   | ]	  }d |   yw)column_NrX   )rK  xs     r[   rL  z5EagerDataFrame._numpy_column_names.<locals>.<genexpr>w  s     L!'!Ls   rC  )rM  ranger   )rg   rl   s     r[   _numpy_column_namesz"EagerDataFrame._numpy_column_namess  s'     GLLuTZZ]7KLMMr^   c                     y rW   rX   rZ   r  s     r[   _gatherzEagerDataFrame._gathery  r]   r^   c                     y rW   rX   r`  s     r[   _gather_slicezEagerDataFrame._gather_slicez  r]   r^   c                     y rW   rX   r|   s     r[   _select_multi_indexz"EagerDataFrame._select_multi_index{  r   r^   c                     y rW   rX   r|   s     r[   _select_multi_namez!EagerDataFrame._select_multi_name~  r   r^   c                     y rW   rX   r|   s     r[   _select_slice_indexz"EagerDataFrame._select_slice_index  r]   r^   c                     y rW   rX   r|   s     r[   _select_slice_namez!EagerDataFrame._select_slice_name  r]   r^   c                   |\  }}| }t        |      st        |t              rt        |      dk(  r|j	                         S t        |      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|j)                  |      }|S t        |      r|j%                  |j                        }|S t+        |      r|j%                  |      }|S t!        |       |S )Nr   )r)   
isinstancer   rD  r   r$   r(   r%   ri  r#   re  ro   slicerk  rg  r&   r   r   ra  r]  rc  r'   )rZ   r   r  rl   	compliants        r[   r   zEagerDataFrame.__getitem__  s    g	W%'5)c'la.? '')) )!'*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"r^   c                $    | j                  |      S rW   )r  r  s     r[   r0  zEagerDataFrame.sink_parquet  s    !!$''r^   N)r   ztuple[int, ...])r   zOEagerNamespace[Self, EagerSeriesT, EagerExprT, NativeDataFrameT, NativeSeriesT])r   DataFrame[NativeDataFrameT])r   r   r   r-   )r=  r   r;  r   r   r-   )ry   r   r   zColumnNotFoundError | None)rE  r   r   r   )r   r   r   Sequence[EagerSeriesT])rE  r   r   rr  )r   r   r   r
   )rg   rF   rl   r   r   z	list[str])r  &SizedMultiIndexSelector[NativeSeriesT]r   r-   )r  _SliceIndex | ranger   r-   )rl   rs  r   r-   )rl   z%SizedMultiNameSelector[NativeSeriesT]r   r-   )rl   rt  r   r-   )rl   rH   r   r-   )r   z]tuple[SingleIndexSelector | MultiIndexSelector[EagerSeriesT], MultiColSelector[EagerSeriesT]]r   r-   r$  )r   r   r   r   r3  r`   r9  r+  r>  rA  rG  rO  rJ  rX  staticmethodr^  ra  rc  re  rg  ri  rk  r   r0  rX   r^   r[   rM   rM   .  s     7 7
;# FJ">B	C[& NN!5N	N N
 QC=	<	 MB(
( 
(T(r^   rM   rq  )k
__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   narwhals._translater   r   r   r   r   r   narwhals._typing_compatr   narwhals._utilsr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   ior*   pathlibr+   typesr,   pandaspdpolarsplpyarrowpatyping_extensionsr-   r.   narwhals._compliant.group_byr/   r0   narwhals._compliant.namespacer1   narwhals._spark_like.utilsr2   r3   narwhals._typingr4   r5   r6   r7   narwhals.dataframer8   narwhals.dtypesr9   narwhals.exceptionsr:   narwhals.typingr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   r   __all__rN   rP   rQ   rK   r   rJ   rL   rM   rX   r^   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iE+,/c1BBC12	(*:NJK46FVWiEXD(*:NJK"$4nDED(@(j"24QQ z<1NNO\:'7FG@(r^   