コード例 #1
0
    def test_exitNode(self):
        # This is an alternative way to implement the beforeChild test:
        def exit(node, data):
            if data:
                return data
            else:
                return [node]
        walker = StreamBasedExpressionVisitor(exitNode=exit)
        m = self.m

        ans = walker.walk_expression(self.e)
        ref = [
            [[m.x], [2]],
            [m.y],
            [[m.z], [[m.x], [m.y]]]
        ]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = [m.x]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = [2]
        self.assertEqual(str(ans), str(ref))
コード例 #2
0
    def test_enterNode_withFinalize(self):
        # This is an alternative way to implement the beforeChild test:
        def enter(node):
            if type(node) in nonpyomo_leaf_types \
               or not node.is_expression_type():
                return (), node
            return node.args, []

        def finalize(result):
            if type(result) is list:
                return result
            else:
                return [result]

        walker = StreamBasedExpressionVisitor(enterNode=enter,
                                              finalizeResult=finalize)
        m = self.m

        ans = walker.walk_expression(self.e)
        ref = [[m.x, 2], m.y, [m.z, [m.x, m.y]]]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = [m.x]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = [2]
        self.assertEqual(str(ans), str(ref))
コード例 #3
0
    def test_old_beforeChild(self):
        def before(node, child):
            if type(child) in nonpyomo_leaf_types \
               or not child.is_expression_type():
                return False, [child]

        os = StringIO()
        with LoggingIntercept(os, 'pyomo'):
            walker = StreamBasedExpressionVisitor(beforeChild=before)
        self.assertIn(
            "Note that the API for the StreamBasedExpressionVisitor "
            "has changed to include the child index for the beforeChild() "
            "method",
            os.getvalue().replace('\n', ' '))

        ans = walker.walk_expression(self.e)
        m = self.m
        ref = [[[m.x], [2]], [m.y], [[m.z], [[m.x], [m.y]]]]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = []
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = []
        self.assertEqual(str(ans), str(ref))
コード例 #4
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
    def test_exitNode(self):
        # This is an alternative way to implement the beforeChild test:
        def exit(node, data):
            if data:
                return data
            else:
                return [node]
        walker = StreamBasedExpressionVisitor(exitNode=exit)
        m = self.m

        ans = walker.walk_expression(self.e)
        ref = [
            [[m.x], [2]],
            [m.y],
            [[m.z], [[m.x], [m.y]]]
        ]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = [m.x]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = [2]
        self.assertEqual(str(ans), str(ref))
コード例 #5
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
    def test_enterNode_withFinalize(self):
        # This is an alternative way to implement the beforeChild test:
        def enter(node):
            if type(node) in nonpyomo_leaf_types \
               or not node.is_expression_type():
                return (), node
            return node.args, []
        def finalize(result):
            if type(result) is list:
                return result
            else:
                return[result]
        walker = StreamBasedExpressionVisitor(
            enterNode=enter, finalizeResult=finalize)
        m = self.m

        ans = walker.walk_expression(self.e)
        ref = [
            [m.x, 2],
            m.y,
            [m.z, [m.x, m.y]]
        ]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = [m.x]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = [2]
        self.assertEqual(str(ans), str(ref))
コード例 #6
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
    def test_enterNode_noLeafList(self):
        # This is an alternative way to implement the beforeChild test:
        def enter(node):
            if type(node) in nonpyomo_leaf_types \
               or not node.is_expression_type():
                return (), node
            return node.args, []
        walker = StreamBasedExpressionVisitor(
            enterNode=enter)
        m = self.m

        ans = walker.walk_expression(self.e)
        ref = [
            [m.x, 2],
            m.y,
            [m.z, [m.x, m.y]]
        ]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = m.x
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = 2
        self.assertEqual(str(ans), str(ref))
コード例 #7
0
    def test_enterNode_noLeafList(self):
        # This is an alternative way to implement the beforeChild test:
        def enter(node):
            if type(node) in nonpyomo_leaf_types \
               or not node.is_expression_type():
                return (), node
            return node.args, []
        walker = StreamBasedExpressionVisitor(
            enterNode=enter)
        m = self.m

        ans = walker.walk_expression(self.e)
        ref = [
            [m.x, 2],
            m.y,
            [m.z, [m.x, m.y]]
        ]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = m.x
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = 2
        self.assertEqual(str(ans), str(ref))
コード例 #8
0
ファイル: test_visitor.py プロジェクト: zypher22/pyomo
    def test_OLD_beforeChild_acceptChildResult_afterChild(self):
        counts = [0,0,0]
        def before(node, child):
            counts[0] += 1
            if type(child) in nonpyomo_leaf_types \
               or not child.is_expression_type():
                return False, None
        def accept(node, data, child_result):
            counts[1] += 1
        def after(node, child):
            counts[2] += 1

        os = StringIO()
        with LoggingIntercept(os, 'pyomo'):
            walker = StreamBasedExpressionVisitor(
                beforeChild=before, acceptChildResult=accept, afterChild=after)
        self.assertIn(
            "Note that the API for the StreamBasedExpressionVisitor "
            "has changed to include the child index for the "
            "beforeChild() method", os.getvalue().replace('\n',' '))
        self.assertIn(
            "Note that the API for the StreamBasedExpressionVisitor "
            "has changed to include the child index for the "
            "acceptChildResult() method", os.getvalue().replace('\n',' '))
        self.assertIn(
            "Note that the API for the StreamBasedExpressionVisitor "
            "has changed to include the child index for the "
            "afterChild() method", os.getvalue().replace('\n',' '))

        ans = walker.walk_expression(self.e)
        m = self.m
        self.assertEqual(ans, None)
        self.assertEquals(counts, [9,9,9])
コード例 #9
0
    def test_finalize(self):
        ans = []

        def before(node, child, child_idx):
            if type(child) in nonpyomo_leaf_types \
               or not child.is_expression_type():
                return False, child

        def accept(node, data, child_result, child_idx):
            if data is not child_result:
                data.append(child_result)
            return data

        def enter(node):
            return node.args, ans

        def finalize(result):
            return len(result)

        walker = StreamBasedExpressionVisitor(enterNode=enter,
                                              beforeChild=before,
                                              acceptChildResult=accept,
                                              finalizeResult=finalize)
        ans = walker.walk_expression(self.e)
        self.assertEqual(ans, 6)
コード例 #10
0
 def test_default(self):
     walker = StreamBasedExpressionVisitor()
     ans = walker.walk_expression(self.e)
     ref = [[[], []], [], [
         [],
         [[], []],
     ]]
     self.assertEqual(ans, ref)
コード例 #11
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
 def test_reduce_in_accept(self):
     def enter(node):
         return None, 1
     def accept(node, data, child_result):
         return data + child_result
     walker = StreamBasedExpressionVisitor(
         enterNode=enter, acceptChildResult=accept)
     # 4 operators, 6 leaf nodes
     self.assertEquals(walker.walk_expression(self.e), 10)
コード例 #12
0
 def test_reduce_in_accept(self):
     def enter(node):
         return None, 1
     def accept(node, data, child_result):
         return data + child_result
     walker = StreamBasedExpressionVisitor(
         enterNode=enter, acceptChildResult=accept)
     # 4 operators, 6 leaf nodes
     self.assertEquals(walker.walk_expression(self.e), 10)
コード例 #13
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
 def test_default(self):
     walker = StreamBasedExpressionVisitor()
     ans = walker.walk_expression(self.e)
     ref = [
         [[],[]],
         [],
         [[],[[],[]],]
     ]
     self.assertEqual(ans, ref)
コード例 #14
0
    def test_beforeChild(self):
        def before(node, child, child_idx):
            if type(child) in nonpyomo_leaf_types \
               or not child.is_expression_type():
                return False, [child]

        walker = StreamBasedExpressionVisitor(beforeChild=before)
        ans = walker.walk_expression(self.e)
        m = self.m
        ref = [[[m.x], [2]], [m.y], [[m.z], [[m.x], [m.y]]]]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = []
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = []
        self.assertEqual(str(ans), str(ref))
コード例 #15
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
    def test_beforeChild(self):
        def before(node, child):
            if type(child) in nonpyomo_leaf_types \
               or not child.is_expression_type():
                return False, [child]
        walker = StreamBasedExpressionVisitor(beforeChild=before)
        ans = walker.walk_expression(self.e)
        m = self.m
        ref = [
            [[m.x], [2]],
            [m.y],
            [[m.z], [[m.x], [m.y]]]
        ]
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(m.x)
        ref = []
        self.assertEqual(str(ans), str(ref))

        ans = walker.walk_expression(2)
        ref = []
        self.assertEqual(str(ans), str(ref))
コード例 #16
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
 def test_beforeChild_acceptChildResult_afterChild(self):
     counts = [0,0,0]
     def before(node, child):
         counts[0] += 1
         if type(child) in nonpyomo_leaf_types \
            or not child.is_expression_type():
             return False, None
     def accept(node, data, child_result):
         counts[1] += 1
     def after(node, child):
         counts[2] += 1
     walker = StreamBasedExpressionVisitor(
         beforeChild=before, acceptChildResult=accept, afterChild=after)
     ans = walker.walk_expression(self.e)
     m = self.m
     self.assertEqual(ans, None)
     self.assertEquals(counts, [9,9,9])
コード例 #17
0
 def test_beforeChild_acceptChildResult_afterChild(self):
     counts = [0,0,0]
     def before(node, child):
         counts[0] += 1
         if type(child) in nonpyomo_leaf_types \
            or not child.is_expression_type():
             return False, None
     def accept(node, data, child_result):
         counts[1] += 1
     def after(node, child):
         counts[2] += 1
     walker = StreamBasedExpressionVisitor(
         beforeChild=before, acceptChildResult=accept, afterChild=after)
     ans = walker.walk_expression(self.e)
     m = self.m
     self.assertEqual(ans, None)
     self.assertEquals(counts, [9,9,9])
コード例 #18
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
 def test_enterNode_acceptChildResult_beforeChild(self):
     ans = []
     def before(node, child):
         if type(child) in nonpyomo_leaf_types \
            or not child.is_expression_type():
             return False, child
     def accept(node, data, child_result):
         if data is not child_result:
             data.append(child_result)
         return data
     def enter(node):
         return node.args, ans
     walker = StreamBasedExpressionVisitor(
         enterNode=enter, beforeChild=before, acceptChildResult=accept)
     ans = walker.walk_expression(self.e)
     m = self.m
     ref = [m.x, 2, m.y, m.z, m.x, m.y]
     self.assertEqual(str(ans), str(ref))
コード例 #19
0
 def test_enterNode_acceptChildResult_beforeChild(self):
     ans = []
     def before(node, child):
         if type(child) in nonpyomo_leaf_types \
            or not child.is_expression_type():
             return False, child
     def accept(node, data, child_result):
         if data is not child_result:
             data.append(child_result)
         return data
     def enter(node):
         return node.args, ans
     walker = StreamBasedExpressionVisitor(
         enterNode=enter, beforeChild=before, acceptChildResult=accept)
     ans = walker.walk_expression(self.e)
     m = self.m
     ref = [m.x, 2, m.y, m.z, m.x, m.y]
     self.assertEqual(str(ans), str(ref))
コード例 #20
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
 def test_finalize(self):
     ans = []
     def before(node, child):
         if type(child) in nonpyomo_leaf_types \
            or not child.is_expression_type():
             return False, child
     def accept(node, data, child_result):
         if data is not child_result:
             data.append(child_result)
         return data
     def enter(node):
         return node.args, ans
     def finalize(result):
         return len(result)
     walker = StreamBasedExpressionVisitor(
         enterNode=enter, beforeChild=before, acceptChildResult=accept,
         finalizeResult=finalize)
     ans = walker.walk_expression(self.e)
     self.assertEqual(ans, 6)
コード例 #21
0
    def test_all_function_pointers(self):
        ans = []

        def name(x):
            if type(x) in nonpyomo_leaf_types:
                return str(x)
            else:
                return x.name

        def enter(node):
            ans.append("Enter %s" % (name(node)))

        def exit(node, data):
            ans.append("Exit %s" % (name(node)))

        def before(node, child, child_idx):
            ans.append("Before %s (from %s)" % (name(child), name(node)))

        def accept(node, data, child_result, child_idx):
            ans.append("Accept into %s" % (name(node)))

        def after(node, child, child_idx):
            ans.append("After %s (from %s)" % (name(child), name(node)))

        def finalize(result):
            ans.append("Finalize")

        walker = StreamBasedExpressionVisitor(enterNode=enter,
                                              exitNode=exit,
                                              beforeChild=before,
                                              acceptChildResult=accept,
                                              afterChild=after,
                                              finalizeResult=finalize)
        self.assertIsNone(walker.walk_expression(self.e))
        self.assertEqual(
            "\n".join(ans), """Enter sum
Before pow (from sum)
Enter pow
Before x (from pow)
Enter x
Exit x
Accept into pow
After x (from pow)
Before 2 (from pow)
Enter 2
Exit 2
Accept into pow
After 2 (from pow)
Exit pow
Accept into sum
After pow (from sum)
Before y (from sum)
Enter y
Exit y
Accept into sum
After y (from sum)
Before prod (from sum)
Enter prod
Before z (from prod)
Enter z
Exit z
Accept into prod
After z (from prod)
Before sum (from prod)
Enter sum
Before x (from sum)
Enter x
Exit x
Accept into sum
After x (from sum)
Before y (from sum)
Enter y
Exit y
Accept into sum
After y (from sum)
Exit sum
Accept into prod
After sum (from prod)
Exit prod
Accept into sum
After prod (from sum)
Exit sum
Finalize""")
コード例 #22
0
ファイル: test_visitor.py プロジェクト: Pyomo/pyomo
    def test_all_function_pointers(self):
        ans = []
        def name(x):
            if type(x) in nonpyomo_leaf_types:
                return str(x)
            else:
                return x.name
        def enter(node):
            ans.append("Enter %s" % (name(node)))
        def exit(node, data):
            ans.append("Exit %s" % (name(node)))
        def before(node, child):
            ans.append("Before %s (from %s)" % (name(child), name(node)))
        def accept(node, data, child_result):
            ans.append("Accept into %s" % (name(node)))
        def after(node, child):
            ans.append("After %s (from %s)" % (name(child), name(node)))
        def finalize(result):
            ans.append("Finalize")
        walker = StreamBasedExpressionVisitor(
            enterNode=enter, exitNode=exit, beforeChild=before, 
            acceptChildResult=accept, afterChild=after, finalizeResult=finalize)
        self.assertIsNone( walker.walk_expression(self.e) )
        self.assertEqual("\n".join(ans),"""Enter sum
Before pow (from sum)
Enter pow
Before x (from pow)
Enter x
Exit x
Accept into pow
After x (from pow)
Before 2 (from pow)
Enter 2
Exit 2
Accept into pow
After 2 (from pow)
Exit pow
Accept into sum
After pow (from sum)
Before y (from sum)
Enter y
Exit y
Accept into sum
After y (from sum)
Before prod (from sum)
Enter prod
Before z (from prod)
Enter z
Exit z
Accept into prod
After z (from prod)
Before sum (from prod)
Enter sum
Before x (from sum)
Enter x
Exit x
Accept into sum
After x (from sum)
Before y (from sum)
Enter y
Exit y
Accept into sum
After y (from sum)
Exit sum
Accept into prod
After sum (from prod)
Exit prod
Accept into sum
After prod (from sum)
Exit sum
Finalize""")