
    Wheu                    6   U d dl mZ d dl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 d dl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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l2Z3d dl4Z5d dl6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZAmBZBmCZC d dlDmEZEmFZF d dlGmHZH d dlImJZJ d dlKmLZLmMZM d dlmZmNZN d dlOmPZP d dlQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[ ed   Z\de]d<   ed    Z^de]d!<    G d" d#ed$         Z_y)%    )annotations)
CollectionIteratorMappingSequence)partial)TYPE_CHECKINGAnyLiteralcastoverloadN)ArrowSeries)native_to_narwhals_dtype)EagerDataFrame)ExprKind)
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
zip_strict)is_numpy_array_1d)
ShapeError)Iterable)BytesIO)Path)
ModuleType)Self	TypeAliasTypeIs)	ArrowExprArrowGroupByArrowNamespace)ChunkedArrayAnyMask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#   JoinType)nonedefault
permissivePromoteOptionsc                     e Zd Zej                  Zdd	 	 	 	 	 	 	 	 	 dMdZedNd       Ze	 	 	 	 	 	 	 	 dOd       Z	e
dPd       ZedQd       Ze	 	 	 	 	 	 	 	 dRd       ZdSd	ZdTd
ZdUdZdUdZdVdZdddWdZedXd       ZdYdZdZdZed[d       Zed\d       Zed]d       Zd]dZd^dZeZ	 	 	 	 	 	 d_dZd`dZdadZdbdZdcdZ dddZ!dedZ"	 	 	 	 dfd Z#	 	 	 	 dgd!Z$edhd"       Z%dhd#Z&did$Z' e(       Z)edjd%       Z*dkd&Z+dld'Z,dmd(Z-dld)Z.	 	 	 	 	 	 dnd*Z/	 	 	 	 	 	 	 	 	 	 	 	 dod+Z0 e(       Z1dpd,Z2dqd-Z3drd.Z4dsd/Z5dtd0Z6dud1Z7dvd2d3dad4Z8edwd5       Z9edxd6       Z9	 	 	 	 dyd7Z9dzd8Z:d{d9Z;d|d:Z<d|d;Z=	 dvd2d<	 	 	 	 	 d}d=Z>	 	 	 	 	 	 d~d>Z?dUd?Z@dd@ZAddAZBddBZCeddC       ZDeddD       ZDddEZDddFZEd2dG	 	 	 	 	 	 	 	 	 ddHZFddIZGddJZH	 	 	 	 	 	 	 	 	 	 ddKZI	 	 	 	 	 	 	 	 	 	 ddLZJ e(       ZKy2)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_namesrK   s        S/var/www/html/jupyter_env/lib/python3.12/site-packages/narwhals/_arrow/dataframe.py__init__zArrowDataFrame.__init__T   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         rV   
from_arrowzArrowDataFrame.from_arrowc   s    !11BBD>>$F%D*)EXXd^F$T*VW[\`WaWjWjVmmnoC%c**Ed4jFYFYE\\]^CC. vw77rX   c                  ddl m} | ||      j                         n|}|r|s|j                         }n!t        j
                  j                  ||      }| j                  ||      S Nr   )Schemaschemar\   )narwhals.schemarq   to_arrowempty_tablerb   Tablefrom_pydictrh   )ri   rj   r]   rs   rq   	pa_schemarl   s          rV   	from_dictzArrowDataFrame.from_dictr   s_     	+171CF6N++-	T**,FXX))$y)AFvw77rX   c                6    t        | t        j                        S rM   )ra   rb   rw   )objs    rV   r`   zArrowDataFrame._is_native   s    #rxx((rX   c              ,     | ||j                   d      S )NTrT   rU   )rQ   )ri   rj   r]   s      rV   rh   zArrowDataFrame.from_native   s    4!1!1NNrX   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 rp   )rt   rq   Trb   arrayra   r   rw   from_arraysru   _numpy_column_namesrh   )ri   rj   r]   rs   rq   valarraysrl   s           rV   
from_numpyzArrowDataFrame.from_numpy   s     	++/662C"((3-2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(   )rT   )narwhals._arrow.namespacer)   rQ   )rR   r)   s     rV   __narwhals_namespace__z%ArrowDataFrame.__narwhals_namespace__   s    <dmm44rX   c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      )NzExpected pyarrow, got: )r^   r   PYARROWto_native_namespacerd   AssertionError)rR   rm   s     rV   __native_namespace__z#ArrowDataFrame.__native_namespace__   sN    >#9#99'';;=='T-A-A(B'CDS!!rX   c                    | S rM    rR   s    rV   __narwhals_dataframe__z%ArrowDataFrame.__narwhals_dataframe__       rX   c                    | S rM   r   r   s    rV   __narwhals_lazyframe__z%ArrowDataFrame.__narwhals_lazyframe__   r   rX   c                >    | j                  | j                  |d      S )NFr~   )	__class__rl   )rR   rT   s     rV   _with_versionzArrowDataFrame._with_version   s    ~~dkk7RW~XXrX   TrU   c               >    | j                  || j                  |      S )Nr~   )r   rQ   )rR   dfrU   s      rV   _with_nativezArrowDataFrame._with_native   s$    ~~=R  
 	
rX   c                .    | j                   j                  S rM   )rl   shaper   s    rV   r   zArrowDataFrame.shape   s    {{   rX   c                ,    t        | j                        S rM   )lenrl   r   s    rV   __len__zArrowDataFrame.__len__   s    4;;rX   c                \    t        fd| j                  j                         D              S )Nc              3  (   K   | ]	  }|     y wrM   r   ).0colindexs     rV   	<genexpr>z%ArrowDataFrame.row.<locals>.<genexpr>   s     ECSZEs   )tuplerl   itercolumns)rR   r   s    `rV   rowzArrowDataFrame.row   s!    E4;;+B+B+DEEErX   c                    y rM   r   rR   nameds     rV   rowszArrowDataFrame.rows   s    EHrX   c                    y rM   r   r   s     rV   r   zArrowDataFrame.rows   s    GJrX   c                    y rM   r   r   s     rV   r   zArrowDataFrame.rows   s    TWrX   c               r    |st        | j                  dd            S | j                  j                         S )NFi   )r   buffer_size)list	iter_rowsrl   	to_pylistr   s     rV   r   zArrowDataFrame.rows   s0    UDEE{{$$&&rX   c              #     K   t        | j                  | j                  j                               D ]  \  }}t	        j
                  || |       ! y w)Nr]   name)r   columnsrl   r   r   rh   )rR   r   seriess      rV   iter_columnszArrowDataFrame.iter_columns   sH     &t||T[[5L5L5NO 	KLD&))&$TJJ	Ks   AAc             #  6  K   | j                   }|j                  }|sGt        d||      D ]6  }||||z    j                         j	                         }t        | E d {    8 y t        d||      D ]   }||||z    j                         E d {    " y 7 87 	wNr   )rl   num_rowsrange	to_pydictvaluesr   r   )rR   r   r   r   r   ir   s          rV   r   zArrowDataFrame.iter_rows   s      [[;;1h4 -!a+o.88:AAC%t,,,- 1h4 ?a!k/2<<>>>? - ?s$   ABB0BBBBc                    t        |t              sdt        |       }t        |      t	        j
                  | j                  |   | |      S )NzExpected str, got: r   )ra   strrd   rg   r   rh   rl   )rR   r   rm   s      rV   
get_columnzArrowDataFrame.get_column   sD    $$'T
|4CC. &&t{{4'8$TRRrX   c               <    | j                   j                  ||      S )Ncopy)rl   	__array__)rR   dtyper   s      rV   r   zArrowDataFrame.__array__   s    {{$$U$66rX   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   rl   slicer_   ra   r   r   take)rR   r   s     rV   _gatherzArrowDataFrame._gather   so    t9>$$T[[%6%6q!%<==  5(Ze-D:D  !1!1$!788rX   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   rl   stepNotImplementedErrorr   r   )rR   r   r   r   rm   s        rV   _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HrX   c                    t        || j                        \  }}}| j                  | j                  j	                  | j                  |||               S rM   )r   r   r   rl   select)rR   r   r   r   r   s        rV   _select_slice_namez!ArrowDataFrame._select_slice_name   sH    :7DLLQtT  !3!3DLLtD4Q!RSSrX   c                    | j                  | j                  j                  | j                  |j                  |j
                  |j                                 S rM   )r   rl   r   r   r   r   r   )rR   r   s     rV   _select_slice_indexz"ArrowDataFrame._select_slice_index  sC      KKt||GMMGLL7<<,WXY
 	
rX   c                    t        |t        j                        rt        d|j	                               }nt        |      r|j                         }n|}| j                  | j                  j                  |            S )NzSequence[int])
ra   rb   ChunkedArrayr   r   r   tolistr   rl   r   rR   r   selectors      rV   _select_multi_indexz"ArrowDataFrame._select_multi_index	  sb     gr/OW->->-@AH w'~~'HH  !3!3H!=>>rX   c                    t        |t        j                        rt        d|j	                               }n|}| j                  | j                  j                  |            S )NSequence[str])ra   rb   r   r   r   r   rl   r   r   s      rV   _select_multi_namez!ArrowDataFrame._select_multi_name  sL     gr/OW->->-@AHH  !3!3H!=>>rX   c                    | j                   j                  D ci c]-  }|j                  t        |j                  | j
                        / c}S c c}w rM   )rl   rs   r   r   rd   rQ   )rR   fields     rV   rs   zArrowDataFrame.schema$  sG     ++
 JJ0T]]KK
 	
 
s   2Ac                    | j                   S rM   rr   r   s    rV   collect_schemazArrowDataFrame.collect_schema+      {{rX   c                F    | j                   j                  }t        ||      S rM   )rl   nbytesr   )rR   unitszs      rV   estimated_sizezArrowDataFrame.estimated_size.  s    [[2t$$rX   c                .    | j                   j                  S rM   )rl   rN   r   s    rV   r   zArrowDataFrame.columns4  s    {{'''rX   c                l    | j                  | j                  j                  t        |            d      S NFr   )r   rl   r   r   )rR   rN   s     rV   simple_selectzArrowDataFrame.simple_select8  s3      KKtL12% ! 
 	
rX   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_into_exprsr   rl   r   r   r   _align_full_broadcastrb   rw   )rR   exprs
new_seriessr   alignreshapedr   s           rV   r   zArrowDataFrame.select=  s    .T..6
$$%%11"5U %   ",,A,,133*%XX!!X">188">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: r[   r   )r   
_broadcastr   rl   rb   chunked_arrayrepeat)rR   otherlength	len_otherrm   values         rV   _extract_comparandz!ArrowDataFrame._extract_comparandJ  sy    T Z'	F226(')AN o%<<Q5&!9 :;;rX   c                2   | j                   } | j                  | }| j                  }|D ]Y  }|j                  }| j	                  |      }||v r#|j                  |j                  |      ||      n|j                  ||      }[ | j                  |d      S )N)columnFr   )	rl   r   r   r   r  
set_columnr   append_columnr   )rR   r   native_framenew_columnsr   	col_valuecol_namer  s           rV   with_columnszArrowDataFrame.with_columnsU  s     {{/d//7,,$ 	I ~~H,,Y7F w& ''h(?RX'Y!///H 	   U KKrX   c               $    ddl m}  || ||      S )Nr   r&   )drop_null_keys)narwhals._arrow.group_byr'   )rR   keysr  r'   s       rV   group_byzArrowDataFrame.group_byg  s     	:D$~FFrX   c          
        dddddd}|dk(  r| j                         }t        dg | j                  |j                  	      }| j                  | j	                  |j                  d
d       j                  |      j                  t        j                              j                  j                  |j	                  |j                  d
d       j                  |      j                  t        j                              j                  ||d|      j                  |g            S |dk7  }	| j                  | j                  j                  |j                  |xs g |||   ||	            S )Nr@   r?   rA   rB   rC   )antisemirA   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	broadcastr   LITERALrl   joindrop)
rR   r  howleft_onright_onsuffixhow_to_join_mapplx	key_tokenr   s
             rV   r%  zArrowDataFrame.joinn  s`       0
 '>--/C6#BT\\#BEMM#BI $$!!GGAt$**95??@P@PQ &&4(..y9CCHDTDTUf"(%!'   yk"   v  KK]#)#.#+  	
 		
rX   c               v    t        | ||      }| j                  | j                  j                  |      d      S )NstrictFr   )r   r   rl   r&  )rR   r   r0  to_drops       rV   r&  zArrowDataFrame.drop  s6    'gfE  !1!1'!:RW XXrX   c                    |+| j                  | j                  j                         d      S | j                         }|j	                   |j
                  | j                         d       }| j                  |      S )NFr   T)ignore_nulls)r   rl   	drop_nullr   any_horizontalr   is_nullfilter)rR   subsetr,  masks       rV   
drop_nullszArrowDataFrame.drop_nulls  st    >$$T[[%:%:%<TY$ZZ))+""7377F#3#;#;#=D"QQ{{4  rX   c                  t        |t              r|rdnd}|D cg c]  }||f }}n$t        ||      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	ascendingat_endat_start)null_placementFr   )ra   boolr   r   rl   sort_by)	rR   r<  
nulls_lastbyorderkeysortingis_descendingr@  s	            rV   sortzArrowDataFrame.sort  s    j$'+5<;EHJ/Ke/KG/K +5R*D&C mlEG 
 &0Z  KKG"' ! 
 	
 0Ls
   BBc          	     F   t        |t              r|rdnd}|D cg c]  }||f }}n$t        ||      D cg c]  \  }}||rdndf }}}| j                  | j                  j                  t        j                  | j                  ||            d      S c c}w c c}}w )Nr=  r<  Fr   )ra   rA  r   r   rl   r   pcselect_k_unstable)rR   krD  reverserE  rF  rG  is_ascendings           rV   top_kzArrowDataFrame.top_k  s    gt$*1;|EHJ/Ke/KG/K *4B)@%C \k|DG    KKR11$++q'JK"' ! 
 	
 0Ls
   BBc                6    | j                   j                         S rM   )rl   	to_pandasr   s    rV   rR  zArrowDataFrame.to_pandas  s    {{$$&&rX   c                B    dd l } |j                  | j                        S r   )polarsrn   rl   )rR   pls     rV   	to_polarszArrowDataFrame.to_polars  s    r}}T[[))rX   Nr   c                   dd l }|j                  | j                  j                  D cg c]  }|j	                          c}      }|S c c}w r   )numpycolumn_stackrl   r   to_numpy)rR   r   r   npr   arrs         rV   rZ  zArrowDataFrame.to_numpy  s9    ??dkk>Q>Q#RsCLLN#RS
 $Ss   Ac                    y rM   r   rR   	as_seriess     rV   to_dictzArrowDataFrame.to_dict  s    NQrX   c                    y rM   r   r^  s     rV   r`  zArrowDataFrame.to_dict  s    MPrX   c                   | j                         }|r|D ci c]  }|j                  | c}S |D ci c]  }|j                  |j                          c}S c c}w c c}w rM   )r   r   to_list)rR   r_  itsers       rV   r`  zArrowDataFrame.to_dict  sV      -/0cCHHcM00356C#++-'66 16s
   A"Ac                   | j                         }|udd l}t        j                  |j	                  t        |       |j                              }|j                  j                  |j                  j                  || |            }nJ|j                  |d         j                  dd      }|j                  g |      dz
  j                  |      }| j                  ||j!                               S )	Nr   )r   r   ordinalF)r<  )partition_byorder_byr   )r   rX  rb   r   aranger   int64_expr_from_series_seriesfrom_iterabler   rankoverr"  r   all)rR   r   ri  r,  r[  rj   	row_indexrp  s           rV   with_row_indexzArrowDataFrame.with_row_index  s    ))+88BIIc$irxxI@AD		..))$4)HI 778A;',,Y5,IDXFJQQRVWI{{9cggi00rX   c                    t        |t              r|}n| j                  |      d   j                  }| j	                  | j                  j                  |      d      S Nr   Fr   )ra   r   r   rl   r   r7  )rR   	predicatemask_natives      rV   r7  zArrowDataFrame.filter  sZ    i&2;K 33I>qAHHK  KK{+5 ! 
 	
rX   c           
         | j                   }|dk\  r#| j                  |j                  d|      d      S |j                  }| j                  |j                  dt	        d||z               d      S rv  )rl   r   r   r   maxrR   nr   r   s       rV   headzArrowDataFrame.head  sn    [[6$$RXXa^5$QQ;;  HHQAx!|,-U ! 
 	
rX   c           	         | j                   }|dk\  r;|j                  }| j                  |j                  t	        d||z
              d      S | j                  |j                  t        |            d      S rv  )rl   r   r   r   rz  absr{  s       rV   tailzArrowDataFrame.tail
  sq    [[6{{H$$Q1-.e %     #a&!1 OOrX   )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rK   rT   )PolarsLazyFramepl.DataFrame)DaskLazyFrame)IbisLazyFrame)r   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)r  implementationrT   )"r   DUCKDBduckdbnarwhals._duckdb.dataframer  rl   rc   rQ   POLARSrT  narwhals._polars.dataframer  r   rn   lazyDASKdask.dataframe	dataframenarwhals._dask.dataframer  from_pandasrR  IBISibisnarwhals._ibis.dataframer  memtabler   is_spark_likenarwhals._spark_like.dataframer  
ValueError_from_compliant_dataframer   )rR   backendr  r  r  r  rU  r  ddr  r  r  r  rm   s                 rV   r  zArrowDataFrame.lazy  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}} @   rX   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   )rJ   Fr~   )PandasLikeDataFrameT)r  rK   rT   rU   )PolarsDataFramer  r  zUnsupported `backend` value: )r   r   narwhals._arrow.dataframerJ   rl   rQ   PANDASnarwhals._pandas_like.dataframer  rR  r  rT  r  r  r   rn   r   )rR   r  kwargsrJ   r  rU  r  rm   s           rV   collectzArrowDataFrame.collectP  s     n,,,@!T]]%  n+++K&%%'-44)-&+  n+++B"^]R]]4;;%?@)-  .gY7S!!rX   c                <    | j                  | j                  d      S r   r   rl   r   s    rV   clonezArrowDataFrame.clones  s      E JJrX   c                L   ddl m} |E|C| j                  dk7  rd| j                  }t        |       || j                  d   d   d      S ||d}t        |      t        |t              r| j                  j                  |      n|} || j                  |   |   d      S )Nr   )maybe_extract_py_scalar)r   r   zycan only call `.item()` if the dataframe is of shape (1, 1), or if explicit row/col values are provided; frame has shape T)return_py_scalarz8cannot call `.item()` with only one of `row` or `column`)	narwhals._arrow.seriesr  r   r  rl   ra   r   r   r   )rR   r   r  r  rm   _cols         rV   itemzArrowDataFrame.itemv  s    B;6>zzV#((,

~7 
 !o%*4;;q>!+<tTT;&.LCS/!-7-Dt||!!&)&&t{{4'8'=PTUUrX   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   rl   rename_columns)rR   mappingr   cs       rV   renamezArrowDataFrame.rename  sd      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_tablerl   )rR   filepps      rV   write_parquetzArrowDataFrame.write_parquet  s    $
t{{D)rX   c                     y rM   r   rR   r  s     rV   	write_csvzArrowDataFrame.write_csv  s    ,/rX   c                     y rM   r   r  s     rV   r  zArrowDataFrame.write_csv  s    =@rX   c                   dd l m} |\t        j                         }|j	                  | j
                  |       |j                         j                         j                         S |j	                  | j
                  |       y r   )	pyarrow.csvcsvrb   BufferOutputStreamr  rl   getvalue
to_pybytesdecode)rR   r  pa_csv
csv_buffers       rV   r  zArrowDataFrame.write_csv  sd    $<..0JT[[*5&&(335<<>>d+rX   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  minrz  _min_maxr\   )rX  r   r   rb   r   rj  r   rl   r	  r  	aggregater   rK  and_is_inr   rh   )rR   r[  	col_tokenrs  keep_idxrl   s         rV   	is_uniquezArrowDataFrame.is_unique  s    21dllS	HHRYYs4y12	KK%%i;Xdll#YE*Y,>?@ 	
 !!GGH	{$-?$@AH	{$-?$@A
 &&vt<<rX   )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   >   anylastfirstr&   r  r  )ri  F)rC  r<  )r8  keepr  ri  )r<  rC  r/  _r   )rX  _check_columns_existr   r   r  r'   _REMAP_UNIQUEr   rt  rI  uniquer&  rl   r	  rb   r   rj  r   r  r  r  r   r   r   r  r   r7  rl  rm  )rR   r8  r  r  ri  r[  errorr'   agg_funcr  	idx_tokenr   rl   keep_idx_nativer  r,  s                   rV   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(;<<rX   c                H    | j                  | j                  |d |   d      S r   r  )rR   r|  offsets      rV   gather_everyzArrowDataFrame.gather_every  s'      VYQY!7u UUrX   c                    | j                   S rM   )rl   r   s    rV   ru   zArrowDataFrame.to_arrow  r   rX   c                  dd l }t        |       }||t        ||z        }|j                  j	                  |      }|j                  |      }|j                  |||      }	| j                  | j                  j                  |	      d      S )Nr   )seed)sizereplaceFr   )
rX  r   intrandomdefault_rngrj  choicer   rl   r   )
rR   r|  fractionwith_replacementr  r[  r   rngidxr9  s
             rV   samplezArrowDataFrame.sample  s     	t99-Hx'(Aii###.ii!zz#A/?z@  !1!1$!7u UUrX   c                D    t               }|g n|}| j                  D cg c]	  }||vs| c}n|} j                  dk\  rt        t        j
                  d      nt        j
                  }	g |||}
 j                   |	|D cg c]  }t        j                  j                  g  fd|D        t        dt	        j                  |g|z  t	        j                                      j                  j                  |      |
       c}            S c c}w c c}w )N)rZ   r   r   rG   )promote_optionsc              3  T   K   | ]  }j                   j                  |       ! y wrM   )rl   r  )r   idx_colrR   s     rV   r   z)ArrowDataFrame.unpivot.<locals>.<genexpr>  s      Pgdkk009Ps   %(r*   r   )r   r   r_   r   rb   concat_tablesr   rw   r   r   r   stringrl   r  )rR   onr   variable_name
value_namen_rowsindex_r  on_concatr   on_cols   `           rV   unpivotzArrowDataFrame.unpivot  s-    T}%>@j$,,:Q!6/q:b $$
2 B$$lC!! 	
 5&4-44   #&  HH((PP  1 "&F):BIIK H !KK..v6 $ ) 

 	
 ;s   	DD	BD)
rS   pa.TablerT   r   rU   rA  rK   rA  returnNone)rj   r0   r]   r3   r  r"   )rj   zMapping[str, Any]r]   r3   rs   zIntoSchema | Noner  r"   )r|   zpa.Table | Anyr  zTypeIs[pa.Table])rj   r  r]   r3   r  r"   )rj   r<   r]   r3   rs   z!IntoSchema | Sequence[str] | Noner  r"   )r  r)   )r  r!   )r  r"   )rT   r   r  r"   )r   r  rU   rA  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   rA  r  z,list[tuple[Any, ...]] | list[dict[str, Any]])r  zIterator[ArrowSeries])r   rA  r   r  r  z4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]])r   r   r  r   )r   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   r9   r  zint | float)r  z	list[str])rN   r   r  r"   )r   r%   r  r"   )r  r   r  r*   )r  z#Sequence[str] | Sequence[ArrowExpr]r  rA  r  r'   )r  r"   r'  r6   r(  Sequence[str] | Noner)  r  r*  r   r  r"   )r   r   r0  rA  r  r"   )r8  r  r  r"   )rD  r   r<  bool | Sequence[bool]rC  rA  r  r"   )rM  r  rD  zIterable[str]rN  r  r  r"   )r  zpd.DataFrame)r  r  rM   )r_  r  r  zdict[str, ArrowSeries])r_  r	  r  zdict[str, list[Any]])r_  rA  r  z-dict[str, ArrowSeries] | dict[str, list[Any]])r   r   ri  r  r  r"   )rw  zArrowExpr | list[bool | None]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   )
r8  r  r  r:   r  r
  ri  r  r  r"   )r|  r  r  r  r  r"   )r  r  )
r|  r  r  zfloat | Noner  rA  r  r  r  r"   )
r  r  r   r  r  r   r  r   r  r"   )Lre   
__module____qualname__r   r   r^   rW   classmethodrn   rz   staticmethodr`   rh   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   _iter_columnsr   r   r   r   r   r   r   r   r   rs   r   r   r   exploder   r   r   r  r  r  r%  	join_asofr&  r:  rI  rP  rR  rV  rZ  r`  rt  r7  r}  r  r  r  r  r  r  r  r  r  r  r  ru   r  r  pivotr   rX   rV   rJ   rJ   O   sc    %,,O */ "  	 
  $  #'  
  8 8 88
 !8 "8 
8 8" ) ) O O 88
 !8 28 
8 8"5
"Y KO 

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

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

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

 &1
 '1
 1
 
1
f  !IY!
"
'*
  Q QP P7 7	671

P ,0; (,	;(; %	;
 
;z!"/!";>!"	!"FKV(D*
 / /@ @=. '+1=$1= !	1=
 $1= '1= 
1=fVVV 	V
 V V 
V$!
 !
 $!
 	!

 !
 
!
J ErX   rJ   )r   r%   r  r*   )`
__future__r   collections.abcr   r   r   r   	functoolsr   typingr	   r
   r   r   r   pyarrowrb   pyarrow.computecomputerK  r  r   narwhals._arrow.utilsr   narwhals._compliantr   narwhals._expression_parsingr   narwhals._utilsr   r   r   r   r   r   r   r   r   r   narwhals.dependenciesr   narwhals.exceptionsr   r   ior   pathlibr    typesr!   pandaspdrT  rU  typing_extensionsr"   r#   r$   narwhals._arrow.exprr%   r  r'   r   r)   narwhals._arrow.typingr*   r+   r,   narwhals._compliant.typingr-   r.   narwhals._spark_like.utilsr/   narwhals._translater0   narwhals._typingr1   r2   r3   narwhals.dtypesr4   narwhals.typingr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   rD   __annotations__rH   rJ   r   rX   rV   <module>r5     s    " C C  > >   . : . 1   4 *( 99.58 
 X72D8%   "		Hi 	 !((G HNIHZLMZrX   