Awesome
Ibex python binding
Introduction
pyIbex is a python binding of ibex-lib. It aims at providing a basic interface of Ibex types (Interval, IntervalVector, Function, Ctc, Sep, ...), and high level functionalities such as contractors and separators programming.
It uses pybind11 to link C++ code to python. It contains core functionalities of ibex and additional modules:
- geometry to deal with geometrical constraints
See pyibex website for more informations.
Install with a precompiled version using pip
With pip
>>> python -m pip install pyibex
try it.
A set of example can be found in the pyibex/example directory. to run them enter:
>>> python -m pyibex.example.main
Build From Source
Dependancies
- CMake (>= 2.8.12)
- Python (tested with 3.4, 3.5, 3.6, but should work with >= 2.7)
- pybind11 required C++11 support
- ibex-lib custom version from github
- a C++ compiler for your platform , e.g. GCC (>= 4.8), MSVS 13, llvm
###Building
The build process is entirely based on cmake with the following options:
- use -DCMAKE_INSTALL_PREFIX= to change the install destination
- use -DCMAKE_BUILD_TYPE=DEBUG | RELEASE to change the compilation mode
- use -DIBEX_ROOT= if ibex is installed in a non-standard directory
- use -DPYTHON_VERSION= to set the target python version.
Sometime, you will have to manually specify python executable, include and libs directory using:
-using -DPYTHON_EXECUTABLE to specify python executable path.
Alternatively, run the provided script/install.sh
script.
remark : If Ibex isn't installed on the current machine, it will be downloaded, build and installed.
remark : Ibex must be compuled with the -fPIC option
Linux/Mac OS X
If ibex-lib is not installed
git clone -b develop https://github.com/ibex-team/ibex-lib.git
cd ibex-lib
mkdir build && cd build
cmake -DCMAKE_CXX_FLAGS="-fPIC" -DCMAKE_C_FLAGS="-fPIC" ..
make && make check && make install
To install pyIbex run the following commands:
git clone https://github.com/benEnsta/pyIbex.git
cd pyIbex
git submodule init
mkdir -p build && cd build
make && make test
# generate the python package
make pip_package
# or go to the package directory and install in dev mode
cd ./src/python_package
python ./setup.py develop
###For Windows Users (Win64 version) (Not ready Yet)
- Build Ibex Open the developer command prompt and compile ibex-lib
git clone -b with_cmake https://github.com/benEnsta/ibex-lib.git
cd ibex-lib
mkdir build
cd build
cmake -G "Visual Studio 12 2013 Win64" -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF ../
msbuild /P:Configuration=Release /p:RuntimeLibrary=MT_StaticRelease PACKAGE.vcxproj
The last command generates a installer for ibex-lib
cd pyIbex
mkdir build
cd build
cmake -G "Visual Studio 12 2013 Win64" -DIBEX_ROOT=$$$$$$$$ -DPYTHON_EXECUTABLE=$$$$$$$$ ../
msbuild /P:Configuration=Release /p:RuntimeLibrary=MT_StaticRelease INSTALL.vcxproj
Tutorial
###Basic types manipulation
# Load pyIbex lib
from pyIbex import *
# Create new Intervals
a = Interval.EMPTY_SET
a = Interval.ALL_REALS
a = Interval(-2, 3)
# Create IntervalVector
b = IntervalVector( 2, a)
c = IntervalVector([1,2,3])
d = IntervalVector([[-1,3], [3,10], [-3, -1]])
e = IntervalVector( (a, Interval(-1,0), Interval(0)) )
# Operations
e = c & d
e = c+d
e = a * c
###Functions and contractors manipulation
# Define a Function from an equation
f = Function("x", "y", "x^2 + y^2 - 3")
# FwdBwd Contractor
ctc1 = CtcFwdBwd(f, CmpOp.LEQ, FwdMode.AFFINE_MODE)
# CtcIn/CtcOut contractors :math:`$f \in [-2.5, 3.5]$`
ctcIn = CtcIn(f, Interval(3).inflate(0.5))
ctcOut = CtcNotIn(f, Interval(3).inflate(0.5))
# Operations on Contractors
# composition of two contractor
ctc = ctcIn & ctcOut
# union of a python list of contractors
ctc1 = CtcUnion([ctcIn, ctcOut, ctc1])