
    7^jz                    ,   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lPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[ 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)	IntoDType
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_namesrJ   s        d/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/narwhals/_arrow/dataframe.py__init__zArrowDataFrame.__init__X   s4     !)*:*G*GH#**,-    c                 |j                   j                         }| j                  |      r|}n~|dk\  st        |t              rt        j                  |      }nSt        |      r$dt        |      j                  d}t        |      dt        |      j                  d}t        |      | j                  ||      S )N   zB'pyarrow>=14.0.0' is required for `from_arrow` for object of type .z1`from_arrow` is not supported for object of type context)_implementation_backend_version
_is_native
isinstancer   patabler   type__name__ModuleNotFoundError	TypeErrorfrom_native)clsdatar]   backend_versionnativemsgs         rU   
from_arrowzArrowDataFrame.from_arrowg   s    !11BBD>>$F%D*)EXXd^F$T*VW[\`WaWjWjVmmnoC%c**Ed4jFYFYE\\]^CC. vw77rW   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rL    .0dtypes     rU   	<genexpr>z+ArrowDataFrame.from_dict.<locals>.<genexpr>   s     >U5D=>   r   Schemar7   schemarY   z8Passing `None` dtype in `from_dict` requires PyArrow>=14rS   rd   )rh   rb   rc   anyvaluesnarwhals.schemarx   r   to_arrowempty_tableTablefrom_pydictr^   r_   NotImplementedErroritemschunked_arrayr   rP   )ri   rj   r]   rz   rx   	pa_schemarl   rm   namenw_dtyperess              rU   	from_dictzArrowDataFrame.from_dictv   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   rw   c              3  $   K   | ]  }|d u  
 y wrL   rq   rr   s     rU   ru   z,ArrowDataFrame.from_dicts.<locals>.<genexpr>   s     EE%4-Erv   zR`from_dicts` with `schema` where any dtype is `None` is not supported for PyArrow.r7   ry   r\   )r   rx   r}   r~   r   r   r   r   rb   r   from_pylistrh   )ri   rj   r]   rz   rx   rm   r   rl   s           rU   
from_dictszArrowDataFrame.from_dicts   s     	+cEV]]_EEfC%c** ! 4f-.779 	
 T**,FXX))$y)AFvw77rW   c                6    t        | t        j                        S rL   )ra   rb   r   )objs    rU   r`   zArrowDataFrame._is_native   s    #rxx((rW   c              ,     | ||j                   d      S )NTrS   rT   )rP   )ri   rj   r]   s      rU   rh   zArrowDataFrame.from_native   s    4!1!1NNrW   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   rw   ry   r\   )r   rx   Trb   arrayra   r   r   from_arraysr   _numpy_column_namesrh   )ri   rj   r]   rz   rx   valarraysrl   s           rU   
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)   r{   )narwhals._arrow.namespacer*   rP   )rQ   r*   s     rU   __narwhals_namespace__z%ArrowDataFrame.__narwhals_namespace__   s    <dmm44rW   c                    | j                   t        j                  u r| j                   j                         S dt	        | j                          }t        |      )NzExpected pyarrow, got: )r^   r   PYARROWto_native_namespacerd   AssertionError)rQ   rm   s     rU   __native_namespace__z#ArrowDataFrame.__native_namespace__   sN    >#9#99'';;=='T-A-A(B'CDS!!rW   c                    | S rL   rq   rQ   s    rU   __narwhals_dataframe__z%ArrowDataFrame.__narwhals_dataframe__       rW   c                    | S rL   rq   r   s    rU   __narwhals_lazyframe__z%ArrowDataFrame.__narwhals_lazyframe__   r   rW   c                >    | j                  | j                  |d      S )NFr   )	__class__rl   )rQ   rS   s     rU   _with_versionzArrowDataFrame._with_version   s    ~~dkk7RW~XXrW   TrT   c               >    | j                  || j                  |      S )Nr   )r   rP   )rQ   dfrT   s      rU   _with_nativezArrowDataFrame._with_native   s$    ~~=R  
 	
rW   c                .    | j                   j                  S rL   )rl   shaper   s    rU   r   zArrowDataFrame.shape   s    {{   rW   c                ,    t        | j                        S rL   )lenrl   r   s    rU   __len__zArrowDataFrame.__len__   s    4;;rW   c                    t        | j                  j                  |g      j                         d   j	                               S Nr   )tuplerl   take	to_pylistr~   )rQ   indexs     rU   rowzArrowDataFrame.row   s5    T[[%%ug.88:1=DDFGGrW   c                    y rL   rq   rQ   nameds     rU   rowszArrowDataFrame.rows   s    EHrW   c                    y rL   rq   r   s     rU   r   zArrowDataFrame.rows   s    GJrW   c                    y rL   rq   r   s     rU   r   zArrowDataFrame.rows   s    TWrW   c               r    |st        | j                  dd            S | j                  j                         S )NFi   )r   buffer_size)list	iter_rowsrl   r   r   s     rU   r   zArrowDataFrame.rows   s0    UDEE{{$$&&rW   c              #     K   t        | j                  | j                  j                         d      D ]  \  }}t	        j
                  || |       ! y w)NTstrictr]   r   )zipcolumnsrl   itercolumnsr   rh   )rQ   r   seriess      rU   iter_columnszArrowDataFrame.iter_columns  sK     dkk.E.E.GPTU 	KLD&))&$TJJ	K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)rl   num_rowsrange	to_pydictr~   r   r   )rQ   r   r   r   r   ir   s          rU   r   zArrowDataFrame.iter_rows  s      [[;;1h4 3!a+o.88:AAC2T2223 1h4 ?a!k/2<<>>>? 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   )ra   strrd   rg   r   rh   rl   )rQ   r   rm   s      rU   
get_columnzArrowDataFrame.get_column  sD    $$'T
|4CC. &&t{{4'8$TRRrW   c               <    | j                   j                  ||      S )Ncopy)rl   	__array__)rQ   rt   r   s      rU   r   zArrowDataFrame.__array__  s    {{$$U$66rW   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   r   )rQ   r   s     rU   _gatherzArrowDataFrame._gather  so    t9>$$T[[%6%6q!%<==  5(Ze-D:D  !1!1$!788rW   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   stepr   r   r   )rQ   r   r   r   rm   s        rU   _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HrW   c                    t        || j                        \  }}}| j                  | j                  j	                  | j                  |||               S rL   )r   r   r   rl   select)rQ   r   r   r   r   s        rU   _select_slice_namez!ArrowDataFrame._select_slice_name1  sH    :7DLLQtT  !3!3DLLtD4Q!RSSrW   c                    | j                  | j                  j                  | j                  |j                  |j
                  |j                                 S rL   )r   rl   r   r   r   r   r   )rQ   r   s     rU   _select_slice_indexz"ArrowDataFrame._select_slice_index5  sC      KKt||GMMGLL7<<,WXY
 	
rW   c                   t        |t        j                        rt        d|j	                               }n't        |      r|j                         }nt        r|}n|}| j                  | j                  j                  |            S )NzSequence[int])ra   rb   ChunkedArrayr   r   r   tolistrG   r   rl   r   rQ   r   selectors      rU   _select_multi_indexz"ArrowDataFrame._select_multi_index:  sj     gr/OW->->-@AH w'~~'HHH  !3!3H!=>>rW   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      rU   _select_multi_namez!ArrowDataFrame._select_multi_nameK  sL     gr/OW->->-@AHH  !3!3H!=>>rW   c                    | j                   j                  D ci c]-  }|j                  t        |j                  | j
                        / c}S c c}w rL   )rl   rz   r   r   rd   rP   )rQ   fields     rU   rz   zArrowDataFrame.schemaW  sG     ++
 JJ0T]]KK
 	
 
s   2Ac                    | j                   S rL   ry   r   s    rU   collect_schemazArrowDataFrame.collect_schema^      {{rW   c                F    | j                   j                  }t        ||      S rL   )rl   nbytesr   )rQ   unitszs      rU   estimated_sizezArrowDataFrame.estimated_sizea  s    [[2t$$rW   c                .    | j                   j                  S rL   )rl   rM   r   s    rU   r   zArrowDataFrame.columnsg  s    {{'''rW   c                l    | j                  | j                  j                  t        |            d      S NFr   )r   rl   r   r   )rQ   rM   s     rU   simple_selectzArrowDataFrame.simple_selectk  s3      KKtL12% ! 
 	
rW   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   rl   r   r   r   _align_full_broadcastrb   r   )rQ   exprs
new_seriessr  alignreshapedr   s           rU   r   zArrowDataFrame.selectp  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: r[   r   )r   
_broadcastr   rl   rb   r   r   )rQ   otherlength	len_otherrm   values         rU   _extract_comparandz!ArrowDataFrame._extract_comparand}  sy    T Z'	F226(')AN o%<<Q5&!9 :;;rW   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   )rQ   r  native_framenew_columnsr   	col_valuecol_namer  s           rU   with_columnszArrowDataFrame.with_columns  s     {{*d**E2,,$ 	I ~~H,,Y7F w& ''h(?RX'Y!///H 	   U KKrW   c               $    ddl m}  || ||      S )Nr   r'   )drop_null_keys)narwhals._arrow.group_byr(   )rQ   keysr  r(   s       rU   group_byzArrowDataFrame.group_by  s     	:D$~FFrW   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 )NrB   rA   rC   rD   rE   )antisemirC   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	broadcastrl   joindrop)
rQ   r  howleft_onright_onsuffixhow_to_join_mapplx	key_tokenr,  s
             rU   r0  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]#)#.#+  	
 		
rW   c               v    t        | ||      }| j                  | j                  j                  |      d      S )Nr   Fr   )r   r   rl   r1  )rQ   r   r   to_drops       rU   r1  zArrowDataFrame.drop  s6    'gfE  !1!1'!:RW XXrW   c                    |+| j                  | j                  j                         d      S | j                         }|j	                   |j
                  | j                         d       }| j                  |      S )NFr   T)ignore_nulls)r   rl   	drop_nullr   any_horizontalcolis_nullfilter)rQ   subsetr7  masks       rU   
drop_nullszArrowDataFrame.drop_nulls  st    >$$T[[%:%:%<TY$ZZ))+""7377F#3#;#;#=D"QQ{{4  rW   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                  dk  r.| j	                  | j
                  j                  ||      d	
      S |D cg c]
  \  }}|||f }	}}| j	                  | j
                  j                  |	      d	
      S c c}w c c}}w c c}}w )N
descending	ascendingTr   at_endat_start)   )null_placementFr   )ra   boolr   r_   r   rl   sort_by)
rQ   rF  
nulls_lastbyorderkeysortingis_descendingrK  keyeds
             rU   sortzArrowDataFrame.sort  s   j$'+5<;EHJ/Ke/KG/K +.b*T*J&C mlEG 
 &0Z  5($$##GN#K&+ %   AHH*#u#un-HH  KK&"' ! 
 	
# 0L Is   CCC 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 )NrG  rF  Tr   Fr   )ra   rL  r   r   rl   r   pcselect_k_unstable)rQ   krO  reverserP  rQ  rR  is_ascendings           rU   top_kzArrowDataFrame.top_k  s    gt$*1;|EHJ/Ke/KG/K *-R)F%C \k|DG    KKR11$++q'JK"' ! 
 	
 0Ls
   BBc                6    | j                   j                         S rL   )rl   	to_pandasr   s    rU   r^  zArrowDataFrame.to_pandas  s    {{$$&&rW   c                B    dd l } |j                  | j                        S r   )polarsrn   rl   )rQ   pls     rU   	to_polarszArrowDataFrame.to_polars	  s    r}}T[[))rW   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)rQ   rt   r   npr?  arrs         rU   rf  zArrowDataFrame.to_numpy  s9    ??dkk>Q>Q#RsCLLN#RS
 $Ss   Ac                    y rL   rq   rQ   	as_seriess     rU   to_dictzArrowDataFrame.to_dict  s    NQrW   c                    y rL   rq   rj  s     rU   rl  zArrowDataFrame.to_dict  s    MPrW   c                   | j                         }|r|D ci c]  }|j                  | c}S |D ci c]  }|j                  |j                          c}S c c}w c c}w rL   )r   r   to_list)rQ   rk  itsers       rU   rl  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   rG  )   )r   r   r   _expr_from_series_seriesfrom_iterabler   allrW  sort_indicesrl   r_   r   scatterr   rb   int64r   
add_column)	rQ   r   order_byr7  rj   	row_indexrO  indicesnew_cols	            rU   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_exprrl   r   rA  )rQ   	predicatemask_natives      rU   rA  zArrowDataFrame.filter1  sD    77	BII  KK{+5 ! 
 	
rW   c           
         | j                   }|dk\  r#| j                  |j                  d|      d      S |j                  }| j                  |j                  dt	        d||z               d      S Nr   Fr   )rl   r   r   r   maxrQ   nr   r   s       rU   headzArrowDataFrame.head7  sn    [[6$$RXXa^5$QQ;;  HHQAx!|,-U ! 
 	
rW   c           	         | j                   }|dk\  r;|j                  }| j                  |j                  t	        d||z
              d      S | j                  |j                  t        |            d      S r  )rl   r   r   r   r  absr  s       rU   tailzArrowDataFrame.tail@  sq    [[6{{H$$Q1-.e %     #a&!1 OOrW   )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rJ   rS   )PolarsLazyFramepl.DataFrame)DaskLazyFrame)IbisLazyFrame)r   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)r  implementationrS   )"r   DUCKDBduckdbnarwhals._duckdb.dataframer  rl   rc   rP   POLARSr`  narwhals._polars.dataframer  r   rn   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   )rQ   backendr  r  r  r  ra  r  ddr  r  r  r  rm   s                 rU   r  zArrowDataFrame.lazyI  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}} @   rW   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   )rI   Fr   )PandasLikeDataFrameT)r  rJ   rS   rT   )PolarsDataFramer  r  zUnsupported `backend` value: )r   r   narwhals._arrow.dataframerI   rl   rP   PANDASnarwhals._pandas_like.dataframer  r^  r  r`  r  r  r   rn   r   )rQ   r  kwargsrI   r  ra  r  rm   s           rU   collectzArrowDataFrame.collect  s     n,,,@!T]]%  n+++K&%%'-44)-&+  n+++B"^]R]]4;;%?@)-  .gY7S!!rW   c                <    | j                  | j                  d      S r   r   rl   r   s    rU   clonezArrowDataFrame.clone  s      E JJrW   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  rl   ra   r   r   r   )rQ   r   r  r  r   rm   _cols          rU   itemzArrowDataFrame.item  s    B;6>#.==BIG  !o%*4;;q>!+<tTT;&.LCS/!-7-Dt||!!&)&&t{{4'8'=PTUUrW   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)rQ   mappingr  cs       rU   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   )rQ   filepps      rU   write_parquetzArrowDataFrame.write_parquet  s    $
t{{D)rW   c                     y rL   rq   rQ   r  s     rU   	write_csvzArrowDataFrame.write_csv  s    ,/rW   c                     y rL   rq   r  s     rU   r  zArrowDataFrame.write_csv  s    =@rW   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)rQ   r  pa_csv
csv_buffers       rU   r  zArrowDataFrame.write_csv  sd    $<..0JT[[*5&&(335<<>>d+rW   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\   )rd  r   r   rb   r   r   r   rl   r  r  	aggregater   rW  and_is_inr   rh   )rQ   rg  	col_tokenr~  keep_idxrl   s         rU   	is_uniquezArrowDataFrame.is_unique  s    21dllS	HHRYYs4y12	KK%%i;Xdll#YE*Y,>?@ 	
 !!GGH	{$-?$@AH	{$-?$@A
 &&vt<<rW   )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'  )r}  F)rN  rF  )rB  keepr  r}  )rF  rN  r   _r   )rd  _check_columns_existr   r   r  r(   _REMAP_UNIQUEr   r  rU  uniquer1  rl   r  rb   r   r   r   r  r  r  r   r   r  r  r   rA  rt  ru  )rQ   rB  r  r  r}  rg  errorr(   agg_funcr  	idx_tokenr   rl   keep_idx_nativer  r7  s                   rU   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(;<<rW   c                H    | j                  | j                  |d |   d      S r   r  )rQ   r  offsets      rU   gather_everyzArrowDataFrame.gather_every!  s'      VYQY!7u UUrW   c                    | j                   S rL   )rl   r   s    rU   r   zArrowDataFrame.to_arrow$  r   rW   c          	     .   dd l }|j                  j                  |      }|j                  |j	                  |      ||      }| j                  | j                  j                  t        j                  |t        j                                     d      S )Nr   )seed)sizereplacer|   Fr   )rd  randomdefault_rngchoicer   r   rl   r   rb   r   uint64)rQ   r  with_replacementr  rg  rngr  s          rU   samplezArrowDataFrame.sample'  sw    ii###.**RYYq\;K*L  KKRXXgBIIK@A"' ! 
 	
rW   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rL   rq   )rs   r  r   s     rU   ru   z)ArrowDataFrame.unpivot.<locals>.<genexpr><  s     9Q!5.q9s   	c              3     K   | ]6  }j                  t        |            j                   |             8 y wrL   )r  r   )rs   r   r  
index_colsr  
value_namevariable_names     rU   ru   z)ArrowDataFrame.unpivot.<locals>.<genexpr>?  sB      
  $$]F4ODRRF4L
s   <?
permissive)	r   r   r   iterrl   r   r  r   r   )
rQ   onr   r  r  on_tablesr  r  r  s
     ```  @@@rU   unpivotzArrowDataFrame.unpivot1  s     Ime=?Z9$,,9TRTX[[''.
##
 	
   v|!DEErW   )
rR   pa.TablerS   r3   rT   rL  rJ   rL  returnNone)rj   r0   r]   r4   r  r$   )rj   zMapping[str, Any]r]   r4   rz   %Mapping[str, IntoDType | None] | Noner  r$   )rj   zSequence[Mapping[str, Any]]r]   r4   rz   r  r  r$   )r   zpa.Table | Anyr  zTypeIs[pa.Table])rj   r  r]   r4   r  r$   )rj   r>   r]   r4   rz   z.Mapping[str, IntoDType] | Sequence[str] | Noner  r$   )r  r*   )r  r"   )r  r$   )rS   r3   r  r$   )r   r  rT   rL  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   rL  r  z,list[tuple[Any, ...]] | list[dict[str, Any]])r  zIterator[ArrowSeries])r   rL  r   r  r  z4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]])r   r   r  r   )rt   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])rM   r   r  r$   )r  r&   r  r$   )r  r   r  r+   )r  z#Sequence[str] | Sequence[ArrowExpr]r  rL  r  r(   )r  r$   r2  r8   r3  Sequence[str] | Noner4  r  r5  r   r  r$   )r   r   r   rL  r  r$   )rB  r  r  r$   )rO  r   rF  bool | Sequence[bool]rN  rL  r  r$   )rY  r  rO  zIterable[str]rZ  r  r  r$   )r  zpd.DataFrame)r  r  rL   )rk  r  r  zdict[str, ArrowSeries])rk  r  r  zdict[str, list[Any]])rk  rL  r  z-dict[str, ArrowSeries] | dict[str, list[Any]])r   r   r}  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   )
rB  r  r  r<   r  r  r}  r  r  r$   )r  r  r  r  r  r$   )r  r  )r  r  r  rL  r  r  r  r$   )
r	  r  r   r  r  r   r  r   r  r$   )Mre   
__module____qualname__r   r   r^   rV   classmethodrn   r   r   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   rz   r   r   r   exploder   r  r   r  r  r  r0  	join_asofr1  rD  rU  r\  r^  rb  rf  rl  r  rA  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r  pivotrq   rW   rU   rI   rI   S   sn    %,,O */ "  	 
  $  #'  
  8 8 #?#?
 !#? 6#? 
#? #?J 8)8
 !8 68 
8 80 ) ) O O 88
 !8 ?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!
2
'*
  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, ErW   rI   )r   r&   r  r+   )`
__future__r   collections.abcr   r   r   r   typingr   r	   r
   r   r   r   pyarrowrb   pyarrow.computecomputerW  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`  ra  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?   r@   rF   __annotations__rG   rI   rq   rW   rU   <module>r=     s    " C C E E   .  /	 	 	 4 *(  ..58 X72D8%    "		Hi 	 e tLMtrW   