diff --git a/hoomd/data/typeconverter.py b/hoomd/data/typeconverter.py index b5ac5cad7b..796faeeea0 100644 --- a/hoomd/data/typeconverter.py +++ b/hoomd/data/typeconverter.py @@ -106,6 +106,19 @@ def nonnegative_real(number): return float_number +def positive_int(number): + """Ensures that a value is a positive integer""" + if isinstance(number, float) and not number.is_integer(): + raise TypeConversionError(f"Expected integer, {number} has a non-zero decimal part") + try: + int_number = int(number) + except Exception as err: + raise TypeConversionError(f"{number} is not convertible to int.") from err + if int_number <= 0: + raise TypeConversionError("Expected a positive integer") + return int_number + + def identity(value): """Return the given value.""" return value diff --git a/hoomd/md/pair/pair.py b/hoomd/md/pair/pair.py index 40a2b00971..5f3de2b6f1 100644 --- a/hoomd/md/pair/pair.py +++ b/hoomd/md/pair/pair.py @@ -12,7 +12,7 @@ from hoomd.data.parameterdicts import ParameterDict, TypeParameterDict from hoomd.data.typeparam import TypeParameter import numpy as np -from hoomd.data.typeconverter import OnlyFrom, nonnegative_real, positive_real +from hoomd.data.typeconverter import OnlyFrom, nonnegative_real, positive_real, positive_int class Pair(force.Force): @@ -2099,7 +2099,7 @@ def __init__(self, nlist, default_r_cut=None, default_r_on=0.0, mode="none"): "params", "particle_types", TypeParameterDict( - epsilon=float, sigma=float, R=float, mu=int, nu=int, len_keys=2 + epsilon=float, sigma=float, R=float, mu=positive_int, nu=positive_int, len_keys=2 ), )