
    .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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-y)    )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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      [/opt/house_gps_flutter/.venv/lib/python3.12/site-packages/narwhals/_spark_like/namespace.py__init__zSparkLikeNamespace.__init__0   s    -    c                ,    t        j                  |       S r.   )r   from_namespacer1   s    r4   	selectorszSparkLikeNamespace.selectors4   s    )88>>r6   c                    t         S r.   r   r9   s    r4   _exprzSparkLikeNamespace._expr8   s    r6   c                    t         S r.   r   r9   s    r4   
_lazyframezSparkLikeNamespace._lazyframe<   s    !!r6   c                H    t         rddlm} |S t        | j                        S )Nr   )	functions)r   sqlframe.baser@   r   r0   )r1   r@   s     r4   _FzSparkLikeNamespace._F@   s    / 4 455r6   c                H    t         rddlm} |S t        | j                        S )Nr   )types)r   rA   rD   r   r0   )r1   rD   s     r4   _native_dtypesz!SparkLikeNamespace._native_dtypesH   s    +L#D$8$899r6   c                \     t        | j                  t        j                  ||            | S r.   )getattrrB   FUNCTION_REMAPPINGSget)r1   nameargss      r4   	_functionzSparkLikeNamespace._functionP   s(    Dwtww 3 7 7d CDdKKr6   c                8    | j                   j                  |      S r.   )rB   lit)r1   values     r4   _litzSparkLikeNamespace._litS   s    ww{{5!!r6   Nc                    || j                   j                  ||      S | j                   j                  ||      j                  |      S r.   )rB   when	otherwise)r1   	conditionrO   rS   s       r4   _whenzSparkLikeNamespace._whenV   s?     77<<	511ww||Iu-77	BBr6   c                4     | j                   j                  | S r.   )rB   coalesce)r1   exprss     r4   	_coalescezSparkLikeNamespace._coalesce]   s    tww''r6   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{})rB   
isinstancelisttuplerN   arraydictr0   is_sqlframeNotImplementedError_backend_version	from_jsonrE   
StructTypestructitemsaliasr   r/   nativesparkSessioncast)dfFv
lit_valuescolumnimplmsgknative_dtypedtyper1   rO   s            r4   funcz$SparkLikeNamespace.lit.<locals>.funca   sv   A%$/0561aeeAh6
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!NJ!N%QXXz2Fu74=="*;*;RYY=S=S   \28O5 7 "Os   F8*F=c                     |       S r.    )rm   _window_inputsrw   s     r4   window_funcz+SparkLikeNamespace.lit.<locals>.window_func   s     8Or6   c                    dgS )Nliteralry   _dfs    r4   <lambda>z(SparkLikeNamespace.lit.<locals>.<lambda>   s    yk r6   evaluate_output_namesalias_output_namesr2   r3   rm   r   returnlist[Column])rm   r   rz   zWindowInputs[Column]r   r   r<   r/   r0   )r1   rO   rv   r{   rw   s   ``` @r4   rN   zSparkLikeNamespace.lit`   sZ    	@	"	4H		
 zz"9#MM//  
 	
r6   c                `    dd}| j                  |d d | j                  | j                        S )Nc                :    | j                   j                  d      gS )N*)rB   count)rm   s    r4   rw   z$SparkLikeNamespace.len.<locals>.func   s    EEKK$%%r6   c                    dgS )Nlenry   r~   s    r4   r   z(SparkLikeNamespace.len.<locals>.<lambda>   s    ug r6   r   r   r   )r1   rw   s     r4   r   zSparkLikeNamespace.len   s8    	& zz"5#MM//  
 	
r6   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)rB   rW   rN   .0colr1   s     r4   	<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.   )	isNotNullrl   rE   IntegerTyper   s     r4   r   zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s1     YS%%d&9&9&E&E&GHYs   AA)r_   rB   r   operatoraddr   )colsrn   	numeratordenominatorrX   r1   s       r4   rw   z0SparkLikeNamespace.mean_horizontal.<locals>.func   s`    ;DaAUPTUI !YTXYK q)[99r6   )r   zIterable[Column]r   r   )r<   _from_elementwise_horizontal_op)r1   rX   rw   s   `` r4   mean_horizontalz"SparkLikeNamespace.mean_horizontal   s&    
	: :tzz99$GGGr6   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     r4   r   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    QWWQZ r6   )native_dataframer2   r3   diagonalc                (    | j                  |d      S )NT)allowMissingColumns)unionByNamer   s     r4   r   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    qd!K r6   )
_native_framecolumns	enumerater   	TypeErrorr   r   r/   r0   rc   )
r1   rh   howitemdfscols_0irm   cols_currentrs   s
             r4   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.   ry   )r   erm   s     r4   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     ,BqQrU,Bs   c              3  @   K   | ]  }j                  |        y wr.   )isnull)r   srn   s     r4   r   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s     1L!!((1+1Ls   )rB   r_   r   from_iterable	concat_wsr   r   or_rR   rS   rN   )	rm   r   result	null_maskrn   rX   ignore_nullsr1   	separators	   `   @r4   rw   z+SparkLikeNamespace.concat_str.<locals>.func   s    A,,,BE,BBCD Q[[2T2F"8<<1Lt1LM	
F3==aeeDkJ8Or6   callr   r   r2   r3   r   )r<   r	   r   r/   r0   )r1   r   r   rX   rw   s   ```` r4   
concat_strzSparkLikeNamespace.concat_str   sH    		 		 zz"?"G95AMM//  
 	
r6   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 r.   )rB   _evaluate_single_output_exprcorr)rm   rn   a_b_abr1   s       r4   rw   z%SparkLikeNamespace.corr.<locals>.func   s?    A003B003BFF2rN##r6   r   r   )rc   r<   r	   r   r/   r0   )r1   r   r   methodrs   rw   s   ```   r4   r   zSparkLikeNamespace.corr   sa     YFC%c**	$ zz"?1"E9!Q?MM//  
 	
r6   c                      j                   }d fd} j                  |t         t         | j                        S )Nc                    	j                   }D ci c]+  }t         ||       gt        || g        D ]	  \  }}}|| - }}}}}d |j                         D        } |j                  | gS c c}}}}w )Nc              3  D   K   | ]  \  }}|j                  |        y wr.   )ri   )r   rJ   r   s      r4   r   z:SparkLikeNamespace.struct.<locals>.func.<locals>.<genexpr>  s     N94syyNs    )rB   r   r
   rh   rg   )
rm   rn   exprnative_expr_ri   names_to_colsaliasedrX   r1   s
           r4   rw   z'SparkLikeNamespace.struct.<locals>.func   s    A "3 3-7H.@r2N.3 *KE {"33M 3 O8K8K8MNGAHHg&''3s   0A1
r   r   )r/   r<   r	   r   r0   )r1   rX   r2   rw   s   ``  r4   rg   zSparkLikeNamespace.struct   sH    --
	( zz"?"G95A//  
 	
r6   )r2   r   r3   r   r   None)r   r   )r   ztype[SparkLikeExpr])r   ztype[SparkLikeLazyFrame])rJ   strrK   zColumn | PythonLiteralr   r   )rO   r   r   r   r.   )rT   r   rO   r   rS   zColumn | Noner   r   )rX   r   r   r   )rO   r    rv   zIntoDType | Noner   r   )r   r   )rX   r   r   r   )rh   zIterable[SparkLikeLazyFrame]r   r   r   r   )rX   r   r   r   r   boolr   r   )r   r   r   r   r   r   r   r   )__name__
__module____qualname__r5   propertyr:   r<   r>   rB   rE   rL   rP   rU   rY   rN   r   r   r   r   r   rg   ry   r6   r4   r,   r,   -   s*   . ? ?   " " 6 6 : :L" LPCC(.C;HC	C(-
^

H"1";G"	"@
#
03
CG
	
,

#0
=N
	
*
r6   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    rH   r,   ry   r6   r4   <module>r      s    "    % 
 > 3 E  1 &1+7@7YY   ]
#]4GQR]
r6   