
    }i%              	      J   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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 d dlmZ er.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& 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-dS )    )annotationsN)reduce)chain)TYPE_CHECKINGAny)combine_alias_output_namescombine_evaluate_output_names!evaluate_output_names_and_aliasesSparkLikeLazyFrameSparkLikeExpr)SparkLikeSelectorNamespace)import_functionsimport_native_dtypesnarwhals_to_native_dtypetrue_divide)SQLNamespace)
zip_strict)IterableMapping)Column)WindowInputs)SQLFrameDataFrame)ImplementationVersion)ConcatMethodCorrelationMethod	IntoDTypePythonLiteral
startswithendswithbtrimsplitregexp)starts_with	ends_withtrim	str_splitregexp_matchesc                      e Zd Zd7dZed8d	            Zed9d            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dAd%ZdBd&ZdCd,ZdDd0ZdEd5ZdBd6ZdS )FSparkLikeNamespaceversionr   implementationr   returnNonec               "    || _         || _        d S N)_version_implementation)selfr-   r.   s      R/home/jrussi/.local/lib/python3.11/site-packages/narwhals/_spark_like/namespace.py__init__zSparkLikeNamespace.__init__0   s    -    r   c                *    t          j        |           S r2   )r   from_namespacer5   s    r6   	selectorszSparkLikeNamespace.selectors4   s    )8>>>r8   type[SparkLikeExpr]c                    t           S r2   r   r;   s    r6   _exprzSparkLikeNamespace._expr8   s    r8   type[SparkLikeLazyFrame]c                    t           S r2   r   r;   s    r6   
_lazyframezSparkLikeNamespace._lazyframe<   s    !!r8   c                H    t           rddlm} |S t          | j                  S )Nr   )	functions)r   sqlframe.baserD   r   r4   )r5   rD   s     r6   _FzSparkLikeNamespace._F@   s3     	////// 4555r8   c                H    t           rddlm} |S t          | j                  S )Nr   )types)r   rE   rH   r   r4   )r5   rH   s     r6   _native_dtypesz!SparkLikeNamespace._native_dtypesH   s2     	++++++L#D$8999r8   namestrargsColumn | PythonLiteralr   c                d     t          | j        t                              ||                    | S r2   )getattrrF   FUNCTION_REMAPPINGSget)r5   rJ   rL   s      r6   	_functionzSparkLikeNamespace._functionP   s,    Dwtw 3 7 7d C CDDdKKr8   valuer   c                6    | j                             |          S r2   )rF   lit)r5   rS   s     r6   _litzSparkLikeNamespace._litS   s    w{{5!!!r8   N	condition	otherwiseColumn | Nonec                    || j                             ||          S | j                             ||                              |          S r2   )rF   whenrX   )r5   rW   rS   rX   s       r6   _whenzSparkLikeNamespace._whenV   sD     7<<	5111w||Iu--77	BBBr8   exprsc                      | j         j        | S r2   )rF   coalesce)r5   r]   s     r6   	_coalescezSparkLikeNamespace._coalesce]   s    tw''r8   r    dtypeIntoDType | Noner   c                r     d fddfd}                      |d	 d  j         j        
          S )Ndfr   r/   list[Column]c                .   | j         t          	t          t          f          r7fd	D             }                                        |                    }nt          	t                    rЉ	sj        }|                                rdj         d}t          |          |
                                dk     r@                                        d          | j                                                  n                    g           }n@fd	                                D             } j        | }n                    	          }r;t!          j        | j        | j        j                  }|                    |          }|gS )Nc                :    g | ]}                     |          S  )rU   ).0vFs     r6   
<listcomp>z8SparkLikeNamespace.lit.<locals>.func.<locals>.<listcomp>e   s#    6661aeeAhh666r8   z'Cannot create an empty struct type for z backend)   r   z{}c                f    g | ]-\  }}                     |                              |          .S rh   )rU   alias)ri   krj   rk   s      r6   rl   z8SparkLikeNamespace.lit.<locals>.func.<locals>.<listcomp>t   s3    !N!N!N1!%%((.."3"3!N!N!Nr8   )rF   
isinstancelisttuplerU   arraydictr4   is_sqlframeNotImplementedError_backend_version	from_jsonrI   
StructTypestructitemsr   r3   nativesparkSessioncast)
rd   
lit_valuescolumnimplmsgnative_dtyperk   ra   r5   rS   s
         @r6   funcz$SparkLikeNamespace.lit.<locals>.funca   s   A%$// &6666666
qwwz2233E4(( & 3/D'')) 7fH\fff1#666  0022V;; AEE$KK1B1M1M1O1OPPPXXb\\ F "O!N!N!N!N!N!NJ%QXz2FFu 374="*;RY=S     \228Or8   _window_inputsWindowInputs[Column]c                     |           S r2   rh   )rd   r   r   s     r6   window_funcz+SparkLikeNamespace.lit.<locals>.window_func   s     488Or8   c                    dgS )Nliteralrh   _dfs    r6   <lambda>z(SparkLikeNamespace.lit.<locals>.<lambda>   s    yk r8   evaluate_output_namesalias_output_namesr-   r.   rd   r   r/   re   )rd   r   r   r   r/   re   r?   r3   r4   )r5   rS   ra   r   r   s   ``` @r6   rU   zSparkLikeNamespace.lit`   s    	 	 	 	 	 	 	 	@	 	 	 	 	 	
 zz"9"9#M/  
 
 	
r8   c                T    dd}|                      |d d | j        | j                  S )	Nrd   r   r/   re   c                8    | j                             d          gS )N*)rF   count)rd   s    r6   r   z$SparkLikeNamespace.len.<locals>.func   s    EKK$$%%r8   c                    dgS )Nlenrh   r   s    r6   r   z(SparkLikeNamespace.len.<locals>.<lambda>   s    ug r8   r   r   r   )r5   r   s     r6   r   zSparkLikeNamespace.len   sJ    	& 	& 	& 	& zz"5"5#M/  
 
 	
r8   c                :     d fd}  j         j        |gR  S )NcolsIterable[Column]r/   r   c                    t          |           } d         j        }t          t          j        fd| D                       }t          t          j        fd| D                       }t          |||          S )Nr   c              3  ~   K   | ]7}j                             |j                             d                     V  8dS )r   N)rF   r_   rU   ri   colr5   s     r6   	<genexpr>zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   sA      UUtw//TW[[^^DDUUUUUUr8   c              3     K   | ]B}|                                                     j                                                  V  Cd S r2   )	isNotNullr   rI   IntegerTyper   s     r6   r   zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   sH      YYS%%d&9&E&E&G&GHHYYYYYYr8   )rs   rF   r   operatoraddr   )r   rk   	numeratordenominatorr]   r5   s       r6   r   z0SparkLikeNamespace.mean_horizontal.<locals>.func   s    ;;DaAUUUUPTUUU I !YYYYTXYYY K q)[999r8   )r   r   r/   r   )r?   _from_elementwise_horizontal_op)r5   r]   r   s   `` r6   mean_horizontalz"SparkLikeNamespace.mean_horizontal   sF    
	: 
	: 
	: 
	: 
	: 
	: 
	: :tz9$GGGGGr8   r|   Iterable[SparkLikeLazyFrame]howr   r   c                  d |D             }|dk    r|d         j         }t          |dd          d          D ]M\  }}|j         }t          |          t          |          k    r||k    sd| d| d| d	}t          |          Nt	          t          d
 |          | j        | j                  S |dk    r+t	          t          d |          | j        | j                  S t          )Nc                    g | ]	}|j         
S rh   )_native_frame)ri   items     r6   rl   z-SparkLikeNamespace.concat.<locals>.<listcomp>   s    444dt!444r8   verticalr      )startz>unable to vstack, column names don't match:
   - dataframe 0: z
   - dataframe z: 
c                ,    |                      |          S r2   )unionxys     r6   r   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    QWWQZZ r8   )native_dataframer-   r.   diagonalc                0    |                      |d          S )NT)allowMissingColumns)unionByNamer   s     r6   r   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    qd!K!K r8   )	columns	enumerater   	TypeErrorr   r   r3   r4   rw   )	r5   r|   r   dfscols_0ird   cols_currentr   s	            r6   concatzSparkLikeNamespace.concat   sV    54e444*V^F"3qrr7!444 ) )2!z\**c&kk99PV@V@V@-3@ @*+@ @/;@ @ @ 
 $C..( AW &!'(?(?!E!E#3    *%!'KKS" " #3    "!r8   	separatorignore_nullsboolc                    d fd}                      |t           t            j         j                  S )Nrd   r   r/   re   c                \    j         t          t          j         fdD                                 } j        g|R  }sct          t          j        fd|D                       }                    | |          	                    
                    d                     }|gS )Nc              3  .   K   | ]} |          V  d S r2   rh   )ri   erd   s     r6   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s+      ,B,BqQQrUU,B,B,B,B,B,Br8   c              3  B   K   | ]}                     |          V  d S r2   )isnull)ri   srk   s     r6   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s-      1L1L!!((1++1L1L1L1L1L1Lr8   )rF   rs   r   from_iterable	concat_wsr   r   or_r[   rX   rU   )	rd   r   result	null_maskrk   r]   r   r5   r   s	   `   @r6   r   z+SparkLikeNamespace.concat_str.<locals>.func   s    A,,B,B,B,BE,B,B,BBBCCD Q[2T222F K"8<1L1L1L1Lt1L1L1LMM	
F33==aeeDkkJJ8Or8   callr   r   r-   r.   r   )r?   r	   r   r3   r4   )r5   r   r   r]   r   s   ```` r6   
concat_strzSparkLikeNamespace.concat_str   sn    		 		 		 		 		 		 		 		 		 zz"?"G95AM/  
 
 	
r8   abmethodr   c                    |dk    rd}t          |          d	 fd}                     |t                    t                     j         j                  S )
Npearsonz2Only 'pearson' correlation is supported for Spark.rd   r   r/   re   c                    j         }|                               }|                               }|                    ||          gS r2   )rF   _evaluate_single_output_exprcorr)rd   rk   a_b_r   r   r5   s       r6   r   z%SparkLikeNamespace.corr.<locals>.func   sE    A0033B0033BFF2rNN##r8   r   r   )rw   r?   r	   r   r3   r4   )r5   r   r   r   r   r   s   ```   r6   r   zSparkLikeNamespace.corr   s     YFC%c***	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ zz"?1"E"E9!Q??M/  
 
 	
r8   c                |      j         }d fd}                     |t           t           | j                  S )Nrd   r   r/   re   c                     j         } fdD             }d |                                D             } |j        | gS )Nc           
     n    i | ]1}t           |          gt          |g           R  D ]	\  }}}||
2S rh   )r   r
   )ri   exprnative_expr_ro   rd   s        r6   
<dictcomp>z;SparkLikeNamespace.struct.<locals>.func.<locals>.<dictcomp>   sv     3 3 3-7DHH.@r2NN. . .3 3 *KE {3 3 3 3r8   c              3  F   K   | ]\  }}|                     |          V  d S r2   )ro   )ri   rJ   r   s      r6   r   z:SparkLikeNamespace.struct.<locals>.func.<locals>.<genexpr>  s0      NN94syyNNNNNNr8   )rF   r|   r{   )rd   rk   names_to_colsaliasedr]   r5   s   `   r6   r   z'SparkLikeNamespace.struct.<locals>.func   sg    A3 3 3 3!3 3 3M ON8K8K8M8MNNNGAHg&''r8   r   r   )r3   r?   r	   r   r4   )r5   r]   r-   r   s   ``  r6   r{   zSparkLikeNamespace.struct   sg    -
	( 
	( 
	( 
	( 
	( 
	( 
	( zz"?"G95A/  
 
 	
r8   )r-   r   r.   r   r/   r0   )r/   r   )r/   r=   )r/   r@   )rJ   rK   rL   rM   r/   r   )rS   r   r/   r   r2   )rW   r   rS   r   rX   rY   r/   r   )r]   r   r/   r   )rS   r    ra   rb   r/   r   )r/   r   )r]   r   r/   r   )r|   r   r   r   r/   r   )r]   r   r   rK   r   r   r/   r   )r   r   r   r   r   r   r/   r   )__name__
__module____qualname__r7   propertyr<   r?   rB   rF   rI   rR   rV   r\   r`   rU   r   r   r   r   r   r{   rh   r8   r6   r,   r,   -   s       . . . . ? ? ? X?    X " " " X" 6 6 X6 : : X:L L L L" " " " LPC C C C C( ( ( (-
 -
 -
 -
^

 

 

 

H H H H" " " "@
 
 
 
,
 
 
 
*
 
 
 
 
 
r8   r,   r   r   ).
__future__r   r   	functoolsr   	itertoolsr   typingr   r   narwhals._expression_parsingr   r	   r
   narwhals._spark_like.dataframer   narwhals._spark_like.exprr   narwhals._spark_like.selectorsr   narwhals._spark_like.utilsr   r   r   r   narwhals._sql.namespacer   narwhals._utilsr   collections.abcr   r   sqlframe.base.columnr   narwhals._compliant.windowr   r   r   r   narwhals.typingr   r   r   r    rP   r,   rh   r8   r6   <module>r      s(   " " " " " "              % % % % % % % %         
 > = = = = = 3 3 3 3 3 3 E E E E E E            1 0 0 0 0 0 & & & & & & Z11111111++++++777777@@@@@@77777777YYYYYYYYYYYY    ]
 ]
 ]
 ]
 ]
#]4GQR]
 ]
 ]
 ]
 ]
r8   