Ë
    z�h¿  ã                  ó  — 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  e	dd¬«      Z G d„ dee   «      Z G d„ dee   «      Zy)é    )Úannotations)ÚTYPE_CHECKING)ÚAny)ÚGeneric)ÚIterable)ÚIterator)ÚSequence)ÚTypeVar)Úall_exprs_are_scalar_like)ÚInvalidOperationError)Ú
DataFrameT)Úflatten)Útupleify)ÚCompliantExprAny)Ú	LazyFrame)ÚExprÚ
LazyFrameTzLazyFrame[Any])Úboundc                  ó4   — e Zd Z	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zy)ÚGroupByc              óŒ   — || _         || _        | j                   j                  j                  | j                  |¬«      | _        y ©N)Údrop_null_keys©Ú_dfÚ_keysÚ_compliant_frameÚgroup_byÚ_grouped©ÚselfÚdfÚkeysr   s       úO/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/narwhals/group_by.pyÚ__init__zGroupBy.__init__   ó<   € ð  "ˆŒØˆŒ
ØŸ™×1Ñ1×:Ñ:Ø�J‰J ~ð ;ó 
ˆ�ó    c                óB  ‡— t        t        |«      «      }t        |i |¤Žsd}t        |«      ‚| j                  j                  «       Šg ˆfd„|D «       ¢ˆfd„|j                  «       D «       ¢­}| j                  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.

        Returns:
            A new Dataframe.

        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  ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­w©N©Ú_to_compliant_expr©Ú.0ÚxÚplxs     €r$   ú	<genexpr>zGroupBy.agg.<locals>.<genexpr>^   ó   øè ø€ Ò;¨Aˆa×"Ñ" 3×'Ñ;ùó   ƒc              3  ód   •K  — | ]'  \  }}|j                  |«      j                  ‰«      –— Œ) y ­wr+   ©Úaliasr-   ©r/   ÚkeyÚvaluer1   s      €r$   r2   zGroupBy.agg.<locals>.<genexpr>_   ó1   øè ø€ ò á�C˜ð —‘˜CÓ ×3Ñ3°C×8ñùó   ƒ-0©
Útupler   r   r   r   Ú__narwhals_namespace__ÚitemsÚ_with_compliantr   Úagg©r!   ÚaggsÚ
named_aggsÚ	flat_aggsÚmsgÚcompliant_aggsr1   s         @r$   rB   zGroupBy.agg(   s£   ø€ ôV œ' $›-Ó(ˆ	Ü(¨)ÐB°zÒBðBð ô (¨Ó,Ð,Ø�h‰h×-Ñ-Ó/ˆð
Û;°Ô;ð
óà",×"2Ñ"2Ó"4ôñ
ˆð �x‰x×'Ñ'Ð(9¨¯©×(9Ñ(9¸>Ð(JÓKÐKr'   c              #  óh   ‡ K  — ˆ fd„‰ j                   j                  «       D «       E d {  –—†  y 7 Œ­w)Nc              3  óp   •K  — | ]-  \  }}t        |«      ‰j                  j                  |«      f–— Œ/ y ­wr+   )r   r   rA   )r/   r9   r"   r!   s      €r$   r2   z#GroupBy.__iter__.<locals>.<genexpr>g   s5   øè ø€ ò 
á��bô �c‹]˜DŸH™H×4Ñ4°RÓ8Ô9ñ
ùs   ƒ36)r   Ú__iter__)r!   s   `r$   rK   zGroupBy.__iter__f   s+   øè ø€ ó
à!Ÿ]™]×3Ñ3Ó5ô
÷ 	
ò 	
ús   ƒ'2ª0«2N)r"   r   r#   ú*Sequence[str] | Sequence[CompliantExprAny]r   ÚboolÚreturnÚNone)rD   úExpr | Iterable[Expr]rE   r   rN   r   )rN   z Iterator[tuple[Any, DataFrameT]])Ú__name__Ú
__module__Ú__qualname__r%   rB   rK   © r'   r$   r   r      s9   „ ð
àð
ð 9ð
ð ð
ð 
ó
ó<Lô|
r'   r   c                  ó,   — e Zd Z	 	 	 	 	 	 	 	 dd„Zdd„Zy)ÚLazyGroupByc              óŒ   — || _         || _        | j                   j                  j                  | j                  |¬«      | _        y r   r   r    s       r$   r%   zLazyGroupBy.__init__n   r&   r'   c                óB  ‡— t        t        |«      «      }t        |i |¤Žsd}t        |«      ‚| j                  j                  «       Šg ˆfd„|D «       ¢ˆfd„|j                  «       D «       ¢­}| j                  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.

        Returns:
            A new LazyFrame.

        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   â”‚|
            |â””â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”˜|
            â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜
        r)   c              3  ó@   •K  — | ]  }|j                  ‰«      –— Œ y ­wr+   r,   r.   s     €r$   r2   z"LazyGroupBy.agg.<locals>.<genexpr>¿   r3   r4   c              3  ód   •K  — | ]'  \  }}|j                  |«      j                  ‰«      –— Œ) y ­wr+   r6   r8   s      €r$   r2   z"LazyGroupBy.agg.<locals>.<genexpr>À   r;   r<   r=   rC   s         @r$   rB   zLazyGroupBy.agg|   s£   ø€ ôp œ' $›-Ó(ˆ	Ü(¨)ÐB°zÒBðBð ô (¨Ó,Ð,Ø�h‰h×-Ñ-Ó/ˆð
Û;°Ô;ð
óà",×"2Ñ"2Ó"4ôñ
ˆð �x‰x×'Ñ'Ð(9¨¯©×(9Ñ(9¸>Ð(JÓKÐKr'   N)r"   r   r#   rL   r   rM   rN   rO   )rD   rP   rE   r   rN   r   )rQ   rR   rS   r%   rB   rT   r'   r$   rV   rV   m   s4   „ ð
àð
ð 9ð
ð ð
ð 
ó
ôILr'   rV   N)Ú
__future__r   Útypingr   r   r   r   r   r	   r
   Únarwhals._expression_parsingr   Únarwhals.exceptionsr   Únarwhals.typingr   Únarwhals.utilsr   r   Únarwhals._compliant.typingr   Únarwhals.dataframer   Únarwhals.exprr   r   r   rV   rT   r'   r$   ú<module>rd      sn   ðÝ "å  Ý Ý Ý Ý Ý Ý å BÝ 5Ý &Ý "Ý #áÝ;Ý,Ý"á�\Ð)9Ô:€
ôQ
ˆg�jÑ!ô Q
ôhXL�'˜*Ñ%õ XLr'   