Skip to content

Commit a96a508

Browse files
committed
Make helper classes private, address code coverage issues.
Some of the dict-like overloads were an overachievement.
1 parent 6496cac commit a96a508

File tree

2 files changed

+8
-11
lines changed

2 files changed

+8
-11
lines changed

src/nested_pandas/nestedframe/core.py

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def _constructor_expanddim(self) -> Self: # type: ignore[name-defined] # noqa:
6969
__pandas_priority__ = 3500
7070

7171

72-
class NestResolver(dict):
72+
class _NestResolver(dict):
7373
"""
7474
Used by NestedFrame.eval to resolve the names of nests at the top level.
7575
While the resolver is normally a dictionary, with values that are fixed
@@ -83,22 +83,15 @@ def __init__(self, outer: NestedFrame):
8383
super().__init__()
8484

8585
def __contains__(self, item):
86-
if not isinstance(item, str):
87-
return False
8886
top_nest = item if "." not in item else item.split(".")[0].strip()
8987
return top_nest in self._outer.nested_columns
9088

91-
def __len__(self):
92-
return len(self._outer.nested_columns)
93-
9489
def __getitem__(self, item):
95-
if not isinstance(item, str):
96-
raise KeyError(f"Unknown nest {item}")
9790
top_nest = item if "." not in item else item.split(".")[0].strip()
9891
if not super().__contains__(top_nest):
9992
if top_nest not in self._outer.nested_columns:
10093
raise KeyError(f"Unknown nest {top_nest}")
101-
super().__setitem__(top_nest, NestedFieldResolver(top_nest, self._outer))
94+
super().__setitem__(top_nest, _NestedFieldResolver(top_nest, self._outer))
10295
return super().__getitem__(top_nest)
10396

10497
def __setitem__(self, key, value):
@@ -110,7 +103,7 @@ def __setitem__(self, key, value):
110103
pass
111104

112105

113-
class NestedFieldResolver:
106+
class _NestedFieldResolver:
114107
"""
115108
Used by NestedFrame.eval to resolve the names of fields in nested columns when
116109
encountered in expressions, interpreting __getattr__ in terms of a
@@ -448,7 +441,7 @@ def eval(self, expr: str, *, inplace: bool = False, **kwargs) -> Any | None:
448441
--------
449442
https://pandas.pydata.org/docs/reference/api/pandas.eval.html
450443
"""
451-
kwargs["resolvers"] = tuple(kwargs.get("resolvers", ())) + (NestResolver(self),)
444+
kwargs["resolvers"] = tuple(kwargs.get("resolvers", ())) + (_NestResolver(self),)
452445
kwargs["inplace"] = inplace
453446
kwargs["parser"] = "nested-pandas"
454447
return super().eval(expr, **kwargs)

tests/nested_pandas/nestedframe/test_nestedframe.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,10 @@ def test_eval_assignment():
860860
assert (nf_nx["packed.f"] == nf["a"] + nf["packed.c"]).all()
861861
assert (nf_nx["packed.f"] == pd.Series([1, 3, 5, 12, 6, 5, 4, 7, 4], index=to_pack.index)).all()
862862

863+
# Only supporting one level of nesting at present.
864+
with pytest.raises(ValueError):
865+
nf.eval("packed.c.inner = packed.c * 2 + packed.d")
866+
863867
# Assigning to new base columns from nested columns. This can't be done because
864868
# it would attempt to create base column values that were "between indexes", or as
865869
# Pandas puts, duplicate index labels.

0 commit comments

Comments
 (0)