
    /_iQ#                        d dl mZ d dlZd dlmZmZmZ d dlZd dl	m
Z d dlmZmZ d dlmZ d dlmZ d dlmZmZ er,d dlmZmZmZ d d	lmZ d d
lmZ d dlmZm Z m!Z! d dl"m#Z# d dl$m%Z%  G d ded         Z&y)    )annotationsN)TYPE_CHECKINGAnyClassVar)cast_to_comparable_string_typesextract_py_scalar)EagerGroupBy)!evaluate_output_names_and_aliases)generate_temporary_column_namerequires)IteratorMappingSequence)ArrowDataFrame)	ArrowExpr)AggregateOptionsAggregation
Incomplete)NarwhalsAggregation)UniqueKeepStrategyc                  (   e Zd ZU ddddddddd	dd
dddddZded<   ddddZded<    ed      Zded<    ed      Zded<    ed      Z	ded<    ed      Z
ded<    ed      Zded<   	 	 	 	 	 	 	 	 d%dZ	 	 	 	 	 	 d&d Z	 	 	 	 	 	 	 	 d'd!Zd(d"Zd)d#Zy$)*ArrowGroupBysummeanapproximate_medianmaxminstddevvariancecountcount_distinctallanyfirstlast)r   r   medianr   r   stdvarlenn_uniquer    r"   r#   r$   r%   	any_valuez3ClassVar[Mapping[NarwhalsAggregation, Aggregation]]_REMAP_AGGS)r#   r$   r%   z2ClassVar[Mapping[UniqueKeepStrategy, Aggregation]]_REMAP_UNIQUE)r)   r*   z(ClassVar[frozenset[NarwhalsAggregation]]_OPTION_COUNT_ALL)r    _OPTION_COUNT_VALID)r$   r%   r+   _OPTION_ORDERED)r'   r(   _OPTION_VARIANCE)r#   r"   r   _OPTION_SCALARc                 || _         | j                  ||      \  }| _        | _        |r|j	                  | j                        n|| _        t        j                  | j                  j                  | j                        | _
        || _        y )N)keys)_df_parse_keys_keys_output_key_names
drop_nulls_compliant_framepaTableGroupBy	compliantnative_grouped_drop_null_keys)selfdfr4   drop_null_keysframes        W/var/www/html/land_sniper/venv/lib/python3.12/site-packages/narwhals/_arrow/group_by.py__init__zArrowGroupBy.__init__?   sp     484D4DRd4D4S1tz41@N 0 0 <TY(=(=tzzJ-    c                  d }| j                  |      }| j                  |      }|| j                  v r|d   }t        j                  |      }n|| j
                  v rt        j                  d      }n|| j                  v rt        j                  d      }n\|| j                  v rt        j                  d      }n7|| j                  v r)|j                  dd	      }| j                  |||
      \  }}|| j                  |      |fS )Nddof)rI   r"   mode
only_validr   )	min_countignore_nullsF)rN   )
_leaf_name_kwargsr1   pcVarianceOptionsr.   CountOptionsr/   r2   ScalarAggregateOptionsr0   get_ordered_agg_remap_expr_name)rA   groupedexproptionfunction_namekwargsrI   rN   s           rE   _configure_aggzArrowGroupBy._configure_aggM   s     +/-d#D111&>D''T2Fd444__%0Fd666__,7Fd111..;Fd222!::ne<L"//\ 0 OGV --m<fDDrG   c              J   | j                   j                  }|dk\  rE|j                  r9| j                   j                  }t	        j
                  ||j                  d      }n,|dk  r'd| dt        j                  |      d}t        |      |t        j                  |      fS )a  The default behavior of `pyarrow` raises when `first` or `last` are used.

        You'd see an error like:

            ArrowNotImplementedError: Using ordered aggregator in multiple threaded execution is not supported

        We need to **disable** multi-threading to use them, but the ability to do so
        wasn't possible before `14.0.0` ([pyarrow-36709])

        [pyarrow-36709]: https://github.com/apache/arrow/issues/36709
        )   r   F)use_threadszUsing `z]()` in a `group_by().agg(...)` context is only available in 'pyarrow>=14.0.0', found version z3.

See https://github.com/apache/arrow/issues/36709)
skip_nulls)r=   _backend_version_use_threadsr>   r;   r<   r4   r   _unparse_versionNotImplementedErrorrQ   rT   )rA   rX   namerN   backend_versionr>   msgs          rE   rV   zArrowGroupBy._ordered_aggc   s    & ..99g%'*>*>^^**FoofgllNGw&$  !!)!:!:?!K N OCD 
 &c**11\JJJrG   c           	     @   | j                  |       g }| j                  j                         }| j                  j                         }g | j                  | j                  }| j                  }|D ]G  }t        || j                  |      \  }}	|j                  }
t        |
j                               }t        |      dk(  r|d   j                  dk7  rd}t        |      |j                  |	d          |j                  | j                  d    d       |j                  | j                  d   dt        j                  d      f       | j!                  ||      \  }}}|j#                  |	       |j#                  |D cg c]	  }| d	|  c}       |j#                  |D cg c]  }|||f	 c}       J |j%                  |      }t'        j(                  t              }t+        |      D ]  \  }}||   j                  |        t-        |j.                        t-        |      k(  r!t        |j.                        t        |      k(  sd
| d|j.                   d}t        |      |j.                  D cg c]  }||   j1                  d       }}|D cg c]  }||   	 }}|j3                  |      }| j                  j5                  |      j7                  t9        t;        | j                  | j                                    S c c}w c c}w c c}w c c}w )N   r   r)   z_Safety assertion failed, please report a bug to https://github.com/narwhals-dev/narwhals/issues_countr    r"   rJ   _z"Safety assertion failed, expected z got zH, please report a bug at https://github.com/narwhals-dev/narwhals/issues)_ensure_all_simpler7   copyr8   r?   r
   r=   	_metadatalistop_nodes_reversedr)   rf   AssertionErrorappendrQ   rS   r]   extend	aggregatecollectionsdefaultdict	enumeratesetcolumn_namespoprename_columns_with_nativerenamedictzip)rA   exprsaggsexpected_pyarrow_column_namesnew_column_namesexcluderX   rY   output_namesaliasesmdrq   rh   r[   rZ   output_nameresult_simpleexpected_old_names_indicesidxitem	index_mapis                         rE   aggzArrowGroupBy.agg   s   &GI37::??3D%&*jjoo&78DJJ8!7!78-- 	D$Ednng%!L' B $R%9%9%; <$%*$Q',,5{C(-- ''
3-44

1f5MNTZZ]GR__%5PQR-1-@-@$-O*G]F##G,)00EQRkK=-1R KKIUV++}f5V-	4  ))$/ <G;R;RSW;X""#@A 	9IC&t,33C8	9 **+s3P/QQM../37T3UU 55R4S T$112 3YY 
 !%%@M@Z@Z 
8<&t,003 
	  
 :CCA,Q/CC%445EF~~**=9@@TZZ!7!789
 	
7 S W& 
 Ds   L
&L
;LLc           	   #    
K   t        d| j                  j                        }d}| j                  j                  
t	        
fd| j
                  D        ddi\  }}t        j                  } |g ||d|d}
j                  d	||
      
t        j                  |      D ]  }| j                  j                  
j                  t        j                  
|   |            j                  |g            } |j                  | j
                   j                  d	      }	t!        d |	D               |j                  | j"                  j                   f  y w)N   )n_bytescolumns__null_token_value__c              3  (   K   | ]	  }|     y wN ).0keytables     rE   	<genexpr>z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s     /SeCj/s   	separator replace)null_handlingnull_replacementr   )r   field_columnc              3  2   K   | ]  }t        |        y wr   )r   )r   els     rE   r   z(ArrowGroupBy.__iter__.<locals>.<genexpr>   s     :'+:s   )r   r=   r   r>   r   r7   rQ   binary_join_element_wise
add_columnuniquer}   filterequaldropsimple_selectrowtupler5   )rA   	col_token
null_tokenitseparator_scalar
concat_str
key_valuesvtr   r   s             @rE   __iter__zArrowGroupBy.__iter__   sJ    2t~~55
	 1
%%>/DJJ/ 
;= 

 "$!<!<
 

!
1:Z

   1Yz J:& 	A++RXXeI&6:;@@)MA "!//4::.2215C:c::!1!12 	s   EEN)rB   r   r4   z#Sequence[ArrowExpr] | Sequence[str]rC   boolreturnNone)rX   pa.TableGroupByrY   r   r   z<tuple[pa.TableGroupBy, Aggregation, AggregateOptions | None])rX   r   rf   r   rN   r   r   z(tuple[pa.TableGroupBy, AggregateOptions])r   r   r   r   )r   z$Iterator[tuple[Any, ArrowDataFrame]])__name__
__module____qualname__r,   __annotations__r-   	frozensetr.   r/   r0   r1   r2   rF   r]   rV   r   r   r   rG   rE   r   r      sS   &$HKD $ IME 
 CLC?  ENjDYAY@I&AO=  BK>AZ>Z?H@N< .. 2. . 
.E&E.7E	EE,K K "K K 
2K@9
vrG   r   )r   r   r   )'
__future__r   rv   typingr   r   r   pyarrowr;   pyarrow.computecomputerQ   narwhals._arrow.utilsr   r   narwhals._compliantr	   narwhals._expression_parsingr
   narwhals._utilsr   r   collections.abcr   r   r   narwhals._arrow.dataframer   narwhals._arrow.exprr   narwhals._arrow.typingr   r   r   narwhals._compliant.typingr   narwhals.typingr   r   r   rG   rE   <module>r      sX    "  / /   T , J D;;8. 
 ?2|< LM |rG   