§
    Šhþhü  ã                  ó  — 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 d dl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  edd¬¦  «        Z G d„ dee         ¦  «        Z G d„ dee         ¦  «        ZdS )é    )Úannotations)ÚTYPE_CHECKINGÚAnyÚGenericÚTypeVar)Úall_exprs_are_scalar_like)ÚflattenÚtupleify)ÚInvalidOperationError)Ú
DataFrameT)ÚIterableÚIteratorÚSequence)ÚCompliantExprAny)Ú	LazyFrame)ÚExprÚ
LazyFrameTzLazyFrame[Any])Úboundc                  ó&   — e Zd Zdd	„Zdd„Zdd„ZdS )ÚGroupByÚdfr   Úkeysú*Sequence[str] | Sequence[CompliantExprAny]Údrop_null_keysÚboolÚreturnÚNonec              óx   — || _         || _        | j         j                             | j        |¬¦  «        | _        d S ©N)r   ©Ú_dfÚ_keysÚ_compliant_frameÚgroup_byÚ_grouped©Úselfr   r   r   s       úH/var/www/histauto/venv/lib/python3.11/site-packages/narwhals/group_by.pyÚ__init__zGroupBy.__init__   ó>   € ð  "ˆŒØˆŒ
ØœÔ1×:Ò:ØŒJ ~ð ;ñ 
ô 
ˆŒˆˆó    ÚaggsúExpr | Iterable[Expr]Ú
named_aggsr   c                óX  ‡— t          t          |¦  «        ¦  «        }t          |i |¤Žsd}t          |¦  «        ‚| j                             ¦   «         Šg ˆfd„|D ¦   «         ¢ˆfd„|                     ¦   «         D ¦   «         ¢R }| j                              | j        j	        |Ž ¦  «        S )u¿  Compute aggregations for each group of a group by operation.

        Arguments:
            aggs: Aggregations to compute for each group of the group by operation,
                specified as positional arguments.
            named_aggs: Additional aggregations, specified as keyword arguments.

        Examples:
            Group by one column or by multiple columns and call `agg` to compute
            the grouped sum of another column.

            >>> import pandas as pd
            >>> import narwhals as nw
            >>> df_native = pd.DataFrame(
            ...     {
            ...         "a": ["a", "b", "a", "b", "c"],
            ...         "b": [1, 2, 1, 3, 3],
            ...         "c": [5, 4, 3, 2, 1],
            ...     }
            ... )
            >>> df = nw.from_native(df_native)
            >>>
            >>> df.group_by("a").agg(nw.col("b").sum()).sort("a")
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
            |Narwhals DataFrame|
            |------------------|
            |        a  b      |
            |     0  a  2      |
            |     1  b  5      |
            |     2  c  3      |
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
            >>>
            >>> df.group_by("a", "b").agg(nw.col("c").sum()).sort("a", "b").to_native()
               a  b  c
            0  a  1  8
            1  b  2  4
            2  b  3  2
            3  c  3  1
        úÒFound expression which does not aggregate.

All expressions passed to GroupBy.agg must aggregate.
For example, `df.group_by('a').agg(nw.col('b').sum())` is valid,
but `df.group_by('a').agg(nw.col('b'))` is not.c              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S ©N©Ú_to_compliant_expr©Ú.0ÚxÚplxs     €r(   ú	<genexpr>zGroupBy.agg.<locals>.<genexpr>V   ó1   øè è € Ð;Ð;¨Aˆa×"Ò" 3Ñ'Ô'Ð;Ð;Ð;Ð;Ð;Ð;r+   c              3  ón   •K  — | ]/\  }}|                      |¦  «                             ‰¦  «        V — Œ0d S r2   ©Úaliasr4   ©r6   ÚkeyÚvaluer8   s      €r(   r9   zGroupBy.agg.<locals>.<genexpr>W   óU   øè è € ð ð á�C˜ð —’˜CÑ Ô ×3Ò3°CÑ8Ô8ðð ð ð ð ð r+   ©
Útupler	   r   r   r!   Ú__narwhals_namespace__ÚitemsÚ_with_compliantr%   Úagg©r'   r,   r.   Ú	flat_aggsÚmsgÚcompliant_aggsr8   s         @r(   rG   zGroupBy.agg#   sà   ø€ õP �' $™-œ-Ñ(Ô(ˆ	Ý(¨)ÐB°zÐBÐBð 	-ðBð õ (¨Ñ,Ô,Ð,ØŒh×-Ò-Ñ/Ô/ˆð
Ø;Ð;Ð;Ð;°Ð;Ñ;Ô;ð
ðð ð ð à",×"2Ò"2Ñ"4Ô"4ðñ ô ð
ð 
ˆð Œx×'Ò'Ð(9¨¬Ô(9¸>Ð(JÑKÔKÐKr+   ú Iterator[tuple[Any, DataFrameT]]c              #  ób   ‡ K  — ˆ fd„‰ j                              ¦   «         D ¦   «         E d {V —† d S )Nc              3  óp   •K  — | ]0\  }}t          |¦  «        ‰j                             |¦  «        fV — Œ1d S r2   )r
   r!   rF   )r6   r?   r   r'   s      €r(   r9   z#GroupBy.__iter__.<locals>.<genexpr>_   sV   øè è € ð 
ð 
á��bõ �c‰]Œ]˜DœH×4Ò4°RÑ8Ô8Ð9ð
ð 
ð 
ð 
ð 
ð 
r+   )r%   Ú__iter__)r'   s   `r(   rO   zGroupBy.__iter__^   sh   øè è € ð
ð 
ð 
ð 
à!œ]×3Ò3Ñ5Ô5ð
ñ 
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
r+   N)r   r   r   r   r   r   r   r   )r,   r-   r.   r   r   r   )r   rL   )Ú__name__Ú
__module__Ú__qualname__r)   rG   rO   © r+   r(   r   r      sU   € € € € € ð
ð 
ð 
ð 
ð9Lð 9Lð 9Lð 9Lðv
ð 
ð 
ð 
ð 
ð 
r+   r   c                  ó   — e Zd Zdd	„Zdd„ZdS )ÚLazyGroupByr   r   r   r   r   r   r   r   c              óx   — || _         || _        | j         j                             | j        |¬¦  «        | _        d S r   r    r&   s       r(   r)   zLazyGroupBy.__init__f   r*   r+   r,   r-   r.   r   c                óX  ‡— t          t          |¦  «        ¦  «        }t          |i |¤Žsd}t          |¦  «        ‚| j                             ¦   «         Šg ˆfd„|D ¦   «         ¢ˆfd„|                     ¦   «         D ¦   «         ¢R }| j                              | j        j	        |Ž ¦  «        S )u­  Compute aggregations for each group of a group by operation.

        Arguments:
            aggs: Aggregations to compute for each group of the group by operation,
                specified as positional arguments.
            named_aggs: Additional aggregations, specified as keyword arguments.

        Examples:
            Group by one column or by multiple columns and call `agg` to compute
            the grouped sum of another column.

            >>> import polars as pl
            >>> import narwhals as nw
            >>> from narwhals.typing import IntoFrameT
            >>> lf_native = pl.LazyFrame(
            ...     {
            ...         "a": ["a", "b", "a", "b", "c"],
            ...         "b": [1, 2, 1, 3, 3],
            ...         "c": [5, 4, 3, 2, 1],
            ...     }
            ... )
            >>> lf = nw.from_native(lf_native)
            >>>
            >>> nw.to_native(lf.group_by("a").agg(nw.col("b").sum()).sort("a")).collect()
            shape: (3, 2)
            â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”�
            â”‚ a   â”† b   â”‚
            â”‚ --- â”† --- â”‚
            â”‚ str â”† i64 â”‚
            â•žâ•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•¡
            â”‚ a   â”† 2   â”‚
            â”‚ b   â”† 5   â”‚
            â”‚ c   â”† 3   â”‚
            â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜
            >>>
            >>> lf.group_by("a", "b").agg(nw.sum("c")).sort("a", "b").collect()
            â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
            |Narwhals DataFrame |
            |-------------------|
            |shape: (4, 3)      |
            |â”Œâ”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”�|
            |â”‚ a   â”† b   â”† c   â”‚|
            |â”‚ --- â”† --- â”† --- â”‚|
            |â”‚ str â”† i64 â”† i64 â”‚|
            |â•žâ•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•¡|
            |â”‚ a   â”† 1   â”† 8   â”‚|
            |â”‚ b   â”† 2   â”† 4   â”‚|
            |â”‚ b   â”† 3   â”† 2   â”‚|
            |â”‚ c   â”† 3   â”† 1   â”‚|
            |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        r0   c              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S r2   r3   r5   s     €r(   r9   z"LazyGroupBy.agg.<locals>.<genexpr>´   r:   r+   c              3  ón   •K  — | ]/\  }}|                      |¦  «                             ‰¦  «        V — Œ0d S r2   r<   r>   s      €r(   r9   z"LazyGroupBy.agg.<locals>.<genexpr>µ   rA   r+   rB   rH   s         @r(   rG   zLazyGroupBy.aggt   sà   ø€ õj �' $™-œ-Ñ(Ô(ˆ	Ý(¨)ÐB°zÐBÐBð 	-ðBð õ (¨Ñ,Ô,Ð,ØŒh×-Ò-Ñ/Ô/ˆð
Ø;Ð;Ð;Ð;°Ð;Ñ;Ô;ð
ðð ð ð à",×"2Ò"2Ñ"4Ô"4ðñ ô ð
ð 
ˆð Œx×'Ò'Ð(9¨¬Ô(9¸>Ð(JÑKÔKÐKr+   N)r   r   r   r   r   r   r   r   )r,   r-   r.   r   r   r   )rP   rQ   rR   r)   rG   rS   r+   r(   rU   rU   e   sH   € € € € € ð
ð 
ð 
ð 
ðFLð FLð FLð FLð FLð FLr+   rU   N)Ú
__future__r   Útypingr   r   r   r   Únarwhals._expression_parsingr   Únarwhals._utilsr	   r
   Únarwhals.exceptionsr   Únarwhals.typingr   Úcollections.abcr   r   r   Únarwhals._compliant.typingr   Únarwhals.dataframer   Únarwhals.exprr   r   r   rU   rS   r+   r(   ú<module>rd      s  ðØ "Ð "Ð "Ð "Ð "Ð "à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à BÐ BÐ BÐ BÐ BÐ BØ -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø &Ð &Ð &Ð &Ð &Ð &àð #Ø<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<à;Ð;Ð;Ð;Ð;Ð;Ø,Ð,Ð,Ð,Ð,Ð,Ø"Ð"Ð"Ð"Ð"Ð"àˆW�\Ð)9Ð:Ñ:Ô:€
ðN
ð N
ð N
ð N
ð N
ˆg�jÔ!ñ N
ô N
ð N
ðbULð ULð ULð ULð UL�'˜*Ô%ñ ULô ULð ULð ULð ULr+   