o
    h/                     @  s  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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rd 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.y   d dl,Z-Y nw G dd deeeej/f eeef Z0G dd deedef Z1G dd  d eedef eZ2dS )!    )annotationsN)reduce)TYPE_CHECKING)Iterable)Sequence)CompliantThen)CompliantWhen)LazyNamespace)DepthTrackingNamespaceDaskLazyFrameDaskExpr)DaskSelectorNamespace)align_series_full_broadcast)name_preserving_div)name_preserving_sum)narwhals_to_native_dtype)validate_comparand)combine_alias_output_names)combine_evaluate_output_names)Implementation)DType)ConcatMethod)NonNestedLiteral)Versionc                   @  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
d?ddZd@ddZdAddZdBddZdBd d!ZdBd"d#ZdCd)d*ZdBd+d,ZdBd-d.ZdBd/d0ZdDd3d4ZdEd9d:Zd;S )FDaskNamespacer   _implementationreturnr   c                 C  s
   t | S N)r   from_namespaceself r#   L/var/www/vscode/kcb/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$   _expr2      zDaskNamespace._exprtype[DaskLazyFrame]c                 C  r'   r   r   r!   r#   r#   r$   
_lazyframe6   r)   zDaskNamespace._lazyframebackend_versiontuple[int, ...]versionr   Nonec                C  s   || _ || _d S r   )_backend_version_version)r"   r,   r.   r#   r#   r$   __init__:   s   
zDaskNamespace.__init__valuer   dtypeDType | type[DType] | Noner   c              	     s2   d fdd}j |ddd	d
 d jjdS )Ndfr   r   list[dx.Series]c                   s\    d urt  j}tjg|dd}ntjgdd}| jj}tj||d}|d  gS )Nliteral)r4   name)r9   )npartitionsr   )	r   r1   pdSeries_native_framer:   ddfrom_pandas	to_series)r6   native_dtypenative_pd_seriesr:   dask_seriesr4   r"   r3   r#   r$   func?   s   zDaskNamespace.lit.<locals>.funcr   litc                 S     dgS Nr8   r#   _dfr#   r#   r$   <lambda>M       z#DaskNamespace.lit.<locals>.<lambda>depthfunction_nameevaluate_output_namesalias_output_namesr,   r.   r6   r   r   r7   r(   r0   r1   )r"   r3   r4   rE   r#   rD   r$   rF   >   s   
zDaskNamespace.litc              	   C  s*   ddd}| j |ddd	d
 d | j| jdS )Nr6   r   r   r7   c                 S  s   | j | jd  j gS Nr   )r=   columnssizer@   r6   r#   r#   r$   rE   T   s   zDaskNamespace.len.<locals>.funcr   lenc                 S  rG   )NrX   r#   rI   r#   r#   r$   rK   \   rL   z#DaskNamespace.len.<locals>.<lambda>rM   rR   rS   )r"   rE   r#   r#   r$   rX   S   s   
zDaskNamespace.lenexprsc              	     D   d fdd}| j |tdd  D d	 d
t  t  | j| jdS )Nr6   r   r   r7   c                   ,   t  g fddD R  }ttj|gS )Nc                 3  "    | ]}| D ]}|V  qqd S r   r#   .0r(   srW   r#   r$   	<genexpr>e        z=DaskNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>)r   r   operatorand_r6   seriesrY   rW   r$   rE   c      z*DaskNamespace.all_horizontal.<locals>.funcc                 s      | ]}|j V  qd S r   _depthr^   xr#   r#   r$   r`   k       z/DaskNamespace.all_horizontal.<locals>.<genexpr>   all_horizontalcallrN   rO   rP   rQ   r,   r.   rR   r(   maxr   r   r0   r1   r"   rY   rE   r#   rf   r$   ro   b      zDaskNamespace.all_horizontalc              	     rZ   )Nr6   r   r   r7   c                   r[   )Nc                 3  r\   r   r#   r]   rW   r#   r$   r`   v   ra   z=DaskNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>)r   r   rb   or_rd   rf   rW   r$   rE   t   rg   z*DaskNamespace.any_horizontal.<locals>.funcc                 s  rh   r   ri   rk   r#   r#   r$   r`   |   rm   z/DaskNamespace.any_horizontal.<locals>.<genexpr>rn   any_horizontalrp   rR   rr   rt   r#   rf   r$   rw   s   ru   zDaskNamespace.any_horizontalc              	     rZ   )Nr6   r   r   r7   c                   6   t  g fddD R  }tj|ddjddgS )Nc                 3  r\   r   r#   r]   rW   r#   r$   r`      ra   z=DaskNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>rn   axis)r   r>   concatsumrd   rf   rW   r$   rE      s   z*DaskNamespace.sum_horizontal.<locals>.funcc                 s  rh   r   ri   rk   r#   r#   r$   r`      rm   z/DaskNamespace.sum_horizontal.<locals>.<genexpr>rn   sum_horizontalrp   rR   rr   rt   r#   rf   r$   r}      ru   zDaskNamespace.sum_horizontalitemsIterable[DaskLazyFrame]howr   r   c          	      C  s   |sd}t |dd |D }|d j}|dkr[t|dd  ddD ])\}}|j}t|t|kr7||k sKd|  d	| d
|  d}t|q"ttj	|ddd| j
| jdS |dkrnttj	|ddd| j
| 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   verticalrn   )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
inner)rz   join)r,   r.   diagonalouter)AssertionErrorrU   	enumeraterX   allto_list	TypeErrorr   r>   r{   r0   r1   NotImplementedError)	r"   r~   r   msgdfscols_0r   r6   cols_currentr#   r#   r$   r{      s>   
zDaskNamespace.concatc              	     rZ   )Nr6   r   r   r7   c                   s^    fddD }t  gdd |D R  }t  gdd |D R  }ttt|tt|gS )Nc                      g | ]}| D ]}|qqS r#   r#   r]   rW   r#   r$   r          z?DaskNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 s  s    | ]}| d V  qdS )r   N)fillnar^   r_   r#   r#   r$   r`      s    z>DaskNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 s  s    | ]	}d |   V  qdS )rn   Nisnar   r#   r#   r$   r`          )r   r   r   r   )r6   expr_resultsre   non_narf   rW   r$   rE      s   z+DaskNamespace.mean_horizontal.<locals>.funcc                 s  rh   r   ri   rk   r#   r#   r$   r`      rm   z0DaskNamespace.mean_horizontal.<locals>.<genexpr>rn   mean_horizontalrp   rR   rr   rt   r#   rf   r$   r      s   zDaskNamespace.mean_horizontalc              	     rZ   )Nr6   r   r   r7   c                   rx   )Nc                 3  r\   r   r#   r]   rW   r#   r$   r`      ra   z=DaskNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>rn   ry   )r   r>   r{   minrd   rf   rW   r$   rE         z*DaskNamespace.min_horizontal.<locals>.funcc                 s  rh   r   ri   rk   r#   r#   r$   r`      rm   z/DaskNamespace.min_horizontal.<locals>.<genexpr>rn   min_horizontalrp   rR   rr   rt   r#   rf   r$   r         zDaskNamespace.min_horizontalc              	     rZ   )Nr6   r   r   r7   c                   rx   )Nc                 3  r\   r   r#   r]   rW   r#   r$   r`      ra   z=DaskNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>rn   ry   )r   r>   r{   rs   rd   rf   rW   r$   rE      r   z*DaskNamespace.max_horizontal.<locals>.funcc                 s  rh   r   ri   rk   r#   r#   r$   r`      rm   z/DaskNamespace.max_horizontal.<locals>.<genexpr>rn   max_horizontalrp   rR   rr   rt   r#   rf   r$   r      r   zDaskNamespace.max_horizontal	predicateDaskWhenc                 C  s   t j|| dS )N)context)r   	from_expr)r"   r   r#   r#   r$   when   s   zDaskNamespace.when	separatorstrignore_nullsboolc             	     s\   d fdd}| j |tdd  D d	 d
t d ddd t d dd | j| jdS )Nr6   r   r   r7   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#   r]   rW   r#   r$   r      r   z:DaskNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                 s  s    | ]}| tV  qd S r   )astyper   r   r#   r#   r$   r`      s    

z9DaskNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                 S  s   g | ]}|  qS r#   r   r   r#   r#   r$   r     s    c                   s   |   | S r   r#   )rl   yr   r#   r$   rK         z8DaskNamespace.concat_str.<locals>.func.<locals>.<lambda>c                 S  s   g | ]\}}| | d qS ) )where)r^   r_   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^   r_   vr#   r#   r$   r`     r   )r   r   rb   rv   r   zipadd)	r6   r   re   	null_masknull_mask_resultresult
init_valuevalues
separatorsrY   r   r   rW   r$   rE      s.   


z&DaskNamespace.concat_str.<locals>.funcc                 s  rh   r   ri   rk   r#   r#   r$   r`     rm   z+DaskNamespace.concat_str.<locals>.<genexpr>rn   
concat_strr   _evaluate_output_namesc                 S  rG   rH   r#   rI   r#   r#   r$   rK     rL   z*DaskNamespace.concat_str.<locals>.<lambda>_alias_output_namesrp   rR   )r(   rs   getattrr0   r1   )r"   r   r   rY   rE   r#   r   r$   r      s   zDaskNamespace.concat_strN)r   r   )r   r&   )r   r*   )r,   r-   r.   r   r   r/   )r3   r   r4   r5   r   r   )r   r   )rY   r   r   r   )r~   r   r   r   r   r   )r   r   r   r   )rY   r   r   r   r   r   r   r   )__name__
__module____qualname__r   DASKr   __annotations__propertyr%   r(   r+   r2   rF   rX   ro   rw   r}   r{   r   r   r   r   r   r#   r#   r#   r$   r   (   s(   
 







"


r   c                   @  s$   e Zd ZedddZddd	Zd
S )r   r   type[DaskThen]c                 C  r'   r   )DaskThenr!   r#   r#   r$   _then'  r)   zDaskWhen._thenr6   r   Sequence[dx.Series]c                 C  s   |  |d }t| jtr| |d }n| j}t||\}t|| | jd u r.||gS t| jtr<| |d }n||| jgS t||\}t|| |||gS rT   )
_condition
isinstance_then_valuer   r   r   _otherwise_valuer   )r"   r6   	condition
then_valuethen_seriesotherwise_valueotherwise_seriesr#   r#   r$   __call__+  s   


zDaskWhen.__call__N)r   r   )r6   r   r   r   )r   r   r   r   r   r   r#   r#   r#   r$   r   &  s    r   z	dx.Seriesc                   @  s   e Zd ZdS )r   N)r   r   r   r#   r#   r#   r$   r   A  r   r   )3
__future__r   rb   	functoolsr   typingr   r   r   dask.dataframe	dataframer>   pandasr;   narwhals._compliantr   r   r	   narwhals._compliant.namespacer
   narwhals._dask.dataframer   narwhals._dask.exprr   narwhals._dask.selectorsr   narwhals._dask.utilsr   r   r   r   r   narwhals._expression_parsingr   r   narwhals.utilsr   narwhals.dtypesr   narwhals.typingr   r   r   dask.dataframe.dask_expr	dask_exprdxModuleNotFoundError	DataFramer   r   r   r#   r#   r#   r$   <module>   sP    

  