ripple-down-rules 0.5.87__tar.gz → 0.5.88__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.
Files changed (151) hide show
  1. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/PKG-INFO +1 -1
  2. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/__init__.py +1 -1
  3. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/user_interface/prompt.py +25 -11
  4. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules.egg-info/PKG-INFO +1 -1
  5. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_rdr.py +1 -1
  6. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_rdr_helpers_rdrs.py +2 -5
  7. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/.github/workflows/build_and_deploy_doc.yml +0 -0
  8. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/.github/workflows/ci.yml +0 -0
  9. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/.github/workflows/publish-to-test-pypi.yml +0 -0
  10. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/.idea/shelf/Uncommitted_changes_before_Checkout_at_2_4_25,_6_32_PM_[Changes]/shelved.patch +0 -0
  11. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/.idea/shelf/Uncommitted_changes_before_Checkout_at_2_4_25,_6_32_PM_[Changes]1/shelved.patch +0 -0
  12. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/LICENSE +0 -0
  13. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/README.md +0 -0
  14. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/doc/_config.yml +0 -0
  15. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/doc/_toc.yml +0 -0
  16. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/doc/bibliography.md +0 -0
  17. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/doc/intro.md +0 -0
  18. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/doc/references.bib +0 -0
  19. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/doc/requirements.txt +0 -0
  20. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/__init__.py +0 -0
  21. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/animal_species.py +0 -0
  22. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/part_containment_rdr/__init__.py +0 -0
  23. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/part_containment_rdr/rdr_metadata/part_containment_rdr.json +0 -0
  24. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/part_containment_rdr/robot_contained_objects_mcrdr.py +0 -0
  25. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/part_containment_rdr/robot_contained_objects_mcrdr_defs.py +0 -0
  26. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/part_containment_rdr/robot_rdr.py +0 -0
  27. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/examples/relational_example.py +0 -0
  28. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/images/scrdr.dot +0 -0
  29. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/images/scrdr.png +0 -0
  30. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/images/thinking_pr2.jpg +0 -0
  31. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/pyproject.toml +0 -0
  32. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/pytest.ini +0 -0
  33. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/requirements-dev-ci.txt +0 -0
  34. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/requirements-dev.txt +0 -0
  35. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/requirements-gui.txt +0 -0
  36. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/requirements-viz.txt +0 -0
  37. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/requirements.txt +0 -0
  38. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_mcrdr_extra.dot +0 -0
  39. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_mcrdr_extra.png +0 -0
  40. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_mcrdr_stop_only.dot +0 -0
  41. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_mcrdr_stop_only.png +0 -0
  42. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_mcrdr_stop_plus_rule.dot +0 -0
  43. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_mcrdr_stop_plus_rule.png +0 -0
  44. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_scrdr.dot +0 -0
  45. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_scrdr.png +0 -0
  46. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_scrdr_2.dot +0 -0
  47. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_scrdr_2.png +0 -0
  48. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_scrdr_3.dot +0 -0
  49. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/complete_scrdr_3.png +0 -0
  50. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/grdr_Habitat.dot +0 -0
  51. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/grdr_Habitat.png +0 -0
  52. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/grdr_Species.dot +0 -0
  53. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/grdr_Species.png +0 -0
  54. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/mcrdr_extra.dot +0 -0
  55. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/mcrdr_extra.png +0 -0
  56. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/mcrdr_extra_classify.dot +0 -0
  57. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/mcrdr_extra_classify.png +0 -0
  58. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/mcrdr_stop_plus_rule_combined.dot +0 -0
  59. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/mcrdr_stop_plus_rule_combined.png +0 -0
  60. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/partial_mcrdr_extra.dot +0 -0
  61. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/partial_mcrdr_extra.png +0 -0
  62. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/relational_scrdr_classify.dot +0 -0
  63. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/results/relational_scrdr_classify.png +0 -0
  64. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/setup.cfg +0 -0
  65. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/datastructures/__init__.py +0 -0
  66. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/datastructures/callable_expression.py +0 -0
  67. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/datastructures/case.py +0 -0
  68. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/datastructures/dataclasses.py +0 -0
  69. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/datastructures/enums.py +0 -0
  70. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/experts.py +0 -0
  71. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/helpers.py +0 -0
  72. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/rdr.py +0 -0
  73. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/rdr_decorators.py +0 -0
  74. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/rules.py +0 -0
  75. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/start-code-server.sh +0 -0
  76. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/user_interface/__init__.py +0 -0
  77. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/user_interface/gui.py +0 -0
  78. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/user_interface/ipython_custom_shell.py +0 -0
  79. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/user_interface/object_diagram.py +0 -0
  80. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/user_interface/template_file_creator.py +0 -0
  81. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules/utils.py +0 -0
  82. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules.egg-info/SOURCES.txt +0 -0
  83. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules.egg-info/dependency_links.txt +0 -0
  84. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules.egg-info/requires.txt +0 -0
  85. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/src/ripple_down_rules.egg-info/top_level.txt +0 -0
  86. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/__init__.py +0 -0
  87. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/conf/__init__.py +0 -0
  88. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/conf/world/__init__.py +0 -0
  89. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/conf/world/base_config.py +0 -0
  90. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/conf/world/handles_and_containers.py +0 -0
  91. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/conftest.py +0 -0
  92. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/datasets.py +0 -0
  93. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/factories/__init__.py +0 -0
  94. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/factories/world/__init__.py +0 -0
  95. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/factories/world/handles_and_containers.py +0 -0
  96. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/correct_drawer_rdr_expert_answers_fit.json +0 -0
  97. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/drawer_cabinet_expert_answers_fit.json +0 -0
  98. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/grdr_expert_answers_classify.json +0 -0
  99. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/grdr_expert_answers_fit.json +0 -0
  100. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/grdr_expert_answers_fit_extra.json +0 -0
  101. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/grdr_expert_answers_fit_no_targets.json +0 -0
  102. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_expert_answers_classify.json +0 -0
  103. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_expert_answers_fit_no_targets.json +0 -0
  104. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_expert_answers_stop_only_fit.json +0 -0
  105. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_extra_expert_answers_classify.json +0 -0
  106. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_extra_expert_answers_fit.json +0 -0
  107. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_multi_line_expert_answers_fit.json +0 -0
  108. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_stop_only_answers_fit.json +0 -0
  109. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_stop_plus_rule_answers_fit.json +0 -0
  110. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_stop_plus_rule_combined_expert_answers_fit.json +0 -0
  111. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mcrdr_stop_plus_rule_expert_answers_fit.json +0 -0
  112. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/mutagenic_expert_answers.json +0 -0
  113. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/relational_scrdr_expert_answers_classify.json +0 -0
  114. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/scrdr_expert_answers_classify.json +0 -0
  115. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/scrdr_expert_answers_fit.json +0 -0
  116. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/scrdr_expert_answers_fit_no_targets.json +0 -0
  117. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/scrdr_multi_line_expert_answers_fit.json +0 -0
  118. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_expert_answers/scrdr_world_expert_answers_fit.json +0 -0
  119. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_generated_rdrs/__init__.py +0 -0
  120. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_helpers/__init__.py +0 -0
  121. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_helpers/helpers.py +0 -0
  122. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_helpers/object_diagram_case_query.png +0 -0
  123. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_helpers/object_diagram_person.png +0 -0
  124. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_json_serialization.py +0 -0
  125. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_object_diagram.py +0 -0
  126. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_on_mutagenic.py +0 -0
  127. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_rdr_alchemy.py +0 -0
  128. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_rdr_decorators.py +0 -0
  129. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_rdr_world/__init__.py +0 -0
  130. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_rdr_world/conftest.py +0 -0
  131. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_rdr_world/test_rdr_world.py +0 -0
  132. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_relational_rdr.py +0 -0
  133. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_relational_rdr_alchemy.py +0 -0
  134. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_results/datasets_physical_object_is_a_robot/__init__.py +0 -0
  135. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_results/datasets_physical_object_is_a_robot/physical_object_is_a_robot_output__scrdr.py +0 -0
  136. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_results/datasets_physical_object_is_a_robot/physical_object_is_a_robot_output__scrdr_defs.py +0 -0
  137. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_results/datasets_physical_object_is_a_robot/physical_object_is_a_robot_rdr.py +0 -0
  138. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_results/datasets_physical_object_is_a_robot/rdr_metadata/datasets_physical_object_is_a_robot.json +0 -0
  139. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_results/datasets_physical_object_select_objects_that_are_parts_of_robot/__init__.py +0 -0
  140. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/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
  141. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/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
  142. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/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
  143. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/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
  144. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_sql_model.py +0 -0
  145. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_template_file_creator.py +0 -0
  146. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_user_interface/__init__.py +0 -0
  147. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_user_interface/test_ipython.py +0 -0
  148. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_user_interface/test_ipython_copilot.py +0 -0
  149. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_user_interface/test_prompt.py +0 -0
  150. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/test/test_user_interface/test_qt_gui_inline.py +0 -0
  151. {ripple_down_rules-0.5.87 → ripple_down_rules-0.5.88}/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.87
3
+ Version: 0.5.88
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
@@ -1,4 +1,4 @@
1
- __version__ = "0.5.87"
1
+ __version__ = "0.5.88"
2
2
 
3
3
  import logging
4
4
  logger = logging.Logger("rdr")
@@ -20,12 +20,15 @@ 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 Lock
23
24
 
24
25
 
25
26
  class UserPrompt:
26
27
  """
27
28
  A class to handle user prompts for the RDR.
28
29
  """
30
+ shell_lock: Lock = Lock() # To ensure that only one thread can access the shell at a time
31
+
29
32
  def __init__(self, viewer: Optional[RDRCaseViewer] = None):
30
33
  """
31
34
  Initialize the UserPrompt class.
@@ -143,17 +146,7 @@ class UserPrompt:
143
146
  """
144
147
  while True:
145
148
  if user_input is None:
146
- if self.viewer is None:
147
- shell = IPythonShell() if shell is None else shell
148
- shell.run()
149
- user_input = shell.user_input
150
- else:
151
- app = QApplication.instance()
152
- if app is None:
153
- raise RuntimeError("QApplication instance is None. Please run the application first.")
154
- self.viewer.show()
155
- app.exec()
156
- user_input = self.viewer.user_input
149
+ user_input = self.start_shell_and_get_user_input(shell=shell)
157
150
  if user_input is None or user_input == 'exit':
158
151
  return user_input, None
159
152
  self.print_func(f"{Fore.GREEN}Captured User input: {Style.RESET_ALL}")
@@ -166,3 +159,24 @@ class UserPrompt:
166
159
  logging.error(msg)
167
160
  self.print_func(f"{Fore.RED}{msg}{Style.RESET_ALL}")
168
161
  user_input = None
162
+
163
+ def start_shell_and_get_user_input(self, shell: Optional[IPythonShell] = None) -> Optional[str]:
164
+ """
165
+ Start the shell and get user input.
166
+
167
+ :param shell: The Ipython shell to use for prompting the user.
168
+ :return: The user input.
169
+ """
170
+ with self.shell_lock:
171
+ if self.viewer is None:
172
+ shell = IPythonShell() if shell is None else shell
173
+ shell.run()
174
+ user_input = shell.user_input
175
+ else:
176
+ app = QApplication.instance()
177
+ if app is None:
178
+ raise RuntimeError("QApplication instance is None. Please run the application first.")
179
+ self.viewer.show()
180
+ app.exec()
181
+ user_input = self.viewer.user_input
182
+ return user_input
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ripple_down_rules
3
- Version: 0.5.87
3
+ Version: 0.5.88
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
@@ -69,7 +69,7 @@ class TestRDR(TestCase):
69
69
  scrdr, _ = get_fit_scrdr(self.all_cases, self.targets, draw_tree=False,
70
70
  expert_answers_dir=self.expert_answers_dir,
71
71
  expert_answers_file="scrdr_expert_answers_fit",
72
- load_answers=True,
72
+ load_answers=False,
73
73
  scenario=self.test_fit_scrdr)
74
74
  # render_tree(scrdr.start_rule, use_dot_exporter=True,
75
75
  # filename=self.test_results_dir + f"/scrdr")
@@ -10,7 +10,7 @@ from ripple_down_rules.utils import is_iterable, make_list
10
10
  save_dir = join(dirname(__file__), '..', 'src', 'ripple_down_rules')
11
11
  # viewer = RDRCaseViewer(save_dir=save_dir)
12
12
  viewer = None
13
- rdr_decorator: RDRDecorator = RDRDecorator(save_dir, (bool,), True, ask_always=True,
13
+ rdr_decorator: RDRDecorator = RDRDecorator(save_dir, (bool,), True,
14
14
  fit=False,
15
15
  viewer=viewer)
16
16
 
@@ -18,7 +18,6 @@ rdr_decorator: RDRDecorator = RDRDecorator(save_dir, (bool,), True, ask_always=T
18
18
  @rdr_decorator.decorator
19
19
  def should_i_ask_the_expert_for_a_target(conclusions: Union[Any, Dict[str, Any]],
20
20
  case_query: CaseQuery,
21
- ask_always: bool,
22
21
  update_existing: bool) -> bool:
23
22
  """
24
23
  Determine if the rdr should ask the expert for the target of a given case query.
@@ -29,9 +28,7 @@ def should_i_ask_the_expert_for_a_target(conclusions: Union[Any, Dict[str, Any]]
29
28
  :param update_existing: Whether to update rules that gave the required type of conclusions.
30
29
  :return: True if the rdr should ask the expert, False otherwise.
31
30
  """
32
- if ask_always:
33
- return True
34
- elif conclusions is None:
31
+ if conclusions is None:
35
32
  return True
36
33
  elif is_iterable(conclusions) and len(conclusions) == 0:
37
34
  return True