Beispiel #1
0
    def __init__(
        self,
        rules,
        leaf_threshold,
        refinements={
            "node_merging": False,
            "rule_overlay": False,
            "region_compaction": False,
            "rule_pushup": False,
            "equi_dense": False
        }):
        # hyperparameters
        self.leaf_threshold = leaf_threshold
        self.refinements = refinements

        self.rules = RuleSet(rules) if isinstance(rules, list) else rules
        self.root = self.create_node(
            0, [0, 2**32, 0, 2**32, 0, 2**16, 0, 2**16, 0, 2**8], rules, 1,
            None, None)
        if (self.refinements["region_compaction"]):
            self.refinement_region_compaction(self.root)
        self.current_node = self.root
        self.nodes_to_cut = [self.root]
        self.depth = 1
        self.node_count = 1
Beispiel #2
0
 def test_ruleset(self):
     with open('people.json') as f1:
         people_data = json.load(f1)
     results = list()
     for person in people_data['people']:
         with open('rules.json') as f2:
             rules_data = json.load(f2)
         rs = RuleSet(rules_data)
         results.append(rs.evaluate(person))
     for result in results:
         if result['name'] == 'FRED':
             self.assertEqual(result['status'], 'COOL')
         elif result['name'] == 'GINGER':
             self.assertEqual(result['status'], 'OLD')
         elif result['name'] == 'SID':
             self.assertEqual(result['status'], 'ANCIENT')
         elif result['name'] == 'NANCY':
             self.assertEqual(result['status'], 'VERY OLD')
         elif result['name'] == 'JOE':
             self.assertEqual(result['status'], 'YOUNG')
         elif result['name'] == 'FLO':
             self.assertEqual(result['status'], 'VERY OLD')
         elif result['name'] == 'REG':
             self.assertEqual(result['status'], 'WEIRD')
         elif result['name'] == 'BRIAN':
             self.assertEqual(result['status'], 'DEAD')
         elif result['name'] == 'ELSIE':
             self.assertEqual(result['status'], 'OLD HIPPY')
             self.assertEqual(result['nickname'], 'Hippy')
    def test_exclusive_ab(self):
        rs = RuleSet()

        rs.addDep("a", "b")
        rs.addConflict("a", "b")

        self.assertFalse(rs.isCoherent(), "rs.isCoherent failed")
    def test_depends_ab_ba(self):
        rs = RuleSet()

        rs.addDep("a", "b")
        rs.addDep("b", "a")

        self.assertTrue(rs.isCoherent(), "rs.isCoherent failed")
Beispiel #5
0
 def test_deep_deps(self):
     rs = RuleSet()
     rs.addDep("a", "b")
     rs.addDep("b", "c")
     rs.addDep("c", "d")
     rs.addDep("d", "e")
     rs.addDep("a", "f")
     rs.addConflict("e", "f")
     self.assertFalse(rs.isCoherent(), "rs.isCoherent failed")
Beispiel #6
0
 def __init__(self, id, ranges, rules, depth, partitions, manual_partition):
     self.id = id
     self.partitions = list(partitions or [])
     self.manual_partition = manual_partition
     self.ranges = ranges
     self.rules = RuleSet(rules) if isinstance(rules, list) else rules
     self.depth = depth
     self.children = []
     self.action = None
     self.pushup_rules = None
     self.num_rules = len(self.rules)
Beispiel #7
0
    def createRuleSet(self, name):

        logging.info("Creating RuleSet: " + name)

        if (name is None or name == ""):
            raise ValueError("RuleSet name cannot be none or empty")

        rs = RuleSet(name)
        self.ruleSets[name] = rs

        logging.info("Created RuleSet: " + name)

        return rs
Beispiel #8
0
    def test_ab_bc_toggle(self):
        rs = RuleSet()
        rs.addDep("a", "b")
        rs.addDep("b", "c")
        self.assertTrue(rs.isCoherent(), "rs.isCoherent failed")
        opts = Options(rs)
        opts.toggle("c")

        self.assertSetEqual(
            opts.selection(),
            set(["c"]),
            "toggle expected (c) got %s" % opts.selection(),
        )
Beispiel #9
0
    def test_exclusive_ab_bc_ca_de(self):
        rs = RuleSet()
        rs.addDep("a", "b")
        rs.addDep("b", "c")
        rs.addDep("c", "a")
        rs.addDep("d", "e")
        rs.addConflict("c", "e")
        self.assertTrue(rs.isCoherent(), "rs.isCoherent failed")

        opts = Options(rs)

        opts.toggle("a")
        self.assertSetEqual(
            opts.selection(),
            set(["a", "c", "b"]),
            "toggle expected (a, c, b) got %s" % opts.selection(),
        )

        rs.addDep("f", "f")
        opts.toggle("f")

        self.assertSetEqual(
            opts.selection(),
            set(["a", "c", "b", "f"]),
            "toggle expected (a, c, b, f) got %s" % opts.selection(),
        )

        opts.toggle("e")
        self.assertSetEqual(
            opts.selection(),
            set(["e", "f"]),
            "toggle expected (e, f) got %s" % opts.selection(),
        )

        opts.toggle("b")
        self.assertSetEqual(
            opts.selection(),
            set(["a", "c", "b", "f"]),
            "toggle expected (a, c, b, f) got %s" % opts.selection(),
        )

        rs.addDep("b", "g")
        opts.toggle("g")
        opts.toggle("b")
        self.assertSetEqual(
            opts.selection(),
            set(["g", "f"]),
            "toggle expected (g, f) got %s" % opts.selection(),
        )
Beispiel #10
0
    def test_ab_ac(self):
        rs = RuleSet()
        rs.addDep("a", "b")
        rs.addDep("a", "c")
        rs.addConflict("b", "d")
        rs.addConflict("b", "e")
        self.assertTrue(rs.isCoherent(), "rs.isCoherent failed")

        opts = Options(rs)
        opts.toggle("d")
        opts.toggle("e")
        opts.toggle("a")
        self.assertSetEqual(
            opts.selection(),
            set(["a", "c", "b"]),
            "toggle expected (a, c, b) got %s" % opts.selection(),
        )