Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Reasonable

Nightly Build Build PyPI version

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.

benchmark

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_alpha10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reasonable 0.1.47_alpha10
File Size Uploaded Provenance Actions
reasonable-0.1.47_alpha10.tar.gz 1.5 MB Without provenance Details for reasonable-0.1.47_alpha10.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for reasonable 0.1.47_alpha10
File Interpreter ABI Platform Actions
reasonable-0.1.47_alpha10-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl Python 3 none Linux glibc 2.5+ x86-64 Details for reasonable-0.1.47_alpha10-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
reasonable-0.1.47_alpha10-cp37-abi3-manylinux_2_24_x86_64.whl CPython 3.7 abi3 Linux glibc 2.24+ x86-64 Details for reasonable-0.1.47_alpha10-cp37-abi3-manylinux_2_24_x86_64.whl
reasonable-0.1.47_alpha10-cp37-abi3-macosx_10_7_x86_64.whl CPython 3.7 abi3 macOS 10.7+ x86-64 Details for reasonable-0.1.47_alpha10-cp37-abi3-macosx_10_7_x86_64.whl

Total release size: 2.3 MB

Release files / reasonable-0.1.47_alpha10.tar.gz

Download URL reasonable-0.1.47_alpha10.tar.gz
Size 1.5 MB
Tags Source
SHA-256 checksum
How to use checksums
ca9186b7cb31bf09dc17b3cd7aea5c91279e7daa28533d2e36bcbf5340fdd79f
BLAKE2b-256 checksum
How to use checksums
60cb868ca0498fdfb1d2d308e285ff26deffc263fed84f4f832354eda5f192ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/0.11.1

Release files / reasonable-0.1.47_alpha10-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl

Download URL reasonable-0.1.47_alpha10-py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.whl
Size 6.5 kB
Tags Linux glibc 2.5+ x86-64 Python 3
SHA-256 checksum
How to use checksums
5c14343c48a44bf0cb78d3c535c8012dd9fa2ec41f7b5b9d0341f02e0d39b972
BLAKE2b-256 checksum
How to use checksums
39ddf29f487da4157ef05e61efd1cc3afccc2130e09feaae66d1a177764a999a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/0.11.1

Release files / reasonable-0.1.47_alpha10-cp37-abi3-manylinux_2_24_x86_64.whl

Download URL reasonable-0.1.47_alpha10-cp37-abi3-manylinux_2_24_x86_64.whl
Size 438.7 kB
Tags CPython 3.7 Linux glibc 2.24+ x86-64 abi3
SHA-256 checksum
How to use checksums
dbdef3bd42f2c9d4f18f8cf7bad3ec89adee636423f764a4b18e0721f2511ddd
BLAKE2b-256 checksum
How to use checksums
faaf1b6188e3d7c124431b0e627a7752257a56b11219211fa5eed6aa9537f238
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/0.11.3

Release files / reasonable-0.1.47_alpha10-cp37-abi3-macosx_10_7_x86_64.whl

Download URL reasonable-0.1.47_alpha10-cp37-abi3-macosx_10_7_x86_64.whl
Size 410.7 kB
Tags CPython 3.7 abi3 macOS 10.7+ x86-64
SHA-256 checksum
How to use checksums
19ca115db16ce576f150fcada1903694a7e6a80eb3a83aa905e4d4849c9468ed
BLAKE2b-256 checksum
How to use checksums
80d7146f14add2a8dc65cf5cc16db8c7a045f2263a9b4f95c90107bd9f063855
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via maturin/0.11.3

Security for reasonable 0.1.47_alpha10

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.

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page