Skip to main content

The spatial networks impact assessment library

Project description

Tutorials | Issues

snail

Build

This code is under early development

🤔 What is this?

This is a Python package to help with analysis of the potential impacts of climate hazards and other perils on infrastructure networks.

Installation

Install using pip:

pip install nismod-snail

This should bring all dependencies with it. If any of these cause difficulties, try using a conda environment:

conda env create -n snail_env \
    python=3.8 geopandas shapely rasterio python-igraph
conda activate snail_env
pip install nismod-snail

If all worked okay, you should be able to run python and import snail:

$ python
>>> import snail
>>> help(snail)
Help on package snail:

NAME
    snail - snail - the spatial networks impact assessment library

Development

Clone this repository using GitHub Desktop or on the command line:

git clone git@github.com:nismod/snail.git

Change directory into the root of the project:

cd snail

To create and activate a conda environment with snail's dependencies installed:

conda env create -f .environment.yml
conda activate snail-dev

Run this to install the source code as a package:

pip install .

If you're working on snail itself, install it as "editable" along with test and development packages:

pip install -e .[dev]

Run tests using pytest and pytest-cov to check coverage:

pytest --cov=snail --cov-report=term-missing

Run a formatter (black) to fix code formatting:

black src/snail

When working on the tutorial notebooks, it is recommended to install and configure nbstripout so data and outputs are not committed in the notebook files:

nbstripout --install

C++ library

The C++ library in src/cpp contains the core routines to find intersections of lines with raster grids.

Before working on the C++ library, fetch source code for Catch2 unit testing library (this is included as a git submodule):

git submodule update --init --recursive

Build the library and run tests:

cmake -Bbuild .
cmake --build build/
./build/run_tests

Run code style auto-formatting:

clang-format -i src/cpp/*.hpp

Run lints and checks:

clang-tidy --checks 'cppcoreguidelines-*' src/cpp/*.hpp

This may need some includes for pybind11 - which will vary depending on your python installation. For example, with python via miniconda:

clang-tidy --checks 'cppcoreguidelines-*' src/cpp/* -- \
    -I/home/username/miniconda3/include/python3.7m/ \
    -I./pybind11/include/

Integration of C++ and Python using pybind11

The snail.core.intersections module is built using pybind11 with setuptools

  • src/cpp/intersections.cpp defines the module interface using the PYBIND11_MODULE macro
  • pyproject.toml defines the build requirements for snail, which includes pybind11, wheel and setuptools
  • setup.py defines the Pybind11Extension module to build - both the C++ files to compile, and the location of the built module within the python package

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nismod-snail-0.2.1.tar.gz (64.2 kB view hashes)

Uploaded Source

Built Distributions

nismod_snail-0.2.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (109.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

nismod_snail-0.2.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (115.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

nismod_snail-0.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (80.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

nismod_snail-0.2.1-cp310-cp310-musllinux_1_1_x86_64.whl (630.7 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

nismod_snail-0.2.1-cp310-cp310-musllinux_1_1_i686.whl (688.0 kB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ i686

nismod_snail-0.2.1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (111.2 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64

nismod_snail-0.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (118.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

nismod_snail-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl (82.4 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

nismod_snail-0.2.1-cp310-cp310-macosx_10_9_universal2.whl (151.1 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

nismod_snail-0.2.1-cp39-cp39-musllinux_1_1_x86_64.whl (630.8 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

nismod_snail-0.2.1-cp39-cp39-musllinux_1_1_i686.whl (687.9 kB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ i686

nismod_snail-0.2.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (111.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

nismod_snail-0.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (119.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

nismod_snail-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl (82.5 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

nismod_snail-0.2.1-cp39-cp39-macosx_10_9_universal2.whl (151.3 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

nismod_snail-0.2.1-cp38-cp38-musllinux_1_1_x86_64.whl (630.6 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

nismod_snail-0.2.1-cp38-cp38-musllinux_1_1_i686.whl (687.8 kB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ i686

nismod_snail-0.2.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (111.2 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

nismod_snail-0.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (118.8 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

nismod_snail-0.2.1-cp38-cp38-macosx_10_9_x86_64.whl (82.3 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

nismod_snail-0.2.1-cp38-cp38-macosx_10_9_universal2.whl (150.9 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

nismod_snail-0.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl (632.3 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

nismod_snail-0.2.1-cp37-cp37m-musllinux_1_1_i686.whl (689.8 kB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ i686

nismod_snail-0.2.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (111.9 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

nismod_snail-0.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (118.6 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

nismod_snail-0.2.1-cp37-cp37m-macosx_10_9_x86_64.whl (81.6 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

nismod_snail-0.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl (632.4 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ x86-64

nismod_snail-0.2.1-cp36-cp36m-musllinux_1_1_i686.whl (689.7 kB view hashes)

Uploaded CPython 3.6m musllinux: musl 1.1+ i686

nismod_snail-0.2.1-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (111.9 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

nismod_snail-0.2.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl (118.6 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

nismod_snail-0.2.1-cp36-cp36m-macosx_10_9_x86_64.whl (81.6 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page