Welcome to pplpy’s documentation!¶
Installation¶
pplpy is available from the Python Package Index. You can hence install it with:
$ pip install pplpy
The code source can be obtained from gitlab:
$ git clone https://gitlab.com/videlec/pplpy.git
Introduction¶
Using in Cython¶
All types from ppl are extension types and can be used with Cython. The following is a short sample of Cython code using pplpy:
from ppl.linear_algebra cimport Variable
from ppl.constraint cimport Constraint_System
from ppl.polyhedron cimport C_Polyhedron
cdef Variable x = ppl.Variable(0)
cdef Variable y = ppl.Variable(1)
cdef Variable z = ppl.Variable(2)
cdef Constraint_System cs = Constraint_System()
cs.insert(x >= 0)
cs.insert(y >= 0)
cs.insert(x + y + z == 1)
cdef C_Polyhedron poly = C_Polyhedron(cs)
print(poly.minimized_generators())
Each extension type carries an attribute thisptr
that holds a pointer to
the corresponding C++ object from ppl. Continuing the above example, one can
do:
print('dim = %lu' % poly.thisptr.space_dimension())
To avoid name collisions, the original C++ class names are prefixed with
PPL_
, for example, the original Linear_Expression
becomes
PPL_Linear_Expression
. The Python wrapper has the same name as the original
library class, that is, just Linear_Expression
. All ppl
declarations
are done in the .pxd
file ppl/ppl_decl.pxd
. Only few functionalities
from ppl
are exposed in ppl_decl.pxd
. It is also preferable to avoid
mixing C++ ppl
objects with Cython pplpy
extension types.
To compile a Cython extension using pplpy you need to:
add the path of your pplpy installation to
include_dirs
link with the
ppl
library
Here is a minimal example of a setup.py
file for a unique Cython file
called test.pyx
:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import ppl
extensions = [
Extension("test", ["test.pyx"], libraries=['ppl'], include_dirs=ppl.__path__, language='c++')
]
setup(ext_modules=cythonize(extensions))