Skip to content

Commit 6761f86

Browse files
committed
(parse|test) (inf|nan)
1 parent eb86b9b commit 6761f86

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

pymbolic/parser.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
_closebracket = intern("closebracket")
4040
_true = intern("True")
4141
_false = intern("False")
42+
_inf = intern("inf")
43+
_nan = intern("nan")
4244
_identifier = intern("identifier")
4345
_whitespace = intern("whitespace")
4446
_comma = intern("comma")
@@ -168,6 +170,8 @@ class Parser:
168170
(_closebracket, pytools.lex.RE(r"\]")),
169171
(_true, pytools.lex.RE(r"True")),
170172
(_false, pytools.lex.RE(r"False")),
173+
(_inf, pytools.lex.RE(r"inf")),
174+
(_nan, pytools.lex.RE(r"nan")),
171175
(_identifier, pytools.lex.RE(r"[@$a-z_A-Z_][@$a-zA-Z_0-9]*")),
172176
(_whitespace, pytools.lex.RE("[ \n\t]*")),
173177
(_comma, pytools.lex.RE(",")),
@@ -203,6 +207,14 @@ def parse_terminal(self, pstate):
203207
elif next_tag is _false:
204208
assert pstate.next_str_and_advance() == "False"
205209
return False
210+
elif next_tag is _inf:
211+
from math import inf
212+
assert pstate.next_str_and_advance() == "inf"
213+
return inf
214+
elif next_tag is _nan:
215+
from math import nan
216+
assert pstate.next_str_and_advance() == "nan"
217+
return nan
206218
elif next_tag is _identifier:
207219
return primitives.Variable(pstate.next_str_and_advance())
208220
elif next_tag is _if:

test/test_pymbolic.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ def test_parser():
291291
parse("1+if(0, 1, 2)")
292292

293293
assert eval(str(parse("1729 if True or False else 42"))) == 1729
294+
import math
295+
assert math.isinf(parse("inf"))
296+
assert math.isnan(parse("nan"))
294297

295298
# }}}
296299

0 commit comments

Comments
 (0)