Skip to content

Commit

Permalink
fix(syntax tree): Fixed typing issue with GeometryTree causing exception
Browse files Browse the repository at this point in the history
Fixed geometry Tree with actual type enforcement
  • Loading branch information
MicahGale authored Mar 16, 2024
2 parents ab21045 + 238176b commit 7a24ac0
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 17 deletions.
1 change: 1 addition & 0 deletions montepy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
except ImportError:
__version__ = "Undefined"


# enable deprecated warnings for users
if not sys.warnoptions:
import os, warnings
Expand Down
9 changes: 6 additions & 3 deletions montepy/input_parser/cell_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def union(self, p):
def geometry_expr(self, p):
left = p.geometry_expr
right = p.geometry_term
nodes = {"left": left.nodes, "operator": p.union, "right": right.nodes}
nodes = {"left": left, "operator": p.union, "right": right}
return syntax_node.GeometryTree("union", nodes, ":", left, right)

@_("geometry_term")
Expand Down Expand Up @@ -112,7 +112,7 @@ def geometry_term(self, p):
for node in node_iter:
new_tree = syntax_node.GeometryTree(
"intersection",
{"left": left, "operator": None, "right": node},
{"left": left, "operator": syntax_node.PaddingNode(), "right": node},
"*",
left,
node,
Expand Down Expand Up @@ -142,7 +142,10 @@ def geometry_factor(self, p):

@_("COMPLEMENT geometry_factory")
def geometry_factor(self, p):
nodes = {"operator": p.COMPLEMENT, "left": p.geometry_factory}
nodes = {
"operator": syntax_node.PaddingNode(p.COMPLEMENT),
"left": p.geometry_factory,
}
return syntax_node.GeometryTree(
"complement",
nodes,
Expand Down
16 changes: 3 additions & 13 deletions montepy/input_parser/syntax_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,7 @@ class GeometryTree(SyntaxNodeBase):

def __init__(self, name, tokens, op, left, right=None):
super().__init__(name)
assert all(list(map(lambda v: isinstance(v, SyntaxNodeBase), tokens.values())))
self._nodes = tokens
self._operator = Operator(op)
self._left_side = left
Expand All @@ -241,19 +242,8 @@ def format(self):

@property
def comments(self):
for key, node in self.nodes.items():
if isinstance(node, SyntaxNodeBase):
yield from node.comments
elif isinstance(node, dict):
yield from GeometryTree._recurse_comments(node)

@staticmethod
def _recurse_comments(tree):
for node in tree.values():
if isinstance(node, SyntaxNodeBase):
yield from node.comments
elif isinstance(node, dict):
yield from GeometryTree._recurse_comments(node)
for node in self.nodes.values():
yield from node.comments

@property
def left(self):
Expand Down
1 change: 1 addition & 0 deletions tests/test_edge_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -176,3 +176,4 @@ def test_geometry_comments(self):
cell = montepy.Cell(input)
# this step caused an error for #163
cell.comments
cell._tree.format()
2 changes: 1 addition & 1 deletion tests/test_geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
class TestHalfSpaceUnit(TestCase):
def test_init(self):
surface = montepy.surfaces.CylinderOnAxis()
node = montepy.input_parser.syntax_node.GeometryTree("hi", [], "*", " ", " ")
node = montepy.input_parser.syntax_node.GeometryTree("hi", {}, "*", " ", " ")
half_space = HalfSpace(+surface, Operator.UNION, -surface, node)
self.assertIs(half_space.operator, Operator.UNION)
self.assertEqual(half_space.left, +surface)
Expand Down

0 comments on commit 7a24ac0

Please sign in to comment.