
    /_i[y                       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 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%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@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<    G d ded          Z]y)!    )annotations)
CollectionIteratorMappingSequence)TYPE_CHECKINGAny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
zip_strict)is_numpy_array_1d)
ShapeError)Iterable)BytesIO)Path)
ModuleType)Self	TypeAlias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%   JoinTypec                     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_namesrH   s        X/var/www/html/land_sniper/venv/lib/python3.12/site-packages/narwhals/_arrow/dataframe.py__init__zArrowDataFrame.__init__V   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         rS   
from_arrowzArrowDataFrame.from_arrowe   s    !11BBD>>$F%D*)EXXd^F$T*VW[\`WaWjWjVmmnoC%c**Ed4jFYFYE\\]^CC. vw77rU   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 )NrZ   c              3  $   K   | ]  }|d u  
 y wrJ    .0dtypes     rS   	<genexpr>z+ArrowDataFrame.from_dict.<locals>.<genexpr>   s     >U5D=>   r   Schemar6   schemarW   z8Passing `None` dtype in `from_dict` requires PyArrow>=14rQ   )rb   )rf   r`   ra   anyvaluesnarwhals.schemarv   r   to_arrowempty_tableTablefrom_pydictr\   r]   NotImplementedErroritemschunked_arrayr   rN   )rg   rh   r[   rx   rv   	pa_schemarj   rk   namenw_dtyperess              rS   	from_dictzArrowDataFrame.from_dictt   sh    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 #D( b&&#'T$ZR0+ 2(GDTDTU	 

 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   ru   c              3  $   K   | ]  }|d u  
 y wrJ   ro   rp   s     rS   rs   z,ArrowDataFrame.from_dicts.<locals>.<genexpr>   s     EE%4-Ert   zR`from_dicts` with `schema` where any dtype is `None` is not supported for PyArrow.r6   rw   rZ   )r|   rv   rz   r{   r   r   r}   r~   r`   r   from_pylistrf   )rg   rh   r[   rx   rv   rk   r   rj   s           rS   
from_dictszArrowDataFrame.from_dicts   s     	+cEV]]_EEfC%c** ! 4f-.779 	
 T**,FXX))$y)AFvw77rU   c                6    t        | t        j                        S rJ   )r_   r`   r   )objs    rS   r^   zArrowDataFrame._is_native   s    #rxx((rU   c              ,     | ||j                   d      S )NTrQ   rR   )rN   )rg   rh   r[   s      rS   rf   zArrowDataFrame.from_native   s    4!1!1NNrU   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   ru   rw   rZ   )r|   rv   Tr`   arrayr_   r   r   from_arraysr}   _numpy_column_namesrf   )rg   rh   r[   rx   rv   valarraysrj   s           rS   
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*   ry   )narwhals._arrow.namespacer+   rN   )rO   r+   s     rS   __narwhals_namespace__z%ArrowDataFrame.__narwhals_namespace__   s    <dmm44rU   c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      )NzExpected pyarrow, got: )r\   r   PYARROWto_native_namespacerb   AssertionError)rO   rk   s     rS   __native_namespace__z#ArrowDataFrame.__native_namespace__   sN    >#9#99'';;=='T-A-A(B'CDS!!rU   c                    | S rJ   ro   rO   s    rS   __narwhals_dataframe__z%ArrowDataFrame.__narwhals_dataframe__       rU   c                    | S rJ   ro   r   s    rS   __narwhals_lazyframe__z%ArrowDataFrame.__narwhals_lazyframe__   r   rU   c                >    | j                  | j                  |d      S )NFr   )	__class__rj   )rO   rQ   s     rS   _with_versionzArrowDataFrame._with_version   s    ~~dkk7RW~XXrU   TrR   c               >    | j                  || j                  |      S )Nr   )r   rN   )rO   dfrR   s      rS   _with_nativezArrowDataFrame._with_native   s$    ~~=R  
 	
rU   c                .    | j                   j                  S rJ   )rj   shaper   s    rS   r   zArrowDataFrame.shape   s    {{   rU   c                ,    t        | j                        S rJ   )lenrj   r   s    rS   __len__zArrowDataFrame.__len__   s    4;;rU   c                    t        | j                  j                  |g      j                         d   j	                               S Nr   )tuplerj   take	to_pylistr{   )rO   indexs     rS   rowzArrowDataFrame.row   s5    T[[%%ug.88:1=DDFGGrU   c                    y rJ   ro   rO   nameds     rS   rowszArrowDataFrame.rows   s    EHrU   c                    y rJ   ro   r   s     rS   r   zArrowDataFrame.rows   s    GJrU   c                    y rJ   ro   r   s     rS   r   zArrowDataFrame.rows   s    TWrU   c               r    |st        | j                  dd            S | j                  j                         S )NFi   )r   buffer_size)list	iter_rowsrj   r   r   s     rS   r   zArrowDataFrame.rows   s0    UDEE{{$$&&rU   c              #     K   t        | j                  | j                  j                               D ]  \  }}t	        j
                  || |       ! y w)Nr[   r   )r   columnsrj   itercolumnsr   rf   )rO   r   seriess      rS   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r   )rj   num_rowsrange	to_pydictr{   r   r   )rO   r   r   r   r   ir   s          rS   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   )r_   strrb   re   r   rf   rj   )rO   r   rk   s      rS   
get_columnzArrowDataFrame.get_column  sD    $$'T
|4CC. &&t{{4'8$TRRrU   c               <    | j                   j                  ||      S )Ncopy)rj   	__array__)rO   rr   r   s      rS   r   zArrowDataFrame.__array__  s    {{$$U$66rU   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   rj   slicer]   r_   r   r   r   )rO   r   s     rS   _gatherzArrowDataFrame._gather  so    t9>$$T[[%6%6q!%<==  5(Ze-D:D  !1!1$!788rU   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   rj   stepr   r   r   )rO   r   r   r   rk   s        rS   _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HrU   c                    t        || j                        \  }}}| j                  | j                  j	                  | j                  |||               S rJ   )r   r   r   rj   select)rO   r   r   r   r   s        rS   _select_slice_namez!ArrowDataFrame._select_slice_name/  sH    :7DLLQtT  !3!3DLLtD4Q!RSSrU   c                    | j                  | j                  j                  | j                  |j                  |j
                  |j                                 S rJ   )r   rj   r   r   r   r   r   )rO   r   s     rS   _select_slice_indexz"ArrowDataFrame._select_slice_index3  sC      KKt||GMMGLL7<<,WXY
 	
rU   c                    t        |t        j                        rt        d|j	                               }nt        |      r|j                         }n|}| j                  | j                  j                  |            S )NzSequence[int])
r_   r`   ChunkedArrayr   r   r   tolistr   rj   r   rO   r   selectors      rS   _select_multi_indexz"ArrowDataFrame._select_multi_index8  sb     gr/OW->->-@AH w'~~'HH  !3!3H!=>>rU   c                    t        |t        j                        rt        d|j	                               }n|}| j                  | j                  j                  |            S )NSequence[str])r_   r`   r   r   r   r   rj   r   r   s      rS   _select_multi_namez!ArrowDataFrame._select_multi_nameG  sL     gr/OW->->-@AHH  !3!3H!=>>rU   c                    | j                   j                  D ci c]-  }|j                  t        |j                  | j
                        / c}S c c}w rJ   )rj   rx   r   r   rb   rN   )rO   fields     rS   rx   zArrowDataFrame.schemaS  sG     ++
 JJ0T]]KK
 	
 
s   2Ac                    | j                   S rJ   rw   r   s    rS   collect_schemazArrowDataFrame.collect_schemaZ      {{rU   c                F    | j                   j                  }t        ||      S rJ   )rj   nbytesr   )rO   unitszs      rS   estimated_sizezArrowDataFrame.estimated_size]  s    [[2t$$rU   c                .    | j                   j                  S rJ   )rj   rK   r   s    rS   r   zArrowDataFrame.columnsc  s    {{'''rU   c                l    | j                  | j                  j                  t        |            d      S NFr   )r   rj   r   r   )rO   rK   s     rS   simple_selectzArrowDataFrame.simple_selectg  s3      KKtL12% ! 
 	
rU   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   rj   r   r   r   _align_full_broadcastr`   r   )rO   exprs
new_seriessr   alignreshapedr   s           rS   r   zArrowDataFrame.selectl  s    )T))51
$$%%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: rY   r   )r   
_broadcastr   rj   r`   r   r   )rO   otherlength	len_otherrk   values         rS   _extract_comparandz!ArrowDataFrame._extract_comparandy  sy    T Z'	F226(')AN o%<<Q5&!9 :;;rU   c                2   | j                   } | j                  | }| j                  }|D ]Y  }|j                  }| j	                  |      }||v r#|j                  |j                  |      ||      n|j                  ||      }[ | j                  |d      S )N)columnFr   )	rj   r   r   r   r  
set_columnr   append_columnr   )rO   r   native_framenew_columnsr   	col_valuecol_namer  s           rS   with_columnszArrowDataFrame.with_columns  s     {{*d**E2,,$ 	I ~~H,,Y7F w& ''h(?RX'Y!///H 	   U KKrU   c               $    ddl m}  || ||      S )Nr   r(   )drop_null_keys)narwhals._arrow.group_byr)   )rO   keysr  r)   s       rS   group_byzArrowDataFrame.group_by  s     	:D$~FFrU   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	broadcastrj   joindrop)
rO   r  howleft_onright_onsuffixhow_to_join_mapplx	key_tokenr&  s
             rS   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]#)#.#+  	
 		
rU   c               v    t        | ||      }| j                  | j                  j                  |      d      S )NstrictFr   )r   r   rj   r+  )rO   r   r5  to_drops       rS   r+  zArrowDataFrame.drop  s6    'gfE  !1!1'!:RW XXrU   c                    |+| j                  | j                  j                         d      S | j                         }|j	                   |j
                  | j                         d       }| j                  |      S )NFr   T)ignore_nulls)r   rj   	drop_nullr   any_horizontalcolis_nullfilter)rO   subsetr1  masks       rS   
drop_nullszArrowDataFrame.drop_nulls  st    >$$T[[%:%:%<TY$ZZ))+""7377F#3#;#;#=D"QQ{{4  rU   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   )r_   boolr   r   rj   sort_by)	rO   rB  
nulls_lastbyorderkeysortingis_descendingrF  s	            rS   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 )NrC  rB  Fr   )r_   rG  r   r   rj   r   pcselect_k_unstable)rO   krJ  reverserK  rL  rM  is_ascendings           rS   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 rJ   )rj   	to_pandasr   s    rS   rX  zArrowDataFrame.to_pandas  s    {{$$&&rU   c                B    dd l } |j                  | j                        S r   )polarsrl   rj   )rO   pls     rS   	to_polarszArrowDataFrame.to_polars  s    r}}T[[))rU   Nr   c                   dd l }|j                  | j                  j                  D cg c]  }|j	                          c}      }|S c c}w r   )numpycolumn_stackrj   r   to_numpy)rO   rr   r   npr;  arrs         rS   r`  zArrowDataFrame.to_numpy  s9    ??dkk>Q>Q#RsCLLN#RS
 $Ss   Ac                    y rJ   ro   rO   	as_seriess     rS   to_dictzArrowDataFrame.to_dict  s    NQrU   c                    y rJ   ro   rd  s     rS   rf  zArrowDataFrame.to_dict  s    MPrU   c                   | j                         }|r|D ci c]  }|j                  | c}S |D ci c]  }|j                  |j                          c}S c c}w c c}w rJ   )r   r   to_list)rO   re  itsers       rS   rf  zArrowDataFrame.to_dict  sV      -/0cCHHcM00356C#++-'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   rC  )   )r   r   r   _expr_from_series_seriesfrom_iterabler   allrQ  sort_indicesrj   r]   r   scatterr   r`   int64r   
add_column)	rO   r   order_byr1  rh   	row_indexrJ  indicesnew_cols	            rS   with_row_indexzArrowDataFrame.with_row_index  s    ))+aTA&		..))$4)HI ;;y#'')44//$++H/Ub[0A/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_exprrj   r   r=  )rO   	predicatemask_natives      rS   r=  zArrowDataFrame.filter%  sD    77	BII  KK{+5 ! 
 	
rU   c           
         | j                   }|dk\  r#| j                  |j                  d|      d      S |j                  }| j                  |j                  dt	        d||z               d      S Nr   Fr   )rj   r   r   r   maxrO   nr   r   s       rS   headzArrowDataFrame.head+  sn    [[6$$RXXa^5$QQ;;  HHQAx!|,-U ! 
 	
rU   c           	         | j                   }|dk\  r;|j                  }| j                  |j                  t	        d||z
              d      S | j                  |j                  t        |            d      S r  )rj   r   r   r   r  absr  s       rS   tailzArrowDataFrame.tail4  sq    [[6{{H$$Q1-.e %     #a&!1 OOrU   )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rH   rQ   )PolarsLazyFramepl.DataFrame)DaskLazyFrame)IbisLazyFrame)r   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)r  implementationrQ   )"r   DUCKDBduckdbnarwhals._duckdb.dataframer  rj   ra   rN   POLARSrZ  narwhals._polars.dataframer  r   rl   lazyDASKdask.dataframe	dataframenarwhals._dask.dataframer  from_pandasrX  IBISibisnarwhals._ibis.dataframer  memtabler   is_spark_likenarwhals._spark_like.dataframer  
ValueError_from_compliant_dataframer   )rO   backendr  r  r  r  r[  r  ddr  r  r  r  rk   s                 rS   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}} @   rU   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   )rG   Fr   )PandasLikeDataFrameT)r  rH   rQ   rR   )PolarsDataFramer  r  zUnsupported `backend` value: )r   r   narwhals._arrow.dataframerG   rj   rN   PANDASnarwhals._pandas_like.dataframer  rX  r  rZ  r  r  r   rl   r   )rO   r  kwargsrG   r  r[  r  rk   s           rS   collectzArrowDataFrame.collectz  s     n,,,@!T]]%  n+++K&%%'-44)-&+  n+++B"^]R]]4;;%?@)-  .gY7S!!rU   c                <    | j                  | j                  d      S r   r   rj   r   s    rS   clonezArrowDataFrame.clone  s      E JJrU   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  rj   r_   r   r   r   )rO   r   r  r  r   rk   _cols          rS   itemzArrowDataFrame.item  s    B;6>#.==BIG  !o%*4;;q>!+<tTT;&.LCS/!-7-Dt||!!&)&&t{{4'8'=PTUUrU   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   rj   rename_columns)rO   mappingr   cs       rS   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_tablerj   )rO   filepps      rS   write_parquetzArrowDataFrame.write_parquet  s    $
t{{D)rU   c                     y rJ   ro   rO   r  s     rS   	write_csvzArrowDataFrame.write_csv  s    ,/rU   c                     y rJ   ro   r  s     rS   r  zArrowDataFrame.write_csv  s    =@rU   c                   dd l m} |\t        j                         }|j	                  | j
                  |       |j                         j                         j                         S |j	                  | j
                  |       y r   )	pyarrow.csvcsvr`   BufferOutputStreamr  rj   getvalue
to_pybytesdecode)rO   r  pa_csv
csv_buffers       rS   r  zArrowDataFrame.write_csv  sd    $<..0JT[[*5&&(335<<>>d+rU   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_maxrZ   )r^  r   r   r`   r   r   r   rj   r  r  	aggregater   rQ  and_is_inr   rf   )rO   ra  	col_tokenrx  keep_idxrj   s         rS   	is_uniquezArrowDataFrame.is_unique  s    21dllS	HHRYYs4y12	KK%%i;Xdll#YE*Y,>?@ 	
 !!GGH	{$-?$@AH	{$-?$@A
 &&vt<<rU   )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   >   rz   lastfirstr(   r   r!  )rw  F)rI  rB  )r>  keepr  rw  )rB  rI  r4  _r   )r^  _check_columns_existr   r   r  r)   _REMAP_UNIQUEr   r{  rO  uniquer+  rj   r  r`   r   r   r   r  r  r  r   r   r   r  r   r=  rn  ro  )rO   r>  r  r  rw  ra  errorr)   agg_funcr  	idx_tokenr   rj   keep_idx_nativer  r1  s                   rS   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(;<<rU   c                H    | j                  | j                  |d |   d      S r   r  )rO   r  offsets      rS   gather_everyzArrowDataFrame.gather_every  s'      VYQY!7u UUrU   c                    | j                   S rJ   )rj   r   s    rS   r}   zArrowDataFrame.to_arrow  r   rU   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   rj   r   )
rO   r  fractionwith_replacementr  ra  r   rngidxr?  s
             rS   samplezArrowDataFrame.sample  s     	t99-Hx'(Aii###.ii!zz#A/?z@  !1!1$!7u UUrU   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rJ   ro   )rq   r  r   s     rS   rs   z)ArrowDataFrame.unpivot.<locals>.<genexpr>8  s     9Q!5.q9s   	c              3     K   | ]6  }j                  t        |            j                   |             8 y wrJ   )r  r   )rq   r   r  
index_colsr  
value_namevariable_names     rS   rs   z)ArrowDataFrame.unpivot.<locals>.<genexpr>;  sB      
  $$]F4ODRRF4L
s   <?
permissive)	r   r   r   iterrj   r   r  r   r   )
rO   onr   r  r  on_tablesr  r   r  s
     ```  @@@rS   unpivotzArrowDataFrame.unpivot-  s     Ime=?Z9$,,9TRTX[[''.
##
 	
   v|!DEErU   )
rP   pa.TablerQ   r   rR   rG  rH   rG  returnNone)rh   r1   r[   r4   r
  r$   )rh   zMapping[str, Any]r[   r4   rx   .IntoSchema | Mapping[str, DType | None] | Noner
  r$   )rh   zSequence[Mapping[str, Any]]r[   r4   rx   r  r
  r$   )r   zpa.Table | Anyr
  zTypeIs[pa.Table])rh   r	  r[   r4   r
  r$   )rh   r=   r[   r4   rx   z!IntoSchema | Sequence[str] | Noner
  r$   )r
  r+   )r
  r#   )r
  r$   )rQ   r   r
  r$   )r   r	  rR   rG  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   rG  r
  z,list[tuple[Any, ...]] | list[dict[str, Any]])r
  zIterator[ArrowSeries])r   rG  r   r  r
  z4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]])r   r   r
  r   )rr   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])rK   r   r
  r$   )r   r'   r
  r$   )r  r   r
  r,   )r  z#Sequence[str] | Sequence[ArrowExpr]r  rG  r
  r)   )r  r$   r,  r7   r-  Sequence[str] | Noner.  r  r/  r   r
  r$   )r   r   r5  rG  r
  r$   )r>  r  r
  r$   )rJ  r   rB  bool | Sequence[bool]rI  rG  r
  r$   )rS  r  rJ  zIterable[str]rT  r  r
  r$   )r
  zpd.DataFrame)r
  r  rJ   )re  r  r
  zdict[str, ArrowSeries])re  r  r
  zdict[str, list[Any]])re  rG  r
  z-dict[str, ArrowSeries] | dict[str, list[Any]])r   r   rw  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  rw  r  r
  r$   )r  r  r  r  r
  r$   )r
  r	  )
r  r  r  zfloat | Noner  rG  r  r  r
  r$   )
r  r  r   r  r  r   r  r   r
  r$   )Mrc   
__module____qualname__r   r   r\   rT   classmethodrl   r   r   staticmethodr^   rf   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   _iter_columnsr   r   r   r   r   r   r   r   r   rx   r   r   r   exploder   r   r   r  r  r  r*  	join_asofr+  r@  rO  rV  rX  r\  r`  rf  r{  r=  r  r  r  r  r  r  r  r  r  r  r  r  r}   r  r  pivotro   rU   rS   rG   rG   Q   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, ErU   rG   )r   r'   r	  r,   )^
__future__r   collections.abcr   r   r   r   typingr   r	   r
   r   r   pyarrowr`   pyarrow.computecomputerQ  r  r   narwhals._arrow.utilsr   r   r   r   r   narwhals._compliantr   narwhals._utilsr   r   r   r   r   r   r   r   r   r   narwhals.dependenciesr   narwhals.exceptionsr   r    ior!   pathlibr"   typesr#   pandaspdrZ  r[  typing_extensionsr$   r%   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__rG   ro   rU   rS   <module>r8     s    " C C > >   .  /   4 *( 99.58 X72D8%   "		Hi 	rLMrrU   