
    GJj7y                    (   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% 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l/m0Z0 d dlm1Z1 d dl2Z3d dl4Z5d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZA d dlBmCZCmDZD d dlEmFZF d dlGmHZH d dlImJZJmKZK d dlmLZLmMZM 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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)Version_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ZIddL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        c/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/narwhals/_arrow/dataframe.py__init__zArrowDataFrame.__init__W   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_arrowf   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_dictu   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_name0  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_index4  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_index9  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_nameJ  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.schemaV  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_size`  s    [[2t$$rV   c                .    | j                   j                  S rK   )rk   rL   r   s    rT   r   zArrowDataFrame.columnsf  s    {{'''rV   c                l    | j                  | j                  j                  t        |            d      S NFr   )r   rk   r   r   )rP   rL   s     rT   simple_selectzArrowDataFrame.simple_selectj  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.selecto  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   r0  )rP   r   r   to_drops       rT   r0  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   subsetr6  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   rE  
nulls_lastbyorderkeysortingis_descendingrI  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 )NrF  rE  Tr   Fr   )r`   rJ  r   r   rk   r   pcselect_k_unstable)rP   krM  reverserN  rO  rP  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   r[  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   rc  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   rg  s     rT   ri  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   rh  itsers       rT   ri  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   rF  )   )r   r   r   _expr_from_series_seriesfrom_iterabler   allrT  sort_indicesrk   r^   r   scatterr   ra   int64r   
add_column)	rP   r   order_byr6  ri   	row_indexrM  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.tail7  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_pandasr[  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.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}} @   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  r[  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[   )ra  r   r   ra   r   r   r   rk   r  r  	aggregater   rT  and_is_inr   rg   )rP   rd  	col_tokenr{  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&  )rz  F)rL  rE  )rA  keepr  rz  )rE  rL  r   _r   )ra  _check_columns_existr   r   r  r(   _REMAP_UNIQUEr   r~  rR  uniquer0  rk   r  ra   r   r   r   r  r  r  r   r   r   r  r   r@  rq  rr  )rP   rA  r  r  rz  rd  errorr(   agg_funcr  	idx_tokenr   rk   keep_idx_nativer  r6  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 }|j                  j                  |      }|j                  |j	                  |      ||      }| j                  | j                  j                  t        j                  |t        j                                     d      S )Nr   )seed)sizereplacer{   Fr   )ra  randomdefault_rngchoicer   r   rk   r   ra   r   uint64)rP   r  with_replacementr  rd  rngr|  s          rT   samplezArrowDataFrame.sample  sw    ii###.**RYYq\;K*L  KKRXXgBIIK@A"' ! 
 	
rV   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>3  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>6  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.unpivot(  s     Ime=?Z9$,,9TRTX[[''.
##
 	
   v|!DEErV   )
rQ   pa.TablerR   r3   rS   rJ  rI   rJ  returnNone)ri   r0   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   r3   r  r$   )r   r
  rS   rJ  r  r$   )r  ztuple[int, int])r  int)r   r  r  ztuple[Any, ...])r   Literal[True]r  zlist[dict[str, Any]])r   Literal[False]r  zlist[tuple[Any, ...]])r   rJ  r  z,list[tuple[Any, ...]] | list[dict[str, Any]])r  zIterator[ArrowSeries])r   rJ  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  rJ  r  r(   )r  r$   r1  r7   r2  Sequence[str] | Noner3  r  r4  r   r  r$   )r   r   r   rJ  r  r$   )rA  r  r  r$   )rM  r   rE  bool | Sequence[bool]rL  rJ  r  r$   )rV  r  rM  zIterable[str]rW  r  r  r$   )r  zpd.DataFrame)r  r  rK   )rh  r  r  zdict[str, ArrowSeries])rh  r  r  zdict[str, list[Any]])rh  rJ  r  z-dict[str, ArrowSeries] | dict[str, list[Any]])r   r   rz  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   )
rA  r  r  r;   r  r  rz  r  r  r$   )r  r  r  r  r  r$   )r  r
  )r  r  r  rJ  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_asofr0  rC  rR  rY  r[  r_  rc  ri  r~  r@  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r	  pivotrp   rV   rT   rH   rH   R   sn    %,,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
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computerT  r  r   narwhals._arrow.utilsr   r   r   r   r   narwhals._compliantr   narwhals._utilsr   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.utilsr/   narwhals._translater0   narwhals._typingr1   r2   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 lLMlrV   