rustdl 0.4.2__tar.gz → 0.4.4__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 (291) hide show
  1. {rustdl-0.4.2 → rustdl-0.4.4}/Cargo.lock +10 -10
  2. {rustdl-0.4.2 → rustdl-0.4.4}/Cargo.toml +7 -7
  3. {rustdl-0.4.2 → rustdl-0.4.4}/PKG-INFO +1 -1
  4. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/README.md +22 -0
  5. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/clause.rs +33 -8
  6. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-datatypes/README.md +22 -0
  7. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/src/load.rs +56 -20
  8. rustdl-0.4.4/crates/owl-dl-py/src/queries.rs +235 -0
  9. rustdl-0.4.4/crates/owl-dl-py/tests/python/test_queries.py +204 -0
  10. {rustdl-0.4.2/crates/owl-dl-saturation → rustdl-0.4.4/crates/owl-dl-reasoner}/README.md +22 -0
  11. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/abox_saturation.rs +88 -0
  12. rustdl-0.4.4/crates/owl-dl-reasoner/src/class_expr_query.rs +230 -0
  13. rustdl-0.4.4/crates/owl-dl-reasoner/src/disjointness.rs +184 -0
  14. rustdl-0.4.4/crates/owl-dl-reasoner/src/individuals.rs +241 -0
  15. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/lib.rs +358 -0
  16. rustdl-0.4.4/crates/owl-dl-reasoner/src/property_classify.rs +106 -0
  17. rustdl-0.4.4/crates/owl-dl-reasoner/src/property_values.rs +498 -0
  18. rustdl-0.4.4/crates/owl-dl-reasoner/tests/class_expr.rs +135 -0
  19. rustdl-0.4.4/crates/owl-dl-reasoner/tests/class_expr_oracle.rs +182 -0
  20. rustdl-0.4.4/crates/owl-dl-reasoner/tests/disjoint_nodecap.rs +100 -0
  21. rustdl-0.4.4/crates/owl-dl-reasoner/tests/disjoint_oracle.rs +213 -0
  22. rustdl-0.4.4/crates/owl-dl-reasoner/tests/disjoint_union_covering.rs +154 -0
  23. rustdl-0.4.4/crates/owl-dl-reasoner/tests/fixtures/class_expr/ce-materialized.owx +92 -0
  24. rustdl-0.4.4/crates/owl-dl-reasoner/tests/fixtures/class_expr/ce.ofn +12 -0
  25. rustdl-0.4.4/crates/owl-dl-reasoner/tests/fixtures/disjoint/dj-disjoint.owx +71 -0
  26. rustdl-0.4.4/crates/owl-dl-reasoner/tests/fixtures/disjoint/dj.ofn +16 -0
  27. rustdl-0.4.4/crates/owl-dl-reasoner/tests/fixtures/individuals/inds.ofn +30 -0
  28. rustdl-0.4.4/crates/owl-dl-reasoner/tests/fixtures/property_values/pv-materialized.owx +127 -0
  29. rustdl-0.4.4/crates/owl-dl-reasoner/tests/fixtures/property_values/pv.ofn +19 -0
  30. rustdl-0.4.4/crates/owl-dl-reasoner/tests/individuals_nodecap.rs +93 -0
  31. rustdl-0.4.4/crates/owl-dl-reasoner/tests/individuals_oracle.rs +310 -0
  32. rustdl-0.4.4/crates/owl-dl-reasoner/tests/property_hierarchy.rs +112 -0
  33. rustdl-0.4.4/crates/owl-dl-reasoner/tests/property_values_oracle.rs +456 -0
  34. {rustdl-0.4.2/crates/owl-dl-reasoner → rustdl-0.4.4/crates/owl-dl-saturation}/README.md +22 -0
  35. rustdl-0.4.4/crates/owl-dl-tableau/README.md +205 -0
  36. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/__init__.py +116 -0
  37. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/__init__.pyi +81 -0
  38. rustdl-0.4.2/crates/owl-dl-py/src/queries.rs +0 -71
  39. rustdl-0.4.2/crates/owl-dl-py/tests/python/test_queries.py +0 -43
  40. rustdl-0.4.2/crates/owl-dl-tableau/README.md +0 -183
  41. {rustdl-0.4.2 → rustdl-0.4.4}/README.md +0 -0
  42. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/Cargo.toml +0 -0
  43. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/absorb.rs +0 -0
  44. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/approx_saturation.rs +0 -0
  45. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/convert.rs +0 -0
  46. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/convert_back.rs +0 -0
  47. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/data_axioms.rs +0 -0
  48. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/definitions.rs +0 -0
  49. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/disjunction_existential.rs +0 -0
  50. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/disjunctive_antecedent.rs +0 -0
  51. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/ir.rs +0 -0
  52. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/lib.rs +0 -0
  53. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/locality.rs +0 -0
  54. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/normalize.rs +0 -0
  55. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/ontology.rs +0 -0
  56. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/residual_trigger.rs +0 -0
  57. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/role_hierarchy.rs +0 -0
  58. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/told.rs +0 -0
  59. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/transform.rs +0 -0
  60. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/src/vocab.rs +0 -0
  61. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/tests/concept_pool_proptest.proptest-regressions +0 -0
  62. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/tests/concept_pool_proptest.rs +0 -0
  63. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/tests/convert_round_trip_proptest.rs +0 -0
  64. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-core/tests/role_hierarchy_proptest.rs +0 -0
  65. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-datatypes/Cargo.toml +0 -0
  66. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-datatypes/src/lib.rs +0 -0
  67. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/.gitignore +0 -0
  68. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/Cargo.toml +0 -0
  69. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/README.md +0 -0
  70. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/.gitignore +0 -0
  71. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/README.md +0 -0
  72. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/__init__.py +0 -0
  73. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/fixtures/recorded_replies_clash.json +0 -0
  74. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/fixtures/seed.ofn +0 -0
  75. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/gate.py +0 -0
  76. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/llm.py +0 -0
  77. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/loop.py +0 -0
  78. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out/candidate.ofn +0 -0
  79. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out/current.ofn +0 -0
  80. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out/metrics.md +0 -0
  81. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out/transcript.jsonl +0 -0
  82. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out-clash/candidate.ofn +0 -0
  83. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out-clash/current.ofn +0 -0
  84. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out-clash/metrics.md +0 -0
  85. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/out-clash/transcript.jsonl +0 -0
  86. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/requirements.txt +0 -0
  87. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/run.py +0 -0
  88. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/tests/__init__.py +0 -0
  89. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/tests/test_gate.py +0 -0
  90. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/tests/test_llm.py +0 -0
  91. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/tests/test_loop.py +0 -0
  92. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/tests/test_run.py +0 -0
  93. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/examples/nesy_loop/tests/test_seed.py +0 -0
  94. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/src/classify.rs +0 -0
  95. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/src/errors.rs +0 -0
  96. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/src/explain.rs +0 -0
  97. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/src/lib.rs +0 -0
  98. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/src/materialize.rs +0 -0
  99. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/conftest.py +0 -0
  100. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_classify.py +0 -0
  101. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_examples.py +0 -0
  102. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_explain.py +0 -0
  103. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_manchester.py +0 -0
  104. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_materialize.py +0 -0
  105. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_results.py +0 -0
  106. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_smoke.py +0 -0
  107. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_soundness.py +0 -0
  108. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_stubs.py +0 -0
  109. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-py/tests/python/test_tutorial.py +0 -0
  110. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/Cargo.toml +0 -0
  111. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/examples/embed_classify.rs +0 -0
  112. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/abox_check.rs +0 -0
  113. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/classify.rs +0 -0
  114. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/diagnose.rs +0 -0
  115. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/justify.rs +0 -0
  116. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/laconic.rs +0 -0
  117. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/model_cache.rs +0 -0
  118. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/oracle_diff.rs +0 -0
  119. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/realize.rs +0 -0
  120. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/repair.rs +0 -0
  121. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/src/union_find.rs +0 -0
  122. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/abox_chain_index.rs +0 -0
  123. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/abox_consistency.rs +0 -0
  124. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/abox_disjoint_index.rs +0 -0
  125. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/abox_sat_fp_probe.rs +0 -0
  126. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/abox_saturation.rs +0 -0
  127. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/adaptive_budget.rs +0 -0
  128. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/anon349_diagnostic.rs +0 -0
  129. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/anonymous_individuals_identity.rs +0 -0
  130. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/anonymous_individuals_reporting.rs +0 -0
  131. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/approx_saturation_forced_disjunct.rs +0 -0
  132. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/backfold.rs +0 -0
  133. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/backjump_precision_gate.rs +0 -0
  134. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/bjgap_dl_tail.rs +0 -0
  135. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/blocked_disjunction_soundness.rs +0 -0
  136. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/blocked_disjunction_termination.rs +0 -0
  137. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/cardinality_disjunct_atoms.rs +0 -0
  138. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/classify_concrete_domain.rs +0 -0
  139. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/classify_defined_sweep.rs +0 -0
  140. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/classify_inverse_domain.rs +0 -0
  141. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/completeness_contract.rs +0 -0
  142. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/concrete_domain_clash.rs +0 -0
  143. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/data_properties.rs +0 -0
  144. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/data_property_assertions.rs +0 -0
  145. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/datatype_completeness.rs +0 -0
  146. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/datatype_inconsistency.rs +0 -0
  147. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/datatype_value_membership.rs +0 -0
  148. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/decide_pair_probe.rs +0 -0
  149. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/diagnose_partition.rs +0 -0
  150. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/disjunctive_existential_marker_fp.rs +0 -0
  151. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/domain_gci_completeness.rs +0 -0
  152. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/existential_successors.rs +0 -0
  153. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/exists_top_filler.rs +0 -0
  154. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_direct_bot.ofn +0 -0
  155. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_no_bot.ofn +0 -0
  156. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_different_individuals.ofn +0 -0
  157. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_types.ofn +0 -0
  158. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa.ofn +0 -0
  159. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa_no_clash.ofn +0 -0
  160. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_consistent.ofn +0 -0
  161. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_inconsistent.ofn +0 -0
  162. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_different.ofn +0 -0
  163. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_without_different.ofn +0 -0
  164. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_diff.ofn +0 -0
  165. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_same_target.ofn +0 -0
  166. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric.ofn +0 -0
  167. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric_one_way.ofn +0 -0
  168. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive.ofn +0 -0
  169. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive_distinct.ofn +0 -0
  170. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_compatible.ofn +0 -0
  171. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_disjoint.ofn +0 -0
  172. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_cardinality_disjoint.ofn +0 -0
  173. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain-classified.owx +0 -0
  174. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain.ofn +0 -0
  175. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition-classified.owx +0 -0
  176. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition.ofn +0 -0
  177. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_facet.ofn +0 -0
  178. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/functional_data_property.ofn +0 -0
  179. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property-classified.owx +0 -0
  180. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property.ofn +0 -0
  181. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/functional-equiv-some-bug.ofn +0 -0
  182. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/materialize/rbox-materialized.owx +0 -0
  183. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/materialize/rbox.ofn +0 -0
  184. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/named-pizza-country-bug.ofn +0 -0
  185. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-01.txt +0 -0
  186. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-02.txt +0 -0
  187. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-03.txt +0 -0
  188. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-04.txt +0 -0
  189. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-05.txt +0 -0
  190. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-06.txt +0 -0
  191. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-07.txt +0 -0
  192. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-08.txt +0 -0
  193. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.hermit.owx +0 -0
  194. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.ofn +0 -0
  195. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.owx +0 -0
  196. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.hermit.owx +0 -0
  197. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.ofn +0 -0
  198. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.owx +0 -0
  199. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.hermit.owx +0 -0
  200. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.ofn +0 -0
  201. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.owx +0 -0
  202. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.hermit.owx +0 -0
  203. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.ofn +0 -0
  204. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.owx +0 -0
  205. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.hermit.owx +0 -0
  206. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.ofn +0 -0
  207. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.owx +0 -0
  208. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.hermit.owx +0 -0
  209. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.ofn +0 -0
  210. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.owx +0 -0
  211. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.hermit.owx +0 -0
  212. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.ofn +0 -0
  213. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.owx +0 -0
  214. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.hermit.owx +0 -0
  215. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.ofn +0 -0
  216. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.owx +0 -0
  217. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/phase2b/phase2b-verdicts.log +0 -0
  218. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/regression/chain_closure_consistent.ofn +0 -0
  219. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/regression/issue35_nominal_cycle_hang.ofn +0 -0
  220. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/regression/issue35_tableau_depth_hang.ofn +0 -0
  221. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/fixtures/regression/realize_inconsistent.ofn +0 -0
  222. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/funcmerge_inverse.rs +0 -0
  223. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/funcmerge_scaling.rs +0 -0
  224. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/functional_enforcement.rs +0 -0
  225. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/inverse_cardinality_soundness.rs +0 -0
  226. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/inverse_symmetric_domain.rs +0 -0
  227. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/issue35_nominal_cycle_hang.rs +0 -0
  228. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/issue35_tableau_depth_hang.rs +0 -0
  229. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/justification.rs +0 -0
  230. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/konclude_closure_diff.rs +0 -0
  231. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/label_heuristic_canary.rs +0 -0
  232. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/laconic_justification.rs +0 -0
  233. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/materialize_oracle.rs +0 -0
  234. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/node_cap.rs +0 -0
  235. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/nominal_cardinality_realize.rs +0 -0
  236. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/object_has_self_domain.rs +0 -0
  237. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/phase2c_pair_06_canary.rs +0 -0
  238. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/precompletion_probe_gate.rs +0 -0
  239. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/property_assertions.rs +0 -0
  240. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/real_ontology_corpus.rs +0 -0
  241. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/realize_inconsistent_shortcircuit.rs +0 -0
  242. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/repair_suggestions.rs +0 -0
  243. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/sat_lookahead_gate.rs +0 -0
  244. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/saturator_disjointness.rs +0 -0
  245. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/seed_probe_gate.rs +0 -0
  246. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/shadow_dep_gate.rs +0 -0
  247. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/snapshot_phase0_canary.rs +0 -0
  248. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/sp2_nogood_gate.rs +0 -0
  249. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/sparse_classification_identity.rs +0 -0
  250. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/subproperty_axioms.rs +0 -0
  251. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/tautology_skip_canary.rs +0 -0
  252. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/tbox_only_classify.rs +0 -0
  253. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/top_subsumes_all.rs +0 -0
  254. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/value_type_disjoint_canary.rs +0 -0
  255. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/value_type_disjoint_probe.rs +0 -0
  256. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-reasoner/tests/wedge_consistency.rs +0 -0
  257. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-saturation/Cargo.toml +0 -0
  258. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-saturation/src/lib.rs +0 -0
  259. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-saturation/src/proof.rs +0 -0
  260. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-saturation/src/seed_sat.rs +0 -0
  261. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-saturation/tests/fixtures/phase2a_functional_role_canary.ofn +0 -0
  262. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-saturation/tests/fixtures/phase2b_compound_existential_canary.ofn +0 -0
  263. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/Cargo.toml +0 -0
  264. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/counters.rs +0 -0
  265. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/deps.rs +0 -0
  266. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/graph.rs +0 -0
  267. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/hyper.rs +0 -0
  268. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/lib.rs +0 -0
  269. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/replay.rs +0 -0
  270. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/rules.rs +0 -0
  271. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/saturate.rs +0 -0
  272. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/search.rs +0 -0
  273. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/shadow_measures.rs +0 -0
  274. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/snapshot.rs +0 -0
  275. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/src/trail.rs +0 -0
  276. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/backprop_risk.rs +0 -0
  277. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/nominal_first_bounded.rs +0 -0
  278. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/nominal_first_bounded_divergence_canary.rs +0 -0
  279. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/replay_driver.rs +0 -0
  280. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/replay_roundtrip.rs +0 -0
  281. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/sat_lookahead_drop.rs +0 -0
  282. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/semantic_branching.rs +0 -0
  283. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/shadow_dep_probe.rs +0 -0
  284. {rustdl-0.4.2 → rustdl-0.4.4}/crates/owl-dl-tableau/tests/snapshot_capture.rs +0 -0
  285. {rustdl-0.4.2 → rustdl-0.4.4}/pyproject.toml +0 -0
  286. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/_results.py +0 -0
  287. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/data/pizza.owl.gz +0 -0
  288. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/data/sio.owl.gz +0 -0
  289. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/data/sulo.owl.gz +0 -0
  290. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/examples.py +0 -0
  291. {rustdl-0.4.2 → rustdl-0.4.4}/python/rustdl/py.typed +0 -0
@@ -1018,7 +1018,7 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
1018
1018
 
1019
1019
  [[package]]
1020
1020
  name = "owl-dl-bench"
1021
- version = "0.4.2"
1021
+ version = "0.4.4"
1022
1022
  dependencies = [
1023
1023
  "anyhow",
1024
1024
  "clap",
@@ -1038,7 +1038,7 @@ dependencies = [
1038
1038
 
1039
1039
  [[package]]
1040
1040
  name = "owl-dl-cb"
1041
- version = "0.4.2"
1041
+ version = "0.4.4"
1042
1042
  dependencies = [
1043
1043
  "hashbrown 0.15.5",
1044
1044
  "owl-dl-core",
@@ -1046,7 +1046,7 @@ dependencies = [
1046
1046
 
1047
1047
  [[package]]
1048
1048
  name = "owl-dl-cli"
1049
- version = "0.4.2"
1049
+ version = "0.4.4"
1050
1050
  dependencies = [
1051
1051
  "anyhow",
1052
1052
  "clap",
@@ -1061,7 +1061,7 @@ dependencies = [
1061
1061
 
1062
1062
  [[package]]
1063
1063
  name = "owl-dl-core"
1064
- version = "0.4.2"
1064
+ version = "0.4.4"
1065
1065
  dependencies = [
1066
1066
  "bitvec",
1067
1067
  "bumpalo",
@@ -1075,7 +1075,7 @@ dependencies = [
1075
1075
 
1076
1076
  [[package]]
1077
1077
  name = "owl-dl-datatypes"
1078
- version = "0.4.2"
1078
+ version = "0.4.4"
1079
1079
  dependencies = [
1080
1080
  "owl-dl-core",
1081
1081
  "proptest",
@@ -1085,7 +1085,7 @@ dependencies = [
1085
1085
 
1086
1086
  [[package]]
1087
1087
  name = "owl-dl-py"
1088
- version = "0.4.2"
1088
+ version = "0.4.4"
1089
1089
  dependencies = [
1090
1090
  "horned-owl",
1091
1091
  "owl-dl-core",
@@ -1096,7 +1096,7 @@ dependencies = [
1096
1096
 
1097
1097
  [[package]]
1098
1098
  name = "owl-dl-reasoner"
1099
- version = "0.4.2"
1099
+ version = "0.4.4"
1100
1100
  dependencies = [
1101
1101
  "anyhow",
1102
1102
  "dashmap",
@@ -1114,7 +1114,7 @@ dependencies = [
1114
1114
 
1115
1115
  [[package]]
1116
1116
  name = "owl-dl-saturation"
1117
- version = "0.4.2"
1117
+ version = "0.4.4"
1118
1118
  dependencies = [
1119
1119
  "dashmap",
1120
1120
  "fixedbitset",
@@ -1130,7 +1130,7 @@ dependencies = [
1130
1130
 
1131
1131
  [[package]]
1132
1132
  name = "owl-dl-tableau"
1133
- version = "0.4.2"
1133
+ version = "0.4.4"
1134
1134
  dependencies = [
1135
1135
  "bitvec",
1136
1136
  "bumpalo",
@@ -2556,7 +2556,7 @@ dependencies = [
2556
2556
 
2557
2557
  [[package]]
2558
2558
  name = "xtask"
2559
- version = "0.4.2"
2559
+ version = "0.4.4"
2560
2560
  dependencies = [
2561
2561
  "anyhow",
2562
2562
  "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.4.2"
6
+ version = "0.4.4"
7
7
  edition = "2024"
8
8
  rust-version = "1.88"
9
9
  license = "Apache-2.0 OR MIT"
@@ -15,12 +15,12 @@ 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.4.2" }
19
- owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.4.2" }
20
- owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.4.2" }
21
- owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.4.2" }
22
- owl-dl-cb = { path = "crates/owl-dl-cb", version = "0.4.2" }
23
- owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.4.2" }
18
+ owl-dl-core = { path = "crates/owl-dl-core", version = "0.4.4" }
19
+ owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.4.4" }
20
+ owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.4.4" }
21
+ owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.4.4" }
22
+ owl-dl-cb = { path = "crates/owl-dl-cb", version = "0.4.4" }
23
+ owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.4.4" }
24
24
 
25
25
  horned-owl = { version = "1.4", default-features = false }
26
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rustdl
3
- Version: 0.4.2
3
+ Version: 0.4.4
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Science/Research
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -5,6 +5,7 @@
5
5
  [![license](https://img.shields.io/badge/license-Apache--2.0%20OR%20MIT-blue)](#licensing)
6
6
  [![Rust](https://img.shields.io/badge/Rust-1.88%2B-orange?logo=rust&logoColor=white)](https://www.rust-lang.org)
7
7
  [![Python](https://img.shields.io/badge/Python-3.10%2B-blue?logo=python&logoColor=white)](https://pypi.org/project/rustdl/)
8
+ [![Protégé plugin](https://img.shields.io/badge/Prot%C3%A9g%C3%A9-plugin-blue)](protege/README.md)
8
9
 
9
10
  A **sound** OWL 2 DL (SROIQ) reasoner in Rust. Konclude-style hybrid: a
10
11
  consequence-based **saturation** engine handles the EL-ish fragment, a
@@ -175,6 +176,27 @@ Any run that hits a bound prints a prominent `INCOMPLETE` warning to stderr.
175
176
  Diagnostics: `RUSTDL_TRACE=1` (one stderr line per search/branch decision);
176
177
  `RUSTDL_COUNTERS=1` with `--features counters` (per-rule call counts).
177
178
 
179
+ ## Protégé plugin
180
+
181
+ rustdl runs as a Protégé Desktop reasoner.
182
+
183
+ **Install:** download `rustdl-protege-<version>.jar` from the
184
+ [latest release](https://github.com/MaastrichtU-IDS/rustdl/releases/latest), drop
185
+ it into Protégé's `plugins/` directory, and restart. Choose **rustdl** under
186
+ Reasoner ▸, then Reasoner ▸ Start reasoner.
187
+
188
+ **Computes (v1):** consistency, the inferred class hierarchy, unsatisfiable
189
+ classes, and class assertions (types / instances). Property hierarchies & values,
190
+ same/different individuals, disjointness, and complex-class-expression queries
191
+ return empty for now.
192
+
193
+ **Config** (JVM system property, else env var): `-Drustdl.bin=…` / `RUSTDL_BIN`
194
+ for a specific binary; `-Drustdl.timeout.seconds=…` / `RUSTDL_TIMEOUT_SECONDS`
195
+ (default 600) for the per-call timeout.
196
+
197
+ Requires Protégé 5.6.x (Java 11+). Build-from-source and the full contract:
198
+ [`protege/README.md`](protege/README.md), [`docs/protege-plugin.md`](docs/protege-plugin.md).
199
+
178
200
  ## Licensing
179
201
 
180
202
  Dual-licensed [Apache-2.0](LICENSE-APACHE) **OR** [MIT](LICENSE-MIT). `horned-owl`
@@ -273,14 +273,10 @@ impl Clausifier {
273
273
  }
274
274
  }
275
275
  Axiom::DisjointUnion { class, members } => {
276
- // class ≡ ⊔members, plus pairwise disjoint members.
277
- let cls_concept_eq = members; // handled below via gci on the union
278
- let _ = cls_concept_eq;
279
- // class ⊑ ⊔members and each member ⊑ class:
280
- // approximate via the union concept if present is
281
- // complex; defer the equivalence half, emit the
282
- // pairwise disjointness which is the load-bearing
283
- // part for unsat detection.
276
+ // class ≡ ⊔members: pairwise disjoint members, each
277
+ // member ⊑ class (Horn), and the covering half
278
+ // class ⊑ ⊔members (a genuine disjunctive-head
279
+ // clause — see the design doc for #40).
284
280
  for i in 0..members.len() {
285
281
  for j in (i + 1)..members.len() {
286
282
  self.next_var = X + 1;
@@ -315,6 +311,35 @@ impl Clausifier {
315
311
  self.defer("disjoint-union-member");
316
312
  }
317
313
  }
314
+ // class ⊑ ⊔members (the previously-deferred covering
315
+ // half): C(X) → D1(X) ∨ … ∨ Dn(X). Sound — a genuine
316
+ // DisjointUnion entailment, so it can only add true
317
+ // subsumptions, never an FP.
318
+ self.next_var = X + 1;
319
+ let mut head = Vec::with_capacity(members.len());
320
+ let mut all_atomic = true;
321
+ for &m in members {
322
+ if let Some(cid) = self.class_id_of(m) {
323
+ head.push(Atom::Class(cid, X));
324
+ } else {
325
+ // Complex member: sound under-approximation —
326
+ // defer the covering clause rather than emit
327
+ // it with a missing disjunct (which would be
328
+ // an unsound *narrower* union).
329
+ all_atomic = false;
330
+ break;
331
+ }
332
+ }
333
+ if all_atomic {
334
+ // Empty members ⇒ head == [] ⇒ `C ⊑ ⊥` (empty
335
+ // union), matching the ⊥-clause convention.
336
+ self.clauses.push(DlClause {
337
+ body: vec![Atom::Class(*class, X)],
338
+ head,
339
+ });
340
+ } else {
341
+ self.defer("disjoint-union-covering");
342
+ }
318
343
  }
319
344
  Axiom::ObjectPropertyDomain { role, domain } => {
320
345
  // ∃role.⊤ ⊑ domain → role(x,y) → domain(x)
@@ -5,6 +5,7 @@
5
5
  [![license](https://img.shields.io/badge/license-Apache--2.0%20OR%20MIT-blue)](#licensing)
6
6
  [![Rust](https://img.shields.io/badge/Rust-1.88%2B-orange?logo=rust&logoColor=white)](https://www.rust-lang.org)
7
7
  [![Python](https://img.shields.io/badge/Python-3.10%2B-blue?logo=python&logoColor=white)](https://pypi.org/project/rustdl/)
8
+ [![Protégé plugin](https://img.shields.io/badge/Prot%C3%A9g%C3%A9-plugin-blue)](protege/README.md)
8
9
 
9
10
  A **sound** OWL 2 DL (SROIQ) reasoner in Rust. Konclude-style hybrid: a
10
11
  consequence-based **saturation** engine handles the EL-ish fragment, a
@@ -175,6 +176,27 @@ Any run that hits a bound prints a prominent `INCOMPLETE` warning to stderr.
175
176
  Diagnostics: `RUSTDL_TRACE=1` (one stderr line per search/branch decision);
176
177
  `RUSTDL_COUNTERS=1` with `--features counters` (per-rule call counts).
177
178
 
179
+ ## Protégé plugin
180
+
181
+ rustdl runs as a Protégé Desktop reasoner.
182
+
183
+ **Install:** download `rustdl-protege-<version>.jar` from the
184
+ [latest release](https://github.com/MaastrichtU-IDS/rustdl/releases/latest), drop
185
+ it into Protégé's `plugins/` directory, and restart. Choose **rustdl** under
186
+ Reasoner ▸, then Reasoner ▸ Start reasoner.
187
+
188
+ **Computes (v1):** consistency, the inferred class hierarchy, unsatisfiable
189
+ classes, and class assertions (types / instances). Property hierarchies & values,
190
+ same/different individuals, disjointness, and complex-class-expression queries
191
+ return empty for now.
192
+
193
+ **Config** (JVM system property, else env var): `-Drustdl.bin=…` / `RUSTDL_BIN`
194
+ for a specific binary; `-Drustdl.timeout.seconds=…` / `RUSTDL_TIMEOUT_SECONDS`
195
+ (default 600) for the per-call timeout.
196
+
197
+ Requires Protégé 5.6.x (Java 11+). Build-from-source and the full contract:
198
+ [`protege/README.md`](protege/README.md), [`docs/protege-plugin.md`](docs/protege-plugin.md).
199
+
178
200
  ## Licensing
179
201
 
180
202
  Dual-licensed [Apache-2.0](LICENSE-APACHE) **OR** [MIT](LICENSE-MIT). `horned-owl`
@@ -1,6 +1,7 @@
1
1
  //! Parse OWL ontologies from a file path or bytes, mapping
2
2
  //! horned-owl parse errors to `ParseError`.
3
3
 
4
+ use horned_owl::curie::PrefixMapping;
4
5
  use horned_owl::io::ParserConfiguration;
5
6
  use horned_owl::io::ofn::reader::read as read_ofn;
6
7
  use horned_owl::io::omn::reader::read as read_omn;
@@ -14,34 +15,47 @@ use std::path::Path;
14
15
 
15
16
  use crate::errors::ParseError;
16
17
 
18
+ /// Detect the parse format from a file path's extension
19
+ /// (`.ofn` | `.owx` | `.rdf` | `.owl` | `.omn`).
20
+ fn format_from_path(path: &str) -> PyResult<&'static str> {
21
+ let ext = Path::new(path)
22
+ .extension()
23
+ .and_then(|s| s.to_str())
24
+ .map(str::to_ascii_lowercase);
25
+ match ext.as_deref() {
26
+ Some("ofn") => Ok("ofn"),
27
+ Some("owx") => Ok("owx"),
28
+ Some("rdf" | "owl") => Ok("rdf-xml"),
29
+ Some("omn") => Ok("omn"),
30
+ Some(other) => Err(ParseError::new_err(format!(
31
+ "unknown extension `.{other}` — pass format= explicitly via classify_bytes() or rename file to .ofn / .owx / .rdf / .omn"
32
+ ))),
33
+ None => Err(ParseError::new_err(format!(
34
+ "no extension on `{path}` — pass format= explicitly via classify_bytes()"
35
+ ))),
36
+ }
37
+ }
38
+
17
39
  /// Parse an ontology from a file path. Format is auto-detected from
18
40
  /// the file extension (`.ofn` | `.owx` | `.rdf` | `.owl` | `.omn`).
19
41
  pub(crate) fn load_path(path: &str) -> PyResult<SetOntology<RcStr>> {
20
42
  let src = std::fs::read_to_string(path)
21
43
  .map_err(|e| ParseError::new_err(format!("read {path}: {e}")))?;
22
- let ext = Path::new(path)
23
- .extension()
24
- .and_then(|s| s.to_str())
25
- .map(str::to_ascii_lowercase);
26
- let format = match ext.as_deref() {
27
- Some("ofn") => "ofn",
28
- Some("owx") => "owx",
29
- Some("rdf" | "owl") => "rdf-xml",
30
- Some("omn") => "omn",
31
- Some(other) => {
32
- return Err(ParseError::new_err(format!(
33
- "unknown extension `.{other}` — pass format= explicitly via classify_bytes() or rename file to .ofn / .owx / .rdf / .omn"
34
- )));
35
- }
36
- None => {
37
- return Err(ParseError::new_err(format!(
38
- "no extension on `{path}` — pass format= explicitly via classify_bytes()"
39
- )));
40
- }
41
- };
44
+ let format = format_from_path(path)?;
42
45
  parse_with_format(&src, format)
43
46
  }
44
47
 
48
+ /// Like [`load_path`], but also returns the [`PrefixMapping`] the OFN/OWX/OMN
49
+ /// reader collected — used to resolve Manchester class-expression strings
50
+ /// (e.g. `:A`) against the ontology's own prefixes. The RDF/XML reader does
51
+ /// not expose a prefix map, so that path returns `PrefixMapping::default()`.
52
+ pub(crate) fn load_path_with_pm(path: &str) -> PyResult<(SetOntology<RcStr>, PrefixMapping)> {
53
+ let src = std::fs::read_to_string(path)
54
+ .map_err(|e| ParseError::new_err(format!("read {path}: {e}")))?;
55
+ let format = format_from_path(path)?;
56
+ parse_with_format_pm(&src, format)
57
+ }
58
+
45
59
  /// Parse from bytes with an explicit format string.
46
60
  pub(crate) fn load_bytes(data: &[u8], format: &str) -> PyResult<SetOntology<RcStr>> {
47
61
  let src = std::str::from_utf8(data)
@@ -49,6 +63,28 @@ pub(crate) fn load_bytes(data: &[u8], format: &str) -> PyResult<SetOntology<RcSt
49
63
  parse_with_format(src, format)
50
64
  }
51
65
 
66
+ fn parse_with_format_pm(src: &str, format: &str) -> PyResult<(SetOntology<RcStr>, PrefixMapping)> {
67
+ let mut reader = Cursor::new(src);
68
+ let cfg = ParserConfiguration::default();
69
+ let result = match format {
70
+ "ofn" => read_ofn(&mut reader, cfg).map(|(o, pm): (SetOntology<RcStr>, _)| (o, pm)),
71
+ "owx" => read_owx(&mut reader, cfg).map(|(o, pm): (SetOntology<RcStr>, _)| (o, pm)),
72
+ // rdf::reader::read exposes no PrefixMapping; use the default (empty) one.
73
+ "rdf-xml" | "rdf" => {
74
+ read_rdf(&mut reader, cfg).map(|(o, _)| (o.into(), PrefixMapping::default()))
75
+ }
76
+ "omn" | "manchester" => {
77
+ read_omn(&mut reader, cfg).map(|(o, pm): (SetOntology<RcStr>, _)| (o, pm))
78
+ }
79
+ other => {
80
+ return Err(ParseError::new_err(format!(
81
+ "unknown format `{other}` — expected one of: ofn, owx, rdf-xml, omn"
82
+ )));
83
+ }
84
+ };
85
+ result.map_err(|e| ParseError::new_err(format!("parse {format}: {e}")))
86
+ }
87
+
52
88
  fn parse_with_format(src: &str, format: &str) -> PyResult<SetOntology<RcStr>> {
53
89
  let mut reader = Cursor::new(src);
54
90
  let cfg = ParserConfiguration::default();
@@ -0,0 +1,235 @@
1
+ //! Top-level query bindings: consistency, satisfiability, subsumption,
2
+ //! instance checks, realization.
3
+
4
+ use std::collections::HashMap;
5
+
6
+ use pyo3::prelude::*;
7
+
8
+ use crate::errors::reason_error_to_py;
9
+ use crate::load;
10
+
11
+ /// True iff the ontology at `path` is consistent.
12
+ #[pyfunction]
13
+ pub(crate) fn is_consistent(path: &str) -> PyResult<bool> {
14
+ let ontology = load::load_path(path)?;
15
+ owl_dl_reasoner::is_consistent(&ontology).map_err(reason_error_to_py)
16
+ }
17
+
18
+ /// True iff `class_iri` is satisfiable (not ⊑ ⊥).
19
+ #[pyfunction]
20
+ pub(crate) fn is_class_satisfiable(path: &str, class_iri: &str) -> PyResult<bool> {
21
+ let ontology = load::load_path(path)?;
22
+ owl_dl_reasoner::is_class_satisfiable(&ontology, class_iri).map_err(reason_error_to_py)
23
+ }
24
+
25
+ /// True iff `sub ⊑ sup` is entailed.
26
+ #[pyfunction]
27
+ pub(crate) fn is_subclass_of(path: &str, sub: &str, sup: &str) -> PyResult<bool> {
28
+ let ontology = load::load_path(path)?;
29
+ owl_dl_reasoner::is_subclass_of(&ontology, sub, sup).map_err(reason_error_to_py)
30
+ }
31
+
32
+ /// True iff `individual_iri` is an instance of `class_iri`.
33
+ #[pyfunction]
34
+ pub(crate) fn is_instance_of(path: &str, class_iri: &str, individual_iri: &str) -> PyResult<bool> {
35
+ let ontology = load::load_path(path)?;
36
+ owl_dl_reasoner::is_instance_of(&ontology, class_iri, individual_iri)
37
+ .map_err(reason_error_to_py)
38
+ }
39
+
40
+ /// Named individuals entailed to be instances of `class_iri`.
41
+ #[pyfunction]
42
+ pub(crate) fn instances_of(path: &str, class_iri: &str) -> PyResult<Vec<String>> {
43
+ let ontology = load::load_path(path)?;
44
+ owl_dl_reasoner::instances_of(&ontology, class_iri).map_err(reason_error_to_py)
45
+ }
46
+
47
+ /// Map each named individual to its most-specific entailed types.
48
+ #[pyfunction]
49
+ pub(crate) fn realize(path: &str) -> PyResult<HashMap<String, Vec<String>>> {
50
+ let ontology = load::load_path(path)?;
51
+ let rs_realization = owl_dl_reasoner::realize(&ontology).map_err(reason_error_to_py)?;
52
+ Ok(realization_to_dict(&rs_realization))
53
+ }
54
+
55
+ fn realization_to_dict(realization: &owl_dl_reasoner::Realization) -> HashMap<String, Vec<String>> {
56
+ realization
57
+ .individuals()
58
+ .iter()
59
+ .map(|ind| (ind.clone(), realization.most_specific_types(ind).to_vec()))
60
+ .collect()
61
+ }
62
+
63
+ /// Entailed disjoint named-class pairs `(c, d)` — `C ⊓ D` is proven
64
+ /// unsatisfiable — plus a completeness flag. Bounded by a 1s per-pair
65
+ /// deadline. The Python-level wrapper (`__init__.py`) unpacks the tuple,
66
+ /// warns on `incomplete`, and returns just the pair list (see
67
+ /// `IncompleteQueryWarning`).
68
+ #[pyfunction]
69
+ pub(crate) fn disjoint_classes(path: &str) -> PyResult<(Vec<(String, String)>, bool)> {
70
+ let ontology = load::load_path(path)?;
71
+ owl_dl_reasoner::disjoint_classes(&ontology, Some(std::time::Duration::from_secs(1)))
72
+ .map(|d| (d.pairs().to_vec(), d.incomplete()))
73
+ .map_err(reason_error_to_py)
74
+ }
75
+
76
+ /// Told-disjoint object property pairs `(a, b)`.
77
+ #[pyfunction]
78
+ pub(crate) fn disjoint_object_properties(path: &str) -> PyResult<Vec<(String, String)>> {
79
+ let ontology = load::load_path(path)?;
80
+ owl_dl_reasoner::disjoint_object_properties(&ontology).map_err(reason_error_to_py)
81
+ }
82
+
83
+ /// Told-disjoint data property pairs `(a, b)`.
84
+ #[pyfunction]
85
+ pub(crate) fn disjoint_data_properties(path: &str) -> PyResult<Vec<(String, String)>> {
86
+ let ontology = load::load_path(path)?;
87
+ owl_dl_reasoner::disjoint_data_properties(&ontology).map_err(reason_error_to_py)
88
+ }
89
+
90
+ /// Inferred object property hierarchy: `(equivalent_groups, direct_subsumptions)`.
91
+ #[pyfunction]
92
+ #[allow(clippy::type_complexity)]
93
+ pub(crate) fn object_property_hierarchy(
94
+ path: &str,
95
+ ) -> PyResult<(Vec<Vec<String>>, Vec<(String, String)>)> {
96
+ let o = load::load_path(path)?;
97
+ let c = owl_dl_reasoner::classify_object_property_hierarchy(&o).map_err(reason_error_to_py)?;
98
+ Ok((
99
+ c.equivalent_groups().to_vec(),
100
+ c.direct_subsumptions().to_vec(),
101
+ ))
102
+ }
103
+
104
+ /// Inferred data property hierarchy: `(equivalent_groups, direct_subsumptions)`.
105
+ #[pyfunction]
106
+ #[allow(clippy::type_complexity)]
107
+ pub(crate) fn data_property_hierarchy(
108
+ path: &str,
109
+ ) -> PyResult<(Vec<Vec<String>>, Vec<(String, String)>)> {
110
+ let o = load::load_path(path)?;
111
+ let c = owl_dl_reasoner::classify_data_property_hierarchy(&o).map_err(reason_error_to_py)?;
112
+ Ok((
113
+ c.equivalent_groups().to_vec(),
114
+ c.direct_subsumptions().to_vec(),
115
+ ))
116
+ }
117
+
118
+ /// Entailed same-individual equivalence groups (asserted + functional-forced
119
+ /// + entailed), plus a completeness flag. Bounded by a 1s per-pair deadline.
120
+ /// See `disjoint_classes` for the tuple/wrapper convention.
121
+ #[pyfunction]
122
+ pub(crate) fn same_individuals(path: &str) -> PyResult<(Vec<Vec<String>>, bool)> {
123
+ let o = load::load_path(path)?;
124
+ owl_dl_reasoner::same_individuals(&o, Some(std::time::Duration::from_secs(1)))
125
+ .map(|s| (s.groups().to_vec(), s.incomplete()))
126
+ .map_err(reason_error_to_py)
127
+ }
128
+
129
+ /// Entailed different-individual pairs `(a, b)` — `{a} ⊓ {b}` is proven
130
+ /// unsatisfiable — plus a completeness flag. Bounded by a 1s per-pair
131
+ /// deadline. See `disjoint_classes` for the tuple/wrapper convention.
132
+ #[pyfunction]
133
+ pub(crate) fn different_individuals(path: &str) -> PyResult<(Vec<(String, String)>, bool)> {
134
+ let o = load::load_path(path)?;
135
+ owl_dl_reasoner::different_individuals(&o, Some(std::time::Duration::from_secs(1)))
136
+ .map(|d| (d.pairs().to_vec(), d.incomplete()))
137
+ .map_err(reason_error_to_py)
138
+ }
139
+
140
+ /// Inferred object property values `(subject, property, object)` over named
141
+ /// individuals, plus a completeness flag. Bounded by a 1s per-pair deadline.
142
+ /// See `disjoint_classes` for the tuple/wrapper convention.
143
+ #[pyfunction]
144
+ #[allow(clippy::type_complexity)]
145
+ pub(crate) fn object_property_values(
146
+ path: &str,
147
+ ) -> PyResult<(Vec<(String, String, String)>, bool)> {
148
+ let o = load::load_path(path)?;
149
+ owl_dl_reasoner::inferred_object_property_values(&o, Some(std::time::Duration::from_secs(1)))
150
+ .map(|v| (v.triples().to_vec(), v.incomplete()))
151
+ .map_err(reason_error_to_py)
152
+ }
153
+
154
+ /// Inferred data property values `(subject, property, lexical, datatype)`
155
+ /// over named individuals.
156
+ #[pyfunction]
157
+ #[allow(clippy::type_complexity)]
158
+ pub(crate) fn data_property_values(path: &str) -> PyResult<Vec<(String, String, String, String)>> {
159
+ let o = load::load_path(path)?;
160
+ owl_dl_reasoner::inferred_data_property_values(&o)
161
+ .map(|v| v.quads().to_vec())
162
+ .map_err(reason_error_to_py)
163
+ }
164
+
165
+ /// Parse a Manchester-syntax class expression against the ontology's own
166
+ /// prefix map (so e.g. `:A` resolves via the file's `Prefix(:=...)`).
167
+ fn parse_ce(
168
+ ce: &str,
169
+ pm: &horned_owl::curie::PrefixMapping,
170
+ build: &horned_owl::model::Build<horned_owl::model::RcStr>,
171
+ ) -> PyResult<horned_owl::model::ClassExpression<horned_owl::model::RcStr>> {
172
+ horned_owl::io::omn::reader::parse_class_expression(ce, pm, build)
173
+ .map_err(|e| pyo3::exceptions::PyValueError::new_err(format!("class expression: {e}")))
174
+ }
175
+
176
+ /// Is `ce` satisfiable w.r.t. the ontology at `path`? Plus a completeness
177
+ /// flag. See `disjoint_classes` for the tuple/wrapper convention.
178
+ #[pyfunction]
179
+ pub(crate) fn class_expression_satisfiable(path: &str, ce: &str) -> PyResult<(bool, bool)> {
180
+ let (o, pm) = load::load_path_with_pm(path)?;
181
+ let build: horned_owl::model::Build<horned_owl::model::RcStr> = horned_owl::model::Build::new();
182
+ let ce = parse_ce(ce, &pm, &build)?;
183
+ let v = owl_dl_reasoner::class_expression_satisfiable(&o, &ce).map_err(reason_error_to_py)?;
184
+ Ok((v.holds(), v.incomplete()))
185
+ }
186
+
187
+ /// Is `sub_ce ⊑ sup_ce` entailed w.r.t. the ontology at `path`? Plus a
188
+ /// completeness flag. See `disjoint_classes` for the tuple/wrapper convention.
189
+ #[pyfunction]
190
+ pub(crate) fn class_expression_entailed_subclass(
191
+ path: &str,
192
+ sub_ce: &str,
193
+ sup_ce: &str,
194
+ ) -> PyResult<(bool, bool)> {
195
+ let (o, pm) = load::load_path_with_pm(path)?;
196
+ let build: horned_owl::model::Build<horned_owl::model::RcStr> = horned_owl::model::Build::new();
197
+ let sub_ce = parse_ce(sub_ce, &pm, &build)?;
198
+ let sup_ce = parse_ce(sup_ce, &pm, &build)?;
199
+ let v = owl_dl_reasoner::class_expression_entailed_subclass(&o, &sub_ce, &sup_ce)
200
+ .map_err(reason_error_to_py)?;
201
+ Ok((v.holds(), v.incomplete()))
202
+ }
203
+
204
+ /// Named individuals provably in `ce` w.r.t. the ontology at `path`, plus a
205
+ /// completeness flag. See `disjoint_classes` for the tuple/wrapper convention.
206
+ #[pyfunction]
207
+ pub(crate) fn class_expression_instances(path: &str, ce: &str) -> PyResult<(Vec<String>, bool)> {
208
+ let (o, pm) = load::load_path_with_pm(path)?;
209
+ let build: horned_owl::model::Build<horned_owl::model::RcStr> = horned_owl::model::Build::new();
210
+ let ce = parse_ce(ce, &pm, &build)?;
211
+ let r = owl_dl_reasoner::class_expression_instances(&o, &ce).map_err(reason_error_to_py)?;
212
+ Ok((r.individuals().to_vec(), r.incomplete()))
213
+ }
214
+
215
+ pub(crate) fn register(m: &Bound<'_, PyModule>) -> PyResult<()> {
216
+ m.add_function(wrap_pyfunction!(is_consistent, m)?)?;
217
+ m.add_function(wrap_pyfunction!(is_class_satisfiable, m)?)?;
218
+ m.add_function(wrap_pyfunction!(is_subclass_of, m)?)?;
219
+ m.add_function(wrap_pyfunction!(is_instance_of, m)?)?;
220
+ m.add_function(wrap_pyfunction!(instances_of, m)?)?;
221
+ m.add_function(wrap_pyfunction!(realize, m)?)?;
222
+ m.add_function(wrap_pyfunction!(disjoint_classes, m)?)?;
223
+ m.add_function(wrap_pyfunction!(disjoint_object_properties, m)?)?;
224
+ m.add_function(wrap_pyfunction!(disjoint_data_properties, m)?)?;
225
+ m.add_function(wrap_pyfunction!(object_property_hierarchy, m)?)?;
226
+ m.add_function(wrap_pyfunction!(data_property_hierarchy, m)?)?;
227
+ m.add_function(wrap_pyfunction!(same_individuals, m)?)?;
228
+ m.add_function(wrap_pyfunction!(different_individuals, m)?)?;
229
+ m.add_function(wrap_pyfunction!(object_property_values, m)?)?;
230
+ m.add_function(wrap_pyfunction!(data_property_values, m)?)?;
231
+ m.add_function(wrap_pyfunction!(class_expression_satisfiable, m)?)?;
232
+ m.add_function(wrap_pyfunction!(class_expression_entailed_subclass, m)?)?;
233
+ m.add_function(wrap_pyfunction!(class_expression_instances, m)?)?;
234
+ Ok(())
235
+ }