Get started

Install SENTIL

Install SENTIL for your ecosystem via package managers or build it yourself from source.

Overview

Every SENTIL package carries the compiled engine inside it, so your package manager is the whole install.

From a package manager

You need Python 3.8 or newer.

pip install sentil

Verify:

check.py
import sentil
from sentil import Formula

trace = sentil.Trace([0, 1, 2, 3, 4], {"speed": [12, 9, 7, 4, 6]})
print(Formula.parse("G (speed > 5)").robustness(trace))
-1.0

The Python page has the pandas extra, streaming, probabilistic checking, and the full API.

You need a stable Rust toolchain. In your project:

cargo add sentil

Verify:

src/main.rs
use sentil::{Formula, Trace};

fn main() -> sentil::Result<()> {
    let mut trace = Trace::new(vec![0.0, 1.0, 2.0, 3.0, 4.0])?;
    trace.add_signal("speed", vec![12.0, 9.0, 7.0, 4.0, 6.0])?;
    println!("{}", Formula::parse("G (speed > 5)")?.robustness(&trace)?);
    Ok(())
}
-1

The Rust page covers the feature flags, the monitor-only build, and the full API.

The C ABI ships as sentil, through either package manager:

vcpkg install sentil
conan install --requires=sentil/0.3.0

Verify the toolchain sees it:

pkg-config --modversion sentil
0.3.0

The C page wires it into CMake or pkg-config, gives the full API reference, and covers the .deb and .rpm packages and the release archives.

The C++ wrapper ships as sentil-cpp and pulls the C ABI in with it, so this one package is enough:

vcpkg install sentil-cpp
conan install --requires=sentil-cpp/0.3.0

Verify the toolchain sees it:

pkg-config --modversion sentil
0.3.0

The C++ page wires it into CMake or pkg-config, gives the full API reference, and covers the .deb and .rpm packages and the release archives.

Requires JDK 11 or later.

<dependency>
  <groupId>io.github.sedislab</groupId>
  <artifactId>sentil</artifactId>
  <version>0.3.0</version>
</dependency>

For Gradle: implementation("io.github.sedislab:sentil:0.3.0").

Verify:

Main.java
import io.github.sedislab.sentil.*;

public class Main {
    public static void main(String[] args) throws Exception {
        try (Trace trace = Trace.create(new double[]{0, 1, 2, 3, 4});
             Formula phi = Formula.parse("G (speed > 5)")) {
            trace.addSignal("speed", new double[]{12, 9, 7, 4, 6});
            System.out.println(phi.robustness(trace));   // -1.0
        }
    }
}

The Java page covers the handle lifecycle and the full API reference.

] add Sentil

Verify:

using Sentil

trace = Trace(collect(0.0:1.0:4.0), "speed", [12, 9, 7, 4, 6])
println(robustness(formula("G (speed > 5)"), trace))
-1.0

The Julia page covers streaming, probabilistic checking, and the full API.

You need MATLAB R2021b or newer. Get Sentil.mltbx from the File Exchange or a GitHub release, then double-click it or install from the command window:

matlab.addons.toolbox.installToolbox('Sentil.mltbx')

Verify:

trace = sentil.Trace([0 1 2 3 4], 'speed', [12 9 7 4 6]);
phi = sentil.Formula.parse('G (speed > 5)');
phi.robustness(trace)   % -1

The MATLAB page covers the Simulink block and the full API.

# macOS or Linux
brew install sedislab/sentil/sentil
# Windows
winget install SEDIS.SENTIL

Scoop, the AUR, cargo install sentil-cli, and the per-platform archives are on the CLI page.

Verify:

sentil --version
sentil 0.3.0

The CLI page has every subcommand, the Raspberry Pi install, and the output formats.

For Humble, Jazzy, Kilted, and Lyrical; swap the distribution name into the package:

sudo apt install ros-humble-sentil-ros

Verify:

ros2 pkg xml sentil_ros | head -3

A <name>sentil_ros</name> line means SENTIL is available in the workspace. The ROS page has the colcon build, the monitor node, and its parameters.

Don't have a package manager?

From source

You need a Rust toolchain.

git clone https://github.com/sedislab/SENTIL
cd SENTIL
cargo install --path sentil-cli          # the CLI, onto your path
cargo build --release -p sentil-ffi      # libsentil + sentil-ffi/include/sentil.h

Each language page has its own from-source section for building that binding against a local core.

Next step

With SENTIL installed, write your first monitor.

Edit this page on GitHub