@@ -906,6 +906,34 @@ def get_siblings(self, a):
906906 return [x () for x in siblings ]
907907
908908
909+ class GrouperView :
910+ """Immutable view over a `.Grouper`."""
911+
912+ def __init__ (self , grouper ):
913+ self ._grouper = grouper
914+
915+ class _GrouperMethodForwarder :
916+ def __init__ (self , deprecated_kw = None ):
917+ self ._deprecated_kw = deprecated_kw
918+
919+ def __set_name__ (self , owner , name ):
920+ wrapped = getattr (Grouper , name )
921+ forwarder = functools .wraps (wrapped )(
922+ lambda self , * args , ** kwargs : wrapped (
923+ self ._grouper , * args , ** kwargs ))
924+ if self ._deprecated_kw :
925+ forwarder = _api .deprecated (** self ._deprecated_kw )(forwarder )
926+ setattr (owner , name , forwarder )
927+
928+ __contains__ = _GrouperMethodForwarder ()
929+ __iter__ = _GrouperMethodForwarder ()
930+ joined = _GrouperMethodForwarder ()
931+ get_siblings = _GrouperMethodForwarder ()
932+ clean = _GrouperMethodForwarder (deprecated_kw = dict (since = "3.6" ))
933+ join = _GrouperMethodForwarder (deprecated_kw = dict (since = "3.6" ))
934+ remove = _GrouperMethodForwarder (deprecated_kw = dict (since = "3.6" ))
935+
936+
909937def simple_linear_interpolation (a , steps ):
910938 """
911939 Resample an array with ``steps - 1`` points between original point pairs.
0 commit comments