ripple-down-rules 0.5.88__tar.gz → 0.5.90__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.5.90/.gitignore +2 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/PKG-INFO +1 -1
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/__init__.py +1 -1
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/datastructures/case.py +7 -6
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/experts.py +8 -6
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/prompt.py +30 -27
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules.egg-info/PKG-INFO +1 -1
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules.egg-info/SOURCES.txt +1 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/.github/workflows/build_and_deploy_doc.yml +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/.github/workflows/ci.yml +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/.github/workflows/publish-to-test-pypi.yml +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/.idea/shelf/Uncommitted_changes_before_Checkout_at_2_4_25,_6_32_PM_[Changes]/shelved.patch +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/.idea/shelf/Uncommitted_changes_before_Checkout_at_2_4_25,_6_32_PM_[Changes]1/shelved.patch +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/LICENSE +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/README.md +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/doc/_config.yml +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/doc/_toc.yml +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/doc/bibliography.md +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/doc/intro.md +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/doc/references.bib +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/doc/requirements.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/animal_species.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/part_containment_rdr/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/part_containment_rdr/rdr_metadata/part_containment_rdr.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/part_containment_rdr/robot_contained_objects_mcrdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/part_containment_rdr/robot_contained_objects_mcrdr_defs.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/part_containment_rdr/robot_rdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/relational_example.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/images/scrdr.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/images/scrdr.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/images/thinking_pr2.jpg +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/pyproject.toml +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/pytest.ini +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/requirements-dev-ci.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/requirements-dev.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/requirements-gui.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/requirements-viz.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/requirements.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_extra.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_extra.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_stop_only.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_stop_only.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_stop_plus_rule.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_stop_plus_rule.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_scrdr.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_scrdr.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_scrdr_2.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_scrdr_2.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_scrdr_3.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_scrdr_3.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/grdr_Habitat.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/grdr_Habitat.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/grdr_Species.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/grdr_Species.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_extra.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_extra.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_extra_classify.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_extra_classify.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_stop_plus_rule_combined.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_stop_plus_rule_combined.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/partial_mcrdr_extra.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/partial_mcrdr_extra.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/relational_scrdr_classify.dot +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/relational_scrdr_classify.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/setup.cfg +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/datastructures/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/datastructures/callable_expression.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/datastructures/dataclasses.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/datastructures/enums.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/helpers.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/rdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/rdr_decorators.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/rules.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/start-code-server.sh +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/gui.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/ipython_custom_shell.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/object_diagram.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/template_file_creator.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/utils.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules.egg-info/dependency_links.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules.egg-info/requires.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules.egg-info/top_level.txt +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/conf/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/conf/world/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/conf/world/base_config.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/conf/world/handles_and_containers.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/conftest.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/datasets.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/factories/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/factories/world/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/factories/world/handles_and_containers.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/correct_drawer_rdr_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/drawer_cabinet_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/grdr_expert_answers_classify.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/grdr_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/grdr_expert_answers_fit_extra.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/grdr_expert_answers_fit_no_targets.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_expert_answers_classify.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_expert_answers_fit_no_targets.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_expert_answers_stop_only_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_extra_expert_answers_classify.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_extra_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_multi_line_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_stop_only_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_stop_plus_rule_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_stop_plus_rule_combined_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mcrdr_stop_plus_rule_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/mutagenic_expert_answers.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/relational_scrdr_expert_answers_classify.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/scrdr_expert_answers_classify.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/scrdr_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/scrdr_expert_answers_fit_no_targets.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/scrdr_multi_line_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_expert_answers/scrdr_world_expert_answers_fit.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_generated_rdrs/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_helpers/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_helpers/helpers.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_helpers/object_diagram_case_query.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_helpers/object_diagram_person.png +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_json_serialization.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_object_diagram.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_on_mutagenic.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_rdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_rdr_alchemy.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_rdr_decorators.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_rdr_helpers_rdrs.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_rdr_world/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_rdr_world/conftest.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_rdr_world/test_rdr_world.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_relational_rdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_relational_rdr_alchemy.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_is_a_robot/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_is_a_robot/physical_object_is_a_robot_output__scrdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_is_a_robot/physical_object_is_a_robot_output__scrdr_defs.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_is_a_robot/physical_object_is_a_robot_rdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_is_a_robot/rdr_metadata/datasets_physical_object_is_a_robot.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_select_objects_that_are_parts_of_robot/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_select_objects_that_are_parts_of_robot/physical_object_select_objects_that_are_parts_of_robot_output__mcrdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_select_objects_that_are_parts_of_robot/physical_object_select_objects_that_are_parts_of_robot_output__mcrdr_defs.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_select_objects_that_are_parts_of_robot/physical_object_select_objects_that_are_parts_of_robot_rdr.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_results/datasets_physical_object_select_objects_that_are_parts_of_robot/rdr_metadata/datasets_physical_object_select_objects_that_are_parts_of_robot.json +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_sql_model.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_template_file_creator.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/__init__.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/test_ipython.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/test_ipython_copilot.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/test_prompt.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/test_qt_gui_inline.py +0 -0
- {ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_utils.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ripple_down_rules
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.90
|
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
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/datastructures/case.py
RENAMED
@@ -329,9 +329,9 @@ def create_case_attribute_from_iterable_attribute(attr_value: Any, name: str, ob
|
|
329
329
|
|
330
330
|
def show_current_and_corner_cases(case: Any, targets: Optional[Dict[str, Any]] = None,
|
331
331
|
current_conclusions: Optional[Dict[str, Any]] = None,
|
332
|
-
last_evaluated_rule: Optional[Rule] = None) ->
|
332
|
+
last_evaluated_rule: Optional[Rule] = None) -> str:
|
333
333
|
"""
|
334
|
-
|
334
|
+
Get the the data to show of the new case and if last evaluated rule exists also show that of the corner case.
|
335
335
|
|
336
336
|
:param case: The new case.
|
337
337
|
:param targets: The target attribute of the case.
|
@@ -341,9 +341,10 @@ def show_current_and_corner_cases(case: Any, targets: Optional[Dict[str, Any]] =
|
|
341
341
|
corner_case = None
|
342
342
|
targets = {f"target_{name}": value for name, value in targets.items()} if targets else {}
|
343
343
|
current_conclusions = {name: value for name, value in current_conclusions.items()} if current_conclusions else {}
|
344
|
+
information = ""
|
344
345
|
if last_evaluated_rule:
|
345
346
|
action = "Refinement" if last_evaluated_rule.fired else "Alternative"
|
346
|
-
|
347
|
+
information += f"{action} needed for rule: {last_evaluated_rule}\n"
|
347
348
|
corner_case = last_evaluated_rule.corner_case
|
348
349
|
|
349
350
|
corner_row_dict = None
|
@@ -367,6 +368,6 @@ def show_current_and_corner_cases(case: Any, targets: Optional[Dict[str, Any]] =
|
|
367
368
|
corner_conclusion = last_evaluated_rule.conclusion(case)
|
368
369
|
corner_row_dict.update({corner_conclusion.__class__.__name__: corner_conclusion})
|
369
370
|
all_table_rows.append(corner_row_dict)
|
370
|
-
|
371
|
-
|
372
|
-
|
371
|
+
information += "\n" + "=" * 50 + "\n"
|
372
|
+
information += "\n" + table_rows_as_str(all_table_rows) + "\n"
|
373
|
+
return information
|
@@ -225,12 +225,13 @@ class Human(Expert):
|
|
225
225
|
def ask_for_conditions(self, case_query: CaseQuery,
|
226
226
|
last_evaluated_rule: Optional[Rule] = None) \
|
227
227
|
-> CallableExpression:
|
228
|
+
data_to_show = None
|
228
229
|
if (not self.use_loaded_answers or len(self.all_expert_answers) == 0) and self.user_prompt.viewer is None:
|
229
|
-
show_current_and_corner_cases(case_query.case, {case_query.attribute_name: case_query.target_value},
|
230
|
+
data_to_show = show_current_and_corner_cases(case_query.case, {case_query.attribute_name: case_query.target_value},
|
230
231
|
last_evaluated_rule=last_evaluated_rule)
|
231
|
-
return self._get_conditions(case_query)
|
232
|
+
return self._get_conditions(case_query, data_to_show)
|
232
233
|
|
233
|
-
def _get_conditions(self, case_query: CaseQuery) \
|
234
|
+
def _get_conditions(self, case_query: CaseQuery, data_to_show: Optional[str] = None) \
|
234
235
|
-> CallableExpression:
|
235
236
|
"""
|
236
237
|
Ask the expert to provide the differentiating features between two cases or unique features for a case
|
@@ -251,7 +252,7 @@ class Human(Expert):
|
|
251
252
|
case_query.scope.update(loaded_scope)
|
252
253
|
condition = CallableExpression(user_input, bool, scope=case_query.scope)
|
253
254
|
else:
|
254
|
-
user_input, condition = self.user_prompt.prompt_user_for_expression(case_query, PromptFor.Conditions)
|
255
|
+
user_input, condition = self.user_prompt.prompt_user_for_expression(case_query, PromptFor.Conditions, prompt_str=data_to_show)
|
255
256
|
if user_input == 'exit':
|
256
257
|
exit()
|
257
258
|
if not self.use_loaded_answers:
|
@@ -283,9 +284,10 @@ class Human(Expert):
|
|
283
284
|
except IndexError:
|
284
285
|
self.use_loaded_answers = False
|
285
286
|
if not self.use_loaded_answers:
|
287
|
+
data_to_show = None
|
286
288
|
if self.user_prompt.viewer is None:
|
287
|
-
show_current_and_corner_cases(case_query.case)
|
288
|
-
expert_input, expression = self.user_prompt.prompt_user_for_expression(case_query, PromptFor.Conclusion)
|
289
|
+
data_to_show = show_current_and_corner_cases(case_query.case)
|
290
|
+
expert_input, expression = self.user_prompt.prompt_user_for_expression(case_query, PromptFor.Conclusion, prompt_str=data_to_show)
|
289
291
|
if expert_input is None:
|
290
292
|
self.all_expert_answers.append(({}, None))
|
291
293
|
elif expert_input != 'exit':
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/prompt.py
RENAMED
@@ -20,14 +20,14 @@ from ..datastructures.dataclasses import CaseQuery
|
|
20
20
|
from ..datastructures.enums import PromptFor
|
21
21
|
from .ipython_custom_shell import IPythonShell
|
22
22
|
from ..utils import make_list
|
23
|
-
from threading import
|
23
|
+
from threading import RLock
|
24
24
|
|
25
25
|
|
26
26
|
class UserPrompt:
|
27
27
|
"""
|
28
28
|
A class to handle user prompts for the RDR.
|
29
29
|
"""
|
30
|
-
shell_lock:
|
30
|
+
shell_lock: RLock = RLock() # To ensure that only one thread can access the shell at a time
|
31
31
|
|
32
32
|
def __init__(self, viewer: Optional[RDRCaseViewer] = None):
|
33
33
|
"""
|
@@ -52,8 +52,8 @@ class UserPrompt:
|
|
52
52
|
prev_user_input: Optional[str] = None
|
53
53
|
callable_expression: Optional[CallableExpression] = None
|
54
54
|
while True:
|
55
|
-
|
56
|
-
|
55
|
+
with self.shell_lock:
|
56
|
+
user_input, expression_tree = self.prompt_user_about_case(case_query, prompt_for, prompt_str, code_to_modify=prev_user_input)
|
57
57
|
if user_input is None:
|
58
58
|
if prompt_for == PromptFor.Conclusion:
|
59
59
|
self.print_func(f"{Fore.YELLOW}No conclusion provided. Exiting.{Style.RESET_ALL}")
|
@@ -95,22 +95,26 @@ class UserPrompt:
|
|
95
95
|
:param code_to_modify: The code to modify. If given will be used as a start for user to modify.
|
96
96
|
:return: The user input, and the executable expression that was parsed from the user input.
|
97
97
|
"""
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
98
|
+
self.print_func("Entered shell")
|
99
|
+
prompt_str = f"{Fore.WHITE}{prompt_str}" if prompt_str is not None else ''
|
100
|
+
if prompt_for == PromptFor.Conclusion:
|
101
|
+
prompt_str += f"\n{Fore.MAGENTA}Give possible value(s) for:"
|
102
|
+
else:
|
103
|
+
prompt_str += f"\n{Fore.MAGENTA}Give conditions on when can the rule be evaluated for:"
|
103
104
|
case_query.scope.update({'case': case_query.case})
|
104
105
|
shell = None
|
105
106
|
if self.viewer is None:
|
106
107
|
prompt_str = self.construct_prompt_str_for_shell(case_query, prompt_for, prompt_str)
|
107
108
|
shell = IPythonShell(header=prompt_str, prompt_for=prompt_for, case_query=case_query,
|
108
|
-
|
109
|
+
code_to_modify=code_to_modify)
|
109
110
|
else:
|
110
111
|
|
111
112
|
self.viewer.update_for_case_query(case_query, prompt_str,
|
112
|
-
|
113
|
-
|
113
|
+
prompt_for=prompt_for, code_to_modify=code_to_modify)
|
114
|
+
user_input, expression_tree = self.prompt_user_input_and_parse_to_expression(shell=shell)
|
115
|
+
self.print_func("Exited shell")
|
116
|
+
return user_input, expression_tree
|
117
|
+
|
114
118
|
|
115
119
|
|
116
120
|
def construct_prompt_str_for_shell(self, case_query: CaseQuery, prompt_for: PromptFor,
|
@@ -128,9 +132,9 @@ class UserPrompt:
|
|
128
132
|
prompt_str += (f"\ne.g. `{Fore.GREEN}return {Fore.BLUE}len{Fore.RESET}(case.attribute) > {Fore.BLUE}0` "
|
129
133
|
f"{Fore.MAGENTA}\nOR `{Fore.GREEN}return {Fore.YELLOW}True`{Fore.MAGENTA} (If you want the"
|
130
134
|
f" rule to be always evaluated) \n"
|
131
|
-
f"You can also do {Fore.YELLOW}%edit{Fore.MAGENTA} for more complex conditions
|
135
|
+
f"You can also do {Fore.YELLOW}%edit{Fore.MAGENTA} for more complex conditions.\n")
|
132
136
|
|
133
|
-
prompt_str = f"{Fore.MAGENTA}{prompt_str}{Fore.YELLOW}\n(Write %help for guide){Fore.RESET}"
|
137
|
+
prompt_str = f"{Fore.MAGENTA}{prompt_str}{Fore.YELLOW}\n(Write %help for guide){Fore.RESET}\n"
|
134
138
|
return prompt_str
|
135
139
|
|
136
140
|
|
@@ -167,16 +171,15 @@ class UserPrompt:
|
|
167
171
|
:param shell: The Ipython shell to use for prompting the user.
|
168
172
|
:return: The user input.
|
169
173
|
"""
|
170
|
-
|
171
|
-
if
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
return user_input
|
174
|
+
if self.viewer is None:
|
175
|
+
shell = IPythonShell() if shell is None else shell
|
176
|
+
shell.run()
|
177
|
+
user_input = shell.user_input
|
178
|
+
else:
|
179
|
+
app = QApplication.instance()
|
180
|
+
if app is None:
|
181
|
+
raise RuntimeError("QApplication instance is None. Please run the application first.")
|
182
|
+
self.viewer.show()
|
183
|
+
app.exec()
|
184
|
+
user_input = self.viewer.user_input
|
185
|
+
return user_input
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/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.5.
|
3
|
+
Version: 0.5.90
|
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
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/.github/workflows/build_and_deploy_doc.yml
RENAMED
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/.github/workflows/publish-to-test-pypi.yml
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/part_containment_rdr/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/examples/part_containment_rdr/robot_rdr.py
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
|
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.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_stop_plus_rule.dot
RENAMED
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/complete_mcrdr_stop_plus_rule.png
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
|
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.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_stop_plus_rule_combined.dot
RENAMED
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/results/mcrdr_stop_plus_rule_combined.png
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
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/datastructures/enums.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/rdr_decorators.py
RENAMED
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/start-code-server.sh
RENAMED
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules/user_interface/gui.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/src/ripple_down_rules.egg-info/requires.txt
RENAMED
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/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
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/conf/world/handles_and_containers.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/factories/world/handles_and_containers.py
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.5.88 → ripple_down_rules-0.5.90}/test/test_helpers/object_diagram_person.png
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
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.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/test_ipython.py
RENAMED
File without changes
|
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/test_prompt.py
RENAMED
File without changes
|
{ripple_down_rules-0.5.88 → ripple_down_rules-0.5.90}/test/test_user_interface/test_qt_gui_inline.py
RENAMED
File without changes
|
File without changes
|