Skip to content

chore: Transition selectors away from Protocol38 #2326

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Apr 4, 2025
2 changes: 1 addition & 1 deletion narwhals/_arrow/namespace.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ def concat(

@property
def selectors(self: Self) -> ArrowSelectorNamespace:
return ArrowSelectorNamespace(self)
return ArrowSelectorNamespace.from_namespace(self)

def when(self: Self, predicate: ArrowExpr) -> ArrowWhen:
return ArrowWhen.from_expr(predicate, context=self)
Expand Down
34 changes: 6 additions & 28 deletions narwhals/_arrow/selectors.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,18 @@
from narwhals._compliant import EagerSelectorNamespace

if TYPE_CHECKING:
from typing_extensions import Self

from narwhals._arrow.dataframe import ArrowDataFrame
from narwhals._arrow.series import ArrowSeries
from narwhals._compliant import EvalNames
from narwhals._compliant import EvalSeries
from narwhals.utils import _FullContext
from narwhals._arrow.dataframe import ArrowDataFrame # noqa: F401
from narwhals._arrow.series import ArrowSeries # noqa: F401


class ArrowSelectorNamespace(EagerSelectorNamespace["ArrowDataFrame", "ArrowSeries"]):
def _selector(
self,
call: EvalSeries[ArrowDataFrame, ArrowSeries],
evaluate_output_names: EvalNames[ArrowDataFrame],
/,
) -> ArrowSelector:
return ArrowSelector(
call,
depth=0,
function_name="selector",
evaluate_output_names=evaluate_output_names,
alias_output_names=None,
backend_version=self._backend_version,
version=self._version,
)

def __init__(self: Self, context: _FullContext, /) -> None:
self._implementation = context._implementation
self._backend_version = context._backend_version
self._version = context._version
@property
def _selector(self) -> type[ArrowSelector]:
return ArrowSelector


class ArrowSelector(CompliantSelector["ArrowDataFrame", "ArrowSeries"], ArrowExpr): # type: ignore[misc]
def _to_expr(self: Self) -> ArrowExpr:
def _to_expr(self) -> ArrowExpr:
return ArrowExpr(
self._call,
depth=self._depth,
Expand Down
4 changes: 2 additions & 2 deletions narwhals/_compliant/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
from narwhals._compliant.selectors import CompliantSelector
from narwhals._compliant.selectors import CompliantSelectorNamespace
from narwhals._compliant.selectors import EagerSelectorNamespace
from narwhals._compliant.selectors import EvalNames
from narwhals._compliant.selectors import EvalSeries
from narwhals._compliant.selectors import LazySelectorNamespace
from narwhals._compliant.series import CompliantSeries
from narwhals._compliant.series import EagerSeries
Expand All @@ -26,6 +24,8 @@
from narwhals._compliant.typing import CompliantSeriesT
from narwhals._compliant.typing import EagerDataFrameT
from narwhals._compliant.typing import EagerSeriesT
from narwhals._compliant.typing import EvalNames
from narwhals._compliant.typing import EvalSeries
from narwhals._compliant.typing import IntoCompliantExpr
from narwhals._compliant.typing import NativeFrameT_co
from narwhals._compliant.typing import NativeSeriesT_co
Expand Down
Loading
Loading