22
33from __future__ import annotations
44
5- from typing import TYPE_CHECKING , Protocol
5+ from typing import TYPE_CHECKING , ClassVar , Protocol
66
77from narwhals ._utils import CompliantT_co , _StoresCompliant
88
99if TYPE_CHECKING :
1010 from typing import Callable
1111
12+ from narwhals ._compliant .typing import Accessor
1213 from narwhals .typing import NonNestedLiteral , TimeUnit
1314
1415__all__ = [
1516 "CatNamespace" ,
1617 "DateTimeNamespace" ,
1718 "ListNamespace" ,
1819 "NameNamespace" ,
20+ "NamespaceAccessor" ,
1921 "StringNamespace" ,
2022 "StructNamespace" ,
2123]
2224
2325
24- class CatNamespace (_StoresCompliant [CompliantT_co ], Protocol [CompliantT_co ]):
26+ class NamespaceAccessor (_StoresCompliant [CompliantT_co ], Protocol [CompliantT_co ]):
27+ _accessor : ClassVar [Accessor ]
28+
29+
30+ class CatNamespace (NamespaceAccessor [CompliantT_co ], Protocol [CompliantT_co ]):
31+ _accessor : ClassVar [Accessor ] = "cat"
32+
2533 def get_categories (self ) -> CompliantT_co : ...
2634
2735
2836class DateTimeNamespace (_StoresCompliant [CompliantT_co ], Protocol [CompliantT_co ]):
37+ _accessor : ClassVar [Accessor ] = "dt"
38+
2939 def to_string (self , format : str ) -> CompliantT_co : ...
3040 def replace_time_zone (self , time_zone : str | None ) -> CompliantT_co : ...
3141 def convert_time_zone (self , time_zone : str ) -> CompliantT_co : ...
@@ -52,15 +62,17 @@ def offset_by(self, by: str) -> CompliantT_co: ...
5262
5363
5464class ListNamespace (_StoresCompliant [CompliantT_co ], Protocol [CompliantT_co ]):
55- def get ( self , index : int ) -> CompliantT_co : ...
65+ _accessor : ClassVar [ Accessor ] = "list"
5666
67+ def get (self , index : int ) -> CompliantT_co : ...
5768 def len (self ) -> CompliantT_co : ...
58-
5969 def unique (self ) -> CompliantT_co : ...
6070 def contains (self , item : NonNestedLiteral ) -> CompliantT_co : ...
6171
6272
6373class NameNamespace (_StoresCompliant [CompliantT_co ], Protocol [CompliantT_co ]):
74+ _accessor : ClassVar [Accessor ] = "name"
75+
6476 def keep (self ) -> CompliantT_co : ...
6577 def map (self , function : Callable [[str ], str ]) -> CompliantT_co : ...
6678 def prefix (self , prefix : str ) -> CompliantT_co : ...
@@ -70,6 +82,8 @@ def to_uppercase(self) -> CompliantT_co: ...
7082
7183
7284class StringNamespace (_StoresCompliant [CompliantT_co ], Protocol [CompliantT_co ]):
85+ _accessor : ClassVar [Accessor ] = "str"
86+
7387 def len_chars (self ) -> CompliantT_co : ...
7488 def replace (
7589 self , pattern : str , value : str , * , literal : bool , n : int
@@ -91,4 +105,6 @@ def zfill(self, width: int) -> CompliantT_co: ...
91105
92106
93107class StructNamespace (_StoresCompliant [CompliantT_co ], Protocol [CompliantT_co ]):
108+ _accessor : ClassVar [Accessor ] = "struct"
109+
94110 def field (self , name : str ) -> CompliantT_co : ...
0 commit comments