This commit is contained in:
2025-09-07 22:09:54 +02:00
parent e1b817252c
commit 2fc0d000b6
7796 changed files with 2159515 additions and 933 deletions

View File

@ -0,0 +1,45 @@
from __future__ import annotations
from typing import TYPE_CHECKING, Protocol
from narwhals._compliant.group_by import CompliantGroupBy, ParseKeysGroupBy
from narwhals._compliant.typing import CompliantLazyFrameT, NativeExprT_co
from narwhals._sql.typing import SQLExprT_contra
from narwhals._utils import zip_strict
if TYPE_CHECKING:
from collections.abc import Iterable, Iterator
class SQLGroupBy(
ParseKeysGroupBy[CompliantLazyFrameT, SQLExprT_contra],
CompliantGroupBy[CompliantLazyFrameT, SQLExprT_contra],
Protocol[CompliantLazyFrameT, SQLExprT_contra, NativeExprT_co],
):
_keys: list[str]
_output_key_names: list[str]
def _evaluate_expr(self, expr: SQLExprT_contra, /) -> Iterator[NativeExprT_co]:
output_names = expr._evaluate_output_names(self.compliant)
aliases = (
expr._alias_output_names(output_names)
if expr._alias_output_names
else output_names
)
native_exprs = expr(self.compliant)
if expr._is_multi_output_unnamed():
exclude = {*self._keys, *self._output_key_names}
for native_expr, name, alias in zip_strict(
native_exprs, output_names, aliases
):
if name not in exclude:
yield expr._alias_native(native_expr, alias)
else:
for native_expr, alias in zip_strict(native_exprs, aliases):
yield expr._alias_native(native_expr, alias)
def _evaluate_exprs(
self, exprs: Iterable[SQLExprT_contra], /
) -> Iterator[NativeExprT_co]:
for expr in exprs:
yield from self._evaluate_expr(expr)