
    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 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 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iZ G d d      ZddZ	 	 	 	 	 	 	 	 	 	 ddZy)    )annotations)copy)partial)TYPE_CHECKING)Any)Callable)Sequence)is_simple_aggregation)parse_into_exprs)_std)_var)parse_version)remove_prefix)Column)GroupedDataSparkLikeLazyFrame)IntoSparkLikeExpr)CompliantExprlencountc                  @    e Zd Z	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZddZy)SparkLikeLazyGroupByc                "   || _         || _        |rM | j                   j                  j                  | j                        j                  | j                   | _        y  | j                   j                  j                  | j                   | _        y )N)subset)_df_keys_native_framedropnagroupBy_grouped)selfdfkeysdrop_null_keyss       R/var/www/openai/venv/lib/python3.12/site-packages/narwhals/_spark_like/group_by.py__init__zSparkLikeLazyGroupBy.__init__   sp     
TDHH22999LTTDM ;DHH22::DJJGDM    c                D   t        |d| j                  j                         i|}t        | j                        }|D ]6  }|j
                  d}t        |      |j                  |j
                         8 t        | j                  || j                  | j                        S )N	namespacezAnonymous expressions are not supported in group_by.agg.
Instead of `nw.all()`, try using a named expression, such as `nw.col('a', 'b')`
)r   r   __narwhals_namespace__r   r   _output_names
ValueErrorextendagg_pysparkr!   _from_native_frame)r"   aggs
named_aggsexprsoutput_namesexprmsgs          r&   aggzSparkLikeLazyGroupBy.agg-   s    
 !
hh557
 

 #'tzz"2D!!)+ 
 !o% 2 23  MMJJ##	
 	
r(   c                t    ddl m}  ||| j                  j                  | j                  j                        S )Nr   r   )backend_versionversion)narwhals._spark_like.dataframer   r   _backend_version_version)r"   r#   r   s      r&   r0   z'SparkLikeLazyGroupBy._from_native_frameJ   s-    E! 9 9488CTCT
 	
r(   N)r#   r   r$   	list[str]r%   boolreturnNone)r1   r   r2   r   r@   r   )r#   r   r@   r   )__name__
__module____qualname__r'   r7   r0    r(   r&   r   r      sX    HH H 	H
 
H
 
 (
 
	
:
r(   r   c                    | dv rDdd l }t        | dk(  rt        nt        |j	                  dd      t        |j                              S ddlm} t        ||       S )N>   stdvarr   rG   ddof   )rI   
np_version)	functions)
numpyr   r   r   getr   __version__pyspark.sqlrL   getattr)function_namekwargsnpFs       r&   get_spark_functionrV   R   sR    &!U*DFA&$R^^4
 	

 +1m$$r(   c                   |D ]  }t        |      rd}t        |       i }|D ]^  }|j                  dk(  r|j                  d}t	        |      t
        j                  |j                  |j                        }t        |fi |j                  }|j                  |j                  D 	ci c]  }	|	 ||d          c}	       |j                  dk7  s|j                  |j                  d}t	        |      t        |j                  d      }t
        j                  ||      }
t        |
fi |j                  }|j                  t        |j                  |j                        D 	ci c]  \  }}	|	 ||       c}	}       a |j                         D cg c]  \  }}|j                  |       }}}	  | j                   | } ||      S c c}	w c c}	}w c c}}w # t        $ r}d}t#        |      |d }~ww xY w)Nav  Non-trivial complex aggregation found.

Hint: you were probably trying to apply a non-elementary aggregation with a dask dataframe.
Please rewrite your query such that group-by aggregations are elementary. For example, instead of:

    df.group_by('a').agg(nw.col('b').round(2).mean())

use:

    df.with_columns(nw.col('b').round(2)).group_by('a').agg(nw.col('b').mean())

r   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issuesrJ   zcol->zFailed to aggregated - does your aggregation function return a scalar?         

 Please see: https://narwhals-dev.github.io/narwhals/pandas_like_concepts/improve_group_by_operation/)r
   r-   _depthr,   AssertionErrorPOLARS_TO_PYSPARK_AGGREGATIONSrN   _function_namerV   _kwargsupdate_root_namesr   zipitemsaliasr7   RuntimeError)groupedr3   r$   from_dataframer5   r6   simple_aggregationsrR   agg_funcoutput_namepyspark_function	root_namenamecol_agg_columnsresult_simpleexcs                    r&   r/   r/   `   s!    $T*f  S/!  .0;;!!!)w$S)):>>##T%8%8M *-H4<<HH&&CGCUCUVCUKhtAw//CUV  KK1 0 0 8D<N<N<VsC %%%d&9&97C9===
 &&6G$,,G"" /2$2B2BDDVDV.W.W*I{ Xi00.W	
; H 7J6O6O6QR6Q
d4::d#6QKR)#[1
 -((? W$ S  )s3S()s*   )G
(GG8G   	G<)G77G<N)rR   strrS   r   r@   r   )
rc   r   r3   zSequence[CompliantExpr[Column]]r$   r>   rd   z#Callable[[Any], SparkLikeLazyFrame]r@   r   ) 
__future__r   r   	functoolsr   typingr   r   r   r	   narwhals._expression_parsingr
   r   narwhals._spark_like.utilsr   r   narwhals.utilsr   r   rP   r   r   r;   r   narwhals._spark_like.typingr   narwhals.typingr   rZ   r   rV   r/   rE   r(   r&   <module>rx      s    "        > 9 + + ( ("'A=- #(!1 2
 2
j%@)@)*@) @) 8	@)
 @)r(   