This repository facilitates parallel development between the tudat
(C++) and the
tudatpy
(Python) library.
Specific indications for documenting tudat
or tudapy
are reported in the tudat-multidoc/README.md
file.
For more details on the project, we refer to the project website and our project Github page.
The tudat-bundle
comprises the following repositories:
tudat
, where the tudat source code is located (this is a separate git repository);tudatpy
, where the tudatpy binding code is located (this is a separate git repository);tudat-multidoc
, where the documentation and the system to build the API is located (this is a separate git repository);cli
, where the Python Command Line Interface scripts to build the API are located;
In addition, once the project is built, all the build output will be dumped in the cmake-build-debug
directory, which
is not tracked by Git. If the API is also built, more untracked directories will appear, but this is explained in the
tudat-multidoc/README.md
file.
- [Windows Users] Windows Subsystem for Linux (WSL)
- All procedures, including the following prerequisite, assume the use of WSL. Power users who wish to do otherwise, must do so at their own risk, with reduced support from the team.
- Note that WSL is a, partially separated, Ubuntu terminal environment for Windows. Anaconda/Miniconda, Python and any other dependencies you require while executing code from the
tudat-bundle
, must be installed in its Linux version via the Ubuntu terminal. This does not apply to PyCharm/CLion however, which can be configured to compile and/or run Python code through the WSL. - Note that, to access files and folders of WSL directly in Windows explorer, one can type
\\wsl$
orLinux
in the Windows explorer access bar, then press enter. - At the opposite, please follow this guide to access Windows file trough WSL.
- This guide from Microsoft contains more information on the possibilities given trough WSL.
- In the Ubuntu terminal environment under WSL, run the command
sudo apt-get install build-essential
to install the necessary compilation tools
- Anaconda/Miniconda installation (Installing Anaconda)
- CMake installation
- Inside the Ubuntu terminal, install CMake by calling
sudo apt install cmake
.
- Inside the Ubuntu terminal, install CMake by calling
- Clone the repository and enter directory
git clone https://github.com/tudat-team/tudat-bundle
cd tudat-bundle
Note
Thetudat-bundle
repository uses git submodules, which "allow you to keep a Git repository as a subdirectory of another Git repository" (from the Git guide). In particular, in thetudat-bundle
there are four different subdirectories that are separate repositories:tudat
,tudatpy
,tudat-multidoc
andtudat-multidoc/multidoc
. Each repository has its own branches and functions separately from the others. This is the reason why the following two steps are needed.
- Clone the
tudat
&tudatpy
submodules
git submodule update --init --recursive
- Switch
tudat
&tudatpy
to their desired branches using
cd <tudat/tudatpy>
git checkout <branch-name>
We recommend working with the develop
branches (tudatpy/develop, tudat/develop), as they receive frequent updates and are the ones used to build the Conda packages.
- Install the contained
environment.yaml
file to satisfy dependencies
conda env create -f environment.yaml
It is possible that the creation of the environment will 'time out'. A likely reason for this is that the packages required cannot be found by the current channel, conda-forge
. It is then advisable to add the channel anaconda
to ensure a proper creation of the environment.
There are two directions you can go from here: the command line or CLion.
- Activate the conda environment
conda activate tudat-bundle
- Build Tudat and TudatPy
This script will compile the C++ source code of Tudat into libraries. The process will take some time, but you can speed it up using the option -j
and the number of cores you want to allocate to it.
python build.py -j <number-of-cores>
You can further adjust the behavior of build.py
with additional command line arguments. Running python build.py -h
will give you a list with all the available options.
- Install
Building the libraries from source is conceptually equivalent to manually downloading them as a zip file: you do have the code, but Conda is not aware of it, so you will get an error if you try to import it. The following script creates links to the files generated by build.py
in the place where Conda will look for them or, in other words, installs your libraries in your Conda environment.
python install.py
If you know about PIP's editable installs, that is exactly what install.py
does. If you don't, just know that there is no need to reinstall the libraries when you recompile them or modify the Python source, your environment is automatically updated every time you modify a file.
If you ever want to uninstall the libraries, just run python uninstall.py
. Note that this will not eliminate the build itself, but just remove it from your Conda environment.
Note
[Windows Users ∩ CLion Users] In CLion, be sure to set WSL as your Toolchain in
File>Settings>Build, Execution, Deployment>Toolchains
.[CLion Users] In CLion, the convention to set CMake arguments is to add them to
File>Settings>Build, Execution, Deployment>CMake Options
.
- Open CLion, create a new project from
File > New Project
and select the directory that has been cloned under bullet point 1 (namedtudat-bundle
).
Note
To avoid issues with CLion, the directory of the project should correspond exactly to the cloned directory namedtudat-bundle
.
- Create a build profile in
File > Settings > Build, Execution, Deployment > CMake
.
Note
The CMake configuration optionCMAKE_BUILD_TYPE
will be determined by the the build profile'sBuild type
entry. ARelease
configuration will suppress a significant amount of harmless warnings during compilation. Currently, with the move to a later version of boost, some warnings have cropped up that have either not been fixed in the source code, or have not been suppressed viatudat/cmake_modules/compiler.cmake
.
- Add the CMake configuration to the
File > Settings > Build, Execution, Deployment > CMake > CMake options
text box:
-DCMAKE_PREFIX_PATH=<CONDA_PREFIX>
-DCMAKE_CXX_STANDARD=14
-DBoost_NO_BOOST_CMAKE=ON
The CONDA_PREFIX
may be determined by activating the environment installed in step 4 and printing its value:
conda activate tudat-bundle && echo $CONDA_PREFIX
The following line can also be edited if you wish to build tudatpy with its debug info (switching from Release
to RelWithDebInfo
; note that Debug
is also available):
-DCMAKE_BUILD_TYPE=RelWithDebInfo
[Optional] Add -j<n>
to File > Settings > Build, Execution, Deployment > CMake > Build options
to use multiple
processors. It is likely that if you use all of your processors, your build will freeze your PC indefinitely. It is
recommended to start at -j2
and work your way up with further builds, ensuring no unsaved work in the background.
-
In the source tree on the left, right click the top level
CMakeLists.txt
thenLoad/Reload CMake Project
. -
Build > Build Project
- Enter the
tudat
build directory
cd <build_directory>/tudat
- Run the tests using
ctest
(packaged with CMake)
ctest
Desired result:
..
100% tests passed, 0 tests failed out of 224
Total Test time (real) = 490.77 sec
- Enter the
tudatpy
build directory
cd <build_directory>/tudatpy
- Run the tests using
pytest
pytest
Desired result:
=========================================== 6 passed in 1.78s ============================================