o
    $&]iC1                     @  s8  d dl mZ d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlZd dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZmZ d dlmZm Z  d dl!m"Z"m#Z# e
rd dl$m%Z%m&Z& d dl'm  m(Z) d dl!m*Z* d dl+m,Z,m-Z-m.Z. G dd deeeej/f eeef Z0dS )    )annotationsN)datedatetime)reduce)chain)TYPE_CHECKINGcast)DepthTrackingNamespaceLazyNamespaceDaskLazyFrameDaskExpr)DaskSelectorNamespace)align_series_full_broadcastnarwhals_to_native_dtypevalidate_comparand)combine_alias_output_namescombine_evaluate_output_names)Implementation
zip_strict)IterableIterator)Version)ConcatMethod	IntoDTypeNonNestedLiteralc                   @  s   e Zd ZU ejZded< ed>ddZed?dd	Z	ed@ddZ
dAddZdBddZdCddZdDddZdDd d!ZdEd"d#ZdFd)d*ZdEd+d,ZdEd-d.ZdEd/d0ZdGd3d4ZdEd5d6Z	7dHdId<d=Zd7S )JDaskNamespacer   _implementationreturnr   c                 C  s
   t | S N)r   from_namespaceself r$   V/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/narwhals/_dask/namespace.py	selectors*   s   
zDaskNamespace.selectorstype[DaskExpr]c                 C     t S r    r   r"   r$   r$   r%   _expr.      zDaskNamespace._exprtype[DaskLazyFrame]c                 C  r(   r    r   r"   r$   r$   r%   
_lazyframe2   r*   zDaskNamespace._lazyframeversionr   Nonec                C  s
   || _ d S r    )_version)r#   r-   r$   r$   r%   __init__6   s   
zDaskNamespace.__init__valuer   dtypeIntoDType | Noner   c                   s*   d
 fdd}j |dd d jd	S )Ndfr   r   list[dx.Series]c                   s    d urt  j}tjg|dd}nttr*tts*d}tjg|dd}ntjgdd}| jj}t	j
||d}|d  gS )Nliteral)r2   namezdate32[pyarrow])r7   )npartitionsr   )r   r/   pdSeries
isinstancer   r   _native_framer8   ddfrom_pandas	to_series)r4   native_dtypenative_pd_seriesr8   dask_seriesr2   r#   r1   r$   r%   func:   s   zDaskNamespace.lit.<locals>.funcc                 S     dgS Nr6   r$   _dfr$   r$   r%   <lambda>M       z#DaskNamespace.lit.<locals>.<lambda>evaluate_output_namesalias_output_namesr-   r4   r   r   r5   r)   r/   )r#   r1   r2   rD   r$   rC   r%   lit9   s   zDaskNamespace.litc                 C  s"   d
dd}| j |dd d | jd	S )Nr4   r   r   r5   c                 S  s   | j | jd  j gS )Nr   )r<   columnssizer?   r4   r$   r$   r%   rD   S   s   zDaskNamespace.len.<locals>.funcc                 S  rE   )Nlenr$   rG   r$   r$   r%   rI   Y   rJ   z#DaskNamespace.len.<locals>.<lambda>rK   rN   rO   )r#   rD   r$   r$   r%   rT   R   s   
zDaskNamespace.lenexprsignore_nullsboolc                  ,   d fdd}| j |t  t  | jdS )	Nr4   r   r   r5   c                   D   t  fddD }rdd |D }ttjt g|R  gS )Nc                 3      | ]}| V  qd S r    r$   .0erS   r$   r%   	<genexpr>`       z=DaskNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>c                 s  (    | ]}|j d kr|n|dV  qdS )rW   TNr2   fillnar\   sr$   r$   r%   r^   e      & )r   from_iterabler   operatorand_r   r4   seriesrU   rV   rS   r%   rD   _   s   z*DaskNamespace.all_horizontal.<locals>.funccallrL   rM   r-   rN   r)   r   r   r/   r#   rV   rU   rD   r$   rk   r%   all_horizontal^   s   	zDaskNamespace.all_horizontalc                  rX   )	Nr4   r   r   r5   c                   rY   )Nc                 3  rZ   r    r$   r[   rS   r$   r%   r^   q   r_   z=DaskNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>c                 s  r`   )rW   FNra   rc   r$   r$   r%   r^   s   re   )r   rf   r   rg   or_r   ri   rk   rS   r%   rD   p   s   z*DaskNamespace.any_horizontal.<locals>.funcrl   rN   rn   ro   r$   rk   r%   any_horizontalo   s   zDaskNamespace.any_horizontalc                   *   d fdd}| j |t  t  | jdS )	Nr4   r   r   r5   c                   6   t  g fddD R  }tj|ddjddgS )Nc                 3  "    | ]}| D ]}|V  qqd S r    r$   r\   r)   rd   rS   r$   r%   r^           z=DaskNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>   axis)r   r=   concatsumri   rU   rS   r%   rD   ~   s   z*DaskNamespace.sum_horizontal.<locals>.funcrl   rN   rn   r#   rU   rD   r$   r}   r%   sum_horizontal}      zDaskNamespace.sum_horizontalitemsIterable[DaskLazyFrame]howr   r   c          	      C  s   |sd}t |dd |D }|d j}|dkrYt|dd  ddD ])\}}|j}t|t|kr7||k sKd|  d	| d
|  d}t|q"ttj	|ddd| j
dS |dkrjttj	|ddd| j
dS t)NzNo items to concatenatec                 S  s   g | ]}|j qS r$   )r<   )r\   ir$   r$   r%   
<listcomp>   s    z(DaskNamespace.concat.<locals>.<listcomp>r   verticalrx   )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
inner)rz   join)r-   diagonalouter)AssertionErrorrQ   	enumeraterT   allto_list	TypeErrorr   r=   r{   r/   NotImplementedError)	r#   r   r   msgdfscols_0r   r4   cols_currentr$   r$   r%   r{      s6   
zDaskNamespace.concatc                   rs   )	Nr4   r   r   r5   c                   sr    fddD }t  gdd |D R  }t  gdd |D R  }tdd |}tdd |}td	|| gS )
Nc                      g | ]}| D ]}|qqS r$   r$   rv   rS   r$   r%   r          z?DaskNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 s  s    | ]}| d V  qdS )r   Nrb   rc   r$   r$   r%   r^      s    z>DaskNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]	}d |   V  qdS )rx   Nisnarc   r$   r$   r%   r^          c                 S     | | S r    r$   xyr$   r$   r%   rI          z=DaskNamespace.mean_horizontal.<locals>.func.<locals>.<lambda>c                 S  r   r    r$   r   r$   r$   r%   rI      r   z	dx.Series)r   r   r   )r4   expr_resultsrj   non_nanumdenr}   rS   r%   rD      s   z+DaskNamespace.mean_horizontal.<locals>.funcrl   rN   rn   r~   r$   r}   r%   mean_horizontal   s   
zDaskNamespace.mean_horizontalc                   rs   )	Nr4   r   r   r5   c                   rt   )Nc                 3  ru   r    r$   rv   rS   r$   r%   r^      rw   z=DaskNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>rx   ry   )r   r=   r{   minri   r}   rS   r%   rD         z*DaskNamespace.min_horizontal.<locals>.funcrl   rN   rn   r~   r$   r}   r%   min_horizontal      zDaskNamespace.min_horizontalc                   rs   )	Nr4   r   r   r5   c                   rt   )Nc                 3  ru   r    r$   rv   rS   r$   r%   r^      rw   z=DaskNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>rx   ry   )r   r=   r{   maxri   r}   rS   r%   rD      r   z*DaskNamespace.max_horizontal.<locals>.funcrl   rN   rn   r~   r$   r}   r%   max_horizontal   r   zDaskNamespace.max_horizontal	separatorstrc                  sB   d fdd}| j |t d dd	d
 t d dd | jdS )Nr4   r   r   r5   c           	        s    fddD }dd t  g|R  D }dd t  g|R  D }s<ttj|}tfdd|| d }|gS dd t||D ^}}fd	d|d d
 D }ttjdd t||D |}|gS )Nc                   r   r$   r$   rv   rS   r$   r%   r      r   z:DaskNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                 s  s    | ]}| tV  qd S r    )astyper   rc   r$   r$   r%   r^      s    

z9DaskNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                 S  s   g | ]}|  qS r$   r   rc   r$   r$   r%   r      s    c                   s   |   | S r    r$   r   r   r$   r%   rI      s    z8DaskNamespace.concat_str.<locals>.func.<locals>.<lambda>c                 S  s   g | ]\}}| | d qS ) )where)r\   rd   nmr$   r$   r%   r      s    c                 3  s$    | ]}|j d  dtdV  qdS )r   )TF)metaN)mapr   )r\   r   r   r$   r%   r^      s
    
c                 s  s    | ]	\}}|| V  qd S r    r$   )r\   rd   vr$   r$   r%   r^      r   )r   r   rg   rq   r   r   add)	r4   r   rj   	null_masknull_mask_resultresult
init_valuevalues
separatorsrU   rV   r   rS   r%   rD      s.   


z&DaskNamespace.concat_str.<locals>.funcr   _evaluate_output_namesc                 S  rE   rF   r$   rG   r$   r$   r%   rI      rJ   z*DaskNamespace.concat_str.<locals>.<lambda>_alias_output_namesrl   rN   r)   getattrr/   )r#   r   rV   rU   rD   r$   r   r%   
concat_str   s   zDaskNamespace.concat_strc                   rs   )	Nr4   r   r   r5   c                   s.   t  g fddD R  }tdd |gS )Nc                 3  ru   r    r$   rv   rS   r$   r%   r^     rw   z7DaskNamespace.coalesce.<locals>.func.<locals>.<genexpr>c                 S  s
   |  |S r    r   r   r$   r$   r%   rI     s   
 z6DaskNamespace.coalesce.<locals>.func.<locals>.<lambda>)r   r   ri   r}   rS   r%   rD     s   z$DaskNamespace.coalesce.<locals>.funcrl   rN   rn   r~   r$   r}   r%   coalesce  r   zDaskNamespace.coalesceN	predicatethen	otherwiseDaskExpr | Nonec                   s:   d fdd}| j |tddd	 td
d | jdS )Nr4   r   r   r5   c                   s   |  } d ur|   n }|  }tdd  d u r!fn fD r9| | }|   }|}  d u rPt| ||\}}t|| ||gS t| |||\}}}t|| t|| |||gS )Nc                 s  s    | ]}|j jV  qd S r    )	_metadatais_scalar_like)r\   r   r$   r$   r%   r^     s
    
z8DaskNamespace.when_then.<locals>.func.<locals>.<genexpr>)_evaluate_single_output_exprr   _with_nativeto_frame	broadcastr   r   r   )r4   
then_valueotherwise_value	conditionnew_dfthen_seriesotherwise_seriesr   r   r   r$   r%   rD     s4   






z%DaskNamespace.when_then.<locals>.funcr   c                 S  rE   rF   r$   rG   r$   r$   r%   rI   :  rJ   z)DaskNamespace.when_then.<locals>.<lambda>r   rl   rN   r   )r#   r   r   r   rD   r$   r   r%   	when_then  s   $

zDaskNamespace.when_then)r   r   )r   r'   )r   r+   )r-   r   r   r.   )r1   r   r2   r3   r   r   )r   r   )rU   r   rV   rW   r   r   )rU   r   r   r   )r   r   r   r   r   r   )rU   r   r   r   rV   rW   r   r   r    )r   r   r   r   r   r   r   r   )__name__
__module____qualname__r   DASKr   __annotations__propertyr&   r)   r,   r0   rP   rT   rp   rr   r   r{   r   r   r   r   r   r   r$   r$   r$   r%   r   $   s,   
 











)r   )1
__future__r   rg   r   r   	functoolsr   	itertoolsr   typingr   r   dask.dataframe	dataframer=   pandasr9   narwhals._compliantr	   r
   narwhals._dask.dataframer   narwhals._dask.exprr   narwhals._dask.selectorsr   narwhals._dask.utilsr   r   r   narwhals._expression_parsingr   r   narwhals._utilsr   r   collections.abcr   r   dask.dataframe.dask_expr	dask_exprdxr   narwhals.typingr   r   r   	DataFramer   r$   r$   r$   r%   <module>   s0    

