Developer Installation

To develop new code for CCL, you need to install it using pip’s development install. This installation method creates a symbolic link between your Python site-packages directory and the copy of CCL you are working on locally. Thus when you change CCL Python code, you do not need to reinstall CCL in order for the changes to be visible system-wide. Note, if you change the CCL C code, you will need to force CCL to recompile the code (and copy the resulting .so into the Python package) by rerunning the command below.

To install CCL using a pip developer installation, it is recommended to use a Conda environment to manage dependencies (matching the CI environment).

# Create conda environment from the project specification
$ conda env create -f .github/environment.yml
$ conda activate test

# Install CCL in development mode
$ pip install -v -e .

If you prefer a manual setup or virtualenv:

# Install system dependencies (e.g. via brew or apt)
$ brew install cmake swig gsl fftw
# or: sudo apt-get install cmake swig libgsl-dev libfftw3-dev

# Create virtual environment
$ python3 -m venv venv
$ source venv/bin/activate

# Install Python dependencies
$ pip install --upgrade pip setuptools wheel
$ pip install numpy pytest pytest-cov

# Install CCL in development mode
$ pip install -v -e .

To run the tests, you will need the Boltzmann codes installed (CAMB, CLASS, etc.), which are handled automatically if you use the Conda environment method.

To compile the C code with debugging symbols, add the --debug option when calling setup.py:

$ python setup.py --debug develop

Or with pip:

$ pip install --no-deps -e . --global-option=--debug

To remove old build products that might conflict when re-compiling CCL, run

$ python setup.py clean

C-layer Dependencies and Requirements

CCL has several C dependencies. The CMake build will download and compile these automatically if they are not present on your system. However, if you do have them installed locally in a spot accessible to CMake, the local versions will be used.

These dependencies are

  • GNU Scientific Library GSL, version 2.1 or above

  • FFTW3 version 3.1 or above

  • SWIG

Uninstalling CCL in Developer Mode

To uninstall CCL in developer mode, simply type

$ pip uninstall pyccl

Bootstrapping a CCL Development Environment with conda

One of the easier ways to get started with CCL development is to use conda-forge to provide the third-party requirements above and the necessary compilers. The following commands will get you started with a conda-forge-based development environment. Note that before you start, make sure to follow the conda-forge instructions for use and that your PYTHONPATH variable is not set.

Then do the following

$ conda create -n ccl-dev compilers cmake swig pyccl pytest flake8
$ conda activate ccl-dev
$ conda uninstall pyccl --force
$ git clone https://github.com/LSSTDESC/CCL.git
$ cd CCL
$ pip install --no-deps -e .

This set of commands leaves a copy of the compiled C extension in the checked out copy of the code, e.g.,

$ ls pyccl/*.so
pyccl/_ccllib.so

If you make changes to the C library or checkout a new branch, simply rerun pip install --no-deps -e . to rebuild the library.