rustdl 0.2.2__tar.gz → 0.3.0__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.
- {rustdl-0.2.2 → rustdl-0.3.0}/Cargo.lock +9 -9
- {rustdl-0.2.2 → rustdl-0.3.0}/Cargo.toml +6 -6
- {rustdl-0.2.2 → rustdl-0.3.0}/PKG-INFO +14 -7
- {rustdl-0.2.2/crates/owl-dl-py → rustdl-0.3.0}/README.md +13 -6
- {rustdl-0.2.2 → rustdl-0.3.0/crates/owl-dl-py}/README.md +13 -6
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/src/classify.rs +25 -3
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/tests/python/test_classify.py +30 -0
- rustdl-0.3.0/python/rustdl/__init__.py +129 -0
- rustdl-0.2.2/python/rustdl/__init__.py +0 -69
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/Cargo.toml +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/README.md +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/absorb.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/clause.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/convert.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/convert_back.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/data_axioms.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/definitions.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/ir.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/lib.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/locality.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/normalize.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/ontology.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/residual_trigger.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/role_hierarchy.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/told.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/transform.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/src/vocab.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/tests/concept_pool_proptest.proptest-regressions +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/tests/concept_pool_proptest.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/tests/convert_round_trip_proptest.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/tests/role_hierarchy_proptest.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-datatypes/Cargo.toml +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-datatypes/README.md +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-datatypes/src/lib.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/.gitignore +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/Cargo.toml +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/src/errors.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/src/lib.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/src/load.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/src/materialize.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/src/queries.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/tests/python/conftest.py +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/tests/python/test_materialize.py +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/tests/python/test_queries.py +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/tests/python/test_smoke.py +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-py/tests/python/test_soundness.py +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/Cargo.toml +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/README.md +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/src/abox_check.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/src/classify.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/src/lib.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/src/model_cache.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/src/realize.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/src/union_find.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/abox_consistency.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/anon349_diagnostic.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/datatype_completeness.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_direct_bot.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p1_no_bot.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_different_individuals.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_types.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa_no_clash.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_consistent.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_role_hierarchy_neg_inconsistent.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_different.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_without_different.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_diff.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_same_target.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric_one_way.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive_distinct.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_compatible.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_disjoint.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_cardinality_disjoint.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain-classified.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/data_property_domain.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition-classified.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_facet.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/functional_data_property.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property-classified.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/functional-equiv-some-bug.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/named-pizza-country-bug.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-01.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-02.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-03.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-04.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-05.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-06.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-07.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-08.txt +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.hermit.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.owx +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/phase2b-verdicts.log +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/konclude_closure_diff.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/label_heuristic_canary.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/phase2c_pair_06_canary.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/real_ontology_corpus.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/snapshot_phase0_canary.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-saturation/Cargo.toml +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-saturation/README.md +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-saturation/src/lib.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-saturation/tests/fixtures/phase2a_functional_role_canary.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-saturation/tests/fixtures/phase2b_compound_existential_canary.ofn +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/Cargo.toml +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/README.md +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/counters.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/deps.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/graph.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/hyper.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/lib.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/replay.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/rules.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/saturate.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/search.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/snapshot.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/src/trail.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/tests/backprop_risk.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/tests/replay_driver.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/tests/replay_roundtrip.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-tableau/tests/snapshot_capture.rs +0 -0
- {rustdl-0.2.2 → rustdl-0.3.0}/pyproject.toml +0 -0
|
@@ -1037,7 +1037,7 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe"
|
|
|
1037
1037
|
|
|
1038
1038
|
[[package]]
|
|
1039
1039
|
name = "owl-dl-bench"
|
|
1040
|
-
version = "0.
|
|
1040
|
+
version = "0.3.0"
|
|
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.
|
|
1057
|
+
version = "0.3.0"
|
|
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.
|
|
1069
|
+
version = "0.3.0"
|
|
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.
|
|
1083
|
+
version = "0.3.0"
|
|
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.
|
|
1093
|
+
version = "0.3.0"
|
|
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.
|
|
1104
|
+
version = "0.3.0"
|
|
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.
|
|
1120
|
+
version = "0.3.0"
|
|
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.
|
|
1136
|
+
version = "0.3.0"
|
|
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.
|
|
2572
|
+
version = "0.3.0"
|
|
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.
|
|
6
|
+
version = "0.3.0"
|
|
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.
|
|
19
|
-
owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.
|
|
20
|
-
owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.
|
|
21
|
-
owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.
|
|
22
|
-
owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.
|
|
18
|
+
owl-dl-core = { path = "crates/owl-dl-core", version = "0.3.0" }
|
|
19
|
+
owl-dl-saturation = { path = "crates/owl-dl-saturation", version = "0.3.0" }
|
|
20
|
+
owl-dl-tableau = { path = "crates/owl-dl-tableau", version = "0.3.0" }
|
|
21
|
+
owl-dl-datatypes = { path = "crates/owl-dl-datatypes", version = "0.3.0" }
|
|
22
|
+
owl-dl-reasoner = { path = "crates/owl-dl-reasoner", version = "0.3.0" }
|
|
23
23
|
|
|
24
24
|
horned-owl = { version = "1.4", default-features = false }
|
|
25
25
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rustdl
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Science/Research
|
|
6
6
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
@@ -67,15 +67,20 @@ result.direct_subsumers("http://ex.org/Margherita") # -> list[str] (Hasse-direct
|
|
|
67
67
|
### Classification
|
|
68
68
|
|
|
69
69
|
```python
|
|
70
|
-
result = rustdl.classify(path, *, per_pair_timeout_ms=
|
|
71
|
-
result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=
|
|
70
|
+
result = rustdl.classify(path, *, per_pair_timeout_ms=1000, saturation_only=False)
|
|
71
|
+
result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=1000, saturation_only=False)
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
- `per_pair_timeout_ms` — bound each subsumption test
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
- `per_pair_timeout_ms` — bound each subsumption test (**default 1000**;
|
|
75
|
+
`0` = unbounded). A pair that exceeds the budget is recorded as "not
|
|
76
|
+
subsumed": **sound** (never a false subsumption) but the result may be
|
|
77
|
+
**incomplete**. When that happens, an `IncompleteClassificationWarning`
|
|
78
|
+
is emitted and `result.complete` is `False`. Pass `0` for the complete,
|
|
79
|
+
unbounded classification. The default bounds pathological SROIQ inputs
|
|
80
|
+
so classification can't hang silently.
|
|
77
81
|
- `saturation_only` — skip the tableau entirely; EL-closure-only
|
|
78
|
-
under-approximation. Dramatically faster on mostly-EL ontologies
|
|
82
|
+
under-approximation. Dramatically faster on mostly-EL ontologies, and
|
|
83
|
+
always `complete` (no tableau ⇒ no timeout).
|
|
79
84
|
|
|
80
85
|
`classify` / `classify_bytes` return a `Classification`:
|
|
81
86
|
|
|
@@ -84,6 +89,8 @@ result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=None,
|
|
|
84
89
|
| `.classes` | `list[str]` | all declared class IRIs |
|
|
85
90
|
| `.unsatisfiable` | `list[str]` | classes proved `⊑ ⊥` |
|
|
86
91
|
| `.inconsistent` | `bool` | whole ontology unsatisfiable |
|
|
92
|
+
| `.complete` | `bool` | `False` if any pair hit the timeout (result may miss edges) |
|
|
93
|
+
| `.timed_out_pairs` | `int` | how many pairs hit the timeout |
|
|
87
94
|
| `.is_subclass(sub, sup)` | `bool` | is `sub ⊑ sup` entailed? |
|
|
88
95
|
| `.subclasses_of(cls)` | `list[str]` | every `D` with `D ⊑ cls` |
|
|
89
96
|
| `.superclasses_of(cls)` | `list[str]` | every `D` with `cls ⊑ D` |
|
|
@@ -42,15 +42,20 @@ result.direct_subsumers("http://ex.org/Margherita") # -> list[str] (Hasse-direct
|
|
|
42
42
|
### Classification
|
|
43
43
|
|
|
44
44
|
```python
|
|
45
|
-
result = rustdl.classify(path, *, per_pair_timeout_ms=
|
|
46
|
-
result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=
|
|
45
|
+
result = rustdl.classify(path, *, per_pair_timeout_ms=1000, saturation_only=False)
|
|
46
|
+
result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=1000, saturation_only=False)
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
- `per_pair_timeout_ms` — bound each subsumption test
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
- `per_pair_timeout_ms` — bound each subsumption test (**default 1000**;
|
|
50
|
+
`0` = unbounded). A pair that exceeds the budget is recorded as "not
|
|
51
|
+
subsumed": **sound** (never a false subsumption) but the result may be
|
|
52
|
+
**incomplete**. When that happens, an `IncompleteClassificationWarning`
|
|
53
|
+
is emitted and `result.complete` is `False`. Pass `0` for the complete,
|
|
54
|
+
unbounded classification. The default bounds pathological SROIQ inputs
|
|
55
|
+
so classification can't hang silently.
|
|
52
56
|
- `saturation_only` — skip the tableau entirely; EL-closure-only
|
|
53
|
-
under-approximation. Dramatically faster on mostly-EL ontologies
|
|
57
|
+
under-approximation. Dramatically faster on mostly-EL ontologies, and
|
|
58
|
+
always `complete` (no tableau ⇒ no timeout).
|
|
54
59
|
|
|
55
60
|
`classify` / `classify_bytes` return a `Classification`:
|
|
56
61
|
|
|
@@ -59,6 +64,8 @@ result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=None,
|
|
|
59
64
|
| `.classes` | `list[str]` | all declared class IRIs |
|
|
60
65
|
| `.unsatisfiable` | `list[str]` | classes proved `⊑ ⊥` |
|
|
61
66
|
| `.inconsistent` | `bool` | whole ontology unsatisfiable |
|
|
67
|
+
| `.complete` | `bool` | `False` if any pair hit the timeout (result may miss edges) |
|
|
68
|
+
| `.timed_out_pairs` | `int` | how many pairs hit the timeout |
|
|
62
69
|
| `.is_subclass(sub, sup)` | `bool` | is `sub ⊑ sup` entailed? |
|
|
63
70
|
| `.subclasses_of(cls)` | `list[str]` | every `D` with `D ⊑ cls` |
|
|
64
71
|
| `.superclasses_of(cls)` | `list[str]` | every `D` with `cls ⊑ D` |
|
|
@@ -42,15 +42,20 @@ result.direct_subsumers("http://ex.org/Margherita") # -> list[str] (Hasse-direct
|
|
|
42
42
|
### Classification
|
|
43
43
|
|
|
44
44
|
```python
|
|
45
|
-
result = rustdl.classify(path, *, per_pair_timeout_ms=
|
|
46
|
-
result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=
|
|
45
|
+
result = rustdl.classify(path, *, per_pair_timeout_ms=1000, saturation_only=False)
|
|
46
|
+
result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=1000, saturation_only=False)
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
- `per_pair_timeout_ms` — bound each subsumption test
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
- `per_pair_timeout_ms` — bound each subsumption test (**default 1000**;
|
|
50
|
+
`0` = unbounded). A pair that exceeds the budget is recorded as "not
|
|
51
|
+
subsumed": **sound** (never a false subsumption) but the result may be
|
|
52
|
+
**incomplete**. When that happens, an `IncompleteClassificationWarning`
|
|
53
|
+
is emitted and `result.complete` is `False`. Pass `0` for the complete,
|
|
54
|
+
unbounded classification. The default bounds pathological SROIQ inputs
|
|
55
|
+
so classification can't hang silently.
|
|
52
56
|
- `saturation_only` — skip the tableau entirely; EL-closure-only
|
|
53
|
-
under-approximation. Dramatically faster on mostly-EL ontologies
|
|
57
|
+
under-approximation. Dramatically faster on mostly-EL ontologies, and
|
|
58
|
+
always `complete` (no tableau ⇒ no timeout).
|
|
54
59
|
|
|
55
60
|
`classify` / `classify_bytes` return a `Classification`:
|
|
56
61
|
|
|
@@ -59,6 +64,8 @@ result = rustdl.classify_bytes(data, format="ofn", *, per_pair_timeout_ms=None,
|
|
|
59
64
|
| `.classes` | `list[str]` | all declared class IRIs |
|
|
60
65
|
| `.unsatisfiable` | `list[str]` | classes proved `⊑ ⊥` |
|
|
61
66
|
| `.inconsistent` | `bool` | whole ontology unsatisfiable |
|
|
67
|
+
| `.complete` | `bool` | `False` if any pair hit the timeout (result may miss edges) |
|
|
68
|
+
| `.timed_out_pairs` | `int` | how many pairs hit the timeout |
|
|
62
69
|
| `.is_subclass(sub, sup)` | `bool` | is `sub ⊑ sup` entailed? |
|
|
63
70
|
| `.subclasses_of(cls)` | `list[str]` | every `D` with `D ⊑ cls` |
|
|
64
71
|
| `.superclasses_of(cls)` | `list[str]` | every `D` with `cls ⊑ D` |
|
|
@@ -38,6 +38,25 @@ impl PyClassification {
|
|
|
38
38
|
self.inner.stats().inconsistent
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
/// Number of class pairs that exceeded the per-pair timeout and
|
|
42
|
+
/// were recorded as "not subsumed". `> 0` means the classification
|
|
43
|
+
/// is a sound under-approximation — no false subsumptions, but real
|
|
44
|
+
/// ones may be missing. `0` when classification ran to completion
|
|
45
|
+
/// (or no timeout was set).
|
|
46
|
+
#[getter]
|
|
47
|
+
fn timed_out_pairs(&self) -> usize {
|
|
48
|
+
self.inner.stats().timed_out_pairs
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/// True iff classification ran to completion — no pair hit the
|
|
52
|
+
/// timeout. When `False`, the hierarchy may be missing real
|
|
53
|
+
/// subsumptions (see `timed_out_pairs`); re-classify with
|
|
54
|
+
/// `per_pair_timeout_ms=0` for the complete (unbounded) result.
|
|
55
|
+
#[getter]
|
|
56
|
+
fn complete(&self) -> bool {
|
|
57
|
+
self.inner.stats().timed_out_pairs == 0
|
|
58
|
+
}
|
|
59
|
+
|
|
41
60
|
/// True iff `sub ⊑ sup` is entailed.
|
|
42
61
|
fn is_subclass(&self, sub: &str, sup: &str) -> bool {
|
|
43
62
|
self.inner.is_subclass(sub, sup)
|
|
@@ -74,7 +93,7 @@ impl PyClassification {
|
|
|
74
93
|
/// `rustdl.classify(path)` — classify the ontology at `path`.
|
|
75
94
|
/// Format auto-detected from the file extension.
|
|
76
95
|
#[pyfunction]
|
|
77
|
-
#[pyo3(signature = (path, *, per_pair_timeout_ms=
|
|
96
|
+
#[pyo3(signature = (path, *, per_pair_timeout_ms=1000, saturation_only=false))]
|
|
78
97
|
pub(crate) fn classify(
|
|
79
98
|
path: &str,
|
|
80
99
|
per_pair_timeout_ms: Option<u64>,
|
|
@@ -86,7 +105,7 @@ pub(crate) fn classify(
|
|
|
86
105
|
|
|
87
106
|
/// `rustdl.classify_bytes(data, format="ofn")` — same but from bytes.
|
|
88
107
|
#[pyfunction]
|
|
89
|
-
#[pyo3(signature = (data, *, format, per_pair_timeout_ms=
|
|
108
|
+
#[pyo3(signature = (data, *, format, per_pair_timeout_ms=1000, saturation_only=false))]
|
|
90
109
|
pub(crate) fn classify_bytes(
|
|
91
110
|
data: &[u8],
|
|
92
111
|
format: &str,
|
|
@@ -103,9 +122,12 @@ fn do_classify(
|
|
|
103
122
|
saturation_only: bool,
|
|
104
123
|
) -> PyResult<PyClassification> {
|
|
105
124
|
use std::time::Duration;
|
|
125
|
+
// `None` or `0` → unbounded (complete); any positive value bounds
|
|
126
|
+
// each pair (sound under-approximation; check `.complete` after).
|
|
127
|
+
let bounded = per_pair_timeout_ms.filter(|&ms| ms > 0);
|
|
106
128
|
let inner = if saturation_only {
|
|
107
129
|
owl_dl_reasoner::classify_saturation_only(ontology).map_err(reason_error_to_py)?
|
|
108
|
-
} else if let Some(ms) =
|
|
130
|
+
} else if let Some(ms) = bounded {
|
|
109
131
|
owl_dl_reasoner::classify_top_down_with_timeout(ontology, Duration::from_millis(ms))
|
|
110
132
|
.map_err(reason_error_to_py)?
|
|
111
133
|
} else {
|
|
@@ -46,3 +46,33 @@ def test_superclasses_of(fixtures_dir):
|
|
|
46
46
|
result = rustdl.classify(str(fixture))
|
|
47
47
|
sups = result.superclasses_of("http://t/Adult")
|
|
48
48
|
assert "http://t/Person" in sups
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def test_completeness_signal_and_warning(fixtures_dir):
|
|
52
|
+
import warnings
|
|
53
|
+
fixture = fixtures_dir / "datatype" / "datatype_definition.ofn"
|
|
54
|
+
|
|
55
|
+
# Default budget on a tiny EL-ish ontology: completes, no warning.
|
|
56
|
+
with warnings.catch_warnings(record=True) as rec:
|
|
57
|
+
warnings.simplefilter("always")
|
|
58
|
+
r = rustdl.classify(str(fixture))
|
|
59
|
+
assert r.complete is True
|
|
60
|
+
assert r.timed_out_pairs == 0
|
|
61
|
+
assert not any(
|
|
62
|
+
issubclass(w.category, rustdl.IncompleteClassificationWarning) for w in rec
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_saturation_only_is_complete(fixtures_dir):
|
|
67
|
+
fixture = fixtures_dir / "datatype" / "datatype_definition.ofn"
|
|
68
|
+
r = rustdl.classify(str(fixture), saturation_only=True)
|
|
69
|
+
# saturation-only never invokes the tableau, so no pair can time out
|
|
70
|
+
assert r.complete is True
|
|
71
|
+
assert r.timed_out_pairs == 0
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_unbounded_timeout_accepted(fixtures_dir):
|
|
75
|
+
fixture = fixtures_dir / "datatype" / "datatype_definition.ofn"
|
|
76
|
+
# per_pair_timeout_ms=0 means unbounded — must classify, complete.
|
|
77
|
+
r = rustdl.classify(str(fixture), per_pair_timeout_ms=0)
|
|
78
|
+
assert r.complete is True
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""
|
|
2
|
+
rustdl — sound, performant OWL 2 DL (SROIQ) reasoner.
|
|
3
|
+
|
|
4
|
+
Python bindings for the rustdl Rust crate. Install via
|
|
5
|
+
`pip install rustdl`; import as `import rustdl`. See
|
|
6
|
+
https://github.com/MaastrichtU-IDS/rustdl for the full project.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import warnings as _warnings
|
|
10
|
+
|
|
11
|
+
# Native extension built by PyO3 + maturin
|
|
12
|
+
from rustdl._native import (
|
|
13
|
+
__version__ as __version__,
|
|
14
|
+
Classification as Classification,
|
|
15
|
+
classify as _classify_native,
|
|
16
|
+
classify_bytes as _classify_bytes_native,
|
|
17
|
+
is_consistent as is_consistent,
|
|
18
|
+
is_class_satisfiable as is_class_satisfiable,
|
|
19
|
+
is_subclass_of as is_subclass_of,
|
|
20
|
+
is_instance_of as is_instance_of,
|
|
21
|
+
instances_of as instances_of,
|
|
22
|
+
realize as realize,
|
|
23
|
+
RustdlError as RustdlError,
|
|
24
|
+
ParseError as ParseError,
|
|
25
|
+
UnsupportedAxiomError as UnsupportedAxiomError,
|
|
26
|
+
UnknownClassError as UnknownClassError,
|
|
27
|
+
materialize_inferred_subclass_axioms as materialize_inferred_subclass_axioms,
|
|
28
|
+
materialize_inferred_class_assertions as materialize_inferred_class_assertions,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _subclasses_of(self: "Classification", cls: str) -> list[str]:
|
|
33
|
+
"""All classes D in the ontology with D ⊑ cls (reflexive + proper).
|
|
34
|
+
|
|
35
|
+
Pure-Python helper. O(N) over Classification.classes per call.
|
|
36
|
+
"""
|
|
37
|
+
return [d for d in self.classes if self.is_subclass(d, cls)]
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _superclasses_of(self: "Classification", cls: str) -> list[str]:
|
|
41
|
+
"""All classes D in the ontology with cls ⊑ D (reflexive + proper).
|
|
42
|
+
|
|
43
|
+
Pure-Python helper. O(N) over Classification.classes per call.
|
|
44
|
+
"""
|
|
45
|
+
return [d for d in self.classes if self.is_subclass(cls, d)]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# Bind onto the PyO3 class so the API is symmetric:
|
|
49
|
+
# `result.subclasses_of(...)` lives next to `result.is_subclass(...)`.
|
|
50
|
+
Classification.subclasses_of = _subclasses_of # type: ignore[attr-defined]
|
|
51
|
+
Classification.superclasses_of = _superclasses_of # type: ignore[attr-defined]
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class IncompleteClassificationWarning(UserWarning):
|
|
55
|
+
"""Raised when classification hit the per-pair timeout, so the
|
|
56
|
+
returned hierarchy is a sound under-approximation (no false
|
|
57
|
+
subsumptions, but real ones may be missing). Silence with the
|
|
58
|
+
standard `warnings` module, or pass `per_pair_timeout_ms=0` to
|
|
59
|
+
classify for the complete (unbounded) result."""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _warn_if_incomplete(result: "Classification") -> "Classification":
|
|
63
|
+
n = result.timed_out_pairs
|
|
64
|
+
if n:
|
|
65
|
+
_warnings.warn(
|
|
66
|
+
f"{n} class pair(s) exceeded the per-pair timeout and were recorded as "
|
|
67
|
+
"'not subsumed' — this classification may be missing real subsumptions. "
|
|
68
|
+
"It is still sound (no false subsumptions). Pass per_pair_timeout_ms=0 "
|
|
69
|
+
"for the complete (unbounded) result, or check result.complete / "
|
|
70
|
+
"result.timed_out_pairs.",
|
|
71
|
+
IncompleteClassificationWarning,
|
|
72
|
+
stacklevel=3,
|
|
73
|
+
)
|
|
74
|
+
return result
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def classify(path, *, per_pair_timeout_ms=1000, saturation_only=False):
|
|
78
|
+
"""Classify the ontology at `path` (format auto-detected from the
|
|
79
|
+
extension: .ofn / .owx / .owl / .rdf).
|
|
80
|
+
|
|
81
|
+
`per_pair_timeout_ms` bounds each subsumption test (default 1000;
|
|
82
|
+
`0` = unbounded/complete). Pairs that exceed the budget are recorded
|
|
83
|
+
as "not subsumed" — sound, but the result may be incomplete; an
|
|
84
|
+
`IncompleteClassificationWarning` is emitted when that happens, and
|
|
85
|
+
`result.complete` / `result.timed_out_pairs` report it.
|
|
86
|
+
`saturation_only=True` skips the tableau (EL-closure under-
|
|
87
|
+
approximation; fast)."""
|
|
88
|
+
return _warn_if_incomplete(
|
|
89
|
+
_classify_native(
|
|
90
|
+
path,
|
|
91
|
+
per_pair_timeout_ms=per_pair_timeout_ms,
|
|
92
|
+
saturation_only=saturation_only,
|
|
93
|
+
)
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def classify_bytes(data, *, format, per_pair_timeout_ms=1000, saturation_only=False):
|
|
98
|
+
"""Like `classify`, but from in-memory `data` with an explicit
|
|
99
|
+
`format` ("ofn" | "owx" | "rdf-xml"). See `classify` for the
|
|
100
|
+
timeout/completeness semantics."""
|
|
101
|
+
return _warn_if_incomplete(
|
|
102
|
+
_classify_bytes_native(
|
|
103
|
+
data,
|
|
104
|
+
format=format,
|
|
105
|
+
per_pair_timeout_ms=per_pair_timeout_ms,
|
|
106
|
+
saturation_only=saturation_only,
|
|
107
|
+
)
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
__all__ = [
|
|
112
|
+
"__version__",
|
|
113
|
+
"Classification",
|
|
114
|
+
"IncompleteClassificationWarning",
|
|
115
|
+
"classify",
|
|
116
|
+
"classify_bytes",
|
|
117
|
+
"is_consistent",
|
|
118
|
+
"is_class_satisfiable",
|
|
119
|
+
"is_subclass_of",
|
|
120
|
+
"is_instance_of",
|
|
121
|
+
"instances_of",
|
|
122
|
+
"realize",
|
|
123
|
+
"RustdlError",
|
|
124
|
+
"ParseError",
|
|
125
|
+
"UnsupportedAxiomError",
|
|
126
|
+
"UnknownClassError",
|
|
127
|
+
"materialize_inferred_subclass_axioms",
|
|
128
|
+
"materialize_inferred_class_assertions",
|
|
129
|
+
]
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
rustdl — sound, performant OWL 2 DL (SROIQ) reasoner.
|
|
3
|
-
|
|
4
|
-
Python bindings for the rustdl Rust crate. Install via
|
|
5
|
-
`pip install rustdl`; import as `import rustdl`. See
|
|
6
|
-
https://github.com/MaastrichtU-IDS/rustdl for the full project.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
# Native extension built by PyO3 + maturin
|
|
10
|
-
from rustdl._native import (
|
|
11
|
-
__version__ as __version__,
|
|
12
|
-
Classification as Classification,
|
|
13
|
-
classify as classify,
|
|
14
|
-
classify_bytes as classify_bytes,
|
|
15
|
-
is_consistent as is_consistent,
|
|
16
|
-
is_class_satisfiable as is_class_satisfiable,
|
|
17
|
-
is_subclass_of as is_subclass_of,
|
|
18
|
-
is_instance_of as is_instance_of,
|
|
19
|
-
instances_of as instances_of,
|
|
20
|
-
realize as realize,
|
|
21
|
-
RustdlError as RustdlError,
|
|
22
|
-
ParseError as ParseError,
|
|
23
|
-
UnsupportedAxiomError as UnsupportedAxiomError,
|
|
24
|
-
UnknownClassError as UnknownClassError,
|
|
25
|
-
materialize_inferred_subclass_axioms as materialize_inferred_subclass_axioms,
|
|
26
|
-
materialize_inferred_class_assertions as materialize_inferred_class_assertions,
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def _subclasses_of(self: "Classification", cls: str) -> list[str]:
|
|
31
|
-
"""All classes D in the ontology with D ⊑ cls (reflexive + proper).
|
|
32
|
-
|
|
33
|
-
Pure-Python helper. O(N) over Classification.classes per call.
|
|
34
|
-
"""
|
|
35
|
-
return [d for d in self.classes if self.is_subclass(d, cls)]
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def _superclasses_of(self: "Classification", cls: str) -> list[str]:
|
|
39
|
-
"""All classes D in the ontology with cls ⊑ D (reflexive + proper).
|
|
40
|
-
|
|
41
|
-
Pure-Python helper. O(N) over Classification.classes per call.
|
|
42
|
-
"""
|
|
43
|
-
return [d for d in self.classes if self.is_subclass(cls, d)]
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
# Bind onto the PyO3 class so the API is symmetric:
|
|
47
|
-
# `result.subclasses_of(...)` lives next to `result.is_subclass(...)`.
|
|
48
|
-
Classification.subclasses_of = _subclasses_of # type: ignore[attr-defined]
|
|
49
|
-
Classification.superclasses_of = _superclasses_of # type: ignore[attr-defined]
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
__all__ = [
|
|
53
|
-
"__version__",
|
|
54
|
-
"Classification",
|
|
55
|
-
"classify",
|
|
56
|
-
"classify_bytes",
|
|
57
|
-
"is_consistent",
|
|
58
|
-
"is_class_satisfiable",
|
|
59
|
-
"is_subclass_of",
|
|
60
|
-
"is_instance_of",
|
|
61
|
-
"instances_of",
|
|
62
|
-
"realize",
|
|
63
|
-
"RustdlError",
|
|
64
|
-
"ParseError",
|
|
65
|
-
"UnsupportedAxiomError",
|
|
66
|
-
"UnknownClassError",
|
|
67
|
-
"materialize_inferred_subclass_axioms",
|
|
68
|
-
"materialize_inferred_class_assertions",
|
|
69
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-core/tests/concept_pool_proptest.proptest-regressions
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p2_disjoint_types.ofn
RENAMED
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p3_neg_opa_no_clash.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p4_same_different.ofn
RENAMED
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p5_functional_diff.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_asymmetric_one_way.ofn
RENAMED
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p6_irreflexive_distinct.ofn
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_compatible.ofn
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/abox/p7_range_disjoint.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_definition.ofn
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/datatype_facet.ofn
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/datatype/sub_data_property.ofn
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/functional-equiv-some-bug.ofn
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/named-pizza-country-bug.ofn
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-01.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-02.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-03.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-04.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-05.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-06.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-07.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/p2b0-terms-08.txt
RENAMED
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_01.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_02.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_03.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_04.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_05.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_06.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_07.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/pair_08.hermit.owx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rustdl-0.2.2 → rustdl-0.3.0}/crates/owl-dl-reasoner/tests/fixtures/phase2b/phase2b-verdicts.log
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|