ripple-down-rules 0.1.62__tar.gz → 0.1.63__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/PKG-INFO +1 -1
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/pyproject.toml +1 -1
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datastructures/case.py +2 -2
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/experts.py +1 -1
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/rdr.py +9 -8
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules.egg-info/PKG-INFO +1 -1
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_rdr_world.py +6 -6
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/LICENSE +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/README.md +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/setup.cfg +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/__init__.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datasets.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datastructures/__init__.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datastructures/callable_expression.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datastructures/dataclasses.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datastructures/enums.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/failures.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/helpers.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/prompt.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/rdr_decorators.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/rules.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/utils.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules.egg-info/SOURCES.txt +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules.egg-info/dependency_links.txt +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules.egg-info/top_level.txt +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_json_serialization.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_on_mutagenic.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_rdr.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_rdr_alchemy.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_relational_rdr.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_relational_rdr_alchemy.py +0 -0
- {ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/test/test_sql_model.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ripple_down_rules
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.63
|
4
4
|
Summary: Implements the various versions of Ripple Down Rules (RDR) for knowledge representation and reasoning.
|
5
5
|
Author-email: Abdelrhman Bassiouny <abassiou@uni-bremen.de>
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
|
|
6
6
|
|
7
7
|
[project]
|
8
8
|
name = "ripple_down_rules"
|
9
|
-
version = "0.1.
|
9
|
+
version = "0.1.63"
|
10
10
|
description = "Implements the various versions of Ripple Down Rules (RDR) for knowledge representation and reasoning."
|
11
11
|
readme = "README.md"
|
12
12
|
authors = [{ name = "Abdelrhman Bassiouny", email = "abassiou@uni-bremen.de" }]
|
{ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datastructures/case.py
RENAMED
@@ -307,7 +307,7 @@ def show_current_and_corner_cases(case: Any, targets: Optional[Dict[str, Any]] =
|
|
307
307
|
"""
|
308
308
|
corner_case = None
|
309
309
|
targets = {f"target_{name}": value for name, value in targets.items()} if targets else {}
|
310
|
-
current_conclusions = {name: value for name, value in current_conclusions.items} if current_conclusions else {}
|
310
|
+
current_conclusions = {name: value for name, value in current_conclusions.items()} if current_conclusions else {}
|
311
311
|
if last_evaluated_rule:
|
312
312
|
action = "Refinement" if last_evaluated_rule.fired else "Alternative"
|
313
313
|
print(f"{action} needed for rule: {last_evaluated_rule}\n")
|
@@ -324,7 +324,7 @@ def show_current_and_corner_cases(case: Any, targets: Optional[Dict[str, Any]] =
|
|
324
324
|
corner_row_dict = corner_case
|
325
325
|
|
326
326
|
if corner_row_dict:
|
327
|
-
corner_conclusion = last_evaluated_rule.conclusion
|
327
|
+
corner_conclusion = last_evaluated_rule.conclusion(case)
|
328
328
|
corner_row_dict.update({corner_conclusion.__class__.__name__: corner_conclusion})
|
329
329
|
print(table_rows_as_str(corner_row_dict))
|
330
330
|
print("=" * 50)
|
@@ -122,7 +122,7 @@ class Human(Expert):
|
|
122
122
|
last_evaluated_rule: Optional[Rule] = None) \
|
123
123
|
-> CallableExpression:
|
124
124
|
if not self.use_loaded_answers:
|
125
|
-
show_current_and_corner_cases(case_query.case, {case_query.attribute_name: case_query.
|
125
|
+
show_current_and_corner_cases(case_query.case, {case_query.attribute_name: case_query.target_value},
|
126
126
|
last_evaluated_rule=last_evaluated_rule)
|
127
127
|
return self._get_conditions(case_query)
|
128
128
|
|
@@ -722,7 +722,7 @@ class GeneralRDR(RippleDownRules):
|
|
722
722
|
def start_rules(self) -> List[Union[SingleClassRule, MultiClassTopRule]]:
|
723
723
|
return [rdr.start_rule for rdr in self.start_rules_dict.values()]
|
724
724
|
|
725
|
-
def classify(self, case:
|
725
|
+
def classify(self, case: Any) -> Optional[Dict[str, Any]]:
|
726
726
|
"""
|
727
727
|
Classify a case by going through all RDRs and adding the categories that are classified, and then restarting
|
728
728
|
the classification until no more categories can be added.
|
@@ -734,7 +734,7 @@ class GeneralRDR(RippleDownRules):
|
|
734
734
|
|
735
735
|
@staticmethod
|
736
736
|
def _classify(classifiers_dict: Dict[str, Union[ModuleType, RippleDownRules]],
|
737
|
-
case:
|
737
|
+
case: Any) -> Dict[str, Any]:
|
738
738
|
"""
|
739
739
|
Classify a case by going through all classifiers and adding the categories that are classified,
|
740
740
|
and then restarting the classification until no more categories can be added.
|
@@ -775,7 +775,7 @@ class GeneralRDR(RippleDownRules):
|
|
775
775
|
return conclusions
|
776
776
|
|
777
777
|
def fit_case(self, case_queries: List[CaseQuery], expert: Optional[Expert] = None, **kwargs) \
|
778
|
-
->
|
778
|
+
-> Dict[str, Any]:
|
779
779
|
"""
|
780
780
|
Fit the GRDR on a case, if the target is a new type of category, a new RDR is created for it,
|
781
781
|
else the existing RDR of that type will be fitted on the case, and then classification is done and all
|
@@ -790,7 +790,7 @@ class GeneralRDR(RippleDownRules):
|
|
790
790
|
:return: The categories that the case belongs to.
|
791
791
|
"""
|
792
792
|
expert = expert if expert else Human()
|
793
|
-
case_queries =
|
793
|
+
case_queries = make_list(case_queries)
|
794
794
|
assert len(case_queries) > 0, "No case queries provided"
|
795
795
|
case = case_queries[0].case
|
796
796
|
assert all([case is case_query.case for case_query in case_queries]), ("fit_case requires only one case,"
|
@@ -823,10 +823,11 @@ class GeneralRDR(RippleDownRules):
|
|
823
823
|
else:
|
824
824
|
conclusions = self.start_rules_dict[rdr_attribute_name].fit_case(case_query_cp, expert,
|
825
825
|
**kwargs)
|
826
|
-
if conclusions is not None
|
827
|
-
conclusions
|
828
|
-
|
829
|
-
|
826
|
+
if conclusions is not None:
|
827
|
+
if (not is_iterable(conclusions)) or len(conclusions) > 0:
|
828
|
+
conclusions = {rdr_attribute_name: conclusions}
|
829
|
+
case_query_cp.mutually_exclusive = True if isinstance(rdr, SingleClassRDR) else False
|
830
|
+
self.update_case(case_query_cp, conclusions)
|
830
831
|
case_query.conditions = case_query_cp.conditions
|
831
832
|
|
832
833
|
return self.classify(case)
|
{ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules.egg-info/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ripple_down_rules
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.63
|
4
4
|
Summary: Implements the various versions of Ripple Down Rules (RDR) for knowledge representation and reasoning.
|
5
5
|
Author-email: Abdelrhman Bassiouny <abassiou@uni-bremen.de>
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
@@ -7,8 +7,8 @@ from unittest import TestCase
|
|
7
7
|
|
8
8
|
from ripple_down_rules.datastructures.dataclasses import CaseQuery
|
9
9
|
from ripple_down_rules.experts import Human
|
10
|
-
from ripple_down_rules.rdr import SingleClassRDR, GeneralRDR
|
11
10
|
from ripple_down_rules.helpers import is_matching
|
11
|
+
from ripple_down_rules.rdr import GeneralRDR
|
12
12
|
|
13
13
|
|
14
14
|
@dataclass
|
@@ -94,7 +94,7 @@ class TestRDRWorld(TestCase):
|
|
94
94
|
|
95
95
|
handle = Handle('h1', world=world)
|
96
96
|
handle_2 = Handle('h2', world=world)
|
97
|
-
container_1 = Container('c1',world=world)
|
97
|
+
container_1 = Container('c1', world=world)
|
98
98
|
container_2 = Container('c2', world=world)
|
99
99
|
connection_1 = FixedConnection(container_1, handle, world=world)
|
100
100
|
connection_2 = PrismaticConnection(container_2, container_1, world=world)
|
@@ -109,7 +109,7 @@ class TestRDRWorld(TestCase):
|
|
109
109
|
all_possible_drawers.append(view)
|
110
110
|
|
111
111
|
print(all_possible_drawers)
|
112
|
-
cls.drawer_case_queries = [CaseQuery(possible_drawer, "correct", bool, True, default_value=False)
|
112
|
+
cls.drawer_case_queries = [CaseQuery(possible_drawer, "correct", (bool,), True, default_value=False)
|
113
113
|
for possible_drawer in all_possible_drawers]
|
114
114
|
|
115
115
|
def test_view_rdr(self):
|
@@ -123,12 +123,12 @@ class TestRDRWorld(TestCase):
|
|
123
123
|
expert.load_answers(filename)
|
124
124
|
rdr = GeneralRDR()
|
125
125
|
try:
|
126
|
-
rdr.fit_case(CaseQuery(self.world, "views", View, False), expert=expert,
|
127
|
-
|
126
|
+
rdr.fit_case([CaseQuery(self.world, "views", (View,), False)], expert=expert,
|
127
|
+
add_extra_conclusions=True)
|
128
128
|
except Exception as e:
|
129
129
|
if append:
|
130
130
|
expert.use_loaded_answers = False
|
131
|
-
rdr.fit_case(CaseQuery(self.world, "views", View, False), expert=expert,
|
131
|
+
rdr.fit_case([CaseQuery(self.world, "views", (View,), False)], expert=expert,
|
132
132
|
add_extra_conclusions=True)
|
133
133
|
else:
|
134
134
|
raise e
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/datastructures/enums.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules/rdr_decorators.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules.egg-info/SOURCES.txt
RENAMED
File without changes
|
File without changes
|
{ripple_down_rules-0.1.62 → ripple_down_rules-0.1.63}/src/ripple_down_rules.egg-info/top_level.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|