ripple-down-rules 0.4.83__tar.gz → 0.4.85__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 (115) hide show
  1. ripple_down_rules-0.4.85/.github/workflows/publish-to-test-pypi.yml +121 -0
  2. ripple_down_rules-0.4.85/.idea/shelf/Uncommitted_changes_before_Checkout_at_2_4_25,_6_32_PM_[Changes]/shelved.patch +203 -0
  3. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/PKG-INFO +18 -8
  4. ripple_down_rules-0.4.85/examples/readme_example.py +19 -0
  5. ripple_down_rules-0.4.85/images/thinking_pr2.jpg +0 -0
  6. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/pyproject.toml +25 -17
  7. ripple_down_rules-0.4.85/requirements-dev.txt +6 -0
  8. ripple_down_rules-0.4.85/requirements-gui.txt +2 -0
  9. ripple_down_rules-0.4.85/requirements-viz.txt +2 -0
  10. ripple_down_rules-0.4.83/src/ripple_down_rules.egg-info/requires.txt → ripple_down_rules-0.4.85/requirements.txt +3 -7
  11. ripple_down_rules-0.4.85/results/complete_mcrdr_extra.dot +487 -0
  12. ripple_down_rules-0.4.85/results/complete_mcrdr_extra.png +0 -0
  13. ripple_down_rules-0.4.85/results/complete_mcrdr_stop_only.dot +194 -0
  14. ripple_down_rules-0.4.85/results/complete_mcrdr_stop_only.png +0 -0
  15. ripple_down_rules-0.4.85/results/complete_mcrdr_stop_plus_rule.dot +167 -0
  16. ripple_down_rules-0.4.85/results/complete_mcrdr_stop_plus_rule.png +0 -0
  17. ripple_down_rules-0.4.85/results/complete_scrdr.dot +105 -0
  18. ripple_down_rules-0.4.85/results/complete_scrdr.png +0 -0
  19. ripple_down_rules-0.4.85/results/complete_scrdr_2.dot +91 -0
  20. ripple_down_rules-0.4.85/results/complete_scrdr_2.png +0 -0
  21. ripple_down_rules-0.4.85/results/complete_scrdr_3.dot +90 -0
  22. ripple_down_rules-0.4.85/results/complete_scrdr_3.png +0 -0
  23. ripple_down_rules-0.4.85/results/grdr_Habitat.dot +83 -0
  24. ripple_down_rules-0.4.85/results/grdr_Habitat.png +0 -0
  25. ripple_down_rules-0.4.85/results/grdr_Species.dot +96 -0
  26. ripple_down_rules-0.4.85/results/grdr_Species.png +0 -0
  27. ripple_down_rules-0.4.85/results/mcrdr_extra.dot +216 -0
  28. ripple_down_rules-0.4.85/results/mcrdr_extra.png +0 -0
  29. ripple_down_rules-0.4.85/results/mcrdr_extra_classify.dot +11 -0
  30. ripple_down_rules-0.4.85/results/mcrdr_extra_classify.png +0 -0
  31. ripple_down_rules-0.4.85/results/mcrdr_stop_plus_rule_combined.dot +345 -0
  32. ripple_down_rules-0.4.85/results/mcrdr_stop_plus_rule_combined.png +0 -0
  33. ripple_down_rules-0.4.85/results/partial_mcrdr_extra.dot +218 -0
  34. ripple_down_rules-0.4.85/results/partial_mcrdr_extra.png +0 -0
  35. ripple_down_rules-0.4.85/results/relational_scrdr_classify.dot +4 -0
  36. ripple_down_rules-0.4.85/results/relational_scrdr_classify.png +0 -0
  37. ripple_down_rules-0.4.85/src/ripple_down_rules/__init__.py +1 -0
  38. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/datastructures/case.py +1 -1
  39. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/experts.py +5 -1
  40. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/rdr.py +19 -5
  41. ripple_down_rules-0.4.85/src/ripple_down_rules/start-code-server.sh +27 -0
  42. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/user_interface/gui.py +17 -34
  43. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/user_interface/ipython_custom_shell.py +2 -3
  44. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/user_interface/object_diagram.py +7 -1
  45. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/user_interface/prompt.py +2 -1
  46. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/user_interface/template_file_creator.py +1 -3
  47. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/utils.py +40 -4
  48. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules.egg-info/PKG-INFO +18 -8
  49. ripple_down_rules-0.4.85/src/ripple_down_rules.egg-info/SOURCES.txt +112 -0
  50. ripple_down_rules-0.4.85/src/ripple_down_rules.egg-info/requires.txt +29 -0
  51. ripple_down_rules-0.4.85/test/test_expert_answers/correct_drawer_rdr_expert_answers_fit.json +1 -0
  52. ripple_down_rules-0.4.85/test/test_expert_answers/grdr_expert_answers_classify.json +1 -0
  53. ripple_down_rules-0.4.85/test/test_expert_answers/grdr_expert_answers_fit.json +7 -0
  54. ripple_down_rules-0.4.85/test/test_expert_answers/grdr_expert_answers_fit_extra.json +42 -0
  55. ripple_down_rules-0.4.85/test/test_expert_answers/grdr_expert_answers_fit_no_targets.json +1 -0
  56. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_expert_answers_classify.json +1 -0
  57. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_expert_answers_fit_no_targets.json +1 -0
  58. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_expert_answers_stop_only_fit.json +20 -0
  59. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_extra_expert_answers_classify.json +7 -0
  60. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_extra_expert_answers_fit.json +26 -0
  61. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_multi_line_expert_answers_fit.json +8 -0
  62. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_stop_only_answers_fit.json +89 -0
  63. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_stop_plus_rule_answers_fit.json +80 -0
  64. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_stop_plus_rule_combined_expert_answers_fit.json +28 -0
  65. ripple_down_rules-0.4.85/test/test_expert_answers/mcrdr_stop_plus_rule_expert_answers_fit.json +24 -0
  66. ripple_down_rules-0.4.85/test/test_expert_answers/mutagenic_expert_answers.json +1 -0
  67. ripple_down_rules-0.4.85/test/test_expert_answers/relational_scrdr_expert_answers_classify.json +4 -0
  68. ripple_down_rules-0.4.85/test/test_expert_answers/scrdr_expert_answers_classify.json +1 -0
  69. ripple_down_rules-0.4.85/test/test_expert_answers/scrdr_expert_answers_fit.json +14 -0
  70. ripple_down_rules-0.4.85/test/test_expert_answers/scrdr_expert_answers_fit_no_targets.json +27 -0
  71. ripple_down_rules-0.4.85/test/test_expert_answers/scrdr_multi_line_expert_answers_fit.json +7 -0
  72. ripple_down_rules-0.4.85/test/test_expert_answers/scrdr_world_expert_answers_fit.json +1 -0
  73. ripple_down_rules-0.4.85/test/test_expert_answers/view_rdr_expert_answers_fit.json +6 -0
  74. ripple_down_rules-0.4.85/test/test_generated_rdrs/__init__.py +0 -0
  75. ripple_down_rules-0.4.85/test/test_helpers/__init__.py +0 -0
  76. ripple_down_rules-0.4.85/test/test_helpers/helpers.py +121 -0
  77. ripple_down_rules-0.4.85/test/test_helpers/object_diagram_case_query.png +0 -0
  78. ripple_down_rules-0.4.85/test/test_helpers/object_diagram_person.png +0 -0
  79. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_rdr.py +12 -7
  80. ripple_down_rules-0.4.85/test/test_results/datasets_physical_object_is_a_robot.json +62 -0
  81. ripple_down_rules-0.4.85/test/test_results/datasets_physical_object_select_objects_that_are_parts_of_robot.json +74 -0
  82. ripple_down_rules-0.4.85/test/test_user_interface/__init__.py +0 -0
  83. ripple_down_rules-0.4.85/test/test_user_interface/test_ipython.py +69 -0
  84. ripple_down_rules-0.4.85/test/test_user_interface/test_ipython_copilot.py +118 -0
  85. ripple_down_rules-0.4.85/test/test_user_interface/test_pdb.py +37 -0
  86. ripple_down_rules-0.4.85/test/test_user_interface/test_qt_gui.py +333 -0
  87. ripple_down_rules-0.4.85/test/test_user_interface/test_qt_gui_inline.py +65 -0
  88. ripple_down_rules-0.4.83/src/ripple_down_rules.egg-info/SOURCES.txt +0 -40
  89. /ripple_down_rules-0.4.83/src/ripple_down_rules/__init__.py → /ripple_down_rules-0.4.85/.idea/shelf/Uncommitted_changes_before_Checkout_at_2_4_25,_6_32_PM_[Changes]1/shelved.patch +0 -0
  90. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/LICENSE +0 -0
  91. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/README.md +0 -0
  92. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/setup.cfg +0 -0
  93. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/datasets.py +0 -0
  94. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/datastructures/__init__.py +0 -0
  95. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/datastructures/callable_expression.py +0 -0
  96. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/datastructures/dataclasses.py +0 -0
  97. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/datastructures/enums.py +0 -0
  98. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/failures.py +0 -0
  99. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/helpers.py +0 -0
  100. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/rdr_decorators.py +0 -0
  101. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/rules.py +0 -0
  102. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules/user_interface/__init__.py +0 -0
  103. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules.egg-info/dependency_links.txt +0 -0
  104. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/src/ripple_down_rules.egg-info/top_level.txt +0 -0
  105. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_json_serialization.py +0 -0
  106. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_object_diagram.py +0 -0
  107. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_on_mutagenic.py +0 -0
  108. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_rdr_alchemy.py +0 -0
  109. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_rdr_decorators.py +0 -0
  110. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_rdr_world.py +0 -0
  111. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_relational_rdr.py +0 -0
  112. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_relational_rdr_alchemy.py +0 -0
  113. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_sql_model.py +0 -0
  114. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_template_file_creator.py +0 -0
  115. {ripple_down_rules-0.4.83 → ripple_down_rules-0.4.85}/test/test_utils.py +0 -0
@@ -0,0 +1,121 @@
1
+ name: Publish Python distribution to PyPI and TestPyPI
2
+ on:
3
+ push:
4
+ branches:
5
+ - main # Only run on pushes to the main branch
6
+ jobs:
7
+ build:
8
+ name: Build distribution
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ - name: Set up Python
14
+ uses: actions/setup-python@v5
15
+ with:
16
+ python-version: "3.x"
17
+
18
+ - name: Install pypa/build
19
+ run: >-
20
+ python3 -m
21
+ pip install
22
+ build
23
+ --user
24
+
25
+ - name: Build a binary wheel and a source tarball
26
+ run: python3 -m build
27
+
28
+ - name: Store the distribution packages
29
+ uses: actions/upload-artifact@v4
30
+ with:
31
+ name: python-package-distributions
32
+ path: dist/
33
+
34
+ publish-to-pypi:
35
+ name: >-
36
+ Publish Python distribution to PyPI
37
+ # if: startsWith(github.ref, 'refs/tags/') # only publish to PyPI on tag pushes
38
+ needs:
39
+ - build
40
+ runs-on: ubuntu-latest
41
+ environment:
42
+ name: pypi
43
+ url: https://pypi.org/p/ripple_down_rules # Replace <package-name> with your PyPI project name
44
+ permissions:
45
+ id-token: write # IMPORTANT: mandatory for trusted publishing
46
+
47
+ steps:
48
+ - name: Download all the dists
49
+ uses: actions/download-artifact@v4
50
+ with:
51
+ name: python-package-distributions
52
+ path: dist/
53
+ - name: Publish distribution to PyPI
54
+ uses: pypa/gh-action-pypi-publish@release/v1
55
+
56
+ # github-release:
57
+ # name: >-
58
+ # Sign the Python distribution with Sigstore
59
+ # and upload them to GitHub Release
60
+ # needs:
61
+ # - publish-to-pypi
62
+ # runs-on: ubuntu-latest
63
+ #
64
+ # permissions:
65
+ # contents: write # IMPORTANT: mandatory for making GitHub Releases
66
+ # id-token: write # IMPORTANT: mandatory for sigstore
67
+ #
68
+ # steps:
69
+ # - name: Download all the dists
70
+ # uses: actions/download-artifact@v3
71
+ # with:
72
+ # name: python-package-distributions
73
+ # path: dist/
74
+ # - name: Sign the dists with Sigstore
75
+ # uses: sigstore/gh-action-sigstore-python@v2.1.1
76
+ # with:
77
+ # inputs: >-
78
+ # ./dist/*.tar.gz
79
+ # ./dist/*.whl
80
+ # - name: Create GitHub Release
81
+ # env:
82
+ # GITHUB_TOKEN: ${{ github.token }}
83
+ # run: >-
84
+ # gh release create
85
+ # '${{ github.ref_name }}'
86
+ # --repo '${{ github.repository }}'
87
+ # --notes ""
88
+ # - name: Upload artifact signatures to GitHub Release
89
+ # env:
90
+ # GITHUB_TOKEN: ${{ github.token }}
91
+ # # Upload to GitHub Release using the `gh` CLI.
92
+ # # `dist/` contains the built packages, and the
93
+ # # sigstore-produced signatures and certificates.
94
+ # run: >-
95
+ # gh release upload
96
+ # '${{ github.ref_name }}' dist/**
97
+ # --repo '${{ github.repository }}'
98
+
99
+ # publish-to-testpypi:
100
+ # name: Publish Python distribution to TestPyPI
101
+ # needs:
102
+ # - build
103
+ # runs-on: ubuntu-latest
104
+ #
105
+ # environment:
106
+ # name: testpypi
107
+ # url: https://test.pypi.org/p/ripple_down_rules
108
+ #
109
+ # permissions:
110
+ # id-token: write #mandatory for trusted publishing
111
+ #
112
+ # steps:
113
+ # - name: Download all the dists
114
+ # uses: actions/download-artifact@v4
115
+ # with:
116
+ # name: python-package-distributions
117
+ # path: dist/
118
+ # - name: Publish distribution to TestPyPI
119
+ # uses: pypa/gh-action-pypi-publish@release/v1
120
+ # with:
121
+ # repository-url: https://test.pypi.org/legacy/
@@ -0,0 +1,203 @@
1
+ Index: .idea/workspace.xml
2
+ IDEA additional info:
3
+ Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
4
+ <+><?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"AutoImportSettings\">\n <option name=\"autoReloadType\" value=\"SELECTIVE\" />\n </component>\n <component name=\"ChangeListManager\">\n <list default=\"true\" id=\"d2f036b6-02b2-42cb-99f5-ad1ea77b9d5a\" name=\"Changes\" comment=\"\">\n <changelist_data name=\"A_Bassiouny\" email=\"abdelrhman_bassuny@hotmail.com\" date=\"1738438521000\" />\n <change afterPath=\"$PROJECT_DIR$/.gitignore\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/LICENSE\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/requirements-dev.txt\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/requirements.txt\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_mcrdr_extra.dot\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_mcrdr_extra.png\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_mcrdr_stop_only.dot\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_mcrdr_stop_only.png\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_mcrdr_stop_plus_rule.dot\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_mcrdr_stop_plus_rule.png\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_scrdr.dot\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_scrdr.png\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_scrdr_2.dot\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_scrdr_2.png\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_scrdr_3.dot\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/complete_scrdr_3.png\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/partial_mcrdr_extra.dot\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/results/partial_mcrdr_extra.png\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/__init__.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/pyrdr/__init__.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/pyrdr/datastructures.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/pyrdr/experts.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/pyrdr/failures.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/pyrdr/helpers.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/pyrdr/rdr.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/src/pyrdr/utils.py\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/mcrdr_expert_answers_classify.json\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/mcrdr_extra_expert_answers_classify.json\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/mcrdr_extra_expert_answers_fit.json\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/mcrdr_stop_only_answers_fit.json\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/mcrdr_stop_plus_rule_answers_fit.json\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/scrdr_expert_answers_classify.json\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/scrdr_expert_answers_fit.json\" afterDir=\"false\" />\n <change afterPath=\"$PROJECT_DIR$/test/test_rdr.py\" afterDir=\"false\" />\n </list>\n <option name=\"SHOW_DIALOG\" value=\"false\" />\n <option name=\"HIGHLIGHT_CONFLICTS\" value=\"true\" />\n <option name=\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value=\"false\" />\n <option name=\"LAST_RESOLUTION\" value=\"IGNORE\" />\n </component>\n <component name=\"FileTemplateManagerImpl\">\n <option name=\"RECENT_TEMPLATES\">\n <list>\n <option value=\"Python Script\" />\n </list>\n </option>\n </component>\n <component name=\"Git.Settings\">\n <option name=\"RECENT_BRANCH_BY_REPOSITORY\">\n <map>\n <entry key=\"$PROJECT_DIR$\" value=\"temp_branch\" />\n </map>\n </option>\n <option name=\"RECENT_GIT_ROOT_PATH\" value=\"$PROJECT_DIR$\" />\n <option name=\"RESET_MODE\" value=\"HARD\" />\n </component>\n <component name=\"MarkdownSettingsMigration\">\n <option name=\"stateVersion\" value=\"1\" />\n </component>\n <component name=\"ProjectColorInfo\">{\n &quot;associatedIndex&quot;: 5\n}</component>\n <component name=\"ProjectId\" id=\"2saIUNn6UfpjY0Paj61bNBzr6Xo\" />\n <component name=\"ProjectViewState\">\n <option name=\"hideEmptyMiddlePackages\" value=\"true\" />\n <option name=\"showLibraryContents\" value=\"true\" />\n </component>\n <component name=\"PropertiesComponent\">{\n &quot;keyToString&quot;: {\n &quot;Python.test_example.executor&quot;: &quot;Run&quot;,\n &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,\n &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,\n &quot;git-widget-placeholder&quot;: &quot;ripple__down__rules&quot;,\n &quot;last_opened_file_path&quot;: &quot;/home/bassioun/Documents/repos/ripple_down_rules&quot;,\n &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,\n &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,\n &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,\n &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,\n &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,\n &quot;settings.editor.selected.configurable&quot;: &quot;PyScientificConfigurable&quot;,\n &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;\n }\n}</component>\n <component name=\"RunManager\">\n <configuration name=\"test_example\" type=\"PythonConfigurationType\" factoryName=\"Python\" temporary=\"true\" nameIsGenerated=\"true\">\n <module name=\"ripple_down_rules\" />\n <option name=\"ENV_FILES\" value=\"\" />\n <option name=\"INTERPRETER_OPTIONS\" value=\"\" />\n <option name=\"PARENT_ENVS\" value=\"true\" />\n <envs>\n <env name=\"PYTHONUNBUFFERED\" value=\"1\" />\n </envs>\n <option name=\"SDK_HOME\" value=\"\" />\n <option name=\"WORKING_DIRECTORY\" value=\"$PROJECT_DIR$/test\" />\n <option name=\"IS_MODULE_SDK\" value=\"true\" />\n <option name=\"ADD_CONTENT_ROOTS\" value=\"true\" />\n <option name=\"ADD_SOURCE_ROOTS\" value=\"true\" />\n <EXTENSION ID=\"PythonCoverageRunConfigurationExtension\" runner=\"coverage.py\" />\n <option name=\"SCRIPT_NAME\" value=\"$PROJECT_DIR$/test/test_example.py\" />\n <option name=\"PARAMETERS\" value=\"\" />\n <option name=\"SHOW_COMMAND_LINE\" value=\"false\" />\n <option name=\"EMULATE_TERMINAL\" value=\"false\" />\n <option name=\"MODULE_MODE\" value=\"false\" />\n <option name=\"REDIRECT_INPUT\" value=\"false\" />\n <option name=\"INPUT_FILE\" value=\"\" />\n <method v=\"2\" />\n </configuration>\n <recent_temporary>\n <list>\n <item itemvalue=\"Python.test_example\" />\n </list>\n </recent_temporary>\n </component>\n <component name=\"SharedIndexes\">\n <attachedChunks>\n <set>\n <option value=\"bundled-python-sdk-50da183f06c8-2887949eec09-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-233.13135.95\" />\n </set>\n </attachedChunks>\n </component>\n <component name=\"SpellCheckerSettings\" RuntimeDictionaries=\"0\" Folders=\"0\" CustomDictionaries=\"0\" DefaultDictionary=\"application-level\" UseSingleDictionary=\"true\" transferred=\"true\" />\n <component name=\"TaskManager\">\n <task active=\"true\" id=\"Default\" summary=\"Default task\">\n <changelist id=\"d2f036b6-02b2-42cb-99f5-ad1ea77b9d5a\" name=\"Changes\" comment=\"\" />\n <created>1738687274047</created>\n <option name=\"number\" value=\"Default\" />\n <option name=\"presentableId\" value=\"Default\" />\n <updated>1738687274047</updated>\n <workItem from=\"1738687275097\" duration=\"2126000\" />\n <workItem from=\"1738689408666\" duration=\"515000\" />\n </task>\n <servers />\n </component>\n <component name=\"TypeScriptGeneratedFilesManager\">\n <option name=\"version\" value=\"3\" />\n </component>\n <component name=\"Vcs.Log.Tabs.Properties\">\n <option name=\"TAB_STATES\">\n <map>\n <entry key=\"MAIN\">\n <value>\n <State>\n <option name=\"FILTERS\">\n <map>\n <entry key=\"branch\">\n <value>\n <list>\n <option value=\"origin/ripple_down_rules\" />\n </list>\n </value>\n </entry>\n </map>\n </option>\n </State>\n </value>\n </entry>\n </map>\n </option>\n </component>\n <component name=\"com.intellij.coverage.CoverageDataManagerImpl\">\n <SUITE FILE_PATH=\"coverage/ripple_down_rules$test_example.coverage\" NAME=\"test_example Coverage Results\" MODIFIED=\"1738688894371\" SOURCE_PROVIDER=\"com.intellij.coverage.DefaultCoverageFileProvider\" RUNNER=\"coverage.py\" COVERAGE_BY_TEST_ENABLED=\"true\" COVERAGE_TRACING_ENABLED=\"false\" WORKING_DIRECTORY=\"$PROJECT_DIR$/test\" />\n </component>\n</project>
5
+ ===================================================================
6
+ diff --git a/.idea/workspace.xml b/.idea/workspace.xml
7
+ --- a/.idea/workspace.xml
8
+ +++ b/.idea/workspace.xml
9
+ @@ -5,41 +5,7 @@
10
+ </component>
11
+ <component name="ChangeListManager">
12
+ <list default="true" id="d2f036b6-02b2-42cb-99f5-ad1ea77b9d5a" name="Changes" comment="">
13
+ - <changelist_data name="A_Bassiouny" email="abdelrhman_bassuny@hotmail.com" date="1738438521000" />
14
+ - <change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
15
+ - <change afterPath="$PROJECT_DIR$/LICENSE" afterDir="false" />
16
+ - <change afterPath="$PROJECT_DIR$/requirements-dev.txt" afterDir="false" />
17
+ - <change afterPath="$PROJECT_DIR$/requirements.txt" afterDir="false" />
18
+ - <change afterPath="$PROJECT_DIR$/results/complete_mcrdr_extra.dot" afterDir="false" />
19
+ - <change afterPath="$PROJECT_DIR$/results/complete_mcrdr_extra.png" afterDir="false" />
20
+ - <change afterPath="$PROJECT_DIR$/results/complete_mcrdr_stop_only.dot" afterDir="false" />
21
+ - <change afterPath="$PROJECT_DIR$/results/complete_mcrdr_stop_only.png" afterDir="false" />
22
+ - <change afterPath="$PROJECT_DIR$/results/complete_mcrdr_stop_plus_rule.dot" afterDir="false" />
23
+ - <change afterPath="$PROJECT_DIR$/results/complete_mcrdr_stop_plus_rule.png" afterDir="false" />
24
+ - <change afterPath="$PROJECT_DIR$/results/complete_scrdr.dot" afterDir="false" />
25
+ - <change afterPath="$PROJECT_DIR$/results/complete_scrdr.png" afterDir="false" />
26
+ - <change afterPath="$PROJECT_DIR$/results/complete_scrdr_2.dot" afterDir="false" />
27
+ - <change afterPath="$PROJECT_DIR$/results/complete_scrdr_2.png" afterDir="false" />
28
+ - <change afterPath="$PROJECT_DIR$/results/complete_scrdr_3.dot" afterDir="false" />
29
+ - <change afterPath="$PROJECT_DIR$/results/complete_scrdr_3.png" afterDir="false" />
30
+ - <change afterPath="$PROJECT_DIR$/results/partial_mcrdr_extra.dot" afterDir="false" />
31
+ - <change afterPath="$PROJECT_DIR$/results/partial_mcrdr_extra.png" afterDir="false" />
32
+ - <change afterPath="$PROJECT_DIR$/src/__init__.py" afterDir="false" />
33
+ - <change afterPath="$PROJECT_DIR$/src/pyrdr/__init__.py" afterDir="false" />
34
+ - <change afterPath="$PROJECT_DIR$/src/pyrdr/datastructures.py" afterDir="false" />
35
+ - <change afterPath="$PROJECT_DIR$/src/pyrdr/experts.py" afterDir="false" />
36
+ - <change afterPath="$PROJECT_DIR$/src/pyrdr/failures.py" afterDir="false" />
37
+ - <change afterPath="$PROJECT_DIR$/src/pyrdr/helpers.py" afterDir="false" />
38
+ - <change afterPath="$PROJECT_DIR$/src/pyrdr/rdr.py" afterDir="false" />
39
+ - <change afterPath="$PROJECT_DIR$/src/pyrdr/utils.py" afterDir="false" />
40
+ - <change afterPath="$PROJECT_DIR$/test/mcrdr_expert_answers_classify.json" afterDir="false" />
41
+ - <change afterPath="$PROJECT_DIR$/test/mcrdr_extra_expert_answers_classify.json" afterDir="false" />
42
+ - <change afterPath="$PROJECT_DIR$/test/mcrdr_extra_expert_answers_fit.json" afterDir="false" />
43
+ - <change afterPath="$PROJECT_DIR$/test/mcrdr_stop_only_answers_fit.json" afterDir="false" />
44
+ - <change afterPath="$PROJECT_DIR$/test/mcrdr_stop_plus_rule_answers_fit.json" afterDir="false" />
45
+ - <change afterPath="$PROJECT_DIR$/test/scrdr_expert_answers_classify.json" afterDir="false" />
46
+ - <change afterPath="$PROJECT_DIR$/test/scrdr_expert_answers_fit.json" afterDir="false" />
47
+ - <change afterPath="$PROJECT_DIR$/test/test_rdr.py" afterDir="false" />
48
+ + <change beforePath="$PROJECT_DIR$/test/test_rdr.py" beforeDir="false" afterPath="$PROJECT_DIR$/test/test_rdr.py" afterDir="false" />
49
+ </list>
50
+ <option name="SHOW_DIALOG" value="false" />
51
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
52
+ @@ -54,6 +20,11 @@
53
+ </option>
54
+ </component>
55
+ <component name="Git.Settings">
56
+ + <option name="PREVIOUS_COMMIT_AUTHORS">
57
+ + <list>
58
+ + <option value="A_Bassiouny &lt;abdelrhman_bassuny@hotmail.com&gt;" />
59
+ + </list>
60
+ + </option>
61
+ <option name="RECENT_BRANCH_BY_REPOSITORY">
62
+ <map>
63
+ <entry key="$PROJECT_DIR$" value="temp_branch" />
64
+ @@ -73,22 +44,22 @@
65
+ <option name="hideEmptyMiddlePackages" value="true" />
66
+ <option name="showLibraryContents" value="true" />
67
+ </component>
68
+ - <component name="PropertiesComponent">{
69
+ - &quot;keyToString&quot;: {
70
+ - &quot;Python.test_example.executor&quot;: &quot;Run&quot;,
71
+ - &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
72
+ - &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
73
+ - &quot;git-widget-placeholder&quot;: &quot;ripple__down__rules&quot;,
74
+ - &quot;last_opened_file_path&quot;: &quot;/home/bassioun/Documents/repos/ripple_down_rules&quot;,
75
+ - &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
76
+ - &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
77
+ - &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
78
+ - &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
79
+ - &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
80
+ - &quot;settings.editor.selected.configurable&quot;: &quot;PyScientificConfigurable&quot;,
81
+ - &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
82
+ + <component name="PropertiesComponent"><![CDATA[{
83
+ + "keyToString": {
84
+ + "Python.test_example.executor": "Run",
85
+ + "RunOnceActivity.OpenProjectViewOnStart": "true",
86
+ + "RunOnceActivity.ShowReadmeOnStart": "true",
87
+ + "git-widget-placeholder": "Cherry-picking in temp__branch",
88
+ + "last_opened_file_path": "/home/bassioun/Documents/repos/ripple_down_rules",
89
+ + "node.js.detected.package.eslint": "true",
90
+ + "node.js.detected.package.tslint": "true",
91
+ + "node.js.selected.package.eslint": "(autodetect)",
92
+ + "node.js.selected.package.tslint": "(autodetect)",
93
+ + "nodejs_package_manager_path": "npm",
94
+ + "settings.editor.selected.configurable": "PyScientificConfigurable",
95
+ + "vue.rearranger.settings.migration": "true"
96
+ }
97
+ -}</component>
98
+ +}]]></component>
99
+ <component name="RunManager">
100
+ <configuration name="test_example" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
101
+ <module name="ripple_down_rules" />
102
+ @@ -135,8 +106,73 @@
103
+ <option name="presentableId" value="Default" />
104
+ <updated>1738687274047</updated>
105
+ <workItem from="1738687275097" duration="2126000" />
106
+ - <workItem from="1738689408666" duration="515000" />
107
+ + <workItem from="1738689408666" duration="895000" />
108
+ </task>
109
+ + <task id="LOCAL-00001" summary="[RDR] (WIP) first implementation.">
110
+ + <option name="closed" value="true" />
111
+ + <created>1738690124439</created>
112
+ + <option name="number" value="00001" />
113
+ + <option name="presentableId" value="LOCAL-00001" />
114
+ + <option name="project" value="LOCAL" />
115
+ + <updated>1738690124439</updated>
116
+ + </task>
117
+ + <task id="LOCAL-00002" summary="[RDR] first implementation seems to converge.">
118
+ + <option name="closed" value="true" />
119
+ + <created>1738690130538</created>
120
+ + <option name="number" value="00002" />
121
+ + <option name="presentableId" value="LOCAL-00002" />
122
+ + <option name="project" value="LOCAL" />
123
+ + <updated>1738690130538</updated>
124
+ + </task>
125
+ + <task id="LOCAL-00003" summary="[RDR] render tree implemented.">
126
+ + <option name="closed" value="true" />
127
+ + <created>1738690133821</created>
128
+ + <option name="number" value="00003" />
129
+ + <option name="presentableId" value="LOCAL-00003" />
130
+ + <option name="project" value="LOCAL" />
131
+ + <updated>1738690133821</updated>
132
+ + </task>
133
+ + <task id="LOCAL-00004" summary="[RDR] restructured plus some refinements.">
134
+ + <option name="closed" value="true" />
135
+ + <created>1738690137056</created>
136
+ + <option name="number" value="00004" />
137
+ + <option name="presentableId" value="LOCAL-00004" />
138
+ + <option name="project" value="LOCAL" />
139
+ + <updated>1738690137056</updated>
140
+ + </task>
141
+ + <task id="LOCAL-00005" summary="[RDR] restructure.">
142
+ + <option name="closed" value="true" />
143
+ + <created>1738690145083</created>
144
+ + <option name="number" value="00005" />
145
+ + <option name="presentableId" value="LOCAL-00005" />
146
+ + <option name="project" value="LOCAL" />
147
+ + <updated>1738690145083</updated>
148
+ + </task>
149
+ + <task id="LOCAL-00006" summary="[RDR] MultiClassRDR corrected and tested.">
150
+ + <option name="closed" value="true" />
151
+ + <created>1738690150544</created>
152
+ + <option name="number" value="00006" />
153
+ + <option name="presentableId" value="LOCAL-00006" />
154
+ + <option name="project" value="LOCAL" />
155
+ + <updated>1738690150544</updated>
156
+ + </task>
157
+ + <task id="LOCAL-00007" summary="[RDR] stop only mcrdr.">
158
+ + <option name="closed" value="true" />
159
+ + <created>1738690156583</created>
160
+ + <option name="number" value="00007" />
161
+ + <option name="presentableId" value="LOCAL-00007" />
162
+ + <option name="project" value="LOCAL" />
163
+ + <updated>1738690156583</updated>
164
+ + </task>
165
+ + <task id="LOCAL-00008" summary="[RDR] created expert class.">
166
+ + <option name="closed" value="true" />
167
+ + <created>1738690160856</created>
168
+ + <option name="number" value="00008" />
169
+ + <option name="presentableId" value="LOCAL-00008" />
170
+ + <option name="project" value="LOCAL" />
171
+ + <updated>1738690160856</updated>
172
+ + </task>
173
+ + <option name="localTasksCounter" value="9" />
174
+ <servers />
175
+ </component>
176
+ <component name="TypeScriptGeneratedFilesManager">
177
+ @@ -153,7 +189,7 @@
178
+ <entry key="branch">
179
+ <value>
180
+ <list>
181
+ - <option value="origin/ripple_down_rules" />
182
+ + <option value="ripple_down_rules" />
183
+ </list>
184
+ </value>
185
+ </entry>
186
+ @@ -164,6 +200,17 @@
187
+ </entry>
188
+ </map>
189
+ </option>
190
+ + </component>
191
+ + <component name="VcsManagerConfiguration">
192
+ + <MESSAGE value="[RDR] (WIP) first implementation." />
193
+ + <MESSAGE value="[RDR] first implementation seems to converge." />
194
+ + <MESSAGE value="[RDR] render tree implemented." />
195
+ + <MESSAGE value="[RDR] restructured plus some refinements." />
196
+ + <MESSAGE value="[RDR] restructure." />
197
+ + <MESSAGE value="[RDR] MultiClassRDR corrected and tested." />
198
+ + <MESSAGE value="[RDR] stop only mcrdr." />
199
+ + <MESSAGE value="[RDR] created expert class." />
200
+ + <option name="LAST_COMMIT_MESSAGE" value="[RDR] created expert class." />
201
+ </component>
202
+ <component name="com.intellij.coverage.CoverageDataManagerImpl">
203
+ <SUITE FILE_PATH="coverage/ripple_down_rules$test_example.coverage" NAME="test_example Coverage Results" MODIFIED="1738688894371" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/test" />
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ripple_down_rules
3
- Version: 0.4.83
3
+ Version: 0.4.85
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
@@ -682,21 +682,31 @@ Classifier: Programming Language :: Python :: 3
682
682
  Description-Content-Type: text/markdown
683
683
  License-File: LICENSE
684
684
  Requires-Dist: anytree>=2.8.0
685
- Requires-Dist: pandas>=2.0.3
686
- Requires-Dist: networkx>=3.1
687
685
  Requires-Dist: ordered_set>=4
688
686
  Requires-Dist: pygraphviz>=1.7
689
- Requires-Dist: ucimlrepo>=0.0.7
690
687
  Requires-Dist: typing-extensions>=4.12.2
691
- Requires-Dist: matplotlib>=3.7.5
692
- Requires-Dist: sqlalchemy
693
- Requires-Dist: pyqt6
694
- Requires-Dist: qtconsole
695
688
  Requires-Dist: graphviz
696
689
  Requires-Dist: tabulate
697
690
  Requires-Dist: ipython
698
691
  Requires-Dist: requests
699
692
  Requires-Dist: colorama
693
+ Requires-Dist: pygments
694
+ Requires-Dist: sqlalchemy
695
+ Requires-Dist: pandas
696
+ Provides-Extra: gui
697
+ Requires-Dist: pyqt6; extra == "gui"
698
+ Requires-Dist: qtconsole; extra == "gui"
699
+ Provides-Extra: viz
700
+ Requires-Dist: matplotlib; extra == "viz"
701
+ Requires-Dist: networkx; extra == "viz"
702
+ Provides-Extra: dev
703
+ Requires-Dist: pyqt6; extra == "dev"
704
+ Requires-Dist: qtconsole; extra == "dev"
705
+ Requires-Dist: matplotlib; extra == "dev"
706
+ Requires-Dist: networkx; extra == "dev"
707
+ Requires-Dist: pytest; extra == "dev"
708
+ Requires-Dist: ucimlrepo>=0.0.7; extra == "dev"
709
+ Requires-Dist: pdbpp; extra == "dev"
700
710
  Dynamic: license-file
701
711
 
702
712
  # Ripple Down Rules (RDR)
@@ -0,0 +1,19 @@
1
+ from ripple_down_rules.datastructures.dataclasses import CaseQuery
2
+ from ripple_down_rules.rdr import SingleClassRDR
3
+ from ripple_down_rules.datasets import load_zoo_dataset
4
+ from ripple_down_rules.utils import render_tree
5
+
6
+ all_cases, targets = load_zoo_dataset()
7
+
8
+ scrdr = SingleClassRDR()
9
+
10
+ # Fit the SCRDR to the data
11
+ case_queries = [CaseQuery(case, 'species', type(target), True, _target=target)
12
+ for case, target in zip(all_cases[:10], targets[:10])]
13
+ scrdr.fit(case_queries, animate_tree=True)
14
+
15
+ # Render the tree to a file
16
+ render_tree(scrdr.start_rule, use_dot_exporter=True, filename="scrdr")
17
+
18
+ cat = scrdr.classify(all_cases[50])
19
+ assert cat == targets[50]
@@ -1,12 +1,12 @@
1
1
  # pyproject.toml
2
2
 
3
3
  [build-system]
4
- requires = ["setuptools>=61.0.0", "wheel"]
4
+ requires = ["setuptools", "setuptools-scm"]
5
5
  build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "ripple_down_rules"
9
- version = "0.4.83"
9
+ dynamic = ["version", "dependencies"]
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" }]
@@ -15,21 +15,29 @@ classifiers = [
15
15
  "Programming Language :: Python :: 3",
16
16
  ]
17
17
  keywords = ["robotics", "knowledge", "reasoning", "representation"]
18
- dependencies = [
19
- "anytree>=2.8.0",
20
- "pandas>=2.0.3",
21
- "networkx>=3.1",
22
- "ordered_set>=4",
23
- "pygraphviz>=1.7",
24
- "ucimlrepo>=0.0.7",
25
- "typing-extensions>=4.12.2",
26
- "matplotlib>=3.7.5",
27
- "sqlalchemy",
18
+
19
+ [tool.setuptools.packages.find]
20
+ where = ["src"]
21
+ include = ["ripple_down_rules*"]
22
+
23
+ [tool.setuptools.dynamic]
24
+ version = {attr = "ripple_down_rules.__version__"}
25
+ dependencies = {file = "requirements.txt"}
26
+
27
+ [project.optional-dependencies]
28
+ gui = [
28
29
  "pyqt6",
29
30
  "qtconsole",
30
- "graphviz",
31
- "tabulate",
32
- "ipython",
33
- "requests",
34
- "colorama",
35
31
  ]
32
+ viz = [
33
+ "matplotlib",
34
+ "networkx",
35
+ ]
36
+ dev = [
37
+ "pyqt6",
38
+ "qtconsole",
39
+ "matplotlib",
40
+ "networkx",
41
+ "pytest",
42
+ "ucimlrepo>=0.0.7",
43
+ "pdbpp"]
@@ -0,0 +1,6 @@
1
+ -r requirements.txt
2
+ -r requirements-gui.txt
3
+ -r requirements-viz.txt
4
+ ucimlrepo>=0.0.7
5
+ pdbpp
6
+ pytest
@@ -0,0 +1,2 @@
1
+ pyqt6
2
+ qtconsole
@@ -0,0 +1,2 @@
1
+ networkx>=3.1
2
+ matplotlib>=3.7.5
@@ -1,16 +1,12 @@
1
1
  anytree>=2.8.0
2
- pandas>=2.0.3
3
- networkx>=3.1
4
2
  ordered_set>=4
5
3
  pygraphviz>=1.7
6
- ucimlrepo>=0.0.7
7
4
  typing-extensions>=4.12.2
8
- matplotlib>=3.7.5
9
- sqlalchemy
10
- pyqt6
11
- qtconsole
12
5
  graphviz
13
6
  tabulate
14
7
  ipython
15
8
  requests
16
9
  colorama
10
+ pygments
11
+ sqlalchemy
12
+ pandas