
    g                       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 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 d dl	mZ  ed      	 	 	 	 	 	 dd       ZddZddZ	 	 	 	 	 	 	 	 ddZddZddZddZy)    )annotations)	lru_cache)TYPE_CHECKING)Any)InvalidIntoExprError)import_dtypes_module)Columntypes)SparkLikeLazyFrame)IntoSparkLikeExpr)DType)Version   )maxsizec                    t        |      }ddlm} t         |j                        r|j                         S t         |j                        r|j                         S t         |j                        r|j                         S t         |j                        r|j                         S t         |j                        r|j                         S |j                  |j                  |j                   g}t#         fd|D              r|j%                         S t         |j&                        r|j)                         S t         |j*                        r|j-                         S |j.                  |j0                  g}t#         fd|D              r|j3                         S t         |j4                        r|j7                         S |j9                         S )N)versionr   r
   c              3  6   K   | ]  }t        |        y wN
isinstance.0tdtypes     O/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_spark_like/utils.py	<genexpr>z+native_to_narwhals_dtype.<locals>.<genexpr>+   s     
6A:eQ   c              3  6   K   | ]  }t        |        y wr   r   r   s     r   r   z+native_to_narwhals_dtype.<locals>.<genexpr>5   s     
8A:eQr   )r   pyspark.sqlr   r   
DoubleTypeFloat64	FloatTypeFloat32LongTypeInt64IntegerTypeInt32	ShortTypeInt16
StringTypeVarcharTypeCharTypeanyStringBooleanTypeBooleanDateTypeDateTimestampTypeTimestampNTZTypeDatetimeDecimalTypeDecimalUnknown)r   r   dtypespyspark_typesstring_typesdatetime_typess   `     r   native_to_narwhals_dtyper>      sw   
 "'2F2%112~~%001~~%//0||~%223||~%001||~  !!L
 
6
66}}%223~~%//0{{}##&&N 
8
88  %223~~>>    c                d    t        | j                  j                  |      j                  d         S )Nr   )str_native_frameselectcolumns)dfcolumns     r   get_column_namerG   =   s)    r&&v.66q9::r?   c                @   t        |t              rddlm} |j	                  |      gS t        |d      rM|j                  |       }|j                  .t        |      t        |j                        k7  rd}t        |      |S t        j                  t        |            )Nr   	functions__narwhals_expr__z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues)r   rA   r    rJ   colhasattr_call_output_nameslenAssertionErrorr   from_invalid_typetype)rE   exprFcol_output_listmsgs        r   _columns_from_exprrX   A   s    $.d}	*	+**R.) C(:(:$;;sC %%"44T$Z@@r?   c                   i }|D ]o  }t        | |      }t        |t              r|g}n2|j                  |D cg c]  }t	        | |       }}n|j                  }|j                  t        ||             q |j                         D ]4  \  }}t        | |      }	t        |	      dk7  rd}
t        |
      |	d   ||<   6 |S c c}w )N   z-Named expressions must return a single columnr   )
rX   r   rA   rO   rG   updatezipitemsrP   rQ   )rE   exprsnamed_exprsresult_columnsrT   column_listoutput_namesrL   	col_aliascolumns_listrW   s              r   parse_exprs_and_named_exprsre   R   s     /1N(T2dC  6L'@KLOB4LL--Lc,<=  ',,.	4)"d3|!AC %%$0Oy! /  Ms   C c                   ddl m} t        ||      rz|j                  |       }t	        |      dk7  rd}t        |      |d   }|j                  r;ddlm} ddl	m
} |j                  |j                  |j                  d                  S |S |S )Nr   )SparkLikeExprrZ   z^Multi-output expressions (e.g. `nw.all()` or `nw.col('a', 'b')`) not supported in this contextrI   )Window)narwhals._spark_like.exprrg   r   rN   rP   NotImplementedError_returns_scalarr    rJ   pyspark.sql.windowrh   overpartitionBylit)rE   objrg   column_resultsrW   column_resultrU   rh   s           r   maybe_evaluaters   h   s    7#}%2~!#rC%c**&q)21 %%f&8&8q&BCCJr?   c                0   |dkD  rYddl m} |dk(  r|j                  |       S |j                  |       }|j                  |       |j	                  |dz
  ||z
  z        z  S ddlm} ddl m} t        | t              r|j                  |       n| } |||      S )N   r   r   rI   rZ   )stddevddof)
r    rJ   stddev_sampcountsqrtpyspark.pandas.spark.functionsrw   r   rA   rL   )_inputry   
np_versionrU   n_rowsrw   	input_cols          r   _stdr   {   s    F.19==((}}V$qvvvzftm.L'MMM5*!+FC!8ffI)$''r?   c                   |dkD  rJddl m} |dk(  r|j                  |       S |j                  |       }|j                  |       |dz
  z  ||z
  z  S ddlm} ddl m} t        | t              r|j                  |       n| } |||      S )Nru   r   rI   rZ   )varrx   )	r    rJ   var_sampr{   r}   r   r   rA   rL   )r~   ry   r   rU   r   r   r   s          r   _varr      s|    F.19::f%%zz&!VaZ0FTMBB2*!+FC!8ffIyt$$r?   N)r   zpyspark_types.DataTyper   r   returnr   )rE   r   rF   r	   r   rA   )rE   r   rT   r   r   zlist[Column])rE   r   r^   r   r_   r   r   zdict[str, Column])rE   r   rp   r   r   r   )r~   zColumn | strry   intr   ztuple[int, ...]r   r	   )
__future__r   	functoolsr   typingr   r   narwhals.exceptionsr   narwhals.utilsr   r    r	   r   r;   narwhals._spark_like.dataframer   narwhals._spark_like.typingr   narwhals.dtypesr   r   r>   rG   rX   re   rs   r   r    r?   r   <module>r      s    "     4 /"2A=%& 2%!%% % %P;A"$5FW,&("%r?   