o
    hc                     @  s  U d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d d	lm
Z
 d d
lmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dlm!Z! d dlm"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dlm&Z& d dlm'Z' erJd d l(m)Z) d d!lm*Z* d d"lm+Z+ d dl,Z-d dl.Z/d d#l0m1Z1 d d$l0m2Z2 d d%l0m3Z3 d d&l4m5Z5 d d'l4m6Z6 d d(l7m8Z8 d d)l9m:Z: d d*l;m<Z< d d+l=m>Z> d d,l=m?Z? d d-l=m@Z@ d d.l=mAZA d d/l=mBZB d d0l=mCZC d d1l=mDZD d d2l=mEZE d d3lmFZF d d4lmGZG e+d5ZHe+d6ZId7ZJd8eKd9< 	 G d:d; d;ZLG d<d= d=ZMdS )>    )annotations)TYPE_CHECKING)Any)Iterator)Literal)Mapping)Sequence)Sized)cast)overloadN)PolarsNamespace)PolarsSeries)catch_polars_exception)extract_args_kwargs)native_to_narwhals_dtype)is_numpy_array_1d)ColumnNotFoundError)Implementation)_into_arrow_table)convert_str_slice_to_int_slice)is_compliant_series)is_index_selector)is_range)is_sequence_like)is_slice_index)is_slice_none)parse_columns_to_drop)parse_version)requires)validate_backend_version)
ModuleType)Callable)TypeVar)Self)	TypeAlias)TypeIsPolarsGroupByPolarsLazyGroupBy)IntoArrowTable)DTypeSchema)CompliantDataFrame)CompliantLazyFrame)JoinStrategy)MultiColSelector)MultiIndexSelector)PivotAgg)SingleIndexSelector)_2DArray)Version)_FullContextTRzCallable[..., R]r$   Methodc                   @  s  e Zd ZU ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded< ded < d!ed"< dd+d,Zedd2d3Zedd7d8Zedd<d=Z	edd>d?Z
eddBdCZeddDdEZddGdHZddIdJZddLdMZddOdPZddQdRZddSdTZeddWdXZeddYdXZedd[dXZdd^dXZdd`daZddcddZddedfZddidjZ	kddkdlddqdrZddkdlddsdtZddvdwZeddydzZdd|d}ZdddZdddZ dddZ!dddZ"edddZ#edddZ$dkddddZ%edddZ&edddZ&dddZ&dddZ'dddZ(dddZ)dddZ*e+,ddddZ-dddZ.dddĄZ/dkS )PolarsDataFrameMethod[Self]clonez)Method[CompliantDataFrame[Any, Any, Any]]collect
drop_nullszMethod[int | float]estimated_sizeexplodefiltergather_everyzMethod[Any]itemz?Method[Iterator[tuple[Any, ...]] | Iterator[Mapping[str, Any]]]	iter_rowszMethod[PolarsSeries]	is_unique	join_asofrenamezMethod[tuple[Any, ...]]rowz?Method[Sequence[tuple[Any, ...]] | Sequence[Mapping[str, Any]]]rowssampleselectsortzMethod[pa.Table]to_arrowzMethod[pd.DataFrame]	to_pandasuniquewith_columns	write_csvzMethod[None]write_parquetdfpl.DataFramebackend_versiontuple[int, ...]versionr6   returnNonec                C  ,   || _ || _tj| _|| _t| j| j d S N_native_frame_backend_versionr   POLARS_implementation_versionr   selfrT   rV   rX    re   N/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_polars/dataframe.py__init__d   
   zPolarsDataFrame.__init__datar*   contextr7   r#   c               C  s:   |j dkrt|}ntdtt||}| j||dS )N)      rU   rj   )r_   pl	DataFramer
   
from_arrowr   from_native)clsri   rj   nativere   re   rf   rp   q   s   
zPolarsDataFrame.from_arrowMapping[str, Any]schema#Mapping[str, DType] | Schema | Nonec               C  s:   ddl m} |d ur|| n|}| jt|||dS Nr   r,   rm   )narwhals.schemar-   	to_polarsrq   rn   	from_dictrr   ri   rj   ru   r-   	pl_schemare   re   rf   rz   y   s   	zPolarsDataFrame.from_dictobjpl.DataFrame | AnyTypeIs[pl.DataFrame]c                 C     t | tjS r\   )
isinstancern   ro   r}   re   re   rf   
_is_native      zPolarsDataFrame._is_nativec               C     | ||j |jdS NrV   rX   r_   rb   rr   ri   rj   re   re   rf   rq         
zPolarsDataFrame.from_nativer5   3Mapping[str, DType] | Schema | Sequence[str] | Nonec               C  s@   ddl m} t|t|fr|| n|}| jt|||dS rw   )rx   r-   r   r   ry   rq   rn   
from_numpyr{   re   re   rf   r      s   	zPolarsDataFrame.from_numpyc                 C     | j S r\   r^   rd   re   re   rf   rs         zPolarsDataFrame.nativestrc                 C     dS )Nr;   re   r   re   re   rf   __repr__      zPolarsDataFrame.__repr__c                 C     | S r\   re   r   re   re   rf   __narwhals_dataframe__   r   z&PolarsDataFrame.__narwhals_dataframe__r   c                 C     t | j| jdS r   r   r_   rb   r   re   re   rf   __narwhals_namespace__      z&PolarsDataFrame.__narwhals_namespace__r    c                 C  .   | j tju r| j  S dt| j  }t|NzExpected polars, got: ra   r   r`   to_native_namespacetypeAssertionErrorrd   msgre   re   rf   __native_namespace__      
z$PolarsDataFrame.__native_namespace__c                 C     | j | j| j|dS r   	__class__rs   r_   rd   rX   re   re   rf   _with_version      
zPolarsDataFrame._with_versionc                 C     | j || j| jdS r   r   r_   rb   rd   rT   re   re   rf   _with_native   r   zPolarsDataFrame._with_native	pl.Seriesr   c                 C     d S r\   re   rd   r}   re   re   rf   _from_native_object   r   z#PolarsDataFrame._from_native_objectc                 C  r   r\   re   r   re   re   rf   r      r   r8   c                 C  r   r\   re   r   re   re   rf   r      r   pl.Series | pl.DataFrame | TSelf | PolarsSeries | Tc                 C  s2   t |tjrtj|| dS | |r| |S |S Nrm   )r   rn   Seriesr   rq   r   r   r   re   re   rf   r      s
   

intc                 C  s
   t | jS r\   )lenrs   r   re   re   rf   __len__      
zPolarsDataFrame.__len__nc                 C     |  | j|S r\   )r   rs   headrd   r   re   re   rf   r         zPolarsDataFrame.headc                 C  r   r\   )r   rs   tailr   re   re   rf   r      r   zPolarsDataFrame.tailattrr   c                      d fdd}|S )Nargsr   kwargsrY   c               
     s   t | |\}}ztj |i |W S  tjjy2 } z|dj d}t||d }~w tyD } zt	|j
d d }~ww )Nz+

Hint: Did you mean one of these columns: ?)r   r   getattrrs   rn   
exceptionsr   columns	Exceptionr   r_   )r   r   poskwdser   r   rd   re   rf   func   s   
z)PolarsDataFrame.__getattr__.<locals>.funcr   r   r   r   rY   r   re   rd   r   r   re   r   rf   __getattr__   s   
zPolarsDataFrame.__getattr__N)copydtype
Any | Noner   bool | Nonec                C  s@   | j dk r|d urd}t|| j dk r| j|S | j|S )N)r         z;`copy` in `__array__` is only supported for Polars>=0.20.28)r_   NotImplementedErrorrs   	__array__)rd   r   r   r   re   re   rf   r      s   
zPolarsDataFrame.__array__c                C  s
   | j  S r\   )rs   to_numpy)rd   r   r   re   re   rf   r      r   zPolarsDataFrame.to_numpydict[str, DType]c                   sD    j dk r fdd jj D S  j } fdd| D S )Nrk   c                   "   i | ]\}}|t | j jqS re   r   rb   r_   .0namer   r   re   rf   
<dictcomp>       
z2PolarsDataFrame.collect_schema.<locals>.<dictcomp>c                   r   re   r   r   r   re   rf   r     r   )r_   rs   ru   itemscollect_schema)rd   collected_schemare   r   rf   r      s   




zPolarsDataFrame.collect_schematuple[int, int]c                 C     | j jS r\   )rs   shaper   re   re   rf   r   
     zPolarsDataFrame.shapetuple[SingleIndexSelector | MultiIndexSelector[PolarsSeries], MultiIndexSelector[PolarsSeries] | MultiColSelector[PolarsSeries]]c           
      C  s2  |\}}| j dkr*t|r|jn|}t|r|jn|}||f}| j|}| |S t|tr3t|n|}t|tr>t|n|}t|rH|	 }| j}t
|st|tr^t|dkr^|  S t|rt|sjt|rz|| jt|j|j|j }nOt|r|d d |j f }n?|d d |f }n6t|tr|| jtt|| j  }n"t|r||j }nt|r||}ndt| }	t|	t
|st|tr||gd d f }n7t|ttfr||d d f }n't|r||jd d f }nt|r	||d d f }ndt| }	t|	| |S )N)r   r      r   z'Unreachable code, got unexpected type: )r_   r   rs   __getitem__r   r   tuplelistr   tolistr   r	   r   rL   r   r   r   r   slicestartstopstepto_listr   r   r   r   r   ranger   )
rd   rD   rJ   r   rows_nativecolumns_nativeselectorselectedrs   r   re   re   rf   r     s^   






zPolarsDataFrame.__getitem__column_namesc                 G     |  | jj| S r\   r   rs   rL   rd   r   re   re   rf   simple_selectO  r   zPolarsDataFrame.simple_selectexprsc                 G  
   | j | S r\   rL   rd   r   re   re   rf   	aggregateR  r   zPolarsDataFrame.aggregater   c                 C  s   t j| j|| dS r   )r   rq   rs   
get_columnrd   r   re   re   rf   r  U  s   zPolarsDataFrame.get_columnIterator[PolarsSeries]c                 c  s&    | j  D ]
}tj|| dV  qd S r   )rs   iter_columnsr   rq   )rd   seriesre   re   rf   r  X  s   zPolarsDataFrame.iter_columns	list[str]c                 C  r   r\   rs   r   r   re   re   rf   r   \  r   zPolarsDataFrame.columnsc                   s    fdd j j D S )Nc                   r   re   r   r   r   re   rf   r   b      z*PolarsDataFrame.schema.<locals>.<dictcomp>rs   ru   r   r   re   r   rf   ru   `  s   

zPolarsDataFrame.schema)backendr  Implementation | NoneCompliantLazyFrame[Any, Any]c                C  s   |d u s	|t ju rtj| j | dS |t ju r2dd l}ddlm	} | j}||
dt|| jdS |t ju rWdd l}dd lm} ddlm} ||| j t|| jdS t)Nrm   r   )DuckDBLazyFramerT   r   )DaskLazyFrame)r   r`   PolarsLazyFramerq   rs   lazyDUCKDBduckdbnarwhals._duckdb.dataframer  tabler   rb   DASKdaskdask.dataframe	dataframenarwhals._dask.dataframer  from_pandasrO   r   )rd   r  r  r  rT   r  ddr  re   re   rf   r  g  s*   

zPolarsDataFrame.lazy	as_seriesLiteral[True]dict[str, PolarsSeries]c                C  r   r\   re   rd   r   re   re   rf   to_dict  r   zPolarsDataFrame.to_dictLiteral[False]dict[str, list[Any]]c                C  r   r\   re   r#  re   re   rf   r$    r   bool.dict[str, PolarsSeries] | dict[str, list[Any]]c                  s.   |r fdd j   D S  j jddS )Nc                   s    i | ]\}}|t j| d qS )rm   )r   rq   )r   r   colr   re   rf   r     s    z+PolarsDataFrame.to_dict.<locals>.<dictcomp>F)r   )rs   r$  r   r#  re   r   rf   r$    s
   
keysdrop_null_keysr'   c                G     ddl m} || ||dS )Nr   r&   r+  )narwhals._polars.group_byr'   )rd   r+  r*  r'   re   re   rf   group_by     zPolarsDataFrame.group_byc                 C  .   | j dk r| | j|S | | j|S N)r   r      r_   r   rs   with_row_countwith_row_indexr  re   re   rf   r6       
zPolarsDataFrame.with_row_indexr   Sequence[str]strictc                C  s    t | ||d}| | j|S )N)compliant_framer   r9  )r   r   rs   drop)rd   r   r9  to_dropre   re   rf   r;    s   zPolarsDataFrame.droponSequence[str] | Noneindexvariable_name
value_namec                 C  >   | j dk r| | jj||||dS | | jj||||dS Nrk   r   r   )id_vars
value_varsr@  rA  )r=  r?  r@  rA  r_   r   rs   meltunpivotrd   r=  r?  r@  rA  re   re   rf   rI       
zPolarsDataFrame.unpivotr   valuesaggregate_functionPivotAgg | Nonesort_columns	separatorc          	   
   C  sN   z| j j||||||d}W n ty! } zt|| jd d }~ww | |S )N)r?  rL  rM  rO  rP  )rs   pivotr   r   r_   r   )	rd   r=  r?  rL  rM  rO  rP  resultr   re   re   rf   rQ    s   

zPolarsDataFrame.pivotc                 C  r   r\   )rs   r   re   re   rf   ry     s   zPolarsDataFrame.to_polarsotherhowr0   left_onright_onsuffixc             
   C  sb   | j dk r|dkrdn|}z| | jj|j||||dW S  ty0 } zt|| j d d }~ww N)r   r      fullouter)rS  rT  rU  rV  rW  )r_   r   rs   joinr   r   )rd   rS  rT  rU  rV  rW  
how_nativer   re   re   rf   r\    s    
	zPolarsDataFrame.join)rT   rU   rV   rW   rX   r6   rY   rZ   )ri   r*   rj   r7   rY   r#   )ri   rt   rj   r7   ru   rv   rY   r#   )r}   r~   rY   r   )ri   rU   rj   r7   rY   r#   )ri   r5   rj   r7   ru   r   rY   r#   )rY   rU   rY   r   rY   r#   rY   r   rY   r    rX   r6   rY   r#   )rT   rU   rY   r#   )r}   r   rY   r   )r}   rU   rY   r#   )r}   r8   rY   r8   )r}   r   rY   r   )rY   r   )r   r   rY   r#   r   r   rY   r   r\   )r   r   r   r   rY   r5   )r   r   r   r   rY   r5   rY   r   )rY   r   )rD   r   rY   r   r   r   rY   r#   r   r   rY   r#   )r   r   rY   r   rY   r  rY   r
  )r  r  rY   r  )r   r!  rY   r"  )r   r%  rY   r&  )r   r'  rY   r(  )r*  r   r+  r'  rY   r'   r   r   rY   r#   r   r8  r9  r'  rY   r#   
r=  r>  r?  r>  r@  r   rA  r   rY   r#   )r=  r8  r?  r>  rL  r>  rM  rN  rO  r'  rP  r   rY   r#   rS  r#   rT  r0   rU  r>  rV  r>  rW  r   rY   r#   )0__name__
__module____qualname____annotations__rg   classmethodrp   rz   staticmethodr   rq   r   propertyrs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   ru   r  r$  r/  r6  r;  rI  r   rV   rQ  ry   r\  re   re   re   rf   r;   I   s   
 
















A








r;   c                   @  sp  e Zd ZU ded< ded< ded< ded< ded< ded< ded< ded	< ded
< ded< ded< ded< ded< dnddZedoddZedpd#d$Zdqd&d'Z	drd(d)Z
dsd+d,Zdtd.d/Zdud0d1Zdvd2d3Zdwd5d6Zdxd8d9Zedyd:d;Zedzd=d>Zed{d@dAZd{dBdCZd|dHdIZd}dNdOZd~dQdRZddVdWZdd]d^Zdd`daZddcddZddkdlZdmS )r  r<   r?   rA   rB   rC   r   rG   rH   rL   rM   r   rP   rQ   r   _evaluate_exprrT   pl.LazyFramerV   rW   rX   r6   rY   rZ   c                C  r[   r\   r]   rc   re   re   rf   rg     rh   zPolarsLazyFrame.__init__r}   pl.LazyFrame | AnyTypeIs[pl.LazyFrame]c                 C  r   r\   )r   rn   	LazyFramer   re   re   rf   r     r   zPolarsLazyFrame._is_nativeri   rj   r7   r#   c               C  r   r   r   r   re   re   rf   rq     r   zPolarsLazyFrame.from_nativer   c                 C  r   )Nr  re   r   re   re   rf   r     r   zPolarsLazyFrame.__repr__c                 C  r   r\   re   r   re   re   rf   __narwhals_lazyframe__  r   z&PolarsLazyFrame.__narwhals_lazyframe__r   c                 C  r   r   r   r   re   re   rf   r     r   z&PolarsLazyFrame.__narwhals_namespace__r    c                 C  r   r   r   r   re   re   rf   r   #  r   z$PolarsLazyFrame.__native_namespace__c                 C  r   r   r   r   re   re   rf   r   *  r   zPolarsLazyFrame._with_nativec                 C  r   r   r   r   re   re   rf   r   /  r   zPolarsLazyFrame._with_versionr   c                   r   )Nr   r   r   rY   c               
     sX   t | |\}}ztj |i |W S  tjjy+ } ztt||d }~ww r\   )r   r   r   rs   rn   r   r   r   )r   r   r   r   r   r   re   rf   r   5  s   z)PolarsLazyFrame.__getattr__.<locals>.funcr   re   r   re   r   rf   r   4  s   zPolarsLazyFrame.__getattr__r  c                 c  s    |  | j E d H  d S r\   )r>   ra   r  r   re   re   rf   _iter_columns>  s   zPolarsLazyFrame._iter_columnsc                 C  r   r\   r   r   re   re   rf   rs   A  r   zPolarsLazyFrame.nativer
  c                 C  r   r\   r  r   re   re   rf   r   E  r   zPolarsLazyFrame.columnsr   c                   s    j j} fdd| D S )Nc                   r   re   r   r   r   re   rf   r   L  r  z*PolarsLazyFrame.schema.<locals>.<dictcomp>r  )rd   ru   re   r   rf   ru   I  s   
zPolarsLazyFrame.schemac              
     sp    j dk r fdd jj D S z j }W n ty, } zt| j d d }~ww  fdd| D S )Nr   c                   r   re   r   r   r   re   rf   r   S  r   z2PolarsLazyFrame.collect_schema.<locals>.<dictcomp>c                   r   re   r   r   r   re   rf   r   ^  r   )r_   rs   ru   r   r   r   r   )rd   r   r   re   r   rf   r   Q  s   



zPolarsLazyFrame.collect_schemar  r  r   !CompliantDataFrame[Any, Any, Any]c           
   
   K  s   z| j jd	i |}W n ty } zt|| jd d }~ww |d u s(|tju r/tj|| dS |tj	u rMdd l
}ddlm} || tj	t|| jddS |tju ridd l}ddlm} || t|| jddS d| }	t|	)
Nrm   r   )PandasLikeDataFrameF)implementationrV   rX   validate_column_names)ArrowDataFrame)rV   rX   r~  zUnsupported `backend` value: re   )rs   r>   r   r   r_   r   r`   r;   rq   PANDASpandasnarwhals._pandas_like.dataframer|  rO   r   rb   PYARROWpyarrownarwhals._arrow.dataframer  rN   
ValueError)
rd   r  r   rR  r   pdr|  par  r   re   re   rf   r>   e  s:   


zPolarsLazyFrame.collectr*  r+  r'  r)   c                G  r,  )Nr   r(   r-  )r.  r)   )rd   r+  r*  r)   re   re   rf   r/    r0  zPolarsLazyFrame.group_byr   c                 C  r1  r2  r4  r  re   re   rf   r6    r7  zPolarsLazyFrame.with_row_indexr   r8  r9  c                C  s2   | j dk r| | j|S | | jj||dS )NrD  )r9  )r_   r   rs   r;  )rd   r   r9  re   re   rf   r;    s   
zPolarsLazyFrame.dropr=  r>  r?  r@  rA  c                 C  rB  rC  rG  rJ  re   re   rf   rI    rK  zPolarsLazyFrame.unpivotr   c                 G  r   r\   r   r   re   re   rf   r     r   zPolarsLazyFrame.simple_selectr   c                 G  r  r\   r  r  re   re   rf   r    r   zPolarsLazyFrame.aggregaterS  rT  r0   rU  rV  rW  c             	   C  s8   | j dk r|dkrdn|}| | jj|j||||dS rX  )r_   r   rs   r\  )rd   rS  rT  rU  rV  rW  r]  re   re   rf   r\    s   
zPolarsLazyFrame.joinN)rT   ru  rV   rW   rX   r6   rY   rZ   )r}   rv  rY   rw  )ri   ru  rj   r7   rY   r#   r^  r_  r`  ra  )rT   ru  rY   r#   rb  rc  rg  )rY   ru  rh  rd  )r  r  r   r   rY   r{  )r*  r   r+  r'  rY   r)   ri  rj  rk  re  rf  rl  )rm  rn  ro  rp  rg   rr  r   rq  rq   r   ry  r   r   r   r   r   rz  rs  rs   r   ru   r   r>   r/  r6  r;  rI  r   r  r\  re   re   re   rf   r    sT   
 












)




r  )N
__future__r   typingr   r   r   r   r   r   r	   r
   r   polarsrn   narwhals._polars.namespacer   narwhals._polars.seriesr   narwhals._polars.utilsr   r   r   narwhals.dependenciesr   narwhals.exceptionsr   narwhals.utilsr   r   r   r   r   r   r   r   r   r   r   r   r   typesr    r!   r"   r  r  r  r  typing_extensionsr#   r$   r%   r.  r'   r)   narwhals._translater*   narwhals.dtypesr+   rx   r-   narwhals.typingr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   rp  r;   r  re   re   re   rf   <module>   s       +