aboutsummaryrefslogtreecommitdiff
path: root/venv/lib/python3.8/site-packages/narwhals/_compliant/series.py
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2025-07-31 17:27:24 -0400
committersotech117 <michael_foiani@brown.edu>2025-07-31 17:27:24 -0400
commit5bf22fc7e3c392c8bd44315ca2d06d7dca7d084e (patch)
tree8dacb0f195df1c0788d36dd0064f6bbaa3143ede /venv/lib/python3.8/site-packages/narwhals/_compliant/series.py
parentb832d364da8c2efe09e3f75828caf73c50d01ce3 (diff)
add code for analysis of data
Diffstat (limited to 'venv/lib/python3.8/site-packages/narwhals/_compliant/series.py')
-rw-r--r--venv/lib/python3.8/site-packages/narwhals/_compliant/series.py396
1 files changed, 396 insertions, 0 deletions
diff --git a/venv/lib/python3.8/site-packages/narwhals/_compliant/series.py b/venv/lib/python3.8/site-packages/narwhals/_compliant/series.py
new file mode 100644
index 0000000..706fd2b
--- /dev/null
+++ b/venv/lib/python3.8/site-packages/narwhals/_compliant/series.py
@@ -0,0 +1,396 @@
+from __future__ import annotations
+
+from typing import (
+ TYPE_CHECKING,
+ Any,
+ Generic,
+ Iterable,
+ Iterator,
+ Mapping,
+ Protocol,
+ Sequence,
+)
+
+from narwhals._compliant.any_namespace import (
+ CatNamespace,
+ DateTimeNamespace,
+ ListNamespace,
+ StringNamespace,
+ StructNamespace,
+)
+from narwhals._compliant.typing import (
+ CompliantSeriesT_co,
+ EagerSeriesT_co,
+ NativeSeriesT,
+ NativeSeriesT_co,
+)
+from narwhals._translate import FromIterable, FromNative, NumpyConvertible, ToNarwhals
+from narwhals._utils import (
+ _StoresCompliant,
+ _StoresNative,
+ is_compliant_series,
+ is_sized_multi_index_selector,
+ unstable,
+)
+
+if TYPE_CHECKING:
+ from types import ModuleType
+
+ import pandas as pd
+ import polars as pl
+ import pyarrow as pa
+ from typing_extensions import Self
+
+ from narwhals._compliant.dataframe import CompliantDataFrame
+ from narwhals._compliant.expr import CompliantExpr, EagerExpr
+ from narwhals._compliant.namespace import CompliantNamespace, EagerNamespace
+ from narwhals._utils import Implementation, Version, _FullContext
+ from narwhals.dtypes import DType
+ from narwhals.series import Series
+ from narwhals.typing import (
+ ClosedInterval,
+ FillNullStrategy,
+ Into1DArray,
+ IntoDType,
+ MultiIndexSelector,
+ NonNestedLiteral,
+ NumericLiteral,
+ RankMethod,
+ RollingInterpolationMethod,
+ SizedMultiIndexSelector,
+ TemporalLiteral,
+ _1DArray,
+ _SliceIndex,
+ )
+
+__all__ = ["CompliantSeries", "EagerSeries"]
+
+
+class CompliantSeries(
+ NumpyConvertible["_1DArray", "Into1DArray"],
+ FromIterable,
+ FromNative[NativeSeriesT],
+ ToNarwhals["Series[NativeSeriesT]"],
+ Protocol[NativeSeriesT],
+):
+ _implementation: Implementation
+ _backend_version: tuple[int, ...]
+ _version: Version
+
+ @property
+ def dtype(self) -> DType: ...
+ @property
+ def name(self) -> str: ...
+ @property
+ def native(self) -> NativeSeriesT: ...
+ def __narwhals_series__(self) -> Self:
+ return self
+
+ def __narwhals_namespace__(self) -> CompliantNamespace[Any, Any]: ...
+ def __native_namespace__(self) -> ModuleType: ...
+ def __array__(self, dtype: Any, *, copy: bool | None) -> _1DArray: ...
+ def __contains__(self, other: Any) -> bool: ...
+ def __getitem__(self, item: MultiIndexSelector[Self]) -> Any: ...
+ def __iter__(self) -> Iterator[Any]: ...
+ def __len__(self) -> int:
+ return len(self.native)
+
+ def _with_native(self, series: Any) -> Self: ...
+ def _with_version(self, version: Version) -> Self: ...
+ def _to_expr(self) -> CompliantExpr[Any, Self]: ...
+ @classmethod
+ def from_native(cls, data: NativeSeriesT, /, *, context: _FullContext) -> Self: ...
+ @classmethod
+ def from_numpy(cls, data: Into1DArray, /, *, context: _FullContext) -> Self: ...
+ @classmethod
+ def from_iterable(
+ cls,
+ data: Iterable[Any],
+ /,
+ *,
+ context: _FullContext,
+ name: str = "",
+ dtype: IntoDType | None = None,
+ ) -> Self: ...
+ def to_narwhals(self) -> Series[NativeSeriesT]:
+ return self._version.series(self, level="full")
+
+ # Operators
+ def __add__(self, other: Any) -> Self: ...
+ def __and__(self, other: Any) -> Self: ...
+ def __eq__(self, other: object) -> Self: ... # type: ignore[override]
+ def __floordiv__(self, other: Any) -> Self: ...
+ def __ge__(self, other: Any) -> Self: ...
+ def __gt__(self, other: Any) -> Self: ...
+ def __invert__(self) -> Self: ...
+ def __le__(self, other: Any) -> Self: ...
+ def __lt__(self, other: Any) -> Self: ...
+ def __mod__(self, other: Any) -> Self: ...
+ def __mul__(self, other: Any) -> Self: ...
+ def __ne__(self, other: object) -> Self: ... # type: ignore[override]
+ def __or__(self, other: Any) -> Self: ...
+ def __pow__(self, other: Any) -> Self: ...
+ def __radd__(self, other: Any) -> Self: ...
+ def __rand__(self, other: Any) -> Self: ...
+ def __rfloordiv__(self, other: Any) -> Self: ...
+ def __rmod__(self, other: Any) -> Self: ...
+ def __rmul__(self, other: Any) -> Self: ...
+ def __ror__(self, other: Any) -> Self: ...
+ def __rpow__(self, other: Any) -> Self: ...
+ def __rsub__(self, other: Any) -> Self: ...
+ def __rtruediv__(self, other: Any) -> Self: ...
+ def __sub__(self, other: Any) -> Self: ...
+ def __truediv__(self, other: Any) -> Self: ...
+
+ def abs(self) -> Self: ...
+ def alias(self, name: str) -> Self: ...
+ def all(self) -> bool: ...
+ def any(self) -> bool: ...
+ def arg_max(self) -> int: ...
+ def arg_min(self) -> int: ...
+ def arg_true(self) -> Self: ...
+ def cast(self, dtype: IntoDType) -> Self: ...
+ def clip(
+ self,
+ lower_bound: Self | NumericLiteral | TemporalLiteral | None,
+ upper_bound: Self | NumericLiteral | TemporalLiteral | None,
+ ) -> Self: ...
+ def count(self) -> int: ...
+ def cum_count(self, *, reverse: bool) -> Self: ...
+ def cum_max(self, *, reverse: bool) -> Self: ...
+ def cum_min(self, *, reverse: bool) -> Self: ...
+ def cum_prod(self, *, reverse: bool) -> Self: ...
+ def cum_sum(self, *, reverse: bool) -> Self: ...
+ def diff(self) -> Self: ...
+ def drop_nulls(self) -> Self: ...
+ def ewm_mean(
+ self,
+ *,
+ com: float | None,
+ span: float | None,
+ half_life: float | None,
+ alpha: float | None,
+ adjust: bool,
+ min_samples: int,
+ ignore_nulls: bool,
+ ) -> Self: ...
+ def exp(self) -> Self: ...
+ def fill_null(
+ self,
+ value: Self | NonNestedLiteral,
+ strategy: FillNullStrategy | None,
+ limit: int | None,
+ ) -> Self: ...
+ def filter(self, predicate: Any) -> Self: ...
+ def gather_every(self, n: int, offset: int) -> Self: ...
+ @unstable
+ def hist(
+ self,
+ bins: list[float | int] | None,
+ *,
+ bin_count: int | None,
+ include_breakpoint: bool,
+ ) -> CompliantDataFrame[Self, Any, Any, Any]: ...
+ def head(self, n: int) -> Self: ...
+ def is_between(
+ self, lower_bound: Any, upper_bound: Any, closed: ClosedInterval
+ ) -> Self: ...
+ def is_finite(self) -> Self: ...
+ def is_first_distinct(self) -> Self: ...
+ def is_in(self, other: Any) -> Self: ...
+ def is_last_distinct(self) -> Self: ...
+ def is_nan(self) -> Self: ...
+ def is_null(self) -> Self: ...
+ def is_sorted(self, *, descending: bool) -> bool: ...
+ def is_unique(self) -> Self: ...
+ def item(self, index: int | None) -> Any: ...
+ def len(self) -> int: ...
+ def log(self, base: float) -> Self: ...
+ def max(self) -> Any: ...
+ def mean(self) -> float: ...
+ def median(self) -> float: ...
+ def min(self) -> Any: ...
+ def mode(self) -> Self: ...
+ def n_unique(self) -> int: ...
+ def null_count(self) -> int: ...
+ def quantile(
+ self, quantile: float, interpolation: RollingInterpolationMethod
+ ) -> float: ...
+ def rank(self, method: RankMethod, *, descending: bool) -> Self: ...
+ def replace_strict(
+ self,
+ old: Sequence[Any] | Mapping[Any, Any],
+ new: Sequence[Any],
+ *,
+ return_dtype: IntoDType | None,
+ ) -> Self: ...
+ def rolling_mean(
+ self, window_size: int, *, min_samples: int, center: bool
+ ) -> Self: ...
+ def rolling_std(
+ self, window_size: int, *, min_samples: int, center: bool, ddof: int
+ ) -> Self: ...
+ def rolling_sum(
+ self, window_size: int, *, min_samples: int, center: bool
+ ) -> Self: ...
+ def rolling_var(
+ self, window_size: int, *, min_samples: int, center: bool, ddof: int
+ ) -> Self: ...
+ def round(self, decimals: int) -> Self: ...
+ def sample(
+ self,
+ n: int | None,
+ *,
+ fraction: float | None,
+ with_replacement: bool,
+ seed: int | None,
+ ) -> Self: ...
+ def scatter(self, indices: int | Sequence[int], values: Any) -> Self: ...
+ def shift(self, n: int) -> Self: ...
+ def skew(self) -> float | None: ...
+ def sort(self, *, descending: bool, nulls_last: bool) -> Self: ...
+ def std(self, *, ddof: int) -> float: ...
+ def sum(self) -> float: ...
+ def tail(self, n: int) -> Self: ...
+ def to_arrow(self) -> pa.Array[Any]: ...
+ def to_dummies(
+ self, *, separator: str, drop_first: bool
+ ) -> CompliantDataFrame[Self, Any, Any, Any]: ...
+ def to_frame(self) -> CompliantDataFrame[Self, Any, Any, Any]: ...
+ def to_list(self) -> list[Any]: ...
+ def to_pandas(self) -> pd.Series[Any]: ...
+ def to_polars(self) -> pl.Series: ...
+ def unique(self, *, maintain_order: bool) -> Self: ...
+ def value_counts(
+ self, *, sort: bool, parallel: bool, name: str | None, normalize: bool
+ ) -> CompliantDataFrame[Self, Any, Any, Any]: ...
+ def var(self, *, ddof: int) -> float: ...
+ def zip_with(self, mask: Any, other: Any) -> Self: ...
+
+ @property
+ def str(self) -> Any: ...
+ @property
+ def dt(self) -> Any: ...
+ @property
+ def cat(self) -> Any: ...
+ @property
+ def list(self) -> Any: ...
+ @property
+ def struct(self) -> Any: ...
+
+
+class EagerSeries(CompliantSeries[NativeSeriesT], Protocol[NativeSeriesT]):
+ _native_series: Any
+ _implementation: Implementation
+ _backend_version: tuple[int, ...]
+ _version: Version
+ _broadcast: bool
+
+ def _from_scalar(self, value: Any) -> Self:
+ return self.from_iterable([value], name=self.name, context=self)
+
+ def _with_native(
+ self, series: NativeSeriesT, *, preserve_broadcast: bool = False
+ ) -> Self:
+ """Return a new `CompliantSeries`, wrapping the native `series`.
+
+ In cases when operations are known to not affect whether a result should
+ be broadcast, we can pass `preserve_broadcast=True`.
+ Set this with care - it should only be set for unary expressions which don't
+ change length or order, such as `.alias` or `.fill_null`. If in doubt, don't
+ set it, you probably don't need it.
+ """
+ ...
+
+ def __narwhals_namespace__(self) -> EagerNamespace[Any, Self, Any, Any]: ...
+
+ def _to_expr(self) -> EagerExpr[Any, Any]:
+ return self.__narwhals_namespace__()._expr._from_series(self) # type: ignore[no-any-return]
+
+ def _gather(self, rows: SizedMultiIndexSelector[NativeSeriesT]) -> Self: ...
+ def _gather_slice(self, rows: _SliceIndex | range) -> Self: ...
+ def __getitem__(self, item: MultiIndexSelector[Self]) -> Self:
+ if isinstance(item, (slice, range)):
+ return self._gather_slice(item)
+ elif is_compliant_series(item):
+ return self._gather(item.native)
+ elif is_sized_multi_index_selector(item):
+ return self._gather(item)
+ else: # pragma: no cover
+ msg = f"Unreachable code, got unexpected type: {type(item)}"
+ raise AssertionError(msg)
+
+ @property
+ def str(self) -> EagerSeriesStringNamespace[Self, NativeSeriesT]: ...
+ @property
+ def dt(self) -> EagerSeriesDateTimeNamespace[Self, NativeSeriesT]: ...
+ @property
+ def cat(self) -> EagerSeriesCatNamespace[Self, NativeSeriesT]: ...
+ @property
+ def list(self) -> EagerSeriesListNamespace[Self, NativeSeriesT]: ...
+ @property
+ def struct(self) -> EagerSeriesStructNamespace[Self, NativeSeriesT]: ...
+
+
+class _SeriesNamespace( # type: ignore[misc]
+ _StoresCompliant[CompliantSeriesT_co],
+ _StoresNative[NativeSeriesT_co],
+ Protocol[CompliantSeriesT_co, NativeSeriesT_co],
+):
+ _compliant_series: CompliantSeriesT_co
+
+ @property
+ def compliant(self) -> CompliantSeriesT_co:
+ return self._compliant_series
+
+ @property
+ def native(self) -> NativeSeriesT_co:
+ return self._compliant_series.native # type: ignore[no-any-return]
+
+ def with_native(self, series: Any, /) -> CompliantSeriesT_co:
+ return self.compliant._with_native(series)
+
+
+class EagerSeriesNamespace(
+ _SeriesNamespace[EagerSeriesT_co, NativeSeriesT_co],
+ Generic[EagerSeriesT_co, NativeSeriesT_co],
+):
+ _compliant_series: EagerSeriesT_co
+
+ def __init__(self, series: EagerSeriesT_co, /) -> None:
+ self._compliant_series = series
+
+
+class EagerSeriesCatNamespace( # type: ignore[misc]
+ _SeriesNamespace[EagerSeriesT_co, NativeSeriesT_co],
+ CatNamespace[EagerSeriesT_co],
+ Protocol[EagerSeriesT_co, NativeSeriesT_co],
+): ...
+
+
+class EagerSeriesDateTimeNamespace( # type: ignore[misc]
+ _SeriesNamespace[EagerSeriesT_co, NativeSeriesT_co],
+ DateTimeNamespace[EagerSeriesT_co],
+ Protocol[EagerSeriesT_co, NativeSeriesT_co],
+): ...
+
+
+class EagerSeriesListNamespace( # type: ignore[misc]
+ _SeriesNamespace[EagerSeriesT_co, NativeSeriesT_co],
+ ListNamespace[EagerSeriesT_co],
+ Protocol[EagerSeriesT_co, NativeSeriesT_co],
+): ...
+
+
+class EagerSeriesStringNamespace( # type: ignore[misc]
+ _SeriesNamespace[EagerSeriesT_co, NativeSeriesT_co],
+ StringNamespace[EagerSeriesT_co],
+ Protocol[EagerSeriesT_co, NativeSeriesT_co],
+): ...
+
+
+class EagerSeriesStructNamespace( # type: ignore[misc]
+ _SeriesNamespace[EagerSeriesT_co, NativeSeriesT_co],
+ StructNamespace[EagerSeriesT_co],
+ Protocol[EagerSeriesT_co, NativeSeriesT_co],
+): ...