o
    h                     @  sV  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 zd dlm  mZ W n eyf   d dlZY nw erd dlmZ d dlmZ d dlmZ d dlmZ d@ddZ dAddZ!dBd!d"Z"dCd+d,Z#dDd1d2Z$dEd8d9Z%dFd<d=Z&dFd>d?Z'dS )G    )annotations)TYPE_CHECKING)Any)Sequence)!evaluate_output_names_and_aliases)select_columns_by_name)
get_pandas)get_pyarrow)Implementation)Version)import_dtypes_module)isinstance_or_issubclass)parse_versionN)DaskLazyFrameDaskExpr)DTypedfr   objDaskExpr | objectreturndx.Series | objectc                 C  s<   ddl m} t||r|| }t|dksJ |d S |S )Nr   r      )narwhals._dask.exprr   
isinstance_calllen)r   r   r   results r   H/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_dask/utils.pymaybe_evaluate_expr   s   

r    exprsr   list[tuple[str, dx.Series]]c                G  sj   g }|D ].}| | }t|| g \}}t|t|kr*d| dt| d}t||t|| q|S )NzInternal error: got aliases z, but only got z results)r   r   r   AssertionErrorextendzip)r   r!   native_resultsexprnative_series_list_aliasesmsgr   r   r   evaluate_exprs(   s   
r,   seriesSequence[dx.Series]c                   s    fdd|D S )Nc                   s.   g | ]}t |tjr|n jj|d d qS ))_tmpr/   )r   dxSeries_native_frameassign).0sr   r   r   
<listcomp>7   s     z/align_series_full_broadcast.<locals>.<listcomp>r   )r   r-   r   r6   r   align_series_full_broadcast4   s   
r8   framedd.DataFramenamestrbackend_versiontuple[int, ...]implementationr
   c                 C  sN   | j }| jdi |di} t| jdi || | jddd i|g|||S )Nr   blelloch)methodr   )columnsr3   r   cumsum)r9   r;   r=   r?   original_colsr   r   r   add_row_index=   s   "rE   lhs	dx.SeriesrhsNonec                 C  sT   zdd l m  m} W n ty   dd l}Y nw |j| j|js(d}t|d S )Nr   zOObjects are not co-aligned, so this operation is not supported for Dask backend)dask.dataframe.dask_expr	dataframe	dask_exprModuleNotFoundErrorr'   are_co_aligned_exprRuntimeError)rF   rH   r0   r+   r   r   r   validate_comparandM   s   rQ   dtypeDType | type[DType]versionr   r   c                 C  s  t |}t| |jrdS t| |jrdS t| |jrdS t| |jr$dS t| |jr,dS t| |jr4dS t| |jr<dS t| |j	rDdS t| |j
rLd	S t| |jrTd
S t| |jrrt  }d urpt|dkrpt d urndS dS dS t| |jrzdS t| |jr|tju rd}t|t| |jrdd l}|j| jddS d}t|t| |jrdS t| |jrdS t| |jrdS t| |jrdS t| |jrd}t|S t| |jrd}t|S t| |j rd}t|S t| |j!rd}t|S t| |j"rd}t|S d|  }t#|)Nfloat64float32int64int32int16int8uint64uint32uint16uint8)   r   r   zstring[pyarrow]zstring[python]objectboolz9Converting to Enum is not supported in narwhals.stable.v1r   T)orderedz9Can not cast / initialize Enum without categories presentcategoryzdatetime64[us]zdate32[day][pyarrow]ztimedelta64[ns]z-Converting to List dtype is not supported yetz/Converting to Struct dtype is not supported yetz.Converting to Array dtype is not supported yetz-Converting to Time dtype is not supported yetz/Converting to Binary dtype is not supported yetzUnknown dtype: )$r   r   Float64Float32Int64Int32Int16Int8UInt64UInt32UInt16UInt8Stringr   r   r	   BooleanEnumr   V1NotImplementedErrorr   pandasCategoricalDtype
categories
ValueErrorCategoricalDatetimeDateDurationListStructArrayTimeBinaryr#   )rR   rT   dtypespdr+   r   r   r   narwhals_to_native_dtypeb   s~   


r   s1s2c                 C  s   | |  | jS Nrenamer;   r   r   r   r   r   name_preserving_sum      r   c                 C  s   | |  | jS r   r   r   r   r   r   name_preserving_div   r   r   )r   r   r   r   r   r   )r   r   r!   r   r   r"   )r   r   r-   r   r   r.   )
r9   r:   r;   r<   r=   r>   r?   r
   r   r:   )rF   rG   rH   rG   r   rI   )rR   rS   rT   r   r   r   )r   rG   r   rG   r   rG   )(
__future__r   typingr   r   r   narwhals._expression_parsingr   narwhals._pandas_like.utilsr   narwhals.dependenciesr   r	   narwhals.utilsr
   r   r   r   r   rJ   rK   rL   r0   rM   dask.dataframeddnarwhals._dask.dataframer   r   r   narwhals.dtypesr   r    r,   r8   rE   rQ   r   r   r   r   r   r   r   <module>   s>    




	


H