
    [i              	      $   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' 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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      o/var/www/html/userprofiledev.eatanceapp.com/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    r0   	selectorszSparkLikeNamespace.selectors2   s    )88>>r2   c                    t         S r*   r   r5   s    r0   _exprzSparkLikeNamespace._expr6   s    r2   c                    t         S r*   r
   r5   s    r0   
_lazyframezSparkLikeNamespace._lazyframe:   s    !!r2   c                H    t         rddlm} |S t        | j                        S )Nr   )	functions)r   sqlframe.baser<   r   r,   )r-   r<   s     r0   _FzSparkLikeNamespace._F>   s    / 4 455r2   c                H    t         rddlm} |S t        | j                        S )Nr   )types)r   r=   r@   r   r,   )r-   r@   s     r0   _native_dtypesz!SparkLikeNamespace._native_dtypesF   s    +L#D$8$899r2   c                \     t        | j                  t        j                  ||            | S r*   )getattrr>   FUNCTION_REMAPPINGSget)r-   nameargss      r0   	_functionzSparkLikeNamespace._functionN   s(    Dwtww 3 7 7d CDdKKr2   c                8    | j                   j                  |      S r*   )r>   lit)r-   values     r0   _litzSparkLikeNamespace._litQ   s    ww{{5!!r2   Nc                    || j                   j                  ||      S | j                   j                  ||      j                  |      S r*   )r>   when	otherwise)r-   	conditionrK   rO   s       r0   _whenzSparkLikeNamespace._whenT   s?     77<<	511ww||Iu-77	BBr2   c                4     | j                   j                  | S r*   )r>   coalesce)r-   exprss     r0   	_coalescezSparkLikeNamespace._coalesce[   s    tww''r2   c                     d fd	 	 	 	 	 	 dfd} j                  |d d  j                   j                        S )Nc                   | j                   }t        
t        t        f      r?
D cg c]  }|j	                  |       }}|j	                  |j                  |            }nt        
t              r	j                  j                         s)t        
      dk(  rd	j                   d}t        |      
j                         D cg c]%  \  }}|j	                  |      j                  |      ' }}} |j                  | }n|j	                  
      }rGt        	j                  | j                   | j"                  j$                        }|j'                  |      }|gS c c}w c c}}w )Nr   z'Cannot create an empty struct type for z backend)r>   
isinstancelisttuplerJ   arraydictr,   
is_pysparklenNotImplementedErroritemsaliasstructr   r+   rA   nativesparkSessioncast)dfFv
lit_valuescolumnmsgknative_dtypedtyper-   rK   s           r0   funcz$SparkLikeNamespace.lit.<locals>.func_   s,   A%$/0561aeeAh
6qwwz23E4(,,779E
aCDDXDXCYYabC-c22<AKKMJMDAqaeeAhnnQ/M
J!:.u74=="*;*;RYY=S=S   \28O# 7 Ks   E#	*E(c                     |       S r*    )rf   _window_inputsro   s     r0   window_funcz+SparkLikeNamespace.lit.<locals>.window_funcv   s     8Or2   c                    dgS )Nliteralrq   _dfs    r0   <lambda>z(SparkLikeNamespace.lit.<locals>.<lambda>~   s    ykr2   evaluate_output_namesalias_output_namesr.   r/   rf   r   returnlist[Column])rf   r   rr   zWindowInputs[Column]r}   r~   r8   r+   r,   )r-   rK   rn   rs   ro   s   ``` @r0   rJ   zSparkLikeNamespace.lit^   sY    	.	"	4H		
 zz"9#MM//  
 	
r2   c                `    dd}| j                  |d d | j                  | j                        S )Nc                :    | j                   j                  d      gS )N*)r>   count)rf   s    r0   ro   z$SparkLikeNamespace.len.<locals>.func   s    EEKK$%%r2   c                    dgS )Nr^   rq   rv   s    r0   rx   z(SparkLikeNamespace.len.<locals>.<lambda>   s    ugr2   ry   r|   r   )r-   ro   s     r0   r^   zSparkLikeNamespace.len   s8    	& zz"5#MM//  
 	
r2   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>   rS   rJ   .0colr-   s     r0   	<genexpr>zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s1     UPTtww//TWW[[^DPTs   ?Ac              3     K   | ];  }|j                         j                  j                  j                                = y wr*   )	isNotNullre   rA   IntegerTyper   s     r0   r   zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s4     YTXS%%d&9&9&E&E&GHTXs   AA)rZ   r>   r   operatoraddr   )colsrg   	numeratordenominatorrT   r-   s       r0   ro   z0SparkLikeNamespace.mean_horizontal.<locals>.func   s`    ;DaAUPTUI !YTXYK q)[99r2   )r   zIterable[Column]r}   r   )r8   _from_elementwise_horizontal_op)r-   rT   ro   s   `` r0   mean_horizontalz"SparkLikeNamespace.mean_horizontal   s&    
	: :tzz99$GGGr2   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     r0   rx   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    QWWQZr2   )native_dataframer.   r/   diagonalc                (    | j                  |d      S )NT)allowMissingColumns)unionByNamer   s     r0   rx   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    qd!Kr2   )
_native_framecolumns	enumerater^   	TypeErrorr   r   r+   r,   r_   )
r-   r`   howitemdfscols_0irf   cols_currentrk   s
             r0   concatzSparkLikeNamespace.concat   s    /44edt!!e4*V^^F"3qr7!42!zz\*c&k9PV@V--3H 5**+B|nB@ 
 $C.( 5 &!'(?!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*   rq   )r   erf   s     r0   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     ,BEqQrUEs   c              3  @   K   | ]  }j                  |        y wr*   )isnull)r   srg   s     r0   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     1Lt!!((1+ts   )r>   rZ   r   from_iterable	concat_wsr   r   or_rN   rO   rJ   )	rf   r   result	null_maskrg   rT   ignore_nullsr-   	separators	   `   @r0   ro   z+SparkLikeNamespace.concat_str.<locals>.func   s    A,,,BE,BBCD Q[[2T2F"8<<1Lt1LM	
F3==aeeDkJ8Or2   )callrz   r{   r.   r/   r|   )r8   r	   r   r+   r,   )r-   r   r   rT   ro   s   ```` r0   
concat_strzSparkLikeNamespace.concat_str   sH    		 		 zz"?"G95AMM//  
 	
r2   )r.   r   r/   r   r}   None)r}   r   )r}   ztype[SparkLikeExpr])r}   ztype[SparkLikeLazyFrame])rF   strrG   zColumn | PythonLiteralr}   r   )rK   r   r}   r   r*   )rP   r   rK   r   rO   zColumn | Noner}   r   )rT   r   r}   r   )rK   r   rn   zIntoDType | Noner}   r   )r}   r   )rT   r   r}   r   )r`   zIterable[SparkLikeLazyFrame]r   r   r}   r   )rT   r   r   r   r   boolr}   r   )__name__
__module____qualname__r1   propertyr6   r8   r:   r>   rA   rH   rL   rQ   rU   rJ   r^   r   r   r   rq   r2   r0   r(   r(   +   s    . ? ?   " " 6 6 : :L" LPCC(.C;HC	C($
L

H"1";G"	"@
#
03
CG
	
r2   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   rD   r(   rq   r2   r0   <module>r      s    "    % > 3 E  1(+7@7FF   h
#]4GQRh
r2   