
    O3jy                    ,   U d dl mZ d dlmZmZ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 d dlmZmZmZmZmZ d dlmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d	l'm(Z( d d
l)m*Z* erd dlm+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 d dlm2Z2 d dl3Z4d dl5Z6d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZAmBZB d dlCmDZDmEZE d dlFmGZG d dlHmIZI d dlJmKZKmLZL d dlmZmMZM d dlNmOZO d dlPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ ed   Z[de\d<   dZ]d e\d!<    G d" d#ed$         Z^y)%    )annotations)
CollectionIteratorMappingSequence)TYPE_CHECKINGAnyFinalLiteralcastoverloadN)ArrowSeries)arangeconcat_tablesnarwhals_to_native_dtypenative_to_narwhals_dtyperepeat)EagerDataFrame)	ImplementationVersioncheck_column_names_are_uniqueconvert_str_slice_to_int_slicegenerate_temporary_column_namenot_implementedparse_columns_to_dropscale_bytessupports_arrow_c_stream)is_numpy_array_1d)
ShapeError)Iterable)BytesIO)Path)
ModuleType)	TypeAlias)SelfTypeIs)	ArrowExprArrowGroupByArrowNamespace)ChunkedArrayAnyOrder)CompliantDataFrameAnyCompliantLazyFrameAny)SparkSession)IntoArrowTable)_EagerAllowedImpl_LazyAllowedImpl)r   _LimitedContext)DType)

IntoSchemaJoinStrategySizedMultiIndexSelectorSizedMultiNameSelectorSizeUnitUniqueKeepStrategy_1DArray_2DArray_SliceIndex
_SliceName)	left semiz
right semi	left antiz
right antiinner
left outerzright outer
full outerr$   JoinTypeFr
   MYPYc                     e Zd Zej                  Zdd	 	 	 	 	 	 	 	 	 dNdZedOd       Ze	 	 	 	 	 	 	 	 dPd       Z	e	 	 	 	 	 	 	 	 dQd       Z
edRd       ZedSd       Ze	 	 	 	 	 	 	 	 dTd	       ZdUd
ZdVdZdWdZdWdZdXdZdddYdZedZd       Zd[dZd\dZed]d       Zed^d       Zed_d       Zd_dZd`dZeZ	 	 	 	 	 	 dadZdbdZdcdZdddZ dedZ!dfdZ"dgd Z#	 	 	 	 dhd!Z$	 	 	 	 did"Z%edjd#       Z&djd$Z'dkd%Z( e)       Z*edld&       Z+dmd'Z,dnd(Z-dod)Z.dnd*Z/	 	 	 	 	 	 dpd+Z0	 	 	 	 	 	 	 	 	 	 	 	 dqd,Z1 e)       Z2drd-Z3dsd.Z4dtd/Z5dud0Z6dvd1Z7dwd2Z8dxd3d4dcd5Z9edyd6       Z:edzd7       Z:	 	 	 	 d{d8Z:d|d9Z;d}d:Z<d~d;Z=d~d<Z>	 dxd3d=	 	 	 	 	 dd>Z?	 	 	 	 	 	 dd?Z@dWd@ZAddAZBddBZCddCZDeddD       ZEeddE       ZEddFZEddGZFd3dH	 	 	 	 	 	 	 	 	 ddIZGddJZHddKZI	 	 	 	 	 	 	 	 	 	 ddLZJ	 	 	 	 	 	 	 	 	 	 ddMZK e)       ZLy3)ArrowDataFrameF)validate_backend_versionc               r    |rt        |j                         |r| j                          || _        || _        y N)r   column_names_validate_backend_version_native_frame_version)selfnative_dataframeversionvalidate_column_namesrI   s        F/DATA/.local/lib/python3.12/site-packages/narwhals/_arrow/dataframe.py__init__zArrowDataFrame.__init__X   s4     !)*:*G*GH#**,-    c                 |j                   j                         }| j                  |      r|}n~|dk\  st        |t              rt        j                  |      }nSt        |      r$dt        |      j                  d}t        |      dt        |      j                  d}t        |      | j                  ||      S )N   zB'pyarrow>=14.0.0' is required for `from_arrow` for object of type .z1`from_arrow` is not supported for object of type context)_implementation_backend_version
_is_native
isinstancer   patabler   type__name__ModuleNotFoundError	TypeErrorfrom_native)clsdatar\   backend_versionnativemsgs         rT   
from_arrowzArrowDataFrame.from_arrowg   s    !11BBD>>$F%D*)EXXd^F$T*VW[\`WaWjWjVmmnoC%c**Ed4jFYFYE\\]^CC. vw77rV   c              J   |s(|s&| j                  t        j                  i       |      S |s&| j                  t        j                  |      |      S t        d |j	                         D              soddlm}  |t        d|            j                         }|r|s|j                         }n!t        j                  j                  ||      }| j                  ||      S |j                  j                         dk  rd}t        |      t        j                  |j                         D 	ci c]>  \  }}	|t        j                   |r||   ng g|	t#        |	|j$                  	      nd 
      @ c}	}      }
| j                  t        j                  |
      |      S c c}	}w )Nr[   c              3  $   K   | ]  }|d u  
 y wrK    .0dtypes     rT   	<genexpr>z+ArrowDataFrame.from_dict.<locals>.<genexpr>   s     >oU5D=o   r   Schemar6   schemarX   z8Passing `None` dtype in `from_dict` requires PyArrow>=14rR   )rc   )rg   ra   rb   anyvaluesnarwhals.schemarw   r   to_arrowempty_tableTablefrom_pydictr]   r^   NotImplementedErroritemschunked_arrayr   rO   )rh   ri   r\   ry   rw   	pa_schemark   rl   namenw_dtyperess              rT   	from_dictzArrowDataFrame.from_dictv   so    d??288B<?AA??288D>7?CC>fmmo>>.tL&9:CCEI"..0--d9-E??67?;;""335=LC%c**hh '-lln '5ND( b&&#'T$ZR0+ 2(GDTDTU	  '5

 rxx}g>>s   .AF
c              F   ddl m} |r-t        d |j                         D              rd}t	        |      |  |t        d|            j                         n|}|r|s|j                         }n!t        j                  j                  ||      }| j                  ||      S )Nr   rv   c              3  $   K   | ]  }|d u  
 y wrK   rp   rq   s     rT   rt   z,ArrowDataFrame.from_dicts.<locals>.<genexpr>   s     E_E%4-_ru   zR`from_dicts` with `schema` where any dtype is `None` is not supported for PyArrow.r6   rx   r[   )r}   rw   r{   r|   r   r   r~   r   ra   r   from_pylistrg   )rh   ri   r\   ry   rw   rl   r   rk   s           rT   
from_dictszArrowDataFrame.from_dicts   s     	+cEV]]_EEfC%c** ! 4f-.779 	
 T**,FXX))$y)AFvw77rV   c                6    t        | t        j                        S rK   )r`   ra   r   )objs    rT   r_   zArrowDataFrame._is_native   s    #rxx((rV   c              ,     | ||j                   d      S )NTrR   rS   )rO   )rh   ri   r\   s      rT   rg   zArrowDataFrame.from_native   s    4!1!1NNrV   c                 ddl m} |j                  D cg c]  }t        j                  |       }}t        |t        |f      r6t        j                  j                  | ||      j                               }n0t        j                  j                  || j                  ||            }| j                  ||      S c c}w )Nr   rv   rx   r[   )r}   rw   Tra   arrayr`   r   r   from_arraysr~   _numpy_column_namesrg   )rh   ri   r\   ry   rw   valarraysrk   s           rT   
from_numpyzArrowDataFrame.from_numpy   s     	++/6626C"((3-62fw/0XX))&9P9P9R)SFXX))&#2I2I$PV2WXFvw77 3s   B>c                4    ddl m}  || j                        S )Nr   r*   rz   )narwhals._arrow.namespacer+   rO   )rP   r+   s     rT   __narwhals_namespace__z%ArrowDataFrame.__narwhals_namespace__   s    <dmm44rV   c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      )NzExpected pyarrow, got: )r]   r   PYARROWto_native_namespacerc   AssertionError)rP   rl   s     rT   __native_namespace__z#ArrowDataFrame.__native_namespace__   sN    >#9#99'';;=='T-A-A(B'CDS!!rV   c                    | S rK   rp   rP   s    rT   __narwhals_dataframe__z%ArrowDataFrame.__narwhals_dataframe__       rV   c                    | S rK   rp   r   s    rT   __narwhals_lazyframe__z%ArrowDataFrame.__narwhals_lazyframe__   r   rV   c                >    | j                  | j                  |d      S )NFr   )	__class__rk   )rP   rR   s     rT   _with_versionzArrowDataFrame._with_version   s    ~~dkk7RW~XXrV   TrS   c               >    | j                  || j                  |      S )Nr   )r   rO   )rP   dfrS   s      rT   _with_nativezArrowDataFrame._with_native   s$    ~~=R  
 	
rV   c                .    | j                   j                  S rK   )rk   shaper   s    rT   r   zArrowDataFrame.shape   s    {{   rV   c                ,    t        | j                        S rK   )lenrk   r   s    rT   __len__zArrowDataFrame.__len__   s    4;;rV   c                    t        | j                  j                  |g      j                         d   j	                               S Nr   )tuplerk   take	to_pylistr|   )rP   indexs     rT   rowzArrowDataFrame.row   s5    T[[%%ug.88:1=DDFGGrV   c                    y rK   rp   rP   nameds     rT   rowszArrowDataFrame.rows   s    EHrV   c                    y rK   rp   r   s     rT   r   zArrowDataFrame.rows   s    GJrV   c                    y rK   rp   r   s     rT   r   zArrowDataFrame.rows   s    TWrV   c               r    |st        | j                  dd            S | j                  j                         S )NFi   )r   buffer_size)list	iter_rowsrk   r   r   s     rT   r   zArrowDataFrame.rows   s0    UDEE{{$$&&rV   c              #     K   t        | j                  | j                  j                         d      D ]  \  }}t	        j
                  || |       ! y w)NTstrictr\   r   )zipcolumnsrk   itercolumnsr   rg   )rP   r   seriess      rT   iter_columnszArrowDataFrame.iter_columns  sE     dkk.E.E.GPTULD&))&$TJJ Vs   AAc             #  <  K   | j                   }|j                  }|sJt        d||      D ]9  }||||z    j                         j	                         }t        |ddiE d {    ; y t        d||      D ]   }||||z    j                         E d {    " y 7 87 	w)Nr   r   T)rk   num_rowsrange	to_pydictr|   r   r   )rP   r   r   r   r   ir   s          rT   r   zArrowDataFrame.iter_rows  s      [[;;1h4!a+o.88:AAC2T222 5 1h4a!k/2<<>>> 5 3 ?s$   ABB 0BBBBc                    t        |t              sdt        |       }t        |      t	        j
                  | j                  |   | |      S )NzExpected str, got: r   )r`   strrc   rf   r   rg   rk   )rP   r   rl   s      rT   
get_columnzArrowDataFrame.get_column  sD    $$'T
|4CC. &&t{{4'8$TRRrV   c               <    | j                   j                  ||      S )Ncopy)rk   	__array__)rP   rs   r   s      rT   r   zArrowDataFrame.__array__  s    {{$$U$66rV   c                   t        |      dk(  r+| j                  | j                  j                  dd            S | j                  dk  rt        |t              rt        |      }| j                  | j                  j                  |            S )Nr   )   )	r   r   rk   slicer^   r`   r   r   r   )rP   r   s     rT   _gatherzArrowDataFrame._gather  so    t9>$$T[[%6%6q!%<==  5(Ze-D:D  !1!1$!788rV   c                   |j                   xs d}|j                  |j                  nt        | j                        }|dk  rt        | j                        |z   }|dk  rt        | j                        |z   }|j                  |j                  dk7  rd}t        |      | j                  | j                  j                  |||z
              S )Nr      z4Slicing with step is not supported on PyArrow tables)startstopr   rk   stepr   r   r   )rP   r   r   r   rl   s        rT   _gather_slicezArrowDataFrame._gather_slice%  s    

a II1tyys4;;7G19$u,E!8t{{#d*D99 TYY!^HC%c**  !2!25$,!GHHrV   c                    t        || j                        \  }}}| j                  | j                  j	                  | j                  |||               S rK   )r   r   r   rk   select)rP   r   r   r   r   s        rT   _select_slice_namez!ArrowDataFrame._select_slice_name1  sH    :7DLLQtT  !3!3DLLtD4Q!RSSrV   c                    | j                  | j                  j                  | j                  |j                  |j
                  |j                                 S rK   )r   rk   r   r   r   r   r   )rP   r   s     rT   _select_slice_indexz"ArrowDataFrame._select_slice_index5  sC      KKt||GMMGLL7<<,WXY
 	
rV   c                   t        |t        j                        rt        d|j	                               }n't        |      r|j                         }nt        r|}n|}| j                  | j                  j                  |            S )NzSequence[int])r`   ra   ChunkedArrayr   r   r   tolistrF   r   rk   r   rP   r   selectors      rT   _select_multi_indexz"ArrowDataFrame._select_multi_index:  sj     gr/OW->->-@AH w'~~'HHH  !3!3H!=>>rV   c                    t        |t        j                        rt        d|j	                               }n|}| j                  | j                  j                  |            S )NSequence[str])r`   ra   r   r   r   r   rk   r   r   s      rT   _select_multi_namez!ArrowDataFrame._select_multi_nameK  sL     gr/OW->->-@AHH  !3!3H!=>>rV   c                    | j                   j                  D ci c]-  }|j                  t        |j                  | j
                        / c}S c c}w rK   )rk   ry   r   r   rc   rO   )rP   fields     rT   ry   zArrowDataFrame.schemaW  sL     ++
+ JJ0T]]KK+
 	
 
s   2Ac                    | j                   S rK   rx   r   s    rT   collect_schemazArrowDataFrame.collect_schema^      {{rV   c                F    | j                   j                  }t        ||      S rK   )rk   nbytesr   )rP   unitszs      rT   estimated_sizezArrowDataFrame.estimated_sizea  s    [[2t$$rV   c                .    | j                   j                  S rK   )rk   rL   r   s    rT   r   zArrowDataFrame.columnsg  s    {{'''rV   c                l    | j                  | j                  j                  t        |            d      S NFr   )r   rk   r   r   )rP   rL   s     rT   simple_selectzArrowDataFrame.simple_selectk  s3      KKtL12% ! 
 	
rV   c                    | j                   | }|s6| j                  | j                  j                  j	                  g       d      S |D cg c]  }|j
                   }}|d   j                  } || }t        j                  j	                  |D cg c]  }|j                   c}|      }| j                  |d      S c c}w c c}w )NFr   r   )namesT)	_evaluate_exprsr   rk   r   r   r   _align_full_broadcastra   r   )rP   exprs
new_seriessr  alignreshapedr   s           rT   r   zArrowDataFrame.selectp  s    )T))51
$$%%11"5U %   ",,A,133*%XX!!X">X188X">e!L  4 @@	 - #?s   CCc                   t        |       }|j                  s0t        |      x}|k7  rd| d| d}t        |      |j                  S |j                  d   }t	        j
                  t	        j                  ||      g      S )NzExpected object of length z, got: rZ   r   )r   
_broadcastr   rk   ra   r   r   )rP   otherlength	len_otherrl   values         rT   _extract_comparandz!ArrowDataFrame._extract_comparand}  sy    T Z'	F226(')AN o%<<Q5&!9 :;;rV   c                2   | j                   } | j                  | }| j                  }|D ]Y  }|j                  }| j	                  |      }||v r#|j                  |j                  |      ||      n|j                  ||      }[ | j                  |d      S )N)columnFr   )	rk   r  r   r   r  
set_columnr   append_columnr   )rP   r  native_framenew_columnsr   	col_valuecol_namer  s           rT   with_columnszArrowDataFrame.with_columns  s     {{*d**E2,,$I ~~H,,Y7F w& ''h(?RX'Y!///H  %   U KKrV   c               $    ddl m}  || ||      S )Nr   r(   )drop_null_keys)narwhals._arrow.group_byr)   )rP   keysr  r)   s       rT   group_byzArrowDataFrame.group_by  s     	:D$~FFrV   c          
        dddddd}|dk(  r| j                         }t        dg | j                  |j                  	      }| j                  | j	                  |j                  d
d       j                  |      j                               j                  j                  |j	                  |j                  d
d       j                  |      j                               j                  ||d|      j                  |g            S |dk7  }	| j                  | j                  j                  |j                  |xs g |||   ||	            S )NrA   r@   rB   rC   rD   )antisemirB   leftfullcross   n_bytesr   r   )r  
right_keys	join_typeright_suffixr"  )r  r'  r(  r)  coalesce_keys)r   r   r   r   r  litalias	broadcastrk   joindrop)
rP   r  howleft_onright_onsuffixhow_to_join_mapplx	key_tokenr*  s
             rT   r.  zArrowDataFrame.join  sK       0
 '>--/C6#BT\\#BEMM#BI $$!!#''!T"2"8"8"C"M"M"OP&&4(..y9CCEf"(%!'   yk"  v  KK]#)#.#+  	
 		
rV   c               v    t        | ||      }| j                  | j                  j                  |      d      S )Nr   Fr   )r   r   rk   r/  )rP   r   r   to_drops       rT   r/  zArrowDataFrame.drop  s6    'gfE  !1!1'!:RW XXrV   c                    |+| j                  | j                  j                         d      S | j                         }|j	                   |j
                  | j                         d       }| j                  |      S )NFr   T)ignore_nulls)r   rk   	drop_nullr   any_horizontalcolis_nullfilter)rP   subsetr5  masks       rT   
drop_nullszArrowDataFrame.drop_nulls  st    >$$T[[%:%:%<TY$ZZ))+""7377F#3#;#;#=D"QQ{{4  rV   c                  t        |t              r|rdnd}|D cg c]  }||f }}n&t        ||d      D cg c]  \  }}||rdndf }}}|rdnd}| j                  | j                  j                  ||      d	      S c c}w c c}}w )
N
descending	ascendingTr   at_endat_start)null_placementFr   )r`   boolr   r   rk   sort_by)	rP   rD  
nulls_lastbyorderkeysortingis_descendingrH  s	            rT   sortzArrowDataFrame.sort  s    j$'+5<;EHJ/KeG/K +.b*T*J*J&C mlE*J  
 &0Z  KKG"' ! 
 	
 0Ls
   BBc          	     J   t        |t              r|rdnd}|D cg c]  }||f }}n&t        ||d      D cg c]  \  }}||rdndf }}}| j                  | j                  j                  t        j                  | j                  ||            d      S c c}w c c}}w )NrE  rD  Tr   Fr   )r`   rI  r   r   rk   r   pcselect_k_unstable)rP   krL  reverserM  rN  rO  is_ascendings           rT   top_kzArrowDataFrame.top_k  s    gt$*1;|EHJ/KeG/K *-R)F)F%C \k|D)F     KKR11$++q'JK"' ! 
 	
 0Ls
   BBc                6    | j                   j                         S rK   )rk   	to_pandasr   s    rT   rZ  zArrowDataFrame.to_pandas  s    {{$$&&rV   c                B    dd l } |j                  | j                        S r   )polarsrm   rk   )rP   pls     rT   	to_polarszArrowDataFrame.to_polars  s    r}}T[[))rV   Nr   c                   dd l }|j                  | j                  j                  D cg c]  }|j	                          c}      }|S c c}w r   )numpycolumn_stackrk   r   to_numpy)rP   rs   r   npr=  arrs         rT   rb  zArrowDataFrame.to_numpy  s?    ??dkk>Q>Q#R>QsCLLN>Q#RS
 $Ss   Ac                    y rK   rp   rP   	as_seriess     rT   to_dictzArrowDataFrame.to_dict  s    NQrV   c                    y rK   rp   rf  s     rT   rh  zArrowDataFrame.to_dict  s    MPrV   c                   | j                         }|r|D ci c]  }|j                  | c}S |D ci c]  }|j                  |j                          c}S c c}w c c}w rK   )r   r   to_list)rP   rg  itsers       rT   rh  zArrowDataFrame.to_dict  s^      -/0RcCHHcMR003562C#++-'266 16s
   A"Ac                   | j                         }t        dt        |       d      }|W|j                  j	                  |j
                  j                  || |            }| j                  ||j                               S t        j                  | j                  |D cg c]  }|df c}      }| j                  dk  r%|j                  t        j                  |            }n7t        j                  ||j                  t!        j"                                     }| j%                  | j                  j'                  d||            S c c}w )Nr   r   r   rE  )   )r   r   r   _expr_from_series_seriesfrom_iterabler   allrS  sort_indicesrk   r^   r   scatterr   ra   int64r   
add_column)	rP   r   order_byr5  ri   	row_indexrL  indicesnew_cols	            rT   with_row_indexzArrowDataFrame.with_row_index  s   ))+aTA&		..))$4)HI ;;y#'')44//$++H/UHb[0AH/UV  5(ii 89Gjjw||BHHJ'?@G  !7!74!IJJ 0Vs   E
c                    | j                  |      j                  }| j                  | j                  j                  |      d      S r   )_evaluate_single_output_exprrk   r   r?  )rP   	predicatemask_natives      rT   r?  zArrowDataFrame.filter)  sD    77	BII  KK{+5 ! 
 	
rV   c           
         | j                   }|dk\  r#| j                  |j                  d|      d      S |j                  }| j                  |j                  dt	        d||z               d      S Nr   Fr   )rk   r   r   r   maxrP   nr   r   s       rT   headzArrowDataFrame.head/  sn    [[6$$RXXa^5$QQ;;  HHQAx!|,-U ! 
 	
rV   c           	         | j                   }|dk\  r;|j                  }| j                  |j                  t	        d||z
              d      S | j                  |j                  t        |            d      S r  )rk   r   r   r   r  absr  s       rT   tailzArrowDataFrame.tail8  sq    [[6{{H$$Q1-.e %     #a&!1 OOrV   )sessionc               \   || S |t         j                  u r:dd l}ddlm} | j
                  } ||j                  d      d| j                        S |t         j                  u rQdd l	}ddl
m}  |t        d |j                  | j
                              j                         d| j                        S |t         j                  u rHdd lm} ddlm}	  |	|j)                  | j
                  j+                               d| j                        S |t         j,                  u rDdd l}
dd	lm}  ||
j5                  | j
                  | j6                  
      d| j                        S |j9                         r4ddlm} |d}t?        |      |jA                  | ||| j                        S tB        )Nr   )DuckDBLazyFrame_dfTrI   rR   )PolarsLazyFramepl.DataFrame)DaskLazyFrame)IbisLazyFrame)r   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)r  implementationrR   )"r   DUCKDBduckdbnarwhals._duckdb.dataframer  rk   rb   rO   POLARSr\  narwhals._polars.dataframer  r   rm   lazyDASKdask.dataframe	dataframenarwhals._dask.dataframer  from_pandasrZ  IBISibisnarwhals._ibis.dataframer  memtabler   is_spark_likenarwhals._spark_like.dataframer  
ValueError_from_compliant_dataframer   )rP   backendr  r  r  r  r]  r  ddr  r  r  r  rl   s                 rT   r  zArrowDataFrame.lazyA  sy    ?Kn+++B++C"U#dDMM  n+++B"^]R]]4;;%?@EEG)- 
 n)))'> t{{4467)- 
 n)))> dkk4<<@)-    "IM o%%??ggt}} @   rV   c                   |t         j                  u s|%ddlm}  || j                  | j
                  d      S |t         j                  u rCddlm}  || j                  j                         t         j                  d| j
                  d      S |t         j                  u rCdd l}ddlm}  |t        d	 |j                  | j                              d| j
                  
      S d| }t!        |      )Nr   )rH   Fr   )PandasLikeDataFrameT)r  rI   rR   rS   )PolarsDataFramer  r  zUnsupported `backend` value: )r   r   narwhals._arrow.dataframerH   rk   rO   PANDASnarwhals._pandas_like.dataframer  rZ  r  r\  r  r  r   rm   r   )rP   r  kwargsrH   r  r]  r  rl   s           rT   collectzArrowDataFrame.collect~  s     n,,,@!T]]%  n+++K&%%'-44)-&+  n+++B"^]R]]4;;%?@)-  .gY7S!!rV   c                <    | j                  | j                  d      S r   r   rk   r   s    rT   clonezArrowDataFrame.clone  s      E JJrV   c                <   ddl m} |=|;| j                  x}dk7  rd|}t        |       || j                  d   d   d      S ||d}t        |      t        |t              r| j                  j                  |      n|} || j                  |   |   d      S )Nr   )maybe_extract_py_scalar)r   r   zfcan only call `.item()` without "row" or "column" values if the DataFrame has a single element; shape=T)return_py_scalarz8cannot call `.item()` with only one of `row` or `column`)	narwhals._arrow.seriesr  r   r  rk   r`   r   r   r   )rP   r   r  r  r   rl   _cols          rT   itemzArrowDataFrame.item  s    B;6>#.==BIG  !o%*4;;q>!+<tTT;&.LCS/!-7-Dt||!!&)&&t{{4'8'=PTUUrV   c                    | j                   dk\  rt        d|      }n)| j                  D cg c]  }|j                  ||       }}| j	                  | j
                  j                  |            S c c}w )N)   zdict[str, str])r^   r   r   getr   rk   rename_columns)rP   mappingr  cs       rT   renamezArrowDataFrame.rename  se      E))73E04=1W[[A&E=  !;!;E!BCC >s   A0c                H    dd l m} |j                  | j                  |       y r   )pyarrow.parquetparquetwrite_tablerk   )rP   filepps      rT   write_parquetzArrowDataFrame.write_parquet  s    $
t{{D)rV   c                     y rK   rp   rP   r  s     rT   	write_csvzArrowDataFrame.write_csv  s    ,/rV   c                     y rK   rp   r  s     rT   r  zArrowDataFrame.write_csv  s    =@rV   c                   dd l m} |\t        j                         }|j	                  | j
                  |       |j                         j                         j                         S |j	                  | j
                  |       y r   )	pyarrow.csvcsvra   BufferOutputStreamr  rk   getvalue
to_pybytesdecode)rP   r  pa_csv
csv_buffers       rT   r  zArrowDataFrame.write_csv  sd    $<..0JT[[*5&&(335<<>>d+rV   c                   dd l }t        d| j                        }t        j                  |j                  t        |                   }| j                  j                  ||      j                  | j                        j                  |df|dfg      }t        j                  t        j                  t        j                  ||| d         t        j                  ||| d                     }t        j                   ||       S )	Nr   r$  r%  minr  _min_maxr[   )r`  r   r   ra   r   r   r   rk   r  r  	aggregater   rS  and_is_inr   rg   )rP   rc  	col_tokenrz  keep_idxrk   s         rT   	is_uniquezArrowDataFrame.is_unique  s    21dllS	HHRYYs4y12	KK%%i;Xdll#YE*Y,>?@ 	
 !!GGH	{$-?$@AH	{$-?$@A
 &&vt<<rV   )maintain_orderc          
        dd l }|r| j                  |      x}r|t        |xs | j                        }|dv rhddlm} |j                  |   }t        d| j                        }	|rz|rxt        dg | j                  |	      }
 | j                  |
d       j                  |dddj                  ||dd 	      }|j                  |
dd
      j                  |
gd      S |r | j                  |dddj                  }n| j                  }|j                  |	t        j                  |j!                  t#        |                         j%                  |      j'                  |	|fg      j)                  |	 d|       }| j+                  |j-                  |      d      S  | j.                  | j1                         }| j3                         }| j5                  |j6                  j9                  |            S )Nr   >   r{   lastfirstr(   r$  r%  )ry  F)rK  rD  )r@  keepr  ry  )rD  rK  r   _r   )r`  _check_columns_existr   r   r  r)   _REMAP_UNIQUEr   r}  rQ  uniquer/  rk   r  ra   r   r   r   r  r  r  r   r   r   r  r   r?  rp  rq  )rP   r@  r  r  ry  rc  errorr)   agg_funcr  	idx_tokenr   rk   keep_idx_nativer  r5  s                   rT   r  zArrowDataFrame.unique  s    	 9 9& AAuAKf,-++=#11$7H6q$,,WIN:'A'Ay'A	D''	D'AT8%IV6UUYVZ 
 wwyUuwMRRK S   "H5QXX$$Y3t99M0NO&!Y1239+Qxj12	  $$O,E %   &4%%v.88:))+{{39911(;<<rV   c                H    | j                  | j                  |d |   d      S r   r  )rP   r  offsets      rT   gather_everyzArrowDataFrame.gather_every  s'      VYQY!7u UUrV   c                    | j                   S rK   )rk   r   s    rT   r~   zArrowDataFrame.to_arrow  r   rV   c                  dd l }t        |       }||t        ||z        }|j                  j	                  |      }|j                  |      }|j                  |||      }	| j                  | j                  j                  |	      d      S )Nr   )seed)sizereplaceFr   )
r`  r   intrandomdefault_rngr   choicer   rk   r   )
rP   r  fractionwith_replacementr  rc  r   rngidxrA  s
             rT   samplezArrowDataFrame.sample  s     	t99-Hx'(Aii###.ii!zz#A/?z@  !1!1$!7u UUrV   c                <  	 t        |       	g n
t              |fd| j                  D        n
t        |      }| j                  j                        | j                  j                  	fd|D        }| j                  t        |d            S )Nc              3  ,   K   | ]  }|vs|  y wrK   rp   )rr   r  r   s     rT   rt   z)ArrowDataFrame.unpivot.<locals>.<genexpr><  s     9,Q!5.q,s   	c              3     K   | ]6  }j                  t        |            j                   |             8 y wrK   )r  r   )rr   r   r  
index_colsr  
value_namevariable_names     rT   rt   z)ArrowDataFrame.unpivot.<locals>.<genexpr>?  sD      
  $$]F4ODRRF4L s   <?
permissive)	r   r   r   iterrk   r   r  r   r   )
rP   onr   r  r  on_tablesr  r  r  s
     ```  @@@rT   unpivotzArrowDataFrame.unpivot1  s     Ime=?Z9$,,9TRTX[[''.
##
 	
   v|!DEErV   )
rQ   pa.TablerR   r   rS   rI  rI   rI  returnNone)ri   r1   r\   r4   r  r%   )ri   zMapping[str, Any]r\   r4   ry   .IntoSchema | Mapping[str, DType | None] | Noner  r%   )ri   zSequence[Mapping[str, Any]]r\   r4   ry   r  r  r%   )r   zpa.Table | Anyr  zTypeIs[pa.Table])ri   r  r\   r4   r  r%   )ri   r=   r\   r4   ry   z!IntoSchema | Sequence[str] | Noner  r%   )r  r+   )r  r#   )r  r%   )rR   r   r  r%   )r   r  rS   rI  r  r%   )r  ztuple[int, int])r  r  )r   r  r  ztuple[Any, ...])r   Literal[True]r  zlist[dict[str, Any]])r   Literal[False]r  zlist[tuple[Any, ...]])r   rI  r  z,list[tuple[Any, ...]] | list[dict[str, Any]])r  zIterator[ArrowSeries])r   rI  r   r  r  z4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]])r   r   r  r   )rs   r	   r   bool | Noner  r=   )r   (SizedMultiIndexSelector[ChunkedArrayAny]r  r%   )r   _SliceIndex | ranger  r%   )r   r?   r  r%   )r   r  r  r%   )r   r  r  r%   )r   z'SizedMultiNameSelector[ChunkedArrayAny]r  r%   )r  zdict[str, DType])r   r:   r  zint | float)r  z	list[str])rL   r   r  r%   )r  r'   r  r%   )r  r   r  r,   )r  z#Sequence[str] | Sequence[ArrowExpr]r  rI  r  r)   )r  r%   r0  r7   r1  Sequence[str] | Noner2  r  r3  r   r  r%   )r   r   r   rI  r  r%   )r@  r  r  r%   )rL  r   rD  bool | Sequence[bool]rK  rI  r  r%   )rU  r  rL  zIterable[str]rV  r  r  r%   )r  zpd.DataFrame)r  r  rK   )rg  r  r  zdict[str, ArrowSeries])rg  r  r  zdict[str, list[Any]])rg  rI  r  z-dict[str, ArrowSeries] | dict[str, list[Any]])r   r   ry  r  r  r%   )r  r'   r  r%   )r  r  r  r%   )r  z_LazyAllowedImpl | Noner  zSparkSession | Noner  r/   )r  z_EagerAllowedImpl | Noner  r	   r  r.   )r   
int | Noner  zint | str | Noner  r	   )r  zMapping[str, str]r  r%   )r  zstr | Path | BytesIOr  r  )r  r  r  r   )r  zstr | Path | BytesIO | Noner  z
str | None)r  r   )
r@  r  r  r;   r  r  ry  r  r  r%   )r  r  r  r  r  r%   )r  r  )
r  r  r  zfloat | Noner  rI  r  r  r  r%   )
r  r  r   r  r  r   r  r   r  r%   )Mrd   
__module____qualname__r   r   r]   rU   classmethodrm   r   r   staticmethodr_   rg   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   _iter_columnsr   r   r   r   r   r   r   r   r   ry   r   r   r   exploder   r   r   r  r  r  r.  	join_asofr/  rB  rQ  rX  rZ  r^  rb  rh  r}  r?  r  r  r  r  r  r  r  r  r  r  r  r  r~   r  r
  pivotrp   rV   rT   rH   rH   S   s    %,,O */ "  	 
  $  #'  
  8 8 #?#?
 !#? ?#? 
#? #?J 8)8
 !8 ?8 
8 80 ) ) O O 88
 !8 28 
8 8"5
"Y KO 

 ! ! H H HJ JW W'
K !M??+.?	=?S79
IT

???	?"
?>
?	
? 
 
% G( (

A	<L$G7GLPG	G/
/
 	/

 &/
 '/
 /
 
/
b  !IY!
"
'*
  Q QP P7 7	67K

P ,0; (,	;(; %	;
 
;z!"/!";>!"	!"FKV&D*
 / /@ @=. '+1=$1= !	1=
 $1= '1= 
1=fVVV 	V
 V V 
V$F F $F 	F
 F 
F, ErV   rH   )r   r'   r  r,   )_
__future__r   collections.abcr   r   r   r   typingr   r	   r
   r   r   r   pyarrowra   pyarrow.computecomputerS  r  r   narwhals._arrow.utilsr   r   r   r   r   narwhals._compliantr   narwhals._utilsr   r   r   r   r   r   r   r   r   narwhals.dependenciesr   narwhals.exceptionsr   r    ior!   pathlibr"   typesr#   r$   pandaspdr\  r]  typing_extensionsr%   r&   narwhals._arrow.exprr'   r  r)   r   r+   narwhals._arrow.typingr,   r-   narwhals._compliant.typingr.   r/   narwhals._spark_like.utilsr0   narwhals._translater1   narwhals._typingr2   r3   r4   narwhals.dtypesr5   narwhals.typingr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rE   __annotations__rF   rH   rp   rV   rT   <module>r:     s    " C C E E   .  /
 
 
 4 *(  ..58 X72D8%   "		Hi 	 e tLMtrV   