
    Wh[              	      r   d dl mZ d dl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 d dl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"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* G d deedef         Z+ G d deedef   e      Z,y)     )annotationsN)reduce)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)SQLThenSQLWhen)
zip_strict)Iterable)Column)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d dZy	)!SparkLikeNamespacec                    || _         || _        y N)_version_implementation)selfversionimplementations      X/var/www/html/jupyter_env/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    r2   	selectorszSparkLikeNamespace.selectors2   s    )88>>r4   c                    t         S r,   r   r7   s    r2   _exprzSparkLikeNamespace._expr6       r4   c                    t         S r,   r	   r7   s    r2   
_lazyframezSparkLikeNamespace._lazyframe:   s    !!r4   c                H    t         rddlm} |S t        | j                        S )Nr   )	functions)r   sqlframe.baser?   r   r.   )r/   r?   s     r2   _FzSparkLikeNamespace._F>   s    / 4 455r4   c                H    t         rddlm} |S t        | j                        S )Nr   )types)r   r@   rC   r   r.   )r/   rC   s     r2   _native_dtypesz!SparkLikeNamespace._native_dtypesF   s    +L#D$8$899r4   c                \     t        | j                  t        j                  ||            | S r,   )getattrrA   FUNCTION_REMAPPINGSget)r/   nameargss      r2   	_functionzSparkLikeNamespace._functionN   s(    Dwtww 3 7 7d CDdKKr4   c                8    | j                   j                  |      S r,   )rA   lit)r/   values     r2   _litzSparkLikeNamespace._litQ   s    ww{{5!!r4   Nc                    || j                   j                  ||      S | j                   j                  ||      j                  |      S r,   )rA   when	otherwise)r/   	conditionrN   rR   s       r2   _whenzSparkLikeNamespace._whenT   s?     77<<	511ww||Iu-77	BBr4   c                4     | j                   j                  | S r,   )rA   coalesce)r/   exprss     r2   	_coalescezSparkLikeNamespace._coalesce[   s    tww''r4   c                n     d fd} j                  |d d  j                   j                        S )Nc                    | j                   j                        }rGt        j                  | j                  | j
                  j                        }|j                  |      }|gS r,   )rA   rM   r   r-   rD   nativesparkSessioncast)dfcolumnnative_dtypedtyper/   rN   s      r2   rO   z$SparkLikeNamespace.lit.<locals>._lit_   sV    UUYYu%F74=="*;*;RYY=S=S   \28Or4   c                    dgS )Nliteral _dfs    r2   <lambda>z(SparkLikeNamespace.lit.<locals>.<lambda>k   s    yk r4   callevaluate_output_namesalias_output_namesr0   r1   r^   r
   returnzlist[Column]r:   r-   r.   )r/   rN   ra   rO   s   ``` r2   rM   zSparkLikeNamespace.lit^   s9    	 zz"9#MM//  
 	
r4   c                `    dd}| j                  |d d | j                  | j                        S )Nc                :    | j                   j                  d      gS )N*)rA   count)r^   s    r2   funcz$SparkLikeNamespace.len.<locals>.funcr   s    EEKK$%%r4   c                    dgS )Nlenrd   re   s    r2   rg   z(SparkLikeNamespace.len.<locals>.<lambda>w   s    ug r4   )rj   rk   r0   r1   rl   rn   )r/   rs   s     r2   ru   zSparkLikeNamespace.lenq   s8    	& zz"5#MM//  
 	
r4   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)rA   rV   rM   .0colr/   s     r2   	<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]   rD   IntegerTypery   s     r2   r|   zCSparkLikeNamespace.mean_horizontal.<locals>.func.<locals>.<genexpr>   s1     YS%%d&9&9&E&E&GHYs   AA)listrA   r   operatoraddr   )colsF	numeratordenominatorrW   r/   s       r2   rs   z0SparkLikeNamespace.mean_horizontal.<locals>.func~   s`    :DaAUPTUI !YTXYK q)[99r4   )r   zIterable[Column]rm   r   )r:   _from_elementwise_horizontal_op)r/   rW   rs   s   `` r2   mean_horizontalz"SparkLikeNamespace.mean_horizontal}   s&    
	: :tzz99$GGGr4   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     r2   rg   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    QWWQZ r4   )native_dataframer0   r1   diagonalc                (    | j                  |d      S )NT)allowMissingColumns)unionByNamer   s     r2   rg   z+SparkLikeNamespace.concat.<locals>.<lambda>   s    qd!K r4   )
_native_framecolumns	enumerateru   	TypeErrorr
   r   r-   r.   NotImplementedError)
r/   itemshowitemdfscols_0ir^   cols_currentmsgs
             r2   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           	     @    D cg c]  } |       D ]  }|  }}}|D cg c]+  }|j                   j                  j                               - }}|D cg c]  } j                  j	                  |       }}spt        t        j                  |      } j                  j                  | t         fd|            j                   j                  j                  d             }|gS t        ||      D 	cg c]J  \  }}	 j                  j                  |	 |      j                   j                  j                  d            L c}	}^}
} fd|d d D        }t         fd fdt        ||      D        |
      }|gS c c}}w c c}w c c}w c c}	}w )Nc                F    j                   j                  d d| |      S )Nz%srA   format_string)r   r   r^   	separators     r2   rg   z=SparkLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>   s$    RUU%8%82i[9KQPQ%R r4    c              3     K   | ]a  }j                   j                  |j                   j                  d             j                  j                   j                               c yw)r   N)rA   rQ   rM   rR   )rz   nmr^   r   s     r2   r|   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   sL       EEJJr25599R=1;;BEEIIi<PQs   A'A*c                >    j                   j                  d| |      S )N%s%sr   )r   r   r^   s     r2   rg   z=SparkLikeNamespace.concat_str.<locals>.func.<locals>.<lambda>   s    !4!4VQ!B r4   c              3  ^   K   | ]$  \  }}j                   j                  d ||       & yw)r   Nr   )rz   svr^   s      r2   r|   z>SparkLikeNamespace.concat_str.<locals>.func.<locals>.<genexpr>   s0       Aq ++FAq9s   *-)r]   rD   
StringTyperA   isnullr   r   or_rQ   rR   rM   r   )r^   r:   r   r   cols_casted	null_masknull_mask_resultresultr{   r   
init_valuevalues
separatorsrW   ignore_nullsr   s   `            r2   rs   z+SparkLikeNamespace.concat_str.<locals>.func   sw   #(<%%)<QA<A<D<KOPa166""3"3">">"@APKP267Qa7I7#)(,,	#B %%R# )BEEIIdO, 4 8O! $.k9#E'R EEJJsC(2225599R=A'#
V
'n
  B$.z6$B  8OA =P7's   F
0F"F AFrh   rl   )r:   r   r   r-   r.   )r/   r   r   rW   rs   s    ``` r2   
concat_strzSparkLikeNamespace.concat_str   sD    !	F zz"?"G95AMM//  
 	
r4   c                0    t         j                  ||       S )N)context)SparkLikeWhen	from_expr)r/   	predicates     r2   rQ   zSparkLikeNamespace.when   s    &&y$&??r4   )r0   r   r1   r   rm   None)rm   r   )rm   ztype[SparkLikeExpr])rm   ztype[SparkLikeLazyFrame])rI   strrJ   zColumn | PythonLiteralrm   r   )rN   r   rm   r   r,   )rS   r   rN   r   rR   zColumn | Nonerm   r   )rW   r   rm   r   )rN   r   ra   zIntoDType | Nonerm   r   )rm   r   )rW   r   rm   r   )r   zIterable[SparkLikeLazyFrame]r   r   rm   r
   )rW   r   r   r   r   boolrm   r   )r   r   rm   r   )__name__
__module____qualname__r3   propertyr8   r:   r=   rA   rD   rK   rO   rT   rX   rM   ru   r   r   r   rQ   rd   r4   r2   r*   r*   +   s   . ? ?   " " 6 6 : :L" LPCC(.C;HC	C(
&

H"1";G"	"@,
#,
03,
CG,
	,
\@r4   r*   r   r   c                      e Zd Zedd       Zy)r   c                    t         S r,   )SparkLikeThenr7   s    r2   _thenzSparkLikeWhen._then   r;   r4   N)rm   ztype[SparkLikeThen])r   r   r   r   r   rd   r4   r2   r   r      s     r4   r   c                      e Zd Zy)r   N)r   r   r   rd   r4   r2   r   r      s    r4   r   )-
__future__r   r   	functoolsr   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   narwhals._sql.when_thenr   r   narwhals._utilsr   collections.abcr   sqlframe.base.columnr   r   r   r   narwhals.typingr   r   r   r   rG   r*   r   r   rd   r4   r2   <module>r      s    "   % > 3 E  1 4 &(+@7XX   p@#]4GQRp@fG.-GH -78-r4   