
    O3j[&              	         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 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+ejX                  ejZ                  ej\                  ej^                  ej`                  dZ1 G d deeeddf         Z2y)    )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)IterableMapping)Column)WindowInputs)SQLFrameDataFrame)ImplementationVersion)ConcatMethodCorrelationMethod	IntoDTypePythonLiteral
startswithendswithbtrimsplitregexp)starts_with	ends_withtrim	str_splitregexp_matches)addsubtractmultiplydivideandc                      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	 	 	 	 	 	 	 	 d!dZddZy	)"SparkLikeNamespacec                    || _         || _        y N)_version_implementation)selfversionimplementations      K/DATA/.local/lib/python3.12/site-packages/narwhals/_spark_like/namespace.py__init__zSparkLikeNamespace.__init__7   s    -    c                ,    t        j                  |       S r2   )r   from_namespacer5   s    r8   	selectorszSparkLikeNamespace.selectors;   s    )88>>r:   c                    t         S r2   r   r=   s    r8   _exprzSparkLikeNamespace._expr?   s    r:   c                    t         S r2   r   r=   s    r8   
_lazyframezSparkLikeNamespace._lazyframeC   s    !!r:   c                H    t         rddlm} |S t        | j                        S )Nr   )	functions)r   sqlframe.baserD   r   r4   )r5   rD   s     r8   _FzSparkLikeNamespace._FG   s    / 4 455r:   c                H    t         rddlm} |S t        | j                        S )Nr   )types)r   rE   rH   r   r4   )r5   rH   s     r8   _native_dtypesz!SparkLikeNamespace._native_dtypesO   s    +L#D$8$899r:   c                    |t         v rt        |   | S |dk(  r|d   j                         S  t        | j                  t        j                  ||            | S )N	isnotnullr   )_BINARY_OPS	isNotNullgetattrrF   FUNCTION_REMAPPINGSget)r5   nameargss      r8   	_functionzSparkLikeNamespace._functionW   s[    ;t$d++;7$$&&Dwtww 3 7 7d CDdKKr:   c                8    | j                   j                  |      S r2   )rF   lit)r5   values     r8   _litzSparkLikeNamespace._lit^   s    ww{{5!!r:   Nc                    || j                   j                  ||      S | j                   j                  ||      j                  |      S r2   )rF   when	otherwise)r5   	conditionrV   rZ   s       r8   _whenzSparkLikeNamespace._whena   s?     77<<	511ww||Iu-77	BBr:   c                4     | j                   j                  | S r2   )rF   coalesce)r5   exprss     r8   	_coalescezSparkLikeNamespace._coalesceh   s    tww''r:   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                  |            }nt        t              rs
j                  }|j                         rd
j                   d}t        |      |j                         dk  r9|j                  |j	                  d      | j                  j                               n|j                  g       }naj                         D cg c]%  \  }}|j	                  |      j!                  |      ' }}} |j                  | }n|j	                        }	rGt#        	
j$                  | j                  | j&                  j(                        }|j+                  |      }|gS c c}w c c}}w )Nz'Cannot create an empty struct type for z backend)   r   z{})rF   
isinstancelisttuplerU   arraydictr4   is_sqlframeNotImplementedError_backend_version	from_jsonrI   
StructTypestructitemsaliasr   r3   nativesparkSessioncast)dfFv
lit_valuescolumnimplmsgknative_dtypedtyper5   rV   s            r8   funcz$SparkLikeNamespace.lit.<locals>.funcl   sx   A%$/0561aeeAh
6qwwz23E4(//D'') GH\H\G]]ef1#66  002V; AEE$K1B1B1M1M1OPXXb\  AF!N1!%%(.."3J!N%QXXz2Fu74=="*;*;RYY=S=S   \28O5 7 "Os   F8*F=c                     |       S r2    )rt   _window_inputsr~   s     r8   window_funcz+SparkLikeNamespace.lit.<locals>.window_func   s     8Or:   c                    dgS )Nliteralr   _dfs    r8   <lambda>z(SparkLikeNamespace.lit.<locals>.<lambda>   s    ykr:   evaluate_output_namesalias_output_namesr6   r7   rt   r   returnlist[Column])rt   r   r   zWindowInputs[Column]r   r   r@   r3   r4   )r5   rV   r}   r   r~   s   ``` @r8   rU   zSparkLikeNamespace.litk   sZ    	@	"	4H		
 zz"9#MM//  
 	
r:   c                `    dd}| j                  |d d | j                  | j                        S )Nc                :    | j                   j                  d      gS )N*)rF   count)rt   s    r8   r~   z$SparkLikeNamespace.len.<locals>.func   s    EEKK$%%r:   c                    dgS )Nlenr   r   s    r8   r   z(SparkLikeNamespace.len.<locals>.<lambda>   s    ugr:   r   r   r   )r5   r~   s     r8   r   zSparkLikeNamespace.len   s8    	& zz"5#MM//  
 	
r:   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)rF   r^   rU   .0colr5   s     r8   	<genexpr>zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s1     UPTtww//TWW[[^DPTs   ?Ac              3     K   | ];  }|j                         j                  j                  j                                = y wr2   )rM   rs   rI   IntegerTyper   s     r8   r   zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s4     YTXS%%d&9&9&E&E&GHTXs   AA)rf   rF   r   operatorr*   r   )colsru   	numeratordenominatorr_   r5   s       r8   r~   z0SparkLikeNamespace.mean_horizontal.<locals>.func   s`    ;DaAUPTUI !YTXYK q)[99r:   )r   zIterable[Column]r   r   )r@   _from_elementwise_horizontal_op)r5   r_   r~   s   `` r8   mean_horizontalz"SparkLikeNamespace.mean_horizontal   s&    
	: :tzz99$GGGr:   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 r2   )unionxys     r8   r   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    QWWQZr:   )native_dataframer6   r7   diagonalc                (    | j                  |d      S )NT)allowMissingColumns)unionByNamer   s     r8   r   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    qd!Kr:   )
_native_framecolumns	enumerater   	TypeErrorr   r   r3   r4   rj   )
r5   ro   howitemdfscols_0irt   cols_currentrz   s
             r8   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r2   r   )r   ert   s     r8   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     ,BEqQrUEs   c              3  @   K   | ]  }j                  |        y wr2   )isnull)r   sru   s     r8   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     1Lt!!((1+ts   )rF   rf   r   from_iterable	concat_wsr   r   or_rY   rZ   rU   )	rt   r   result	null_maskru   r_   ignore_nullsr5   	separators	   `   @r8   r~   z+SparkLikeNamespace.concat_str.<locals>.func   s    A,,,BE,BBCD Q[[2T2F"8<<1Lt1LM	
F3==aeeDkJ8Or:   callr   r   r6   r7   r   )r@   r	   r   r3   r4   )r5   r   r   r_   r~   s   ```` r8   
concat_strzSparkLikeNamespace.concat_str   sH    		 		 zz"?"G95AMM//  
 	
r:   c                    |dk7  rd}t        |      d fd} j                  |t              t               j                   j
                        S )Npearsonz2Only 'pearson' correlation is supported for Spark.c                    j                   }| j                        }| j                        }|j                  ||      gS r2   )rF   _evaluate_single_output_exprcorr)rt   ru   a_b_abr5   s       r8   r~   z%SparkLikeNamespace.corr.<locals>.func   s?    A003B003BFF2rN##r:   r   r   )rj   r@   r	   r   r3   r4   )r5   r   r   methodrz   r~   s   ```   r8   r   zSparkLikeNamespace.corr   sa     YFC%c**	$ zz"?1"E9!Q?MM//  
 	
r:   c                      j                   }d fd} j                  |t         t         | j                        S )Nc                    	j                   }D ci c].  }t         ||       gt        || g       ddiD ]	  \  }}}|| 0 }}}}}d |j                         D        } |j                  | gS c c}}}}w )NstrictTc              3  D   K   | ]  \  }}|j                  |        y wr2   )rp   )r   rQ   r   s      r8   r   z:SparkLikeNamespace.struct.<locals>.func.<locals>.<genexpr>  s     N8M94syy8Ms    )rF   zipr
   ro   rn   )
rt   ru   exprnative_expr_rp   names_to_colsaliasedr_   r5   s
           r8   r~   z'SparkLikeNamespace.struct.<locals>.func  s    A "3!D-0H.6tRD.  .)KE {". !  3 O8K8K8MNGAHHg&''3s   3A4
r   r   )r3   r@   r	   r   r4   )r5   r_   r6   r~   s   ``  r8   rn   zSparkLikeNamespace.struct   sH    --	( zz"?"G95A//  
 	
r:   )r6   r   r7   r   r   None)r   r   )r   ztype[SparkLikeExpr])r   ztype[SparkLikeLazyFrame])rQ   strrR   zColumn | PythonLiteralr   r   )rV   r   r   r   r2   )r[   r   rV   r   rZ   zColumn | Noner   r   )r_   r   r   r   )rV   r   r}   zIntoDType | Noner   r   )r   r   )r_   r   r   r   )ro   zIterable[SparkLikeLazyFrame]r   r   r   r   )r_   r   r   r   r   boolr   r   )r   r   r   r   r   r   r   r   )__name__
__module____qualname__r9   propertyr>   r@   rB   rF   rI   rS   rW   r\   r`   rU   r   r   r   r   r   rn   r   r:   r8   r0   r0   4   s*   . ? ?   " " 6 6 : :L" LPCC(.C;HC	C(-
^

H"1";G"	"@
#
03
CG
	
,

#0
=N
	
*
r:   r0   r   r   )3
__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   collections.abcr   r   sqlframe.base.columnr   narwhals._compliant.windowr   r   narwhals._utilsr   r   narwhals.typingr   r   r   r   rO   r*   submultruedivand_rL   r0   r   r:   r8   <module>r      s    "    % 
 > 3 E  11+7@7YY    <<==c
#]4GQRc
r:   