Skip to content

Commit d75b38e

Browse files
committed
(parse|test) (inf|nan)
1 parent 725a184 commit d75b38e

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

pymbolic/parser.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
_closepar = intern("closepar")
3838
_openbracket = intern("openbracket")
3939
_closebracket = intern("closebracket")
40+
_inf = intern("inf")
41+
_nan = intern("nan")
4042
_identifier = intern("identifier")
4143
_whitespace = intern("whitespace")
4244
_comma = intern("comma")
@@ -164,6 +166,8 @@ class Parser:
164166
(_closepar, pytools.lex.RE(r"\)")),
165167
(_openbracket, pytools.lex.RE(r"\[")),
166168
(_closebracket, pytools.lex.RE(r"\]")),
169+
(_inf, pytools.lex.RE(r"inf")),
170+
(_nan, pytools.lex.RE(r"nan")),
167171
(_identifier, pytools.lex.RE(r"[@$a-z_A-Z_][@$a-zA-Z_0-9]*")),
168172
(_whitespace, pytools.lex.RE("[ \n\t]*")),
169173
(_comma, pytools.lex.RE(",")),
@@ -193,6 +197,14 @@ def parse_terminal(self, pstate):
193197
return self.parse_float(pstate.next_str_and_advance())
194198
elif next_tag is _imaginary:
195199
return complex(pstate.next_str_and_advance())
200+
elif next_tag is _inf:
201+
from math import inf
202+
assert pstate.next_str_and_advance() == "inf"
203+
return inf
204+
elif next_tag is _nan:
205+
from math import nan
206+
assert pstate.next_str_and_advance() == "nan"
207+
return nan
196208
elif next_tag is _identifier:
197209
return primitives.Variable(pstate.next_str_and_advance())
198210
elif next_tag is _if:

test/test_pymbolic.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ def test_parser():
290290
with pytest.deprecated_call():
291291
parse("1+if(0, 1, 2)")
292292

293+
import math
294+
assert math.isinf(parse("inf"))
295+
assert math.isnan(parse("nan"))
296+
293297
# }}}
294298

295299

0 commit comments

Comments
 (0)