
    }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?jg        f         Zhdeid<    ej ejk        d           ejk        d            ejk        d!           ejk        d"           ejk        d#           ejk        d$           ejk        d%           ejk        d&           ejk        d'           ejk        d(           ejk        d)           ejk        d*           ejk        d+           ejk        d,           ejk        d-           ejk        d.           ejk        d/           ejk        d0           ejk        d1           ejk        d2          g          Zld3eid4<    G d5 d6ed7                   ZmdS )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                  j   e Zd ZddddZe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dd2Zed3             Zdd6Zdd7d8dd<Zdd?ZddAZddDZddEZddFZddHZed dJ            ZeddN            Z eddQ            Z eddS            Z ddTZ ddVZ!e!Z"ddYZ#edd[            Z$dd\Z%dd^Z&ddaZ'd	ddZ(d
dhZ)ddjZ*ddmZ+ddoZ,ddpZ-ddsZ.ddvZ/dd{Z0ddZ1ddZ2ddZ3ddZ4ddZ5ddZ6ddZ7ddZ8ddZ9ddZ:ddZ;ddZ<ddZ=ddZ>d7dddZ?	 dd7dddZ@edd            ZAddZBdd7d8ddZCddZDd dZEd!dZFed"d            ZGed!d            ZGd#dZGd$dZHd%dĄZIddńZJd&dǄZKd'd˄ZLed(d΄            ZMed)dф            ZNd*dՄZOd+dׄZPd,dڄZQd-d܄ZRd.dބZSd/d߄ZTd0dZUd1dZVd2dZWd7S (3  PandasLikeDataFrameFvalidate_backend_versionnative_dataframer   implementationr   versionr>   validate_column_namesrX   r^   returnNonec                   || _         || _        || _        |rt          |j                   |r|                                  d S d S N)_native_frame_implementation_versionr"   columns_validate_backend_version)selfr_   r`   ra   rb   r^   s         S/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_pandas_like/dataframe.py__init__zPandasLikeDataFrame.__init__i   s`     .-  	D)*:*BCCC# 	-**,,,,,	- 	-    datar;   contextr?   r0   c                 |j         }t          ||          }|                                r|                                }n|                                r1|                                dk    rddlm} nddlm}  ||          }nR|	                                r-|
                                j                            |          }nd}t          |          |                     ||          S )N)r      r   r   )
from_arrowzCcongratulations, you entered unreachable code - please report a bugrq   )rh   r    	is_pandas	to_pandasis_modin_backend_versionmodin.pandas.iort   modin.pandas.utilsis_cudfto_native_namespace	DataFrameAssertionErrorfrom_native)clsrp   rq   r`   tblnativempd_from_arrowmsgs           rm   rt   zPandasLikeDataFrame.from_arrowz   s    0g..##%% 	&]]__FF$$&& 	& ..00J>>HHHHHHH      $^C((FF##%% 	&#7799CNNsSSFFWC %%%vw777ro   Mapping[str, Any]schema.IntoSchema | Mapping[str, DType | None] | Nonec                 j         }|                                }t          d|j                  }t          d|j                  }i }d }	|                                D ]T\  }
}t          ||          r:t          j        |          }|	|}	|||
<   5t          |	|          d         ||
<   O|||
<   U|s|s|
                    |          }n|
                    d |D                       }|r|rt          |j        |          }n&d t          t          |                    D             }fdt          |                                |          D             }|                    |          }|                     |          S )Nztype[pd.Series[Any]]type[pd.DataFrame]ru      c                    i | ]}|g S  r   .0r,   s     rm   
<dictcomp>z1PandasLikeDataFrame.from_dict.<locals>.<dictcomp>       )D)D)Dc#r)D)D)Dro   c              3     K   | ]}d V  d S rf   r   r   _s     rm   	<genexpr>z0PandasLikeDataFrame.from_dict.<locals>.<genexpr>   "      ==QD======ro   c           	     \    i | ](\  \  }}}|
|t          ||j        j                  )S N)r`   ra   r   rh   ri   r   keydtypebackendrq   s       rm   r   z1PandasLikeDataFrame.from_dict.<locals>.<dictcomp>   Y     	 	 	 ,\c57$ -#*#:#,	   %$$ro   )rh   r}   r   Seriesr~   items
isinstancer   r   r   	from_dictr   dtypesrangelenzipastype)r   rp   rq   r   r`   pdxr   r~   aligned_data	left_mostnameseries	compliantr   backendsnative_schemas     `             rm   r   zPandasLikeDataFrame.from_dict   s    !00022,cj99-s}==	8:-1	 JJLL 		, 		,LD&&&)) ,,8QQQ	$ )I)/L&&)A)Y)W)WXY)ZL&&%+T"" 	Fv 	F((66FF(()D)DV)D)D)DEEF 	2 >.v}nMM==%F*<*<===	 	 	 	 036<<>>8/L/L	 	 	M ]]=11Fvw777ro   Sequence[Mapping[str, Any]]c              
   j         }|                                }t          d|j                  }|s|s|                    |          }n|                    d |D                       }|r|rt          |j        |          }n&d t          t          |                    D             }fdt          |                                |          D             }	|                    |	          }|                     |          S )Nr   c                    i | ]}|g S r   r   r   s     rm   r   z2PandasLikeDataFrame.from_dicts.<locals>.<dictcomp>   r   ro   c              3     K   | ]}d V  d S rf   r   r   s     rm   r   z1PandasLikeDataFrame.from_dicts.<locals>.<genexpr>   r   ro   c           	     \    i | ](\  \  }}}|
|t          ||j        j                  )S r   r   r   s       rm   r   z2PandasLikeDataFrame.from_dicts.<locals>.<dictcomp>   r   ro   ru   )rh   r}   r   r~   from_recordsr   r   r   r   r   r   r   r   r   )
r   rp   rq   r   r`   nsr~   r   r   r   s
     `       rm   
from_dictszPandasLikeDataFrame.from_dicts   s!    !0//11-r|<<	 	Fv 	F++D11FF(()D)DV)D)D)DEEF 	2 >.v}nMM==%F*<*<===	 	 	 	 036<<>>8/L/L	 	 	M ]]=11Fvw777ro   objTypeIs[Any]c                     t          |           S rf   r(   )r   s    rm   
_is_nativezPandasLikeDataFrame._is_native   s    ',,,ro   c              4     | ||j         |j        d          S )NTr`   ra   rb   )rh   ri   )r   rp   rq   s      rm   r   zPandasLikeDataFrame.from_native   s-    s"2$"&	
 
 
 	
ro   rJ   !IntoSchema | Sequence[str] | Nonec                 ddl m} |j                                        j        }t          |t          |f          rofd|                                D             } |||                                          	                     ||          
                    |                    }n! |||                     ||                    }|                     ||          S )Nr   )Schemac              3  8   K   | ]}t          |          V  d S rf   )r   )r   native_typer`   s     rm   r   z1PandasLikeDataFrame.from_numpy.<locals>.<genexpr>   sA       * * "+~>>* * * * * *ro   rj   ru   )narwhals.schemar   rh   r}   r~   r   r   valueskeysr   rw   _numpy_column_namesr   )	r   rp   rq   r   r   r~   itr   r`   s	           @rm   
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7ro   c                    | S rf   r   rl   s    rm   __narwhals_dataframe__z*PandasLikeDataFrame.__narwhals_dataframe__      ro   c                    | S rf   r   r   s    rm   __narwhals_lazyframe__z*PandasLikeDataFrame.__narwhals_lazyframe__  r   ro   r9   c                <    ddl m}  || j        | j                  S )Nr   r8   )ra   )narwhals._pandas_like.namespacer9   rh   ri   )rl   r9   s     rm   __narwhals_namespace__z*PandasLikeDataFrame.__narwhals_namespace__  s/    GGGGGG""4#7OOOOro   r/   c                    | j         t          j        t          j        t          j        hv r| j                                         S dt          | j                    }t          |          )Nz!Expected pandas/modin/cudf, got: )rh   r   PANDASMODINCUDFr}   typer   rl   r   s     rm   __native_namespace__z(PandasLikeDataFrame.__native_namespace__  sf    ! $
 
 

 ';;===N$t7K2L2LNNS!!!ro   intc                *    t          | j                  S rf   )r   r   r   s    rm   __len__zPandasLikeDataFrame.__len__!  s    4;ro   c                H    |                      | j        | j        |d          S )NFr   )	__class__r   rh   )rl   ra   s     rm   _with_versionz!PandasLikeDataFrame._with_version$  s.    ~~K/"'	  
 
 	
ro   Trb   dfc               H    |                      || j        | j        |          S )Nr   )r   rh   ri   )rl   r   rb   s      rm   _with_nativez PandasLikeDataFrame._with_native,  s.    ~~/M"7	  
 
 	
ro   otherr   pd.Series[Any]c                   | j         j        }|j        r@|j         }|j                                        }t          |||t          |                    S t          |          x}t          |          x}k    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: .)r`   )r   index
_broadcastr   r   r   r   r   r+   r   rh   )rl   r   r   r   r   	len_otherlen_idxr   s           rm   _extract_comparandz&PandasLikeDataFrame._extract_comparand4  s    ! 	\F--//I,f    U#ICJJ)>??KwKKyKKKCS//!<U**U\5AVWWWW|ro   c                D    t           rdd l}|S t          | j                  S Nr   )r
   numpyr   rh   )rl   nps     rm   _array_funcsz PandasLikeDataFrame._array_funcsD  s,     	I"4#7888ro   r   strc                D    t          j        | j        |         |           S Nru   r   r   r   )rl   r   s     rm   
get_columnzPandasLikeDataFrame.get_columnL  s    +DK,=tLLLLro   Ncopyr   r   bool | Nonec               0    |                      ||          S )Nr   r   )to_numpy)rl   r   r   s      rm   	__array__zPandasLikeDataFrame.__array__O  s    }}5t}444ro   rows'SizedMultiIndexSelector[pd.Series[Any]]c                    t          |t                    rt          |          n|}|                     | j        j        |d d f                   S rf   r   tuplelistr   r   iloc)rl   r   r   s      rm   _gatherzPandasLikeDataFrame._gatherR  sF    (u55?T


4  !1%(!;<<<ro   _SliceIndex | rangec                    |                      | j        j        t          |j        |j        |j                  d d f         d          S NFr   )r   r   r  slicestartstopstep)rl   r   s     rm   _gather_slicez!PandasLikeDataFrame._gather_sliceV  sJ      KU4:ty$)DDaaaGH"' ! 
 
 	
ro   rj   rL   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  r   rj   get_locr  r  r  r   r  )rl   rj   r  r  selectors        rm   _select_slice_namez&PandasLikeDataFrame._select_slice_name\  s     }( K''666 	 |' K''5599 	
 gl33  KQQQ[) ! 
 
 	
ro   c                X    |                      | j        j        d d |f         d          S r
  r   r   r  rl   rj   s     rm   _select_slice_indexz'PandasLikeDataFrame._select_slice_indexl  s6      KQQQZ( ! 
 
 	
ro   c                    t          |t                    rt          |          n|}|                     | j        j        d d |f         d          S r
  r  r  s     rm   _select_multi_indexz'PandasLikeDataFrame._select_multi_indexq  sV     $.gu#=#=J$w---7  KQQQZ( ! 
 
 	
ro   &SizedMultiNameSelector[pd.Series[Any]]c                T    |                      | j        j        d d |f                   S rf   )r   r   locr  s     rm   _select_multi_namez&PandasLikeDataFrame._select_multi_namey  s'      G!<===ro   	list[str]c                >    | j         j                                        S rf   )r   rj   tolistr   s    rm   rj   zPandasLikeDataFrame.columns}  s    {"))+++ro   namedLiteral[True]list[dict[str, Any]]c                   d S rf   r   rl   r!  s     rm   r   zPandasLikeDataFrame.rows  s    EHSro   Literal[False]list[tuple[Any, ...]]c                   d S rf   r   r%  s     rm   r   zPandasLikeDataFrame.rows  s    GJsro   ,list[tuple[Any, ...]] | list[dict[str, Any]]c                   d S rf   r   r%  s     rm   r   zPandasLikeDataFrame.rows  s    TWTWro   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     rm   
<listcomp>z,PandasLikeDataFrame.rows.<locals>.<listcomp>  s(    MMMcjjll++MMMro   T)r!  Fr   r   recordsorient)rh   r   r   r   r  r   
itertuplesto_dictr%  s     rm   r   zPandasLikeDataFrame.rows  sz     	H#~':::MMtyyty7L7LMMMM..U.FFGGG{"")"444ro   Iterator[PandasLikeSeries]c              #  x   K   | j                                         D ]\  }}t          j        ||           V  d S r   )r   r   r   r   )rl   _namer   s      rm   iter_columnsz PandasLikeDataFrame.iter_columns  sT      ![..00 	E 	EME6".vtDDDDDDD	E 	Ero   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   )r   r3  rj   dictr   )rl   r!  r9  	col_namesr-  s        rm   	iter_rowszPandasLikeDataFrame.iter_rows  s      
  	0{--E-EEEEEEEEEEE+I{--E-:: 0 03y#..//////0 0ro   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 )rY   )r   ri   rh   r   r   )r   r,   native_dtypesrl   s     rm   r   z.PandasLikeDataFrame.schema.<locals>.<dictcomp>  s     	
 	
 	
   S!X-- *c"DM43G   1C $-1E 	
 	
 	
ro   )r   r   rj   )rl   rC  s   `@rm   r   zPandasLikeDataFrame.schema  sE    *	
 	
 	
 	
 	
 {*	
 	
 	
 		
ro   c                    | j         S rf   )r   r   s    rm   collect_schemaz"PandasLikeDataFrame.collect_schema  s
    {ro   column_namesc                |    |                      t          | j        t          |          | j                  d          S r
  )r   r   r   r  rh   )rl   rF  s     rm   simple_selectz!PandasLikeDataFrame.simple_select  s>      "4;\0B0BDDXYY"' ! 
 
 	
ro   exprsr5   c                f    | j         | }|s1|                      t          | j                              d          S  |d         j        | }|                                 }|                    d |D                       }| j        j        j        |j        _        |                     |d          S )NFr   r   c                    g | ]	}|j         
S r   )r   r   ss     rm   r.  z.PandasLikeDataFrame.select.<locals>.<listcomp>  s    *H*H*H18*H*H*Hro   T)	_evaluate_exprsr   r   r   _align_full_broadcastr   _concat_horizontalrj   r   )rl   rI  
new_series	namespacer   s        rm   selectzPandasLikeDataFrame.select  s    )T)51
 	W$$%6T$+%6%6%8%8PU$VVV8Z]8*E
//11	))*H*HZ*H*H*HII+-2
  4 @@@ro   subsetSequence[str] | Nonec                   |0|                      | j                            d          d          S |                                 }|                     |j        |                                 d           }|                     |          S )Nr   axisFr   T)ignore_nulls)r   r   dropnar   any_horizontalr,   is_nullfilter)rl   rT  plxmasks       rm   
drop_nullszPandasLikeDataFrame.drop_nulls  s    >$$"""**% %    ))++""737F#3#;#;#=#=D"QQQ{{4   ro   unitrH   int | floatc                ~    | j                             d                                          }t          ||          S )NT)deep)ra  )r   memory_usagesumr&   )rl   ra  szs      rm   estimated_sizez"PandasLikeDataFrame.estimated_size  s9    [%%4%0044662D))))ro   order_byc                   |                                  }|h| j                            t          |                     }|j                            |j                            || | j        j	        |                    }nt          dt          |d                                       d                              |                    }|                    g |          |                    dd                                           z
                      |          }|                     ||                                          S )N)rq   r   r   r5   r   ordinal)method)partition_byri  r   )r   r   aranger   _expr_from_series_seriesfrom_iterabler   r   r   nw_colrank_to_compliant_exproverlit	broadcastaliasrS  all)rl   r   ri  r^  rp   	row_indexrt  s          rm   with_row_indexz"PandasLikeDataFrame.with_row_index  s   ))++$++CII66D	..))$dk.?d *   II  x{##((	(::MMcRR D
 		rH	==''!T"",,../eDkk  {{9cggii000ro   r   tuple[Any, ...]c                T    t          d | j        j        |         D                       S )Nc              3     K   | ]}|V  d S rf   r   )r   xs     rm   r   z*PandasLikeDataFrame.row.<locals>.<genexpr>  s"      881Q888888ro   )r  r   r  )rl   r   s     rm   r-  zPandasLikeDataFrame.row  s)    88 0 7888888ro   	predicatec                    |                      |          }|                     |          }|                     | j        j        |         d          S r
  )_evaluate_single_output_exprr   r   r   r  )rl   r  r_  mask_natives       rm   r]  zPandasLikeDataFrame.filter  sS    00;;--d33  KOK( ! 
 
 	
ro   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   rL  s     rm   r   z4PandasLikeDataFrame.with_columns.<locals>.<dictcomp>  s    4P4P4P1QVQ4P4P4Pro   c              3  B   K   | ]}                     |          V  d S rf   )r   )r   rM  rl   s     rm   r   z3PandasLikeDataFrame.with_columns.<locals>.<genexpr>  s1      SS0033SSSSSSro   Fr   )rN  r   r   rj   r   popappendextendr   r   rP  r   r   )	rl   rI  rj   name_columns	to_concatr   r   rR  r   s	   `        rm   with_columnsz PandasLikeDataFrame.with_columns  s-   &$&. 	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Aro   mappingMapping[str, str]c                `    |                      t          | j        || j                            S )Nrj   r`   )r   r   r   rh   )rl   r  s     rm   r   zPandasLikeDataFrame.rename
  s1      4;@TUUU
 
 	
ro   Sequence[str]strictc                   t          | ||          }|                     | j                            |          d          S )N)r  r   Fr   )r%   r   r   drop)rl   rj   r  to_drops       rm   r  zPandasLikeDataFrame.drop  sK    'gfEEE  KW--U ! 
 
 	
ro   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     rm   r.  z,PandasLikeDataFrame.sort.<locals>.<listcomp>  s    3331Q333ro   lastfirst)	ascendingna_positionFr   )r   r   rX   r   sort_valuesr  )rl   r  r  r  r   r  r  s          rm   sortzPandasLikeDataFrame.sort  s    [j$'' 	4/9>II33
333I *7ff  NN488ykNRR"' ! 
 
 	
ro   kIterable[str]reversec                  | j         }| j        t          |t                    rot	          fd|D                       rT|r)|                     |                    ||                    S |                     |                    ||                    S |                     |                    t          |          |          
                    |          d          S )Nc              3  L   K   | ]}|                                          V  d S rf   )
is_numeric)r   r  r   s     rm   r   z,PandasLikeDataFrame.top_k.<locals>.<genexpr>%  s3      ,P,PVAY-A-A-C-C,P,P,P,P,P,Pro   )r  Fr   )r   r   r   rX   rz  r   	nsmallestnlargestr  r  head)rl   r  r  r  r   r   s        @rm   top_kzPandasLikeDataFrame.top_k"  s    [gt$$ 	9,P,P,P,PR,P,P,P)P)P 	9 >((a)<)<===$$R[[B%7%7888  NN488wN77<<Q??"' ! 
 
 	
ro   r   _EagerAllowedImpl | Nonekwargsr3   c                   |"t          | j        | j        | j        d          S |t          j        u rSt          j        | j        dd}|| j        ur|                    d           t          |                                 fi |S |t          j        u r,ddl	m
}  ||                                 d| j        d          S |t          j        u r+ddlm}  ||                                 d| j        	          S d
| }t!          |          )NFr   Tr]   r   )ArrowDataFrame)r_   r^   ra   rb   )PolarsDataFramer   r^   ra   zUnsupported `backend` value: )r\   r   rh   ri   r   r   updaterw   PYARROWnarwhals._arrow.dataframer  to_arrowPOLARSnarwhals._polars.dataframer  	to_polars
ValueError)rl   r   r  kwdsr  r  r   s          rm   collectzPandasLikeDataFrame.collect/  sY    ?&#3&+	    n+++"0"7=).$ $D
 d222T:::&t~~'7'7@@4@@@n,,,@@@@@@!>!%)-&+	    n+++BBBBBB"?>>##dDM    8g77ooro   r   (Sequence[str] | Sequence[PandasLikeExpr]drop_null_keysr7   c               *    ddl m}  || ||          S )Nr   r6   )r  )narwhals._pandas_like.group_byr7   )rl   r   r  r7   s       rm   group_byzPandasLikeDataFrame.group_byY  s/     	EDDDDD  tNKKKKro   left_onright_onsuffixpd.DataFramec               x    | j                             |d                              |j         ||dd|f          S )NanyrT  howinner r  r  r  suffixes)r   rZ  merge)rl   r   r  r  r  s        rm   _join_innerzPandasLikeDataFrame._join_inner`  sL     {!!e!<<BBL&\ C 
 
 	
ro   c                     j                             |j                             |d          d||df          } fdt          ||          D             }|                    |d           |S )	Nr  r  leftr  r  r  r  r  c                D    g | ]\  }}||k    |j         vr|n|  S r   r   )r   left_key	right_keyrl   r  s      rm   r.  z2PandasLikeDataFrame._join_left.<locals>.<listcomp>u  sM     
 
 
#)H$$ #$,66IIy<R&<R<R$$$ro   Trj   inplace)r   r  rZ  r'   r  )rl   r   r  r  r  result_nativeextras   `   `  rm   
_join_leftzPandasLikeDataFrame._join_leftk  s     ))LxU;;&\ * 
 

 
 
 
 
'1'8'D'D
 
 
 	5$777ro   c               ,   |                                  }| j        }t          ||          }|j                            |          }t	          |j                   t          |                                          }	|t          |                                                   	                    d          }
||	                                         	                    d          }t          |j                                      | j                                      |          }||                             fd|D                       }||
                              ||          ||	ddf          }|                    |||
         |g          S )Nr   r   rW  c                    i | ]	}||  
S r   r   )r   r,   r  s     rm   r   z2PandasLikeDataFrame._join_full.<locals>.<dictcomp>  s&    @@@sSS*&**@@@ro   outerr  r  )r   r   r!   r   r"   rj   r  r   isnar  setintersection
differencer  _concat_diagonal)rl   r   r  r  r  r   self_nativeright_on_mapperother_nativeright_suffixedleft_null_maskright_null_mask	to_renameright_null_rowsjoin_results       `          rm   
_join_fullzPandasLikeDataFrame._join_full  s    ((**k/6JJ|**?*CC%l&:;;;o446677$T']]388::>>A>FF&~6;;==AAqAII &&33DLAALLXVV	&7>>@@@@i@@@ ? 
 
 ">/288/)*#&\ 9 
 
 ""+n5G
 
 	
ro   c                  | j         }| j        }|                                s.|                                s|                                r|dk     ryt          dg | j        |j        R           } | j        j        di |di	                     |j        j        di |did||d|f          }|
                    |d	           |S | j        	                    |j        d
d|f          S )N)r         n_bytesrj   r   r  r  r  Tr  cross)r  r  r   )rh   ry   rx   r|   rv   r$   rj   r   assignr  r  )rl   r   r  r`   backend_version	key_tokenr  s          rm   _join_crosszPandasLikeDataFrame._join_cross  s)   -/##%% 	!)?)?)A)A 	!$$&&	!+:V+C+C6#BT\#BEM#B#B  I /DK.@@)Q@@FF##55y!n55!"f G  M y$???  {  7b&\ RRRro   c          
         |                      |t          |          t          t          ||                              }| j                            |d                              |d||          S )Nr   columns_to_selectcolumns_mappingr  r  r  r  r  r  )_join_filter_renamer  r=  r   r   rZ  r  )rl   r   r  r  r  s        rm   
_join_semizPandasLikeDataFrame._join_semi  s}     //"8nn Xw!7!788 0 
 

 {!!e!<<BBgw C 
 
 	
ro   c          
     L   | j         }|                                r8| j                            |j                            |d          d||          S t          dg | j        |j        R           |                     |t          |          t          t          ||                              }| j                            |                    |d          |                                rdnd	||
          j        fd         }|                    d           |S )Nr  r  leftantir  r  r  r  r  r  )r  	indicatorr  r  c                    |          dk    S )N	left_onlyr   )tindicator_tokens    rm   <lambda>z0PandasLikeDataFrame._join_anti.<locals>.<lambda>  s    /*k9 ro   Tr  )rh   r|   r   r  rZ  r$   rj   r  r  r=  r   rv   r  r  )rl   r   r  r  r`   r  r  r  s          @rm   
_join_antizPandasLikeDataFrame._join_anti  sW    -!!## 	;$$##7#>>!	 %    9>>>>
 
 
 //"8nn Xw!7!788 0 
 

 ))wE::(2244A'% * 
 
 9999; 	?DAAAro   r  r  dict[str, str]c                    | j         }t          t          |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.
        )rF  r`   r  )rh   r   r   r   drop_duplicates)rl   r   r  r  r`   s        rm   r  z'PandasLikeDataFrame._join_filter_rename  sU     -".-  
 $)
 
 
 /

	ro   r  rD   c                  |dk    r|                      ||          }n||t          ||          |dk    r|                     ||||          }n|dk    r|                     |||          }nn|dk    r|                     |||          }nO|dk    r|                     ||||          }n/|d	k    r|                     ||||          }nt          |           |                     |          S )
Nr  )r   r  r  )r   r  r  r  anti)r   r  r  semir  full)	r  r  r  r  r  r  r  r   r   )rl   r   r  r  r  r  results          rm   joinzPandasLikeDataFrame.join  s3    '>>%%E&%AAFF_ 0Wh///G^^%%Wx &  FF F]]__5'H_UUFFF]]__5'H_UUFFF]]__Wx %  FF F]]__Wx %  FF   (((ro   by_leftby_rightstrategyrA   c                   |                                  }|                     |                    | j        |j        |||||d|f                    S )Nr  )r  r  left_byright_by	directionr  )r   r   
merge_asofr   )	rl   r   r  r  r  r  r  r  r^  s	            rm   	join_asofzPandasLikeDataFrame.join_asof  sc     ''))  NN!!"f  	 	
 
 	
ro   nc                `    |                      | j                            |          d          S r
  )r   r   r  rl   r  s     rm   r  zPandasLikeDataFrame.head7  +      !1!1!!4!4E RRRro   c                `    |                      | j                            |          d          S r
  )r   r   tailr  s     rm   r  zPandasLikeDataFrame.tail:  r  ro   )maintain_orderkeeprI   r   c               R   ddd                     ||          }|r|                     |          x}r||r|rt          d| j                  } |                     |d           j        |dddj                            |p| j        |                              |          }|	                    |d	           nU|r0 | j        |dddj                            |p| j        |          }n#| j                            |p| j        |          }| 
                    |d
          S )NFr  )noner  r  )ri  )r  r  r!  Tr  r   )get_check_columns_existr$   rj   r|  r  r   r
  r  r  r   )	rl   rT  r!  r   ri  mapped_keeperrortokenress	            rm   uniquezPandasLikeDataFrame.unique=  si     %W5599$EE 	 9 9& A AAu 	K 	X 	X21dlCCE##ED#99xEeE E E(>$,[QQU##	  HHUDH1111 	X$)e  __V%;t|+_NN C +--f.D;-WWC  E BBBro   )session_LazyAllowedImpl | Noner,  SparkSession | Noner4   c                  |                                  }|| S |t          j        u r0dd l}ddlm}  ||                    d          d| j                  S |t          j        u r=dd l	}ddl
m}  | |j        |                                          d| j                  S |t          j        u r2dd lm} ddlm}	  |	|                    |          d| j                  S |t          j        u r7dd l}
dd	lm}  ||
                    || j        
          d| j                  S |                                r@ddlm} |d}t9          |           ||                    |          | j        |d          S t<          )Nr   )DuckDBLazyFrame	pandas_dfTr  )PolarsLazyFrame)DaskLazyFrame)r_   r^   ra   )IbisLazyFramer   )r^   ra   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)ra   r`   r^   )rw   r   DUCKDBduckdbnarwhals._duckdb.dataframer0  tableri   r  polarsr  r2  from_pandaslazyDASKdask.dataframe	dataframenarwhals._dask.dataframer3  IBISibisnarwhals._ibis.dataframer4  memtablerj   is_spark_likenarwhals._spark_like.dataframer5  r  createDataFramer   )rl   r   r,  r1  r7  r0  plr2  ddr3  rB  r4  r5  r   s                 rm   r<  zPandasLikeDataFrame.lazy\  s!    NN$$	?Kn+++MMMBBBBBB"?<<,,)-   
 n+++BBBBBB"?!2>),,1133)-   
 n)))''''''>>>>>> =!#	!:!:)-   
 n)))KKK>>>>>> =i>>)-      "" 	IIIIIIM oo%%%''	22&)-	    ro   tuple[int, int]c                    | j         j        S rf   )r   shaper   s    rm   rL  zPandasLikeDataFrame.shape  s    {  ro   	as_seriesdict[str, Any]c               d     |r fd j         D             S  j                            d          S )Nc                T    i | ]$}|t          j        j        |                    %S )ru   r   r   r,   rl   s     rm   r   z/PandasLikeDataFrame.to_dict.<locals>.<dictcomp>  sC        %1$+c2BDQQQ  ro   r  r1  )rj   r   r4  )rl   rM  s   ` rm   r4  zPandasLikeDataFrame.to_dict  sS     	   <    {""&"111ro   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*t+          j         fd j        D                       }|c S C|                              S )Nr   r   c                H    g | ]\  }}t          |          r	|j        |S rf   )r   	time_zone)r   r   valdtype_datetimes      rm   r.  z0PandasLikeDataFrame.to_numpy.<locals>.<listcomp>  sC     
 
 
S#~..
 47=3L 3L3L3Lro   UTCc                x    g | ]6}                     |                              d           d d d f         7S )N)r   r   )r   r   )r   r,   r   rl   s     rm   r.  z0PandasLikeDataFrame.to_numpy.<locals>.<listcomp>  sV        ,,554t5LLQQQPTWU  ro   )r   r   rh   r   r   isinrZ   rz  r   ri   Datetimer   r   r  r   r,   dtconvert_time_zonereplace_time_zoner   r   r   hstackrj   )	rl   r   r   rC  
to_convertr   	col_dtypearrrV  s	   ` `     @rm   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~~!>>>9    #'<    


 ? {{{%%%ro   c                   | 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: )	rh   r   r   r   r   rw   r   
_to_pandasr   r   s     rm   rw   zPandasLikeDataFrame.to_pandas  s    >#888;>#666;((***>#777;))+++?)=??S!!!ro   pl.DataFramec                N    dd l } |j        |                                           S r   )r:  r;  rw   )rl   rH  s     rm   r  zPandasLikeDataFrame.to_polars  s*    r~dnn..///ro   filestr | Path | BytesIOc                :    | j                             |           d S rf   )r   
to_parquetrl   rf  s     rm   write_parquetz!PandasLikeDataFrame.write_parquet  s    t$$$$$ro   c                    d S rf   r   rj  s     rm   	write_csvzPandasLikeDataFrame.write_csv  s    ,/Cro   c                    d S rf   r   rj  s     rm   rm  zPandasLikeDataFrame.write_csv  s    =@Sro   str | Path | BytesIO | None
str | Nonec                :    | j                             |d          S )NFr<  )r   to_csvrj  s     rm   rm  zPandasLikeDataFrame.write_csv  s    {!!$e!444ro   c                b    t          j        | j                            d           |           S )NFr$  ru   )r   r   r   
duplicatedr   s    rm   	is_uniquezPandasLikeDataFrame.is_unique  s7    +[###///
 
 
 	
ro   r-  
int | Nonecolumnint | str | Nonec                $   |5|3| j         x}dk    rd|}t          |          | j        j        d         S ||d}t          |          t	          |t
                    r| 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`)rL  r  r   r  r   r   rj   r   )rl   r-  rw  rL  r   _cols         rm   itemzPandasLikeDataFrame.item  s    ;6>#..G=BG G  !oo%;#D));&.LCS//!-7-D-DPt|!!&)))&{T	**ro   c                ^    |                      | j                                        d          S r
  )r   r   r   r   s    rm   clonezPandasLikeDataFrame.clone  s)      !1!1!3!35 QQQro   offsetc                V    |                      | j        j        |d |         d          S r
  r  )rl   r  r~  s      rm   gather_everyz PandasLikeDataFrame.gather_every  s,      !1&)!)!<TY ZZZro   onr   #tuple[Sequence[str], Sequence[str]]c                   |p%|rt          | h ||          nt          | |          }|pt          | h ||          }||fS rf   )r#   )rl   r  r   r   s       rm   _pivot_into_index_valuesz,PandasLikeDataFrame._pivot_into_index_values  sg      
0 ~~f~666%dB// 	
 D/mmUmDDf}ro   unique_valuestuple[str, ...]c               P    d\  }}}d                     |           }| | | | | S )N){}"z",")r  )r  LBRBQbodys        rm   _pivot_multi_on_namez(PandasLikeDataFrame._pivot_multi_on_name   s>    !	Bzz-((&a&&q&"&&&ro   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     rm   r.  z>PandasLikeDataFrame._pivot_single_on_names.<locals>.<listcomp>+  s1    HHHCINN3''--//HHHro   c                    g | ]
}|d          S )r   r   s     rm   r.  z>PandasLikeDataFrame._pivot_single_on_names.<locals>.<listcomp>,  s    000CB000ro   r   )rF  r  r  s     `rm   _pivot_single_on_namesz*PandasLikeDataFrame._pivot_single_on_names&  s<     a<<HHHH<HHHH00<0000ro   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  )rl   rF  r  r  r  r,   namesprefixs           rm   _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<<<<<<= =ro   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  r  )rl   rF  r  r  r  s        rm   _pivot_remap_column_namesz-PandasLikeDataFrame._pivot_remap_column_names?  sG     199..|XyQQQD..|T8YWWXXXro   aggregate_function?Literal['min', 'max', 'first', 'last', 'sum', 'mean', 'median']c          	     d    | j         t          j        u ri nddi} | j        j        d||||dd|S )NobservedTF)r   r   rj   aggfuncmarginsr   )rh   r   r   r   pivot_table)rl   r  r   r   r  r  s         rm   _pivot_tablez PandasLikeDataFrame._pivot_tableK  sd     &.*===BBJPTCU 	 't{& 
&
 
 
 
 	
ro   PivotAgg | Nonec               @   || j                             |||          S |dk    rb| j                             g ||d                              t                              |d                                        |||          S |                     ||||          S )N)rj   r   r   r   F)as_indexsize)r   pivotgroupbyaggr=  fromkeysr  )rl   r  r   r   r  s        rm   _pivotzPandasLikeDataFrame._pivota  s     %;$$RuV$LLL&&##MbM5ME#BBT]]662233rv>>
   UF4FGGGro   sort_columnsc               V     j         }|                                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 )Nzcpivot 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)r  r  N)r   r+  r  to_listrQ  s     rm   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  sh        
 	 $$599	     ro   c              3     K   | ]=}                     |                                                                          V  >d S rf   )r   r+  r  rQ  s     rm   r   z,PandasLikeDataFrame.pivot.<locals>.<genexpr>  sG      HHc$//#&&--//7799HHHHHHro   )r  r  r  r  )rh   rx   NotImplementedErrorr  r  r  r	   r   r  rj   r  r   r  r   reset_index)rl   r  r   r   r  r  r  r`   r   r  uniquesordered_colsrj   remappeds   `             rm   r  zPandasLikeDataFrame.pivots  sb    -""$$ 	+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6ro   c                    | j         t          j        u r| j                            d          S dd l}|j                            | j                  S )NF)preserve_indexr   )rh   r   r   r   r  pyarrowTabler;  )rl   pas     rm   r  zPandasLikeDataFrame.to_arrow  sP    >#666;''u'===x##DK000ro   fractionfloat | Nonewith_replacementseedc               h    |                      | j                            ||||          d          S )N)r  fracreplacerandom_stateFr   )r   r   sample)rl   r  r  r  r  s        rm   r  zPandasLikeDataFrame.sample  sJ       K(,<4    #(	 ! 
 
 	
ro   variable_name
value_namec                d    |                      | j                            ||||                    S )N)id_vars
value_varsvar_namer  )r   r   melt)rl   r  r   r  r  s        rm   unpivotzPandasLikeDataFrame.unpivot  sB       K&%	   
 
 	
ro   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 rf   )r  r   rz  )r   col_nameanchor_seriesnative_frames     rm   r   z.PandasLikeDataFrame.explode.<locals>.<genexpr>  s\       
 
 (#(,,..-?DDFF
 
 
 
 
 
ro   z2exploded columns must have matching element countsc                    g | ]}|v|	S r   r   )r   crj   s     rm   r.  z/PandasLikeDataFrame.explode.<locals>.<listcomp>  s#    IIIq8H8H8H8H8Hro   c                h    g | ].}|                                                                          /S r   )explodeto_frame)r   r  r  s     rm   r.  z/PandasLikeDataFrame.explode.<locals>.<listcomp>  sC     
 
 
<DL"**,,5577
 
 
ro   rW  )ri   r   rE  Listr*   r   r   r   r  r  rz  r+   rj   r   concat)rl   rj   r   r   col_to_exploder   r   original_columnsother_columnsexploded_frameexploded_seriesr^  r  r  s    `          @@rm   r  zPandasLikeDataFrame.explode  s   %$$&&% 	1 	1N>*E##)E ) ) )  ,C000 $ w<<1$$##GAJ//u %    {$WQZ0599;; 
 
 
 
 
#ABBK
 
 
 
 
 	" GCS//!<IIII$4III%&B&Bwqz&BCKKGTUJWW
 
 
 
HOPQPRPR
 
 
 ''))  JJ99JBBCST"' ! 
 
 	
ro   )r_   r   r`   r   ra   r>   rb   rX   r^   rX   rc   rd   )rp   r;   rq   r?   rc   r0   )rp   r   rq   r?   r   r   rc   r0   )rp   r   rq   r?   r   r   rc   r0   )r   r   rc   r   )rp   r   rq   r?   rc   r0   )rp   rJ   rq   r?   r   r   rc   r0   )rc   r0   )rc   r9   )rc   r/   )rc   r   )ra   r>   rc   r0   )r   r   rb   rX   rc   r0   )r   r   rc   r   )r   r   rc   r   rf   )r   r   r   r   rc   rJ   )r   r  rc   r0   )r   r  rc   r0   )rj   rL   rc   r0   )rj   r  rc   r0   )rj   r  rc   r0   )rj   r  rc   r0   )rc   r  )r!  r"  rc   r#  )r!  r&  rc   r'  )r!  rX   rc   r)  )rc   r5  )r!  rX   r9  r   rc   r:  )rc   r@  )rF  r   rc   r0   )rI  r5   rc   r0   )rT  rU  rc   r0   )ra  rH   rc   rb  )r   r   ri  rU  rc   r0   )r   r   rc   r}  )r  r5   rc   r0   )r  r  rc   r0   )rj   r  r  rX   rc   r0   )r  r   r  r  r  rX   rc   r0   )r  r   r  r  r  r  rc   r0   )r   r  r  r   rc   r3   )r   r  r  rX   rc   r7   )
r   r0   r  r  r  r  r  r   rc   r  )r   r0   r  r   rc   r  )r   r0   r  r  r  r  rc   r  )r   r0   r  r  r  r  rc   r  )r   r0   r  rD   r  rU  r  rU  r  r   rc   r0   )r   r0   r  r   r  r   r  rU  r  rU  r  rA   r  r   rc   r0   )r  r   rc   r0   )
rT  rU  r!  rI   r   r   ri  rU  rc   r0   )r   r-  r,  r.  rc   r4   )rc   rJ  )rM  rX   rc   rN  )rc   r  )rc   rd  )rf  rg  rc   rd   )rf  rd   rc   r   )rf  ro  rc   rp  )rc   r   )r-  rv  rw  rx  rc   r   )r  r   r~  r   rc   r0   )r  r  r   rU  r   rU  rc   r  )r  r  rc   r   )rF  r  r  r   r  r   rc   r  )
rF  r  r  r   r  r   r  r   rc   r  )
rF  r  r  r   r  r   r  r   rc   r  )
r  r  r   r  r   r  r  r  rc   r   )
r  r  r   r  r   r  r  r  rc   r  )r  r  r   rU  r   rU  r  r  r  rX   r  r   rc   r0   )rc   r   )
r  rv  r  r  r  rX   r  rv  rc   r0   )
r  rU  r   rU  r  r   r  r   rc   r0   )rj   r  rc   r0   )X__name__
__module____qualname__rn   classmethodrt   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   r   propertyr   r   r   r  r  r  r  r  r  rj   r   r   r8  _iter_columnsr?  r   rE  rH  rS  r`  rh  r|  r-  r]  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r+  r<  rL  r4  r   rw   r  rk  rm  ru  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r   ro   rm   r\   r\   f   s        */- - - - - -" 8 8 8 [8. -8 -8 -8 [-8^  8  8  8 [ 8D - - - \- 
 
 
 [
 8 8 8 [80      P P P P
	" 	" 	" 	"       
 
 
 
 FJ 
 
 
 
 
 
     9 9 X9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! ! ! !* * * *1 1 1 1(9 9 9 9
 
 
 
B B B B(
 
 
 


 
 
 


 

 

 



 

 

 

' ' ' 'TL L L L	
 	
 	
 	
   (
 
 
 
@S S S S,

 

 

 

! ! ! !F   (") ") ") ")H
 
 
 
6S S S SS S S S '+C C C C C CB ,0@ (,	@ @ @ @ @ @D ! ! ! X!2 2 2 2-& -& -& -& -& -& -&^" " " "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 &7P1 1 1 1
 
 
 

 
 
 
 (
 (
 (
 (
 (
 (
ro   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,   rs  ior-   pathlibr.   typesr/   pandaspdr:  rH  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   ro   rm   <module>r     sv   " " " " " " " A A A A A A A A A A A A $ $ $ $ $ $ $ $ H H H H H H H H H H H H H H H H     . . . . . . X X X X X X X X                          1 0 0 0 0 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 ; : : : : : 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777777222222DDDDDDDD88888888%%%%%%                            &c2<&78K8888 4=9!!!""!""!""!"""##"##"##)4 4     4D
 D
 D
 D
 D
PQD
 D
 D
 D
 D
ro   