Warning
Several changes are currently performed on the library. This page may not be up to date.
Information for developers
In case you are willing to contribute to Codac, here are some information that may be useful.
Definition
CMake supports the following options for development:
Option |
Description |
---|---|
CMAKE_INSTALL_PREFIX |
|
CMAKE_BUILD_TYPE |
|
CMAKE_PREFIX_PATH |
|
WITH_CAPD=ON |
See more (not fully supported yet) |
BUILD_TESTS |
By default, the tests are not built.
To enable the compilation of tests:
cmake <other_cmake_options> -DBUILD_TESTS=ON ..
|
TEST_EXAMPLES |
This will add the execution of the examples in the tests list. cmake <other_cmake_options> -DTEST_EXAMPLES=ON ..
|
WITH_PYTHON |
Note: you need to have To enable the compilation of Python binding: cmake <other_cmake_options> -DWITH_PYTHON=ON -DCMAKE_CXX_FLAGS="-fPIC" -DCMAKE_C_FLAGS="-fPIC" ..
This configuration generates header files containing docstrings for Python, based on
the content of XML files made by Doxygen. The documentation of any C++/Python function
is then located in the C++ header files of the |
PYTHON_EXECUTABLE |
(optional) Specifies the executable (and version) of Python. For instance: cmake <other_cmake_options> -DPYTHON_EXECUTABLE=/usr/bin/python3.10 ..
|
Tips
To speed up the compilation with make
and take benefit of, for example, 4 cores of your processor, use the -j
option:
cd build
make -j4
Tests
Launch the tests:
cd build
make test
User manual
Build this user manual using Sphinx:
# Install Sphinx with
pip3 install -U sphinx breathe sphinx_rtd_theme sphinx-tabs sphinx-issues sphinx-reredirects
# Build the doc
cd build
make doc
The website will be generated in build/doc/
.
API technical documentation
For building the API technical documentation using Doxygen:
# Install Doxygen with
sudo apt install doxygen graphviz
The API pages will be generated in build/doc/api/html/
.
Script make.sh
One shortcut to build all the examples (including 3rd parties) is given by:
# From Codac root
./make.sh examples
Note that the build
folders of each example is removed before the build.
One shortcut to build the tests is given by:
# From Codac root
./make.sh tests
One shortcut to build both the examples and tests is:
# From Codac root
./make.sh all
Visualization of graphs of CN
sudo apt install dot2tex
Install IBEX for Python binding (example of local install)
cmake -DCMAKE_CXX_FLAGS="-fPIC" -DCMAKE_C_FLAGS="-fPIC" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$HOME/ibex-lib/build_install ..
IBEX uses the GAOL library by default, but Filib++ is also supported. Use -DINTERVAL_LIB=filib
during the CMake configuration to use it.
Installing local Python binding
Warning
The binding is not working with G++7 for the moment.
Get Pybind11 as submodule:
git submodule init
git submodule update
Then, configure cmake
with your custom options <...>
and -DWITH_PYTHON=ON
:
cmake <...> -DWITH_PYTHON=ON -DCMAKE_CXX_FLAGS="-fPIC" -DCMAKE_C_FLAGS="-fPIC" ..
This configuration generates header files containing docstrings for Python, based on
the content of XML files made by Doxygen. The documentation of any C++/Python function
is then located in the C++ header files of the /src
directory.
Note that you also have to configure IBEX with the -DCMAKE_CXX_FLAGS="-fPIC" -DCMAKE_C_FLAGS="-fPIC"
flag.
Finally, after the compilation of Codac (and IBEX):
# from codac repository
cd build/python/python_package
python3 setup.py develop --user
Script to create a first draft of binding
Copy the pybind11gen.py
script in the sources folder. Then, for instance:
python3 pybind11gen.py module_name=RandTrajectory codac_RandTrajectory.h
# get the files in /tmp
[For admins] Upload Python binding on PyPi (see Codac repo)
Tag the current version:
git tag -a v3.0.0-beta1
git push origin v3.0.0-beta1
Warning
-beta1
part in the version might not be always supported.Get all the wheels generated by GitHub Actions (the generated release needs to be explicitely set as latest):
sudo apt install curl wget sed
cd scripts/wheels
chmod a+x *.sh
./getlatestcodacwhl.sh
rm lk_codac_whl.ver # Optional, contain the version number that was last downloaded.
Upload the wheels on PyPi:
python3 -m twine upload --repository pypi *
Testing the Linux wheels with Docker
In the codac
directory, test the x86_64 Linux configuration locally using Docker:
chmod a+x scripts/docker/build_pybinding.sh
docker pull lebarsfa/manylinux2014_x86_64-for-codac
docker run --rm -v `pwd`:/io lebarsfa/manylinux2014_x86_64-for-codac /io/scripts/docker/build_pybinding.sh
The same can be done for the ARM Linux configurations (preferably from a powerful ARM computer, such as a Mac with Apple Silicon), see packages/temporary
folder.
[For admins] Upload Ubuntu packages
Get access to https://packages.ensta-bretagne.fr/ server as a network drive from an Ubuntu computer. If not already done, run sudo apt install dpkg-dev curl
to install some prerequisites. Then, run sudo ./getlatestcodacrelease.sh
to download automatically the .deb
files from the latest GitHub release for all the supported configurations and update the repository database (or just sudo ./gencodac.sh
to download automatically a specific version without updating the database). If you downloaded manually the .deb
files, you can update the repository database with sudo ./scanpackages.sh
.
[For admins] Upload Windows packages
Get access to https://packages.ensta-bretagne.fr/ server as a network drive from a Windows computer. If not already done, install Chocolatey and then run choco install -y wget curl 7z checksum
to install some prerequisites. Then, in choco
folder, run from the Command Prompt getlatestcodacrelease.bat
to generate a .nupkg
from the latest GitHub release (or just gencodacpackages.bat
to be able to test a specific version), then choco push codac.X.Y.Z.nupkg
(need logged in Chocolatey maintainer) when the version is considered as OK to upload to the Chocolatey repository.
MATLAB compatibility
Some operators or special functions need special attention:
Square bracket operator, see e.g.
getitem
(__setitem__
) andsetitem
(__getitem__
) in @65784a2.inter
(py::self & py::self
,__and__
,__rand__
),union
(py::self | py::self
,__or__
,__ror__
),inter_self
(py::self &= py::self
,__iand__
),union_self
(py::self |= py::self
,__ior__
),abs
(__abs__
),pow
(__pow__
),get_item
(__get_item__
),hash
(__hash__
) in @54966a6 and @a450062 (similarly: @50b1386).See also the bottom of https://fr.mathworks.com/help/matlab/matlab_external/differences-between-matlab-python.html and Start a MATLAB project.