
    -Ph                       U 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Zd dlmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZm Z  d dl!m"Z"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/ erd dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6Z7d dl8Z9d dl:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZH d dl!mIZImJZJ d dlKmLZL d dlMmNZN d dlOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ ede7j[        f         Z\de]d<    e^ ej_        d           ej_        d           ej_        d           ej_        d           ej_        d           ej_        d            ej_        d!           ej_        d"           ej_        d#           ej_        d$           ej_        d%           ej_        d&           ej_        d'           ej_        d(           ej_        d)           ej_        d*           ej_        d+           ej_        d,           ej_        d-           ej_        d.          g          Z`d/e]d0<    G d1 d2ed3                   ZadS )4    )annotations)chainproduct)
TYPE_CHECKINGAnyCallableIterableIteratorLiteralMappingSequencecastoverloadN)EagerDataFrame)PANDAS_TO_NUMPY_DTYPE_MISSINGPandasLikeSeries)	align_and_extract_nativealign_series_full_broadcastcheck_column_names_are_uniqueget_dtype_backendnative_to_narwhals_dtypeobject_native_to_narwhals_dtyperenameselect_columns_by_name	set_index)	Implementation_into_arrow_table_remap_full_join_keysexclude_column_namesgenerate_temporary_column_nameparse_columns_to_dropparse_versionscale_bytesvalidate_backend_versionis_pandas_like_dataframe)InvalidOperationError
ShapeError)BytesIO)Path)
ModuleType)Self	TypeAliasTypeIs)CompliantDataFrameAnyCompliantLazyFrameAny)PandasLikeExprPandasLikeGroupByPandasLikeNamespace)IntoArrowTable)Version_FullContext)DTypeSchema)AsofJoinStrategyDTypeBackendJoinStrategyPivotAggSizedMultiIndexSelectorSizedMultiNameSelectorSizeUnitUniqueKeepStrategy_2DArray_SliceIndex
_SliceName.r-   Constructorfloat64float32int64int32int16int8uint64uint32uint16uint8boolzdatetime64[s]zdatetime64[ms]zdatetime64[us]zdatetime64[ns]ztimedelta64[s]ztimedelta64[ms]ztimedelta64[us]ztimedelta64[ns]objectzfrozenset[np.dtype[Any]]CLASSICAL_NUMPY_DTYPESc                     e Zd ZddZedd            Zedd            Zedd            Zedd            Z	edd            Z
ddZdd Zdd"Zdd$Zdd&Zdd'Zd(d)dd+Zdd/Zdd2Zdd3d4dd8Zdd;Zdd=Zdd@ZddAZddBZddDZeddF            ZeddJ            ZeddM            ZeddO            ZddPZddRZeZ ddUZ!eddW            Z"ddXZ#ddZZ$dd^Z%ddaZ&ddeZ'ddfZ(ddiZ)ddlZ*ddmZ+ddpZ,ddsZ-ddxZ.dd}Z/ddZ0ddZ1d dZ2ddZ3ddZ4d3dddZ5d3dddZ6edd            Z7ddZ8dd3d4ddZ9ddZ:ddZ;ddZ<ed	d            Z=edd            Z=d
dZ=ddZ>ddZ?ddZ@ddZAddZBedd            ZCedd            ZDddZEddĄZFddǄZGddɄZHdd˄ZIdd̄ZJddфZKddԄZLddՄZMd3S (  PandasLikeDataFramenative_dataframer   implementationr   backend_versiontuple[int, ...]versionr7   validate_column_namesrR   returnNonec                   || _         || _        || _        || _        t	          | j        | j                   |rt          |j                   d S d S N)_native_frame_implementation_backend_version_versionr$   r   columns)selfrW   rX   rY   r[   r\   s         _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/narwhals/_pandas_like/dataframe.py__init__zPandasLikeDataFrame.__init__k   sf     .- / !5t7LMMM  	D)*:*BCCCCC	D 	D    datar6   contextr8   r,   c                 |j         }t          ||          }|                                r|                                }nx|                                rddlm}  ||          }nR|                                r-|                                j	                            |          }nd}t          |          |                     ||          S )Nr   )
from_arrowzCcongratulations, you entered unreachable code - please report a bugrk   )rb   r   	is_pandas	to_pandasis_modinmodin.pandas.utilsrm   is_cudfto_native_namespace	DataFrameAssertionErrorfrom_native)clsrj   rk   rX   tblnativempd_from_arrowmsgs           rg   rm   zPandasLikeDataFrame.from_arrow|   s     0g..##%% 	&]]__FF$$&& 
	&      $^C((FF##%% 	&#7799CNNsSSFFWC %%%vw777ri   Mapping[str, Any]schema#Mapping[str, DType] | Schema | Nonec              X   ddl m} |j                                        }t	          d|j                  }t	          d|j                  }i }d }	|                                D ]T\  }
}t          ||          r:t          j
        ||          }|	|}	|||
<   5t          |	|          d         ||
<   O|||
<   U|                    |          }|rDfd|j        D             }|                     ||                              |                    }| 
                    ||          S )Nr   r:   ztype[pd.Series[Any]]ztype[pd.DataFrame]rn      c              3  8   K   | ]}t          |          V  d S r`   r   ).0dtyperX   s     rg   	<genexpr>z0PandasLikeDataFrame.from_dict.<locals>.<genexpr>   s?       * *=B!%88* * * * * *ri   )narwhals.schemar;   rb   rt   r   Seriesru   items
isinstancer   rw   r   	from_dictdtypesastyperp   )rx   rj   rk   r~   r;   nsr   ru   aligned_data	left_mostnameseries	compliantrz   itrX   s                  @rg   r   zPandasLikeDataFrame.from_dict   sg    	+***** 0//11,bi88-r|<<	8:-1	 JJLL 		, 		,LD&&&)) ,,8QQQ	$ )I)/L&&)A)Y)W)WXY)ZL&&%+T""$$\22 	A* * * *FLm* * *B ]]66&>>#;#;B#?#?@@Fvw777ri   objTypeIs[Any]c                     t          |           S r`   r%   )r   s    rg   
_is_nativezPandasLikeDataFrame._is_native   s    ',,,ri   c              @     | ||j         |j        |j        d          S )NTrX   rY   r[   r\   )rb   rc   rd   )rx   rj   rk   s      rg   rw   zPandasLikeDataFrame.from_native   s3    s"2#4$"&
 
 
 	
ri   rD   3Mapping[str, DType] | Schema | Sequence[str] | Nonec                 ddl m} |j                                        j        }t          |t          |f          rofd|                                D             } |||                                          	                     ||          
                    |                    }n! |||                     ||                    }|                     ||          S )Nr   r:   c              3  8   K   | ]}t          |          V  d S r`   r   )r   native_typerX   s     rg   r   z1PandasLikeDataFrame.from_numpy.<locals>.<genexpr>   sA       * * "+~>>* * * * * *ri   re   rn   )r   r;   rb   rt   ru   r   r   valueskeysr   rp   _numpy_column_namesrw   )	rx   rj   rk   r~   r;   ru   r   rz   rX   s	           @rg   
from_numpyzPandasLikeDataFrame.from_numpy   s     	+***** 0!/!C!C!E!E!O	fw/00 		T* * * *#)==??* * *B YtV[[]];;;BBv((,, FF YtS-D-DT6-R-RSSSFvw777ri   c                    | S r`    rf   s    rg   __narwhals_dataframe__z*PandasLikeDataFrame.__narwhals_dataframe__       ri   c                    | S r`   r   r   s    rg   __narwhals_lazyframe__z*PandasLikeDataFrame.__narwhals_lazyframe__   r   ri   r5   c                H    ddl m}  || j        | j        | j                  S )Nr   r4   )r[   )narwhals._pandas_like.namespacer5   rb   rc   rd   )rf   r5   s     rg   __narwhals_namespace__z*PandasLikeDataFrame.__narwhals_namespace__   s=    GGGGGG"" $"7
 
 
 	
ri   r+   c                    | j         t          j        t          j        t          j        hv r| j                                         S dt          | j                    }t          |          )Nz!Expected pandas/modin/cudf, got: )rb   r   PANDASMODINCUDFrt   typerv   rf   r|   s     rg   __native_namespace__z(PandasLikeDataFrame.__native_namespace__   sf    ! $
 
 

 ';;===N$t7K2L2LNNS!!!ri   intc                *    t          | j                  S r`   )lenrz   r   s    rg   __len__zPandasLikeDataFrame.__len__   s    4;ri   c                T    |                      | j        | j        | j        |d          S )NFr   )	__class__rz   rb   rc   )rf   r[   s     rg   _with_versionz!PandasLikeDataFrame._with_version   s4    ~~K/ 1"'  
 
 	
ri   Tr\   dfc               T    |                      || j        | j        | j        |          S )Nr   )r   rb   rc   rd   )rf   r   r\   s      rg   _with_nativez PandasLikeDataFrame._with_native   s4    ~~/ 1M"7  
 
 	
ri   otherr   pd.Series[Any]c                ~   | j         j        }|j        r8|j         } t          |          |j        d         ||j        |j                  S t          |          x}t          |          x}k    rd| d| d}t          |          |j         j        |ur"t          |j         ||j
        |j                  S |j         S )Nr   )indexr   r   zExpected object of length z, got: .)rX   rY   )rz   r   
_broadcastr   ilocr   r   r   r(   r   rb   rc   )rf   r   r   s	len_otherlen_idxr|   s          rg   _extract_comparandz&PandasLikeDataFrame._extract_comparand  s    ! 	OA47716!9EqvNNNNU#ICJJ)>??KwKKyKKKCS//!<U**$4 % 6	    |ri   r   strc                D    t          j        | j        |         |           S Nrn   r   rw   rz   )rf   r   s     rg   
get_columnzPandasLikeDataFrame.get_column  s    +DK,=tLLLLri   Ncopyr   r   bool | Nonec               0    |                      ||          S )Nr   r   )to_numpy)rf   r   r   s      rg   	__array__zPandasLikeDataFrame.__array__  s    }}5t}444ri   rows'SizedMultiIndexSelector[pd.Series[Any]]c                    t          |t                    rt          |          n|}|                     | j        j        |d d f                   S r`   r   tuplelistr   rz   r   )rf   r   r   s      rg   _gatherzPandasLikeDataFrame._gather  sF    (u55?T


4  !1%(!;<<<ri   _SliceIndex | rangec                    |                      | j        j        t          |j        |j        |j                  d d f         d          S NFr   )r   rz   r   slicestartstopstep)rf   r   s     rg   _gather_slicez!PandasLikeDataFrame._gather_slice"  sJ      KU4:ty$)DDaaaGH"' ! 
 
 	
ri   re   rF   c                >   |j         $| j        j                            |j                   nd }|j        '| j        j                            |j                  dz   nd }t          |||j                  }|                     | j        j        d d |f         d          S )Nr   Fr   )	r   rz   re   get_locr   r   r   r   r   )rf   re   r   r   selectors        rg   _select_slice_namez&PandasLikeDataFrame._select_slice_name(  s     }( K''666 	 |' K''5599 	
 gl33  KQQQ[) ! 
 
 	
ri   c                X    |                      | j        j        d d |f         d          S r   r   rz   r   rf   re   s     rg   _select_slice_indexz'PandasLikeDataFrame._select_slice_index8  s6      KQQQZ( ! 
 
 	
ri   c                    t          |t                    rt          |          n|}|                     | j        j        d d |f         d          S r   r   r   s     rg   _select_multi_indexz'PandasLikeDataFrame._select_multi_index=  sV     $.gu#=#=J$w---7  KQQQZ( ! 
 
 	
ri   &SizedMultiNameSelector[pd.Series[Any]]c                T    |                      | j        j        d d |f                   S r`   )r   rz   locr   s     rg   _select_multi_namez&PandasLikeDataFrame._select_multi_nameE  s)       G!<===ri   	list[str]c                >    | j         j                                        S r`   )rz   re   tolistr   s    rg   re   zPandasLikeDataFrame.columnsK  s    {"))+++ri   namedLiteral[True]list[dict[str, Any]]c                   d S r`   r   rf   r   s     rg   r   zPandasLikeDataFrame.rowsO  s    EHSri   Literal[False]list[tuple[Any, ...]]c                   d S r`   r   r   s     rg   r   zPandasLikeDataFrame.rowsR  s    GJsri   ,list[tuple[Any, ...]] | list[dict[str, Any]]c                   d S r`   r   r   s     rg   r   zPandasLikeDataFrame.rowsU  s    TWTWri   c                   |s\| j         t          j        u r d |                     d          D             S t	          | j                            dd                     S | j                            d          S )Nc                P    g | ]#}t          |                                          $S r   )r   r   )r   rows     rg   
<listcomp>z,PandasLikeDataFrame.rows.<locals>.<listcomp>]  s(    MMMcjjll++MMMri   T)r   Fr   r   recordsorient)rb   r   r   r   r   rz   
itertuplesto_dictr   s     rg   r   zPandasLikeDataFrame.rowsX  sz     	H#~':::MMtyyty7L7LMMMM..U.FFGGG{"")"444ri   Iterator[PandasLikeSeries]c              #  x   K   | j                                         D ]\  }}t          j        ||           V  d S r   )rz   r   r   rw   )rf   _namer   s      rg   iter_columnsz PandasLikeDataFrame.iter_columnsc  sT      ![..00 	E 	EME6".vtDDDDDDD	E 	Eri   buffer_size4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]]c             #     K   |s$| j                             dd           E d {V  d S | j         j        }| j                             d          D ]!}t          t	          ||                    V  "d S )NFr  r   )rz   r	  re   dictzip)rf   r   r  	col_namesr  s        rg   	iter_rowszPandasLikeDataFrame.iter_rowsi  s      
  	0{--E-EEEEEEEEEEE+I{--E-:: 0 03y#..//////0 0ri   dict[str, DType]c                P      j         j         fd j         j        D             S )Nc                    i | ]V}||         d k    r!t          |         j        j                  n%t          j        |         j        j                  WS )rS   )r   rd   rb   r   rz   )r   colnative_dtypesrf   s     rg   
<dictcomp>z.PandasLikeDataFrame.schema.<locals>.<dictcomp>x  s     	
 	
 	
   S!X-- *c"DM43G   1C $-1E 	
 	
 	
ri   )rz   r   re   )rf   r  s   `@rg   r~   zPandasLikeDataFrame.schemau  sE    *	
 	
 	
 	
 	
 {*	
 	
 	
 		
ri   c                    | j         S r`   )r~   r   s    rg   collect_schemaz"PandasLikeDataFrame.collect_schema  s
    {ri   column_namesc                    |                      t          | j        t          |          | j        | j                  d          S r   )r   r   rz   r   rc   rb   )rf   r  s     rg   simple_selectz!PandasLikeDataFrame.simple_select  sM      "\""%$	  #( ! 
 
 	
ri   rf   exprsr1   c                R    | j         | }|s.|                     | j                                        d          S t	          | }|                                 }|                    d |D                       }| j        j        j        |j        _        |                     |d          S )NFr   c                    g | ]	}|j         
S r   )rz   r   r   s     rg   r  z.PandasLikeDataFrame.select.<locals>.<listcomp>  s    *H*H*H18*H*H*Hri   T)	_evaluate_into_exprsr   rz   r   r   r   _concat_horizontalre   r   )rf   r"  
new_series	namespacer   s        rg   selectzPandasLikeDataFrame.select  s    .T.6
 	[$$T[%:%:%<%<TY$ZZZ0*=
//11	))*H*HZ*H*H*HII+-2
  4 @@@ri   subsetSequence[str] | Nonec                   |0|                      | j                            d          d          S |                                 }|                     |                     |j        |                                                      S )Nr   axisFr   )r   rz   dropnar   filterany_horizontalr  is_null)rf   r+  plxs      rg   
drop_nullszPandasLikeDataFrame.drop_nulls  s     >$$"""**% %    ))++{{C..wsw/?/G/G/I/IJJJKKKri   unitrB   int | floatc                ~    | j                             d                                          }t          ||          S )NT)deep)r6  )rz   memory_usagesumr#   )rf   r6  szs      rg   estimated_sizez"PandasLikeDataFrame.estimated_size  s9    [%%4%0044662D))))ri   c                4   | j         }|                                 }|j                            t	          t          |                    | |j                                      |          }|                     |	                    |j         |g                    S )N)rk   r   )
rz   r   _seriesfrom_iterableranger   r   aliasr   r'  )rf   r   framer)  	row_indexs        rg   with_row_indexz"PandasLikeDataFrame.with_row_index  s    //11	%33#e**t5; 4 
 

%++ 	   !=!=y?OQV>W!X!XYYYri   r   tuple[Any, ...]c                T    t          d | j        j        |         D                       S )Nc              3     K   | ]}|V  d S r`   r   )r   xs     rg   r   z*PandasLikeDataFrame.row.<locals>.<genexpr>  s"      881Q888888ri   )r   rz   r   )rf   r   s     rg   r  zPandasLikeDataFrame.row  s)    88 0 7888888ri   	predicatePandasLikeExpr | list[bool]c                    t          |t                    r|}n0|                     |          d         }|                     |          }|                     | j        j        |         d          S )Nr   Fr   )r   r   r&  r   r   rz   r   )rf   rJ  mask_nativemasks       rg   r1  zPandasLikeDataFrame.filter  su     i&& 	87@KK ,,Y77:D11$77K  KOK( ! 
 
 	
ri   c                :      j         | }|st                     dk    r S d |D             }g } j        j        D ]Q}||v r)                     |                    |                    }n j        |         }|                    |           R|                     fd|                                D                         	                                }|
                    |          } j        j        j        |j        _                             |d          S )Nr   c                    i | ]
}|j         |S r   )r   r%  s     rg   r  z4PandasLikeDataFrame.with_columns.<locals>.<dictcomp>  s    4P4P4P1QVQ4P4P4Pri   c              3  B   K   | ]}                     |          V  d S r`   )r   )r   r   rf   s     rg   r   z3PandasLikeDataFrame.with_columns.<locals>.<genexpr>  s1      SS0033SSSSSSri   Fr   )r&  r   rz   re   r   popappendextendr   r   r'  r   r   )	rf   r"  re   name_columns	to_concatr   r   r)  r   s	   `        rg   with_columnsz PandasLikeDataFrame.with_columns  s/    ,$+U3 	3t99>>K4P4P4P4P4P	K' 	% 	%D|##001A1A$1G1GHHT*V$$$$SSSS\=P=P=R=RSSSSSS//11	)))44+-2
  5 AAAri   mappingMapping[str, str]c                l    |                      t          | j        || j        | j                            S )Nre   rX   rY   )r   r   rz   rb   rc   )rf   rX  s     rg   r   zPandasLikeDataFrame.rename  s@      #3 $ 5	  
 
 	
ri   Sequence[str]strictc                   t          | ||          }|                     | j                            |          d          S )N)r]  r   Fr   )r!   r   rz   drop)rf   re   r]  to_drops       rg   r_  zPandasLikeDataFrame.drop  sK    'gfEEE  KW--U ! 
 
 	
ri   by
descendingbool | Sequence[bool]
nulls_lastc                   | j         }t          |t                    r| }nd |D             }|rdnd}|                     |                    t          |          ||          d          S )Nc                    g | ]}| S r   r   )r   ds     rg   r  z,PandasLikeDataFrame.sort.<locals>.<listcomp>  s    3331Q333ri   lastfirst)	ascendingna_positionFr   )rz   r   rR   r   sort_valuesr   )rf   rb  rd  ra  r   rj  rk  s          rg   sortzPandasLikeDataFrame.sort  s    [j$'' 	4/9>II33
333I *7ff  NN488ykNRR"' ! 
 
 	
ri   backendImplementation | Nonekwargsr/   c                P   |(t          | j        | j        | j        | j        d          S |t
          j        u rFdd l}t          |                                 t
          j        t          |          | j        d          S |t
          j
        u r=dd l}ddlm}  ||                                 t          |          | j        d          S |t
          j        u r<dd l}ddlm}  ||                                 t          |          | j                  S d| }t)          |          )	NFr   r   )ArrowDataFrame)rW   rY   r[   r\   )PolarsDataFramer   rY   r[   zUnsupported `backend` value: )rV   rz   rb   rc   rd   r   r   pandasrp   r"   PYARROWpyarrownarwhals._arrow.dataframerr  to_arrowPOLARSpolarsnarwhals._polars.dataframers  	to_polars
ValueError)	rf   rn  rp  pdparr  plrs  r|   s	            rg   collectzPandasLikeDataFrame.collect  sv    ?&#3 $ 5&+    n+++&  -4 -b 1 1&+    n,,,    @@@@@@!>!% -b 1 1&+	    n+++BBBBBB"?>>## -b 1 1    8g77oori   r   (Sequence[str] | Sequence[PandasLikeExpr]drop_null_keysr3   c               *    ddl m}  || ||          S )Nr   r2   )r  )narwhals._pandas_like.group_byr3   )rf   r   r  r3   s       rg   group_byzPandasLikeDataFrame.group_by*  s/     	EDDDDD  tNKKKKri   howr>   left_onright_onsuffixc          
     F	   |dk    r| j         t          j        u s1| j         t          j        u s| j         t          j        u r| j        dk     rt          dg | j        |j                  }|                      | j	        j
        di |di                     |j	        j
        di |did||d|f                              |	                    S |                     | j	                            |j	        dd|f
                    S |dk    rE| j         t          j        u r6|                     | j	                            |j	        d||                    S t          dg | j        |j                  |d}t          |          t          t          |j	        t!          |          | j        | j                   t#          t%          ||                    | j         | j                                                  }|                     | j	                            |d||          j        fd                             	                    S |dk    r|d}t          |          t          t          |j	        t!          |          | j        | j                   t#          t%          ||                    | j         | j                                                  }|                     | j	                            |d||                    S |dk    r| j	                            |j	        d||d|f          }	g }
t%          ||          D ]I\  }}||k    r|| j        vr|
                    |           *||k    r|
                    | |            J|                     |	                    |
	                    S |dk    r|J |J t-          |||          }|j	                            |	          }t/          |j                   t!          |                                          }|                     | j	                            |||dd|f                    S |                     | j	                            |j	        |||d|f                    S )Ncross)r         )n_bytesre   r   inner )r  r  r  suffixesr   )r  r  antileftanti)r  r  r  z(`right_on` cannot be `None` in anti-joinr[  outer)r  	indicatorr  r  c                    |          dk    S )N	left_onlyr   )tindicator_tokens    rg   <lambda>z*PandasLikeDataFrame.join.<locals>.<lambda>y  s    1_#5#D ri   semiz(`right_on` cannot be `None` in semi-joinleftfull)r  r  r  r  r   )rb   r   r   r   r   rc   r    re   r   rz   assignmerger_  	TypeErrorr   r   r   r  r  drop_duplicatesr   rS  r   r   r   )rf   r   r  r  r  r  	key_tokenr|   other_nativeresult_nativeextraleft_key	right_keyright_on_mapperr  s                 @rg   joinzPandasLikeDataFrame.join1  s_    '>>$(<<<'>+>>>$(===)F22:'F'F'F  	 ((&DK&88)Q88U++==y!n==# )!*"$f    T)T,,
 
 
 ((K%%el2v,%WW   &==#~':::((K%%*gPX &     #A'F'F'F# # # #DC#C..(  &*X-,	  !Xw!7!788#'#7$($9
  
  
  "/##  ((K%%$#"1 '!( &   DDDDF T/T22
 
 
 &==@nn$ *X-,	  !Xw!7!788#'#7$($9
 
 
 "/##  $$!! gw "     &== K--!f .  M E'*7H'='= 9 9#)((Ydl-J-JLL++++(**LLI!7v!7!7888$$]%7%7%7%F%FGGG&== &&&'''3GXvNNO <...GGL),*>???O224455H$$!! #% &\ "       K!f   
 
 	
ri   by_leftby_rightstrategyr<   c                   |                                  }|                     |                    | j        |j        |||||d|f                    S )Nr  )r  r  left_byright_by	directionr  )r   r   
merge_asofrz   )	rf   r   r  r  r  r  r  r  r4  s	            rg   	join_asofzPandasLikeDataFrame.join_asof  sc     ''))  NN!!"f  	 	
 
 	
ri   nc                `    |                      | j                            |          d          S r   )r   rz   headrf   r  s     rg   r  zPandasLikeDataFrame.head  +      !1!1!!4!4E RRRri   c                `    |                      | j                            |          d          S r   )r   rz   tailr  s     rg   r  zPandasLikeDataFrame.tail  r  ri   )maintain_orderkeeprC   r  c                   ddd                     ||          }|r|                     |          x}r||                     | j                            ||          d          S )NFri  )noneany)r+  r  r   )get_check_columns_existr   rz   r  )rf   r+  r  r  mapped_keeperrors         rg   uniquezPandasLikeDataFrame.unique  s      %W5599$EE 	 9 9& A AAu 	K  K''vK'HH"' ! 
 
 	
ri   )rn  r0   c                  ddl m} |                                 }|| S |t          j        u r9dd l}ddlm}  ||                    d           ||          | j	                  S |t          j
        u rFdd l}ddlm}  | |j        |                                           ||          | j	                  S |t          j        u r?dd l}dd lm}	 ddlm}
  |
|	                    |           ||          | j	                  S t,          )	Nr   )r"   )DuckDBLazyFrame	pandas_dfrt  )PolarsLazyFrame)DaskLazyFrame)rW   rY   r[   )narwhals.utilsr"   rp   r   DUCKDBduckdbnarwhals._duckdb.dataframer  tablerd   rz  r{  r|  r  from_pandaslazyDASKdaskdask.dataframe	dataframenarwhals._dask.dataframer  rv   )rf   rn  r"   r  r  r  r  r  r  ddr  s              rg   r  zPandasLikeDataFrame.lazy  s   000000NN$$	?K---MMMBBBBBB"?<<,, -f 5 5   
 ---BBBBBB"?!2>),,1133 -b 1 1   
 +++KKK''''''>>>>>> =!#	!:!: -d 3 3   
 ri   tuple[int, int]c                    | j         j        S r`   )rz   shaper   s    rg   r  zPandasLikeDataFrame.shape  s    {  ri   	as_seriesdict[str, Any]c               d     |r fd j         D             S  j                            d          S )Nc                T    i | ]$}|t          j        j        |                    %S )rn   r   r   r  rf   s     rg   r  z/PandasLikeDataFrame.to_dict.<locals>.<dictcomp>$  sC        %1$+c2BDQQQ  ri   r   r  )re   rz   r
  )rf   r  s   ` rg   r
  zPandasLikeDataFrame.to_dict"  sS     	   <    {""&"111ri   c               D   	  j         j        } j        t          j        u |                    t                                                    r9| j                             |          S  j                                       S  j	        j        j
        		fd j                                        D             }|re                                                       j        | j                            d          j                            d                     j         }n j         }||                    |          S |D ]B}t'          |          t(          v r*dd l} |j         fd j        D                       }|c S C|                              S )Nr   r   c                H    g | ]\  }}t          |          r	|j        |S r`   )r   	time_zone)r   keyvaldtype_datetimes      rg   r  z0PandasLikeDataFrame.to_numpy.<locals>.<listcomp>8  sC     
 
 
S#~..
 47=3L 3L3L3Lri   UTCr   c                x    g | ]6}                     |                              d           d d d f         7S )N)r   r   )r   r   )r   r  r   rf   s     rg   r  z0PandasLikeDataFrame.to_numpy.<locals>.<listcomp>S  sV        ,,554t5LLQQQPTWU  ri   )rz   r   rb   r   r   isinrT   allr   rd   Datetimer~   r   rW  r   r  dtconvert_time_zonereplace_time_zoner   r   numpyhstackre   )
rf   r   r   r  
to_convertr   	col_dtypenparrr  s
   ` `      @rg   r   zPandasLikeDataFrame.to_numpy*  s   *<'>+>>D45599;; 	3 {++%d+CCC;''T'222-6
 
 
 
 K--//
 
 


  	""++--j"%%e,,%%d++	 
  B B;;U;666 ' 
	 
	I9~~!>>>""""$29    #'<    


 ? {{{%%%ri   pd.DataFramec                   | j         t          j        u r| j        S | j         t          j        u r| j                                        S | j         t          j        u r| j                                        S d| j          }t          |          )NzUnknown implementation: )	rb   r   r   rz   r   rp   r   
_to_pandasrv   r   s     rg   rp   zPandasLikeDataFrame.to_pandas[  s    >#888;!^%888;((***!^%999;))+++?)=??S!!!ri   pl.DataFramec                N    dd l } |j        |                                           S )Nr   )r{  r  rp   )rf   r  s     rg   r}  zPandasLikeDataFrame.to_polarse  s*    r~dnn..///ri   filestr | Path | BytesIOc                :    | j                             |           d S r`   )rz   
to_parquetrf   r  s     rg   write_parquetz!PandasLikeDataFrame.write_parquetj  s    t$$$$$ri   c                    d S r`   r   r  s     rg   	write_csvzPandasLikeDataFrame.write_csvm  s    ,/Cri   c                    d S r`   r   r  s     rg   r   zPandasLikeDataFrame.write_csvp  s    =@Sri   str | Path | BytesIO | None
str | Nonec                :    | j                             |d          S )NFr  )rz   to_csvr  s     rg   r   zPandasLikeDataFrame.write_csvs  s    {!!$e!444ri   c                b    t          j        | j                            d           |           S )NF)r  rn   )r   rw   rz   
duplicatedr   s    rg   	is_uniquezPandasLikeDataFrame.is_uniquew  s7    +[###///
 
 
 	
ri   r  
int | Nonecolumnint | str | Nonec                *   |8|6| j         dk    rd| j         }t          |          | j        j        d         S ||d}t          |          t	          |t
                    r| j                            |          n|}| j        j        ||f         S )Nr   r   zycan only call `.item()` if the dataframe is of shape (1, 1), or if explicit row/col values are provided; frame has shape )r   r   z8cannot call `.item()` with only one of `row` or `column`)r  r~  rz   r   r   r   re   r   )rf   r  r
  r|   _cols        rg   itemzPandasLikeDataFrame.item|  s    ;6>zV##7(,
7 7 
 !oo%;#D))[FNLCS//!-7-D-DPt|!!&)))&{T	**ri   c                ^    |                      | j                                        d          S r   )r   rz   r   r   s    rg   clonezPandasLikeDataFrame.clone  s)      !1!1!3!35 QQQri   offsetc                V    |                      | j        j        |d |         d          S r   r   )rf   r  r  s      rg   gather_everyz PandasLikeDataFrame.gather_every  s,      !1&)!)!<TY ZZZri   onr   #tuple[Sequence[str], Sequence[str]]c                   |p%|rt          | h ||          nt          | |          }|pt          | h ||          }||fS r`   )r   )rf   r  r   r   s       rg   _pivot_into_index_valuesz,PandasLikeDataFrame._pivot_into_index_values  sg      
0 ~~f~666%dB// 	
 D/mmUmDDf}ri   unique_valuestuple[str, ...]c               P    d\  }}}d                     |           }| | | | | S )N){}"z",")r  )r  LBRBQbodys        rg   _pivot_multi_on_namez(PandasLikeDataFrame._pivot_multi_on_name  s>    !	Bzz-((&a&&q&"&&&ri   Iterable[str]n_values	separatorc               D    |dk    rfd| D             S d | D             S )Nr   c                ^    g | ])}                     |                                          *S r   )r  strip)r   r  r&  s     rg   r  z>PandasLikeDataFrame._pivot_single_on_names.<locals>.<listcomp>  s1    HHHCINN3''--//HHHri   c                    g | ]
}|d          S )r   )r   r  s     rg   r  z>PandasLikeDataFrame._pivot_single_on_names.<locals>.<listcomp>  s    000CB000ri   r   )r  r%  r&  s     `rg   _pivot_single_on_namesz*PandasLikeDataFrame._pivot_single_on_names  s<     a<<HHHH<HHHH00<0000ri   Iterable[tuple[str, ...]]n_onIterator[str]c             #     K   |dk    rF|D ]A}|| d          }|d         }|                     ||                     |          f          V  Bd S |D ]"}|                     || d                    V  #d S )Nr   r   )r  r#  )rf   r  r.  r%  r&  r  namesprefixs           rg   _pivot_multi_on_namesz)PandasLikeDataFrame._pivot_multi_on_names  s       a<<# Q QTEFFQnnfd.G.G.N.N%OPPPPPPQ Q
 $ = =//TEFF<<<<<<= =ri   Iterable[Any]c                   |dk    r|                      |||          S t          |                     ||||                    S )zReformat output column names from a native pivot operation, to match `polars`.

        Note:
            `column_names` is a `pd.MultiIndex`, but not in the stubs.
        r   )r,  r   r3  )rf   r  r.  r%  r&  s        rg   _pivot_remap_column_namesz-PandasLikeDataFrame._pivot_remap_column_names  sG     199..|XyQQQD..|T8YWWXXXri   aggregate_function?Literal['min', 'max', 'first', 'last', 'sum', 'mean', 'median']c          	     x  	 | j         j        j        ddi}| j        t          j        u ry|                    d           t          t          |||                    	| j	        
                                }t          	fd|D                       rd}t          |           | j        j        d||||dd|S )NobservedTc              3  J   K   | ]\  }}|v 	t          |          |V  d S r`   )r   )r   r   tpcategoricalcolss      rg   r   z3PandasLikeDataFrame._pivot_table.<locals>.<genexpr>  sB        tRTT\\j[>Y>Y\\\\\ ri   z=`pivot` with Categoricals is not implemented for cuDF backendF)r   r   re   aggfuncmarginsr   )rd   r   Categoricalrb   r   r   rR  setr   r~   r   r  NotImplementedErrorrz   pivot_table)
rf   r  r   r   r7  kwdsr~   r|   r=  r>  s
           @@rg   _pivot_tablez PandasLikeDataFrame._pivot_table  s     m*6 *D1>#666HHZ   uVUB//00D[&&((F     #)     / V)#...&t{& 
&
 
 
 
 	
ri   PivotAgg | Nonec               @   || j                             |||          S |dk    rb| j                             g ||d                              t                              |d                                        |||          S |                     ||||          S )N)re   r   r   r   F)as_indexsize)rz   pivotgroupbyaggr  fromkeysrF  )rf   r  r   r   r7  s        rg   _pivotzPandasLikeDataFrame._pivot  s     %;$$RuV$LLL5((##MbM5ME#BBT]]662233rv>>
   UF4FGGGri   sort_columnsc                    j         } j        }|                                r|dk     rd}	t          |	          |                                rd}	t          |	                               |||          \  }}                     ||||          }
|r fd|D             n fd|D             }t          t          |gt          |          R            }|
j
        d d |f         }
|
j        }                     |t          |          t          |          |          }||
_        dg|
j        _                             |
                                          S )Nr  z)pivot is only supported for 'pandas>=1.1'zcpivot is not supported for Modin backend due to https://github.com/modin-project/modin/issues/7409.c              3     K   | ]R}                     |                                                              d d                                           V  SdS )F)rb  rd  N)r   r  rm  to_listr  s     rg   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  sh        
 	 $$599	     ri   c              3     K   | ]=}                     |                                                                          V  >d S r`   )r   r  rS  r  s     rg   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  sG      HHc$//#&&--//7799HHHHHHri   )r.  r%  r&  r  )rb   rc   ro   rC  rq   r  rO  r   r   r   r   re   r6  r   r1  r   reset_index)rf   r  r   r   r7  rP  r&  rX   rY   r|   resultuniquesordered_colsre   remappeds   `              rg   rK  zPandasLikeDataFrame.pivot  s    -/##%% 	+/F*B*B=C%c***""$$ 	+wC%c***55b%HHvR0BCC I    
     IHHHRHHH 	 GF<U7^^<<<==AAA|O,.11#b''CKK9 2 
 
 " "t  !3!3!5!5666ri   c                    | j         t          j        u r| j                            d          S dd l}|j                            | j                  S )NF)preserve_indexr   )rb   r   r   rz   ry  rw  Tabler  )rf   r  s     rg   ry  zPandasLikeDataFrame.to_arrow*  sP    >#666;''u'===x##DK000ri   fractionfloat | Nonewith_replacementseedc               h    |                      | j                            ||||          d          S )N)r  fracreplacerandom_stateFr   )r   rz   sample)rf   r  r]  r_  r`  s        rg   re  zPandasLikeDataFrame.sample2  sJ       K(,<4    #(	 ! 
 
 	
ri   variable_name
value_namec                d    |                      | j                            ||||                    S )N)id_vars
value_varsvar_namerg  )r   rz   melt)rf   r  r   rf  rg  s        rg   unpivotzPandasLikeDataFrame.unpivotA  sB       K&%	   
 
 	
ri   c                2   | j         j        }|                                 }D ]*}||         }||j        k    rd| d}t	          |          +t                    dk    r5|                     | j                            d                   d          S | j        d                  j	                                        t          fddd          D                       sd}t          |          | j        }fd	|D             }g |d                                      d                   }	fd
dd          D             }
|                                 }|                     |                    |	g|
d          |         d          S )Nz-`explode` operation not supported for dtype `z`, expected List typer   r   Fr   c              3     K   | ]9}|         j                                         k                                    V  :d S r`   )r   r   r  )r   col_nameanchor_seriesnative_frames     rg   r   z.PandasLikeDataFrame.explode.<locals>.<genexpr>g  s\         h',0022mCHHJJ     ri   z2exploded columns must have matching element countsc                    g | ]}|v|	S r   r   )r   cre   s     rg   r  z/PandasLikeDataFrame.explode.<locals>.<listcomp>o  s#    MMM1AW<L<LQ<L<L<Lri   c                h    g | ].}|                                                                          /S r   )explodeto_frame)r   rp  rr  s     rg   r  z/PandasLikeDataFrame.explode.<locals>.<listcomp>t  sC       @HX&..0099;;  ri   r.  )rd   r   r  Listr'   r   r   rz   rv  r   r  r(   re   r   concat)rf   re   r   r~   col_to_exploder   r|   original_columnsother_columnsexploded_frameexploded_seriesr4  rq  rr  s    `          @@rg   rv  zPandasLikeDataFrame.explodeQ  s   %$$&&% 	1 	1N>*E##)E ) ) )  ,C000 $ w<<1$$##GAJ//u %     ;L(49==??M      '     & K oo%#|MMMM(8MMMM)*FM*F71:*FGOO
 N   LSTUTVTVK  O ++--C$$

N=_=A
FFGWX&+ %   ri   )rW   r   rX   r   rY   rZ   r[   r7   r\   rR   r]   r^   )rj   r6   rk   r8   r]   r,   )rj   r}   rk   r8   r~   r   r]   r,   )r   r   r]   r   )rj   r   rk   r8   r]   r,   )rj   rD   rk   r8   r~   r   r]   r,   )r]   r,   )r]   r5   )r]   r+   )r]   r   )r[   r7   r]   r,   )r   r   r\   rR   r]   r,   )r   r   r]   r   )r   r   r]   r   r`   )r   r   r   r   r]   rD   )r   r   r]   r,   )r   r   r]   r,   )re   rF   r]   r,   )re   r   r]   r,   )re   r   r]   r,   )re   r   r]   rV   )r]   r   )r   r   r]   r   )r   r   r]   r   )r   rR   r]   r   )r]   r  )r   rR   r  r   r]   r  )r]   r  )r  r   r]   r,   )rf   rV   r"  r1   r]   rV   )rf   rV   r+  r,  r]   rV   )r6  rB   r]   r7  )r   r   r]   r,   )r   r   r]   rF  )rf   rV   rJ  rK  r]   rV   )rX  rY  r]   r,   )re   r\  r]  rR   r]   r,   )ra  r   rb  rc  rd  rR   r]   r,   )rn  ro  rp  r   r]   r/   )r   r  r  rR   r]   r3   )r   r,   r  r>   r  r,  r  r,  r  r   r]   r,   )r   r,   r  r   r  r   r  r,  r  r,  r  r<   r  r   r]   r,   )r  r   r]   r,   )r+  r,  r  rC   r  r   r]   r,   )rn  ro  r]   r0   )r]   r  )r  rR   r]   r  )r]   r  )r]   r  )r  r  r]   r^   )r  r^   r]   r   )r  r  r]   r  )r]   r   )r  r	  r
  r  r]   r   )r  r   r  r   r]   r,   )r  r\  r   r,  r   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  r4  r.  r   r%  r   r&  r   r]   r   )
r  r\  r   r\  r   r\  r7  r8  r]   r   )
r  r\  r   r\  r   r\  r7  rG  r]   r  )r  r\  r   r,  r   r,  r7  rG  rP  rR   r&  r   r]   r,   )r]   r   )
r  r	  r]  r^  r_  rR   r`  r	  r]   r,   )
r  r,  r   r,  rf  r   rg  r   r]   r,   )re   r\  r]   r,   )N__name__
__module____qualname__rh   classmethodrm   r   staticmethodr   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   propertyre   r   r   r  _iter_columnsr  r~   r  r!  r*  r5  r=  rE  r  r1  rW  r   r_  rm  r  r  r  r  r  r  r  r  r  r
  r   rp   r}  r  r   r  r  r  r  r  r#  r,  r3  r6  rF  rO  rK  ry  re  rm  rv  r   ri   rg   rV   rV   j   s       D D D D" 8 8 8 [8$ !8 !8 !8 [!8F - - - \- 
 
 
 [
 8 8 8 [80      
 
 
 
	" 	" 	" 	"       
 
 
 
 FJ 
 
 
 
 
 
   "M M M M5$ 5 5 5 5 5 5= = = =
 
 
 

 
 
 
 
 
 
 


 
 
 
> > > > , , , X, HHH XHJJJ XJWWW XW	5 	5 	5 	5E E E E !M
0 
0 
0 
0 
 
 
 X
   	
 	
 	
 	

A 
A 
A 
AL L L L* * * *Z Z Z Z9 9 9 9
 
 
 
B B B B,
 
 
 

 
 
 


 

 

 

/ / / /dL L L LQ
 Q
 Q
 Q
f
 
 
 
6S S S SS S S S '+
 
 
 
 
 
$ 8< % % % % % %N ! ! ! X!2 2 2 2/& /& /& /& /& /& /&b" " " "0 0 0 0
% % % % /// X/@@@ X@5 5 5 5
 
 
 

+ + + +$R R R R[ [ [ [    ' ' ' \'
 1 1 1 \1= = = ="
Y 
Y 
Y 
Y
 
 
 
<H H H H$*7 *7 *7 *7X1 1 1 1
 
 
 

 
 
 
 + + + + + +ri   rV   )r   r1   r   )b
__future__r   	itertoolsr   r   typingr   r   r   r	   r
   r   r   r   r   r   r  r  narwhals._compliantr   narwhals._pandas_like.seriesr   r   narwhals._pandas_like.utilsr   r   r   r   r   r   r   r   r   narwhals._utilsr   r   r   r   r    r!   r"   r#   r$   narwhals.dependenciesr&   narwhals.exceptionsr'   r(   ior)   pathlibr*   typesr+   ru  r  r{  r  typing_extensionsr,   r-   r.   narwhals._compliant.typingr/   r0   narwhals._pandas_like.exprr1   r  r3   r   r5   narwhals._translater6   r7   r8   narwhals.dtypesr9   r   r;   narwhals.typingr<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   ru   rG   __annotations__	frozensetr   rT   rV   r   ri   rg   <module>r     s?   " " " " " " " $ $ $ $ $ $ $ $                            . . . . . . X X X X X X X X
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ; : : : : : A A A A A A A A 9      9999999999WWWWWWWW999999@@@@@@CCCCCC22222255555555%%%%%%&&&&&&                          &c2<&78K8888 4=9!!!""!""!""!"""##"##"##)4 4     4R R R R R.)TU R R R R Rri   