o
    篪gM>                     @  sV  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 erd 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$ G dd ded Z%G dd dZ&G dd deZ'dS )     )annotationsN)reduce)TYPE_CHECKING)Any)Callable)Iterable)Literal)Sequence)combine_alias_output_names)combine_evaluate_output_names)SparkLikeLazyFrame)SparkLikeExpr)SparkLikeSelectorNamespace)ExprKind)n_ary_operation_expr_kind)narwhals_to_native_dtype)CompliantNamespace)Column)	DataFrame)Self)DType)Implementation)Versionc                   @  s   e Zd ZdAddZedBddZdCddZdDddZdEddZdFdd Z	dCd!d"Z
dGd$d%ZdGd&d'ZdGd(d)ZdGd*d+ZdGd,d-ZdGd.d/ZdHd5d6ZdId:d;ZdJd>d?Zd@S )KSparkLikeNamespaceselfr   backend_versiontuple[int, ...]versionr   implementationr   returnNonec                C  s   || _ || _|| _d S N)_backend_version_version_implementation)r   r   r   r    r%   Z/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/narwhals/_spark_like/namespace.py__init__!   s   
zSparkLikeNamespace.__init__r   c                 C  s   t | j| j| jdS Nr   r   r   )r   r"   r#   r$   )r   r%   r%   r&   	selectors,   s
   zSparkLikeNamespace.selectorsr   c              
   C  .   ddd}t |ddd	 d tj| j| j| jd
S )Ndfr   r   list[Column]c                   s    fdd j D S )Nc                   s   g | ]} j |qS r%   )_Fcol).0col_namer,   r%   r&   
<listcomp>6       z8SparkLikeNamespace.all.<locals>._all.<locals>.<listcomp>columnsr2   r%   r2   r&   _all5   s   z$SparkLikeNamespace.all.<locals>._allallc                 S  s   | j S r!   r5   r2   r%   r%   r&   <lambda>;       z(SparkLikeNamespace.all.<locals>.<lambda>callfunction_nameevaluate_output_namesalias_output_names	expr_kindr   r   r   r,   r   r   r-   )r   r   	TRANSFORMr"   r#   r$   )r   r7   r%   r%   r&   r8   4      
zSparkLikeNamespace.allcolumn_namesstrc                 G     t j|| j| j| jdS r(   )r   from_column_namesr"   r#   r$   )r   rD   r%   r%   r&   r/   C      zSparkLikeNamespace.colcolumn_indicesintc                 G  rF   r(   )r   from_column_indicesr"   r#   r$   )r   rI   r%   r%   r&   nthK   rH   zSparkLikeNamespace.nthvalueobjectdtypeDType | Nonec              
     s6   d fdd}t |ddd	 d tjjjjd
S )Nr,   r   r   r-   c                   s2   | j } rt j| jd}||}|gS )N)r   spark_types)r.   litr   r#   _native_dtypescast)r,   columnnative_dtyperO   r   rM   r%   r&   _litT   s   

z$SparkLikeNamespace.lit.<locals>._litrR   c                 S     dgS Nliteralr%   _dfr%   r%   r&   r9   a   r:   z(SparkLikeNamespace.lit.<locals>.<lambda>r;   rA   )r   r   LITERALr"   r#   r$   )r   rM   rO   rX   r%   rW   r&   rR   S   s   
zSparkLikeNamespace.litc              
   C  r+   )Nr,   r   r   r-   c                 S  s   | j dgS )N*)r.   countr2   r%   r%   r&   funcj   s   z$SparkLikeNamespace.len.<locals>.funclenc                 S  rY   )Nrb   r%   r\   r%   r%   r&   r9   p   r:   z(SparkLikeNamespace.len.<locals>.<lambda>r=   r>   r?   r@   r   r   r   rA   )r   r   AGGREGATIONr"   r#   r$   )r   ra   r%   r%   r&   rb   i   rC   zSparkLikeNamespace.lenexprsc              
     8   d	 fdd}t |dt  t  t  | j| j| jdS )
Nr,   r   r   r-   c                        fddD }t tj|gS )Nc                 3  "    | ]}| D ]}|V  qqd S r!   r%   r0   _exprcr2   r%   r&   	<genexpr>z        zBSparkLikeNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>)r   operatorand_r,   colsre   r2   r&   ra   y      z/SparkLikeNamespace.all_horizontal.<locals>.funcall_horizontalr;   rA   r   r   r
   r   r"   r#   r$   r   re   ra   r%   rr   r&   rt   x      z!SparkLikeNamespace.all_horizontalc              
     rf   )
Nr,   r   r   r-   c                   rg   )Nc                 3  rh   r!   r%   ri   r2   r%   r&   rl      rm   zBSparkLikeNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>)r   rn   or_rp   rr   r2   r&   ra      rs   z/SparkLikeNamespace.any_horizontal.<locals>.funcany_horizontalr;   rA   ru   rv   r%   rr   r&   ry      rw   z!SparkLikeNamespace.any_horizontalc              
     rf   )
Nr,   r   r   r-   c                   rg   )Nc                 3  s4    | ]}| D ]} j | j d V  qqdS r   Nr.   coalescerR   )r0   rj   r/   r2   r%   r&   rl      s    zBSparkLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>r   rn   addrp   rr   r2   r&   ra      s   
z/SparkLikeNamespace.sum_horizontal.<locals>.funcsum_horizontalr;   rA   ru   rv   r%   rr   r&   r      s   z!SparkLikeNamespace.sum_horizontalc              
     rf   )
Nr,   r   r   r-   c                   sH    fddD }t tj fdd|D t tj fdd|D  gS )Nc                      g | ]}| D ]}|qqS r%   r%   ri   r2   r%   r&   r3          zDSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 3  s&    | ]} j | j d V  qdS rz   r{   r0   r/   r2   r%   r&   rl      s   $ zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 3  s$    | ]}|   j V  qd S r!   )	isNotNullrT   rS   IntegerTyper   r2   r%   r&   rl      s
    
r}   rp   rr   r2   r&   ra      s   
z0SparkLikeNamespace.mean_horizontal.<locals>.funcmean_horizontalr;   rA   ru   rv   r%   rr   r&   r      s   z"SparkLikeNamespace.mean_horizontalc              
     rf   )
Nr,   r   r   r-   c                        fddD } j j| gS )Nc                 3  rh   r!   r%   ri   r2   r%   r&   rl      rm   zBSparkLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>)r.   greatestrp   rr   r2   r&   ra      rs   z/SparkLikeNamespace.max_horizontal.<locals>.funcmax_horizontalr;   rA   ru   rv   r%   rr   r&   r      rw   z!SparkLikeNamespace.max_horizontalc              
     rf   )
Nr,   r   r   r-   c                   r   )Nc                 3  rh   r!   r%   ri   r2   r%   r&   rl      rm   zBSparkLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>)r.   leastrp   rr   r2   r&   ra      rs   z/SparkLikeNamespace.min_horizontal.<locals>.funcmin_horizontalr;   rA   ru   rv   r%   rr   r&   r      rw   z!SparkLikeNamespace.min_horizontalitemsIterable[SparkLikeLazyFrame]how-Literal['horizontal', 'vertical', 'diagonal']r   c          	      C  s   dd |D }|dkrd}t ||dkrX|d j}t|dd  ddD ]#\}}|j}t|t|kr7||ksGd	| d
| d| d}t|q$ttdd || j| j| j	dS |dkrlttdd || j| j| j	dS t )Nc                 S  s   g | ]}|j qS r%   )_native_frame)r0   itemr%   r%   r&   r3      s    z-SparkLikeNamespace.concat.<locals>.<listcomp>
horizontalzVHorizontal concatenation is not supported for LazyFrame backed by a PySpark DataFrame.verticalr      )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
c                 S  s
   |  |S r!   )unionxyr%   r%   r&   r9     s   
 z+SparkLikeNamespace.concat.<locals>.<lambda>)native_dataframer   r   r   diagonalc                 S  s   | j |ddS )NT)allowMissingColumns)unionByNamer   r%   r%   r&   r9     s    )
NotImplementedErrorr6   	enumeraterb   	TypeErrorr   r   r"   r#   r$   )	r   r   r   dfsmsgcols_0ir,   cols_currentr%   r%   r&   concat   sH   
zSparkLikeNamespace.concat	separatorignore_nullsboolc             
     s<   d	 fdd}t |dt  t  t  | j| j| jdS )
Nr,   r   r   r-   c           	        s    fddD } fdd|D } fddD }s=t tj|} j| t  fdd| jd }|gS  fddt||D ^}} fdd	|d d
 D }t  fdd fdd	t||D |}|gS )Nc                   r   r%   r%   r0   rj   sr2   r%   r&   r3     r   z?SparkLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                   s   g | ]
}|  j qS r%   )rT   rS   
StringType)r0   r   r2   r%   r&   r3     s    c                   s&   g | ]}| D ]} j |qqS r%   )r.   isnullr   r2   r%   r&   r3     s   & c                   s    j d d| |S )Nz%sr.   format_stringr   r,   r   r%   r&   r9   $  r4   z=SparkLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>c                   s.   g | ]\}} j | | j d qS ) )r.   when	otherwiserR   )r0   r/   nmr2   r%   r&   r3   )  s    c                 3  s4    | ]} j | j d  j V  qdS )r   N)r.   r   rR   r   )r0   r   r   r%   r&   rl   .  s
    "
z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                   s    j d| |S )N%s%sr   r   r2   r%   r&   r9   3  s    c                 3  s$    | ]\}} j d ||V  qdS )r   Nr   )r0   r   vr2   r%   r&   rl   4  s
    
)r   rn   rx   r.   r   r   rR   zip)	r,   rq   cols_casted	null_masknull_mask_resultresult
init_valuevalues
separatorsre   r   r   r2   r&   ra     s:   




	z+SparkLikeNamespace.concat_str.<locals>.func
concat_strr;   rA   ru   )r   r   r   re   ra   r%   r   r&   r     s   #zSparkLikeNamespace.concat_str
predicatesSparkLikeWhenc                 G  s:   | j | j| j| jd}|j| }t|| jtj| j| jdS )Nr)   )r@   r   r   )	__class__r"   r#   r$   rt   r   r   rB   )r   r   plx	conditionr%   r%   r&   r   H  s   
zSparkLikeNamespace.whenN)
r   r   r   r   r   r   r   r   r   r    )r   r   r   r   )r   r   r   r   )r   r   rD   rE   r   r   )r   r   rI   rJ   r   r   )r   r   rM   rN   rO   rP   r   r   )r   r   re   r   r   r   )r   r   r   r   r   r   r   r   )
r   r   re   r   r   rE   r   r   r   r   )r   r   r   r   r   r   )__name__
__module____qualname__r'   propertyr*   r8   r/   rL   rR   rb   rt   ry   r   r   r   r   r   r   r   r%   r%   r%   r&   r       s$    













,4r   r   c                   @  s0   e Zd Z		dd ddZd!ddZd"ddZdS )#r   Nr   r   r   r   r   r   
then_value
Any | Noneotherwise_valuer@   r   r   r   r   r   r   r    c                C  s.   || _ || _|| _|| _|| _|| _|| _d S r!   )r"   
_condition_then_value_otherwise_value
_expr_kindr#   r$   )r   r   r   r   r   r@   r   r   r%   r%   r&   r'   Y  s   
zSparkLikeWhen.__init__r,   r   r-   c                 C  s|   |  |d }t| jtr| |d }n|j| j}t| jtr*| |d }n|j| j}|jj||dj|dgS )Nr   )r   rM   )rM   )	r   
isinstancer   r   r.   rR   r   r   r   )r   r,   r   value_other_r%   r%   r&   __call__l  s   zSparkLikeWhen.__call__rM   SparkLikeExpr | AnySparkLikeThenc              
   C  s:   || _ t| dt|ddd t|dd | j| j| j| jdS )Nwhenthen_evaluate_output_namesc                 S  rY   rZ   r%   r\   r%   r%   r&   r9     r:   z$SparkLikeWhen.then.<locals>.<lambda>_alias_output_namesrc   )r   r   getattrr   r"   r#   r$   r   rM   r%   r%   r&   then}  s   

zSparkLikeWhen.then)NN)r   r   r   r   r   r   r   r   r   r   r@   r   r   r   r   r   r   r    )r   r   r,   r   r   r-   )r   r   rM   r   r   r   )r   r   r   r'   r   r   r%   r%   r%   r&   r   X  s    
r   c                   @  s    e Zd ZdddZdddZdS )r   r   r   r<   r   r=   rE   r>   -Callable[[SparkLikeLazyFrame], Sequence[str]]r?   /Callable[[Sequence[str]], Sequence[str]] | Noner@   r   r   r   r   r   r   r   r   r    c          	      C  s4   || _ || _|| _|| _|| _|| _|| _|| _d S r!   )r"   r#   _call_function_namer   r   r   r$   )	r   r<   r=   r>   r?   r@   r   r   r   r%   r%   r&   r'     s   
zSparkLikeThen.__init__rM   r   r   c                 C  s   || j _d| _| S )Nwhenotherwise)r   r   r   r   r%   r%   r&   r     s   zSparkLikeThen.otherwiseN)r   r   r<   r   r=   rE   r>   r   r?   r   r@   r   r   r   r   r   r   r   r   r    )r   r   rM   r   r   r   )r   r   r   r'   r   r%   r%   r%   r&   r     s    
r   )(
__future__r   rn   	functoolsr   typingr   r   r   r   r   r	   narwhals._expression_parsingr
   r   narwhals._spark_like.dataframer   narwhals._spark_like.exprr   narwhals._spark_like.selectorsr   narwhals._spark_like.utilsr   r   r   narwhals.typingr   pyspark.sqlr   r   typing_extensionsr   narwhals.dtypesr   narwhals.utilsr   r   r   r   r   r%   r%   r%   r&   <module>   s<      :6