
    ei              	      (   d dl mZ d dlZd dlmZ d dlmZ d dlmZm	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mZ d dlmZ er,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"m#Z# d dl$m%Z%m&Z&m'Z'm(Z( ddddddZ) G d deeeddf         Z*y)    )annotationsN)reduce)chain)TYPE_CHECKINGAny)combine_alias_output_namescombine_evaluate_output_namesSparkLikeLazyFrameSparkLikeExpr)SparkLikeSelectorNamespace)import_functionsimport_native_dtypesnarwhals_to_native_dtypetrue_divide)SQLNamespace)Iterable)Column)WindowInputs)SQLFrameDataFrame)ImplementationVersion)ConcatMethod	IntoDTypeNonNestedLiteralPythonLiteral
startswithendswithbtrimsplitregexp)starts_with	ends_withtrim	str_splitregexp_matchesc                      e Zd ZddZedd       Zedd       Zedd       Zed        Zed        Z	ddZ
ddZ	 d	 	 	 	 	 	 	 dd
ZddZddZddZddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy	)SparkLikeNamespacec                    || _         || _        y N)_version_implementation)selfversionimplementations      `/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/narwhals/_spark_like/namespace.py__init__zSparkLikeNamespace.__init__.   s    -    c                ,    t        j                  |       S r+   )r   from_namespacer.   s    r1   	selectorszSparkLikeNamespace.selectors2   s    )88>>r3   c                    t         S r+   r   r6   s    r1   _exprzSparkLikeNamespace._expr6   s    r3   c                    t         S r+   r
   r6   s    r1   
_lazyframezSparkLikeNamespace._lazyframe:   s    !!r3   c                H    t         rddlm} |S t        | j                        S )Nr   )	functions)r   sqlframe.baser=   r   r-   )r.   r=   s     r1   _FzSparkLikeNamespace._F>   s    / 4 455r3   c                H    t         rddlm} |S t        | j                        S )Nr   )types)r   r>   rA   r   r-   )r.   rA   s     r1   _native_dtypesz!SparkLikeNamespace._native_dtypesF   s    +L#D$8$899r3   c                \     t        | j                  t        j                  ||            | S r+   )getattrr?   FUNCTION_REMAPPINGSget)r.   nameargss      r1   	_functionzSparkLikeNamespace._functionN   s(    Dwtww 3 7 7d CDdKKr3   c                8    | j                   j                  |      S r+   )r?   lit)r.   values     r1   _litzSparkLikeNamespace._litQ   s    ww{{5!!r3   Nc                    || j                   j                  ||      S | j                   j                  ||      j                  |      S r+   )r?   when	otherwise)r.   	conditionrL   rP   s       r1   _whenzSparkLikeNamespace._whenT   s?     77<<	511ww||Iu-77	BBr3   c                4     | j                   j                  | S r+   )r?   coalesce)r.   exprss     r1   	_coalescezSparkLikeNamespace._coalesce[   s    tww''r3   c                     d fd	 	 	 	 	 	 dfd} j                  |d d  j                   j                        S )Nc                    | j                   j                        }rGt        j                  | j                  | j
                  j                        }|j                  |      }|gS r+   )r?   rK   r   r,   rB   nativesparkSessioncast)dfcolumnnative_dtypedtyper.   rL   s      r1   funcz$SparkLikeNamespace.lit.<locals>.func_   sV    UUYYu%F74=="*;*;RYY=S=S   \28Or3   c                     |       S r+    )r\   _window_inputsr`   s     r1   window_funcz+SparkLikeNamespace.lit.<locals>.window_funci   s     8Or3   c                    dgS )Nliteralrb   _dfs    r1   <lambda>z(SparkLikeNamespace.lit.<locals>.<lambda>q   s    yk r3   evaluate_output_namesalias_output_namesr/   r0   r\   r   returnlist[Column])r\   r   rc   zWindowInputs[Column]rn   ro   r9   r,   r-   )r.   rL   r_   rd   r`   s   ``` @r1   rK   zSparkLikeNamespace.lit^   sY    		"	4H		
 zz"9#MM//  
 	
r3   c                `    dd}| j                  |d d | j                  | j                        S )Nc                :    | j                   j                  d      gS )N*)r?   count)r\   s    r1   r`   z$SparkLikeNamespace.len.<locals>.funcx   s    EEKK$%%r3   c                    dgS )Nlenrb   rg   s    r1   ri   z(SparkLikeNamespace.len.<locals>.<lambda>}   s    ug r3   rj   rm   rp   )r.   r`   s     r1   rv   zSparkLikeNamespace.lenw   s8    	& zz"5#MM//  
 	
r3   c                N     d fd}  j                   j                  |g S )Nc                    t        |       } d   j                  }t        t        j                  fd| D              }t        t        j                  fd| D              }t        |||      S )Nr   c              3     K   | ]9  }j                   j                  |j                   j                  d              ; yw)r   N)r?   rT   rK   .0colr.   s     r1   	<genexpr>zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s.     Utww//TWW[[^DUs   ?Ac              3     K   | ];  }|j                         j                  j                  j                                = y wr+   )	isNotNullr[   rB   IntegerTyperz   s     r1   r}   zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s1     YS%%d&9&9&E&E&GHYs   AA)tupler?   r   operatoraddr   )colsF	numeratordenominatorrU   r.   s       r1   r`   z0SparkLikeNamespace.mean_horizontal.<locals>.func   s`    ;DaAUPTUI !YTXYK q)[99r3   )r   zIterable[Column]rn   r   )r9   _from_elementwise_horizontal_op)r.   rU   r`   s   `` r1   mean_horizontalz"SparkLikeNamespace.mean_horizontal   s&    
	: :tzz99$GGGr3   c                  |D cg c]  }|j                    }}|dk(  r|d   j                  }t        |dd  d      D ]D  \  }}|j                  }t        |      t        |      k(  r||k(  r/d| d| d| d}	t	        |	       t        t        d	 |      | j                  | j                  
      S |dk(  r-t        t        d |      | j                  | j                  
      S t        c c}w )Nverticalr      )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
c                $    | j                  |      S r+   )unionxys     r1   ri   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    QWWQZ r3   )native_dataframer/   r0   diagonalc                (    | j                  |d      S )NT)allowMissingColumns)unionByNamer   s     r1   ri   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    qd!K r3   )
_native_framecolumns	enumeraterv   	TypeErrorr   r   r,   r-   NotImplementedError)
r.   itemshowitemdfscols_0ir\   cols_currentmsgs
             r1   concatzSparkLikeNamespace.concat   s    /44dt!!44*V^^F"3qr7!4 )2!zz\*c&k9PV@V--3H 5**+B|nB@ 
 $C.() &!'(?!E#33  *%!'KS" #33  "!7 5s   C*c                    d fd} j                  |t         t          j                   j                        S )Nc                F    j                   t        t        j                   fdD                    } j                  g| }sTt        t        j                  fd|D              }j                  | |      j                  j                  d             }|gS )Nc              3  .   K   | ]  } |        y wr+   rb   )r{   er\   s     r1   r}   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     ,BqQrU,Bs   c              3  @   K   | ]  }j                  |        y wr+   )isnull)r{   sr   s     r1   r}   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     1L!!((1+1Ls   )r?   r   r   from_iterable	concat_wsr   r   or_rO   rP   rK   )	r\   r   result	null_maskr   rU   ignore_nullsr.   	separators	   `   @r1   r`   z+SparkLikeNamespace.concat_str.<locals>.func   s    A,,,BE,BBCD Q[[2T2F"8<<1Lt1LM	
F3==aeeDkJ8Or3   )callrk   rl   r/   r0   rm   )r9   r	   r   r,   r-   )r.   r   r   rU   r`   s   ```` r1   
concat_strzSparkLikeNamespace.concat_str   sH    		 		 zz"?"G95AMM//  
 	
r3   )r/   r   r0   r   rn   None)rn   r   )rn   ztype[SparkLikeExpr])rn   ztype[SparkLikeLazyFrame])rG   strrH   zColumn | PythonLiteralrn   r   )rL   r   rn   r   r+   )rQ   r   rL   r   rP   zColumn | Nonern   r   )rU   r   rn   r   )rL   r   r_   zIntoDType | Nonern   r   )rn   r   )rU   r   rn   r   )r   zIterable[SparkLikeLazyFrame]r   r   rn   r   )rU   r   r   r   r   boolrn   r   )__name__
__module____qualname__r2   propertyr7   r9   r;   r?   rB   rI   rM   rR   rV   rK   rv   r   r   r   rb   r3   r1   r)   r)   +   s    . ? ?   " " 6 6 : :L" LPCC(.C;HC	C(
2

H"1";G"	"@
#
03
CG
	
r3   r)   r   r   )+
__future__r   r   	functoolsr   	itertoolsr   typingr   r   narwhals._expression_parsingr   r	   narwhals._spark_like.dataframer   narwhals._spark_like.exprr   narwhals._spark_like.selectorsr   narwhals._spark_like.utilsr   r   r   r   narwhals._sql.namespacer   collections.abcr   sqlframe.base.columnr   narwhals._compliant.windowr   r   narwhals._utilsr   r   narwhals.typingr   r   r   r   rE   r)   rb   r3   r1   <module>r      s    "    % > 3 E  1(+7@7XX   [
#]4GQR[
r3   