diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-nismod-snail.spec | 622 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 624 insertions, 0 deletions
@@ -0,0 +1 @@ +/nismod-snail-0.3.0.tar.gz diff --git a/python-nismod-snail.spec b/python-nismod-snail.spec new file mode 100644 index 0000000..ea6a9f4 --- /dev/null +++ b/python-nismod-snail.spec @@ -0,0 +1,622 @@ +%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 +<p align="center"> +<a href="https://github.com/nismod/snail/tree/master/tutorials">Tutorials</a> | +<a href="https://github.com/nismod/snail/issues">Issues</a> +</p> + +<p align="center"> +<img src="./images/snail.svg" alt="snail" /> +</p> + +[](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 +<p align="center"> +<a href="https://github.com/nismod/snail/tree/master/tutorials">Tutorials</a> | +<a href="https://github.com/nismod/snail/issues">Issues</a> +</p> + +<p align="center"> +<img src="./images/snail.svg" alt="snail" /> +</p> + +[](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 +<p align="center"> +<a href="https://github.com/nismod/snail/tree/master/tutorials">Tutorials</a> | +<a href="https://github.com/nismod/snail/issues">Issues</a> +</p> + +<p align="center"> +<img src="./images/snail.svg" alt="snail" /> +</p> + +[](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 <Python_Bot@openeuler.org> - 0.3.0-1 +- Package Spec generated @@ -0,0 +1 @@ +718b4976bdf41d58bb85bfec0c5e7411 nismod-snail-0.3.0.tar.gz |