rustdl 0.3.1__tar.gz → 0.3.2__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 (152) hide show
  1. {rustdl-0.3.1 → rustdl-0.3.2}/Cargo.lock +9 -9
  2. {rustdl-0.3.1 → rustdl-0.3.2}/Cargo.toml +12 -6
  3. {rustdl-0.3.1 → rustdl-0.3.2}/PKG-INFO +1 -1
  4. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/convert.rs +4 -7
  5. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/data_axioms.rs +52 -32
  6. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/ir.rs +4 -1
  7. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/src/classify.rs +2 -2
  8. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/src/errors.rs +7 -5
  9. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/src/lib.rs +1 -1
  10. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/src/materialize.rs +5 -11
  11. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/src/queries.rs +3 -18
  12. rustdl-0.3.2/crates/owl-dl-reasoner/src/abox_check.rs +692 -0
  13. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/src/classify.rs +109 -13
  14. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/src/lib.rs +55 -34
  15. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/src/union_find.rs +1 -1
  16. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/abox_consistency.rs +74 -39
  17. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/anon349_diagnostic.rs +10 -4
  18. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/datatype_completeness.rs +15 -30
  19. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/konclude_closure_diff.rs +24 -11
  20. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/label_heuristic_canary.rs +21 -4
  21. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/snapshot_phase0_canary.rs +14 -8
  22. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-saturation/src/lib.rs +212 -64
  23. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/counters.rs +3 -6
  24. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/hyper.rs +338 -41
  25. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/lib.rs +116 -7
  26. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/replay.rs +1 -2
  27. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/rules.rs +50 -9
  28. rustdl-0.3.1/crates/owl-dl-reasoner/src/abox_check.rs +0 -436
  29. {rustdl-0.3.1 → rustdl-0.3.2}/README.md +0 -0
  30. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/Cargo.toml +0 -0
  31. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/README.md +0 -0
  32. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/absorb.rs +0 -0
  33. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/clause.rs +0 -0
  34. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/convert_back.rs +0 -0
  35. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/definitions.rs +0 -0
  36. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/lib.rs +0 -0
  37. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/locality.rs +0 -0
  38. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/normalize.rs +0 -0
  39. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/ontology.rs +0 -0
  40. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/residual_trigger.rs +0 -0
  41. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/role_hierarchy.rs +0 -0
  42. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/told.rs +0 -0
  43. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/transform.rs +0 -0
  44. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/src/vocab.rs +0 -0
  45. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/tests/concept_pool_proptest.proptest-regressions +0 -0
  46. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/tests/concept_pool_proptest.rs +0 -0
  47. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/tests/convert_round_trip_proptest.rs +0 -0
  48. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-core/tests/role_hierarchy_proptest.rs +0 -0
  49. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-datatypes/Cargo.toml +0 -0
  50. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-datatypes/README.md +0 -0
  51. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-datatypes/src/lib.rs +0 -0
  52. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/.gitignore +0 -0
  53. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/Cargo.toml +0 -0
  54. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/README.md +0 -0
  55. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/src/load.rs +0 -0
  56. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/tests/python/conftest.py +0 -0
  57. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/tests/python/test_classify.py +0 -0
  58. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/tests/python/test_examples.py +0 -0
  59. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/tests/python/test_materialize.py +0 -0
  60. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/tests/python/test_queries.py +0 -0
  61. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/tests/python/test_smoke.py +0 -0
  62. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-py/tests/python/test_soundness.py +0 -0
  63. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/Cargo.toml +0 -0
  64. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/README.md +0 -0
  65. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/src/model_cache.rs +0 -0
  66. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/src/realize.rs +0 -0
  67. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_direct_bot.ofn +0 -0
  68. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_no_bot.ofn +0 -0
  69. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_different_individuals.ofn +0 -0
  70. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_types.ofn +0 -0
  71. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa.ofn +0 -0
  72. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa_no_clash.ofn +0 -0
  73. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_consistent.ofn +0 -0
  74. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_inconsistent.ofn +0 -0
  75. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_different.ofn +0 -0
  76. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_without_different.ofn +0 -0
  77. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_diff.ofn +0 -0
  78. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_same_target.ofn +0 -0
  79. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric.ofn +0 -0
  80. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric_one_way.ofn +0 -0
  81. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive.ofn +0 -0
  82. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive_distinct.ofn +0 -0
  83. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_compatible.ofn +0 -0
  84. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_disjoint.ofn +0 -0
  85. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_cardinality_disjoint.ofn +0 -0
  86. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain-classified.owx +0 -0
  87. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain.ofn +0 -0
  88. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition-classified.owx +0 -0
  89. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition.ofn +0 -0
  90. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_facet.ofn +0 -0
  91. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/functional_data_property.ofn +0 -0
  92. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property-classified.owx +0 -0
  93. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property.ofn +0 -0
  94. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/functional-equiv-some-bug.ofn +0 -0
  95. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/named-pizza-country-bug.ofn +0 -0
  96. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-01.txt +0 -0
  97. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-02.txt +0 -0
  98. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-03.txt +0 -0
  99. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-04.txt +0 -0
  100. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-05.txt +0 -0
  101. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-06.txt +0 -0
  102. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-07.txt +0 -0
  103. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-08.txt +0 -0
  104. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.hermit.owx +0 -0
  105. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.ofn +0 -0
  106. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.owx +0 -0
  107. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.hermit.owx +0 -0
  108. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.ofn +0 -0
  109. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.owx +0 -0
  110. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.hermit.owx +0 -0
  111. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.ofn +0 -0
  112. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.owx +0 -0
  113. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.hermit.owx +0 -0
  114. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.ofn +0 -0
  115. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.owx +0 -0
  116. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.hermit.owx +0 -0
  117. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.ofn +0 -0
  118. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.owx +0 -0
  119. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.hermit.owx +0 -0
  120. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.ofn +0 -0
  121. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.owx +0 -0
  122. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.hermit.owx +0 -0
  123. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.ofn +0 -0
  124. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.owx +0 -0
  125. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.hermit.owx +0 -0
  126. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.ofn +0 -0
  127. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.owx +0 -0
  128. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/fixtures/phase2b/phase2b-verdicts.log +0 -0
  129. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/phase2c_pair_06_canary.rs +0 -0
  130. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-reasoner/tests/real_ontology_corpus.rs +0 -0
  131. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-saturation/Cargo.toml +0 -0
  132. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-saturation/README.md +0 -0
  133. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-saturation/tests/fixtures/phase2a_functional_role_canary.ofn +0 -0
  134. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-saturation/tests/fixtures/phase2b_compound_existential_canary.ofn +0 -0
  135. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/Cargo.toml +0 -0
  136. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/README.md +0 -0
  137. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/deps.rs +0 -0
  138. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/graph.rs +0 -0
  139. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/saturate.rs +0 -0
  140. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/search.rs +0 -0
  141. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/snapshot.rs +0 -0
  142. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/src/trail.rs +0 -0
  143. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/tests/backprop_risk.rs +0 -0
  144. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/tests/replay_driver.rs +0 -0
  145. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/tests/replay_roundtrip.rs +0 -0
  146. {rustdl-0.3.1 → rustdl-0.3.2}/crates/owl-dl-tableau/tests/snapshot_capture.rs +0 -0
  147. {rustdl-0.3.1 → rustdl-0.3.2}/pyproject.toml +0 -0
  148. {rustdl-0.3.1 → rustdl-0.3.2}/python/rustdl/__init__.py +0 -0
  149. {rustdl-0.3.1 → rustdl-0.3.2}/python/rustdl/data/pizza.owl.gz +0 -0
  150. {rustdl-0.3.1 → rustdl-0.3.2}/python/rustdl/data/sio.owl.gz +0 -0
  151. {rustdl-0.3.1 → rustdl-0.3.2}/python/rustdl/data/sulo.owl.gz +0 -0
  152. {rustdl-0.3.1 → rustdl-0.3.2}/python/rustdl/examples.py +0 -0
@@ -1037,7 +1037,7 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
1037
1037
 
1038
1038
  [[package]]
1039
1039
  name = "owl-dl-bench"
1040
- version = "0.3.1"
1040
+ version = "0.3.2"
1041
1041
  dependencies = [
1042
1042
  "anyhow",
1043
1043
  "clap",
@@ -1054,7 +1054,7 @@ dependencies = [
1054
1054
 
1055
1055
  [[package]]
1056
1056
  name = "owl-dl-cli"
1057
- version = "0.3.1"
1057
+ version = "0.3.2"
1058
1058
  dependencies = [
1059
1059
  "anyhow",
1060
1060
  "clap",
@@ -1066,7 +1066,7 @@ dependencies = [
1066
1066
 
1067
1067
  [[package]]
1068
1068
  name = "owl-dl-core"
1069
- version = "0.3.1"
1069
+ version = "0.3.2"
1070
1070
  dependencies = [
1071
1071
  "bitvec",
1072
1072
  "bumpalo",
@@ -1080,7 +1080,7 @@ dependencies = [
1080
1080
 
1081
1081
  [[package]]
1082
1082
  name = "owl-dl-datatypes"
1083
- version = "0.3.1"
1083
+ version = "0.3.2"
1084
1084
  dependencies = [
1085
1085
  "owl-dl-core",
1086
1086
  "proptest",
@@ -1090,7 +1090,7 @@ dependencies = [
1090
1090
 
1091
1091
  [[package]]
1092
1092
  name = "owl-dl-py"
1093
- version = "0.3.1"
1093
+ version = "0.3.2"
1094
1094
  dependencies = [
1095
1095
  "horned-owl",
1096
1096
  "owl-dl-core",
@@ -1101,7 +1101,7 @@ dependencies = [
1101
1101
 
1102
1102
  [[package]]
1103
1103
  name = "owl-dl-reasoner"
1104
- version = "0.3.1"
1104
+ version = "0.3.2"
1105
1105
  dependencies = [
1106
1106
  "dashmap",
1107
1107
  "horned-owl",
@@ -1117,7 +1117,7 @@ dependencies = [
1117
1117
 
1118
1118
  [[package]]
1119
1119
  name = "owl-dl-saturation"
1120
- version = "0.3.1"
1120
+ version = "0.3.2"
1121
1121
  dependencies = [
1122
1122
  "dashmap",
1123
1123
  "fixedbitset",
@@ -1133,7 +1133,7 @@ dependencies = [
1133
1133
 
1134
1134
  [[package]]
1135
1135
  name = "owl-dl-tableau"
1136
- version = "0.3.1"
1136
+ version = "0.3.2"
1137
1137
  dependencies = [
1138
1138
  "bitvec",
1139
1139
  "bumpalo",
@@ -2569,7 +2569,7 @@ dependencies = [
2569
2569
 
2570
2570
  [[package]]
2571
2571
  name = "xtask"
2572
- version = "0.3.1"
2572
+ version = "0.3.2"
2573
2573
  dependencies = [
2574
2574
  "anyhow",
2575
2575
  "clap",
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/owl-dl-core", "crates/owl-dl-saturation", "crates/owl-dl-tableau", "crates/owl-dl-datatypes", "crates/owl-dl-reasoner", "crates/owl-dl-py"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.3.1"
6
+ version = "0.3.2"
7
7
  edition = "2024"
8
8
  rust-version = "1.88"
9
9
  license = "Apache-2.0 OR MIT"
@@ -15,11 +15,11 @@ keywords = ["owl", "ontology", "reasoner", "description-logic", "semantic-web"]
15
15
  categories = ["science", "data-structures"]
16
16
 
17
17
  [workspace.dependencies]
18
- owl-dl-core = { path = "crates/owl-dl-core", version = "0.3.1" }
19
- owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.3.1" }
20
- owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.3.1" }
21
- owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.3.1" }
22
- owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.3.1" }
18
+ owl-dl-core = { path = "crates/owl-dl-core", version = "0.3.2" }
19
+ owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.3.2" }
20
+ owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.3.2" }
21
+ owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.3.2" }
22
+ owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.3.2" }
23
23
 
24
24
  horned-owl = { version = "1.4", default-features = false }
25
25
 
@@ -60,6 +60,12 @@ missing_errors_doc = "allow"
60
60
  missing_panics_doc = "allow"
61
61
  must_use_candidate = "allow"
62
62
  unnecessary_wraps = "allow"
63
+ # Style-only pedantic lints allowed workspace-wide: refactoring long
64
+ # functions / hoisting nested items / renaming similar bindings is churn
65
+ # without correctness value (and risky on the larger engine functions).
66
+ too_many_lines = "allow"
67
+ items_after_statements = "allow"
68
+ similar_names = "allow"
63
69
  unwrap_used = "warn"
64
70
  dbg_macro = "warn"
65
71
  print_stdout = "allow"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rustdl
3
- Version: 0.3.1
3
+ Version: 0.3.2
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Science/Research
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -522,12 +522,9 @@ pub fn convert_ontology<A: ForIRI>(
522
522
  // out.axioms.extend (which doesn't need it but reads cleaner).
523
523
  let derived = {
524
524
  let concepts_cell = std::cell::RefCell::new(&mut out.concepts);
525
- crate::data_axioms::derive_data_axioms(
526
- src,
527
- &out.vocabulary,
528
- bot_id,
529
- |cid| concepts_cell.borrow_mut().atomic(cid),
530
- )
525
+ crate::data_axioms::derive_data_axioms(src, &out.vocabulary, bot_id, |cid| {
526
+ concepts_cell.borrow_mut().atomic(cid)
527
+ })
531
528
  };
532
529
  out.axioms.extend(derived);
533
530
  out.axioms.sort();
@@ -1069,7 +1066,7 @@ mod tests {
1069
1066
  );
1070
1067
  }
1071
1068
 
1072
- /// Phase D1: a SubClassOf where the SUP contains a data-range
1069
+ /// Phase D1: a `SubClassOf` where the SUP contains a data-range
1073
1070
  /// constructor (e.g., `DataMaxCardinality`) is silently dropped —
1074
1071
  /// the `ce_or_skip!` macro maps `UnsupportedDataRange` to `Ok(None)`
1075
1072
  /// for the enclosing axiom. Sound under-approximation: we lose the
@@ -91,7 +91,10 @@ pub fn derive_data_axioms<A: ForIRI>(
91
91
  /// (or its decomposition into mutual SubClassOf), if any atomic Mi
92
92
  /// has cardinality bounds on a data property dp, propagate those
93
93
  /// bounds to C. Iterates to fixpoint to handle transitive defs.
94
- #[allow(clippy::too_many_lines, reason = "single fixpoint with 4 facts to propagate; splitting hurts readability")]
94
+ #[allow(
95
+ clippy::too_many_lines,
96
+ reason = "single fixpoint with 4 facts to propagate; splitting hurts readability"
97
+ )]
95
98
  fn propagate_intersection_bounds<A: ForIRI>(src: &SetOntology<A>, facts: &mut Facts) {
96
99
  // Collect: class_iri → vec of atomic-member iris from Intersection
97
100
  // equivalences. Includes EquivalentClasses(C, Intersection(...)) and
@@ -110,8 +113,7 @@ fn propagate_intersection_bounds<A: ForIRI>(src: &SetOntology<A>, facts: &mut Fa
110
113
  }
111
114
  });
112
115
  for parts in intersection_members {
113
- let part_iris: Vec<String> =
114
- parts.iter().filter_map(class_iri).collect();
116
+ let part_iris: Vec<String> = parts.iter().filter_map(class_iri).collect();
115
117
  for owner in &atomic_members {
116
118
  for part in &part_iris {
117
119
  if owner != part {
@@ -230,7 +232,10 @@ struct IntegerRange {
230
232
 
231
233
  impl IntegerRange {
232
234
  const fn unbounded() -> Self {
233
- Self { min: None, max: None }
235
+ Self {
236
+ min: None,
237
+ max: None,
238
+ }
234
239
  }
235
240
  fn intersect(self, other: Self) -> Self {
236
241
  let min = match (self.min, other.min) {
@@ -334,11 +339,7 @@ fn scan_component<A: ForIRI>(c: &Component<A>, f: &mut Facts) {
334
339
  // purposes. Bound-collection: if a is atomic class C and b
335
340
  // is an ObjectIntersectionOf with data-cardinality conjuncts,
336
341
  // those conjuncts' bounds apply to C.
337
- let atomic: Vec<String> = ax
338
- .0
339
- .iter()
340
- .filter_map(class_iri)
341
- .collect();
342
+ let atomic: Vec<String> = ax.0.iter().filter_map(class_iri).collect();
342
343
  for c in &atomic {
343
344
  for other in &ax.0 {
344
345
  scan_class_for_bounds(c, other, f);
@@ -405,11 +406,7 @@ fn scan_class_for_bounds<A: ForIRI>(class_iri: &str, ce: &ClassExpression<A>, f:
405
406
  /// `ObjectIntersectionOf`. Phase D5 (Tier C): also records integer
406
407
  /// ranges from `DataSomeValuesFrom(dp, DatatypeRestriction(xsd:integer, ...))`
407
408
  /// into `f.class_int_ranges`.
408
- fn scan_class_for_existentials<A: ForIRI>(
409
- class_iri: &str,
410
- ce: &ClassExpression<A>,
411
- f: &mut Facts,
412
- ) {
409
+ fn scan_class_for_existentials<A: ForIRI>(class_iri: &str, ce: &ClassExpression<A>, f: &mut Facts) {
413
410
  match ce {
414
411
  ClassExpression::DataSomeValuesFrom { dp, dr } => {
415
412
  f.class_some.insert((class_iri.to_string(), dpe_iri(dp)));
@@ -467,14 +464,22 @@ fn parse_integer_facets<A: ForIRI>(facets: &[FacetRestriction<A>]) -> Option<Int
467
464
  Facet::MinExclusive => {
468
465
  // xsd:integer-semantics: exclusive ≥ val + 1
469
466
  let inclusive = val.checked_add(1)?;
470
- range.min = Some(range.min.map_or(inclusive, |existing| existing.max(inclusive)));
467
+ range.min = Some(
468
+ range
469
+ .min
470
+ .map_or(inclusive, |existing| existing.max(inclusive)),
471
+ );
471
472
  }
472
473
  Facet::MaxInclusive => {
473
474
  range.max = Some(range.max.map_or(val, |existing| existing.min(val)));
474
475
  }
475
476
  Facet::MaxExclusive => {
476
477
  let inclusive = val.checked_sub(1)?;
477
- range.max = Some(range.max.map_or(inclusive, |existing| existing.min(inclusive)));
478
+ range.max = Some(
479
+ range
480
+ .max
481
+ .map_or(inclusive, |existing| existing.min(inclusive)),
482
+ );
478
483
  }
479
484
  _ => return None,
480
485
  }
@@ -608,15 +613,18 @@ fn emit_subdataprop_transitivity(
608
613
  // C ⊑ DataSome(specific) + DataSome(general) ⊑ D ⇒ C ⊑ D.
609
614
  let closure = closure_sub_dp(&f.sub_data_property);
610
615
  for (class_iri, specific_dp) in &f.class_some {
611
- let Some(supers) = closure.get(specific_dp) else { continue };
616
+ let Some(supers) = closure.get(specific_dp) else {
617
+ continue;
618
+ };
612
619
  for general_dp in supers {
613
- let Some(super_classes) = f.some_super.get(general_dp) else { continue };
620
+ let Some(super_classes) = f.some_super.get(general_dp) else {
621
+ continue;
622
+ };
614
623
  for d_iri in super_classes {
615
624
  if class_iri == d_iri {
616
625
  continue;
617
626
  }
618
- if let (Some(c_id), Some(d_id)) =
619
- (vocab.class_id(class_iri), vocab.class_id(d_iri))
627
+ if let (Some(c_id), Some(d_id)) = (vocab.class_id(class_iri), vocab.class_id(d_iri))
620
628
  {
621
629
  out.push(Axiom::SubClassOf {
622
630
  sub: atomic_id(c_id),
@@ -698,20 +706,22 @@ fn _unused_datarange<A: ForIRI>(_: &DataRange<A>) {}
698
706
  mod tests {
699
707
  use super::*;
700
708
  use crate::convert::convert_ontology;
701
- use horned_owl::io::ofn::reader::read as read_ofn;
702
709
  use horned_owl::io::ParserConfiguration;
710
+ use horned_owl::io::ofn::reader::read as read_ofn;
703
711
  use horned_owl::model::RcStr;
704
712
  use horned_owl::ontology::set::SetOntology;
705
713
  use std::io::Cursor;
706
714
 
707
715
  fn parse_str(src: &str) -> SetOntology<RcStr> {
708
716
  let mut r = Cursor::new(src);
709
- read_ofn(&mut r, ParserConfiguration::default()).unwrap().0
717
+ read_ofn(&mut r, ParserConfiguration::default())
718
+ .expect("test fixture parses")
719
+ .0
710
720
  }
711
721
 
712
722
  #[test]
713
723
  fn extracts_functional_dp_min_clash() {
714
- let src = r#"Prefix(:=<http://t/>)
724
+ let src = r"Prefix(:=<http://t/>)
715
725
  Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)
716
726
  Ontology(<http://t/x>
717
727
  Declaration(Class(:HasTwoAges))
@@ -719,19 +729,22 @@ Ontology(<http://t/x>
719
729
  FunctionalDataProperty(:age)
720
730
  SubClassOf(:HasTwoAges DataMinCardinality(2 :age))
721
731
  )
722
- "#;
732
+ ";
723
733
  let onto = parse_str(src);
724
734
  let facts = extract_facts(&onto);
725
735
  assert!(facts.functional_dps.contains("http://t/age"));
726
736
  assert_eq!(
727
- facts.class_min.get(&("http://t/HasTwoAges".to_string(), "http://t/age".to_string())),
737
+ facts.class_min.get(&(
738
+ "http://t/HasTwoAges".to_string(),
739
+ "http://t/age".to_string()
740
+ )),
728
741
  Some(&2)
729
742
  );
730
743
  }
731
744
 
732
745
  #[test]
733
746
  fn derives_functional_dp_min_unsat_in_convert() {
734
- let src = r#"Prefix(:=<http://t/>)
747
+ let src = r"Prefix(:=<http://t/>)
735
748
  Prefix(xsd:=<http://www.w3.org/2001/XMLSchema#>)
736
749
  Ontology(<http://t/x>
737
750
  Declaration(Class(:HasTwoAges))
@@ -739,15 +752,22 @@ Ontology(<http://t/x>
739
752
  FunctionalDataProperty(:age)
740
753
  SubClassOf(:HasTwoAges DataMinCardinality(2 :age))
741
754
  )
742
- "#;
755
+ ";
743
756
  let onto = parse_str(src);
744
- let mut internal = convert_ontology(&onto).unwrap();
745
- let has_two_ages = internal.vocabulary.class_id("http://t/HasTwoAges")
757
+ let mut internal = convert_ontology(&onto).expect("test ontology converts");
758
+ let has_two_ages = internal
759
+ .vocabulary
760
+ .class_id("http://t/HasTwoAges")
746
761
  .expect("HasTwoAges interned");
747
762
  let bot = internal.concepts.bot();
748
763
  let sub_concept = internal.concepts.atomic(has_two_ages);
749
- let found_unsat = internal.axioms.iter().any(|ax| matches!(ax,
750
- Axiom::SubClassOf { sub, sup } if *sub == sub_concept && *sup == bot));
751
- assert!(found_unsat, "D4: HasTwoAges Bot should be derived from Functional + DataMin");
764
+ let found_unsat = internal.axioms.iter().any(|ax| {
765
+ matches!(ax,
766
+ Axiom::SubClassOf { sub, sup } if *sub == sub_concept && *sup == bot)
767
+ });
768
+ assert!(
769
+ found_unsat,
770
+ "D4: HasTwoAges ⊑ Bot should be derived from Functional + DataMin"
771
+ );
752
772
  }
753
773
  }
@@ -599,7 +599,10 @@ mod tests {
599
599
  first, second,
600
600
  "bot_id() before Bot interning must be stable across pool growth"
601
601
  );
602
- assert!(first.is_none(), "bot_id() returns None before Bot is interned");
602
+ assert!(
603
+ first.is_none(),
604
+ "bot_id() returns None before Bot is interned"
605
+ );
603
606
 
604
607
  // Intern Bot. Both subsequent calls must return the same Some(id).
605
608
  let _bot_id = pool.bot();
@@ -1,5 +1,5 @@
1
1
  //! `classify` / `classify_bytes` top-level functions + the
2
- //! `Classification` PyO3 class that wraps `owl_dl_reasoner::Classification`.
2
+ //! `Classification` `PyO3` class that wraps `owl_dl_reasoner::Classification`.
3
3
 
4
4
  use owl_dl_reasoner::{Classification as RsClassification, classify as rs_classify};
5
5
  use pyo3::prelude::*;
@@ -32,7 +32,7 @@ impl PyClassification {
32
32
  }
33
33
 
34
34
  /// True iff the whole ontology was flagged inconsistent.
35
- /// (Set by the Phase-A1 ABox consistency check.)
35
+ /// (Set by the Phase-A1 `ABox` consistency check.)
36
36
  #[getter]
37
37
  fn inconsistent(&self) -> bool {
38
38
  self.inner.stats().inconsistent
@@ -17,7 +17,12 @@ use pyo3::create_exception;
17
17
  use pyo3::exceptions::PyException;
18
18
  use pyo3::prelude::*;
19
19
 
20
- create_exception!(rustdl, RustdlError, PyException, "Base exception for all rustdl errors.");
20
+ create_exception!(
21
+ rustdl,
22
+ RustdlError,
23
+ PyException,
24
+ "Base exception for all rustdl errors."
25
+ );
21
26
  create_exception!(rustdl, ParseError, RustdlError, "OWL parser failure.");
22
27
  create_exception!(
23
28
  rustdl,
@@ -41,10 +46,7 @@ pub(crate) fn register(m: &Bound<'_, PyModule>) -> PyResult<()> {
41
46
  "UnsupportedAxiomError",
42
47
  m.py().get_type::<UnsupportedAxiomError>(),
43
48
  )?;
44
- m.add(
45
- "UnknownClassError",
46
- m.py().get_type::<UnknownClassError>(),
47
- )?;
49
+ m.add("UnknownClassError", m.py().get_type::<UnknownClassError>())?;
48
50
  Ok(())
49
51
  }
50
52
 
@@ -1,6 +1,6 @@
1
1
  //! Python bindings for the rustdl OWL DL reasoner.
2
2
  //!
3
- //! Built with PyO3 + maturin. Distributed on PyPI as `rustdl`;
3
+ //! Built with `PyO3` + maturin. Distributed on `PyPI` as `rustdl`;
4
4
  //! imported in Python as `import rustdl`. See the spec at
5
5
  //! `docs/superpowers/specs/2026-06-04-python-bindings-design.md`.
6
6
 
@@ -13,16 +13,12 @@ use crate::load;
13
13
  /// - Pairs involving `owl:Thing` or `owl:Nothing`
14
14
  /// - Pairs from unsatisfiable classes (which trivially subsume all)
15
15
  #[pyfunction]
16
- pub(crate) fn materialize_inferred_subclass_axioms(
17
- path: &str,
18
- ) -> PyResult<Vec<(String, String)>> {
16
+ pub(crate) fn materialize_inferred_subclass_axioms(path: &str) -> PyResult<Vec<(String, String)>> {
19
17
  let ontology = load::load_path(path)?;
20
18
  let classification = owl_dl_reasoner::classify(&ontology).map_err(reason_error_to_py)?;
21
19
  let classes = classification.classes();
22
- let unsat: std::collections::HashSet<&str> = classification
23
- .unsatisfiable_classes()
24
- .into_iter()
25
- .collect();
20
+ let unsat: std::collections::HashSet<&str> =
21
+ classification.unsatisfiable_classes().into_iter().collect();
26
22
  let mut out = Vec::new();
27
23
  for sub in classes {
28
24
  if unsat.contains(sub.as_str()) {
@@ -53,15 +49,13 @@ pub(crate) fn materialize_inferred_subclass_axioms(
53
49
  /// Returns every (class IRI, individual IRI) pair `(c, i)` such that
54
50
  /// `ClassAssertion(c, i)` is entailed.
55
51
  #[pyfunction]
56
- pub(crate) fn materialize_inferred_class_assertions(
57
- path: &str,
58
- ) -> PyResult<Vec<(String, String)>> {
52
+ pub(crate) fn materialize_inferred_class_assertions(path: &str) -> PyResult<Vec<(String, String)>> {
59
53
  let ontology = load::load_path(path)?;
60
54
  let realization = owl_dl_reasoner::realize(&ontology).map_err(reason_error_to_py)?;
61
55
  let mut out = Vec::new();
62
56
  for ind in realization.individuals() {
63
57
  for c in realization.most_specific_types(ind) {
64
- out.push((c.to_string(), ind.to_string()));
58
+ out.push((c.clone(), ind.clone()));
65
59
  }
66
60
  }
67
61
  Ok(out)
@@ -27,11 +27,7 @@ pub(crate) fn is_subclass_of(path: &str, sub: &str, sup: &str) -> PyResult<bool>
27
27
  }
28
28
 
29
29
  #[pyfunction]
30
- pub(crate) fn is_instance_of(
31
- path: &str,
32
- class_iri: &str,
33
- individual_iri: &str,
34
- ) -> PyResult<bool> {
30
+ pub(crate) fn is_instance_of(path: &str, class_iri: &str, individual_iri: &str) -> PyResult<bool> {
35
31
  let ontology = load::load_path(path)?;
36
32
  owl_dl_reasoner::is_instance_of(&ontology, class_iri, individual_iri)
37
33
  .map_err(reason_error_to_py)
@@ -50,22 +46,11 @@ pub(crate) fn realize(path: &str) -> PyResult<HashMap<String, Vec<String>>> {
50
46
  Ok(realization_to_dict(&rs_realization))
51
47
  }
52
48
 
53
- fn realization_to_dict(
54
- realization: &owl_dl_reasoner::Realization,
55
- ) -> HashMap<String, Vec<String>> {
49
+ fn realization_to_dict(realization: &owl_dl_reasoner::Realization) -> HashMap<String, Vec<String>> {
56
50
  realization
57
51
  .individuals()
58
52
  .iter()
59
- .map(|ind| {
60
- (
61
- ind.clone(),
62
- realization
63
- .most_specific_types(ind)
64
- .iter()
65
- .map(|s| s.clone())
66
- .collect(),
67
- )
68
- })
53
+ .map(|ind| (ind.clone(), realization.most_specific_types(ind).to_vec()))
69
54
  .collect()
70
55
  }
71
56