
    }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]dS )!    )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ddZedd            Zedd            Z	edd            Z
edd            Zedd            Zedd             Zdd"Zdd$Zdd%Zdd&Zdd'Zd(d)dd+Zedd-            Zdd/Zdd2Zedd6            Zedd9            Zedd;            Zdd<Zdd>ZeZddAZddEZddJZddMZ ddOZ!ddRZ"ddSZ#ddTZ$ddVZ%eddX            Z&ddYZ'dd]Z( e)            Z*edd_            Z+ddaZ,dddZ-ddgZ.ddhZ/ddmZ0ddtZ1 e)            Z2ddwZ3ddyZ4dd~Z5ddZ6ddZ7ddZ8dddddZ9edd            Z:edd            Z:ddZ:ddZ;ddZ<ddZ=ddZ>	 dddddZ?ddZ@ddZAddZBddZCddZDedd            ZEedd            ZEddZEddZFddddZGd dZHddZIddZJddńZK e)            ZLdS (  ArrowDataFrameF)validate_backend_versionnative_dataframepa.Tableversionr   validate_column_namesboolrH   returnNonec               z    |rt          |j                   |r|                                  || _        || _        d S N)r   column_names_validate_backend_version_native_frame_version)selfrI   rK   rL   rH   s        M/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_arrow/dataframe.py__init__zArrowDataFrame.__init__V   sL     ! 	I)*:*GHHH# 	-**,,,-    datar1   contextr4   r$   c                 |j                                         }|                     |          r|}n|dk    st          |t                    rt          j        |          }n]t          |          r'dt          |          j	        d}t          |          dt          |          j	        d}t          |          |                     ||          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 r[   )_implementation_backend_version
_is_native
isinstancer   patabler   type__name__ModuleNotFoundError	TypeErrorfrom_native)clsrZ   r[   backend_versionnativemsgs         rW   
from_arrowzArrowDataFrame.from_arrowe   s    !1BBDD>>$ 		!FF%%D*)E)E%Xd^^FF$T** 	!oW[\`WaWaWjoooC%c***^d4jjFY^^^CC.. vw777rY   Mapping[str, Any]schema.IntoSchema | Mapping[str, DType | None] | Nonec              $   |s+s)|                      t          j        i                     S |s)|                      t          j                            S t          d |                                D                       sddlm}  |t          d|                                                    }|rs|	                                }n!t          j
                            |          }|                      |          S j                                        dk     rd}t          |          t          j        fd	|                                D                       }|                      t          j        |                    S )
Nr`   c              3     K   | ]}|d u V  	d S rQ    .0dtypes     rW   	<genexpr>z+ArrowDataFrame.from_dict.<locals>.<genexpr>   s&      >>U5D=>>>>>>rY   r   Schemar6   rr   r]   z8Passing `None` dtype in `from_dict` requires PyArrow>=14c           
         i | ]?\  }}|t          j        r|         ng g|t          |j                  nd           @S )NrK   )rg   )re   chunked_arrayr   rU   )rx   namenw_dtyper[   rZ   s      rW   
<dictcomp>z,ArrowDataFrame.from_dict.<locals>.<dictcomp>   sw        #D( b&#'/T$ZZR0+ 2(GDTUUUU	    rY   )rk   re   rf   anyvaluesnarwhals.schemar|   r   to_arrowempty_tableTablefrom_pydictra   rb   NotImplementedErroritems)	rl   rZ   r[   rr   r|   	pa_schemarn   ro   ress	    ``      rW   	from_dictzArrowDataFrame.from_dictt   s     	Bd 	B??28B<<?AAA 	D??28D>>7?CCC>>fmmoo>>>>> 	<......tL&99::CCEEI F F"..00--d9-EE??67?;;;"3355==LC%c***h     '-llnn  

 

 rx}}g>>>rY   Sequence[Mapping[str, Any]]c                 ddl m} |r<t          d |                                D                       rd}t	          |          |+ |t          d|                                                    n|}|r|s|                                }n!t          j	        
                    ||          }|                     ||          S )Nr   r{   c              3     K   | ]}|d u V  	d S rQ   rv   rw   s     rW   rz   z,ArrowDataFrame.from_dicts.<locals>.<genexpr>   s&      EEE%4-EEEEEErY   zR`from_dicts` with `schema` where any dtype is `None` is not supported for PyArrow.r6   r}   r`   )r   r|   r   r   r   r   r   r   re   r   from_pylistrk   )rl   rZ   r[   rr   r|   ro   r   rn   s           rW   
from_dictszArrowDataFrame.from_dicts   s     	+***** 	+cEEV]]__EEEEE 	+fC%c*** ! F4f--..77999 	
  	BT 	B**,,FFX))$y)AAFvw777rY   objpa.Table | AnyTypeIs[pa.Table]c                6    t          | t          j                  S rQ   )rd   re   r   )r   s    rW   rc   zArrowDataFrame._is_native   s    #rx(((rY   c              (     | ||j         d          S )NTrK   rL   )rU   )rl   rZ   r[   s      rW   rk   zArrowDataFrame.from_native   s    s4!1NNNNrY   r=   !IntoSchema | Sequence[str] | Nonec              n   ddl m} d |j        D             }t          |t          |f          r=t
          j                            | ||                                                    }n4t
          j                            || 	                    ||                    }| 
                    ||          S )Nr   r{   c                6    g | ]}t          j        |          S rv   )re   array)rx   vals     rW   
<listcomp>z-ArrowDataFrame.from_numpy.<locals>.<listcomp>   s     222C"(3--222rY   r}   r`   )r   r|   Trd   r   re   r   from_arraysr   _numpy_column_namesrk   )rl   rZ   r[   rr   r|   arraysrn   s          rW   
from_numpyzArrowDataFrame.from_numpy   s     	+*****2246222fw/00 	YX))&9P9P9R9R)SSFFX))&#2I2I$PV2W2WXXFvw777rY   r+   c                0    ddl m}  || j                  S )Nr   r*   r   )narwhals._arrow.namespacer+   rU   )rV   r+   s     rW   __narwhals_namespace__z%ArrowDataFrame.__narwhals_namespace__   s)    <<<<<<~dm4444rY   r#   c                    | j         t          j        u r| j                                         S dt	          | j                    }t          |          )NzExpected pyarrow, got: )ra   r   PYARROWto_native_namespacerg   AssertionError)rV   ro   s     rW   __native_namespace__z#ArrowDataFrame.__native_namespace__   sN    >#999';;===DT-A(B(BDDS!!!rY   c                    | S rQ   rv   rV   s    rW   __narwhals_dataframe__z%ArrowDataFrame.__narwhals_dataframe__       rY   c                    | S rQ   rv   r   s    rW   __narwhals_lazyframe__z%ArrowDataFrame.__narwhals_lazyframe__   r   rY   c                <    |                      | j        |d          S )NFr   )	__class__rn   )rV   rK   s     rW   _with_versionzArrowDataFrame._with_version   s    ~~dk7RW~XXXrY   TrL   dfc               <    |                      || j        |          S )Nr   )r   rU   )rV   r   rL   s      rW   _with_nativezArrowDataFrame._with_native   s'    ~~=R  
 
 	
rY   tuple[int, int]c                    | j         j        S rQ   )rn   shaper   s    rW   r   zArrowDataFrame.shape   s    {  rY   intc                *    t          | j                  S rQ   )lenrn   r   s    rW   __len__zArrowDataFrame.__len__   s    4;rY   indextuple[Any, ...]c                    t          | j                            |g                                          d                                                   S Nr   )tuplern   take	to_pylistr   )rV   r   s     rW   rowzArrowDataFrame.row   s?    T[%%ug..88::1=DDFFGGGrY   namedLiteral[True]list[dict[str, Any]]c                   d S rQ   rv   rV   r   s     rW   rowszArrowDataFrame.rows   s    EHSrY   Literal[False]list[tuple[Any, ...]]c                   d S rQ   rv   r   s     rW   r   zArrowDataFrame.rows   s    GJsrY   ,list[tuple[Any, ...]] | list[dict[str, Any]]c                   d S rQ   rv   r   s     rW   r   zArrowDataFrame.rows   s    TWTWrY   c                   |s$t          |                     dd                    S | j                                        S )NFi   )r   buffer_size)list	iter_rowsrn   r   r   s     rW   r   zArrowDataFrame.rows   s=     	FUDDEEE{$$&&&rY   Iterator[ArrowSeries]c              #     K   t          | j        | j                                                  D ]\  }}t	          j        || |          V  d S )Nr[   r   )r   columnsrn   itercolumnsr   rk   )rV   r   seriess      rW   iter_columnszArrowDataFrame.iter_columns   sb      &t|T[5L5L5N5NOO 	K 	KLD&)&$TJJJJJJJ	K 	KrY   r   4Iterator[tuple[Any, ...]] | Iterator[dict[str, Any]]c             #  H  K   | j         }|j        }|sVt          d||          D ]B}||||z                                                                            }t          | E d {V  Cd S t          d||          D ]'}||||z                                            E d {V  (d S r   )rn   num_rowsrange	to_pydictr   r   r   )rV   r   r   r   r   ir   s          rW   r   zArrowDataFrame.iter_rows  s       [; 	?1h44 - -!a+o-.88::AACC%t,,,,,,,,,- - 1h44 ? ?a!k/12<<>>>>>>>>>>? ?rY   r   strr   c                    t          |t                    s!dt          |           }t          |          t	          j        | j        |         | |          S )NzExpected str, got: r   )rd   r   rg   rj   r   rk   rn   )rV   r   ro   s      rW   
get_columnzArrowDataFrame.get_column  sR    $$$ 	!4T

44CC.. &t{4'8$TRRRRrY   ry   r	   copybool | Nonec               :    | j                             ||          S )Nr   )rn   	__array__)rV   ry   r   s      rW   r   zArrowDataFrame.__array__  s    {$$U$666rY   r   (SizedMultiIndexSelector[ChunkedArrayAny]c                <   t          |          dk    r.|                     | j                            dd                    S | j        dk     r$t          |t                    rt          |          }|                     | j                            |                    S )Nr   )   )	r   r   rn   slicerb   rd   r   r   r   )rV   r   s     rW   _gatherzArrowDataFrame._gather  s    t99>>$$T[%6%6q!%<%<=== 5((Ze-D-D(::D  !1!1$!7!7888rY   _SliceIndex | rangec                t   |j         pd}|j        |j        nt          | j                  }|dk     rt          | j                  |z   }|dk     rt          | j                  |z   }|j        |j        dk    rd}t          |          |                     | j                            |||z
                      S )Nr      z4Slicing with step is not supported on PyArrow tables)startstopr   rn   stepr   r   r   )rV   r   r   r   ro   s        rW   _gather_slicezArrowDataFrame._gather_slice#  s    
a I1tyys4;7G7G199$$u,E!88t{##d*D9 TY!^^HC%c***  !2!25$,!G!GHHHrY   r   r?   c                    t          || j                  \  }}}|                     | j                            | j        |||                             S rQ   )r   r   r   rn   select)rV   r   r   r   r   s        rW   _select_slice_namez!ArrowDataFrame._select_slice_name/  sK    :7DLQQtT  !3!3DLtD4Q!R!RSSSrY   c                    |                      | j                            | j        |j        |j        |j                                     S rQ   )r   rn   r   r   r   r   r   )rV   r   s     rW   _select_slice_indexz"ArrowDataFrame._select_slice_index3  sA      Kt|GMGL7<,WXYY
 
 	
rY   c                "   t          |t          j                  r#t          d|                                          }n&t          |          r|                                }n|}|                     | j        	                    |                    S )NzSequence[int])
rd   re   ChunkedArrayr   r   r   tolistr   rn   r   rV   r   selectors      rW   _select_multi_indexz"ArrowDataFrame._select_multi_index8  s     gr// 	OW->->-@-@AAHH w'' 	~~''HHH  !3!3H!=!=>>>rY   'SizedMultiNameSelector[ChunkedArrayAny]c                    t          |t          j                  r#t          d|                                          }n|}|                     | j                            |                    S )NSequence[str])rd   re   r   r   r   r   rn   r   r  s      rW   _select_multi_namez!ArrowDataFrame._select_multi_nameG  s^     gr// 	OW->->-@-@AAHHH  !3!3H!=!=>>>rY   dict[str, DType]c                4      fd j         j        D             S )Nc                P    i | ]"}|j         t          |j        j                  #S rv   )r   r   rg   rU   )rx   fieldrV   s     rW   r   z)ArrowDataFrame.schema.<locals>.<dictcomp>U  s<     
 
 
 J0T]KK
 
 
rY   )rn   rr   r   s   `rW   rr   zArrowDataFrame.schemaS  s3    
 
 
 
+
 
 
 	
rY   c                    | j         S rQ   r}   r   s    rW   collect_schemazArrowDataFrame.collect_schemaZ  
    {rY   unitr:   int | floatc                :    | j         j        }t          ||          S rQ   )rn   nbytesr   )rV   r  szs      rW   estimated_sizezArrowDataFrame.estimated_size]  s    [2t$$$rY   	list[str]c                    | j         j        S rQ   )rn   rR   r   s    rW   r   zArrowDataFrame.columnsc  s    {''rY   rR   c                z    |                      | j                            t          |                    d          S NFr   )r   rn   r   r   )rV   rR   s     rW   simple_selectzArrowDataFrame.simple_selectg  s<      KtL1122% ! 
 
 	
rY   exprsr'   c                B    | j         | }|s4|                     | j        j                            g           d          S d |D             }|d         j        } || }t          j                            d |D             |          }|                     |d          S )NFr   c                    g | ]	}|j         
S rv   r   rx   ss     rW   r   z)ArrowDataFrame.select.<locals>.<listcomp>s  s    ,,,A,,,rY   r   c                    g | ]	}|j         
S rv   rn   r  s     rW   r   z)ArrowDataFrame.select.<locals>.<listcomp>v  s    ">">">18">">">rY   )namesT)_evaluate_exprsr   rn   r   r   _align_full_broadcastre   r   )rV   r  
new_seriesr#  alignreshapedr   s          rW   r   zArrowDataFrame.selectl  s    )T)51
 	$$%11"55U %    -,,,,135*%X!!">">X">">">e!LL  4 @@@rY   otherr,   c                    t          |           }|j        s4t          |          x}|k    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   rn   re   r   r   )rV   r)  length	len_otherro   values         rW   _extract_comparandz!ArrowDataFrame._extract_comparandy  s    T 	  ZZ'	F22N6NN)NNN oo%<Q5&!9!9 :;;;rY   c                .   | j         } | j        | }| j        }|D ]d}|j        }|                     |          }||v r+|                    |                    |          ||          n|                    ||          }e|                     |d          S )N)columnFr   )	rn   r$  r   r   r/  
set_columnr   append_columnr   )rV   r  native_framenew_columnsr   	col_valuecol_namer1  s           rW   with_columnszArrowDataFrame.with_columns  s     {*d*E2,$ 	 	I ~H,,Y77F w&& ''h(?(?RX'YYY!///HH L   U KKKrY   keys#Sequence[str] | Sequence[ArrowExpr]drop_null_keysr)   c               *    ddl m}  || ||          S )Nr   r(   )r;  )narwhals._arrow.group_byr)   )rV   r9  r;  r)   s       rW   group_byzArrowDataFrame.group_by  s-     	:99999|D$~FFFFrY   howr7   left_onSequence[str] | Noneright_onsuffixc          
        dddddd}|dk    r|                                  }t          dg | j        |j        	          }|                     |                     |                    d
d                               |                                                    j        	                    |                    |                    d
d                               |                                                    j        ||d|          
                    |g                    S |dk    }	|                     | j        	                    |j        |pg |||         ||	                    S )NrA   r@   rB   rC   rD   )antisemirB   leftfullcross   n_bytesr   r   )r9  
right_keys	join_typeright_suffixrH  )r9  rM  rN  rO  coalesce_keys)r   r   r   r   r8  litalias	broadcastrn   joindrop)
rV   r)  r?  r@  rB  rC  how_to_join_mapplx	key_tokenrP  s
             rW   rT  zArrowDataFrame.join  s       0
 0
 '>>--//C6#BT\#BEM#B  I $$!!#''!T"2"2"8"8"C"C"M"M"O"OPP&&4((..y99CCEE "(%!'    yk""   v  K]#)#.#+   	
 	
 		
rY   r  strictc                   t          | ||          }|                     | j                            |          d          S )NrY  Fr   )r   r   rn   rU  )rV   r   rY  to_drops       rW   rU  zArrowDataFrame.drop  s@    'gfEEE  !1!1'!:!:RW XXXrY   subsetc                   |.|                      | j                                        d          S |                                 }|                     |j        |                                 d           }|                     |          S )NFr   T)ignore_nulls)r   rn   	drop_nullr   any_horizontalcolis_nullfilter)rV   r]  rW  masks       rW   
drop_nullszArrowDataFrame.drop_nulls  s    >$$T[%:%:%<%<TY$ZZZ))++""737F#3#;#;#=#=D"QQQ{{4   rY   by
descendingbool | Sequence[bool]
nulls_lastc                   t          |t                    r|rdndfd|D             }nd t          ||          D             }|rdnd}|                     | j                            ||          d	          S )
Nrh  	ascendingc                    g | ]}|fS rv   rv   rx   keyorders     rW   r   z'ArrowDataFrame.sort.<locals>.<listcomp>      /K/K/Ke/K/K/KrY   c                $    g | ]\  }}||rd ndfS )rh  rl  rv   )rx   ro  is_descendings      rW   r   z'ArrowDataFrame.sort.<locals>.<listcomp>  s:       &C mDllE  rY   at_endat_start)null_placementFr   )rd   rM   r   r   rn   sort_by)rV   rh  rj  rg  sortingrv  rp  s         @rW   sortzArrowDataFrame.sort  s    j$'' 	+5F<<;E/K/K/K/K/K/K/KGG *4R*D*D  G
 &0?Z  KGG"' ! 
 
 	
rY   kIterable[str]reversec          	        t          |t                    r|rdndfd|D             }nd t          ||          D             }|                     | j                            t          j        | j        ||                    d          S )Nrl  rh  c                    g | ]}|fS rv   rv   rn  s     rW   r   z(ArrowDataFrame.top_k.<locals>.<listcomp>  rq  rY   c                $    g | ]\  }}||rd ndfS )rl  rh  rv   )rx   ro  is_ascendings      rW   r   z(ArrowDataFrame.top_k.<locals>.<listcomp>  s:       %C \Ckk|D  rY   Fr   )rd   rM   r   r   rn   r   pcselect_k_unstable)rV   rz  rg  r|  rx  rp  s        @rW   top_kzArrowDataFrame.top_k  s    gt$$ 	*1C;;|E/K/K/K/K/K/K/KGG )3B)@)@  G   KR1$+q'JJKK"' ! 
 
 	
rY   pd.DataFramec                4    | j                                         S rQ   )rn   	to_pandasr   s    rW   r  zArrowDataFrame.to_pandas  s    {$$&&&rY   pl.DataFramec                4    dd l } |j        | j                  S r   )polarsrp   rn   )rV   pls     rW   	to_polarszArrowDataFrame.to_polars  s"    r}T[)))rY   Nr   c               `    dd l }|                    d | j        j        D                       }|S )Nr   c                6    g | ]}|                                 S rv   )to_numpy)rx   rb  s     rW   r   z+ArrowDataFrame.to_numpy.<locals>.<listcomp>  s     #R#R#RsCLLNN#R#R#RrY   )numpycolumn_stackrn   r   )rV   ry   r   nparrs        rW   r  zArrowDataFrame.to_numpy  s8    ??#R#Rdk>Q#R#R#RSS
rY   	as_seriesdict[str, ArrowSeries]c                   d S rQ   rv   rV   r  s     rW   to_dictzArrowDataFrame.to_dict  s    NQcrY   dict[str, list[Any]]c                   d S rQ   rv   r  s     rW   r  zArrowDataFrame.to_dict  s    MPSrY   -dict[str, ArrowSeries] | dict[str, list[Any]]c               ^    |                                  }|rd |D             S d |D             S )Nc                    i | ]
}|j         |S rv   r  rx   sers     rW   r   z*ArrowDataFrame.to_dict.<locals>.<dictcomp>  s    000cCHc000rY   c                B    i | ]}|j         |                                S rv   )r   to_listr  s     rW   r   z*ArrowDataFrame.to_dict.<locals>.<dictcomp>  s$    666C#++--666rY   )r   )rV   r  its      rW   r  zArrowDataFrame.to_dict  sE        	100R00006626666rY   order_byc                   |                                  }t          dt          |           d          }|]|j                            |j                            || |                    }|                     ||                                          S t          j
        | j        d |D                       }| j        dk     r(|                    t          j
        |                    }n9t          j        ||                    t!          j                                        }|                     | j                            d||                    S )Nr   r   r   c                    g | ]}|d fS )rl  rv   )rx   rg  s     rW   r   z1ArrowDataFrame.with_row_index.<locals>.<listcomp>  s    /U/U/Ub[0A/U/U/UrY   )   )r   r   r   _expr_from_series_seriesfrom_iterabler   allr  sort_indicesrn   rb   r   scatterr   re   int64r   
add_column)rV   r   r  rW  rZ   	row_indexindicesnew_cols           rW   with_row_indexzArrowDataFrame.with_row_index  s   ))++aTA&&	..))$4)HH I ;;y#''))444/$+/U/UH/U/U/UVV 5((ii 8 899GGjw||BHJJ'?'?@@G  !7!74!I!IJJJrY   	predicatec                    |                      |          j        }|                     | j                            |          d          S r  )_evaluate_single_output_exprrn   r   rd  )rV   r  mask_natives      rW   rd  zArrowDataFrame.filter%  sJ    77	BBI  K{++5 ! 
 
 	
rY   nc           
         | j         }|dk    r+|                     |                    d|          d          S |j        }|                     |                    dt	          d||z                       d          S Nr   Fr   )rn   r   r   r   maxrV   r  r   r   s       rW   headzArrowDataFrame.head+  s|    [66$$RXXa^^5$QQQ;  HHQAx!|,,--U ! 
 
 	
rY   c           	        | j         }|dk    rB|j        }|                     |                    t	          d||z
                      d          S |                     |                    t          |                    d          S r  )rn   r   r   r   r  absr  s       rW   tailzArrowDataFrame.tail4  s    [66{H$$Q1--..e %      #a&&!1!1 OOOrY   )sessionbackend_LazyAllowedImpl | Noner  SparkSession | Noner/   c               6   || S |t           j        u r7dd l}ddlm} | j        } ||                    d          d| j                  S |t           j        u rPdd l	}ddl
m}  |t          d |j        | j                                                            d| j                  S |t           j        u rIdd lm} ddlm}	  |	|                    | j                                                  d| j                  S |t           j        u r<dd l}
dd	lm}  ||
                    | j        | j        
          d| j                  S |                                r7ddlm} |d}t?          |          |                     | ||| j                  S tB          )Nr   )DuckDBLazyFrame_dfTrH   rK   )PolarsLazyFramer  )DaskLazyFrame)IbisLazyFrame)r   )SparkLikeLazyFramez5Spark like backends require `session` to be not None.)r  implementationrK   )"r   DUCKDBduckdbnarwhals._duckdb.dataframer  rn   rf   rU   POLARSr  narwhals._polars.dataframer  r   rp   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   )rV   r  r  r  r  r  r  r  ddr  r  r  r  ro   s                 rW   r  zArrowDataFrame.lazy=  s&    ?Kn+++MMMBBBBBB+C"?U##dDM    n+++BBBBBB"?^]R]4;%?%?@@EEGG)-   
 n)))''''''>>>>>> =t{446677)-   
 n)))KKK>>>>>> =dk4<@@)-      "" 		IIIIIIM oo%%??ggt} @    rY   _EagerAllowedImpl | Nonekwargsr.   c                   |t           j        u s|ddlm}  || j        | j        d          S |t           j        u r<ddlm}  || j        	                                t           j        d| j        d          S |t           j
        u r>dd l}ddlm}  |t          d	 |j        | j                            d| j        
          S d| }t!          |          )Nr   )rG   Fr   )PandasLikeDataFrameT)r  rH   rK   rL   )PolarsDataFramer  r  zUnsupported `backend` value: )r   r   narwhals._arrow.dataframerG   rn   rU   PANDASnarwhals._pandas_like.dataframer  r  r  r  r  r  r   rp   r   )rV   r  r  rG   r  r  r  ro   s           rW   collectzArrowDataFrame.collectz  s1    n,,,@@@@@@!>T]%    n+++KKKKKK&&%%''-4)-&+    n+++BBBBBB"?^]R]4;%?%?@@)-    8g77S!!!rY   c                :    |                      | j        d          S r  r   rn   r   s    rW   clonezArrowDataFrame.clone  s      E JJJrY   r   
int | Noner1  int | str | Nonec                \   ddl m} |A|?| j        x}dk    rd|}t          |           || j        d         d         d          S ||d}t          |          t          |t                    r| 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  rn   rd   r   r   r   )rV   r   r1  r  r   ro   _cols          rW   itemzArrowDataFrame.item  s    BBBBBB;6>#..G=BG G  !oo%**4;q>!+<tTTTT;&.LCS//!-7-D-DPt|!!&)))&&&t{4'8'=PTUUUUrY   mappingMapping[str, str]c                    | j         dk    rt          d          }nfd| j        D             }|                     | j                            |                    S )N)   zdict[str, str]c                <    g | ]}                     ||          S rv   )get)rx   cr  s     rW   r   z)ArrowDataFrame.rename.<locals>.<listcomp>  s'    ===1W[[A&&===rY   )rb   r   r   r   rn   rename_columns)rV   r  r#  s    ` rW   renamezArrowDataFrame.rename  sb     E)))733EE=======E  !;!;E!B!BCCCrY   filestr | Path | BytesIOc                H    dd l m} |                    | j        |           d S r   )pyarrow.parquetparquetwrite_tablern   )rV   r  pps      rW   write_parquetzArrowDataFrame.write_parquet  s0    $$$$$$
t{D)))))rY   c                    d S rQ   rv   rV   r  s     rW   	write_csvzArrowDataFrame.write_csv  s    ,/CrY   c                    d S rQ   rv   r  s     rW   r  zArrowDataFrame.write_csv  s    =@SrY   str | Path | BytesIO | None
str | Nonec                   dd l m} |ft          j                    }|                    | j        |           |                                                                                                S |                    | j        |           d S r   )	pyarrow.csvcsvre   BufferOutputStreamr  rn   getvalue
to_pybytesdecode)rV   r  pa_csv
csv_buffers       rW   r  zArrowDataFrame.write_csv  s    $$$$$$<.00JT[*555&&((3355<<>>>d+++trY   c                    dd l }t          d| j                  }t          j        |                    t          |                               }| j                            ||          	                    | j                  
                    |df|dfg          }t          j        t          j        t          j        ||| d                   t          j        ||| d                                       }t          j        ||           S )	Nr   rJ  rK  minr  _min_maxr`   )r  r   r   re   r   r   r   rn   r3  r>  	aggregater   r  and_is_inr   rk   )rV   r  	col_tokenr  keep_idxrn   s         rW   	is_uniquezArrowDataFrame.is_unique  s    21dlSSS	HRYYs4yy1122	K%%i;;Xdl##YE*Y,>?@@ 	
 !GH	-?-?-?$@AAH	-?-?-?$@AA 
 
 &vt<<<<rY   )maintain_orderkeepr;   r  c          
     .   dd l }|r|                     |          x}r|t          |p| j                  }|dv rddlm} |j        |         }t          d| j                  }	|r|rt          dg | j        |	          }
 |                     |
d           j	        |ddd
                    ||dd 	          }|	                    |
dd
                              |
gd          S |r | j	        |dddj        }n| j        }|                    |	t          j        |                    t#          |                                                             |                              |	|fg                              |	 d|           }|                     |                    |          d          S  | j        |                                 }|                                 }|                     |j                            |                    S )Nr   >   r   lastfirstr(   rJ  rK  )r  F)rj  rh  )r]  r   r  r  )rh  rj  r[  _r   )r  _check_columns_existr   r   r=  r)   _REMAP_UNIQUEr   r  ry  uniquerU  rn   r3  re   r   r   r   r>  r  r1  r   r   r  r  r   rd  r  r  )rV   r]  r   r  r  r  errorr)   agg_funcr  	idx_tokenr   rn   keep_idx_nativer  rW  s                   rW   r'  zArrowDataFrame.unique  sg    	 	 9 9& A AAu 	Kf,--+++======#1$7H6q$,WWWI N :'A'Ay'A  	D''	D'AA8%I I IV6UUYVZZ 
 wwyUuwMMRRK S     %"H5QQQX$$Y3t999M9M0N0NOO&!!Y1233911x1122	  $$O,,E %    &4%v.88::))++{{3911(;;<<<rY   offsetc                L    |                      | j        |d |         d          S r  r  )rV   r  r,  s      rW   gather_everyzArrowDataFrame.gather_every  s(      VYQY!7u UUUrY   c                    | j         S rQ   r"  r   s    rW   r   zArrowDataFrame.to_arrow  r  rY   fractionfloat | Nonewith_replacementseedc               B   dd l }t          |           }||t          ||z            }|j                            |          }|                    |          }|                    |||          }	|                     | j        	                    |	          d          S )Nr   )r3  )sizereplaceFr   )
r  r   r   randomdefault_rngr   choicer   rn   r   )
rV   r  r0  r2  r3  r  r   rngidxre  s
             rW   samplezArrowDataFrame.sample  s     	t999-Hx'((Ai###..ii!!zz#A/?z@@  !1!1$!7!7u UUUrY   onvariable_name
value_namec                P  	 t          |           	g nt                    |fd| j        D             nt          |          }| j                                      | j        j        	fd|D             }|                     t          |d                    S )Nc              3  $   K   | ]
}|v|V  d S rQ   rv   )rx   r  r   s     rW   rz   z)ArrowDataFrame.unpivot.<locals>.<genexpr>8  s'      99Q!5..q....99rY   c              3     K   | ]E}                     t          |                                          |                    V  Fd S rQ   )r3  r   )rx   r   r1  
index_colsr  r?  r>  s     rW   rz   z)ArrowDataFrame.unpivot.<locals>.<genexpr>;  sn       
 
  $$]F4OODDRRFF4LL 
 
 
 
 
 
rY   
permissive)	r   r   r   iterrn   r   r1  r   r   )
rV   r=  r   r>  r?  on_tablesr1  rC  r  s
     ```  @@@rW   unpivotzArrowDataFrame.unpivot-  s     IIme=?Z9999$,9999TRTXX[''..
#
 
 
 
 
 
 
 
 	
 
 
   v|!D!DEEErY   )
rI   rJ   rK   r   rL   rM   rH   rM   rN   rO   )rZ   r1   r[   r4   rN   r$   )rZ   rq   r[   r4   rr   rs   rN   r$   )rZ   r   r[   r4   rr   rs   rN   r$   )r   r   rN   r   )rZ   rJ   r[   r4   rN   r$   )rZ   r=   r[   r4   rr   r   rN   r$   )rN   r+   )rN   r#   )rN   r$   )rK   r   rN   r$   )r   rJ   rL   rM   rN   r$   )rN   r   )rN   r   )r   r   rN   r   )r   r   rN   r   )r   r   rN   r   )r   rM   rN   r   )rN   r   )r   rM   r   r   rN   r   )r   r   rN   r   )ry   r	   r   r   rN   r=   )r   r   rN   r$   )r   r   rN   r$   )r   r?   rN   r$   )r   r   rN   r$   )r   r   rN   r$   )r   r  rN   r$   )rN   r	  )r  r:   rN   r  )rN   r  )rR   r   rN   r$   )r  r'   rN   r$   )r)  r   rN   r,   )r9  r:  r;  rM   rN   r)   )r)  r$   r?  r7   r@  rA  rB  rA  rC  r   rN   r$   )r   r  rY  rM   rN   r$   )r]  rA  rN   r$   )rg  r   rh  ri  rj  rM   rN   r$   )rz  r   rg  r{  r|  ri  rN   r$   )rN   r  )rN   r  rQ   )r  r   rN   r  )r  r   rN   r  )r  rM   rN   r  )r   r   r  rA  rN   r$   )r  r'   rN   r$   )r  r   rN   r$   )r  r  r  r  rN   r/   )r  r  r  r	   rN   r.   )r   r  r1  r  rN   r	   )r  r  rN   r$   )r  r  rN   rO   )r  rO   rN   r   )r  r
  rN   r  )rN   r   )
r]  rA  r   r;   r  r   r  rA  rN   r$   )r  r   r,  r   rN   r$   )rN   rJ   )
r  r  r0  r1  r2  rM   r3  r  rN   r$   )
r=  rA  r   rA  r>  r   r?  r   rN   r$   )Mrh   
__module____qualname__r   r   ra   rX   classmethodrp   r   r   staticmethodrc   rk   r   r   r   r   r   r   r   propertyr   r   r   r   r   r   _iter_columnsr   r   r   r   r   r   r   r  r  rr   r  r  r   exploder   r  r   r/  r8  r>  rT  	join_asofrU  rf  ry  r  r  r  r  r  r  rd  r  r  r  r  r  r  r  r  r  r  r'  r.  r   r<  rH  pivotrv   rY   rW   rG   rG   Q   s        %,O */            8 8 8 [8 #? #? #? [#?J 8 8 8 [80 ) ) ) \) O O O [O 8 8 8 [8"5 5 5 5
" " " "      Y Y Y Y KO 
 
 
 
 
 

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

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

A A A A	< 	< 	< 	<L L L L$G G G G/
 /
 /
 /
b  !!IY Y Y Y! ! ! !
 
 
 
"
 
 
 
' ' ' '* * * *
       QQQ XQPPP XP7 7 7 7K K K K
 
 
 

 
 
 
P P P P ,0; (,	; ; ; ; ; ;z!" !" !" !"FK K K KV V V V&D D D D* * * *
 /// X/@@@ X@   = = = =. '+1= 1= 1= 1= 1= 1=fV V V V   V V V V$F F F F, OEEErY   rG   )r   r'   rJ   r,   )^
__future__r   collections.abcr   r   r   r   typingr   r	   r
   r   r   pyarrowre   pyarrow.computecomputer  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pdr  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   rv   rY   rW   <module>rl     s   " " " " " " " C C C C C C C C C C C C > > > > > > > > > > > > > >           . . . . . .              / . . . . .                        4 3 3 3 3 3 * * * * * * -((((((      9999999999......555555888888        XWWWWWWW777777222222DDDDDDDD88888888%%%%%%                        "		H 	 	 	 	r r r r rLMr r r r rrY   