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	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! d dl m"Z" G dd deeedf Z#G dd deedef Z$G dd de
edef eZ%dS )    )annotationsN)reduce)TYPE_CHECKING)Iterable)Sequence)CompliantThen)LazyNamespace)LazyWhen)combine_alias_output_names)combine_evaluate_output_namesSparkLikeLazyFrameSparkLikeExpr)SparkLikeSelectorNamespace)narwhals_to_native_dtype)Column)SQLFrameDataFrame)DType)ConcatMethod)NonNestedLiteral)Implementation)Versionc                   @  s   e Zd Zd<d	d
Zed=ddZed>ddZed?ddZd@ddZdAddZ	dBddZ
dBd d!ZdBd"d#ZdBd$d%ZdBd&d'ZdBd(d)ZdCd/d0ZdDd5d6ZdEd9d:Zd;S )FSparkLikeNamespacebackend_versiontuple[int, ...]versionr   implementationr   returnNonec                C  s   || _ || _|| _d S N)_backend_version_version_implementation)selfr   r   r    r%   R/var/www/vscode/kcb/lib/python3.10/site-packages/narwhals/_spark_like/namespace.py__init__!   s   
zSparkLikeNamespace.__init__r   c                 C  s
   t | S r    )r   from_namespacer$   r%   r%   r&   	selectors,   s   
zSparkLikeNamespace.selectorstype[SparkLikeExpr]c                 C     t S r    r   r)   r%   r%   r&   _expr0      zSparkLikeNamespace._exprtype[SparkLikeLazyFrame]c                 C  r,   r    r   r)   r%   r%   r&   
_lazyframe4   r.   zSparkLikeNamespace._lazyframevaluer   dtypeDType | type[DType] | Noner   c                   s2   d
 fdd}j |dd d jjjd	S )Ndfr   r   list[Column]c                   s2   | j } rt j| jd}||}|gS )N)r   spark_types)_Flitr   r"   _native_dtypescast)r4   columnnative_dtyper2   r$   r1   r%   r&   _lit;   s   

z$SparkLikeNamespace.lit.<locals>._litc                 S     dgS )Nliteralr%   _dfr%   r%   r&   <lambda>G       z(SparkLikeNamespace.lit.<locals>.<lambda>callevaluate_output_namesalias_output_namesr   r   r   r4   r   r   r5   r-   r!   r"   r#   )r$   r1   r2   r>   r%   r=   r&   r8   8   s   
zSparkLikeNamespace.litc                 C  s*   d
dd}| j |dd d | j| j| jd	S )Nr4   r   r   r5   c                 S  s   | j dgS )N*)r7   countr4   r%   r%   r&   funcO      z$SparkLikeNamespace.len.<locals>.funcc                 S  r?   )Nlenr%   rA   r%   r%   r&   rC   T   rD   z(SparkLikeNamespace.len.<locals>.<lambda>)rG   rH   r   r   r   rI   rJ   )r$   rN   r%   r%   r&   rP   N   s   
zSparkLikeNamespace.lenexprsc                   2   d fdd}| j |t  t  | j| j| jdS )	Nr4   r   r   r5   c                        fddD }t tj|gS )Nc                 3  "    | ]}| D ]}|V  qqd S r    r%   .0r-   crM   r%   r&   	<genexpr>]        zBSparkLikeNamespace.all_horizontal.<locals>.func.<locals>.<genexpr>)r   operatorand_r4   colsrQ   rM   r&   rN   \      z/SparkLikeNamespace.all_horizontal.<locals>.funcrE   rI   r-   r   r
   r!   r"   r#   r$   rQ   rN   r%   r^   r&   all_horizontal[      z!SparkLikeNamespace.all_horizontalc                   rR   )	Nr4   r   r   r5   c                   rS   )Nc                 3  rT   r    r%   rU   rM   r%   r&   rX   k   rY   zBSparkLikeNamespace.any_horizontal.<locals>.func.<locals>.<genexpr>)r   rZ   or_r\   r^   rM   r&   rN   j   r_   z/SparkLikeNamespace.any_horizontal.<locals>.funcrE   rI   r`   ra   r%   r^   r&   any_horizontali   rc   z!SparkLikeNamespace.any_horizontalc                   rR   )	Nr4   r   r   r5   c                   rS   )Nc                 3  s4    | ]}| D ]} j | j d V  qqdS r   Nr7   coalescer8   )rV   r-   colrM   r%   r&   rX   y   s    zBSparkLikeNamespace.sum_horizontal.<locals>.func.<locals>.<genexpr>r   rZ   addr\   r^   rM   r&   rN   x   s   
z/SparkLikeNamespace.sum_horizontal.<locals>.funcrE   rI   r`   ra   r%   r^   r&   sum_horizontalw   s   z!SparkLikeNamespace.sum_horizontalc                   rR   )	Nr4   r   r   r5   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%   rU   rM   r%   r&   
<listcomp>       zDSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<listcomp>c                 3  s&    | ]} j | j d V  qdS rf   rg   rV   ri   rM   r%   r&   rX      s   $ zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>c                 3  s$    | ]}|   j V  qd S r    )	isNotNullr:   r9   IntegerTyperp   rM   r%   r&   rX      s
    
rj   r\   r^   rM   r&   rN      s   
z0SparkLikeNamespace.mean_horizontal.<locals>.funcrE   rI   r`   ra   r%   r^   r&   mean_horizontal   s   z"SparkLikeNamespace.mean_horizontalc                   rR   )	Nr4   r   r   r5   c                        fddD } j j| gS )Nc                 3  rT   r    r%   rU   rM   r%   r&   rX      rY   zBSparkLikeNamespace.max_horizontal.<locals>.func.<locals>.<genexpr>)r7   greatestr\   r^   rM   r&   rN      r_   z/SparkLikeNamespace.max_horizontal.<locals>.funcrE   rI   r`   ra   r%   r^   r&   max_horizontal   rc   z!SparkLikeNamespace.max_horizontalc                   rR   )	Nr4   r   r   r5   c                   rt   )Nc                 3  rT   r    r%   rU   rM   r%   r&   rX      rY   zBSparkLikeNamespace.min_horizontal.<locals>.func.<locals>.<genexpr>)r7   leastr\   r^   rM   r&   rN      r_   z/SparkLikeNamespace.min_horizontal.<locals>.funcrE   rI   r`   ra   r%   r^   r&   min_horizontal   rc   z!SparkLikeNamespace.min_horizontalitemsIterable[SparkLikeLazyFrame]howr   r   c          	      C  s   dd |D }|dkrN|d j }t|dd  ddD ]#\}}|j }t|t|kr-||ks=d| d| d	| d
}t|qttdd || j| j| jdS |dkrbttdd || j| j| jdS t	)Nc                 S  s   g | ]}|j qS r%   )_native_frame)rV   itemr%   r%   r&   rn      s    z-SparkLikeNamespace.concat.<locals>.<listcomp>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&   rC      s   
 z+SparkLikeNamespace.concat.<locals>.<lambda>)native_dataframer   r   r   diagonalc                 S  s   | j |ddS )NT)allowMissingColumns)unionByNamer   r%   r%   r&   rC      s    )
columns	enumeraterP   	TypeErrorr   r   r!   r"   r#   NotImplementedError)	r$   ry   r{   dfscols_0ir4   cols_currentmsgr%   r%   r&   concat   s@   
zSparkLikeNamespace.concat	separatorstrignore_nullsboolc                  s6   d fdd}| j |t  t  | j| j| jdS )	Nr4   r   r   r5   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                   rm   r%   r%   )rV   r-   srM   r%   r&   rn      ro   z?SparkLikeNamespace.concat_str.<locals>.func.<locals>.<listcomp>c                   s   g | ]
}|  j qS r%   )r:   r9   
StringTyperV   r   rM   r%   r&   rn      s    c                   s   g | ]} j |qS r%   )r7   isnullr   rM   r%   r&   rn          c                   s    j d d| |S )Nz%sr7   format_stringr   r4   r   r%   r&   rC      r   z=SparkLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>c                   s.   g | ]\}} j | | j d qS ) )r7   when	otherwiser8   )rV   ri   nmrM   r%   r&   rn      s    c                 3  s4    | ]} j | j d  j V  qdS )r   N)r7   r   r8   r   )rV   r   r   r%   r&   rX      s
    "
z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>c                   s    j d| |S )N%s%sr   r   rM   r%   r&   rC      s    c                 3  s$    | ]\}} j d ||V  qdS )r   Nr   )rV   r   vrM   r%   r&   rX     s
    
)r   rZ   rd   r7   r   r   r8   zip)	r4   r]   cols_casted	null_masknull_mask_resultresult
init_valuevalues
separatorsrQ   r   r   rM   r&   rN      s:   




	z+SparkLikeNamespace.concat_str.<locals>.funcrE   rI   r`   )r$   r   r   rQ   rN   r%   r   r&   
concat_str   s   #zSparkLikeNamespace.concat_str	predicateSparkLikeWhenc                 C  s   t j|| dS )N)context)r   	from_expr)r$   r   r%   r%   r&   r     rO   zSparkLikeNamespace.whenN)r   r   r   r   r   r   r   r   )r   r   )r   r+   )r   r/   )r1   r   r2   r3   r   r   )r   r   )rQ   r   r   r   )ry   rz   r{   r   r   r   )rQ   r   r   r   r   r   r   r   )r   r   r   r   )__name__
__module____qualname__r'   propertyr*   r-   r0   r8   rP   rb   re   rl   rs   rv   rx   r   r   r   r%   r%   r%   r&   r      s&    










"2r   r   c                      s,   e Zd Zed
ddZd fdd	Z  ZS )r   r   type[SparkLikeThen]c                 C  r,   r    )SparkLikeThenr)   r%   r%   r&   _then  r.   zSparkLikeWhen._thenr4   r   Sequence[Column]c                   s    |j j| _|j j| _t |S r    )r7   r   r8   super__call__)r$   r4   	__class__r%   r&   r     s   

zSparkLikeWhen.__call__)r   r   )r4   r   r   r   )r   r   r   r   r   r   __classcell__r%   r%   r   r&   r     s    r   r   c                   @  s   e Zd ZdS )r   N)r   r   r   r%   r%   r%   r&   r   "  s    r   )&
__future__r   rZ   	functoolsr   typingr   r   r   narwhals._compliantr   r   r	   narwhals._expression_parsingr
   r   narwhals._spark_like.dataframer   narwhals._spark_like.exprr   narwhals._spark_like.selectorsr   narwhals._spark_like.utilsr   sqlframe.base.columnr   r   narwhals.dtypesr   narwhals.typingr   r   narwhals.utilsr   r   r   r   r   r%   r%   r%   r&   <module>   s>    
 z
