rustdl 0.3.26__tar.gz → 0.3.27__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 (252) hide show
  1. {rustdl-0.3.26 → rustdl-0.3.27}/Cargo.lock +10 -10
  2. {rustdl-0.3.26 → rustdl-0.3.27}/Cargo.toml +1 -1
  3. {rustdl-0.3.26 → rustdl-0.3.27}/PKG-INFO +1 -1
  4. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/convert.rs +77 -8
  5. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/told.rs +14 -7
  6. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/src/explain.rs +16 -5
  7. {rustdl-0.3.26 → rustdl-0.3.27}/README.md +0 -0
  8. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/Cargo.toml +0 -0
  9. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/README.md +0 -0
  10. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/absorb.rs +0 -0
  11. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/approx_saturation.rs +0 -0
  12. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/clause.rs +0 -0
  13. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/convert_back.rs +0 -0
  14. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/data_axioms.rs +0 -0
  15. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/definitions.rs +0 -0
  16. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/disjunction_existential.rs +0 -0
  17. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/disjunctive_antecedent.rs +0 -0
  18. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/ir.rs +0 -0
  19. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/lib.rs +0 -0
  20. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/locality.rs +0 -0
  21. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/normalize.rs +0 -0
  22. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/ontology.rs +0 -0
  23. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/residual_trigger.rs +0 -0
  24. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/role_hierarchy.rs +0 -0
  25. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/transform.rs +0 -0
  26. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/src/vocab.rs +0 -0
  27. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/tests/concept_pool_proptest.proptest-regressions +0 -0
  28. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/tests/concept_pool_proptest.rs +0 -0
  29. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/tests/convert_round_trip_proptest.rs +0 -0
  30. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-core/tests/role_hierarchy_proptest.rs +0 -0
  31. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-datatypes/Cargo.toml +0 -0
  32. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-datatypes/README.md +0 -0
  33. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-datatypes/src/lib.rs +0 -0
  34. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/.gitignore +0 -0
  35. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/Cargo.toml +0 -0
  36. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/README.md +0 -0
  37. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/.gitignore +0 -0
  38. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/README.md +0 -0
  39. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/__init__.py +0 -0
  40. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/fixtures/recorded_replies_clash.json +0 -0
  41. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/fixtures/seed.ofn +0 -0
  42. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/gate.py +0 -0
  43. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/llm.py +0 -0
  44. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/loop.py +0 -0
  45. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out/candidate.ofn +0 -0
  46. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out/current.ofn +0 -0
  47. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out/metrics.md +0 -0
  48. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out/transcript.jsonl +0 -0
  49. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out-clash/candidate.ofn +0 -0
  50. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out-clash/current.ofn +0 -0
  51. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out-clash/metrics.md +0 -0
  52. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/out-clash/transcript.jsonl +0 -0
  53. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/requirements.txt +0 -0
  54. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/run.py +0 -0
  55. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/tests/__init__.py +0 -0
  56. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/tests/test_gate.py +0 -0
  57. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/tests/test_llm.py +0 -0
  58. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/tests/test_loop.py +0 -0
  59. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/tests/test_run.py +0 -0
  60. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/examples/nesy_loop/tests/test_seed.py +0 -0
  61. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/src/classify.rs +0 -0
  62. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/src/errors.rs +0 -0
  63. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/src/lib.rs +0 -0
  64. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/src/load.rs +0 -0
  65. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/src/materialize.rs +0 -0
  66. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/src/queries.rs +0 -0
  67. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/conftest.py +0 -0
  68. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_classify.py +0 -0
  69. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_examples.py +0 -0
  70. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_explain.py +0 -0
  71. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_manchester.py +0 -0
  72. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_materialize.py +0 -0
  73. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_queries.py +0 -0
  74. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_results.py +0 -0
  75. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_smoke.py +0 -0
  76. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_soundness.py +0 -0
  77. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_stubs.py +0 -0
  78. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-py/tests/python/test_tutorial.py +0 -0
  79. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/Cargo.toml +0 -0
  80. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/README.md +0 -0
  81. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/examples/embed_classify.rs +0 -0
  82. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/abox_check.rs +0 -0
  83. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/abox_saturation.rs +0 -0
  84. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/classify.rs +0 -0
  85. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/diagnose.rs +0 -0
  86. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/justify.rs +0 -0
  87. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/laconic.rs +0 -0
  88. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/lib.rs +0 -0
  89. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/model_cache.rs +0 -0
  90. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/oracle_diff.rs +0 -0
  91. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/realize.rs +0 -0
  92. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/repair.rs +0 -0
  93. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/src/union_find.rs +0 -0
  94. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/abox_consistency.rs +0 -0
  95. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/abox_sat_fp_probe.rs +0 -0
  96. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/abox_saturation.rs +0 -0
  97. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/adaptive_budget.rs +0 -0
  98. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/anon349_diagnostic.rs +0 -0
  99. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/anonymous_individuals_identity.rs +0 -0
  100. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/anonymous_individuals_reporting.rs +0 -0
  101. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/approx_saturation_forced_disjunct.rs +0 -0
  102. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/backfold.rs +0 -0
  103. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/backjump_precision_gate.rs +0 -0
  104. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/blocked_disjunction_soundness.rs +0 -0
  105. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/blocked_disjunction_termination.rs +0 -0
  106. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/cardinality_disjunct_atoms.rs +0 -0
  107. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/classify_concrete_domain.rs +0 -0
  108. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/classify_defined_sweep.rs +0 -0
  109. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/classify_inverse_domain.rs +0 -0
  110. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/completeness_contract.rs +0 -0
  111. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/concrete_domain_clash.rs +0 -0
  112. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/data_properties.rs +0 -0
  113. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/data_property_assertions.rs +0 -0
  114. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/datatype_completeness.rs +0 -0
  115. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/datatype_inconsistency.rs +0 -0
  116. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/datatype_value_membership.rs +0 -0
  117. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/decide_pair_probe.rs +0 -0
  118. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/diagnose_partition.rs +0 -0
  119. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/disjunctive_existential_marker_fp.rs +0 -0
  120. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/domain_gci_completeness.rs +0 -0
  121. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/existential_successors.rs +0 -0
  122. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/exists_top_filler.rs +0 -0
  123. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_direct_bot.ofn +0 -0
  124. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_no_bot.ofn +0 -0
  125. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_different_individuals.ofn +0 -0
  126. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_types.ofn +0 -0
  127. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa.ofn +0 -0
  128. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa_no_clash.ofn +0 -0
  129. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_consistent.ofn +0 -0
  130. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_inconsistent.ofn +0 -0
  131. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_different.ofn +0 -0
  132. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_without_different.ofn +0 -0
  133. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_diff.ofn +0 -0
  134. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_same_target.ofn +0 -0
  135. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric.ofn +0 -0
  136. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric_one_way.ofn +0 -0
  137. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive.ofn +0 -0
  138. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive_distinct.ofn +0 -0
  139. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_compatible.ofn +0 -0
  140. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_disjoint.ofn +0 -0
  141. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_cardinality_disjoint.ofn +0 -0
  142. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain-classified.owx +0 -0
  143. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain.ofn +0 -0
  144. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition-classified.owx +0 -0
  145. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition.ofn +0 -0
  146. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_facet.ofn +0 -0
  147. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/functional_data_property.ofn +0 -0
  148. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property-classified.owx +0 -0
  149. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property.ofn +0 -0
  150. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/functional-equiv-some-bug.ofn +0 -0
  151. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/materialize/rbox-materialized.owx +0 -0
  152. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/materialize/rbox.ofn +0 -0
  153. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/named-pizza-country-bug.ofn +0 -0
  154. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-01.txt +0 -0
  155. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-02.txt +0 -0
  156. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-03.txt +0 -0
  157. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-04.txt +0 -0
  158. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-05.txt +0 -0
  159. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-06.txt +0 -0
  160. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-07.txt +0 -0
  161. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-08.txt +0 -0
  162. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.hermit.owx +0 -0
  163. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.ofn +0 -0
  164. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.owx +0 -0
  165. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.hermit.owx +0 -0
  166. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.ofn +0 -0
  167. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.owx +0 -0
  168. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.hermit.owx +0 -0
  169. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.ofn +0 -0
  170. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.owx +0 -0
  171. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.hermit.owx +0 -0
  172. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.ofn +0 -0
  173. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.owx +0 -0
  174. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.hermit.owx +0 -0
  175. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.ofn +0 -0
  176. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.owx +0 -0
  177. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.hermit.owx +0 -0
  178. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.ofn +0 -0
  179. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.owx +0 -0
  180. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.hermit.owx +0 -0
  181. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.ofn +0 -0
  182. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.owx +0 -0
  183. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.hermit.owx +0 -0
  184. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.ofn +0 -0
  185. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.owx +0 -0
  186. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/fixtures/phase2b/phase2b-verdicts.log +0 -0
  187. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/funcmerge_inverse.rs +0 -0
  188. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/funcmerge_scaling.rs +0 -0
  189. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/functional_enforcement.rs +0 -0
  190. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/inverse_cardinality_soundness.rs +0 -0
  191. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/inverse_symmetric_domain.rs +0 -0
  192. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/justification.rs +0 -0
  193. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/konclude_closure_diff.rs +0 -0
  194. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/label_heuristic_canary.rs +0 -0
  195. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/laconic_justification.rs +0 -0
  196. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/materialize_oracle.rs +0 -0
  197. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/object_has_self_domain.rs +0 -0
  198. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/phase2c_pair_06_canary.rs +0 -0
  199. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/precompletion_probe_gate.rs +0 -0
  200. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/property_assertions.rs +0 -0
  201. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/real_ontology_corpus.rs +0 -0
  202. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/repair_suggestions.rs +0 -0
  203. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/sat_lookahead_gate.rs +0 -0
  204. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/saturator_disjointness.rs +0 -0
  205. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/seed_probe_gate.rs +0 -0
  206. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/shadow_dep_gate.rs +0 -0
  207. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/snapshot_phase0_canary.rs +0 -0
  208. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/sp2_nogood_gate.rs +0 -0
  209. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/subproperty_axioms.rs +0 -0
  210. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/tautology_skip_canary.rs +0 -0
  211. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/tbox_only_classify.rs +0 -0
  212. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/top_subsumes_all.rs +0 -0
  213. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/value_type_disjoint_canary.rs +0 -0
  214. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/value_type_disjoint_probe.rs +0 -0
  215. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-reasoner/tests/wedge_consistency.rs +0 -0
  216. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-saturation/Cargo.toml +0 -0
  217. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-saturation/README.md +0 -0
  218. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-saturation/src/lib.rs +0 -0
  219. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-saturation/src/proof.rs +0 -0
  220. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-saturation/src/seed_sat.rs +0 -0
  221. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-saturation/tests/fixtures/phase2a_functional_role_canary.ofn +0 -0
  222. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-saturation/tests/fixtures/phase2b_compound_existential_canary.ofn +0 -0
  223. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/Cargo.toml +0 -0
  224. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/README.md +0 -0
  225. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/counters.rs +0 -0
  226. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/deps.rs +0 -0
  227. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/graph.rs +0 -0
  228. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/hyper.rs +0 -0
  229. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/lib.rs +0 -0
  230. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/replay.rs +0 -0
  231. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/rules.rs +0 -0
  232. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/saturate.rs +0 -0
  233. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/search.rs +0 -0
  234. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/shadow_measures.rs +0 -0
  235. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/snapshot.rs +0 -0
  236. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/src/trail.rs +0 -0
  237. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/tests/backprop_risk.rs +0 -0
  238. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/tests/replay_driver.rs +0 -0
  239. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/tests/replay_roundtrip.rs +0 -0
  240. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/tests/sat_lookahead_drop.rs +0 -0
  241. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/tests/semantic_branching.rs +0 -0
  242. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/tests/shadow_dep_probe.rs +0 -0
  243. {rustdl-0.3.26 → rustdl-0.3.27}/crates/owl-dl-tableau/tests/snapshot_capture.rs +0 -0
  244. {rustdl-0.3.26 → rustdl-0.3.27}/pyproject.toml +0 -0
  245. {rustdl-0.3.26 → rustdl-0.3.27}/python/rustdl/__init__.py +0 -0
  246. {rustdl-0.3.26 → rustdl-0.3.27}/python/rustdl/__init__.pyi +0 -0
  247. {rustdl-0.3.26 → rustdl-0.3.27}/python/rustdl/_results.py +0 -0
  248. {rustdl-0.3.26 → rustdl-0.3.27}/python/rustdl/data/pizza.owl.gz +0 -0
  249. {rustdl-0.3.26 → rustdl-0.3.27}/python/rustdl/data/sio.owl.gz +0 -0
  250. {rustdl-0.3.26 → rustdl-0.3.27}/python/rustdl/data/sulo.owl.gz +0 -0
  251. {rustdl-0.3.26 → rustdl-0.3.27}/python/rustdl/examples.py +0 -0
  252. {rustdl-0.3.26 → rustdl-0.3.27}/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.3.26"
1021
+ version = "0.3.27"
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.3.26"
1041
+ version = "0.3.27"
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.3.26"
1049
+ version = "0.3.27"
1050
1050
  dependencies = [
1051
1051
  "anyhow",
1052
1052
  "clap",
@@ -1059,7 +1059,7 @@ dependencies = [
1059
1059
 
1060
1060
  [[package]]
1061
1061
  name = "owl-dl-core"
1062
- version = "0.3.26"
1062
+ version = "0.3.27"
1063
1063
  dependencies = [
1064
1064
  "bitvec",
1065
1065
  "bumpalo",
@@ -1073,7 +1073,7 @@ dependencies = [
1073
1073
 
1074
1074
  [[package]]
1075
1075
  name = "owl-dl-datatypes"
1076
- version = "0.3.26"
1076
+ version = "0.3.27"
1077
1077
  dependencies = [
1078
1078
  "owl-dl-core",
1079
1079
  "proptest",
@@ -1083,7 +1083,7 @@ dependencies = [
1083
1083
 
1084
1084
  [[package]]
1085
1085
  name = "owl-dl-py"
1086
- version = "0.3.26"
1086
+ version = "0.3.27"
1087
1087
  dependencies = [
1088
1088
  "horned-owl",
1089
1089
  "owl-dl-core",
@@ -1094,7 +1094,7 @@ dependencies = [
1094
1094
 
1095
1095
  [[package]]
1096
1096
  name = "owl-dl-reasoner"
1097
- version = "0.3.26"
1097
+ version = "0.3.27"
1098
1098
  dependencies = [
1099
1099
  "anyhow",
1100
1100
  "dashmap",
@@ -1112,7 +1112,7 @@ dependencies = [
1112
1112
 
1113
1113
  [[package]]
1114
1114
  name = "owl-dl-saturation"
1115
- version = "0.3.26"
1115
+ version = "0.3.27"
1116
1116
  dependencies = [
1117
1117
  "dashmap",
1118
1118
  "fixedbitset",
@@ -1128,7 +1128,7 @@ dependencies = [
1128
1128
 
1129
1129
  [[package]]
1130
1130
  name = "owl-dl-tableau"
1131
- version = "0.3.26"
1131
+ version = "0.3.27"
1132
1132
  dependencies = [
1133
1133
  "bitvec",
1134
1134
  "bumpalo",
@@ -2554,7 +2554,7 @@ dependencies = [
2554
2554
 
2555
2555
  [[package]]
2556
2556
  name = "xtask"
2557
- version = "0.3.26"
2557
+ version = "0.3.27"
2558
2558
  dependencies = [
2559
2559
  "anyhow",
2560
2560
  "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.26"
6
+ version = "0.3.27"
7
7
  edition = "2024"
8
8
  rust-version = "1.88"
9
9
  license = "Apache-2.0 OR MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rustdl
3
- Version: 0.3.26
3
+ Version: 0.3.27
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Science/Research
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -20,7 +20,7 @@ use crate::data_axioms::{
20
20
  RangeBucket, StrSet, exact_string_literal, parse_data_intersection_dkey, parse_date,
21
21
  parse_datetime, parse_decimal,
22
22
  };
23
- use crate::ir::{ClassId, ConceptId, IndividualId, Role};
23
+ use crate::ir::{ClassId, ConceptExpr, ConceptId, IndividualId, Role};
24
24
  use crate::ontology::{Axiom, InternalOntology, SubRolePath};
25
25
 
26
26
  /// IRI namespace for synthetic *data-key* (`DKey`) classes. These are
@@ -2407,13 +2407,82 @@ fn seed_dkey_subsumptions(out: &mut InternalOntology) {
2407
2407
  // would spuriously make a class ⊥ = FP — cannot arise from overlapping
2408
2408
  // ranges. Same datatype bucketing: int / float / double / decimal / date /
2409
2409
  // dateTime / string never cross-seed.
2410
- seed_disjoint_bucket(out, &int_dkeys, |a, b| a.disjoint(*b));
2411
- seed_disjoint_bucket(out, &float_dkeys, |a, b| a.disjoint(*b));
2412
- seed_disjoint_bucket(out, &double_dkeys, |a, b| a.disjoint(*b));
2413
- seed_disjoint_bucket(out, &dec_dkeys, OrdRange::disjoint);
2414
- seed_disjoint_bucket(out, &date_dkeys, OrdRange::disjoint);
2415
- seed_disjoint_bucket(out, &dt_dkeys, OrdRange::disjoint);
2416
- seed_disjoint_bucket(out, &str_dkeys, StrSet::disjoint);
2410
+ //
2411
+ // GATE (2026-07-20): the disjointness is CONSUMED ONLY by a `∀p.DKey`
2412
+ // (`ObjectAllValuesFrom` over a DKey filler) — that is the sole construct
2413
+ // that puts a *second* DKey on the same role at a node to clash against an
2414
+ // `∃p.DKey`. Without any such `∀p.DKey` in the ontology the O(k²) pairwise
2415
+ // seeding is pure dead weight — and k is NOT small when DKeys come from
2416
+ // ABox `DataPropertyAssertion`s (ore_ont_10425: 5261 distinct values →
2417
+ // ~14M disjoint axioms → front-end conversion DNF). So skip the seeding
2418
+ // when no `∀p.DKey` occurs. **Sound (FP-safe) by construction**: dropping
2419
+ // `DisjointClasses` axioms is entailment-MONOTONE — it can only fail to
2420
+ // derive an unsatisfiability (a tolerated MISS), never introduce a false
2421
+ // subsumption. (A functional-data-property same-value inconsistency is
2422
+ // still caught by the `abox_check` P5 / D4 data-cardinality pre-checks.)
2423
+ let dkey_cids: std::collections::HashSet<ClassId> = int_dkeys
2424
+ .iter()
2425
+ .map(|(c, _)| *c)
2426
+ .chain(float_dkeys.iter().map(|(c, _)| *c))
2427
+ .chain(double_dkeys.iter().map(|(c, _)| *c))
2428
+ .chain(dec_dkeys.iter().map(|(c, _)| *c))
2429
+ .chain(date_dkeys.iter().map(|(c, _)| *c))
2430
+ .chain(dt_dkeys.iter().map(|(c, _)| *c))
2431
+ .chain(str_dkeys.iter().map(|(c, _)| *c))
2432
+ .collect();
2433
+ if ontology_has_forall_over_dkey(out, &dkey_cids) {
2434
+ seed_disjoint_bucket(out, &int_dkeys, |a, b| a.disjoint(*b));
2435
+ seed_disjoint_bucket(out, &float_dkeys, |a, b| a.disjoint(*b));
2436
+ seed_disjoint_bucket(out, &double_dkeys, |a, b| a.disjoint(*b));
2437
+ seed_disjoint_bucket(out, &dec_dkeys, OrdRange::disjoint);
2438
+ seed_disjoint_bucket(out, &date_dkeys, OrdRange::disjoint);
2439
+ seed_disjoint_bucket(out, &dt_dkeys, OrdRange::disjoint);
2440
+ seed_disjoint_bucket(out, &str_dkeys, StrSet::disjoint);
2441
+ }
2442
+ }
2443
+
2444
+ /// True iff some axiom's class expression contains `∀R.f` (`ConceptExpr::All`)
2445
+ /// whose filler `f` is a `DKey` class (`cid ∈ dkeys`). This is the ONLY consumer
2446
+ /// of the D11b DKey-disjointness seeding (the `∃p.DKey(v) ⊓ ∀p.DKey(r)` range-
2447
+ /// membership clash), so when it is absent the O(k²) seeding is skippable — see
2448
+ /// [`seed_dkey_subsumptions`]. Short-circuits on the first hit.
2449
+ fn ontology_has_forall_over_dkey(
2450
+ out: &InternalOntology,
2451
+ dkeys: &std::collections::HashSet<ClassId>,
2452
+ ) -> bool {
2453
+ fn walk(
2454
+ cid: ConceptId,
2455
+ pool: &ConceptPool,
2456
+ dkeys: &std::collections::HashSet<ClassId>,
2457
+ ) -> bool {
2458
+ match pool.get(cid) {
2459
+ ConceptExpr::All(_, f) => {
2460
+ matches!(pool.get(*f), ConceptExpr::Atomic(c) if dkeys.contains(c))
2461
+ || walk(*f, pool, dkeys)
2462
+ }
2463
+ ConceptExpr::Not(x)
2464
+ | ConceptExpr::Some(_, x)
2465
+ | ConceptExpr::Min(_, _, x)
2466
+ | ConceptExpr::Max(_, _, x) => walk(*x, pool, dkeys),
2467
+ ConceptExpr::And(ops) | ConceptExpr::Or(ops) => {
2468
+ ops.iter().any(|o| walk(*o, pool, dkeys))
2469
+ }
2470
+ _ => false,
2471
+ }
2472
+ }
2473
+ if dkeys.is_empty() {
2474
+ return false;
2475
+ }
2476
+ let pool = &out.concepts;
2477
+ out.axioms.iter().any(|ax| match ax {
2478
+ Axiom::SubClassOf { sub, sup } => walk(*sub, pool, dkeys) || walk(*sup, pool, dkeys),
2479
+ Axiom::EquivalentClasses(v) | Axiom::DisjointClasses(v) => {
2480
+ v.iter().any(|c| walk(*c, pool, dkeys))
2481
+ }
2482
+ Axiom::DisjointUnion { members, .. } => members.iter().any(|c| walk(*c, pool, dkeys)),
2483
+ Axiom::ClassAssertion { class, .. } => walk(*class, pool, dkeys),
2484
+ _ => false,
2485
+ })
2417
2486
  }
2418
2487
 
2419
2488
  /// Emit `DisjointClasses([DKey(r_i), DKey(r_j)])` for every UNORDERED pair
@@ -22,6 +22,8 @@
22
22
 
23
23
  use std::collections::VecDeque;
24
24
 
25
+ use std::collections::HashSet;
26
+
25
27
  use smallvec::SmallVec;
26
28
 
27
29
  use crate::ConceptPool;
@@ -106,7 +108,14 @@ impl ToldTables {
106
108
  pub fn build_told_tables(ontology: &InternalOntology) -> ToldTables {
107
109
  let n = ontology.vocabulary.num_classes();
108
110
  let mut direct_super: Vec<SmallVec<[ClassId; 4]>> = vec![SmallVec::new(); n];
109
- let mut disjoint: Vec<SmallVec<[ClassId; 4]>> = vec![SmallVec::new(); n];
111
+ // Disjoint sets use a per-class `HashSet` (not `SmallVec`) so membership
112
+ // dedup during build is O(1), not O(k) linear-scan. A single large
113
+ // `DisjointClasses`/DKey-disjointness axiom produces O(k²) pairs; with the
114
+ // old `SmallVec::contains` that was O(k³) and stalled front-end conversion
115
+ // (ore_ont_10425: 5261 distinct data values → ~14M disjoint pairs → >150 s
116
+ // DNF). Output below is still a sorted `Box<[ClassId]>`, so the told table
117
+ // is byte-identical to the previous representation.
118
+ let mut disjoint: Vec<HashSet<ClassId>> = vec![HashSet::new(); n];
110
119
 
111
120
  let pool = &ontology.concepts;
112
121
 
@@ -234,14 +243,12 @@ fn add_edge(direct_super: &mut [SmallVec<[ClassId; 4]>], sub: ClassId, sup: Clas
234
243
  }
235
244
  }
236
245
 
237
- fn add_disjoint_pair(disjoint: &mut [SmallVec<[ClassId; 4]>], a: ClassId, b: ClassId) {
246
+ fn add_disjoint_pair(disjoint: &mut [HashSet<ClassId>], a: ClassId, b: ClassId) {
238
247
  let ai = a.index() as usize;
239
248
  let bi = b.index() as usize;
240
- if !disjoint[ai].contains(&b) {
241
- disjoint[ai].push(b);
242
- }
243
- if a != b && !disjoint[bi].contains(&a) {
244
- disjoint[bi].push(a);
249
+ disjoint[ai].insert(b);
250
+ if a != b {
251
+ disjoint[bi].insert(a);
245
252
  }
246
253
  }
247
254
 
@@ -30,14 +30,25 @@ pub(crate) fn render_manchester(path: &str) -> PyResult<Vec<String>> {
30
30
  }
31
31
 
32
32
  fn is_logical_axiom(c: &Component<RcStr>) -> bool {
33
- use Component::*;
33
+ use Component::{
34
+ AnnotationAssertion, DeclareAnnotationProperty, DeclareClass, DeclareDataProperty,
35
+ DeclareDatatype, DeclareNamedIndividual, DeclareObjectProperty, DocIRI, Import,
36
+ OntologyAnnotation, OntologyID,
37
+ };
34
38
  // Exclude declarations, imports, and ontology-level metadata; keep the
35
39
  // class/property/individual axioms that carry entailment meaning.
36
40
  !matches!(
37
41
  c,
38
- OntologyID(_) | DocIRI(_) | Import(_) | OntologyAnnotation(_)
39
- | DeclareClass(_) | DeclareObjectProperty(_) | DeclareAnnotationProperty(_)
40
- | DeclareDataProperty(_) | DeclareNamedIndividual(_) | DeclareDatatype(_)
42
+ OntologyID(_)
43
+ | DocIRI(_)
44
+ | Import(_)
45
+ | OntologyAnnotation(_)
46
+ | DeclareClass(_)
47
+ | DeclareObjectProperty(_)
48
+ | DeclareAnnotationProperty(_)
49
+ | DeclareDataProperty(_)
50
+ | DeclareNamedIndividual(_)
51
+ | DeclareDatatype(_)
41
52
  | AnnotationAssertion(_)
42
53
  )
43
54
  }
@@ -114,7 +125,7 @@ mod tests {
114
125
  use super::*;
115
126
 
116
127
  /// A⊑B, B⊑C written to a temp `.ofn` fixture; `render_manchester` should
117
- /// return one Manchester string per SubClassOf axiom, each mentioning
128
+ /// return one Manchester string per `SubClassOf` axiom, each mentioning
118
129
  /// its sub/super class, and skip the two `Declaration(Class(...))`
119
130
  /// components as non-logical noise.
120
131
  #[test]
File without changes