196 lines
6.9 KiB
Python
196 lines
6.9 KiB
Python
from __future__ import annotations
|
|
|
|
from collections.abc import Sequence
|
|
from typing import TYPE_CHECKING, Any, Callable, Literal, TypedDict, TypeVar
|
|
|
|
if TYPE_CHECKING:
|
|
from typing_extensions import TypeAlias
|
|
|
|
from narwhals._compliant.dataframe import (
|
|
CompliantDataFrame,
|
|
CompliantLazyFrame,
|
|
EagerDataFrame,
|
|
)
|
|
from narwhals._compliant.expr import (
|
|
CompliantExpr,
|
|
DepthTrackingExpr,
|
|
EagerExpr,
|
|
LazyExpr,
|
|
NativeExpr,
|
|
)
|
|
from narwhals._compliant.namespace import CompliantNamespace, EagerNamespace
|
|
from narwhals._compliant.series import CompliantSeries, EagerSeries
|
|
from narwhals._compliant.window import WindowInputs
|
|
from narwhals.typing import (
|
|
FillNullStrategy,
|
|
NativeFrame,
|
|
NativeSeries,
|
|
RankMethod,
|
|
RollingInterpolationMethod,
|
|
)
|
|
|
|
class ScalarKwargs(TypedDict, total=False):
|
|
"""Non-expressifiable args which we may need to reuse in `agg` or `over`."""
|
|
|
|
adjust: bool
|
|
alpha: float | None
|
|
center: int
|
|
com: float | None
|
|
ddof: int
|
|
descending: bool
|
|
half_life: float | None
|
|
ignore_nulls: bool
|
|
interpolation: RollingInterpolationMethod
|
|
limit: int | None
|
|
method: RankMethod
|
|
min_samples: int
|
|
n: int
|
|
quantile: float
|
|
reverse: bool
|
|
span: float | None
|
|
strategy: FillNullStrategy | None
|
|
window_size: int
|
|
|
|
|
|
__all__ = [
|
|
"AliasName",
|
|
"AliasNames",
|
|
"CompliantDataFrameT",
|
|
"CompliantFrameT",
|
|
"CompliantLazyFrameT",
|
|
"CompliantSeriesT",
|
|
"EvalNames",
|
|
"EvalSeries",
|
|
"IntoCompliantExpr",
|
|
"NarwhalsAggregation",
|
|
"NativeFrameT_co",
|
|
"NativeSeriesT_co",
|
|
]
|
|
CompliantExprAny: TypeAlias = "CompliantExpr[Any, Any]"
|
|
CompliantSeriesAny: TypeAlias = "CompliantSeries[Any]"
|
|
CompliantSeriesOrNativeExprAny: TypeAlias = "CompliantSeriesAny | NativeExpr"
|
|
CompliantDataFrameAny: TypeAlias = "CompliantDataFrame[Any, Any, Any, Any]"
|
|
CompliantLazyFrameAny: TypeAlias = "CompliantLazyFrame[Any, Any, Any]"
|
|
CompliantFrameAny: TypeAlias = "CompliantDataFrameAny | CompliantLazyFrameAny"
|
|
CompliantNamespaceAny: TypeAlias = "CompliantNamespace[Any, Any]"
|
|
|
|
DepthTrackingExprAny: TypeAlias = "DepthTrackingExpr[Any, Any]"
|
|
|
|
EagerDataFrameAny: TypeAlias = "EagerDataFrame[Any, Any, Any, Any]"
|
|
EagerSeriesAny: TypeAlias = "EagerSeries[Any]"
|
|
EagerExprAny: TypeAlias = "EagerExpr[Any, Any]"
|
|
EagerNamespaceAny: TypeAlias = "EagerNamespace[EagerDataFrameAny, EagerSeriesAny, EagerExprAny, NativeFrame, NativeSeries]"
|
|
|
|
LazyExprAny: TypeAlias = "LazyExpr[Any, Any]"
|
|
|
|
NativeExprT = TypeVar("NativeExprT", bound="NativeExpr")
|
|
NativeExprT_co = TypeVar("NativeExprT_co", bound="NativeExpr", covariant=True)
|
|
NativeSeriesT = TypeVar("NativeSeriesT", bound="NativeSeries")
|
|
NativeSeriesT_co = TypeVar("NativeSeriesT_co", bound="NativeSeries", covariant=True)
|
|
NativeSeriesT_contra = TypeVar(
|
|
"NativeSeriesT_contra", bound="NativeSeries", contravariant=True
|
|
)
|
|
NativeFrameT = TypeVar("NativeFrameT", bound="NativeFrame")
|
|
NativeFrameT_co = TypeVar("NativeFrameT_co", bound="NativeFrame", covariant=True)
|
|
NativeFrameT_contra = TypeVar(
|
|
"NativeFrameT_contra", bound="NativeFrame", contravariant=True
|
|
)
|
|
|
|
CompliantExprT = TypeVar("CompliantExprT", bound=CompliantExprAny)
|
|
CompliantExprT_co = TypeVar("CompliantExprT_co", bound=CompliantExprAny, covariant=True)
|
|
CompliantExprT_contra = TypeVar(
|
|
"CompliantExprT_contra", bound=CompliantExprAny, contravariant=True
|
|
)
|
|
CompliantSeriesT = TypeVar("CompliantSeriesT", bound=CompliantSeriesAny)
|
|
CompliantSeriesT_co = TypeVar(
|
|
"CompliantSeriesT_co", bound=CompliantSeriesAny, covariant=True
|
|
)
|
|
CompliantSeriesOrNativeExprT = TypeVar(
|
|
"CompliantSeriesOrNativeExprT", bound=CompliantSeriesOrNativeExprAny
|
|
)
|
|
CompliantSeriesOrNativeExprT_co = TypeVar(
|
|
"CompliantSeriesOrNativeExprT_co",
|
|
bound=CompliantSeriesOrNativeExprAny,
|
|
covariant=True,
|
|
)
|
|
CompliantFrameT = TypeVar("CompliantFrameT", bound=CompliantFrameAny)
|
|
CompliantFrameT_co = TypeVar(
|
|
"CompliantFrameT_co", bound=CompliantFrameAny, covariant=True
|
|
)
|
|
CompliantDataFrameT = TypeVar("CompliantDataFrameT", bound=CompliantDataFrameAny)
|
|
CompliantDataFrameT_co = TypeVar(
|
|
"CompliantDataFrameT_co", bound=CompliantDataFrameAny, covariant=True
|
|
)
|
|
CompliantLazyFrameT = TypeVar("CompliantLazyFrameT", bound=CompliantLazyFrameAny)
|
|
CompliantLazyFrameT_co = TypeVar(
|
|
"CompliantLazyFrameT_co", bound=CompliantLazyFrameAny, covariant=True
|
|
)
|
|
CompliantNamespaceT = TypeVar("CompliantNamespaceT", bound=CompliantNamespaceAny)
|
|
CompliantNamespaceT_co = TypeVar(
|
|
"CompliantNamespaceT_co", bound=CompliantNamespaceAny, covariant=True
|
|
)
|
|
|
|
IntoCompliantExpr: TypeAlias = "CompliantExpr[CompliantFrameT, CompliantSeriesOrNativeExprT_co] | CompliantSeriesOrNativeExprT_co"
|
|
|
|
DepthTrackingExprT = TypeVar("DepthTrackingExprT", bound=DepthTrackingExprAny)
|
|
DepthTrackingExprT_contra = TypeVar(
|
|
"DepthTrackingExprT_contra", bound=DepthTrackingExprAny, contravariant=True
|
|
)
|
|
|
|
EagerExprT = TypeVar("EagerExprT", bound=EagerExprAny)
|
|
EagerExprT_contra = TypeVar("EagerExprT_contra", bound=EagerExprAny, contravariant=True)
|
|
EagerSeriesT = TypeVar("EagerSeriesT", bound=EagerSeriesAny)
|
|
EagerSeriesT_co = TypeVar("EagerSeriesT_co", bound=EagerSeriesAny, covariant=True)
|
|
|
|
# NOTE: `pyright` gives false (8) positives if this uses `EagerDataFrameAny`?
|
|
EagerDataFrameT = TypeVar("EagerDataFrameT", bound="EagerDataFrame[Any, Any, Any, Any]")
|
|
|
|
LazyExprT = TypeVar("LazyExprT", bound=LazyExprAny)
|
|
LazyExprT_contra = TypeVar("LazyExprT_contra", bound=LazyExprAny, contravariant=True)
|
|
|
|
AliasNames: TypeAlias = Callable[[Sequence[str]], Sequence[str]]
|
|
"""A function aliasing a *sequence* of column names."""
|
|
|
|
AliasName: TypeAlias = Callable[[str], str]
|
|
"""A function aliasing a *single* column name."""
|
|
|
|
EvalSeries: TypeAlias = Callable[
|
|
[CompliantFrameT], Sequence[CompliantSeriesOrNativeExprT]
|
|
]
|
|
"""A function from a `Frame` to a sequence of `Series`*.
|
|
|
|
See [underwater unicorn magic](https://narwhals-dev.github.io/narwhals/how_it_works/).
|
|
"""
|
|
|
|
EvalNames: TypeAlias = Callable[[CompliantFrameT], Sequence[str]]
|
|
"""A function from a `Frame` to a sequence of columns names *before* any aliasing takes place."""
|
|
|
|
WindowFunction: TypeAlias = (
|
|
"Callable[[CompliantFrameT, WindowInputs[NativeExprT]], Sequence[NativeExprT]]"
|
|
)
|
|
"""A function evaluated with `over(partition_by=..., order_by=...)`."""
|
|
|
|
NarwhalsAggregation: TypeAlias = Literal[
|
|
"sum",
|
|
"mean",
|
|
"median",
|
|
"max",
|
|
"min",
|
|
"std",
|
|
"var",
|
|
"len",
|
|
"n_unique",
|
|
"count",
|
|
"quantile",
|
|
"all",
|
|
"any",
|
|
]
|
|
"""`Expr` methods we aim to support in `DepthTrackingGroupBy`.
|
|
|
|
Be sure to update me if you're working on one of these:
|
|
- https://github.com/narwhals-dev/narwhals/issues/981
|
|
- https://github.com/narwhals-dev/narwhals/issues/2385
|
|
- https://github.com/narwhals-dev/narwhals/issues/2484
|
|
- https://github.com/narwhals-dev/narwhals/issues/2526
|
|
- https://github.com/narwhals-dev/narwhals/issues/2660
|
|
"""
|