def print_rule_hash(): DescriptionsTests.setUpClass() rule = create_rule() if os.getenv("HASH_RULE_TEST") == "1": print(hash_rule(rule, DescriptionsTests.fe)) else: print(describe_rule(rule, DescriptionsTests.fe))
def test_describe_rule_bag(self): name, indices, feature = self.bag activated = randint(0, len(indices) - 1) activated_name = feature.names[activated] not_activated = randint(0, len(indices) - 1) not_activated_name = feature.names[not_activated] picked_class = randint(0, self.n_classes - 1) picked_class_name = self.class_representations[picked_class] index = indices[activated] not_index = indices[not_activated] rule = Rule(attrs=[ RuleAttribute(index, True, 0.5), RuleAttribute(not_index, False, 0.5) ], stats=RuleStats(picked_class, 0.9, 150), artificial=False) self.assertEqual( describe_rule(rule, self.fe), " %s in {%s} and not in {%s}\n" "⇒ y = %s\n" "Confidence: 0.900. Support: 150." % ( name, activated_name, not_activated_name, picked_class_name, ))
def test_describe_rule_ordinal(self): name, indices, feature = self.ordinal picked_class = randint(0, self.n_classes - 1) picked_class_name = self.class_representations[picked_class] index = indices[0] rule = Rule(attrs=[(index, True, 4.5)], stats=RuleStats(picked_class, 0.9, 150), artificial=False) self.assertEqual(describe_rule(rule, self.fe), " %s ≥ %d\n" "⇒ y = %s\n" "Confidence: 0.900. Support: 150." % ( name, ceil(4.5), picked_class_name, ))
def test_describe_rule_parent(self): feature_id = FeatureId.internal_type index = self.fe.feature_to_indices[FeatureGroup.parents][0][feature_id][0] picked_class = randint(0, self.n_classes - 1) picked_class_name = self.class_representations[picked_class] rule = Rule(attrs=[(index, True, 4)], stats=RuleStats(picked_class, 0.9, 150), artificial=False) self.assertEqual(describe_rule(rule, self.fe), " ^1.%s = AnyTypeAnnotation\n" "⇒ y = %s\n" "Confidence: 0.900. Support: 150." % ( feature_id.name, picked_class_name, ))
def test_describe_rule_right(self): feature_id = FeatureId.length index = self.fe.feature_to_indices[FeatureGroup.right][0][feature_id][0] picked_class = randint(0, self.n_classes - 1) picked_class_name = self.class_representations[picked_class] rule = Rule(attrs=[(index, True, 4.5)], stats=RuleStats(picked_class, 0.9, 150), artificial=False) self.assertEqual(describe_rule(rule, self.fe), " +1.%s ≥ %d\n" "⇒ y = %s\n" "Confidence: 0.900. Support: 150." % ( feature_id.name, ceil(4.5), picked_class_name, ))
def test_describe_rule_categorical(self): name, indices, feature = self.categorical activated = randint(0, len(indices) - 1) activated_name = feature.names[activated] picked_class = randint(0, self.n_classes - 1) picked_class_name = self.class_representations[picked_class] index = indices[activated] rule = Rule(attrs=[(index, True, 0.5)], stats=RuleStats(picked_class, 0.9, 150), artificial=False) self.assertEqual(describe_rule(rule, self.fe), " %s = %s\n" "⇒ y = %s\n" "Confidence: 0.900. Support: 150." % ( name, activated_name, picked_class_name, ))
def test_hash_rule(self): rule = create_rule() my_hash = hash_rule(rule, self.fe) self.assertEqual(len(my_hash), 8) for c in my_hash: self.assertIn(c, set("abcdef0123456789")) env = os.environ.copy() env["HASH_RULE_TEST"] = "1" other_hash = subprocess.check_output([sys.executable, __file__], env=env).decode().strip() if my_hash != other_hash: s1 = describe_rule(rule, self.fe) env["HASH_RULE_TEST"] = "2" s2 = subprocess.check_output([sys.executable, __file__], env=env).decode().strip() else: s1 = s2 = "" self.assertEqual(my_hash, other_hash, "%s\n%s\n%s\n%s" % ("=" * 20, s1, "=" * 20, s2))