
    /_i                       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!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/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z6 erd dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=Z>d dl?Z@d dlAmBZBmCZCmDZD d dlEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d dlPmQZQ d dlRmSZSmTZT d dl%mUZUmVZV d dlWmXZX d dlYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe ede>j                  f   Zgdehd<    ei 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       ej                  d2      g      Zkd3ehd4<    G d5 d6ed7         Zly)8    )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narwhals_to_native_dtype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)col)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.r0   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                  r   e Zd Zdd	 	 	 	 	 	 	 	 	 	 	 d^dZed_d       Ze	 	 	 	 	 	 	 	 d`d       Ze	 	 	 	 	 	 	 	 dad       Zedbd       Z	edcd       Z
e	 	 	 	 	 	 	 	 ddd	       Zded
ZdedZdfdZdgdZdhdZdidZdddjdZdkdZed        ZdldZdmdddndZdodZdpdZdqdZdrdZ	 	 	 	 dsdZdtdZedud       Zedvd        Z edwd!       Z edxd"       Z dxd#Z dyd$Z!e!Z"	 	 	 	 	 	 dzd%Z#ed{d&       Z$d{d'Z%d|d(Z&d}d)Z'd~d*Z(dd+Z)dd,Z*dd-Z+dd.Z,d}d/Z-dd0Z.dd1Z/dd2Z0dd3Z1	 	 	 	 	 	 dd4Z2	 	 	 	 	 	 dd5Z3	 	 	 	 	 	 	 	 	 	 dd6Z4	 	 	 	 	 	 	 	 	 	 dd7Z5	 	 	 	 	 	 	 	 	 	 dd8Z6dd9Z7	 	 	 	 	 	 	 	 dd:Z8	 	 	 	 	 	 	 	 dd;Z9	 	 	 	 	 	 	 	 dd<Z:	 	 	 	 	 	 	 	 	 	 	 	 dd=Z;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd>Z<dd?Z=dd@Z>ddA	 	 	 	 	 	 	 	 	 ddBZ?	 dmddC	 	 	 	 	 ddDZ@eddE       ZAddFZBdmdddndGZCddHZDddIZEddJZFeddK       ZGeddL       ZGddMZGddNZHddOZIdedPZJddQZK	 	 	 	 	 	 	 	 ddRZLeddS       ZMe	 	 	 	 	 	 	 	 ddT       ZN	 	 	 	 	 	 	 	 	 	 ddUZO	 	 	 	 	 	 	 	 	 	 ddVZP	 	 	 	 	 	 	 	 	 	 ddWZQ	 	 	 	 	 	 	 	 	 	 ddXZR	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddYZSddZZT	 	 	 	 	 	 	 	 	 	 dd[ZU	 	 	 	 	 	 	 	 	 	 dd\ZVdd]ZWy)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         ^/var/www/html/land_sniper/venv/lib/python3.12/site-packages/narwhals/_pandas_like/dataframe.py__init__zPandasLikeDataFrame.__init__h   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)ra   r   	is_pandas	to_pandasis_modin_backend_versionmodin.pandas.ioro   modin.pandas.utilsis_cudfto_native_namespace	DataFrameAssertionErrorfrom_native)clsdatarq   rg   tblnativempd_from_arrowmsgs           rj   ro   zPandasLikeDataFrame.from_arrowy   s     00g.##%]]_F$$& ..0J>H $C(F##%#779CCNNsSFWC %%vw77rl   c              6   |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|rt        |j                  |      }nd t        t        |            D        }t        |j                         |      D ci c].  \  \  }}}|$|t!        |||j                   |j"                        0 }}}}|j%                  |      }| j                  ||      S c c}w c c}}}w )Nztype[pd.Series[Any]]type[pd.DataFrame]rp      c              3      K   | ]  }d   y wr_    .0_s     rj   	<genexpr>z0PandasLikeDataFrame.from_dict.<locals>.<genexpr>        =QD=   rg   rh   )ra   ry   r   Seriesrz   items
isinstancer   r|   r   	from_dictr   dtypesrangelenzipr   rb   astype)r}   r~   rq   schemarg   pdxr   rz   aligned_data	left_mostnameseries	compliantr   r+   backendskeydtypebackendnative_schemas                       rj   r   zPandasLikeDataFrame.from_dict   s    !00002,cjj9-s}}=	8:-1	 JJL 		,LD&&&),88Q	$ )I)/L&)A)Y)WXY)ZL&%+T"		, v((6F((V)Dc#r')DEF.v}}nM=%F*<= 036<<>8/L	 	 ,\c57$ -#*#:#:#,,	 	M 	 ]]=1Fvw77% *E	s   
F43Fc              H   |j                   }|j                         }t        d|j                        }|s|s|j	                  |      }n |j                  |D ci c]  }|g  c}      }|r|rt        |j                  |      }	nd t        t        |            D        }	t        |j                         |	      D 
ci c].  \  \  }
}}|$|
t        |||j                   |j                        0 }}}
}|j                  |      }| j                  ||      S c c}w c c}}}
w )Nr   c              3      K   | ]  }d   y wr_   r   r   s     rj   r   z1PandasLikeDataFrame.from_dicts.<locals>.<genexpr>   r   r   r   rp   )ra   ry   r   rz   from_recordsr   r   r   r   r   r   r   r   rb   r   r|   )r}   r~   rq   r   rg   nsrz   r   r+   r   r   r   r   r   s                 rj   
from_dictszPandasLikeDataFrame.from_dicts   s    !00//1-r||<	v++D1F((V)Dc#r')DEF.v}}nM=%F*<= 036<<>8/L	 	 ,\c57$ -#*#:#:#,,	 	M 	 ]]=1Fvw77% *E	s   
D=3Dc                    t        |       S r_   r'   )objs    rj   
_is_nativezPandasLikeDataFrame._is_native   s    ',,rl   c              B     | ||j                   |j                  d      S )NTrg   rh   ri   )ra   rb   )r}   r~   rq   s      rj   r|   zPandasLikeDataFrame.from_native   s'    "22$$"&	
 	
rl   c                 ddl m} |j                  j                         j                  }t        |t        |f      rVfd|j                         D        } |||j                               j                   ||      j                  |            }n ||| j                  ||            }| j                  ||      S )Nr   )Schemac              3  6   K   | ]  }t        |        y wr_   )r   )r   native_typerg   s     rj   r   z1PandasLikeDataFrame.from_numpy.<locals>.<genexpr>   s       * "+~>*s   rc   rp   )narwhals.schemar   ra   ry   rz   r   r   valueskeysr   rs   _numpy_column_namesr|   )	r}   r~   rq   r   r   rz   itr   rg   s	           @rj   
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7rl   c                    | S r_   r   re   s    rj   __narwhals_dataframe__z*PandasLikeDataFrame.__narwhals_dataframe__
      rl   c                    | S r_   r   r   s    rj   __narwhals_lazyframe__z*PandasLikeDataFrame.__narwhals_lazyframe__  r   rl   c                J    ddl m}  || j                  | j                        S )Nr   r7   )rh   )narwhals._pandas_like.namespacer8   ra   rb   )re   r8   s     rj   __narwhals_namespace__z*PandasLikeDataFrame.__narwhals_namespace__  s    G"4#7#7OOrl   c                    | j                   t        j                  t        j                  t        j                  hv r| j                   j                         S dt        | j                          }t        |      )Nz!Expected pandas/modin/cudf, got: )ra   r   PANDASMODINCUDFry   typer{   re   r   s     rj   __native_namespace__z(PandasLikeDataFrame.__native_namespace__  sj    !!  $
 

 '';;==1$t7K7K2L1MNS!!rl   c                ,    t        | j                        S r_   )r   r   r   s    rj   __len__zPandasLikeDataFrame.__len__   s    4;;rl   c                T    | j                  | j                  | j                  |d      S )NFr   )	__class__r   ra   )re   rh   s     rj   _with_versionz!PandasLikeDataFrame._with_version#  s.    ~~KK//"'	  
 	
rl   Tri   c               T    | j                  || j                  | j                  |      S )Nr   )r   ra   rb   )re   dfri   s      rj   _with_nativez PandasLikeDataFrame._with_native+  s.    ~~//MM"7	  
 	
rl   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   )indexr   r   zExpected object of length z, got: .)rg   )r   r   
_broadcastr   ilocr   r   r   r*   r   ra   )re   otherr   s	len_otherlen_idxr   s          rj   _extract_comparandz&PandasLikeDataFrame._extract_comparand3  s    !!A47166!9EqvvNNU#ICJ)>?.wiwykKCS/!<<U*U\\5AVAVWW||rl   c                D    t         rdd l}|S t        | j                        S Nr   )r
   numpyr   ra   )re   nps     rj   _array_funcsz PandasLikeDataFrame._array_funcs?  s    I"4#7#788rl   c                J    t        j                  | j                  |   |       S Nrp   )r   r|   r   )re   r   s     rj   
get_columnzPandasLikeDataFrame.get_columnG  s    ++DKK,=tLLrl   Ncopyc               (    | j                  ||      S )Nr   r   )to_numpy)re   r   r   s      rj   	__array__zPandasLikeDataFrame.__array__J  s    }}5t}44rl   c                    t        |t              rt        |      n|}| j                  | j                  j
                  |d d f         S r_   r   tuplelistr   r   r   )re   rowsr   s      rj   _gatherzPandasLikeDataFrame._gatherM  s:    (u5T
4  !1!1%(!;<<rl   c                    | j                  | j                  j                  t        |j                  |j
                  |j                        d d f   d      S NFr   )r   r   r   slicestartstopstep)re   r   s     rj   _gather_slicez!PandasLikeDataFrame._gather_sliceQ  sI      KKU4::tyy$))DaGH"' ! 
 	
rl   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   rc   get_locr   r   r   r   r   )re   rc   r   r   selectors        rj   _select_slice_namez&PandasLikeDataFrame._select_slice_nameW  s     }}( KK''6 	 ||' KK''59 	
 gll3  KKQ[) ! 
 	
rl   c                ^    | j                  | j                  j                  d d |f   d      S r   r   r   r   re   rc   s     rj   _select_slice_indexz'PandasLikeDataFrame._select_slice_indexg  s2      KKQZ( ! 
 	
rl   c                    t        |t              rt        |      n|}| j                  | j                  j
                  d d |f   d      S r   r   r   s     rj   _select_multi_indexz'PandasLikeDataFrame._select_multi_indexl  sH     $.gu#=$w-7  KKQZ( ! 
 	
rl   c                Z    | j                  | j                  j                  d d |f         S r_   )r   r   locr   s     rj   _select_multi_namez&PandasLikeDataFrame._select_multi_namet  s$      G!<==rl   c                J    | j                   j                  j                         S r_   )r   rc   tolistr   s    rj   rc   zPandasLikeDataFrame.columnsx  s    {{""))++rl   c                    y r_   r   re   nameds     rj   r   zPandasLikeDataFrame.rows|  s    EHrl   c                    y r_   r   r  s     rj   r   zPandasLikeDataFrame.rows  s    GJrl   c                    y r_   r   r  s     rj   r   zPandasLikeDataFrame.rows  s    TWrl   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)
ra   r   r   r   r   r   r   r   
itertuplesto_dict)re   r  rows      rj   r   zPandasLikeDataFrame.rows  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   r|   )re   _namer   s      rj   iter_columnsz PandasLikeDataFrame.iter_columns  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  rc   dictr   )re   r  buffer_size	col_namesr  s        rj   	iter_rowszPandasLikeDataFrame.iter_rows  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 )NrX   )r   r   rc   r   rb   ra   r   )re   native_dtypesr+   s      rj   r   zPandasLikeDataFrame.schema  s    ** {{**	
   S!X- *c"DMM43G3G 1C $--1E1E		
 		
 	
s   A"Bc                    | j                   S r_   )r   r   s    rj   collect_schemaz"PandasLikeDataFrame.collect_schema  s    {{rl   c                x    | j                  t        | j                  t        |      | j                        d      S r   )r   r   r   r   ra   )re   column_namess     rj   simple_selectz!PandasLikeDataFrame.simple_select  s8      "4;;\0BDDXDXY"' ! 
 	
rl   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_exprsr   r   r   _align_full_broadcastr   _concat_horizontalrc   r   )re   exprs
new_series	namespacer   r   s         rj   selectzPandasLikeDataFrame.select  s    )T))51
$$%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)re   subsetplxmasks       rj   
drop_nullszPandasLikeDataFrame.drop_nulls  s    >$$"""*% %   ))+""7377F#3#;#;#=D"QQ{{4  rl   c                p    | j                   j                  d      j                         }t        ||      S )NT)deep)unit)r   memory_usagesumr%   )re   r9  szs      rj   estimated_sizez"PandasLikeDataFrame.estimated_size  s/    [[%%4%04462D))rl   c                <   | j                         }|q| j                  j                  t        |             }|j                  j                  |j                  j                  || | j                  j                  |            }nzt        dt        |d         j                  d      j                  |            }|j                  g |      |j                  dd       j!                         z
  j#                  |      }| j%                  ||j'                               S )N)rq   r   r   r4   r   ordinal)method)partition_byorder_byr   )r   r   aranger   _expr_from_series_seriesfrom_iterabler   r   r   nw_colrank_to_compliant_exproverlit	broadcastaliasr*  all)re   r   rB  r4  r~   	row_indexrI  s          rj   with_row_indexz"PandasLikeDataFrame.with_row_index  s    ))+$$++CI6D		..))$dkk.?.?d * I  x{#((	(:MMcRD
 		rH	=''!T",,./eDk  {{9cggi00rl   c                T    t        d | j                  j                  |   D              S )Nc              3      K   | ]  }|  y wr_   r   )r   xs     rj   r   z*PandasLikeDataFrame.row.<locals>.<genexpr>  s     81Q8r   )r   r   r   )re   r   s     rj   r  zPandasLikeDataFrame.row  s"    8 0 0 7888rl   c                    | j                  |      }| j                  |      }| j                  | j                  j                  |   d      S r   )_evaluate_single_output_exprr   r   r   r  )re   	predicater5  mask_natives       rj   r2  zPandasLikeDataFrame.filter  sL    00;--d3  KKOOK( ! 
 	
rl   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   re   s     rj   r   z3PandasLikeDataFrame.with_columns.<locals>.<genexpr>  s     S003Ss   Fr   )r$  r   r   r   rc   r   popappendextendr   r   r&  r   )
re   r'  rc   r   name_columns	to_concatr   r   r)  r   s
   `         rj   with_columnsz PandasLikeDataFrame.with_columns  s   &$&&.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rc   rg   )r   r   r   ra   )re   mappings     rj   r   zPandasLikeDataFrame.rename  s+      4;;@T@TU
 	
rl   c               x    t        | ||      }| j                  | j                  j                  |      d      S )N)strictr   Fr   )r$   r   r   drop)re   rc   re  to_drops       rj   rf  zPandasLikeDataFrame.drop
  s?    'gfE  KKW-U ! 
 	
rl   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   rW   r   sort_valuesr   )re   
descending
nulls_lastbyr   rk  drl  s           rj   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   rT  r   s     rj   r   z,PandasLikeDataFrame.top_k.<locals>.<genexpr>   s     ,PVAY-A-A-C,Ps    )rk  Fr   )r   r   r   rW   rO  r   	nsmallestnlargestrm  r   head)re   krp  reverser   r   s        @rj   top_kzPandasLikeDataFrame.top_k  s    [[gt$,PR,P)P((a)<==$$R[[B%788  NN48wN7<<Q?"' ! 
 	
rl   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   Tr\   r   )ArrowDataFrame)rf   r]   rh   ri   )PolarsDataFramer   r]   rh   zUnsupported `backend` value: )r[   r   ra   rb   r   r   updaters   PYARROWnarwhals._arrow.dataframer}  to_arrowPOLARSnarwhals._polars.dataframer~  	to_polars
ValueError)re   r   kwargskwdsr}  r~  r   s          rj   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rl   c               $    ddl m}  || ||      S )Nr   r5   )drop_null_keys)narwhals._pandas_like.group_byr6   )re   r   r  r6   s       rj   group_byzPandasLikeDataFrame.group_byT  s     	E tNKKrl   c               |    | j                   j                  |d      j                  |j                   ||dd|f      S )Nanyr3  howinner left_onright_onr  suffixes)r   r/  merge)re   r   r  r  suffixs        rj   _join_innerzPandasLikeDataFrame._join_inner[  sH     {{!!e!<BBLL&\ C 
 	
rl   c                   | j                   j                  |j                   j                  |d      d||d|f      }t        ||      D cg c]   \  }}||k7  r|| j                  vr|n| | " }}}|j                  |d       |S c c}}w )Nr  r  leftr  r  r  r  r  Trc   inplace)r   r  r/  r&   rc   rf  )	re   r   r  r  r  result_nativeleft_key	right_keyextras	            rj   
_join_leftzPandasLikeDataFrame._join_leftf  s     ))LLxU;&\ * 
 (2'8'D
#)H$ #$,,6Iyk&<RR
 
 	5$7
s   %B
c                  | j                         }| j                  }t        |||      }|j                  j                  |      }t	        |j
                         t        |j                               }	|t        |         j                         j                  d      }
||	   j                         j                  d      }t        |j
                        j                  | j
                        j                  |      }||   j                  |D ci c]	  }|| |  c}      }||
    j                  ||    ||	dd|f      }|j                  |||
   |g      S c c}w )Nr   r   r,  outerr  r  )r   r   r    r   r!   rc   r   r   isnar  setintersection
differencer  _concat_diagonal)re   r   r  r  r  r   self_nativeright_on_mapperother_nativeright_suffixedleft_null_maskright_null_mask	to_renamer+   right_null_rowsjoin_results                   rj   
_join_fullzPandasLikeDataFrame._join_fullz  sj    ((*kk/6J||**?*C%l&:&:;o4467$T']388:>>A>F&~6;;=AAqAI &33DLLALLXV	&7>>6?@sSSE&**@ ? 
 ">/288/)*#&\ 9 
 ""+n5G
 	
 As   E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_bytesrc   r   r  r  r  Tr  cross)r  r  r   )ra   ru   rt   rx   rr   r#   rc   r   assignr  rf  )re   r   r  rg   backend_version	key_tokenr  s          rj   _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Rrl   c          
         | j                  |t        |      t        t        ||                  }| j                  j                  |d      j                  |d||      S )Nr   columns_to_selectcolumns_mappingr  r  r  r  r  r  )_join_filter_renamer   r  r   r   r/  r  )re   r   r  r  r  s        rj   
_join_semizPandasLikeDataFrame._join_semi  sj     //"8n Xw!78 0 

 {{!!e!<BBgw C 
 	
rl   c          
     ,   | j                   }|j                         r:| j                  j                  |j                  j	                  |d      d||      S t        dg | j                  |j                        | j                  |t        |      t        t        ||                  }| j                  j                  |j	                  |d      |j                         rdnd	||
      j                  fd   }|j                  d       |S )Nr  r  leftantir  r  r  r  r  r  )r  	indicatorr  r  c                    |    dk(  S )N	left_onlyr   )tindicator_tokens    rj   <lambda>z0PandasLikeDataFrame._join_anti.<locals>.<lambda>  s    /*k9 rl   Tr  )ra   rx   r   r  r/  r#   rc   r  r   r  r   rr   r  rf  )re   r   r  r  rg   r  r  r  s          @rj   
_join_antizPandasLikeDataFrame._join_anti  s    --!!#;;$$##7#>!	 %   9>>>
 //"8n Xw!78 0 

 ))wE:(224'% * 
 #9; 	?DArl   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!  rg   rb  )ra   r   r   r   drop_duplicates)re   r   r  r  rg   s        rj   r  z'PandasLikeDataFrame._join_filter_rename  sC     --".-
 $)
 /
	rl   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  r  r  r  r  r  r  r   r   )re   r   r  r  r  r  results          rj   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   ((rl   c                   | j                         }| j                  |j                  | j                  |j                  |||||d|f            S )Nr  )r  r  left_byright_by	directionr  )r   r   
merge_asofr   )	re   r   r  r  by_leftby_rightstrategyr  r4  s	            rj   	join_asofzPandasLikeDataFrame.join_asof  sZ     '')  NN!!"f  	
 	
rl   c                Z    | j                  | j                  j                  |      d      S r   )r   r   rx  re   ns     rj   rx  zPandasLikeDataFrame.head2  '      !1!1!!4E RRrl   c                Z    | j                  | j                  j                  |      d      S r   )r   r   tailr  s     rj   r  zPandasLikeDataFrame.tail5  r  rl   )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 )NFrj  )noner  r  )rB  )ro  rn  keepTr  r   )get_check_columns_existr#   rc   rQ  rr  r   r  rm  rf  r   )	re   r3  r  r  rB  mapped_keeperrortokenress	            rj   uniquezPandasLikeDataFrame.unique8  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Brl   )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_dfTr  )PolarsLazyFrame)DaskLazyFrame)rf   r]   rh   )IbisLazyFramer   )r]   rh   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)rh   rg   r]   )rs   r   DUCKDBduckdbnarwhals._duckdb.dataframer  tablerb   r  polarsr  r  from_pandaslazyDASKdask.dataframe	dataframenarwhals._dask.dataframer  IBISibisnarwhals._ibis.dataframer  memtablerc   is_spark_likenarwhals._spark_like.dataframer  r  createDataFramer{   )re   r   r  r  r  r  plr  ddr  r  r  r  r   s                 rj   r  zPandasLikeDataFrame.lazyW  sd    NN$	?Kn+++B"<<,)- 
 n+++B"!2>>),113)- 
 n)))'> !#	!:)- 
 n)))> i>)-    "IM o%%''	2&)-	  rl   c                .    | j                   j                  S r_   )r   shaper   s    rj   r  zPandasLikeDataFrame.shape  s    {{   rl   c                   |r=| j                   D ci c]'  }|t        j                  | j                  |   |       ) c}S | j                  j	                  d      S c c}w )Nrp   r   r  )rc   r   r|   r   r  )re   	as_seriesr+   s      rj   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   ra   r   r   isinrY   rO  r   rb   Datetimer   r   r   	time_zoner`  r   r+   dtconvert_time_zonereplace_time_zonestrr   r   hstackrc   r   )re   r   r   r  dtype_datetimer   val
to_convertr   	col_dtyper+   arrs               rj   r   zPandasLikeDataFrame.to_numpy  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: )	ra   r   r   r   r   rs   r   
_to_pandasr{   r   s     rj   rs   zPandasLikeDataFrame.to_pandas  s    >#8#88;;>#6#66;;((**>#7#77;;))++()=)=(>?S!!rl   c                J    dd l } |j                  | j                               S r   )r   r  rs   )re   r  s     rj   r  zPandasLikeDataFrame.to_polars  s    r~~dnn.//rl   c                :    | j                   j                  |       y r_   )r   
to_parquetre   files     rj   write_parquetz!PandasLikeDataFrame.write_parquet  s    t$rl   c                     y r_   r   r(  s     rj   	write_csvzPandasLikeDataFrame.write_csv  s    ,/rl   c                     y r_   r   r(  s     rj   r,  zPandasLikeDataFrame.write_csv  s    =@rl   c                <    | j                   j                  |d      S )NFr  )r   to_csvr(  s     rj   r,  zPandasLikeDataFrame.write_csv  s    {{!!$e!44rl   c                f    t        j                  | j                  j                  d       |       S )NFr  rp   )r   r|   r   
duplicatedr   s    rj   	is_uniquezPandasLikeDataFrame.is_unique  s/    ++[[###//
 	
rl   c                0   |<|:| j                   x}dk7  rd|}t        |      | j                  j                  d   S ||d}t        |      t	        |t
              r| j                  j                  |      n|}| j                  j                  ||f   S )N)r   r   zfcan only call `.item()` without "row" or "column" values if the DataFrame has a single element; shape=)r   r   z8cannot call `.item()` with only one of `row` or `column`)r  r  r   r   r   r  rc   r   )re   r  columnr  r   _cols         rj   itemzPandasLikeDataFrame.item  s    ;6>#.==BIG  !o%;;##D));&.LCS/!-7-Dt||!!&)&{{T	**rl   c                X    | j                  | j                  j                         d      S r   )r   r   r   r   s    rj   clonezPandasLikeDataFrame.clone  s%      !1!1!35 QQrl   c                \    | j                  | j                  j                  |d |   d      S r   r   )re   r  offsets      rj   gather_everyz PandasLikeDataFrame.gather_every	  s.      !1!1&)!)!<TY ZZrl   c               v    |xs |rt        | h ||      nt        | |      }|xs t        | h ||      }||fS r_   )r"   )re   onr   r   s       rj   _pivot_into_index_valuesz,PandasLikeDataFrame._pivot_into_index_values  sX      
 !~~f~6%dB/ 	
 D/mmUmDf}rl   c               H    d\  }}}dj                  |       }| | | | | S )N){}"z",")r  )unique_valuesLBRBQbodys        rj   _pivot_multi_on_namez(PandasLikeDataFrame._pivot_multi_on_name  s6    !	Bzz-(aSqc"&&rl   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       rj   _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  rH  )re   r!  n_onrL  rM  r+   namesprefixs           rj   _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   )rN  r   rS  )re   r!  rP  rL  rM  s        rj   _pivot_remap_column_namesz-PandasLikeDataFrame._pivot_remap_column_names:  s<     19..|XyQQD..|T8YWXXrl   c          	         | j                   t        j                  u ri nddi} | j                  j                  d||||dd|S )NobservedTF)r   r   rc   aggfuncmarginsr   )ra   r   r   r   pivot_table)re   r=  r   r   aggregate_functionr  s         rj   _pivot_tablez PandasLikeDataFrame._pivot_tableF  s`     &&.*=*==BJPTCU 	 't{{&& 
&
 
 	
rl   c                   || j                   j                  |||      S |dk(  rV| j                   j                  g ||d      j                  t        j                  |d            j                  |||      S | j                  ||||      S )N)rc   r   r   r   F)as_indexsize)r   pivotgroupbyaggr  fromkeysr\  )re   r=  r   r   r[  s        rj   _pivotzPandasLikeDataFrame._pivot\  s     %;;$$RuV$LL&##MbM5ME#BT]]6623rv>
   UF4FGGrl   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)rn  ro  N)r   r  rr  to_listr   r+   re   s     rj   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  sE      
 	 $59s   AAc              3  x   K   | ]1  }j                  |      j                         j                          3 y wr_   )r   r  rg  rh  s     rj   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  s,     Hc$//#&--/779Hs   7:)rP  rL  rM  r  )ra   rt   NotImplementedErrorr>  rd  r   r	   r   r  rc   rU  r   rQ  r   reset_index)re   r=  r   r   r[  sort_columnsrM  rg   r   r  uniquesordered_colsrc   remappeds   `             rj   r`  zPandasLikeDataFrame.pivotn  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6rl   c                    | j                   t        j                  u r| j                  j	                  d      S dd l}|j                  j                  | j                        S )NF)preserve_indexr   )ra   r   r   r   r  pyarrowTabler  )re   pas     rj   r  zPandasLikeDataFrame.to_arrow  sJ    >#6#66;;''u'==xx##DKK00rl   c               b    | j                  | j                  j                  ||||      d      S )N)r  fracreplacerandom_stateFr   )r   r   sample)re   r  fractionwith_replacementseeds        rj   ry  zPandasLikeDataFrame.sample  sB       KK(,<4   #(	 ! 
 	
rl   c                ^    | j                  | j                  j                  ||||            S )N)id_vars
value_varsvar_name
value_name)r   r   melt)re   r=  r   variable_namer  s        rj   unpivotzPandasLikeDataFrame.unpivot  s:       KK&%	  
 	
rl   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   rO  )r   col_nameanchor_seriesnative_frames     rj   r   z.PandasLikeDataFrame.explode.<locals>.<genexpr>  s;      
 (#((,,.-?DDF
s   8;z2exploded columns must have matching element countsr,  )rb   r   r  Listr)   r   r   r   exploder   rO  r*   rc   to_framer   concat)re   rc   r   r   col_to_exploder   r   original_columnscother_columnsexploded_framer  exploded_seriesr4  r  r  s                 @@rj   r  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)rf   r   rg   r   rh   r=   ri   rW   r]   rW   returnNone)r~   r:   rq   r>   r  r/   )r~   zMapping[str, Any]rq   r>   r   .IntoSchema | Mapping[str, DType | None] | Noner  r/   )r~   zSequence[Mapping[str, Any]]rq   r>   r   r  r  r/   )r   r   r  zTypeIs[Any])r~   r   rq   r>   r  r/   )r~   rI   rq   r>   r   z!IntoSchema | Sequence[str] | Noner  r/   )r  r/   )r  r8   )r  r.   )r  int)rh   r=   r  r/   )r   r   ri   rW   r  r/   )r   r   r  pd.Series[Any])r   r  r  r   r_   )r   r   r   bool | Noner  rI   )r   'SizedMultiIndexSelector[pd.Series[Any]]r  r/   )r   _SliceIndex | ranger  r/   )rc   rK   r  r/   )rc   r  r  r/   )rc   r  r  r/   )rc   z&SizedMultiNameSelector[pd.Series[Any]]r  r/   )r  	list[str])r  zLiteral[True]r  zlist[dict[str, Any]])r  zLiteral[False]r  zlist[tuple[Any, ...]])r  rW   r  z,list[tuple[Any, ...]] | list[dict[str, Any]])r  zIterator[PandasLikeSeries])r  rW   r  r  r  z4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]])r  zdict[str, DType])r!  r  r  r/   )r'  r4   r  r/   )r3  Sequence[str] | Noner  r/   )r9  rG   r  zint | float)r   r  rB  r  r  r/   )r   r  r  ztuple[Any, ...])rW  r4   r  r/   )rc  zMapping[str, str]r  r/   )rc   Sequence[str]re  rW   r  r/   )rp  r  rn  bool | Sequence[bool]ro  rW   r  r/   )ry  r  rp  Iterable[str]rz  r  r  r/   )r   z_EagerAllowedImpl | Noner  r   r  r2   )r   z(Sequence[str] | Sequence[PandasLikeExpr]r  rW   r  r6   )
r   r/   r  r  r  r  r  r  r  pd.DataFrame)r   r/   r  r  r  r  )r   r/   r  r  r  r  r  r  )r   r/   r  r  r  zdict[str, str]r  r  )r   r/   r  rC   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/   )
r3  r  r  rH   r  r  rB  r  r  r/   )r   z_LazyAllowedImpl | Noner  zSparkSession | Noner  r3   )r  ztuple[int, int])r  rW   r  zdict[str, Any])r  r  )r  zpl.DataFrame)r)  zstr | Path | BytesIOr  r  )r)  r  r  r  )r)  zstr | Path | BytesIO | Noner  z
str | None)r  r   )r  
int | Noner4  zint | str | Noner  r   )r  r  r:  r  r  r/   )r=  r  r   r  r   r  r  z#tuple[Sequence[str], Sequence[str]])rC  ztuple[str, ...]r  r  )r!  r  rL  r  rM  r  r  r  )
r!  zIterable[tuple[str, ...]]rP  r  rL  r  rM  r  r  zIterator[str])
r!  zIterable[Any]rP  r  rL  r  rM  r  r  r  )
r=  r  r   r  r   r  r[  z?Literal['min', 'max', 'first', 'last', 'sum', 'mean', 'median']r  r   )
r=  r  r   r  r   r  r[  PivotAgg | Noner  r  )r=  r  r   r  r   r  r[  r  rl  rW   rM  r  r  r/   )r  r   )
r  r  rz  zfloat | Noner{  rW   r|  r  r  r/   )
r=  r  r   r  r  r  r  r  r  r/   )rc   r  r  r/   )X__name__
__module____qualname__rk   classmethodro   r   r   staticmethodr   r|   r   r   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r   r  rc   r   r   r  _iter_columnsr  r   r  r"  r*  r6  r=  rQ  r  r2  r`  r   rf  rr  r{  r  r  r  r  r  r  r  r  r  r  r  rx  r  r  r  r  r  r   rs   r  r*  r,  r2  r6  r8  r;  r>  rH  rN  rS  rU  r\  rd  r`  r  ry  r  r  r   rl   rj   r[   r[   e   sF    */-- '	-
 -  $- #'- 
-" 8 8. -8-8
 !-8 ?-8 
-8 -8^  8) 8
 ! 8 ? 8 
 8  8D - - 
 
 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!	!F.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

 	

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

 
 

 (
rl   r[   )r   r4   r   r  )m
__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   r   narwhals._typing_compatr   narwhals._utilsr   r   r    r!   r"   r#   r$   r%   r&   narwhals.dependenciesr(   narwhals.exceptionsr)   r*   narwhals.functionsr+   rH  ior,   pathlibr-   typesr.   pandaspdr   r  typing_extensionsr/   r0   r1   narwhals._compliant.typingr2   r3   narwhals._pandas_like.exprr4   r  r6   r   r8   narwhals._spark_like.utilsr9   narwhals._translater:   narwhals._typingr;   r<   r=   r>   narwhals.dtypesr?   narwhals.typingr@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rz   rL   __annotations__	frozensetr   rY   r[   r   rl   rj   <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 4@
PQ@
rl   