
    [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"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l0m1Z1 d dl2m3Z3m4Z4 d dl5m6Z7 erd dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>Z?d dl@ZAd dlBmCZCmDZDmEZE d dlFmGZGmHZH d dlImJZJ d dlKmLZL d dlMmNZN d dlOmPZP d dlQmRZR d dlSmTZTmUZU d dl&mVZVmWZW d dlXmYZY d dlZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZf ede?j                  f   Zhdeid<    ej 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      Zld3eid4<    G d5 d6ed7         Zmy)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broadcast_series_to_index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.r1   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         p/var/www/html/userprofiledev.eatanceapp.com/venv/lib/python3.12/site-packages/narwhals/_pandas_like/dataframe.py__init__zPandasLikeDataFrame.__init__i   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)rb   r    	is_pandas	to_pandasis_modin_backend_versionmodin.pandas.iorp   modin.pandas.utilsis_cudfto_native_namespace	DataFrameAssertionErrorfrom_native)clsdatarr   rh   tblnativempd_from_arrowmsgs           rk   rp   zPandasLikeDataFrame.from_arrowz   s     00g.##%]]_F$$& ..0J>H $C(F##%#779CCNNsSFWC %%vw77rm   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]rq      c              3      K   | ]  }d   y wr`    .0_s     rk   	<genexpr>z0PandasLikeDataFrame.from_dict.<locals>.<genexpr>        =*<QD*<   rh   ri   )rb   rz   r   Seriesr{   items
isinstancer   r}   r   	from_dictr   dtypesrangelenzipr   rc   astype)r~   r   rr   schemarh   pdxr   r{   aligned_data	left_mostnameseries	compliantr   r,   backendskeydtypebackendnative_schemas                       rk   r   zPandasLikeDataFrame.from_dict   s    !00002,cjj9-s}}=	8:-1	 JJLLD&&&),88Q	$ )I)/L&)A)Y)WXY)ZL&%+T" ) v((6F((V)DVc#r'V)DEF.v}}nM=%F*<= 036<<>8/L	 0M+\c57$ -#*#:#:#,,	  0M  	 ]]=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     rk   r   z1PandasLikeDataFrame.from_dicts.<locals>.<genexpr>   r   r   r   rq   )rb   rz   r   r{   from_recordsr   r   r   r   r   r   r   r   rc   r   r}   )r~   r   rr   r   rh   nsr{   r   r,   r   r   r   r   r   s                 rk   
from_dictszPandasLikeDataFrame.from_dicts   s&    !00//1-r||<	v++D1F((V)DVc#r'V)DEF.v}}nM=%F*<= 036<<>8/L	 0M+\c57$ -#*#:#:#,,	  0M  	 ]]=1Fvw77% *E	s   
D=3Dc                    t        |       S r`   r(   )objs    rk   
_is_nativezPandasLikeDataFrame._is_native   s    ',,rm   c              B     | ||j                   |j                  d      S )NTrh   ri   rj   )rb   rc   )r~   r   rr   s      rk   r}   zPandasLikeDataFrame.from_native   s'    "22$$"&	
 	
rm   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_typerh   s     rk   r   z1PandasLikeDataFrame.from_numpy.<locals>.<genexpr>   s       *#2K "+~>#2s   rd   rq   )narwhals.schemar   rb   rz   r{   r   r   valueskeysr   rt   _numpy_column_namesr}   )	r~   r   rr   r   r   r{   itr   rh   s	           @rk   
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7rm   c                    | S r`   r   rf   s    rk   __narwhals_dataframe__z*PandasLikeDataFrame.__narwhals_dataframe__      rm   c                    | S r`   r   r   s    rk   __narwhals_lazyframe__z*PandasLikeDataFrame.__narwhals_lazyframe__  r   rm   c                J    ddl m}  || j                  | j                        S )Nr   r8   )ri   )narwhals._pandas_like.namespacer9   rb   rc   )rf   r9   s     rk   __narwhals_namespace__z*PandasLikeDataFrame.__narwhals_namespace__  s    G"4#7#7OOrm   c                    | j                   t        j                  t        j                  t        j                  hv r| j                   j                         S dt        | j                          }t        |      )Nz!Expected pandas/modin/cudf, got: )rb   r   PANDASMODINCUDFrz   typer|   rf   r   s     rk   __native_namespace__z(PandasLikeDataFrame.__native_namespace__  sj    !!  $
 

 '';;==1$t7K7K2L1MNS!!rm   c                ,    t        | j                        S r`   )r   r   r   s    rk   __len__zPandasLikeDataFrame.__len__!  s    4;;rm   c                T    | j                  | j                  | j                  |d      S )NFr   )	__class__r   rb   )rf   ri   s     rk   _with_versionz!PandasLikeDataFrame._with_version$  s.    ~~KK//"'	  
 	
rm   Trj   c               T    | j                  || j                  | j                  |      S )Nr   )r   rb   rc   )rf   dfrj   s      rk   _with_nativez PandasLikeDataFrame._with_native,  s.    ~~//MM"7	  
 	
rm   c                   | j                   j                  }|j                  r>|j                   }|j                  j	                         }t        |||t        |            S t        |      x}t        |      x}k7  rd| d| d}t        |      |j                   j                  |ur"t        |j                   ||j                        S |j                   S )N)	is_nestedseries_classzExpected object of length z, got: .)rh   )r   index
_broadcastr   r   r   r   r   r+   r   rb   )rf   otherr   r   r   	len_otherlen_idxr   s           rk   _extract_comparandz&PandasLikeDataFrame._extract_comparand4  s    !!\\F--/I,f  U#ICJ)>?.wiwykKCS/!<<U*U\\5AVAVWW||rm   c                D    t         rdd l}|S t        | j                        S Nr   )r
   numpyr   rb   )rf   nps     rk   _array_funcsz PandasLikeDataFrame._array_funcsD  s    I"4#7#788rm   c                J    t        j                  | j                  |   |       S Nrq   )r   r}   r   )rf   r   s     rk   
get_columnzPandasLikeDataFrame.get_columnL  s    ++DKK,=tLLrm   Ncopyc               (    | j                  ||      S )Nr   r   )to_numpy)rf   r   r   s      rk   	__array__zPandasLikeDataFrame.__array__O  s    }}5t}44rm   c                    t        |t              rt        |      n|}| j                  | j                  j
                  |d d f         S r`   r   tuplelistr   r   iloc)rf   rowsr   s      rk   _gatherzPandasLikeDataFrame._gatherR  s:    (u5T
4  !1!1%(!;<<rm   c                    | j                  | j                  j                  t        |j                  |j
                  |j                        d d f   d      S NFr   )r   r   r   slicestartstopstep)rf   r   s     rk   _gather_slicez!PandasLikeDataFrame._gather_sliceV  sI      KKU4::tyy$))DaGH"' ! 
 	
rm   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   rd   get_locr   r   r   r   r   )rf   rd   r   r   selectors        rk   _select_slice_namez&PandasLikeDataFrame._select_slice_name\  s     }}( KK''6 	 ||' KK''59 	
 gll3  KKQ[) ! 
 	
rm   c                ^    | j                  | j                  j                  d d |f   d      S r   r   r   r   rf   rd   s     rk   _select_slice_indexz'PandasLikeDataFrame._select_slice_indexl  s2      KKQZ( ! 
 	
rm   c                    t        |t              rt        |      n|}| j                  | j                  j
                  d d |f   d      S r   r   r   s     rk   _select_multi_indexz'PandasLikeDataFrame._select_multi_indexq  sH     $.gu#=$w-7  KKQZ( ! 
 	
rm   c                Z    | j                  | j                  j                  d d |f         S r`   )r   r   locr   s     rk   _select_multi_namez&PandasLikeDataFrame._select_multi_namey  s$      G!<==rm   c                J    | j                   j                  j                         S r`   )r   rd   tolistr   s    rk   rd   zPandasLikeDataFrame.columns}  s    {{""))++rm   c                    y r`   r   rf   nameds     rk   r   zPandasLikeDataFrame.rows  s    EHrm   c                    y r`   r   r	  s     rk   r   zPandasLikeDataFrame.rows  s    GJrm   c                    y r`   r   r	  s     rk   r   zPandasLikeDataFrame.rows  s    TWrm   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)
rb   r   r   r   r   r   r   r   
itertuplesto_dict)rf   r
  rows      rk   r   zPandasLikeDataFrame.rows  s    ##~':'::7;yyty7LM7Lcjjl+7L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}   )rf   _namer   s      rk   iter_columnsz PandasLikeDataFrame.iter_columns  s4     ![[..0ME6"..vtDD 1s   =?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  rd   dictr   )rf   r
  buffer_size	col_namesr  s        rk   	iter_rowszPandasLikeDataFrame.iter_rows  sk     
 {{--E-EEE++I{{--E-:3y#.// ; 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 )NrY   )r   r   rd   r   rc   rb   r   )rf   native_dtypesr,   s      rk   r   zPandasLikeDataFrame.schema  s    ** {{**	
 +  S!X- *c"DMM43G3G 1C $--1E1E	 +	
 		
 	
s   A"Bc                    | j                   S r`   )r   r   s    rk   collect_schemaz"PandasLikeDataFrame.collect_schema  s    {{rm   c                x    | j                  t        | j                  t        |      | j                        d      S r   )r   r   r   r   rb   )rf   column_namess     rk   simple_selectz!PandasLikeDataFrame.simple_select  s8      "4;;\0BDDXDXY"' ! 
 	
rm   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_horizontalrd   r   )rf   exprs
new_series	namespacesr   s         rk   selectzPandasLikeDataFrame.select  s    )T))51
$$%6T$++%6%8PU$VV8Z]88*E
//1	))Z*HZ188Z*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)rf   subsetplxmasks       rk   
drop_nullszPandasLikeDataFrame.drop_nulls  s    >$$"""*% %   ))+""7377F#3#;#;#=D"QQ{{4  rm   c                p    | j                   j                  d      j                         }t        ||      S )NT)deep)unit)r   memory_usagesumr&   )rf   r<  szs      rk   estimated_sizez"PandasLikeDataFrame.estimated_size  s/    [[%%4%04462D))rm   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)rr   r   r   r5   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)rf   r   rE  r7  r   	row_indexrL  s          rk   with_row_indexz"PandasLikeDataFrame.with_row_index  s    ))+$$++CI6D		..))$dkk.?.?d * I  x{#((	(:MMcRD
 		rH	=''!T",,./eDk  {{9cggi00rm   c                T    t        d | j                  j                  |   D              S )Nc              3      K   | ]  }|  y wr`   r   )r   xs     rk   r   z*PandasLikeDataFrame.row.<locals>.<genexpr>  s     8 71Q 7r   )r   r   r   )rf   r   s     rk   r  zPandasLikeDataFrame.row  s"    8 0 0 7888rm   c                    | j                  |      }| j                  |      }| j                  | j                  j                  |   d      S r   )_evaluate_single_output_exprr   r   r   r  )rf   	predicater8  mask_natives       rk   r5  zPandasLikeDataFrame.filter  sL    00;--d3  KKOOK( ! 
 	
rm   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,  rf   s     rk   r   z3PandasLikeDataFrame.with_columns.<locals>.<genexpr>  s     S=R003=Rs   Fr   )r&  r   r   r   rd   r   popappendextendr   r   r(  r   )
rf   r)  rd   r,  name_columns	to_concatr   r   r+  r   s
   `         rk   with_columnsz PandasLikeDataFrame.with_columns  s   &$&&.3t9>KHO4P1QVVQY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rd   rh   )r   r   r   rb   )rf   mappings     rk   r   zPandasLikeDataFrame.rename
  s+      4;;@T@TU
 	
rm   c               x    t        | ||      }| j                  | j                  j                  |      d      S )N)strictr   Fr   )r%   r   r   drop)rf   rd   rh  to_drops       rk   ri  zPandasLikeDataFrame.drop  s?    'gfE  KKW-U ! 
 	
rm   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   rX   r   sort_valuesr   )rf   
descending
nulls_lastbyr   rn  dro  s           rk   sortzPandasLikeDataFrame.sort  sq    [[j$'/9>I(23
1Q
I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   rW  r   s     rk   r   z,PandasLikeDataFrame.top_k.<locals>.<genexpr>%  s     ,PRVAY-A-A-CRs    )rn  Fr   )r   r   r   rX   rR  r   	nsmallestnlargestrp  r   head)rf   krs  reverser   r   s        @rk   top_kzPandasLikeDataFrame.top_k"  s    [[gt$,PR,P)P((a)<==$$R[[B%788  NN48wN7<<Q?"' ! 
 	
rm   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)rg   r^   ri   rj   )PolarsDataFramer   r^   ri   zUnsupported `backend` value: )r\   r   rb   rc   r   r   updatert   PYARROWnarwhals._arrow.dataframer  to_arrowPOLARSnarwhals._polars.dataframer  	to_polars
ValueError)rf   r   kwargskwdsr  r  r   s          rk   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rm   c               $    ddl m}  || ||      S )Nr   r6   )drop_null_keys)narwhals._pandas_like.group_byr7   )rf   r   r  r7   s       rk   group_byzPandasLikeDataFrame.group_byY  s     	E tNKKrm   c               |    | j                   j                  |d      j                  |j                   ||dd|f      S )Nanyr6  howinner left_onright_onr  suffixes)r   r2  merge)rf   r   r  r  suffixs        rk   _join_innerzPandasLikeDataFrame._join_inner`  sH     {{!!e!<BBLL&\ C 
 	
rm   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rd   inplace)r   r  r2  r'   rd   ri  )	rf   r   r  r  r  result_nativeleft_key	right_keyextras	            rk   
_join_leftzPandasLikeDataFrame._join_leftk  s     ))LLxU;&\ * 
 (2'8'D
'D#)H$ #$,,6Iyk&<RR'D 	 
 	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"   rd   r   r   isnar  setintersection
differencer  _concat_diagonal)rf   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                   rk   
_join_fullzPandasLikeDataFrame._join_full  sn    ((*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?@isSSE&**i@ ? 
 ">/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_bytesrd   r   r  r  r  Tr  cross)r  r  r   )rb   rv   ru   ry   rs   r$   rd   r   assignr  ri  )rf   r   r  rh   backend_version	key_tokenr  s          rk   _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Rrm   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   r2  r  )rf   r   r  r  r  s        rk   
_join_semizPandasLikeDataFrame._join_semi  sj     //"8n Xw!78 0 

 {{!!e!<BBgw C 
 	
rm   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    rk   <lambda>z0PandasLikeDataFrame._join_anti.<locals>.<lambda>  s    /*k9rm   Tr  )rb   ry   r   r  r2  r$   rd   r  r   r  r   rs   r  ri  )rf   r   r  r  rh   r  r  r  s          @rk   
_join_antizPandasLikeDataFrame._join_anti  s    --!!#;;$$##7#>!	 %   9>>>
 //"8n Xw!78 0 

 ))wE:(224'% * 
 #9; 	?DArm   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#  rh   re  )rb   r   r   r   drop_duplicates)rf   r   r  r  rh   s        rk   r  z'PandasLikeDataFrame._join_filter_rename  sC     --".-
 $)
 /
	rm   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   )rf   r   r  r  r  r  results          rk   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   ((rm   c                   | j                         }| j                  |j                  | j                  |j                  |||||d|f            S )Nr  )r  r  left_byright_by	directionr  )r   r   
merge_asofr   )	rf   r   r  r  by_leftby_rightstrategyr  r7  s	            rk   	join_asofzPandasLikeDataFrame.join_asof  sZ     '')  NN!!"f  	
 	
rm   c                Z    | j                  | j                  j                  |      d      S r   )r   r   r{  rf   ns     rk   r{  zPandasLikeDataFrame.head7  '      !1!1!!4E RRrm   c                Z    | j                  | j                  j                  |      d      S r   )r   r   tailr  s     rk   r  zPandasLikeDataFrame.tail:  r  rm   )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 )NFrm  )noner  r  )rE  )rr  rq  keepTr  r   )get_check_columns_existr$   rd   rT  ru  r   r  rp  ri  r   )	rf   r6  r  r  rE  mapped_keeperrortokenress	            rk   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Brm   )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)rg   r^   ri   )IbisLazyFramer   )r^   ri   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)ri   rh   r^   )rt   r   DUCKDBduckdbnarwhals._duckdb.dataframer  tablerc   r  polarsr  r  from_pandaslazyDASKdask.dataframe	dataframenarwhals._dask.dataframer  IBISibisnarwhals._ibis.dataframer  memtablerd   is_spark_likenarwhals._spark_like.dataframer  r  createDataFramer|   )rf   r   r  r  r   r  plr  ddr  r  r  r  r   s                 rk   r  zPandasLikeDataFrame.lazy\  sd    NN$	?Kn+++B"<<,)- 
 n+++B"!2>>),113)- 
 n)))'> !#	!:)- 
 n)))> i>)-    "IM o%%''	2&)-	  rm   c                .    | j                   j                  S r`   )r   shaper   s    rk   r  zPandasLikeDataFrame.shape  s    {{   rm   c                   |r=| j                   D ci c]'  }|t        j                  | j                  |   |       ) c}S | j                  j	                  d      S c c}w )Nrq   r   r  )rd   r   r}   r   r  )rf   	as_seriesr,   s      rk   r  zPandasLikeDataFrame.to_dict  sf      <<'C %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   rb   r   r   isinrZ   rR  r   rc   Datetimer   r   r   	time_zonerc  r   r,   dtconvert_time_zonereplace_time_zonestrr   r   hstackrd   r   )rf   r   r   r  dtype_datetimer   val
to_convertr   	col_dtyper,   arrs               rk   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 $(<<#/C ,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: )	rb   r   r   r   r   rt   r   
_to_pandasr|   r   s     rk   rt   zPandasLikeDataFrame.to_pandas  s    >#8#88;;>#6#66;;((**>#7#77;;))++()=)=(>?S!!rm   c                J    dd l } |j                  | j                               S r   )r  r  rt   )rf   r  s     rk   r  zPandasLikeDataFrame.to_polars  s    r~~dnn.//rm   c                :    | j                   j                  |       y r`   )r   
to_parquetrf   files     rk   write_parquetz!PandasLikeDataFrame.write_parquet  s    t$rm   c                     y r`   r   r+  s     rk   	write_csvzPandasLikeDataFrame.write_csv  s    ,/rm   c                     y r`   r   r+  s     rk   r/  zPandasLikeDataFrame.write_csv  s    =@rm   c                <    | j                   j                  |d      S )NFr  )r   to_csvr+  s     rk   r/  zPandasLikeDataFrame.write_csv  s    {{!!$e!44rm   c                f    t        j                  | j                  j                  d       |       S )NFr  rq   )r   r}   r   
duplicatedr   s    rk   	is_uniquezPandasLikeDataFrame.is_unique  s/    ++[[###//
 	
rm   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  rd   r   )rf   r  columnr  r   _cols         rk   itemzPandasLikeDataFrame.item  s    ;6>#.==BIG  !o%;;##D));&.LCS/!-7-Dt||!!&)&{{T	**rm   c                X    | j                  | j                  j                         d      S r   )r   r   r   r   s    rk   clonezPandasLikeDataFrame.clone  s%      !1!1!35 QQrm   c                \    | j                  | j                  j                  |d |   d      S r   r   )rf   r  offsets      rk   gather_everyz PandasLikeDataFrame.gather_every  s.      !1!1&)!)!<TY ZZrm   c               v    |xs |rt        | h ||      nt        | |      }|xs t        | h ||      }||fS r`   )r#   )rf   onr   r   s       rk   _pivot_into_index_valuesz,PandasLikeDataFrame._pivot_into_index_values  sX      
 !~~f~6%dB/ 	
 D/mmUmDf}rm   c               H    d\  }}}dj                  |       }| | | | | S )N){}"z",")r  )unique_valuesLBRBQbodys        rk   _pivot_multi_on_namez(PandasLikeDataFrame._pivot_multi_on_name   s6    !	Bzz-(aSqc"&&rm   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       rk   _pivot_single_on_namesz*PandasLikeDataFrame._pivot_single_on_names&  sT     a<;GH<CINN3'--/<HH#/0<C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  rK  )rf   r#  n_onrO  rP  r,   namesprefixs           rk   _pivot_multi_on_namesz)PandasLikeDataFrame._pivot_multi_on_names.  ss      a<#TEFQnnfd.G.G.N%OPP $
 $//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   )rQ  r   rV  )rf   r#  rS  rO  rP  s        rk   _pivot_remap_column_namesz-PandasLikeDataFrame._pivot_remap_column_names?  s<     19..|XyQQD..|T8YWXXrm   c          	         | j                   t        j                  u ri nddi} | j                  j                  d||||dd|S )NobservedTF)r   r   rd   aggfuncmarginsr   )rb   r   r   r   pivot_table)rf   r@  r   r   aggregate_functionr  s         rk   _pivot_tablez PandasLikeDataFrame._pivot_tableK  s`     &&.*=*==BJPTCU 	 't{{&& 
&
 
 	
rm   c                   || j                   j                  |||      S |dk(  rV| j                   j                  g ||d      j                  t        j                  |d            j                  |||      S | j                  ||||      S )N)rd   r   r   r   F)as_indexsize)r   pivotgroupbyaggr  fromkeysr_  )rf   r@  r   r   r^  s        rk   _pivotzPandasLikeDataFrame._pivota  s     %;;$$RuV$LL&##MbM5ME#BT]]6623rv>
   UF4FGGrm   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)rq  rr  N)r   r  ru  to_listr   r,   rf   s     rk   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  sG      
 C	 $59 s   AAc              3  x   K   | ]1  }j                  |      j                         j                          3 y wr`   )r   r  rj  rk  s     rk   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  s-     HRc$//#&--/779Rs   7:)rS  rO  rP  r  )rb   ru   NotImplementedErrorrA  rg  r   r	   r   r  rd   rX  r   rT  r   reset_index)rf   r@  r   r   r^  sort_columnsrP  rh   r   r  uniquesordered_colsrd   remappeds   `             rk   rc  zPandasLikeDataFrame.pivots  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6rm   c                    | j                   t        j                  u r| j                  j	                  d      S dd l}|j                  j                  | j                        S )NF)preserve_indexr   )rb   r   r   r   r  pyarrowTabler  )rf   pas     rk   r  zPandasLikeDataFrame.to_arrow  sJ    >#6#66;;''u'==xx##DKK00rm   c               b    | j                  | j                  j                  ||||      d      S )N)r  fracreplacerandom_stateFr   )r   r   sample)rf   r  fractionwith_replacementseeds        rk   r|  zPandasLikeDataFrame.sample  sB       KK(,<4   #(	 ! 
 	
rm   c                ^    | j                  | j                  j                  ||||            S )N)id_vars
value_varsvar_name
value_name)r   r   melt)rf   r@  r   variable_namer  s        rk   unpivotzPandasLikeDataFrame.unpivot  s:       KK&%	  
 	
rm   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   rR  )r   col_nameanchor_seriesnative_frames     rk   r   z.PandasLikeDataFrame.explode.<locals>.<genexpr>  s;      
' (#((,,.-?DDF's   8;z2exploded columns must have matching element countsr/  )rc   r   r!  Listr*   r   r   r   exploder   rR  r+   rd   to_framer   concat)rf   rd   r   r   col_to_exploder   r   original_columnscother_columnsexploded_framer  exploded_seriesr7  r  r  s                 @@rk   r  zPandasLikeDataFrame.explode  s   %%$$&%N>*E#CE7 K) )  ,C00 & w<1$$##GAJ/u %   {{$WQZ05599; 
#ABK
 
 GCS/!<<$4I$4q8H$4I%&B&Bwqz&BCKKGTUJWHOPQPR
HSHL"**,557 	 
 '')  JJ99JBCST"' ! 
 	
 J
s   3	F=F((F)rg   r   rh   r   ri   r>   rj   rX   r^   rX   returnNone)r   r;   rr   r?   r  r0   )r   zMapping[str, Any]rr   r?   r   .IntoSchema | Mapping[str, DType | None] | Noner  r0   )r   zSequence[Mapping[str, Any]]rr   r?   r   r  r  r0   )r   r   r  zTypeIs[Any])r   r   rr   r?   r  r0   )r   rJ   rr   r?   r   z!IntoSchema | Sequence[str] | Noner  r0   )r  r0   )r  r9   )r  r/   )r  int)ri   r>   r  r0   )r   r   rj   rX   r  r0   )r   r   r  pd.Series[Any])r   r  r  r   r`   )r   r   r   bool | Noner  rJ   )r   'SizedMultiIndexSelector[pd.Series[Any]]r  r0   )r   _SliceIndex | ranger  r0   )rd   rL   r  r0   )rd   r  r  r0   )rd   r  r  r0   )rd   z&SizedMultiNameSelector[pd.Series[Any]]r  r0   )r  	list[str])r
  zLiteral[True]r  zlist[dict[str, Any]])r
  zLiteral[False]r  zlist[tuple[Any, ...]])r
  rX   r  z,list[tuple[Any, ...]] | list[dict[str, Any]])r  zIterator[PandasLikeSeries])r
  rX   r  r  r  z4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]])r  zdict[str, DType])r#  r  r  r0   )r)  r5   r  r0   )r6  Sequence[str] | Noner  r0   )r<  rH   r  zint | float)r   r  rE  r  r  r0   )r   r  r  ztuple[Any, ...])rZ  r5   r  r0   )rf  zMapping[str, str]r  r0   )rd   Sequence[str]rh  rX   r  r0   )rs  r  rq  bool | Sequence[bool]rr  rX   r  r0   )r|  r  rs  Iterable[str]r}  r  r  r0   )r   z_EagerAllowedImpl | Noner  r   r  r3   )r   z(Sequence[str] | Sequence[PandasLikeExpr]r  rX   r  r7   )
r   r0   r  r  r  r  r  r  r  pd.DataFrame)r   r0   r  r  r  r  )r   r0   r  r  r  r  r  r  )r   r0   r  r  r  zdict[str, str]r  r  )r   r0   r  rD   r  r  r  r  r  r  r  r0   )r   r0   r  r  r  r  r  r  r  r  r  rA   r  r  r  r0   )r  r  r  r0   )
r6  r  r  rI   r  r  rE  r  r  r0   )r   z_LazyAllowedImpl | Noner  zSparkSession | Noner  r4   )r  ztuple[int, int])r  rX   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 | Noner7  zint | str | Noner  r   )r  r  r=  r  r  r0   )r@  r  r   r  r   r  r  z#tuple[Sequence[str], Sequence[str]])rF  ztuple[str, ...]r  r  )r#  r  rO  r  rP  r  r  r  )
r#  zIterable[tuple[str, ...]]rS  r  rO  r  rP  r  r  zIterator[str])
r#  zIterable[Any]rS  r  rO  r  rP  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  ro  rX   rP  r  r  r0   )r  r   )
r  r  r}  zfloat | Noner~  rX   r  r  r  r0   )
r@  r  r   r  r  r  r  r  r  r0   )rd   r  r  r0   )X__name__
__module____qualname__rl   classmethodrp   r   r   staticmethodr   r}   r   r   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   r   r  r  rd   r   r   r  _iter_columnsr  r   r!  r$  r-  r9  r@  rT  r  r5  rc  r   ri  ru  r~  r  r  r  r  r  r  r  r  r  r  r  r{  r  r  r  r  r  r   rt   r  r-  r/  r5  r9  r;  r>  rA  rK  rQ  rV  rX  r_  rg  rc  r  r|  r  r  r   rm   rk   r\   r\   f   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

 	

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

 
 

 (
rm   r\   )r   r5   r   r  )n
__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   r   narwhals._typing_compatr   narwhals._utilsr   r    r!   r"   r#   r$   r%   r&   r'   narwhals.dependenciesr)   narwhals.exceptionsr*   r+   narwhals.functionsr,   rK  ior-   pathlibr.   typesr/   pandaspdr  r  typing_extensionsr0   r1   r2   narwhals._compliant.typingr3   r4   narwhals._pandas_like.exprr5   r  r7   r   r9   narwhals._spark_like.utilsr:   narwhals._translater;   narwhals._typingr<   r=   r>   r?   narwhals.dtypesr@   narwhals.typingrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   r{   rM   __annotations__	frozensetr   rZ   r\   r   rm   rk   <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 4D
PQD
rm   