
    Wh                       U d dl mZ d dlmZmZmZmZ d dlmZm	Z	 d dl
mZmZmZmZmZmZ d dlZd dlmZ d dl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# 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/ d dl0m1Z1m2Z2 erd dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9Z:d dl;Z<d dl=m>Z>m?Z?m@Z@ d dlAmBZBmCZC d dlDmEZE d dlFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZOmPZP d dl$mQZQmRZR d dlSmTZT d dlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa ede:j                  f   Zcdedd<    ee ej                  d       ej                  d       ej                  d        ej                  d!       ej                  d"       ej                  d#       ej                  d$       ej                  d%       ej                  d&       ej                  d'       ej                  d(       ej                  d)       ej                  d*       ej                  d+       ej                  d,       ej                  d-       ej                  d.       ej                  d/       ej                  d0       ej                  d1      g      Zgd2edd3<    G d4 d5ed6         Zhy)7    )annotations)IterableIteratorMappingSequence)chainproduct)TYPE_CHECKINGAnyCallableLiteralcastoverloadN)EagerDataFrame)PANDAS_TO_NUMPY_DTYPE_MISSINGPandasLikeSeries)	align_and_extract_nativeget_dtype_backendimport_array_moduleiter_dtype_backendsnative_to_narwhals_dtypeobject_native_to_narwhals_dtyperenameselect_columns_by_name	set_index)assert_never)	Implementation_into_arrow_table_remap_full_join_keyscheck_column_names_are_uniqueexclude_column_namesgenerate_temporary_column_nameparse_columns_to_dropscale_bytes
zip_strictis_pandas_like_dataframe)InvalidOperationError
ShapeError)BytesIO)Path)
ModuleType)Self	TypeAliasTypeIs)CompliantDataFrameAnyCompliantLazyFrameAny)PandasLikeExprPandasLikeGroupByPandasLikeNamespace)SparkSession)IntoArrowTable)_EagerAllowedImpl_LazyAllowedImpl)Version_LimitedContext)DType)AsofJoinStrategyDTypeBackend
IntoSchemaJoinStrategyPivotAggSizedMultiIndexSelectorSizedMultiNameSelectorSizeUnitUniqueKeepStrategy_2DArray_SliceIndex
_SliceName.r.   Constructorfloat64float32int64int32int16int8uint64uint32uint16uint8boolzdatetime64[s]zdatetime64[ms]zdatetime64[us]zdatetime64[ns]ztimedelta64[s]ztimedelta64[ms]ztimedelta64[us]ztimedelta64[ns]objectzfrozenset[np.dtype[Any]]CLASSICAL_NUMPY_DTYPESc                  P   e Zd Zdd	 	 	 	 	 	 	 	 	 	 	 d]dZed^d       Ze	 	 	 	 	 	 	 	 d_d       Zed`d       Zedad       Z	e	 	 	 	 	 	 	 	 dbd       Z
dcd	Zdcd
ZdddZdedZdfdZdgdZdddhdZdidZed        ZdjdZdkdddldZdmdZdndZdodZdpdZ	 	 	 	 dqdZdrdZedsd       Zedtd       Zedud        Zedvd!       Zdvd"Zdwd#Z e Z!	 	 	 	 	 	 dxd$Z"edyd%       Z#dyd&Z$dzd'Z%d{d(Z&d|d)Z'd}d*Z(d~d+Z)dd,Z*dd-Z+d{d.Z,dd/Z-dd0Z.dd1Z/dd2Z0	 	 	 	 	 	 dd3Z1	 	 	 	 	 	 dd4Z2	 	 	 	 	 	 	 	 	 	 dd5Z3	 	 	 	 	 	 	 	 	 	 dd6Z4	 	 	 	 	 	 	 	 	 	 dd7Z5dd8Z6	 	 	 	 	 	 	 	 dd9Z7	 	 	 	 	 	 	 	 dd:Z8	 	 	 	 	 	 	 	 dd;Z9	 	 	 	 	 	 	 	 	 	 	 	 dd<Z:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd=Z;dd>Z<dd?Z=dd@	 	 	 	 	 	 	 	 	 ddAZ>	 dkddB	 	 	 	 	 ddCZ?eddD       Z@ddEZAdkdddldFZBddGZCddHZDddIZEeddJ       ZFeddK       ZFddLZFddMZGddNZHdcdOZIddPZJ	 	 	 	 	 	 	 	 ddQZKeddR       ZLe	 	 	 	 	 	 	 	 ddS       ZM	 	 	 	 	 	 	 	 	 	 ddTZN	 	 	 	 	 	 	 	 	 	 ddUZO	 	 	 	 	 	 	 	 	 	 ddVZP	 	 	 	 	 	 	 	 	 	 ddWZQ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddXZRddYZS	 	 	 	 	 	 	 	 	 	 ddZZT	 	 	 	 	 	 	 	 	 	 dd[ZUdd\ZVy)PandasLikeDataFrameFvalidate_backend_versionc                   || _         || _        || _        |rt        |j                         |r| j                          y y N)_native_frame_implementation_versionr    columns_validate_backend_version)selfnative_dataframeimplementationversionvalidate_column_namesr[   s         Y/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_pandas_like/dataframe.py__init__zPandasLikeDataFrame.__init__f   sA     .- )*:*B*BC#**, $    c                 |j                   }t        ||      }|j                         r|j                         }n|j	                         r)|j                         dk\  rddlm} nddlm}  ||      }nG|j                         r*|j                         j                  j                  |      }nd}t        |      | j                  ||      S )N)r      r   r   )
from_arrowzCcongratulations, you entered unreachable code - please report a bugcontext)r_   r   	is_pandas	to_pandasis_modin_backend_versionmodin.pandas.iorm   modin.pandas.utilsis_cudfto_native_namespace	DataFrameAssertionErrorfrom_native)clsdataro   re   tblnativempd_from_arrowmsgs           rh   rm   zPandasLikeDataFrame.from_arroww   s     00g.##%]]_F$$& ..0J>H $C(F##%#779CCNNsSFWC %%vw77rj   c                 ddl m} |j                  }|j                         }t	        d|j
                        }t	        d|j                        }i }	d }
|j                         D ]J  \  }}t        ||      r4t        j                  ||      }|
|}
||	|<   3t        |
|      d   |	|<   F||	|<   L |	s|s|j                  |	      }n |j                  |D ci c]  }|g  c}      }|r@d }|	rt        |j                  |      }|j                   ||      j!                  |            }| j                  ||      S c c}w )Nr   Schemaztype[pd.Series[Any]]ztype[pd.DataFrame]rn      )narwhals.schemar   r_   rw   r   Seriesrx   items
isinstancer   rz   r   	from_dictr   dtypesastyperq   )r{   r|   ro   schemar   re   nsr   rx   aligned_data	left_mostnameseries	compliantr~   colbackends                    rh   r   zPandasLikeDataFrame.from_dict   s>    	+ 00//1,bii8-r||<	8:-1	 JJL 		,LD&&&),88Q	$ )I)/L&)A)Y)WXY)ZL&%+T"		, v((6F((V)Dc#r')DEF59G-fmm^L]]6&>#;#;G#DEFvw77 *Es   
D;c                    t        |       S r]   r&   )objs    rh   
_is_nativezPandasLikeDataFrame._is_native   s    ',,rj   c              B     | ||j                   |j                  d      S )NTre   rf   rg   )r_   r`   )r{   r|   ro   s      rh   rz   zPandasLikeDataFrame.from_native   s'    "22$$"&	
 	
rj   c                 ddl m} |j                  j                         j                  }t        |t        |f      rVfd|j                         D        } |||j                               j                   ||      j                  |            }n ||| j                  ||            }| j                  ||      S )Nr   r   c              3  6   K   | ]  }t        |        y wr]   )r   ).0native_typere   s     rh   	<genexpr>z1PandasLikeDataFrame.from_numpy.<locals>.<genexpr>   s       * "+~>*s   ra   rn   )r   r   r_   rw   rx   r   r   valueskeysr   rq   _numpy_column_namesrz   )	r{   r|   ro   r   r   rx   itr~   re   s	           @rh   
from_numpyzPandasLikeDataFrame.from_numpy   s     	+ 00!/!C!C!E!O!O	fw/0*#)==?*B tV[[];BBv((,F tS-D-DT6-RSFvw77rj   c                    | S r]    rc   s    rh   __narwhals_dataframe__z*PandasLikeDataFrame.__narwhals_dataframe__       rj   c                    | S r]   r   r   s    rh   __narwhals_lazyframe__z*PandasLikeDataFrame.__narwhals_lazyframe__   r   rj   c                J    ddl m}  || j                  | j                        S )Nr   r5   )rf   )narwhals._pandas_like.namespacer6   r_   r`   )rc   r6   s     rh   __narwhals_namespace__z*PandasLikeDataFrame.__narwhals_namespace__   s    G"4#7#7OOrj   c                    | j                   t        j                  t        j                  t        j                  hv r| j                   j                         S dt        | j                          }t        |      )Nz!Expected pandas/modin/cudf, got: )r_   r   PANDASMODINCUDFrw   typery   rc   r   s     rh   __native_namespace__z(PandasLikeDataFrame.__native_namespace__   sj    !!  $
 

 '';;==1$t7K7K2L1MNS!!rj   c                ,    t        | j                        S r]   )lenr~   r   s    rh   __len__zPandasLikeDataFrame.__len__   s    4;;rj   c                T    | j                  | j                  | j                  |d      S )NFr   )	__class__r~   r_   )rc   rf   s     rh   _with_versionz!PandasLikeDataFrame._with_version   s.    ~~KK//"'	  
 	
rj   Trg   c               T    | j                  || j                  | j                  |      S )Nr   )r   r_   r`   )rc   dfrg   s      rh   _with_nativez PandasLikeDataFrame._with_native   s.    ~~//MM"7	  
 	
rj   c                   | j                   j                  }|j                  rB|j                   } t        |      |j                  d   ||j
                  |j                        S t        |      x}t        |      x}k7  rd| d| d}t        |      |j                   j                  |ur"t        |j                   ||j                        S |j                   S )Nr   )indexdtyper   zExpected object of length z, got: .)re   )r~   r   
_broadcastr   ilocr   r   r   r)   r   r_   )rc   otherr   s	len_otherlen_idxr   s          rh   _extract_comparandz&PandasLikeDataFrame._extract_comparand  s    !!A47166!9EqvvNNU#ICJ)>?.wiwykKCS/!<<U*U\\5AVAVWW||rj   c                D    t         rdd l}|S t        | j                        S Nr   )r
   numpyr   r_   )rc   nps     rh   _array_funcsz PandasLikeDataFrame._array_funcs  s    I"4#7#788rj   c                J    t        j                  | j                  |   |       S Nrn   )r   rz   r~   )rc   r   s     rh   
get_columnzPandasLikeDataFrame.get_column  s    ++DKK,=tLLrj   Ncopyc               (    | j                  ||      S )Nr   r   )to_numpy)rc   r   r   s      rh   	__array__zPandasLikeDataFrame.__array__  s    }}5t}44rj   c                    t        |t              rt        |      n|}| j                  | j                  j
                  |d d f         S r]   r   tuplelistr   r~   r   )rc   rowsr   s      rh   _gatherzPandasLikeDataFrame._gather  s:    (u5T
4  !1!1%(!;<<rj   c                    | j                  | j                  j                  t        |j                  |j
                  |j                        d d f   d      S NFr   )r   r~   r   slicestartstopstep)rc   r   s     rh   _gather_slicez!PandasLikeDataFrame._gather_slice"  sI      KKU4::tyy$))DaGH"' ! 
 	
rj   c                   |j                   /| j                  j                  j                  |j                         nd }|j                  2| j                  j                  j                  |j                        dz   nd }t        |||j                        }| j                  | j                  j                  d d |f   d      S )Nr   Fr   )	r   r~   ra   get_locr   r   r   r   r   )rc   ra   r   r   selectors        rh   _select_slice_namez&PandasLikeDataFrame._select_slice_name(  s     }}( KK''6 	 ||' KK''59 	
 gll3  KKQ[) ! 
 	
rj   c                ^    | j                  | j                  j                  d d |f   d      S r   r   r~   r   rc   ra   s     rh   _select_slice_indexz'PandasLikeDataFrame._select_slice_index8  s2      KKQZ( ! 
 	
rj   c                    t        |t              rt        |      n|}| j                  | j                  j
                  d d |f   d      S r   r   r   s     rh   _select_multi_indexz'PandasLikeDataFrame._select_multi_index=  sH     $.gu#=$w-7  KKQZ( ! 
 	
rj   c                Z    | j                  | j                  j                  d d |f         S r]   )r   r~   locr   s     rh   _select_multi_namez&PandasLikeDataFrame._select_multi_nameE  s$      G!<==rj   c                J    | j                   j                  j                         S r]   )r~   ra   tolistr   s    rh   ra   zPandasLikeDataFrame.columnsI  s    {{""))++rj   c                    y r]   r   rc   nameds     rh   r   zPandasLikeDataFrame.rowsM  s    EHrj   c                    y r]   r   r   s     rh   r   zPandasLikeDataFrame.rowsP  s    GJrj   c                    y r]   r   r   s     rh   r   zPandasLikeDataFrame.rowsS  s    TWrj   c               :   |sy| j                   t        j                  u r7| j                  d      D cg c]  }t	        |j                                c}S t        | j                  j                  dd             S | j                  j                  d      S c c}w )NT)r   Fr   r   recordsorient)
r_   r   r   r   r   r   r   r~   
itertuplesto_dict)rc   r   rows      rh   r   zPandasLikeDataFrame.rowsV  s}    ##~':'::7;yyty7LMcjjl+MM..U.FGG{{"")"44	 Ns    Bc              #     K   | j                   j                         D ]  \  }}t        j                  ||          y wr   )r~   r   r   rz   )rc   _namer   s      rh   iter_columnsz PandasLikeDataFrame.iter_columnsa  s;     ![[..0 	EME6"..vtDD	Es   =?c             #     K   |s&| j                   j                  dd       E d {    y | j                   j                  }| j                   j                  d      D ]  }t        t	        ||              y 7 Tw)NFr   r   )r~   r   ra   dictzip)rc   r   buffer_size	col_namesr  s        rh   	iter_rowszPandasLikeDataFrame.iter_rowsg  sp     
 {{--E-EEE++I{{--E-: 03y#.//0 Fs   #A<A:AA<c           	     2   | j                   j                  }| j                   j                  D ci c]]  }|||   dk7  r$t        ||   | j                  | j
                        n-t        | j                   |   | j                  | j
                        _ c}S c c}w )NrV   )r~   r   ra   r   r`   r_   r   )rc   native_dtypesr   s      rh   r   zPandasLikeDataFrame.schemas  s    ** {{**	
   S!X- *c"DMM43G3G 1C $--1E1E		
 		
 	
s   A"Bc                    | j                   S r]   )r   r   s    rh   collect_schemaz"PandasLikeDataFrame.collect_schema  s    {{rj   c                x    | j                  t        | j                  t        |      | j                        d      S r   )r   r   r~   r   r_   )rc   column_namess     rh   simple_selectz!PandasLikeDataFrame.simple_select  s8      "4;;\0BDDXDXY"' ! 
 	
rj   c                    | j                   | }|s+| j                   t        | j                               d      S  |d   j                  | }| j                         }|j                  |D cg c]  }|j                   c}      }| j                  j                  j                  |j                  _        | j                  |d      S c c}w )NFr   r   T)	_evaluate_into_exprsr   r   r~   _align_full_broadcastr   _concat_horizontalra   r   )rc   exprs
new_series	namespacer   r   s         rh   selectzPandasLikeDataFrame.select  s    .T..6
$$%6T$++%6%8PU$VV8Z]88*E
//1	))Z*H188*HI++--22

  4 @@ +Is   .C
c                    |-| j                  | j                  j                  d      d      S | j                         }|j	                   |j
                  | j                         d       }| j                  |      S )Nr   axisFr   T)ignore_nulls)r   r~   dropnar   any_horizontalr   is_nullfilter)rc   subsetplxmasks       rh   
drop_nullszPandasLikeDataFrame.drop_nulls  s    >$$"""*% %   ))+""7377F#3#;#;#=D"QQ{{4  rj   c                p    | j                   j                  d      j                         }t        ||      S )NT)deep)unit)r~   memory_usagesumr$   )rc   r)  szs      rh   estimated_sizez"PandasLikeDataFrame.estimated_size  s/    [[%%4%04462D))rj   c                   | j                         }|st        |       }| j                  j                  |      }|j                  j                  |j                  j                  || | j                  j                  |            }nJ|j                  |d         j                  dd      }|j                  g |      dz
  j                  |      }| j                  ||j                               S )N)ro   r   r   r   ordinalF)method
descending)partition_byorder_byr   )r   r   r   arange_expr_from_series_seriesfrom_iterabler~   r   r   rankoveraliasr  all)rc   r   r3  r$  sizer|   	row_indexr9  s           rh   with_row_indexz"PandasLikeDataFrame.with_row_index  s    ))+t9D$$++D1D		..))$dkk.?.?d * I 778A;',,I%,PDXFJQQRVWI{{9cggi00rj   c                T    t        d | j                  j                  |   D              S )Nc              3      K   | ]  }|  y wr]   r   )r   xs     rh   r   z*PandasLikeDataFrame.row.<locals>.<genexpr>  s     81Q8s   )r   r~   r   )rc   r   s     rh   r  zPandasLikeDataFrame.row  s"    8 0 0 7888rj   c                    t        |t              r|}n%| j                  |      d   }| j                  |      }| j	                  | j
                  j                  |   d      S )Nr   Fr   )r   r   r  r   r   r~   r   )rc   	predicatemask_nativer%  s       rh   r"  zPandasLikeDataFrame.filter  sb    i&7@K ,,Y7:D11$7K  KKOOK( ! 
 	
rj   c                ^      j                   | }|st               dk(  r S |D ci c]  }|j                  | }}g } j                  j                  D ]G  }||v r! j                  |j                  |            }n j                  |   }|j                  |       I |j                   fd|j                         D                j                         }|j                  |      }	 j                  j                  j                  |	j                  _         j                  |	d      S c c}w )Nr   c              3  @   K   | ]  }j                  |        y wr]   )r   )r   r   rc   s     rh   r   z3PandasLikeDataFrame.with_columns.<locals>.<genexpr>  s     S003Ss   Fr   )r  r   r   r~   ra   r   popappendextendr   r   r  r   )
rc   r  ra   r   name_columns	to_concatr   r   r  r   s
   `         rh   with_columnsz PandasLikeDataFrame.with_columns  s   +$++U33t9>KHO4P1QVVQY4P4P	KK'' 	%D|#001A1A$1GHT*V$	% 	S\=P=P=RSS//1	)))4++--22

  5 AA 5Qs   D*c                d    | j                  t        | j                  || j                              S )Nra   re   )r   r   r~   r_   )rc   mappings     rh   r   zPandasLikeDataFrame.rename  s+      4;;@T@TU
 	
rj   c               x    t        | ||      }| j                  | j                  j                  |      d      S )N)strictr   Fr   )r#   r   r~   drop)rc   ra   rR  to_drops       rh   rS  zPandasLikeDataFrame.drop  s?    'gfE  KKW-U ! 
 	
rj   c                   | j                   }t        |t              r| }n|D cg c]  }|  }}|rdnd}| j                  |j	                  t        |      ||      d      S c c}w )Nlastfirst)	ascendingna_positionFr   )r~   r   rU   r   sort_valuesr   )rc   r1  
nulls_lastbyr   rX  drY  s           rh   sortzPandasLikeDataFrame.sort  sp    [[j$'/9>I(231Q3I3 *f  NN48ykNR"' ! 
 	
 4s   
A%c               |   | j                   }| j                  t        |t              rXt	        fd|D              rD|r!| j                  |j                  ||            S | j                  |j                  ||            S | j                  |j                  t        |      |      j                  |      d      S )Nc              3  D   K   | ]  }|   j                           y wr]   )
is_numeric)r   rB  r   s     rh   r   z,PandasLikeDataFrame.top_k.<locals>.<genexpr>  s     ,PVAY-A-A-C,Ps    )rX  Fr   )r~   r   r   rU   r<  r   	nsmallestnlargestrZ  r   head)rc   kr\  reverser   r   s        @rh   top_kzPandasLikeDataFrame.top_k  s    [[gt$,PR,P)P((a)<==$$R[[B%788  NN48wN7<<Q?"' ! 
 	
rj   c                B   |-t        | j                  | j                  | j                  d      S |t        j
                  u rXt        j
                  | j                  dd}|| j                  ur|j                  d       t        | j                         fi |S |t        j                  u r*ddl	m
}  || j                         d| j                  d      S |t        j                  u r)ddlm}  || j                         d| j                  	      S d
| }t!        |      )NFr   TrZ   r   )ArrowDataFrame)rd   r[   rf   rg   )PolarsDataFramer   r[   rf   zUnsupported `backend` value: )rY   r~   r_   r`   r   r   updaterq   PYARROWnarwhals._arrow.dataframeri  to_arrowPOLARSnarwhals._polars.dataframerj  	to_polars
ValueError)rc   r   kwargskwdsri  rj  r   s          rh   collectzPandasLikeDataFrame.collect  s    ?&#33&+	  n+++"0"7"7==).$D
 d222T:&t~~'7@4@@n,,,@!!%)-&+	  n+++B">>#dDMM  .gY7orj   c               $    ddl m}  || ||      S )Nr   r3   )drop_null_keys)narwhals._pandas_like.group_byr4   )rc   r   rx  r4   s       rh   group_byzPandasLikeDataFrame.group_by%  s     	E tNKKrj   c               Z    | j                   j                  |j                   ||dd|f      S )Ninner left_onright_onhowsuffixes)r~   merge)rc   r   r  r  suffixs        rh   _join_innerzPandasLikeDataFrame._join_inner,  s7     {{  LL&\ ! 
 	
rj   c                   | j                   j                  |j                   d||d|f      }t        ||      D cg c]   \  }}||k7  r|| j                  vr|n| | " }}}|j	                  |d       |S c c}}w )Nleftr}  r  r  r  r  Tra   inplace)r~   r  r%   ra   rS  )	rc   r   r  r  r  result_nativeleft_key	right_keyextras	            rh   
_join_leftzPandasLikeDataFrame._join_left7  s     ))LL&\ * 
 (2'8'D
#)H$ #$,,6Iyk&<RR
 
 	5$7
s   %A9c                   t        |||      }|j                  j                  |      }t        |j                         t        |j                               }| j                  j                  |||dd|f      S )Nr   outerr}  r~  )r   r~   r   r    ra   r   r   r  )rc   r   r  r  r  right_on_mapperother_nativeright_suffixeds           rh   
_join_fullzPandasLikeDataFrame._join_fullK  sy     06J||**?*C%l&:&:;o4467{{  #&\ ! 
 	
rj   c                  | j                   }| j                  }|j                         s%|j                         s|j	                         r|dk  rt        dg | j                  |j                        } | j                  j                  di |dij                   |j                  j                  di |did||d|f      }|j                  |d	       |S | j                  j                  |j                  d
d|f      S )N)r         n_bytesra   r   r|  r}  r  Tr  cross)r  r  r   )r_   rs   rr   rv   rp   r"   ra   r~   assignr  rS  )rc   r   r  re   backend_version	key_tokenr  s          rh   _join_crosszPandasLikeDataFrame._join_cross[  s    --//##%)?)?)A$$&?V+C6#BT\\#BEMM#BI /DKK..@)Q@FF###5y!n5!"f G M y$?  {{  7b&\ RRrj   c          
         | j                  |t        |      t        t        ||                  }| j                  j                  |d||      S )Nr   columns_to_selectcolumns_mappingr|  r  r  r  )_join_filter_renamer   r  r  r~   r  )rc   r   r  r  r  s        rh   
_join_semizPandasLikeDataFrame._join_semiq  sY     //"8n Xw!78 0 

 {{  gw ! 
 	
rj   c          
        | j                   }|j                         r)| j                  j                  |j                  d||      S t	        dg | j
                  |j
                        | j                  |t        |      t        t        ||                  }| j                  j                  ||j                         rdnd||      j                  fd	   }|j                  d
       |S )Nleftantir  r  r  r  r  r  )r  	indicatorr  r  c                    |    dk(  S )N	left_onlyr   )tindicator_tokens    rh   <lambda>z0PandasLikeDataFrame._join_anti.<locals>.<lambda>  s    /*k9 rj   Tr  )r_   rv   r~   r  r"   ra   r  r   r  r  rp   r   rS  )rc   r   r  r  re   r  r  r  s          @rh   
_join_antizPandasLikeDataFrame._join_anti}  s     --!!#;;$$*g %   9>>>
 //"8n Xw!78 0 

 ))(224'% * 
 #9; 	?DArj   c                ~    | j                   }t        t        |j                  ||      ||      j	                         S )zHelper function to avoid creating extra columns and row duplication.

        Used in `"anti"` and `"semi`" join's.

        Notice that a native object is returned.
        )r  re   rO  )r_   r   r   r~   drop_duplicates)rc   r   r  r  re   s        rh   r  z'PandasLikeDataFrame._join_filter_rename  sC     --".-
 $)
 /
	rj   c                  |dk(  r| j                  ||      }n||t        ||      |dk(  r| j                  ||||      }nu|dk(  r| j                  |||      }n[|dk(  r| j	                  |||      }nA|dk(  r| j                  ||||      }n&|d	k(  r| j                  ||||      }nt        |       | j                        S )
Nr  )r   r  r|  )r   r  r  r  anti)r   r  r  semir  full)	r  rs  r  r  r  r  r  r   r   )rc   r   r  r  r  r  results          rh   joinzPandasLikeDataFrame.join  s     '>%%E&%AF_ 0Wh//G^%%Wx & F F]__5'H_UFF]__5'H_UFF]__Wx % F F]__Wx % F   ((rj   c                   | j                         }| j                  |j                  | j                  |j                  |||||d|f            S )Nr}  )r  r  left_byright_by	directionr  )r   r   
merge_asofr~   )	rc   r   r  r  by_leftby_rightstrategyr  r$  s	            rh   	join_asofzPandasLikeDataFrame.join_asof  sZ     '')  NN!!"f  	
 	
rj   c                Z    | j                  | j                  j                  |      d      S r   )r   r~   rd  rc   ns     rh   rd  zPandasLikeDataFrame.head  '      !1!1!!4E RRrj   c                Z    | j                  | j                  j                  |      d      S r   )r   r~   tailr  s     rh   r  zPandasLikeDataFrame.tail  r  rj   )maintain_orderc               h   dddj                  ||      }|r| j                  |      x}r||r|rt        d| j                        } | j	                  |d       j
                  |dddj                  j                  |xs | j                  |      j                  |      }|j                  |d	       nj|r= | j
                  |dddj                  j                  |xs | j                  |      }n+| j                  j                  |xs | j                  |      }| j                  |d
      S )NFrW  )noneanyr  )r3  )r[  r1  keepTr  r   )get_check_columns_existr"   ra   r?  r^  r~   r  rZ  rS  r   )	rc   r#  r  r  r3  mapped_keeperrortokenress	            rh   uniquezPandasLikeDataFrame.unique  s#     %W599$E 9 9& AAuAK21dllCE##ED#9xEeE(>$,,[QU#	  HHUDH1$))ef__V%;t||+_N  ++--f.D;-WC  E BBrj   )sessionc                  | j                         }|| S |t        j                  u r.dd l}ddlm}  ||j                  d      d| j                        S |t        j                  u r=dd l	}ddl
m}  | |j                  |      j                         d| j                        S |t        j                  u r0dd lm} ddlm}	  |	|j                  |      d| j                        S |t        j&                  u r:dd l}
dd	lm}  ||
j/                  || j0                  
      d| j                        S |j3                         r:ddlm} |d}t9        |       ||j;                  |      | j                  |d      S t<        )Nr   )DuckDBLazyFrame	pandas_dfTrk  )PolarsLazyFrame)DaskLazyFrame)rd   r[   rf   )IbisLazyFramer   )r[   rf   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)rf   re   r[   )rq   r   DUCKDBduckdbnarwhals._duckdb.dataframer  tabler`   rp  polarsrq  r  from_pandaslazyDASKdask.dataframe	dataframenarwhals._dask.dataframer  IBISibisnarwhals._ibis.dataframer  memtablera   is_spark_likenarwhals._spark_like.dataframer  rs  createDataFramery   )rc   r   r  r  r  r  plr  ddr  r  r  r  r   s                 rh   r  zPandasLikeDataFrame.lazy  sd    NN$	?Kn+++B"<<,)- 
 n+++B"!2>>),113)- 
 n)))'> !#	!:)- 
 n)))> i>)-    "IM o%%''	2&)-	  rj   c                .    | j                   j                  S r]   )r~   shaper   s    rh   r  zPandasLikeDataFrame.shapeW  s    {{   rj   c                   |r=| j                   D ci c]'  }|t        j                  | j                  |   |       ) c}S | j                  j	                  d      S c c}w )Nrn   r   r   )ra   r   rz   r~   r   )rc   	as_seriesr   s      rh   r   zPandasLikeDataFrame.to_dict[  sa      << %11$++c2BDQQ  {{""&"11	s   ,Ac          
         | j                   j                  }|| j                  t        j                  u }|j                  t              j                         r;|| j                   j                  ||      S | j                   j                  |      S | j                  j                  j                  }| j                  j                         D cg c]  \  }}t        ||      r|j                  |! }}}|ri| j                   | j!                         j"                  | j$                  j'                  d      j$                  j)                  d             j                   }n| j                   }||j                  ||      S |D ]k  }	t+        |	      t,        v st/        j0                  | j2                  D 
cg c]+  }
| j5                  |
      j                  |d       d d d f   - c}
      }|c S  |j                  |      S c c}}w c c}
w )Nr   r   UTC)r   r   )r~   r   r_   r   r   isinrW   r<  r   r`   Datetimer   r   r   	time_zonerM  r   r   dtconvert_time_zonereplace_time_zonestrr   r   hstackra   r   )rc   r   r   r  dtype_datetimekeyval
to_convertr   	col_dtyper   arrs               rh   r   zPandasLikeDataFrame.to_numpyc  s   **<''>+>+>>D4599; {{++%d+CC;;''T'22--66 !KK--/
S#~.3==3L 

 

 ""++-j"%%e,%%d+	
 f  B;;U;66 ' 	I9~!>>99 $(<< ,554t5LQPTWU 
	 {{{%%?
2s   $H70H
c                ^   | j                   t        j                  u r| j                  S | j                   t        j                  u r| j                  j                         S | j                   t        j                  u r| j                  j                         S d| j                    }t        |      )NzUnknown implementation: )	r_   r   r   r~   r   rq   r   
_to_pandasry   r   s     rh   rq   zPandasLikeDataFrame.to_pandas  s    >#8#88;;>#6#66;;((**>#7#77;;))++()=)=(>?S!!rj   c                J    dd l } |j                  | j                               S r   )r  r  rq   )rc   r  s     rh   rr  zPandasLikeDataFrame.to_polars  s    r~~dnn.//rj   c                :    | j                   j                  |       y r]   )r~   
to_parquetrc   files     rh   write_parquetz!PandasLikeDataFrame.write_parquet  s    t$rj   c                     y r]   r   r	  s     rh   	write_csvzPandasLikeDataFrame.write_csv  s    ,/rj   c                     y r]   r   r	  s     rh   r  zPandasLikeDataFrame.write_csv  s    =@rj   c                <    | j                   j                  |d      S )NFr  )r~   to_csvr	  s     rh   r  zPandasLikeDataFrame.write_csv  s    {{!!$e!44rj   c                f    t        j                  | j                  j                  d       |       S )NFr  rn   )r   rz   r~   
duplicatedr   s    rh   	is_uniquezPandasLikeDataFrame.is_unique  s/    ++[[###//
 	
rj   c                @   |D|B| j                   dk7  rd| j                   }t        |      | j                  j                  d   S ||d}t        |      t	        |t
              r| j                  j                  |      n|}| j                  j                  ||f   S )N)r   r   zycan only call `.item()` if the dataframe is of shape (1, 1), or if explicit row/col values are provided; frame has shape )r   r   z8cannot call `.item()` with only one of `row` or `column`)r  rs  r~   r   r   r  ra   r   )rc   r  columnr   _cols        rh   itemzPandasLikeDataFrame.item  s    ;6>zzV#((,

~7 
 !o%;;##D));&.LCS/!-7-Dt||!!&)&{{T	**rj   c                X    | j                  | j                  j                         d      S r   )r   r~   r   r   s    rh   clonezPandasLikeDataFrame.clone  s%      !1!1!35 QQrj   c                \    | j                  | j                  j                  |d |   d      S r   r   )rc   r  offsets      rh   gather_everyz PandasLikeDataFrame.gather_every  s.      !1!1&)!)!<TY ZZrj   c               v    |xs |rt        | h ||      nt        | |      }|xs t        | h ||      }||fS r]   )r!   )rc   onr   r   s       rh   _pivot_into_index_valuesz,PandasLikeDataFrame._pivot_into_index_values  sX      
 !~~f~6%dB/ 	
 D/mmUmDf}rj   c               H    d\  }}}dj                  |       }| | | | | S )N){}"z",")r  )unique_valuesLBRBQbodys        rh   _pivot_multi_on_namez(PandasLikeDataFrame._pivot_multi_on_name  s6    !	Bzz-(aSqc"&&rj   c                   |dkD  r-| D cg c]!  }|j                  |      j                         # c}S | D cg c]  }|d   	 c}S c c}w c c}w )Nr   )r  strip)r  n_values	separatorr   s       rh   _pivot_single_on_namesz*PandasLikeDataFrame._pivot_single_on_names  sL     a<;GHCINN3'--/HH#/0CB00 I0s
   &AAc             #     K   |dkD  r7|D ]1  }|| d  }|d   }|j                  || j                  |      f       3 y |D ]  }| j                  || d          y w)Nr   r   )r  r)  )rc   r  n_onr-  r.  r   namesprefixs           rh   _pivot_multi_on_namesz)PandasLikeDataFrame._pivot_multi_on_names  s      a<# QTEFQnnfd.G.G.N%OPPQ
 $ =//TEF<<=s   AAc               l    |dk(  r| j                  |||      S t        | j                  ||||            S )zReformat output column names from a native pivot operation, to match `polars`.

        Note:
            `column_names` is a `pd.MultiIndex`, but not in the stubs.
        r   )r/  r   r4  )rc   r  r1  r-  r.  s        rh   _pivot_remap_column_namesz-PandasLikeDataFrame._pivot_remap_column_names  s<     19..|XyQQD..|T8YWXXrj   c          	         | j                   t        j                  u ri nddi} | j                  j                  d||||dd|S )NobservedTF)r   r   ra   aggfuncmarginsr   )r_   r   r   r~   pivot_table)rc   r  r   r   aggregate_functionru  s         rh   _pivot_tablez PandasLikeDataFrame._pivot_table  s`     &&.*=*==BJPTCU 	 't{{&& 
&
 
 	
rj   c                   || j                   j                  |||      S |dk(  rV| j                   j                  g ||d      j                  t        j                  |d            j                  |||      S | j                  ||||      S )N)ra   r   r   r   F)as_indexr=  )r~   pivotgroupbyaggr  fromkeysr=  )rc   r  r   r   r<  s        rh   _pivotzPandasLikeDataFrame._pivot  s     %;;$$RuV$LL&##MbM5ME#BT]]6623rv>
   UF4FGGrj   c                    j                   }|j                         rd}t        |       j                  |||      \  }} j	                  ||||      }	|r fd|D        n
 fd|D        }
t        t        |gt        |
             }|	j                  d d |f   }	|	j                  } j                  |t        |      t        |      |      }||	_	        dg|	j                  _         j                  |	j                               S )Nzcpivot is not supported for Modin backend due to https://github.com/modin-project/modin/issues/7409.c              3     K   | ]B  }j                  |      j                         j                  d d       j                          D yw)F)r1  r[  N)r   r  r^  to_listr   r   rc   s     rh   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>A  sE      
 	 $59s   AAc              3  x   K   | ]1  }j                  |      j                         j                          3 y wr]   )r   r  rG  rH  s     rh   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>I  s,     Hc$//#&--/779Hs   7:)r1  r-  r.  r}  )r_   rr   NotImplementedErrorr  rD  r   r	   r   r   ra   r6  r   r2  r   reset_index)rc   r  r   r   r<  sort_columnsr.  re   r   r  uniquesordered_colsra   remappeds   `             rh   r@  zPandasLikeDataFrame.pivot-  s	    --""$wC%c**55b%HvR0BC 
  IRH 	 GF<U7^<=A|O,..11#b'CK9 2 
 " "t  !3!3!566rj   c                    | j                   t        j                  u r| j                  j	                  d      S dd l}|j                  j                  | j                        S )NF)preserve_indexr   )r_   r   r   r~   ro  pyarrowTabler  )rc   pas     rh   ro  zPandasLikeDataFrame.to_arrowU  sJ    >#6#66;;''u'==xx##DKK00rj   c               b    | j                  | j                  j                  ||||      d      S )N)r  fracreplacerandom_stateFr   )r   r~   sample)rc   r  fractionwith_replacementseeds        rh   rY  zPandasLikeDataFrame.sample]  sB       KK(,<4   #(	 ! 
 	
rj   c                ^    | j                  | j                  j                  ||||            S )N)id_vars
value_varsvar_name
value_name)r   r~   melt)rc   r  r   variable_namera  s        rh   unpivotzPandasLikeDataFrame.unpivotl  s:       KK&%	  
 	
rj   c                ,   | j                   j                  }| j                         }|D ]'  }||   }||j                  k7  sd| d}t	        |       t        |      dk(  r/| j                  | j                  j                  |d         d      S | j                  |d      j                  j                         t        fd|dd  D              sd}t        |      | j                  }|D cg c]	  }||vs| }	}g |	|d      j                  |d         }
|dd  D cg c]#  }|   j                         j                         % }}| j                         }| j                  |j                  |
g|d	      |   d      S c c}w c c}w )
Nz-`explode` operation not supported for dtype `z`, expected List typer   r   Fr   c              3  z   K   | ]2  }|   j                   j                         k(  j                          4 y wr]   )r   r   r<  )r   col_nameanchor_seriesnative_frames     rh   r   z.PandasLikeDataFrame.explode.<locals>.<genexpr>  s;      
 (#((,,.-?DDF
s   8;z2exploded columns must have matching element countsr  )r`   r   r  Listr(   r   r   r~   exploder   r<  r)   ra   to_framer   concat)rc   ra   r   r   col_to_exploder   r   original_columnscother_columnsexploded_framerg  exploded_seriesr$  rh  ri  s                 @@rh   rk  zPandasLikeDataFrame.explode|  s   %%$$&% 	1N>*E#CE7 K) )  ,C00	1 w<1$$##GAJ/u %   {{$WQZ05599; 
#ABK
 
 GCS/!<<$4Iq8HII%&B&Bwqz&BCKKGTUJWHOPQPR
<DL"**,557
 
 '')  JJ99JBCST"' ! 
 	
 J
s   3	F=F((F)rd   r   re   r   rf   r;   rg   rU   r[   rU   returnNone)r|   r8   ro   r<   rt  r-   )r|   zMapping[str, Any]ro   r<   r   zIntoSchema | Nonert  r-   )r   r   rt  zTypeIs[Any])r|   r   ro   r<   rt  r-   )r|   rG   ro   r<   r   z!IntoSchema | Sequence[str] | Nonert  r-   )rt  r-   )rt  r6   )rt  r,   )rt  int)rf   r;   rt  r-   )r   r   rg   rU   rt  r-   )r   r   rt  pd.Series[Any])r   r  rt  r   r]   )r   r   r   bool | Nonert  rG   )r   'SizedMultiIndexSelector[pd.Series[Any]]rt  r-   )r   _SliceIndex | rangert  r-   )ra   rI   rt  r-   )ra   rz  rt  r-   )ra   ry  rt  r-   )ra   z&SizedMultiNameSelector[pd.Series[Any]]rt  r-   )rt  	list[str])r   zLiteral[True]rt  zlist[dict[str, Any]])r   zLiteral[False]rt  zlist[tuple[Any, ...]])r   rU   rt  z,list[tuple[Any, ...]] | list[dict[str, Any]])rt  zIterator[PandasLikeSeries])r   rU   r	  rv  rt  z4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]])rt  zdict[str, DType])r  r  rt  r-   )r  r2   rt  r-   )r#  Sequence[str] | Nonert  r-   )r)  rE   rt  zint | float)r   r  r3  r|  rt  r-   )r   rv  rt  ztuple[Any, ...])rD  zPandasLikeExpr | list[bool]rt  r-   )rP  zMapping[str, str]rt  r-   )ra   Sequence[str]rR  rU   rt  r-   )r\  r  r1  bool | Sequence[bool]r[  rU   rt  r-   )re  rv  r\  Iterable[str]rf  r~  rt  r-   )r   z_EagerAllowedImpl | Nonert  r   rt  r0   )r   z(Sequence[str] | Sequence[PandasLikeExpr]rx  rU   rt  r4   )
r   r-   r  r}  r  r}  r  r  rt  pd.DataFrame)r   r-   r  r  rt  r  )r   r-   r  r}  r  r}  rt  r  )r   r-   r  r{  r  zdict[str, str]rt  r  )r   r-   r  rA   r  r|  r  r|  r  r  rt  r-   )r   r-   r  r  r  r  r  r|  r  r|  r  r>   r  r  rt  r-   )r  rv  rt  r-   )
r#  r|  r  rF   r  rx  r3  r|  rt  r-   )r   z_LazyAllowedImpl | Noner  zSparkSession | Nonert  r1   )rt  ztuple[int, int])r  rU   rt  zdict[str, Any])rt  r  )rt  zpl.DataFrame)r
  zstr | Path | BytesIOrt  ru  )r
  ru  rt  r  )r
  zstr | Path | BytesIO | Nonert  z
str | None)rt  r   )r  
int | Noner  zint | str | Nonert  r   )r  rv  r  rv  rt  r-   )r  r}  r   r|  r   r|  rt  z#tuple[Sequence[str], Sequence[str]])r$  ztuple[str, ...]rt  r  )r  r  r-  rv  r.  r  rt  r{  )
r  zIterable[tuple[str, ...]]r1  rv  r-  rv  r.  r  rt  zIterator[str])
r  zIterable[Any]r1  rv  r-  rv  r.  r  rt  r{  )
r  r}  r   r}  r   r}  r<  z?Literal['min', 'max', 'first', 'last', 'sum', 'mean', 'median']rt  r   )
r  r}  r   r}  r   r}  r<  PivotAgg | Nonert  r  )r  r}  r   r|  r   r|  r<  r  rL  rU   r.  r  rt  r-   )rt  r   )
r  r  rZ  zfloat | Noner[  rU   r\  r  rt  r-   )
r  r|  r   r|  rc  r  ra  r  rt  r-   )ra   r}  rt  r-   )W__name__
__module____qualname__ri   classmethodrm   r   staticmethodr   rz   r   r   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r   ra   r   r   r  _iter_columnsr  r   r  r  r  r&  r-  r?  r  r"  rM  r   rS  r^  rg  rv  rz  r  r  r  r  r  r  r  r  r  rd  r  r  r  r  r   r   rq   rr  r  r  r  r  r  r  r  r)  r/  r4  r6  r=  rD  r@  ro  rY  rd  rk  r   rj   rh   rY   rY   c   s
    */-- '	-
 -  $- #'- 
-" 8 8. #8#8
 !#8 "#8 
#8 #8J - - 
 
 88
 !8 28 
8 80P
	" 
 FJ 

 9 9M5$ 5=

 


>
	
> , , H HJ JW W	5E !M
0
0+.
0	=
0 
 


A!*1 9	
B(






'/';>'	'TL<LQUL	L	
	
'4	
@M	
WZ	
		
'4@MWZ	(

'4
@M
WZ
	
 S,



'4

@M

	

'4@M	@.7JX	(")") 	")
 &") '") ") 
")H

 	

 
 &
 '
 #
 
 

6SS '+C$C !	C
 $C 'C 
CB ,0@ (,	@(@ %	@
 
@D ! !2-& -&^"0
% / /@ @5

+$R[ $ %	 
- ' '
 1#1/21?B1	1 1=/= = 	=
 = 
="
Y)
Y47
YCF
YSV
Y	
Y

 
 	



 

,HH H 	H
 ,H 
H$&7&7 $	&7
 %&7 ,&7 &7 &7 
&7P1

 	

 
 
 


 
 $
 	

 
 

 (
rj   rY   )r   r2   r   rw  )i
__future__r   collections.abcr   r   r   r   	itertoolsr   r	   typingr
   r   r   r   r   r   r   r   narwhals._compliantr   narwhals._pandas_like.seriesr   r   narwhals._pandas_like.utilsr   r   r   r   r   r   r   r   r   narwhals._typing_compatr   narwhals._utilsr   r   r   r    r!   r"   r#   r$   r%   narwhals.dependenciesr'   narwhals.exceptionsr(   r)   ior*   pathlibr+   typesr,   pandaspdr  r  typing_extensionsr-   r.   r/   narwhals._compliant.typingr0   r1   narwhals._pandas_like.exprr2   ry  r4   r   r6   narwhals._spark_like.utilsr7   narwhals._translater8   narwhals._typingr9   r:   r;   r<   narwhals.dtypesr=   narwhals.typingr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rx   rJ   __annotations__	frozensetr   rW   rY   r   rj   rh   <module>r     s   " A A $ H H  . X
 
 
 1
 
 
 ; A 99W9@C72D8%    &c2<<&78K8 4=!!"!"!"!""#"#"#)4 0 4A
PQA
rj   