diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 2b33440062..2df95d320b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,7 @@ Next release *Fixed* * Table writer no longer errors on ``NaN`` scalar values (#2189). +* Table writer no longer errors on ``Inf`` scalar values (#2196). 6.0.0 (2025-11-21) ^^^^^^^^^^^^^^^^^^^^ diff --git a/hoomd/pytest/test_table.py b/hoomd/pytest/test_table.py index 43b4fdcb83..204a43b75a 100644 --- a/hoomd/pytest/test_table.py +++ b/hoomd/pytest/test_table.py @@ -257,3 +257,21 @@ def test_nan_is_ok(): sim.operations.writers.append(table_writer) sim.run(1) + + +def test_inf_is_ok(): + # Ensure that Inf value doesn't cause table writer to error + sim = hoomd.util.make_example_simulation() + + logger = hoomd.logging.Logger(categories=["scalar"]) + logger[("test", "inf")] = (lambda: float("inf"), "scalar") + + output = StringIO("") + + table_writer = hoomd.write.Table( + trigger=1, logger=logger, output=output, delimiter="," + ) + + sim.operations.writers.append(table_writer) + + sim.run(1) diff --git a/hoomd/write/table.py b/hoomd/write/table.py index 459a36b5c7..0b812acbbd 100644 --- a/hoomd/write/table.py +++ b/hoomd/write/table.py @@ -11,7 +11,7 @@ from abc import ABCMeta, abstractmethod import copy from numbers import Integral -from math import log10, isnan +from math import log10, isnan, isinf from sys import stdout import inspect @@ -128,6 +128,8 @@ def format_num(self, value, column_width): # point including the decimal point. if isnan(value): return "NaN" + if isinf(value): + return "Inf" min_len_repr = self._digits_from_decimal(value) + 1 # Use scientific formatting if not min_len_repr < 6 or min_len_repr > column_width: