Skip to content

Commit

Permalink
Modify nmr/_main.py, nmr/nmr.py, test/test_huge.py, test/test_nmr.py,…
Browse files Browse the repository at this point in the history
… test/test_sign.py
  • Loading branch information
rec committed Dec 23, 2024
1 parent e690f1b commit 7f5aa80
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 20 deletions.
4 changes: 2 additions & 2 deletions nmr/_main.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def run(self, i: Any) -> None:
if self._type_class and isinstance(i, int):
value = [i]
else:
value = self.nmr.encode_to_name(i)
value = self.nmr._encode_to_name(i)

if self._type_class:
value = [str(self._type_class.int_to_type(v)) for v in value]
Expand All @@ -106,7 +106,7 @@ def run(self, i: Any) -> None:
def rnd(self) -> None:
for i in range(self.random_count):
r = int(10 ** random.uniform(0, 50))
print(f"{r}:", *self.nmr.encode_to_name(r))
print(f"{r}:", *self.nmr._encode_to_name(r))

def group_args(self) -> Iterator[int | str | list[int | str]]:
iargs = (types.try_to_int(a) for a in self.arguments or ())
Expand Down
14 changes: 4 additions & 10 deletions nmr/nmr.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,21 +53,15 @@ def __init__(
self._count_words = count_words.CountWords(self.n).count
self.inverse = {w: i for i, w in enumerate(self.words)}

def encode_to_name(self, num: int) -> Sequence[str]:
def _encode_to_name(self, num: int) -> Sequence[str]:
if num < 0:
raise ValueError("Only accepts non-negative numbers")
return [self.words[i] for i in self._to_digits(num)]

def decode_from_name(self, name: Sequence[str]) -> int:
name = list(name)
if len(set(name)) != len(name):
raise ValueError("Repeated words not allowed")

try:
indexes = [self.inverse[w] for w in reversed(name)]
except KeyError:
raise KeyError(*sorted(set(name) - set(self.inverse))) from None

_check_dupes(name)
indexes = [self.inverse[w] for w in reversed(name)]
return self._from_digits(list(self._redupe(indexes))[::-1])

def is_name(self, s: Sequence[str]) -> bool:
Expand All @@ -79,7 +73,7 @@ def name_to_type(self, name: Sequence[str]) -> str:

def type_to_name(self, s: str) -> Sequence[str]:
index = types.type_to_index(s)
return self.encode_to_name(index)
return self._encode_to_name(index)

@property
def n(self) -> int:
Expand Down
8 changes: 4 additions & 4 deletions test/test_huge.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
def test_huge_unsigned():
maxint = nmr._count_words() - 1
expected = ["the", "of", "and", "to", "a", "in", "for", "on"]
assert nmr.encode_to_name(maxint)[:8] == expected
assert nmr._encode_to_name(maxint)[:8] == expected

expected = ["smile", "armed", "laura", "tokyo", "candy", "tiger", "boost", "moral"]
assert nmr.encode_to_name(maxint)[-8:] == expected
assert nmr._encode_to_name(maxint)[-8:] == expected
with pytest.raises(ValueError):
nmr.encode_to_name(maxint + 1)
nmr._encode_to_name(maxint + 1)

expected = ["the"]
assert nmr.encode_to_name(0) == expected
assert nmr._encode_to_name(0) == expected


MAX = int(
Expand Down
2 changes: 1 addition & 1 deletion test/test_nmr.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def count(n, i):

@pytest.mark.parametrize("number, words", _STABILITY_TABLE)
def test_stability(number, words):
actual_words = nmr.encode_to_name(number)
actual_words = nmr._encode_to_name(number)
if actual_words != words:
print(actual_words)
assert actual_words == words
Expand Down
6 changes: 3 additions & 3 deletions test/test_sign.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ def test_all_unsigned(n):
m = N._count_words(n)

for i in range(m):
words = N.encode_to_name(i)
words = N._encode_to_name(i)
assert len(words) == len(set(words))
assert N.decode_from_name(words) == i, str(words)

err = "Only accepts non-negative numbers"
with pytest.raises(ValueError, match=err):
N.encode_to_name(-1)
N._encode_to_name(-1)

err = f"Cannot represent {m} in base {n}"
with pytest.raises(ValueError, match=err):
N.encode_to_name(m)
N._encode_to_name(m)

0 comments on commit 7f5aa80

Please # to comment.