
    gi                    4   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r"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Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZddZddZ ddZ!ddZ"ddZ#y)     )annotations)TYPE_CHECKING)Any)select_columns_by_name)
get_pandas)get_pyarrow)InvalidIntoExprError)Implementation)import_dtypes_module)isinstance_or_issubclass)parse_versionN)DaskLazyFrameDaskExpr)DType)Versionc                    ddl m} t        ||      rf|j                  |       }t	        |      dk7  rd}t        |      |d   }|j                  st        | j                  |       |j                  r|d   S |S |S )Nr   r      z^Multi-output expressions (e.g. `nw.all()` or `nw.col('a', 'b')`) not supported in this context)	narwhals._dask.exprr   
isinstance_calllenNotImplementedError_returns_scalarvalidate_comparand_native_frame)dfobjr   resultsmsgresults         I/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_dask/utils.pymaybe_evaluater#      sw    ,#x ))B-w<1rC%c**""r//8!9J    c                   i }|D ]  }t        |d      r|j                  |       }n?t        |t              r| j                  |   g}nt        j                  t        |            t        |dd      }|D ]  }|r|d   n|||j                  <     |j                         D ]Q  \  }}	|	j                  |       }t        |      dk7  rd}
t        |
      t        |	dd      }|D ]  }|r|d   n|||<    S |S )N__narwhals_expr__r   Fr   r   z-Named expressions must return a single column)hasattrr   r   strr   r	   from_invalid_typetypegetattrnameitemsr   AssertionError)r   exprsnamed_exprsr   expr_resultsreturn_scalar_resultr,   valuer    s              r"   parse_exprs_and_named_exprsr6   +   s     G4,-zz"~Hc"((./H&88dDD&7?G2?GAJWGGLL!    #((*e;;r?x=AAC %%'8%@G*7GAJWGDM   + Nr$   c           
         | j                   } | j                  di |di} t         | j                  di || |   j                  d      dz
  i|g|||      S )Nr   blelloch)method )columnsassignr   cumsum)framer,   backend_versionimplementationoriginal_colss        r"   add_row_indexrB   E   so     MMMELL%D!9%E!IeDk00
0CaGHI		 r$   c                    dd l }|j                  j                  | j                  |j                        sd}t        |      y )Nr   zOObjects are not co-aligned, so this operation is not supported for Dask backend)	dask_expr_exprare_co_alignedRuntimeError)lhsrhsrD   r    s       r"   r   r   U   s:    ??))#))SYY? `3 @r$   c                \   t        |      }t        | |j                        ryt        | |j                        ryt        | |j                        ryt        | |j
                        ryt        | |j                        ryt        | |j                        ryt        | |j                        ryt        | |j                        ryt        | |j                        ry	t        | |j                        ry
t        | |j                        r:t               x}-t        |j                        t        d      k\  rt!               yyyt        | |j"                        ryt        | |j$                        ryt        | |j&                        ryt        | |j(                        ryt        | |j*                        ryt        | |j,                        rd}t/        |      S t        | |j0                        rd}t/        |      S t        | |j2                        rd}t/        |      S d|  }t5        |      )Nfloat64float32int64int32int16int8uint64uint32uint16uint8z2.0.0zstring[pyarrow]zstring[python]objectbool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Unknown dtype: )r   r   Float64Float32Int64Int32Int16Int8UInt64UInt32UInt16UInt8Stringr   r   __version__r   BooleanCategoricalDatetimeDateDurationListr   StructArrayr.   )dtypeversiondtypespdr    s        r"   narwhals_to_native_dtyperp   g   s   !'*Fv~~6v~~6v||4v||4v||4v{{3v}}5v}}5v}}5v||4v}}5,B+NN1
7#1$ }((#v~~6v'9'9:v7v{{3%v7 v{{3="3''v}}5?"3''v||4>"3''E7
#C

r$   c                >    | |z   j                  | j                        S Nrenamer,   s1s2s     r"   name_preserving_sumrx          GBGG$$r$   c                >    | |z  j                  | j                        S rr   rs   ru   s     r"   name_preserving_divr{      ry   r$   c                8    | j                   xr t        |dd      S )Nr   T)r   r+   )rH   rI   s     r"   binary_operation_returns_scalarr}      s     H730A4#HHr$   )r   r   r   r   returnr   )r   r   r/   r   r0   r   r~   zdict[str, dask_expr.Series])
r>   dd.DataFramer,   r(   r?   ztuple[int, ...]r@   r
   r~   r   )rH   dask_expr.SeriesrI   r   r~   None)rl   zDType | type[DType]rm   r   r~   r   )rv   r   rw   r   r~   r   )rH   r   rI   zDaskExpr | Anyr~   rV   )$
__future__r   typingr   r   narwhals._pandas_like.utilsr   narwhals.dependenciesr   r   narwhals.exceptionsr	   narwhals.utilsr
   r   r   r   dask.dataframe	dataframeddrD   narwhals._dask.dataframer   r   r   narwhals.dtypesr   r   r#   r6   rB   r   rp   rx   r{   r}   r:   r$   r"   <module>r      s    "    > , - 4 ) / 3 (6,%&$"36 4
 % #	
   $3l%%Ir$   