diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index 7248846b312c920768e1f5b68af65aa21cfb46b8..5560652513b817068a297ba6df39527280857601 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -350,7 +350,7 @@ class CustomSympyPrinter(CCodePrinter): return "&(%s)" % self._print(expr.args[0]) elif isinstance(expr, cast_func): arg, data_type = expr.args - if isinstance(arg, sp.Number): + if isinstance(arg, sp.Number) and arg.is_finite: return self._typed_number(arg, data_type) else: return "((%s)(%s))" % (data_type, self._print(arg)) diff --git a/pystencils_tests/test_print_infinity.py b/pystencils_tests/test_print_infinity.py new file mode 100644 index 0000000000000000000000000000000000000000..4b1e488822163e684dcad4009fca1b72c7d87d2c --- /dev/null +++ b/pystencils_tests/test_print_infinity.py @@ -0,0 +1,22 @@ +import pytest + +import pystencils +from sympy import oo + + +@pytest.mark.parametrize('type', ('float32', 'float64', 'int64')) +@pytest.mark.parametrize('negative', (False, 'Negative')) +@pytest.mark.parametrize('target', ('cpu', 'gpu')) +def test_print_infinity(type, negative, target): + + x = pystencils.fields(f'x: {type}[1d]') + + if negative: + assignment = pystencils.Assignment(x.center, -oo) + else: + assignment = pystencils.Assignment(x.center, oo) + ast = pystencils.create_kernel(assignment, data_type=type, target=target) + + ast.compile() + + print(ast.compile().code)