snaphu


Namesnaphu JSON
Version 0.3.0 PyPI version JSON
download
home_pageNone
SummaryA simple Python wrapper for SNAPHU
upload_time2024-03-26 02:35:23
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords insar phase-unwrapping radar remote-sensing sar synthetic-aperture-radar
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # snaphu-py

[![CI](https://github.com/isce-framework/snaphu-py/actions/workflows/ci.yml/badge.svg)](https://github.com/isce-framework/snaphu-py/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/isce-framework/snaphu-py/graph/badge.svg?token=IV41TI56EA)](https://codecov.io/gh/isce-framework/snaphu-py)
[![Conda Version](https://img.shields.io/conda/vn/conda-forge/snaphu.svg)](https://anaconda.org/conda-forge/snaphu)
[![PyPI - Version](https://img.shields.io/pypi/v/snaphu.svg)](https://pypi.org/project/snaphu)

A simple Python wrapper for the Statistical-Cost, Network-Flow Algorithm for Phase
Unwrapping (SNAPHU)

## Installation

### Install with conda

You can install snaphu-py with conda using

```
$ conda install -c conda-forge snaphu
```

### Install with pip

You can install snaphu-py with pip using

```
$ pip install snaphu
```

### Install from source

To install snaphu-py from source, you will need:

- Python 3.9 or newer + pip
- A C compiler

The latest source code can be installed using

```
$ pip install git+https://github.com/isce-framework/snaphu-py.git
```

Alternatively, clone the repository (be sure to use the `--recursive` flag to fetch the
Git submodules) and install the local copy using

```
$ git clone --recursive https://github.com/isce-framework/snaphu-py.git
$ cd snaphu-py
$ pip install .
```

> [!NOTE]
> [Editable installs] are experimentally supported, with some caveats and configuration.
> See [here] for details.

[Editable installs]:
  https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs
[here]:
  https://scikit-build-core.readthedocs.io/en/latest/configuration.html#editable-installs

## Usage

### Basic usage

The main interface is the `snaphu.unwrap` function, which takes input interferogram and
coherence arrays and returns the unwrapped phase and connected component labels.

The inputs may be NumPy arrays or any other type of object that supports a similar
interface (h5py Datasets, Zarr Arrays, etc).

The following example illustrates basic usage:

```python
import numpy as np
import snaphu

# Simulate a 512x512 interferogram containing a simple diagonal phase ramp with multiple
# fringes.
y, x = np.ogrid[-3:3:512j, -3:3:512j]
igram = np.exp(1j * np.pi * (x + y))

# Sample coherence for an interferogram with no noise.
corr = np.ones(igram.shape, dtype=np.float32)

# Unwrap using the 'SMOOTH' cost mode and 'MCF' initialization method.
unw, conncomp = snaphu.unwrap(igram, corr, nlooks=1.0, cost="smooth", init="mcf")
```

The wrapped and unwrapped phase are shown below.

<p align="center">
  <img width="900" height="300" src="docs/assets/basic-wrapped-unwrapped.png">
</p>

### Working with geospatial raster data

Optional support for working with geospatial raster data is provided via the
`snaphu.io.Raster` class, which implements a NumPy-like interface for accessing raster
data in [GDAL-compatible formats].

*This functionality requires the [rasterio] package.*

[GDAL-compatible formats]: https://gdal.org/drivers/raster/
[rasterio]: https://rasterio.readthedocs.io/

```python
import snaphu

# Open the input interferogram and coherence rasters as well as a water mask.
igram = snaphu.io.Raster("igram.tif")
corr = snaphu.io.Raster("corr.tif")
mask = snaphu.io.Raster("mask.tif")

# Create output rasters to store the unwrapped phase & connected component labels with
# the same shape, driver, CRS/geotransform, etc as the input interferogram raster.
unw = snaphu.io.Raster.create("unw.tif", like=igram, dtype="f4")
conncomp = snaphu.io.Raster.create("conncomp.tif", like=igram, dtype="u4")

# Unwrap and store the results in the `unw` and `conncomp` rasters.
snaphu.unwrap(igram, corr, nlooks=50.0, mask=mask, unw=unw, conncomp=conncomp)
```

The wrapped[^1] and unwrapped phase for an example case are shown below.

<p align="center">
  <img width="900" height="300" src="docs/assets/raster-wrapped-unwrapped.png">
</p>

`snaphu.io.Raster` implements Python's [context manager protocol], so the above snippet
could also be written as:

[context manager protocol]: https://peps.python.org/pep-0343/

```python
import snaphu

# Open the input rasters and create output rasters as context managers. The data will be
# flushed and the files closed upon exiting the 'with' block. (Note that this syntax
# requires Python 3.10 or newer -- see https://github.com/python/cpython/issues/56991.)
with (
    snaphu.io.Raster("igram.tif") as igram,
    snaphu.io.Raster("corr.tif") as corr,
    snaphu.io.Raster("mask.tif") as mask,
    snaphu.io.Raster.create("unw.tif", like=igram, dtype="f4") as unw,
    snaphu.io.Raster.create("conncomp.tif", like=igram, dtype="u4") as conncomp,
):
    # Unwrap and store the results in the `unw` and `conncomp` rasters.
    snaphu.unwrap(igram, corr, nlooks=50.0, mask=mask, unw=unw, conncomp=conncomp)
```

This has the advantage of ensuring that the raster datasets are flushed and closed upon
exiting the `with` block.

### Tiling and parallelism

The interferogram may be partitioned into multiple (possibly overlapping)
regularly-sized rectangular blocks, each of which is unwrapped independently before
being reassembled. This tiling strategy can significantly improve unwrapping runtime and
reduce peak memory utilization, but may also introduce phase discontinuities between
tiles. In order to mitigate such tiling artifacts, choosing a substantial overlap
between tiles is recommended.

Multiple tiles may be unwrapped simultaneously in parallel processes.

The following example demonstrates tiled unwrapping using multiple processes:

```python
import numpy as np
import snaphu

# Simulate a 2048x2048 interferogram containing a simple diagonal phase ramp with many
# fringes.
y, x = np.ogrid[-12:12:2048j, -12:12:2048j]
igram = np.exp(1j * np.pi * (x + y))

# Sample coherence for an interferogram with no noise.
corr = np.ones(igram.shape, dtype=np.float32)

# Unwrap using a 4x4 grid of tiles in parallel using 8 processes.
unw, conncomp = snaphu.unwrap(
    igram, corr, nlooks=1.0, ntiles=(4, 4), tile_overlap=256, nproc=8
)
```

The wrapped and unwrapped phase are shown below.

<p align="center">
  <img width="900" height="300" src="docs/assets/tiled-wrapped-unwrapped.png">
</p>

## FAQ

### Why isn't [*some configuration parameter*] exposed?

The full set of SNAPHU parameters includes >100 configurable options. This project takes
a pragmatic (and somewhat opinionated) approach to managing this complexity. Only the
most commonly manipulated parameters are exposed.

If there's an option that's not currently supported that you'd like to see added to the
interface, feel free to open an issue requesting the addition.

### What version of SNAPHU is used?

Our goal is to support the [latest available SNAPHU release]. The SNAPHU version used by
the library can be obtained using

```python
>>> import snaphu
>>> print(snaphu.get_snaphu_version())
```

[latest available SNAPHU release]:
  https://web.stanford.edu/group/radar/softwareandlinks/sw/snaphu/

## Copyright

Copyright (c) 2023 California Institute of Technology ("Caltech"). U.S. Government
sponsorship acknowledged.

All rights reserved.

## License

This software is licensed under your choice of BSD-3-Clause or Apache-2.0 licenses. The
exact terms of each license can be found in the accompanying [LICENSE-BSD-3-Clause] and
[LICENSE-Apache-2.0] files, respectively.

[LICENSE-BSD-3-Clause]: LICENSE-BSD-3-Clause
[LICENSE-Apache-2.0]: LICENSE-Apache-2.0

SPDX-License-Identifier: BSD-3-Clause OR Apache-2.0

> [!NOTE]
> The SNAPHU source code (which is included as a Git submodule) is subject to different
> license terms, the details of which can be found [here]. In particular, note that
> parts of the SNAPHU codebase are subject to terms that prohibit commercial use.

[here]: https://github.com/gmgunter/snaphu/blob/main/README

[^1]: InSAR product processed by ASF DAAC HyP3 2023 using GAMMA software. Contains
  modified Copernicus Sentinel data 2023, processed by ESA.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "snaphu",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "insar phase-unwrapping radar remote-sensing sar synthetic-aperture-radar",
    "author": null,
    "author_email": "Geoffrey Gunter <geoffrey.m.gunter@jpl.nasa.gov>",
    "download_url": "https://files.pythonhosted.org/packages/51/09/e98dcbb164383b09c752303e60f430b6b052d5812dea39170ebff0071bbd/snaphu-0.3.0.tar.gz",
    "platform": null,
    "description": "# snaphu-py\n\n[![CI](https://github.com/isce-framework/snaphu-py/actions/workflows/ci.yml/badge.svg)](https://github.com/isce-framework/snaphu-py/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/isce-framework/snaphu-py/graph/badge.svg?token=IV41TI56EA)](https://codecov.io/gh/isce-framework/snaphu-py)\n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/snaphu.svg)](https://anaconda.org/conda-forge/snaphu)\n[![PyPI - Version](https://img.shields.io/pypi/v/snaphu.svg)](https://pypi.org/project/snaphu)\n\nA simple Python wrapper for the Statistical-Cost, Network-Flow Algorithm for Phase\nUnwrapping (SNAPHU)\n\n## Installation\n\n### Install with conda\n\nYou can install snaphu-py with conda using\n\n```\n$ conda install -c conda-forge snaphu\n```\n\n### Install with pip\n\nYou can install snaphu-py with pip using\n\n```\n$ pip install snaphu\n```\n\n### Install from source\n\nTo install snaphu-py from source, you will need:\n\n- Python 3.9 or newer + pip\n- A C compiler\n\nThe latest source code can be installed using\n\n```\n$ pip install git+https://github.com/isce-framework/snaphu-py.git\n```\n\nAlternatively, clone the repository (be sure to use the `--recursive` flag to fetch the\nGit submodules) and install the local copy using\n\n```\n$ git clone --recursive https://github.com/isce-framework/snaphu-py.git\n$ cd snaphu-py\n$ pip install .\n```\n\n> [!NOTE]\n> [Editable installs] are experimentally supported, with some caveats and configuration.\n> See [here] for details.\n\n[Editable installs]:\n  https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs\n[here]:\n  https://scikit-build-core.readthedocs.io/en/latest/configuration.html#editable-installs\n\n## Usage\n\n### Basic usage\n\nThe main interface is the `snaphu.unwrap` function, which takes input interferogram and\ncoherence arrays and returns the unwrapped phase and connected component labels.\n\nThe inputs may be NumPy arrays or any other type of object that supports a similar\ninterface (h5py Datasets, Zarr Arrays, etc).\n\nThe following example illustrates basic usage:\n\n```python\nimport numpy as np\nimport snaphu\n\n# Simulate a 512x512 interferogram containing a simple diagonal phase ramp with multiple\n# fringes.\ny, x = np.ogrid[-3:3:512j, -3:3:512j]\nigram = np.exp(1j * np.pi * (x + y))\n\n# Sample coherence for an interferogram with no noise.\ncorr = np.ones(igram.shape, dtype=np.float32)\n\n# Unwrap using the 'SMOOTH' cost mode and 'MCF' initialization method.\nunw, conncomp = snaphu.unwrap(igram, corr, nlooks=1.0, cost=\"smooth\", init=\"mcf\")\n```\n\nThe wrapped and unwrapped phase are shown below.\n\n<p align=\"center\">\n  <img width=\"900\" height=\"300\" src=\"docs/assets/basic-wrapped-unwrapped.png\">\n</p>\n\n### Working with geospatial raster data\n\nOptional support for working with geospatial raster data is provided via the\n`snaphu.io.Raster` class, which implements a NumPy-like interface for accessing raster\ndata in [GDAL-compatible formats].\n\n*This functionality requires the [rasterio] package.*\n\n[GDAL-compatible formats]: https://gdal.org/drivers/raster/\n[rasterio]: https://rasterio.readthedocs.io/\n\n```python\nimport snaphu\n\n# Open the input interferogram and coherence rasters as well as a water mask.\nigram = snaphu.io.Raster(\"igram.tif\")\ncorr = snaphu.io.Raster(\"corr.tif\")\nmask = snaphu.io.Raster(\"mask.tif\")\n\n# Create output rasters to store the unwrapped phase & connected component labels with\n# the same shape, driver, CRS/geotransform, etc as the input interferogram raster.\nunw = snaphu.io.Raster.create(\"unw.tif\", like=igram, dtype=\"f4\")\nconncomp = snaphu.io.Raster.create(\"conncomp.tif\", like=igram, dtype=\"u4\")\n\n# Unwrap and store the results in the `unw` and `conncomp` rasters.\nsnaphu.unwrap(igram, corr, nlooks=50.0, mask=mask, unw=unw, conncomp=conncomp)\n```\n\nThe wrapped[^1] and unwrapped phase for an example case are shown below.\n\n<p align=\"center\">\n  <img width=\"900\" height=\"300\" src=\"docs/assets/raster-wrapped-unwrapped.png\">\n</p>\n\n`snaphu.io.Raster` implements Python's [context manager protocol], so the above snippet\ncould also be written as:\n\n[context manager protocol]: https://peps.python.org/pep-0343/\n\n```python\nimport snaphu\n\n# Open the input rasters and create output rasters as context managers. The data will be\n# flushed and the files closed upon exiting the 'with' block. (Note that this syntax\n# requires Python 3.10 or newer -- see https://github.com/python/cpython/issues/56991.)\nwith (\n    snaphu.io.Raster(\"igram.tif\") as igram,\n    snaphu.io.Raster(\"corr.tif\") as corr,\n    snaphu.io.Raster(\"mask.tif\") as mask,\n    snaphu.io.Raster.create(\"unw.tif\", like=igram, dtype=\"f4\") as unw,\n    snaphu.io.Raster.create(\"conncomp.tif\", like=igram, dtype=\"u4\") as conncomp,\n):\n    # Unwrap and store the results in the `unw` and `conncomp` rasters.\n    snaphu.unwrap(igram, corr, nlooks=50.0, mask=mask, unw=unw, conncomp=conncomp)\n```\n\nThis has the advantage of ensuring that the raster datasets are flushed and closed upon\nexiting the `with` block.\n\n### Tiling and parallelism\n\nThe interferogram may be partitioned into multiple (possibly overlapping)\nregularly-sized rectangular blocks, each of which is unwrapped independently before\nbeing reassembled. This tiling strategy can significantly improve unwrapping runtime and\nreduce peak memory utilization, but may also introduce phase discontinuities between\ntiles. In order to mitigate such tiling artifacts, choosing a substantial overlap\nbetween tiles is recommended.\n\nMultiple tiles may be unwrapped simultaneously in parallel processes.\n\nThe following example demonstrates tiled unwrapping using multiple processes:\n\n```python\nimport numpy as np\nimport snaphu\n\n# Simulate a 2048x2048 interferogram containing a simple diagonal phase ramp with many\n# fringes.\ny, x = np.ogrid[-12:12:2048j, -12:12:2048j]\nigram = np.exp(1j * np.pi * (x + y))\n\n# Sample coherence for an interferogram with no noise.\ncorr = np.ones(igram.shape, dtype=np.float32)\n\n# Unwrap using a 4x4 grid of tiles in parallel using 8 processes.\nunw, conncomp = snaphu.unwrap(\n    igram, corr, nlooks=1.0, ntiles=(4, 4), tile_overlap=256, nproc=8\n)\n```\n\nThe wrapped and unwrapped phase are shown below.\n\n<p align=\"center\">\n  <img width=\"900\" height=\"300\" src=\"docs/assets/tiled-wrapped-unwrapped.png\">\n</p>\n\n## FAQ\n\n### Why isn't [*some configuration parameter*] exposed?\n\nThe full set of SNAPHU parameters includes >100 configurable options. This project takes\na pragmatic (and somewhat opinionated) approach to managing this complexity. Only the\nmost commonly manipulated parameters are exposed.\n\nIf there's an option that's not currently supported that you'd like to see added to the\ninterface, feel free to open an issue requesting the addition.\n\n### What version of SNAPHU is used?\n\nOur goal is to support the [latest available SNAPHU release]. The SNAPHU version used by\nthe library can be obtained using\n\n```python\n>>> import snaphu\n>>> print(snaphu.get_snaphu_version())\n```\n\n[latest available SNAPHU release]:\n  https://web.stanford.edu/group/radar/softwareandlinks/sw/snaphu/\n\n## Copyright\n\nCopyright (c) 2023 California Institute of Technology (\"Caltech\"). U.S. Government\nsponsorship acknowledged.\n\nAll rights reserved.\n\n## License\n\nThis software is licensed under your choice of BSD-3-Clause or Apache-2.0 licenses. The\nexact terms of each license can be found in the accompanying [LICENSE-BSD-3-Clause] and\n[LICENSE-Apache-2.0] files, respectively.\n\n[LICENSE-BSD-3-Clause]: LICENSE-BSD-3-Clause\n[LICENSE-Apache-2.0]: LICENSE-Apache-2.0\n\nSPDX-License-Identifier: BSD-3-Clause OR Apache-2.0\n\n> [!NOTE]\n> The SNAPHU source code (which is included as a Git submodule) is subject to different\n> license terms, the details of which can be found [here]. In particular, note that\n> parts of the SNAPHU codebase are subject to terms that prohibit commercial use.\n\n[here]: https://github.com/gmgunter/snaphu/blob/main/README\n\n[^1]: InSAR product processed by ASF DAAC HyP3 2023 using GAMMA software. Contains\n  modified Copernicus Sentinel data 2023, processed by ESA.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A simple Python wrapper for SNAPHU",
    "version": "0.3.0",
    "project_urls": {
        "Discussions": "https://github.com/isce-framework/snaphu-py/discussions",
        "Homepage": "https://github.com/isce-framework/snaphu-py",
        "Issues": "https://github.com/isce-framework/snaphu-py/issues"
    },
    "split_keywords": [
        "insar",
        "phase-unwrapping",
        "radar",
        "remote-sensing",
        "sar",
        "synthetic-aperture-radar"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ed0ecadbd385fedddf01da18a7d465a47f12b7b06148302b05ee908407c6920e",
                "md5": "6627fcb43e929c2268eb41fc7abe08ee",
                "sha256": "948d786e7600c6137cf5505c423beb7035f72e7cbf6265fcbd2bda4e4aa32a80"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6627fcb43e929c2268eb41fc7abe08ee",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 154237,
            "upload_time": "2024-03-26T02:34:50",
            "upload_time_iso_8601": "2024-03-26T02:34:50.324132Z",
            "url": "https://files.pythonhosted.org/packages/ed/0e/cadbd385fedddf01da18a7d465a47f12b7b06148302b05ee908407c6920e/snaphu-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "77305dbeca61e9e9dc058a4da88583322fc3521b4da09cdfb262c9a54720463e",
                "md5": "9ba2e07715914dd54ba91fa2370936d1",
                "sha256": "38238540a5e81c6eda2bd813f90f7df8eca22f40b82b1f0e0ce64c08e7f13efd"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "9ba2e07715914dd54ba91fa2370936d1",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 142732,
            "upload_time": "2024-03-26T02:34:52",
            "upload_time_iso_8601": "2024-03-26T02:34:52.731354Z",
            "url": "https://files.pythonhosted.org/packages/77/30/5dbeca61e9e9dc058a4da88583322fc3521b4da09cdfb262c9a54720463e/snaphu-0.3.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "99053f8c16d0c05a80755e4d3c714f65ab0f023aeec3982d66c01b5e58cfb57a",
                "md5": "d896ba083d9e1e50f78d805731831e9a",
                "sha256": "49a2064e8ca8f0d8858637d68b21fc1d1916be03d8152c2bf0919c5606b6fc9f"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d896ba083d9e1e50f78d805731831e9a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 154565,
            "upload_time": "2024-03-26T02:34:54",
            "upload_time_iso_8601": "2024-03-26T02:34:54.464208Z",
            "url": "https://files.pythonhosted.org/packages/99/05/3f8c16d0c05a80755e4d3c714f65ab0f023aeec3982d66c01b5e58cfb57a/snaphu-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "535ca8ee8fcdd48b572ccd5a01309f8d0f6a58f975da3e68c3230d1c27e53480",
                "md5": "7aa58e1d35dada9b9dd8f5619eb06220",
                "sha256": "d99619e1b3625c67918f86027242ffa6b3d60d359a3f12dbb7f8055c6ea6ca0c"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7aa58e1d35dada9b9dd8f5619eb06220",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 156938,
            "upload_time": "2024-03-26T02:34:56",
            "upload_time_iso_8601": "2024-03-26T02:34:56.189502Z",
            "url": "https://files.pythonhosted.org/packages/53/5c/a8ee8fcdd48b572ccd5a01309f8d0f6a58f975da3e68c3230d1c27e53480/snaphu-0.3.0-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7cd54ffc040f6fddcf2aa685a1bdd76c286f2fd1161ea341896147229acd4642",
                "md5": "a3f05c8a73fe181c5b2bbc10b7a431c4",
                "sha256": "ec0ed1df7941d4ea767345d954427f5fc83d0f1585d226d6a502513fb0932601"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a3f05c8a73fe181c5b2bbc10b7a431c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 154237,
            "upload_time": "2024-03-26T02:34:57",
            "upload_time_iso_8601": "2024-03-26T02:34:57.957980Z",
            "url": "https://files.pythonhosted.org/packages/7c/d5/4ffc040f6fddcf2aa685a1bdd76c286f2fd1161ea341896147229acd4642/snaphu-0.3.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec574178eec80272a046246659653465f9c5d91888ece9537bf30c3af8780863",
                "md5": "b6462272046cc53e306b914f4b9168ff",
                "sha256": "a7900616e34b0da871c641a9c0ef07c870e3436d833d02e206c1214cb4651a26"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b6462272046cc53e306b914f4b9168ff",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 142733,
            "upload_time": "2024-03-26T02:34:59",
            "upload_time_iso_8601": "2024-03-26T02:34:59.641196Z",
            "url": "https://files.pythonhosted.org/packages/ec/57/4178eec80272a046246659653465f9c5d91888ece9537bf30c3af8780863/snaphu-0.3.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2ca2e02960b2be5dc515517042f574255f1636caf9136ad446cc7203a6e21d48",
                "md5": "537f2d3b30f3e55aa2591898f83fcde7",
                "sha256": "2938a1be8b12f3ccaf15334d3b6562b5fc46536998b582bac645ab8fa1a6b63e"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "537f2d3b30f3e55aa2591898f83fcde7",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 154564,
            "upload_time": "2024-03-26T02:35:01",
            "upload_time_iso_8601": "2024-03-26T02:35:01.845457Z",
            "url": "https://files.pythonhosted.org/packages/2c/a2/e02960b2be5dc515517042f574255f1636caf9136ad446cc7203a6e21d48/snaphu-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9aec8c37bdfcb7dbdb3324723b0cc74e138b1d257333fe8214d14c8b761ee789",
                "md5": "a46d7b5c141fabe891717257446281c4",
                "sha256": "4977d7066d6095d65fbe40b98c571d3f08b184fcfe69a76a6bae20c2a8cb8346"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp311-cp311-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a46d7b5c141fabe891717257446281c4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 156938,
            "upload_time": "2024-03-26T02:35:03",
            "upload_time_iso_8601": "2024-03-26T02:35:03.757396Z",
            "url": "https://files.pythonhosted.org/packages/9a/ec/8c37bdfcb7dbdb3324723b0cc74e138b1d257333fe8214d14c8b761ee789/snaphu-0.3.0-cp311-cp311-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aeb1a964ea1e62f61aeaf86868c52b8a4be9355bfd9c3c18037c5d06eccd8b6d",
                "md5": "b9d48d1a04aec71d181567dce65dcd55",
                "sha256": "a618a8f549c3178becc3edcf5aecd5c4a6aff4310505ae3035e0490424123c3f"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b9d48d1a04aec71d181567dce65dcd55",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 154239,
            "upload_time": "2024-03-26T02:35:05",
            "upload_time_iso_8601": "2024-03-26T02:35:05.043908Z",
            "url": "https://files.pythonhosted.org/packages/ae/b1/a964ea1e62f61aeaf86868c52b8a4be9355bfd9c3c18037c5d06eccd8b6d/snaphu-0.3.0-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "02621b66c0a1908ce32bea42d140f6c871e96302a9bf71118311c5d3eb9ff63e",
                "md5": "803a64084fbcc7d44c175d72e60b8299",
                "sha256": "69914a027cb9c275244e95e83de3e68592aa566813ba740aedf76971141e07cf"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "803a64084fbcc7d44c175d72e60b8299",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 142731,
            "upload_time": "2024-03-26T02:35:07",
            "upload_time_iso_8601": "2024-03-26T02:35:07.247587Z",
            "url": "https://files.pythonhosted.org/packages/02/62/1b66c0a1908ce32bea42d140f6c871e96302a9bf71118311c5d3eb9ff63e/snaphu-0.3.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3caea69aa0f1a44897a25875504b7109244d74df801e8871904b844e33938430",
                "md5": "f0f38f417edacad6e73b32076e7da237",
                "sha256": "9e9e9fd9be391dd2bd68dc0689c579b65d06bef35bd98744bc0c4bf649219e75"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f0f38f417edacad6e73b32076e7da237",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 154565,
            "upload_time": "2024-03-26T02:35:08",
            "upload_time_iso_8601": "2024-03-26T02:35:08.427291Z",
            "url": "https://files.pythonhosted.org/packages/3c/ae/a69aa0f1a44897a25875504b7109244d74df801e8871904b844e33938430/snaphu-0.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9c1aec202d3749e9497647e14046fd737fbb883beb0a58873cfa7a14b4ab1726",
                "md5": "a5197327d5ddcad73963ab902287e5ea",
                "sha256": "1aa1a368f0e0bf1746253135e7a39dfd667de1abfa7831d560cdde588043c62a"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp312-cp312-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a5197327d5ddcad73963ab902287e5ea",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 156939,
            "upload_time": "2024-03-26T02:35:09",
            "upload_time_iso_8601": "2024-03-26T02:35:09.576518Z",
            "url": "https://files.pythonhosted.org/packages/9c/1a/ec202d3749e9497647e14046fd737fbb883beb0a58873cfa7a14b4ab1726/snaphu-0.3.0-cp312-cp312-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "59f4346d1f613a273d1eb1724ff5f7529a096b177a9b55bbd640d0b5b8f7e10f",
                "md5": "5eae06d33a6b1af3a85df4054c97dc85",
                "sha256": "395888e7dae838539104744c365da35fb41911124d07ec78c47c2ae1b6dbb17e"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5eae06d33a6b1af3a85df4054c97dc85",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 154235,
            "upload_time": "2024-03-26T02:35:10",
            "upload_time_iso_8601": "2024-03-26T02:35:10.755484Z",
            "url": "https://files.pythonhosted.org/packages/59/f4/346d1f613a273d1eb1724ff5f7529a096b177a9b55bbd640d0b5b8f7e10f/snaphu-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4b7e9963f01d453c9c61e3209c4eaa140adbc70d89dd83bbf650d91e9cebbe3b",
                "md5": "94d6b58b085fc59fcf3c60433cb89979",
                "sha256": "57631f4b1181f273f5ff42c0926461cbeb4c81237df8322fe03f19bdc8670178"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "94d6b58b085fc59fcf3c60433cb89979",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 142731,
            "upload_time": "2024-03-26T02:35:11",
            "upload_time_iso_8601": "2024-03-26T02:35:11.933963Z",
            "url": "https://files.pythonhosted.org/packages/4b/7e/9963f01d453c9c61e3209c4eaa140adbc70d89dd83bbf650d91e9cebbe3b/snaphu-0.3.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1669213f30b6712407018b32202077798e29f561d9253fd72132cf9436664c6c",
                "md5": "bc2a65ef65641e885e0ef5fa5a3e692f",
                "sha256": "64609089592eaf54c210b287c466ca76c89385a3337e226729067034dd35dfe8"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bc2a65ef65641e885e0ef5fa5a3e692f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 154565,
            "upload_time": "2024-03-26T02:35:13",
            "upload_time_iso_8601": "2024-03-26T02:35:13.642913Z",
            "url": "https://files.pythonhosted.org/packages/16/69/213f30b6712407018b32202077798e29f561d9253fd72132cf9436664c6c/snaphu-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ace236a767878af252fd12af386bf4808b53add934d23e686fc1013276b9933e",
                "md5": "5e061f4a4f9229fd977bc754d5f5a632",
                "sha256": "1c0014a3a950299e01a5fedc82a1d7b741cb4bfd16e352aba2cfe219f94cf82a"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5e061f4a4f9229fd977bc754d5f5a632",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 156937,
            "upload_time": "2024-03-26T02:35:15",
            "upload_time_iso_8601": "2024-03-26T02:35:15.315196Z",
            "url": "https://files.pythonhosted.org/packages/ac/e2/36a767878af252fd12af386bf4808b53add934d23e686fc1013276b9933e/snaphu-0.3.0-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "dae4039e08f27ba4417ddfa33776bb6ab20858c411579c1b6a4c08047f69aad3",
                "md5": "2f9cd7be021c3b9190dc7ae0d117813e",
                "sha256": "88340bcc7ade4049bc1551b7ee798ea35b82a4dde05ca572d4c71e44551ee850"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2f9cd7be021c3b9190dc7ae0d117813e",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 154243,
            "upload_time": "2024-03-26T02:35:16",
            "upload_time_iso_8601": "2024-03-26T02:35:16.474788Z",
            "url": "https://files.pythonhosted.org/packages/da/e4/039e08f27ba4417ddfa33776bb6ab20858c411579c1b6a4c08047f69aad3/snaphu-0.3.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a8891e5d6b3ce53840b025a2d306b552e91ec0d51fe38e21bf04852462295ae1",
                "md5": "c3161e4024533857eba80476446c5ef5",
                "sha256": "1c7494de1b990df1ec7da24fb6e40936479f254df16c5906ff699ba2e8997f05"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "c3161e4024533857eba80476446c5ef5",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 142738,
            "upload_time": "2024-03-26T02:35:17",
            "upload_time_iso_8601": "2024-03-26T02:35:17.623461Z",
            "url": "https://files.pythonhosted.org/packages/a8/89/1e5d6b3ce53840b025a2d306b552e91ec0d51fe38e21bf04852462295ae1/snaphu-0.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "84f4bac884aa1b20d57d53d06aa8c1e1b0cd666c4f2b7fa4b095198dfa893031",
                "md5": "b6013e420ef1de6cfe3aaafe546dbebc",
                "sha256": "f272fa1f936042a5bf60a5fe6b18cc41170b534c3b812ff5f319bb4a5ba59404"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b6013e420ef1de6cfe3aaafe546dbebc",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 154572,
            "upload_time": "2024-03-26T02:35:18",
            "upload_time_iso_8601": "2024-03-26T02:35:18.715615Z",
            "url": "https://files.pythonhosted.org/packages/84/f4/bac884aa1b20d57d53d06aa8c1e1b0cd666c4f2b7fa4b095198dfa893031/snaphu-0.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c63604600ad5b7e46dacb7b1461a01350f1ad4de92bc6bc89e6bfa185c1d6e54",
                "md5": "b7578e2901adfe651885fcff0d75af0c",
                "sha256": "2c5fd0081da0808e7551604555a1d889e580cdfe66b4cb85fa71b47ce00c1df6"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b7578e2901adfe651885fcff0d75af0c",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.9",
            "size": 154242,
            "upload_time": "2024-03-26T02:35:19",
            "upload_time_iso_8601": "2024-03-26T02:35:19.897245Z",
            "url": "https://files.pythonhosted.org/packages/c6/36/04600ad5b7e46dacb7b1461a01350f1ad4de92bc6bc89e6bfa185c1d6e54/snaphu-0.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a69a9a48bf4ceaea74dce0582f09140de3f03cd11745ef19cd353630e91d58a9",
                "md5": "2cc1bc20fd2d9147d20235d2d2c8b35e",
                "sha256": "340c02e8873836d124472f32400e3b3af6d9ae21e743c543d0747301f9c4bbe6"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "2cc1bc20fd2d9147d20235d2d2c8b35e",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.9",
            "size": 142738,
            "upload_time": "2024-03-26T02:35:20",
            "upload_time_iso_8601": "2024-03-26T02:35:20.980271Z",
            "url": "https://files.pythonhosted.org/packages/a6/9a/9a48bf4ceaea74dce0582f09140de3f03cd11745ef19cd353630e91d58a9/snaphu-0.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "51176393718726214a7fde66a115857bca2b0e885268b2b5e93dd61038431b3c",
                "md5": "94e7cfdc6d943fe49c43012aeea21f73",
                "sha256": "3913e998dd0cf819b36f6796accc5e6042a1352ade5cebc90da7bc6094fad7f8"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "94e7cfdc6d943fe49c43012aeea21f73",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.9",
            "size": 154572,
            "upload_time": "2024-03-26T02:35:22",
            "upload_time_iso_8601": "2024-03-26T02:35:22.563626Z",
            "url": "https://files.pythonhosted.org/packages/51/17/6393718726214a7fde66a115857bca2b0e885268b2b5e93dd61038431b3c/snaphu-0.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5109e98dcbb164383b09c752303e60f430b6b052d5812dea39170ebff0071bbd",
                "md5": "0964c474fabb2ca162e3e30daae1c970",
                "sha256": "00117fbf5fd364dec173d3825232e0554237713486f20fb44178bff844d4c404"
            },
            "downloads": -1,
            "filename": "snaphu-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "0964c474fabb2ca162e3e30daae1c970",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 550553,
            "upload_time": "2024-03-26T02:35:23",
            "upload_time_iso_8601": "2024-03-26T02:35:23.913592Z",
            "url": "https://files.pythonhosted.org/packages/51/09/e98dcbb164383b09c752303e60f430b6b052d5812dea39170ebff0071bbd/snaphu-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-26 02:35:23",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "isce-framework",
    "github_project": "snaphu-py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "snaphu"
}
        
Elapsed time: 0.35454s