
    g!                       d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ er>d dl%m&Z& d dl'Z(d dl)Z*d d l+m,Z, d d!l-m.Z. d d"l/m0Z0 d d#l1m2Z2 d d$l3m4Z4 d d%l5m6Z6 d d&l7m8Z8 d d'lm9Z9  G d( d)      Z:y)*    )annotations)chain)TYPE_CHECKING)Any)Iterable)Iterator)Literal)Sequence)overload)evaluate_into_exprs)broadcast_series)convert_str_slice_to_int_slice)create_compliant_series)horizontal_concat)native_to_narwhals_dtype)pivot_table)rename)select_columns_by_namevalidate_dataframe_comparand)is_numpy_array)ColumnNotFoundError)Implementation)flatten)generate_temporary_column_name)import_dtypes_module)is_sequence_but_not_str)parse_columns_to_drop)scale_bytes)validate_backend_version)
ModuleTypeN)SelfPandasLikeGroupByPandasLikeNamespacePandasLikeSeries)IntoPandasLikeExpr)DType)SizeUnit)Versionc                     e Zd Z	 	 	 	 	 	 	 	 	 	 dPdZdQdZdQdZdRdZdSdZdTdZdUdZ	dVdZ
dWd	ZdXd
ZdYdZdZed[d       Zed\d       Zed]d       Zed^d       Zed_d       Zed`d       Ze	 	 	 	 dad       Zedbd       Z	 	 	 	 dcdZeddd       Ze	 	 	 	 ded       Zedd	 	 	 dfd       Ze	 	 	 	 dgd       Zdd	 	 	 dgdZddd	 	 	 	 	 dhdZedid        Zdid!Z	 	 	 	 	 	 djd"Zdkd#Zdld$Zdmd%Zdnd&Zdod'Z	 	 	 	 	 	 djd(Zdpd)Zdqd*Z	 	 	 	 	 	 	 	 	 	 drd+Zdsd,Z dtd-Z!d.d/	 	 	 	 	 	 	 	 	 	 	 dud0Z"ddddddd1d2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dvd3Z#dwd4Z$dwd5Z%d6dd7	 	 	 	 	 	 	 	 	 dxd8Z&dQd9Z'edyd:       Z(dd;dzd<Z)dYd{d=Z*d|d>Z+d}d?Z,d~d}d@Z-ddAZ.ddBZ/ddCZ0ddDZ1dYddEZ2ddFZ3dddGZ4dHdI	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddJZ5ddKZ6	 d~ddddL	 	 	 	 	 	 	 	 	 	 	 ddMZ7	 	 	 	 	 	 	 	 	 	 	 	 ddNZ8ddOZ9y)PandasLikeDataFramec                   | j                  |j                         || _        || _        || _        || _        t        | j                  | j                         y N)_validate_columnscolumns_native_frame_implementation_backend_version_versionr    )selfnative_dataframeimplementationbackend_versionversions        T/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_pandas_like/dataframe.py__init__zPandasLikeDataFrame.__init__3   sN     	/778-- / !5!5t7L7LM    c                    | S r0    r7   s    r<   __narwhals_dataframe__z*PandasLikeDataFrame.__narwhals_dataframe__B       r>   c                    | S r0   r@   rA   s    r<   __narwhals_lazyframe__z*PandasLikeDataFrame.__narwhals_lazyframe__E   rC   r>   c                `    ddl m}  || j                  | j                  | j                        S )Nr   r%   )r;   )narwhals._pandas_like.namespacer&   r4   r5   r6   )r7   r&   s     r<   __narwhals_namespace__z*PandasLikeDataFrame.__narwhals_namespace__H   s)    G"  $"7"7
 	
r>   c                    | j                   t        j                  t        j                  t        j                  hv r| j                   j                         S dt        | j                          }t        |      )Nz!Expected pandas/modin/cudf, got: )r4   r   PANDASMODINCUDFto_native_namespacetypeAssertionError)r7   msgs     r<   __native_namespace__z(PandasLikeDataFrame.__native_namespace__O   sj    !!  $
 

 '';;==1$t7K7K2L1MNS!!r>   c                ,    t        | j                        S r0   )lenr3   rA   s    r<   __len__zPandasLikeDataFrame.__len__Z   s    4%%&&r>   c                $   	 t        |j                               }t        |      |k7  rJddlm}  ||      }d}|j                         D ]  \  }}|dkD  s|d| d| dz  } d	| }t        |      y # t        $ r d| }t        |      d w xY w)
Nz7Expected hashable (e.g. str or int) column names, got: r   )Counter    z
- 'z' z timesz"Expected unique column names, got:)rS   drop_duplicates	Exception
ValueErrorcollectionsrV   items)r7   r2   len_unique_columnsrP   rV   counterkeyvalues           r<   r1   z%PandasLikeDataFrame._validate_columns]   s    	,!$W%<%<%>!?
 w<--+g&GC%mmo
U19U3%r%77C . 7se<CS/! .	  	,KG9UCS/t+	,s   A4 4Bc                h    | j                  | j                  | j                  | j                  |      S Nr9   r:   r;   )	__class__r3   r4   r5   )r7   r;   s     r<   _change_versionz#PandasLikeDataFrame._change_versiono   s6    ~~// 11	  
 	
r>   c                h    | j                  || j                  | j                  | j                        S rc   )re   r4   r5   r6   )r7   dfs     r<   _from_native_framez&PandasLikeDataFrame._from_native_framew   s4    ~~// 11MM	  
 	
r>   c                |    ddl m}  || j                  |   | j                  | j                  | j
                        S )Nr   r'   rd   )narwhals._pandas_like.seriesr(   r3   r4   r5   r6   )r7   namer(   s      r<   
get_columnzPandasLikeDataFrame.get_column   s9    At$// 11MM	
 	
r>   Nc                (    | j                  ||      S )Ndtypecopy)to_numpy)r7   rp   rq   s      r<   	__array__zPandasLikeDataFrame.__array__   s    }}5t}44r>   c                     y r0   r@   r7   items     r<   __getitem__zPandasLikeDataFrame.__getitem__   s    VYr>   c                     y r0   r@   ru   s     r<   rw   zPandasLikeDataFrame.__getitem__       GJr>   c                     y r0   r@   ru   s     r<   rw   zPandasLikeDataFrame.__getitem__   s    :=r>   c                     y r0   r@   ru   s     r<   rw   zPandasLikeDataFrame.__getitem__   ry   r>   c                     y r0   r@   ru   s     r<   rw   zPandasLikeDataFrame.__getitem__   s    ?Br>   c                     y r0   r@   ru   s     r<   rw   zPandasLikeDataFrame.__getitem__   s    >Ar>   c                     y r0   r@   ru   s     r<   rw   zPandasLikeDataFrame.__getitem__   s     "r>   c                     y r0   r@   ru   s     r<   rw   zPandasLikeDataFrame.__getitem__   s    UXr>   c           
        t        |t              rt        d |D              }t        |t              r=ddlm}  || j
                  |   | j                  | j                  | j                        S t        |t              rt        |      dk(  rt        |d         rt        |d         dk(  r)| j                  | j
                  j                               S t        d |d   D              r(| j                  | j
                  j                  |         S t        d |d   D              rU|d   | j
                  j                  j!                  |d         f}| j                  | j
                  j                  |         S d	t#        |d          }t%        |      t        |t              rt        |      dk(  rt        |d   t&              r| j
                  j                  }|d   t'        d       k(  r/| j                  | j
                  j                  |d   d d f         S t        |d   j(                  t              st        |d   j*                  t              rKt-        |d   |      \  }}}| j                  | j
                  j                  |d   t'        |||      f         S t        |d   j(                  t.              st        |d   j*                  t.              r_| j                  | j
                  j                  |d   t'        |d   j(                  |d   j*                  |d   j0                        f         S d
t#        |d          }t%        |      t        |t              rt        |      dk(  rddlm} t        |d   t              rG|d   | j
                  j                  j3                  |d         f}| j
                  j                  |   }	nIt        |d   t.              r| j
                  j                  |   }	ndt#        |d          }t%        |       ||	| j                  | j                  | j                        S t        |      st5        |      r|j6                  dk(  rt        d |D              rIt        |      dkD  r;| j                  t9        | j
                  || j                  | j                              S | j                  | j
                  j                  |         S t        |t&              rt        |j(                  t              st        |j*                  t              r[t-        || j
                  j                        \  }}}| j                  | j
                  j                  d d t'        |||      f         S | j                  | j
                  j                  |         S dt#        |       }t%        |      )Nc              3  L   K   | ]  }t        |      rt        |      n|  y wr0   )r   list).0is     r<   	<genexpr>z2PandasLikeDataFrame.__getitem__.<locals>.<genexpr>   s"     Tt!$;A$>aAEts   "$r   r'   rd      rX   c              3  <   K   | ]  }t        |t                y wr0   )
isinstanceintr   xs     r<   r   z2PandasLikeDataFrame.__getitem__.<locals>.<genexpr>        7w!:a%w   c              3  <   K   | ]  }t        |t                y wr0   r   strr   s     r<   r   z2PandasLikeDataFrame.__getitem__.<locals>.<genexpr>   r   r   z#Expected sequence str or int, got: z,Expected slice of integers or strings, got: zExpected str or int, got: c              3  <   K   | ]  }t        |t                y wr0   r   r   s     r<   r   z2PandasLikeDataFrame.__getitem__.<locals>.<genexpr>   s     4t!:a%tr   zExpected str or slice, got: )r   tupler   rk   r(   r3   r4   r5   r6   rS   r   ri   re   allilocr2   get_indexerrN   	TypeErrorslicestartstopr   r   stepget_locr   ndimr   )
r7   rv   r(   indexerrP   r2   r   r   r   native_seriess
             r<   rw   zPandasLikeDataFrame.__getitem__   s    dE"TtTTDdC E#""4(#33 $ 5 5	  tU#D	Q'Q047|q ..t/A/A/K/K/MNN7tAw77..t/A/A/F/Ft/LMM7tAw77G&&..::47C ..t/A/A/F/Fw/OPP5d47m_E  C. e$TaJtAwPU<V((00GAw%+%..t/A/A/F/FtAwPQz/RSS$q'---DGLL#1N$B47G$T!tT..&&++DGU5$5M,MN  $q'---DGLL#1N..&&++QtAw}}d1gllDGLL!QQ 
 Ad1gPCC. e$TaE$q'3'Q!3!3!;!;!C!CDG!LM $ 2 2 7 7 =DGS) $ 2 2 7 7 =24Q=/Bn$##33 $ 5 5	  %T*~d/C		UV4t44TQ..***--,,	  **4+=+=+B+B4+HIIe$$**c*jC.H$B$,,44%!tT ..&&++AuUD$/G,GH  **4+=+=+B+B4+HII 1d=CC. r>   c                J    | j                   j                  j                         S r0   )r3   r2   tolistrA   s    r<   r2   zPandasLikeDataFrame.columns  s    !!))0022r>   c                    y r0   r@   r7   nameds     r<   rowszPandasLikeDataFrame.rows  s    
  #r>   Fr   c                    y r0   r@   r   s     r<   r   zPandasLikeDataFrame.rows   s    
 !$r>   c                    y r0   r@   r   s     r<   r   zPandasLikeDataFrame.rows'  s    
 8;r>   c               :   |sy| j                   t        j                  u r7| j                  d      D cg c]  }t	        |j                                c}S t        | j                  j                  dd             S | j                  j                  d      S c c}w )NTr   Findexrl   recordsorient)
r4   r   rL   r   r   valuesr   r3   
itertuplesto_dict)r7   r   rows      r<   r   zPandasLikeDataFrame.rows.  s     ##~':'::7;yyty7LM7Lcjjl+7LMM**55E5MNN!!)));;	 Ns    Bi   )r   buffer_sizec             #     K   |s&| j                   j                  dd       E d {    y | j                   j                  fd| j                   j                  d      D        E d {    y 7 I7 w)NFr   c              3  H   K   | ]  }t        t        |              y wr0   )dictzip)r   r   	col_namess     r<   r   z0PandasLikeDataFrame.iter_rows.<locals>.<genexpr>G  s%      EC SC()Es   "r   )r3   r   r2   )r7   r   r   r   s      @r<   	iter_rowszPandasLikeDataFrame.iter_rows;  ss      ))445t4LLL**22I--88u8E   Ms"   #A4A0AA4*A2+A42A4c           	         | j                   j                  D ci c]1  }|t        | j                   |   | j                  | j                        3 c}S c c}w r0   )r3   r2   r   r6   r4   )r7   cols     r<   schemazPandasLikeDataFrame.schemaL  sb     ))11	
 2 )""3'8L8L  2	
 	
 
s   6Ac                    | j                   S r0   )r   rA   s    r<   collect_schemaz"PandasLikeDataFrame.collect_schemaU  s    {{r>   c                   |rZt        d |D              rH|sFt        |      }| j                  t        | j                  || j
                  | j                              S t        | g|i |}|s)| j                  | j                  j                               S t        |      }t        || j                  | j
                        }| j                  |      S )Nc              3  <   K   | ]  }t        |t                y wr0   r   r   s     r<   r   z-PandasLikeDataFrame.select.<locals>.<genexpr>^  s     ;UAs+Ur   r9   r:   )r   r   ri   r   r3   r5   r4   r   re   r   r   )r7   exprsnamed_exprscolumn_names
new_seriesrh   s         r<   selectzPandasLikeDataFrame.selectY  s    
 S;U;;K;L**&&& ))((	  )EEE
**4+=+=+G+G+IJJ%j1
// 11

 &&r**r>   c                   |+| j                  | j                  j                  d            S t        |t              r|gn|}| j                         }| j                  |j                   |j                  | j                                      S )Nr   axis)
ri   r3   dropnar   r   rH   filterany_horizontalr   is_null)r7   subsetplxs      r<   
drop_nullszPandasLikeDataFrame.drop_nullsu  s}    >**4+=+=+D+D!+D+LMM'4&&))+{{C..wsww/?/G/G/IJJKKr>   c                p    | j                   j                  d      j                         }t        ||      S )NT)deep)unit)r3   memory_usagesumr   )r7   r   szs      r<   estimated_sizez"PandasLikeDataFrame.estimated_size|  s1    ,,$,7;;=2D))r>   c                j   t        t        t        | j                              | j                  j                  | j
                  | j                  | j                        j                  |      }| j                  t        |j                  | j                  g| j
                  | j                              S )N)r   r9   r:   r;   r   )r   rangerS   r3   r   r4   r5   r6   aliasri   r   _native_series)r7   rl   	row_indexs      r<   with_row_indexz"PandasLikeDataFrame.with_row_index  s    +#d(()*$$**// 11MM
 %+ 	 &&))4+=+=>#33 $ 5 5
 	
r>   c                T    t        d | j                  j                  |   D              S )Nc              3      K   | ]  }|  y wr0   r@   r   s     r<   r   z*PandasLikeDataFrame.row.<locals>.<genexpr>  s     = <1Q <s   )r   r3   r   )r7   r   s     r<   r   zPandasLikeDataFrame.row  s$    = 2 2 7 7 <===r>   c                   | j                         t        |      dk(  r0t        |d   t              rt	        d |d   D              r|s|d   }nd j
                  t        |fd|j                         D               }|j                  |       d   }t        | j                  j                  |      }| j                  | j                  j                  |         S )NrX   r   c              3  <   K   | ]  }t        |t                y wr0   )r   boolr   s     r<   r   z-PandasLikeDataFrame.filter.<locals>.<genexpr>  s     ?AJq$'r   c              3  L   K   | ]  \  }}j                  |      |k(    y wr0   )r   )r   rl   vr   s      r<   r   z-PandasLikeDataFrame.filter.<locals>.<genexpr>  s%      WCVa!!3CVs   !$)rH   rS   r   r   r   all_horizontalr   r]   _callr   r3   r   ri   loc)r7   
predicatesconstraints_maskexprmaskr   s         @r<   r   zPandasLikeDataFrame.filter  s    ))+
Oq :a=$/?A??qME%3%% W;CTCTCV WD ::d#A&D01C1C1I1I4PE&&t'9'9'='=e'DEEr>   c           	     $  	 | j                   j                  t        | g|i |}|st        |       dk(  r| S |D ci c]  }|j                  | c}	g }| j                   j
                  D ]O  }|	v r+|j                  t        	j                  |                   2|j                  | j                   |          Q |j                  	fd	D               t        || j                  | j                        }| j                  |      S c c}w )Nr   c              3  <   K   | ]  }t        |           y wr0   r   )r   sr   !new_column_name_to_new_column_maps     r<   r   z3PandasLikeDataFrame.with_columns.<locals>.<genexpr>  s'      
6 )0QRS0TU6s   r   )r3   r   r   rS   rl   r2   appendr   popextendr   r4   r5   ri   )
r7   r   r   new_columnsr   	to_concatrl   rh   r   r   s
           @@r<   with_columnsz PandasLikeDataFrame.with_columns  s   
 ""(()$FF+Fs4yA~K@K,L1QVVQY,L)	&&..D88  0@DDTJ   !3!3D!9: / 	 
6
 	

 // 11

 &&r**- -Ms   Dc                z    | j                  t        | j                  || j                  | j                              S )Nr2   r9   r:   )ri   r   r3   r4   r5   )r7   mappings     r<   r   zPandasLikeDataFrame.rename  s;    &&""#33 $ 5 5	
 	
r>   c                t    t        | ||      }| j                  | j                  j                  |            S )N)compliant_framer2   strictr2   )r   ri   r3   drop)r7   r2   r   to_drops       r<   r   zPandasLikeDataFrame.drop  s:    ' '&
 &&t'9'9'>'>w'>'OPPr>   c                   t        g t        |g      |      }| j                  }t        |t              r| }n|D cg c]  }|  }}|rdnd}	| j	                  |j                  |||	            S c c}w )Nlastfirst)	ascendingna_position)r   r3   r   r   ri   sort_values)
r7   by
descending
nulls_lastmore_by	flat_keysrh   r  dr  s
             r<   sortzPandasLikeDataFrame.sort  s     6grdm6g67	j$'/9>I(23
1Q
I3 *f&&NN9	{NS
 	
 4s   
A3c                p    t        | j                  | j                  | j                  | j                        S rc   )r.   r3   r4   r5   r6   rA   s    r<   collectzPandasLikeDataFrame.collect  s1    "// 11MM	
 	
r>   c               6    ddl m}  || t        |      |      S )Nr   r#   )drop_null_keys)narwhals._pandas_like.group_byr$   r   )r7   r  keysr$   s       r<   group_byzPandasLikeDataFrame.group_by  s    D J)
 	
r>   inner)howc          
     |   t        |t              r|g}t        |t              r|g}|dk(  r0| j                  t        j                  u sG| j                  t        j
                  u s+| j                  t        j                  u r| j                  dk  rt        dg | j                  |j                        }| j                   | j                  j                  di |dij                   |j                  j                  di |did||d|f      j                  |	            S | j                  | j                  j                  |j                  dd|f
            S |dk(  rE| j                  t        j
                  u r8| j                  | j                  j                  |j                  d||            S t        dg | j                  |j                        |d}t        |      t!        t#        |j                  || j                  | j                        t%        t'        ||            | j                  | j                        j)                         }| j                  | j                  j                  |d||      j*                  fd   j                  	            S |dk(  r|d}t        |      t!        t#        |j                  || j                  | j                        t%        t'        ||            | j                  | j                        j)                         }| j                  | j                  j                  |d||            S |dk(  r|j                  }| j                  j                  |d||d|f      }	g }
t'        ||      D ]E  \  }}||k7  r || j                  vr|
j-                  |       +||k7  s1|
j-                  | |        G | j                  |	j                  |
	            S | j                  | j                  j                  |j                  |||d|f            S )Ncross)rX         )n_bytesr2   r   r  rW   )r  left_onright_on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    r<   <lambda>z*PandasLikeDataFrame.join.<locals>.<lambda>R  s    1_#5#Dr>   semiz(`right_on` cannot be `None` in semi-joinleft)r  r  r  r  r@   )r   r   r4   r   rK   rL   rJ   r5   r   r2   ri   r3   assignmerger   r   r   r   r   r   rY   r   r   )r7   otherr  r  r  suffix	key_tokenrP   other_nativeresult_nativeextraleft_key	right_keyr%  s                @r<   joinzPandasLikeDataFrame.join  sf    gs#iGh$ zH'>$$(<(<<''>+>+>>$$(=(==))F2:'F'F'F	 ..-D&&--?A?U2++22Di^D# )!*"$f   T)T,
 
 ..&&,,++#"$f -   &=##~':'::..&&,,++& '!)	 -   #A'F'F'F# #DC#C.(  &*++ --,,	 !Xw!78#'#7#7$($9$9
  "/#  ..&&,,$#"1 '!( -  SDF T/T2
 
 &=@n$ *++ --,,	 !Xw!78#'#7#7$($9$9
 "/#  **""(( #$	 )   &= ..L ..44!f 5 M E'*7H'=#)(Ydll-JLL+(*LLI;vh!78	 (>
 **=+=+=e+=+LMM&&$$##!f % 
 	
r>   backward)r  r  onby_leftby_rightr  strategyc                   | j                         }	| j                  |	j                  | j                  |j                  |||||||d
            S )N)rW   _right)r  r  r5  left_byright_byr  	directionr  )rQ   ri   
merge_asofr3   )
r7   r+  r  r  r5  r6  r7  r  r8  r   s
             r<   	join_asofzPandasLikeDataFrame.join_asof  s`     '')&&NN""##!!"'  
 	
r>   c                V    | j                  | j                  j                  |            S r0   )ri   r3   headr7   ns     r<   rA  zPandasLikeDataFrame.head  $    &&t'9'9'>'>q'ABBr>   c                V    | j                  | j                  j                  |            S r0   )ri   r3   tailrB  s     r<   rF  zPandasLikeDataFrame.tail  rD  r>   any)keepmaintain_orderc                    dddj                  ||      }|1t         fd|D              rd| d j                   }t        |       j	                   j
                  j                  ||            S )NFr  )nonerG  c              3  :   K   | ]  }|j                   v  y wr0   r   )r   r   r7   s     r<   r   z-PandasLikeDataFrame.unique.<locals>.<genexpr>  s     %LVat||&;Vs   z
Column(s) z not found in )r   rH  )getrG  r2   r   ri   r3   rY   )r7   r   rH  rI  mapped_keeprP   s   `     r<   uniquezPandasLikeDataFrame.unique  s|      %W599$E#%LV%L"LvhnT\\NCC%c**&&..f;.O
 	
r>   c                    | S r0   r@   rA   s    r<   lazyzPandasLikeDataFrame.lazy  rC   r>   c                .    | j                   j                  S r0   )r3   shaperA   s    r<   rS  zPandasLikeDataFrame.shape  s    !!'''r>   )	as_seriesc          
         ddl m} |rP| j                  D ci c]:  }| || j                  |   | j                  | j
                  | j                        < c}S | j                  j                  d      S c c}w )Nr   r'   rd   r   r   )rk   r(   r2   r3   r4   r5   r6   r   )r7   rT  r(   r   s       r<   r   zPandasLikeDataFrame.to_dict  s    A  << (C %&&s+#'#7#7$($9$9 MM	  (  !!)))88s   ?A5c           	     $   ddl m} || j                  t        j                  u }t        | j                        }| j                  j                         D cg c]"  \  }}||j                  k(  r|j                  |$ }}}|ri| j                   | j                         j                  | j                  j                  d      j                  j!                  d             j"                  }n| j"                  }||j%                  ||      S |j&                  D ]Y  }	t)        |	      |v sdd l}
 |
j,                  | j.                  D cg c]  }| |   j%                  |      d d d f     c}      c S  |j%                  |      S c c}}w c c}w )Nr   )PANDAS_TO_NUMPY_DTYPE_MISSINGUTCro   )rq   )rk   rW  r4   r   rL   r   r6   r   r]   Datetime	time_zoner   rH   r   dtconvert_time_zonereplace_time_zoner3   rr   dtypesr   numpyhstackr2   )r7   rp   rq   rW  r^  r`   val
to_convertrh   	col_dtypenpr   s               r<   rr   zPandasLikeDataFrame.to_numpy  sy   N<''>+>+>>D%dmm4 !KK--/
/Sfoo%#--*C / 	 

 ""++-j"%%e,%%d+	
 m  ##B;;U;66 I9~!>>" ryyGK||T|T#Y''T'21d7;|T 	 # {{{%%;
6 Us   'F#F
c                    | j                   t        j                  u r| j                  S | j                   t        j                  u r| j                  j                         S | j                  j                         S r0   )r4   r   rJ   r3   rK   
_to_pandas	to_pandasrA   s    r<   rg  zPandasLikeDataFrame.to_pandas   s`    >#8#88%%%>#7#77%%0022!!++--r>   c                :    | j                   j                  |       y r0   )r3   
to_parquetr7   files     r<   write_parquetz!PandasLikeDataFrame.write_parquet  s    %%d+r>   c                <    | j                   j                  |d      S )NFr   )r3   to_csvrj  s     r<   	write_csvzPandasLikeDataFrame.write_csv
  s    !!((U(;;r>   c                    ddl m}  || j                  j                  d      | j                  | j
                  | j                        S Nr   r'   F)rH  rd   rk   r(   r3   
duplicatedr4   r5   r6   r7   r(   s     r<   is_duplicatedz!PandasLikeDataFrame.is_duplicated  sB    A))u)5// 11MM	
 	
r>   c                .    | j                   j                  S r0   )r3   emptyrA   s    r<   is_emptyzPandasLikeDataFrame.is_empty  s    !!'''r>   c                    ddl m}  || j                  j                  d       | j                  | j
                  | j                        S rq  rr  rt  s     r<   	is_uniquezPandasLikeDataFrame.is_unique  sE    A***66// 11MM	
 	
r>   c                    t        | j                  j                         j                  d      j	                         j                         | j                  | j                  | j                        S )Nr   r   rd   )	r.   r3   isnar   to_frame	transposer4   r5   r6   rA   s    r<   
null_countzPandasLikeDataFrame.null_count%  sZ    "##%))q)1::<FFH// 11MM	
 	
r>   c                @   |D|B| j                   dk7  rd| j                   }t        |      | j                  j                  d   S ||d}t        |      t	        |t
              r| j                  j                  |      n|}| j                  j                  ||f   S )NrX   rX   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`)rS  r[   r3   r   r   r   r2   r   )r7   r   columnrP   _cols        r<   rv   zPandasLikeDataFrame.item-  s    ;6>zzV#((,

~7 
 !o%%%**400[FNLCS/!-7-Dt||!!&)&!!&&sDy11r>   c                T    | j                  | j                  j                               S r0   )ri   r3   rq   rA   s    r<   clonezPandasLikeDataFrame.clone?  s"    &&t'9'9'>'>'@AAr>   c                X    | j                  | j                  j                  |d |         S r0   )ri   r3   r   )r7   rC  offsets      r<   gather_everyz PandasLikeDataFrame.gather_everyB  s*    &&t'9'9'>'>vyqy'IJJr>   _)	separatorc               n   | j                   t        j                  u r| j                  dk  rd}t	        |      | j                   t        j
                  u rd}t	        |      ddlm} | j                  }	t        |t              r|g}t        |t              r|g}t        |t              r|g}|"| j                  D 
cg c]  }
|
h ||vs|
 }}
|"| j                  D 
cg c]  }
|
h ||vs|
 }}
||	j                  |||      }ni|dk(  rT|	j                  g ||      j                  |D ci c]  }|d c}      j                         j                  |||      }nt!        | ||||	      }|rm| j                   t        j"                  u rQ|D ci c]E  }|t%        | j                  |   j'                         j)                         j+                               G }}n|rC|D ci c]7  }|t%        | j                  |   j'                         j-                               9 }}n| j                   t        j"                  u rH|D ci c]<  }|| j                  |   j'                         j)                         j+                         > }}n9|D ci c].  }|| j                  |   j'                         j-                         0 }}|gt/        |j1                               }t/         ||       }|j2                  d d |f   }|j                  j-                         }t5        |      }|d
k(  r@|D cg c]4  }t5        |      d
kD  r|j7                  |      j9                         n|d   6 }}ne|D cg c]Z  }t5        |      d
kD  r/|j7                  |d   ddj7                  || d        z   dz   g      nddj7                  || d        z   dz   \ }}||_        dg|j                  _        | j=                  |j                               S c c}
w c c}
w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )Nr  z'pivot is only supported for pandas>=1.1zcpivot is not supported for Modin backend due to https://github.com/modin-project/modin/issues/7409.r   )product)r2   r   r   rS   size)rh   r   r   r2   aggregate_functionrX   z{"z","z"}rW   )r4   r   rJ   r5   NotImplementedErrorrK   	itertoolsr  r3   r   r   r2   pivotgroupbyaggreset_indexr   rL   sortedrO  to_arrow	to_pylistr   r   r   r   rS   r3  stripnamesri   )r7   r5  r   r   r  sort_columnsr  rP   r  framecresultr   r   uniques	all_listsordered_colsr2   n_onr   s                       r<   r  zPandasLikeDataFrame.pivotE  sS    >#8#88!!F*;C%c**>#7#77wC%c**%""b#Bfc"XFeS!GE= $H120GQEH>!%HA-B--1GaFH%[[5[HF5(mmUm,0Aai01rv>	  !#5F D00N4G4GG C VD..s3::<EEGQQSTT   RTRT3VD..s3::<CCEFFRT   !!^%8%88XZXZQTT'',335>>@JJLLXZ   RTTQS#sD..s3::<CCEEQSGT5d7>>#345	GY/0A|O,..'')2w19 #"C 036{Q	s#))+CGK"   #	 #C v;? Auzz#tef+/F(F(MNOEJJsD56{33d:; #	   % "t&&v'9'9';<<w I I 1
 U
sE   =P
P
!P/P3
PA
P*<P	AP#3P(19P-1AP2c                    | j                   t        j                  u r| j                  j	                  d      S dd l}|j                  j                  | j                        S )NF)preserve_indexr   )r4   r   rL   r3   r  pyarrowTablefrom_pandas)r7   pas     r<   r  zPandasLikeDataFrame.to_arrow  sN    >#6#66%%..e.DDxx##D$6$677r>   )fractionwith_replacementseedc               ^    | j                  | j                  j                  ||||            S )N)rC  fracreplacerandom_state)ri   r3   sample)r7   rC  r  r  r  s        r<   r  zPandasLikeDataFrame.sample  s:     &&%%(,<4 & 
 	
r>   c                    | j                  | j                  j                  ||||nd||            S d            S )Nvariablera   )id_vars
value_varsvar_name
value_name)ri   r3   melt)r7   r5  r   variable_namer  s        r<   unpivotzPandasLikeDataFrame.unpivot  sc     &&##*7*C)3)?:	 $ 
 	

 FM	 $ 
 	
r>   c                d   ddl m} t        | j                        }t	        |t
              r|g|ng ||}| j                         }|D ]$  }||   }||j                  k7  sd| d}	 ||	       t        |      dk(  r-| j                  | j                  j                  |d               S | j                  |d      j                  j                         t        fd|dd  D              sddl m}
 d}	 |
|	      | j                  }|D cg c]	  }||vs| }}g ||d      j                  |d         }|dd  D cg c]#  }|   j                         j!                         % }}| j#                         }| j                  |j%                  |g|d	      |         S c c}w c c}w )
Nr   )InvalidOperationErrorz-`explode` operation not supported for dtype `z`, expected List typerX   c              3  z   K   | ]2  }|   j                   j                         k(  j                          4 y wr0   )r   rS   r   )r   col_nameanchor_seriesnative_frames     r<   r   z.PandasLikeDataFrame.explode.<locals>.<genexpr>  s;       .H h',,002mCHHJ .s   8;)
ShapeErrorz2exploded columns must have matching element countsr   )narwhals.exceptionsr  r   r6   r   r   r   ListrS   ri   r3   exploder   r   r  r2   r}  rQ   concat)r7   r2   more_columnsr  r^  
to_exploder   col_to_exploderp   rP   r  original_columnsr  other_columnsexploded_framer  exploded_seriesr   r  r  s                     @@r<   r  zPandasLikeDataFrame.explode  s   =%dmm4 '3' $|$*7*\* 	
 $$&(N>*E#CE7 K) )  ,C00 ) z?a**4+=+=+E+EjQRm+TUU--L(A7<<@@BM  *12  ;J o%#||(8P(81AZ<OQ(8MP)*IM*I:a=*IJRR1N MWWXWYNLZX&..099;N   ++-C**

N=_=A
FGWX  Q
s   	F(F((F-)
r8   r   r9   r   r:   ztuple[int, ...]r;   r,   returnNone)r  r"   )r  r&   )r7   r"   r  r!   )r  r   )r2   zpd.Indexr  r  )r;   r,   r  r"   )rh   r   r  r"   )rl   r   r  r(   )NN)rp   r   rq   bool | Noner  z
np.ndarray)rv   ztuple[Sequence[int], str | int]r  r(   )rv   zSequence[int]r  r.   )rv   r   r  r(   )rv   zSequence[str]r  r.   )rv   r   r  r.   )rv   ztuple[slice, slice]r  r"   )rv   z+tuple[Sequence[int], Sequence[int] | slice]r  r.   )rv   ztuple[slice, Sequence[int]]r  r.   )rv   zstr | int | slice | Sequence[int] | Sequence[str] | tuple[Sequence[int], str | int] | tuple[slice | Sequence[int], Sequence[int] | slice] | tuple[slice, slice]r  z&PandasLikeSeries | PandasLikeDataFrame)r  	list[str])r   zLiteral[True]r  zlist[dict[str, Any]])r   zLiteral[False]r  zlist[tuple[Any, ...]])r   r   r  z,list[tuple[Any, ...]] | list[dict[str, Any]])r   r   r   r   r  z@Iterator[list[tuple[Any, ...]]] | Iterator[list[dict[str, Any]]])r  zdict[str, DType])r   r)   r   r)   r  r"   )r   str | list[str] | Noner  r"   )r   r+   r  zint | float)rl   r   r  r"   )r   r   r  ztuple[Any, ...])r   r)   r   r   r  r"   )r   zdict[str, str]r  r"   )r7   r"   r2   r  r   r   r  r"   )
r  zstr | Iterable[str]r	  r   r  zbool | Sequence[bool]r  r   r  r"   )r  r.   )r  r   r  r   r  r$   )r+  r"   r  z:Literal['left', 'inner', 'outer', 'cross', 'anti', 'semi']r  r  r  r  r,  r   r  r"   )r+  r"   r  
str | Noner  r  r5  r  r6  r  r7  r  r  r  r8  z)Literal['backward', 'forward', 'nearest']r  r"   )rC  r   r  r"   )
r7   r"   r   zlist[str] | NonerH  z'Literal['any', 'first', 'last', 'none']rI  r   r  r"   )r  ztuple[int, int])rT  r   r  zdict[str, Any])rp   r   rq   r  r  r   )r  r   )rk  r   r  r   r0   )r7   r"   r  r(   )r7   r"   r  r   )r7   r"   r  r.   )r7   r"   r   
int | Noner  zint | str | Noner  r   )r7   r"   r  r"   )r   )r7   r"   rC  r   r  r   r  r"   )r7   r"   r5  zstr | list[str]r   r  r   r  r  z
Any | Noner  r   r  r   r  r"   )r7   r"   r  r   )r7   r"   rC  r  r  zfloat | Noner  r   r  r  r  r"   )r7   r"   r5  r  r   r  r  r  r  r  r  r"   )r7   r"   r2   zstr | Sequence[str]r  r   r  r"   ):__name__
__module____qualname__r=   rB   rE   rH   rQ   rT   r1   rf   ri   rm   rs   r   rw   propertyr2   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r3  r?  rA  rF  rO  rQ  rS  r   rr   rg  rl  ro  ru  rx  rz  r  rv   r  r  r  r  r  r  r  r@   r>   r<   r.   r.   1   s   NN '	N
 )N N 
N
	"'"$


5 Y YJ J= =J JB BA A"?"	" " X Xl!"l! 
0l!^ 3 3 # # 
	# #  !&$ $ 
	$ $ ; ; 
6	; ;  %<<	5<  	  	
 
J" 
 
+"+ *+ 
	+8L*
 >F( +" + * + 
	 +D
Q

 
 *	

 
 

&

 KR	K
K
 H	K

 (K
 )K
 K
 
K
b ##*.+/%)>H

 	

 
 
 (
 )
 #
 <
 

<CC 9>$

 
 6	

 
 

$ ( ( ,1 9&&P.,<
(

2$BK Z=Z=Z= &	Z=
 'Z= 'Z= Z= Z= 
Z=x8 
 "&!&


 	

 
 
 



"
 &
 "	

 
 

 1r>   r.   );
__future__r   r  r   typingr   r   r   r   r	   r
   r   narwhals._expression_parsingr   narwhals._pandas_like.utilsr   r   r   r   r   r   r   r   r   narwhals.dependenciesr   r  r   narwhals.utilsr   r   r   r   r   r   r   r    typesr!   r_  rd  pandaspdtyping_extensionsr"   r  r$   rG   r&   rk   r(   narwhals._pandas_like.typingr)   narwhals.dtypesr*   narwhals.typingr+   r,   r.   r@   r>   r<   <module>r     s    "          < 8 F ? 9 @ 3 . > D 0 3 ) " 9 / 2 0 & 3 &@C=?%(&G Gr>   