%global _empty_manifest_terminate_build 0
Name: python-nismod-snail
Version: 0.3.0
Release: 1
Summary: The spatial networks impact assessment library
License: MIT License
URL: https://github.com/nismod/snail
Source0: https://mirrors.nju.edu.cn/pypi/web/packages/f3/ab/e3251f834c308d68cbd59c0ca18e4591cab4769624b2e6e92b2efe4230bb/nismod-snail-0.3.0.tar.gz
BuildArch: noarch
Requires: python3-geopandas
Requires: python3-pyarrow
Requires: python3-igraph
Requires: python3-rasterio
Requires: python3-shapely
Requires: python3-affine
Requires: python3-black
Requires: python3-nbstripout
Requires: python3-numpy
Requires: python3-pytest-cov
Requires: python3-pytest
Requires: python3-sphinx
Requires: python3-m2r2
%description
Tutorials |
Issues
[](https://github.com/nismod/snail/actions/workflows/build.yml)
> 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](https://docs.conda.io/en/latest/miniconda.html) 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
## Using the `snail` command
Once installed, you can use `snail` directly from the command line.
Split features on a grid defined by its transform, width and height:
```bash
snail split \
--features input.shp \
--transform 1 0 -180 0 -1 90 \
--width 360 \
--height 180 \
--output split.gpkg
```
Split features on a grid defined by a GeoTIFF, optionally adding the values from each raster band to each split feature as a new attribute:
```bash
snail split \
--features lines.geojson \
--raster gridded_data.tif \
--attribute \
--output split_lines_with_raster_values.geojson
```
Split multiple vector feature files along the grids defined by multiple raster files, attributing all raster values:
```bash
snail process -fs features.csv -rs rasters.csv
```
Where at a minimum, each CSV has a column `path` with the path to each file.
### Transform
A note on `transform` - these six numbers define the transform from `i,j` cell index (column/row) coordinates in the rectangular grid to `x,y` geographic coordinates, in the coordinate reference system of the input and output files. They effectively form the first two rows of a 3x3 matrix:
```
| x | | a b c | | i |
| y | = | d e f | | j |
| 1 | | 0 0 1 | | 1 |
```
In cases without shear or rotation, `a` and `e` define scaling or grid cell size, while `c` and `f` define the offset or grid upper-left corner:
```
| x_scale 0 x_offset |
| 0 y_scale y_offset |
| 0 0 1 |
```
See [`rasterio/affine`](https://github.com/rasterio/affine#usage) and [GDAL Raster Data Model](https://gdal.org/user/raster_data_model.html#affine-geotransform) for more documentation.
## Development
Clone this repository using [GitHub Desktop](https://desktop.github.com/) 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](https://docs.pytest.org/en/latest/) and
[pytest-cov](https://pytest-cov.readthedocs.io) to check coverage:
pytest --cov=snail --cov-report=term-missing
Run a formatter ([black](https://github.com/psf/black)) to fix code
formatting:
black src/snail
When working on the tutorial notebooks, it is recommended to install and
configure [nbstripout](https://github.com/kynan/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` (see [docs](https://pybind11.readthedocs.io/en/stable/compiling.html#building-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
%package -n python3-nismod-snail
Summary: The spatial networks impact assessment library
Provides: python-nismod-snail
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pip
%description -n python3-nismod-snail
Tutorials |
Issues
[](https://github.com/nismod/snail/actions/workflows/build.yml)
> 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](https://docs.conda.io/en/latest/miniconda.html) 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
## Using the `snail` command
Once installed, you can use `snail` directly from the command line.
Split features on a grid defined by its transform, width and height:
```bash
snail split \
--features input.shp \
--transform 1 0 -180 0 -1 90 \
--width 360 \
--height 180 \
--output split.gpkg
```
Split features on a grid defined by a GeoTIFF, optionally adding the values from each raster band to each split feature as a new attribute:
```bash
snail split \
--features lines.geojson \
--raster gridded_data.tif \
--attribute \
--output split_lines_with_raster_values.geojson
```
Split multiple vector feature files along the grids defined by multiple raster files, attributing all raster values:
```bash
snail process -fs features.csv -rs rasters.csv
```
Where at a minimum, each CSV has a column `path` with the path to each file.
### Transform
A note on `transform` - these six numbers define the transform from `i,j` cell index (column/row) coordinates in the rectangular grid to `x,y` geographic coordinates, in the coordinate reference system of the input and output files. They effectively form the first two rows of a 3x3 matrix:
```
| x | | a b c | | i |
| y | = | d e f | | j |
| 1 | | 0 0 1 | | 1 |
```
In cases without shear or rotation, `a` and `e` define scaling or grid cell size, while `c` and `f` define the offset or grid upper-left corner:
```
| x_scale 0 x_offset |
| 0 y_scale y_offset |
| 0 0 1 |
```
See [`rasterio/affine`](https://github.com/rasterio/affine#usage) and [GDAL Raster Data Model](https://gdal.org/user/raster_data_model.html#affine-geotransform) for more documentation.
## Development
Clone this repository using [GitHub Desktop](https://desktop.github.com/) 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](https://docs.pytest.org/en/latest/) and
[pytest-cov](https://pytest-cov.readthedocs.io) to check coverage:
pytest --cov=snail --cov-report=term-missing
Run a formatter ([black](https://github.com/psf/black)) to fix code
formatting:
black src/snail
When working on the tutorial notebooks, it is recommended to install and
configure [nbstripout](https://github.com/kynan/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` (see [docs](https://pybind11.readthedocs.io/en/stable/compiling.html#building-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
%package help
Summary: Development documents and examples for nismod-snail
Provides: python3-nismod-snail-doc
%description help
Tutorials |
Issues
[](https://github.com/nismod/snail/actions/workflows/build.yml)
> 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](https://docs.conda.io/en/latest/miniconda.html) 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
## Using the `snail` command
Once installed, you can use `snail` directly from the command line.
Split features on a grid defined by its transform, width and height:
```bash
snail split \
--features input.shp \
--transform 1 0 -180 0 -1 90 \
--width 360 \
--height 180 \
--output split.gpkg
```
Split features on a grid defined by a GeoTIFF, optionally adding the values from each raster band to each split feature as a new attribute:
```bash
snail split \
--features lines.geojson \
--raster gridded_data.tif \
--attribute \
--output split_lines_with_raster_values.geojson
```
Split multiple vector feature files along the grids defined by multiple raster files, attributing all raster values:
```bash
snail process -fs features.csv -rs rasters.csv
```
Where at a minimum, each CSV has a column `path` with the path to each file.
### Transform
A note on `transform` - these six numbers define the transform from `i,j` cell index (column/row) coordinates in the rectangular grid to `x,y` geographic coordinates, in the coordinate reference system of the input and output files. They effectively form the first two rows of a 3x3 matrix:
```
| x | | a b c | | i |
| y | = | d e f | | j |
| 1 | | 0 0 1 | | 1 |
```
In cases without shear or rotation, `a` and `e` define scaling or grid cell size, while `c` and `f` define the offset or grid upper-left corner:
```
| x_scale 0 x_offset |
| 0 y_scale y_offset |
| 0 0 1 |
```
See [`rasterio/affine`](https://github.com/rasterio/affine#usage) and [GDAL Raster Data Model](https://gdal.org/user/raster_data_model.html#affine-geotransform) for more documentation.
## Development
Clone this repository using [GitHub Desktop](https://desktop.github.com/) 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](https://docs.pytest.org/en/latest/) and
[pytest-cov](https://pytest-cov.readthedocs.io) to check coverage:
pytest --cov=snail --cov-report=term-missing
Run a formatter ([black](https://github.com/psf/black)) to fix code
formatting:
black src/snail
When working on the tutorial notebooks, it is recommended to install and
configure [nbstripout](https://github.com/kynan/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` (see [docs](https://pybind11.readthedocs.io/en/stable/compiling.html#building-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
%prep
%autosetup -n nismod-snail-0.3.0
%build
%py3_build
%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .
%files -n python3-nismod-snail -f filelist.lst
%dir %{python3_sitelib}/*
%files help -f doclist.lst
%{_docdir}/*
%changelog
* Fri May 05 2023 Python_Bot - 0.3.0-1
- Package Spec generated