This release is a pre-release and may not be stable for production use.
Reasonable
An OWL 2 RL reasoner with reasonable performance
Performance
Comparing performance of reasonable with OWLRL and Allegro. Evaluation consisted of loading Brick models of different sizes into the respective reasoning engine and timing how long it took to produce the materialization. reasonable is about 7x faster than Allegro and 38x faster than OWLRL on this workload.
How to Use
Python
To facilitate usage, we use the pyo3 project to generate Python 3.x bindings to this project.
Installing these should be as easy as pip install reasonable.
See also the brickschema package for working with Brick models. The package provides a generic interface to this reasoner and several others.
Usage looks like:
import reasonable
# import triples from an rdflib Graph
import rdflib
g = rdflib.Graph()
g.parse("example_models/ontologies/Brick.n3", format="n3")
g.parse("example_models/small1.n3", format="n3")
r = reasonable.PyReasoner()
r.from_graph(g)
triples = r.reason()
print("from rdflib:", len(triples))
# import triples from files on disk
r = reasonable.PyReasoner()
r.load_file("example_models/ontologies/Brick.n3")
r.load_file("example_models/small1.n3")
triples = r.reason()
print("from files:", len(triples))
Rust
See Rust docs
Example of usage from Rust:
use ::reasonable::owl::Reasoner;
use std::env;
use std::time::Instant;
use log::info;
fn main() {
env_logger::init();
let mut r = Reasoner::new();
env::args().skip(1).map(|filename| {
info!("Loading file {}", &filename);
r.load_file(&filename).unwrap()
}).count();
let reasoning_start = Instant::now();
info!("Starting reasoning");
r.reason();
info!("Reasoning completed in {:.02}sec", reasoning_start.elapsed().as_secs_f64());
r.dump_file("output.ttl").unwrap();
}
OWL 2 Rules
Using rule definitions from here.
TODO: implement RDF/RDFS entailment semantics as described here
Note: haven't implemented rules that produce exceptions; waiting to determine the best way of handling these errors.
Equality Semantics
| Completed | Rule name | Notes |
|---|---|---|
| no | eq-ref |
implementation is very inefficient; causes lots of flux |
| yes | eq-sym |
|
| yes | eq-trans |
|
| yes | eq-rep-s |
|
| yes | eq-rep-p |
|
| yes | eq-rep-o |
|
| no | eq-diff1 |
throws exception |
| no | eq-diff2 |
throws exception |
| no | eq-diff3 |
throws exception |
Property Axiom Semantics
| Completed | Rule name | Notes |
|---|---|---|
| no | prp-ap |
|
| yes | prp-dom |
|
| yes | prp-rng |
|
| yes | prp-fp |
|
| yes | prp-ifp |
|
| yes | prp-irp |
throws exception |
| yes | prp-symp |
|
| yes | prp-asyp |
throws exception |
| yes | prp-trp |
|
| yes | prp-spo1 |
|
| no | prp-spo2 |
|
| yes | prp-eqp1 |
|
| yes | prp-eqp2 |
|
| yes | prp-pdw |
throws exception |
| no | prp-adp |
throws exception |
| yes | prp-inv1 |
|
| yes | prp-inv2 |
|
| no | prp-key |
|
| no | prp-npa1 |
throws exception |
| no | prp-npa2 |
throws exception |
Class Semantics
| Completed | Rule name | Notes |
|---|---|---|
| yes | cls-thing |
|
| yes | cls-nothing1 |
|
| yes | cls-nothing2 |
throws exception |
| yes | cls-int1 |
|
| yes | cls-int2 |
|
| yes | cls-uni |
|
| yes | cls-com |
throws exception |
| yes | cls-svf1 |
|
| yes | cls-svf2 |
|
| yes | cls-avf |
|
| yes | cls-hv1 |
|
| yes | cls-hv2 |
|
| no | cls-maxc1 |
throws exception |
| no | cls-maxc2 |
|
| no | cls-maxqc1 |
throws exception |
| no | cls-maxqc2 |
throws exception |
| no | cls-maxqc3 |
|
| no | cls-maxqc4 |
|
| no | cls-oo |
Class Axiom Semantics
| Completed | Rule name | Notes |
|---|---|---|
| yes | cax-sco |
|
| yes | cax-eqc1 |
|
| yes | cax-eqc2 |
|
| yes | cax-dw |
throws exception |
| no | cax-adc |
throws exception |
Other
- no datatype semantics for now
Metadata
Release files for reasonable 0.1.47_alpha1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| reasonable-0.1.47_alpha1.tar.gz | 1.5 MB | Without provenance | Details for reasonable-0.1.47_alpha1.tar.gz |
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| reasonable-0.1.47_alpha1-cp39-cp39-macosx_10_7_x86_64.whl | CPython 3.9 | CPython 3.9 | macOS 10.7+ x86-64 | Details for reasonable-0.1.47_alpha1-cp39-cp39-macosx_10_7_x86_64.whl |
| reasonable-0.1.47_alpha1-cp38-cp38-macosx_10_7_x86_64.whl | CPython 3.8 | CPython 3.8 | macOS 10.7+ x86-64 | Details for reasonable-0.1.47_alpha1-cp38-cp38-macosx_10_7_x86_64.whl |
| reasonable-0.1.47_alpha1-cp37-cp37m-macosx_10_7_x86_64.whl | CPython 3.7 | CPython 3.7 pymalloc | macOS 10.7+ x86-64 | Details for reasonable-0.1.47_alpha1-cp37-cp37m-macosx_10_7_x86_64.whl |
| reasonable-0.1.47_alpha1-cp36-cp36m-macosx_10_7_x86_64.whl | CPython 3.6 | CPython 3.6 pymalloc | macOS 10.7+ x86-64 | Details for reasonable-0.1.47_alpha1-cp36-cp36m-macosx_10_7_x86_64.whl |
Total release size: 3.1 MB
Release files / reasonable-0.1.47_alpha1.tar.gz
| Download URL | reasonable-0.1.47_alpha1.tar.gz |
|---|---|
| Size | 1.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff2cff91f7ed64c85a0e1c55a2aa60f5a0e263fca0a711697a677b09ccc3dc71
|
|
BLAKE2b-256 checksum How to use checksums |
a02fcf97330cda3b6805bddc93093939924a26783c4943b1764b5dcaf76c716d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/0.11.3
|
Release files / reasonable-0.1.47_alpha1-cp39-cp39-macosx_10_7_x86_64.whl
| Download URL | reasonable-0.1.47_alpha1-cp39-cp39-macosx_10_7_x86_64.whl |
|---|---|
| Size | 410.5 kB |
| Tags | CPython 3.9 macOS 10.7+ x86-64 |
|
SHA-256 checksum How to use checksums |
7c2f0ba37ce0ee8dc0e2df99f8adee990863845aab73c05c840da2b5c785ac1a
|
|
BLAKE2b-256 checksum How to use checksums |
d5023faf351144dc7511d74459717c0b7892ca78724bad63fcfde5b8a493a912
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/0.11.3
|
Release files / reasonable-0.1.47_alpha1-cp38-cp38-macosx_10_7_x86_64.whl
| Download URL | reasonable-0.1.47_alpha1-cp38-cp38-macosx_10_7_x86_64.whl |
|---|---|
| Size | 409.8 kB |
| Tags | CPython 3.8 macOS 10.7+ x86-64 |
|
SHA-256 checksum How to use checksums |
ecebec05409a526da7e550a913426d3ded08c398d75c045bb82f2685c959005d
|
|
BLAKE2b-256 checksum How to use checksums |
e36c3fcdd4b30829d6809067048b1fc9d0e78d92283b1b6d1e7d8ab1830837cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/0.11.3
|
Release files / reasonable-0.1.47_alpha1-cp37-cp37m-macosx_10_7_x86_64.whl
| Download URL | reasonable-0.1.47_alpha1-cp37-cp37m-macosx_10_7_x86_64.whl |
|---|---|
| Size | 409.8 kB |
| Tags | CPython 3.7 CPython 3.7 pymalloc macOS 10.7+ x86-64 |
|
SHA-256 checksum How to use checksums |
579d9b0b62e3a3e3bffcaf6022e253f38db4dc63fa75fa0c536d7d201fd9c7a5
|
|
BLAKE2b-256 checksum How to use checksums |
ff0c3559f585c24f267464f187be3854b47911d88798a3b09a299c142ffe15b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/0.11.3
|
Release files / reasonable-0.1.47_alpha1-cp36-cp36m-macosx_10_7_x86_64.whl
| Download URL | reasonable-0.1.47_alpha1-cp36-cp36m-macosx_10_7_x86_64.whl |
|---|---|
| Size | 409.4 kB |
| Tags | CPython 3.6 CPython 3.6 pymalloc macOS 10.7+ x86-64 |
|
SHA-256 checksum How to use checksums |
0fb2f2ff0be23a83b5eadee5e40fa3a69cab37f278afa9b0729535578dfe4cf6
|
|
BLAKE2b-256 checksum How to use checksums |
fc7d4b9c0086ab3eead989004432f3a9e0b0408fcbef4d4a6a09cda81da108c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/0.11.3
|
Security for reasonable 0.1.47_alpha1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.