fastmorph


Namefastmorph JSON
Version 1.6.0 PyPI version JSON
download
home_pagehttps://github.com/seung-lab/fastmorph/
SummaryMorphological image processing for 3D multi-label images.
upload_time2025-10-08 22:38:32
maintainerNone
docs_urlNone
authorWilliam Silversmith
requires_python>=3.9.0
licenseLGPL-3.0-or-later
keywords morphological dialate erode dilation erosion close open fill image processing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![Automated Tests](https://github.com/seung-lab/fastmorph/actions/workflows/run_tests.yml/badge.svg) [![PyPI version](https://badge.fury.io/py/fastmorph.svg)](https://badge.fury.io/py/fastmorph)

# fastmorph: multilabel 3D morphological image processing functions.

This is a collection of morphological 3D image operations that are tuned for working with dense 3D labeled images. 

We provide the following multithreaded (except where noted) operations:

- Multi-Label Stenciled Dilation, Erosion, Opening, Closing
- Grayscale Stenciled Dilation, Erosion, Opening, Closing
- Multi-Label Spherical Erosion
- Binary Spherical Dilation, Opening, and Closing
- Multi-Label Fill Voids (mostly single threaded)

Highlights compared to other libraries:

- Handles multi-labeled images
- Multithreaded
- High performance single-threaded
- Low memory usage
- Dilate computes mode of surrounding labels

Disadvantages versus other libraries:

- Stencil (structuring element) is fixed size 3x3x3 and all on.


```python
import fastmorph

# may be binary or unsigned integer 2D or 3D image
labels = np.load("my_labels.npy")


# multi-label capable morphological operators
# they use a 3x3x3 all on structuring element
# dilate picks the mode of surrounding labels

# by default only background (0) labels are filled
morphed = fastmorph.dilate(labels, parallel=2)
# processes every voxel
morphed = fastmorph.dilate(labels, background_only=False, parallel=2)

morphed = fastmorph.erode(labels)
morphed = fastmorph.opening(labels, parallel=2)
morphed = fastmorph.closing(labels, parallel=2)

# You can select grayscale dilation, erosion, opening, and 
# closing by passing in a different Mode enum.
# The options are Mode.grey and Mode.multilabel
morphed = fastmorph.dilate(labels, mode=fastmorph.Mode.grey)
morphed = fastmorph.erode(labels, mode=fastmorph.Mode.grey)

# Dilate only supports binary images at this time.
# Radius is specified in physical units, but
# by default anisotropy = (1,1,1) so it is the 
# same as voxels.
morphed = fastmorph.spherical_dilate(labels, radius=1, parallel=2, anisotropy=(1,1,1))

# open and close require dialate to work and so are binary only for now
morphed = fastmorph.spherical_open(labels, radius=1, parallel=2, anisotropy=(1,1,1))
morphed = fastmorph.spherical_close(labels, radius=1, parallel=2, anisotropy=(1,1,1))

# The rest support multilabel images.
morphed = fastmorph.spherical_erode(labels, radius=1, parallel=2, anisotropy=(1,1,1))

# Note: for boolean images, this function will directly call fill_voids
# and return a scalar for ct 
# For integer images, more processing will be done to deal with multiple labels.
# A dict of { label: num_voxels_filled } for integer images will be returned.
# Note that for multilabel images, by default, if a label is totally enclosed by another,
# a FillError will be raised. If remove_enclosed is True, the label will be overwritten.
filled_labels, ct = fastmorph.fill_holes(labels, return_fill_count=True, remove_enclosed=False)

# If the holes in your segmentation are imperfectly sealed, consider
# using the following options.
filled_labels = fastmorph.fill_holes(
	labels, 
	# runs 2d fill on the sides of the cube for each binary image
	fix_borders=True, 
	# does a dilate and then an erode after filling holes
	morphological_closing=True,
)

```

## Performance

A test run on an M1 Macbook Pro on `connectomics.npy.ckl`, a 512<sup>3</sup> volume with over 2000 dense labels had the following results for multilabel processing.

```
erode / 1 thread: 1.553 sec
erode / 2 threads: 0.885 sec
erode / 4 threads: 0.651 sec
dilate / background_only=True / 1 thread: 1.100 sec
dilate / background_only=True / 2 threads: 0.632 sec
dilate / background_only=True / 4 threads: 0.441 sec
dilate / background_only=False / 1 thread: 11.783 sec
dilate / background_only=False / 2 threads: 5.944 sec
dilate / background_only=False / 4 threads: 4.291 sec
dilate / background_only=False / 8 threads: 3.298 sec
scipy grey_dilation / 1 thread 14.648 sec
scipy grey_erode / 1 thread: 14.412 sec
skimage expand_labels / 1 thread: 62.248 sec
```

Test run on an M1 Macbook Pro with `ws.npy.ckl` a 512<sup>3</sup> volume with tens of thousands of components for multilabel processing.

```
erode / 1 thread: 2.380 sec
erode / 2 threads: 1.479 sec
erode / 4 threads: 1.164 sec
dilate / background_only=True / 1 thread: 1.598 sec
dilate / background_only=True / 2 threads: 1.011 sec
dilate / background_only=True / 4 threads: 0.805 sec
dilate / background_only=False / 1 thread: 25.182 sec
dilate / background_only=False / 2 threads: 13.513 sec
dilate / background_only=False / 4 threads: 8.749 sec
dilate / background_only=False / 8 threads: 6.640 sec
scipy grey_dilation / 1 thread 21.109 sec
scipy grey_erode / 1 thread: 20.305 sec
skimage expand_labels / 1 thread: 63.247 sec
```

Here is the performance on a completely zeroed 512<sup>3</sup> volume for multilabel processing.

```
erode / 1 thread: 0.462 sec
erode / 2 threads: 0.289 sec
erode / 4 threads: 0.229 sec
dilate / background_only=True / 1 thread: 2.337 sec
dilate / background_only=True / 2 threads: 1.344 sec
dilate / background_only=True / 4 threads: 1.021 sec
dilate / background_only=False / 1 thread: 2.267 sec
dilate / background_only=False / 2 threads: 1.251 sec
dilate / background_only=False / 4 threads: 0.944 sec
dilate / background_only=False / 8 threads: 0.718 sec
scipy grey_dilation / 1 thread 13.516 sec
scipy grey_erode / 1 thread: 13.326 sec
skimage expand_labels / 1 thread: 35.243 sec
```

### Memory Profiles

<center>
<img src="https://github.com/seung-lab/fastmorph/blob/15c4c27ad3255c8ef959ceb67facd65e18eff2e4/memory-profile-dilate-bg-only-false.jpg" />
</center>

<center>
<img src="https://github.com/seung-lab/fastmorph/blob/15c4c27ad3255c8ef959ceb67facd65e18eff2e4/memory-profile-dilate-bg-only-true.jpg" />
</center>

<center>
<img src="https://github.com/seung-lab/fastmorph/blob/15c4c27ad3255c8ef959ceb67facd65e18eff2e4/memory-profile-skimage-expand_labels.jpg" />
</center>

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/seung-lab/fastmorph/",
    "name": "fastmorph",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9.0",
    "maintainer_email": null,
    "keywords": "morphological dialate erode dilation erosion close open fill image processing",
    "author": "William Silversmith",
    "author_email": "ws9@princeton.edu",
    "download_url": "https://files.pythonhosted.org/packages/07/1c/a3ff9d96b9eb3c52bf2d1b951e9d0ba1129efd66097608718e906102cfce/fastmorph-1.6.0.tar.gz",
    "platform": null,
    "description": "![Automated Tests](https://github.com/seung-lab/fastmorph/actions/workflows/run_tests.yml/badge.svg) [![PyPI version](https://badge.fury.io/py/fastmorph.svg)](https://badge.fury.io/py/fastmorph)\n\n# fastmorph: multilabel 3D morphological image processing functions.\n\nThis is a collection of morphological 3D image operations that are tuned for working with dense 3D labeled images. \n\nWe provide the following multithreaded (except where noted) operations:\n\n- Multi-Label Stenciled Dilation, Erosion, Opening, Closing\n- Grayscale Stenciled Dilation, Erosion, Opening, Closing\n- Multi-Label Spherical Erosion\n- Binary Spherical Dilation, Opening, and Closing\n- Multi-Label Fill Voids (mostly single threaded)\n\nHighlights compared to other libraries:\n\n- Handles multi-labeled images\n- Multithreaded\n- High performance single-threaded\n- Low memory usage\n- Dilate computes mode of surrounding labels\n\nDisadvantages versus other libraries:\n\n- Stencil (structuring element) is fixed size 3x3x3 and all on.\n\n\n```python\nimport fastmorph\n\n# may be binary or unsigned integer 2D or 3D image\nlabels = np.load(\"my_labels.npy\")\n\n\n# multi-label capable morphological operators\n# they use a 3x3x3 all on structuring element\n# dilate picks the mode of surrounding labels\n\n# by default only background (0) labels are filled\nmorphed = fastmorph.dilate(labels, parallel=2)\n# processes every voxel\nmorphed = fastmorph.dilate(labels, background_only=False, parallel=2)\n\nmorphed = fastmorph.erode(labels)\nmorphed = fastmorph.opening(labels, parallel=2)\nmorphed = fastmorph.closing(labels, parallel=2)\n\n# You can select grayscale dilation, erosion, opening, and \n# closing by passing in a different Mode enum.\n# The options are Mode.grey and Mode.multilabel\nmorphed = fastmorph.dilate(labels, mode=fastmorph.Mode.grey)\nmorphed = fastmorph.erode(labels, mode=fastmorph.Mode.grey)\n\n# Dilate only supports binary images at this time.\n# Radius is specified in physical units, but\n# by default anisotropy = (1,1,1) so it is the \n# same as voxels.\nmorphed = fastmorph.spherical_dilate(labels, radius=1, parallel=2, anisotropy=(1,1,1))\n\n# open and close require dialate to work and so are binary only for now\nmorphed = fastmorph.spherical_open(labels, radius=1, parallel=2, anisotropy=(1,1,1))\nmorphed = fastmorph.spherical_close(labels, radius=1, parallel=2, anisotropy=(1,1,1))\n\n# The rest support multilabel images.\nmorphed = fastmorph.spherical_erode(labels, radius=1, parallel=2, anisotropy=(1,1,1))\n\n# Note: for boolean images, this function will directly call fill_voids\n# and return a scalar for ct \n# For integer images, more processing will be done to deal with multiple labels.\n# A dict of { label: num_voxels_filled } for integer images will be returned.\n# Note that for multilabel images, by default, if a label is totally enclosed by another,\n# a FillError will be raised. If remove_enclosed is True, the label will be overwritten.\nfilled_labels, ct = fastmorph.fill_holes(labels, return_fill_count=True, remove_enclosed=False)\n\n# If the holes in your segmentation are imperfectly sealed, consider\n# using the following options.\nfilled_labels = fastmorph.fill_holes(\n\tlabels, \n\t# runs 2d fill on the sides of the cube for each binary image\n\tfix_borders=True, \n\t# does a dilate and then an erode after filling holes\n\tmorphological_closing=True,\n)\n\n```\n\n## Performance\n\nA test run on an M1 Macbook Pro on `connectomics.npy.ckl`, a 512<sup>3</sup> volume with over 2000 dense labels had the following results for multilabel processing.\n\n```\nerode / 1 thread: 1.553 sec\nerode / 2 threads: 0.885 sec\nerode / 4 threads: 0.651 sec\ndilate / background_only=True / 1 thread: 1.100 sec\ndilate / background_only=True / 2 threads: 0.632 sec\ndilate / background_only=True / 4 threads: 0.441 sec\ndilate / background_only=False / 1 thread: 11.783 sec\ndilate / background_only=False / 2 threads: 5.944 sec\ndilate / background_only=False / 4 threads: 4.291 sec\ndilate / background_only=False / 8 threads: 3.298 sec\nscipy grey_dilation / 1 thread 14.648 sec\nscipy grey_erode / 1 thread: 14.412 sec\nskimage expand_labels / 1 thread: 62.248 sec\n```\n\nTest run on an M1 Macbook Pro with `ws.npy.ckl` a 512<sup>3</sup> volume with tens of thousands of components for multilabel processing.\n\n```\nerode / 1 thread: 2.380 sec\nerode / 2 threads: 1.479 sec\nerode / 4 threads: 1.164 sec\ndilate / background_only=True / 1 thread: 1.598 sec\ndilate / background_only=True / 2 threads: 1.011 sec\ndilate / background_only=True / 4 threads: 0.805 sec\ndilate / background_only=False / 1 thread: 25.182 sec\ndilate / background_only=False / 2 threads: 13.513 sec\ndilate / background_only=False / 4 threads: 8.749 sec\ndilate / background_only=False / 8 threads: 6.640 sec\nscipy grey_dilation / 1 thread 21.109 sec\nscipy grey_erode / 1 thread: 20.305 sec\nskimage expand_labels / 1 thread: 63.247 sec\n```\n\nHere is the performance on a completely zeroed 512<sup>3</sup> volume for multilabel processing.\n\n```\nerode / 1 thread: 0.462 sec\nerode / 2 threads: 0.289 sec\nerode / 4 threads: 0.229 sec\ndilate / background_only=True / 1 thread: 2.337 sec\ndilate / background_only=True / 2 threads: 1.344 sec\ndilate / background_only=True / 4 threads: 1.021 sec\ndilate / background_only=False / 1 thread: 2.267 sec\ndilate / background_only=False / 2 threads: 1.251 sec\ndilate / background_only=False / 4 threads: 0.944 sec\ndilate / background_only=False / 8 threads: 0.718 sec\nscipy grey_dilation / 1 thread 13.516 sec\nscipy grey_erode / 1 thread: 13.326 sec\nskimage expand_labels / 1 thread: 35.243 sec\n```\n\n### Memory Profiles\n\n<center>\n<img src=\"https://github.com/seung-lab/fastmorph/blob/15c4c27ad3255c8ef959ceb67facd65e18eff2e4/memory-profile-dilate-bg-only-false.jpg\" />\n</center>\n\n<center>\n<img src=\"https://github.com/seung-lab/fastmorph/blob/15c4c27ad3255c8ef959ceb67facd65e18eff2e4/memory-profile-dilate-bg-only-true.jpg\" />\n</center>\n\n<center>\n<img src=\"https://github.com/seung-lab/fastmorph/blob/15c4c27ad3255c8ef959ceb67facd65e18eff2e4/memory-profile-skimage-expand_labels.jpg\" />\n</center>\n",
    "bugtrack_url": null,
    "license": "LGPL-3.0-or-later",
    "summary": "Morphological image processing for 3D multi-label images.",
    "version": "1.6.0",
    "project_urls": {
        "Homepage": "https://github.com/seung-lab/fastmorph/"
    },
    "split_keywords": [
        "morphological",
        "dialate",
        "erode",
        "dilation",
        "erosion",
        "close",
        "open",
        "fill",
        "image",
        "processing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3d5bf9478386a143fb830371b3778be0050f2fe2ac1eb325c45232fb5f19a55a",
                "md5": "8d35c9794b85dd3c46a386b3b9173010",
                "sha256": "73f495c58e934838d6c5ca99146dae1e61fc1416d1388f3f3f7ce05bd9139166"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8d35c9794b85dd3c46a386b3b9173010",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0",
            "size": 203864,
            "upload_time": "2025-10-08T22:37:58",
            "upload_time_iso_8601": "2025-10-08T22:37:58.075703Z",
            "url": "https://files.pythonhosted.org/packages/3d/5b/f9478386a143fb830371b3778be0050f2fe2ac1eb325c45232fb5f19a55a/fastmorph-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4d782db6fc8bc9476d0738bb0c54e035c50c518665efa43d525c935a32b8386c",
                "md5": "78c837654a36e0d0fefc67d44c4fdcfb",
                "sha256": "5712a73889db62a5e04238f65f7f0457d518ec62cdc6ce596352512a078a32e4"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "78c837654a36e0d0fefc67d44c4fdcfb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0",
            "size": 174497,
            "upload_time": "2025-10-08T22:37:59",
            "upload_time_iso_8601": "2025-10-08T22:37:59.577849Z",
            "url": "https://files.pythonhosted.org/packages/4d/78/2db6fc8bc9476d0738bb0c54e035c50c518665efa43d525c935a32b8386c/fastmorph-1.6.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "40ae3da03d885be53dc76fdf82ee8f5cd97cfdffeadb24a1df492d6ade081023",
                "md5": "84ea0ec42d8a0751785de299a513373d",
                "sha256": "cbe6a3e8aac58ed7cbd50aad708334e35837098cca0a0256229ed7df181f321d"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "84ea0ec42d8a0751785de299a513373d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0",
            "size": 252182,
            "upload_time": "2025-10-08T22:38:00",
            "upload_time_iso_8601": "2025-10-08T22:38:00.951335Z",
            "url": "https://files.pythonhosted.org/packages/40/ae/3da03d885be53dc76fdf82ee8f5cd97cfdffeadb24a1df492d6ade081023/fastmorph-1.6.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3e3f65ad1b91ab91b70af2e9dbd989e2c2a62bb377a51c1aa156650a6a0b057d",
                "md5": "b36639895ebe594dd1a266f0a6027007",
                "sha256": "31c4e45d70d43a261e26b223a871b42f6549dac41ffdb4fdff358fe6bbcb2ebf"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b36639895ebe594dd1a266f0a6027007",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0",
            "size": 260728,
            "upload_time": "2025-10-08T22:38:02",
            "upload_time_iso_8601": "2025-10-08T22:38:02.338836Z",
            "url": "https://files.pythonhosted.org/packages/3e/3f/65ad1b91ab91b70af2e9dbd989e2c2a62bb377a51c1aa156650a6a0b057d/fastmorph-1.6.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "391ffbbe0eeee27f0f593c8fcd665303e5f40b68b35ea748f319b6b1f9d1ae14",
                "md5": "3aafe18d9aad64cab5b4fc60bf0c790e",
                "sha256": "b19235ed1081b0f6d34c07653e15ef58e4cf0b29125d9af3cb2ca62f684bd23b"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "3aafe18d9aad64cab5b4fc60bf0c790e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0",
            "size": 180012,
            "upload_time": "2025-10-08T22:38:05",
            "upload_time_iso_8601": "2025-10-08T22:38:05.319287Z",
            "url": "https://files.pythonhosted.org/packages/39/1f/fbbe0eeee27f0f593c8fcd665303e5f40b68b35ea748f319b6b1f9d1ae14/fastmorph-1.6.0-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6521ba02b092ef5b4976ac9e6429c5a0428402b46930b388a1f3dc4c399b72cf",
                "md5": "6bfa0f9aa2150bd74d448d0ffad87430",
                "sha256": "2c46b0be666fcfeef8c057e2aa443ffc85b16a7bd292f055b12f6638ae1ab451"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6bfa0f9aa2150bd74d448d0ffad87430",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9.0",
            "size": 162672,
            "upload_time": "2025-10-08T22:38:04",
            "upload_time_iso_8601": "2025-10-08T22:38:04.360863Z",
            "url": "https://files.pythonhosted.org/packages/65/21/ba02b092ef5b4976ac9e6429c5a0428402b46930b388a1f3dc4c399b72cf/fastmorph-1.6.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f6eba05e0119cc527043bfa865d6d76b877b7ca549b0040c6162bcd4cf63a1fa",
                "md5": "64c3652a0e3a802a16b2479b1cfa530b",
                "sha256": "bf726a22143cf12c694020f3cbc3a5dd92ec3f43eb6f0ce4a4753c0d62b1a1d4"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "64c3652a0e3a802a16b2479b1cfa530b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0",
            "size": 205473,
            "upload_time": "2025-10-08T22:38:06",
            "upload_time_iso_8601": "2025-10-08T22:38:06.220124Z",
            "url": "https://files.pythonhosted.org/packages/f6/eb/a05e0119cc527043bfa865d6d76b877b7ca549b0040c6162bcd4cf63a1fa/fastmorph-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1df3993d07624ceb8d89d605434d9630d20f37a50cd91b8a6383ad4adf4052c6",
                "md5": "27a08a2487fadf417040242f871a167a",
                "sha256": "39e6c2c02ea878b71a83c8d6e6cb0d1fef2b54f2924871c682fd97b6e3d2d725"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "27a08a2487fadf417040242f871a167a",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0",
            "size": 175798,
            "upload_time": "2025-10-08T22:38:07",
            "upload_time_iso_8601": "2025-10-08T22:38:07.258089Z",
            "url": "https://files.pythonhosted.org/packages/1d/f3/993d07624ceb8d89d605434d9630d20f37a50cd91b8a6383ad4adf4052c6/fastmorph-1.6.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "48ea52f6ed2706f5b95fcdaa55ce2548caa1945888676be1577fb5491cb28916",
                "md5": "2cb6b8af42f6ba10c8b571a750c37a31",
                "sha256": "57afb3fb83b9a5266635f00fec420ba0cb6b73b8aa76e04b96a8bdf0ef2c3dda"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2cb6b8af42f6ba10c8b571a750c37a31",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0",
            "size": 253926,
            "upload_time": "2025-10-08T22:38:08",
            "upload_time_iso_8601": "2025-10-08T22:38:08.482747Z",
            "url": "https://files.pythonhosted.org/packages/48/ea/52f6ed2706f5b95fcdaa55ce2548caa1945888676be1577fb5491cb28916/fastmorph-1.6.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "97374f3f94d397cab4f76dfda416d6292d51fd1a3bf9f6e6f46b5eb3c5f77c99",
                "md5": "4b1a8c60fb5740d05288a420d2e93194",
                "sha256": "7b28dc7a236c1e65ffe3308702ea0748defc4ee482017f249d1393fffbc6a7ff"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4b1a8c60fb5740d05288a420d2e93194",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0",
            "size": 262343,
            "upload_time": "2025-10-08T22:38:09",
            "upload_time_iso_8601": "2025-10-08T22:38:09.370993Z",
            "url": "https://files.pythonhosted.org/packages/97/37/4f3f94d397cab4f76dfda416d6292d51fd1a3bf9f6e6f46b5eb3c5f77c99/fastmorph-1.6.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d61c7cc880aae59b3ab22eb07a3e31717f1ff3152d7b9bc416e8783d739477f0",
                "md5": "81be92f03bb06f5cea875c7d30768db4",
                "sha256": "d49ae23316bae750892a0a3578aa4d4b2356b6e85dba168cac190369964fc030"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "81be92f03bb06f5cea875c7d30768db4",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0",
            "size": 181318,
            "upload_time": "2025-10-08T22:38:11",
            "upload_time_iso_8601": "2025-10-08T22:38:11.421171Z",
            "url": "https://files.pythonhosted.org/packages/d6/1c/7cc880aae59b3ab22eb07a3e31717f1ff3152d7b9bc416e8783d739477f0/fastmorph-1.6.0-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8da91c40a484486b81e0ff0923aa6a939124dd59fa99c50af4a87d37d3e5d2db",
                "md5": "e9622b79cf218b2e5f30cb2c9bc87cb7",
                "sha256": "7f37bd100181ef8214b05d12ba1e6c62ae7446fe6d08009412c72acdde75e922"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e9622b79cf218b2e5f30cb2c9bc87cb7",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9.0",
            "size": 163575,
            "upload_time": "2025-10-08T22:38:10",
            "upload_time_iso_8601": "2025-10-08T22:38:10.557826Z",
            "url": "https://files.pythonhosted.org/packages/8d/a9/1c40a484486b81e0ff0923aa6a939124dd59fa99c50af4a87d37d3e5d2db/fastmorph-1.6.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3388e870cc6eb9aaa50b67ad35319e227209b0e0f4b9d028c2c299d4c4c83cbf",
                "md5": "c49cb87a38be263244e5ee6a0e4ac713",
                "sha256": "70ebf622b81338418fefb1084107db1e6c2340623dca27d82e0ee26282352074"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c49cb87a38be263244e5ee6a0e4ac713",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9.0",
            "size": 206539,
            "upload_time": "2025-10-08T22:38:12",
            "upload_time_iso_8601": "2025-10-08T22:38:12.256829Z",
            "url": "https://files.pythonhosted.org/packages/33/88/e870cc6eb9aaa50b67ad35319e227209b0e0f4b9d028c2c299d4c4c83cbf/fastmorph-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4d456f6b620a1cdf12308586e47edf20a02e63350f66c7ca3fc019f6375aad4f",
                "md5": "61213836e70da4289651c48ec16c6f0b",
                "sha256": "118d4d3cd48fead165dd92aacc8936db5470bf073faa83878e3140582df1af93"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "61213836e70da4289651c48ec16c6f0b",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9.0",
            "size": 176337,
            "upload_time": "2025-10-08T22:38:14",
            "upload_time_iso_8601": "2025-10-08T22:38:14.035186Z",
            "url": "https://files.pythonhosted.org/packages/4d/45/6f6b620a1cdf12308586e47edf20a02e63350f66c7ca3fc019f6375aad4f/fastmorph-1.6.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d0d89d1a68fb4989e446e689302245cc3d075c9c8729bc2ada5519b3f4cf11aa",
                "md5": "94ef552f7d6267ae7864ed2696895389",
                "sha256": "c5ece1d3f54ae93483dc33801b46dd45c8cea02509648a8d852cfb5d47ee827c"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "94ef552f7d6267ae7864ed2696895389",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9.0",
            "size": 255524,
            "upload_time": "2025-10-08T22:38:15",
            "upload_time_iso_8601": "2025-10-08T22:38:15.213691Z",
            "url": "https://files.pythonhosted.org/packages/d0/d8/9d1a68fb4989e446e689302245cc3d075c9c8729bc2ada5519b3f4cf11aa/fastmorph-1.6.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b6e94c589218cbdca09fdcf530a508f3dde3b69e81d16fab698c5b979934e265",
                "md5": "4d4759d808fd96e4ab2c782ff9ba2ee0",
                "sha256": "fecd6ed6cad88f480377217db71778c1b5767c3ed1b8105adcd6fda43a9ee7da"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4d4759d808fd96e4ab2c782ff9ba2ee0",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9.0",
            "size": 267028,
            "upload_time": "2025-10-08T22:38:16",
            "upload_time_iso_8601": "2025-10-08T22:38:16.389280Z",
            "url": "https://files.pythonhosted.org/packages/b6/e9/4c589218cbdca09fdcf530a508f3dde3b69e81d16fab698c5b979934e265/fastmorph-1.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "978ae57c72634486e7695eb9d598ff7393e9cebb6dc5436af19affcbee545125",
                "md5": "adc9cdd47045187b41e26c4c9fa25735",
                "sha256": "9b80ae86b5586fd345c43f79c51341af3115eab57f55c3d245e5c32fe1511e3e"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "adc9cdd47045187b41e26c4c9fa25735",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9.0",
            "size": 180856,
            "upload_time": "2025-10-08T22:38:18",
            "upload_time_iso_8601": "2025-10-08T22:38:18.258863Z",
            "url": "https://files.pythonhosted.org/packages/97/8a/e57c72634486e7695eb9d598ff7393e9cebb6dc5436af19affcbee545125/fastmorph-1.6.0-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d6b4ffb86e3971952240eed61d42f1afccca1096e9869eccfbf6fef050502574",
                "md5": "5242d3e8f4a47f14371fe58924dcd721",
                "sha256": "609804094d163b25949630f61e7fc46936eabac766f6c2b3fcaedef451279472"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "5242d3e8f4a47f14371fe58924dcd721",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9.0",
            "size": 163914,
            "upload_time": "2025-10-08T22:38:17",
            "upload_time_iso_8601": "2025-10-08T22:38:17.389007Z",
            "url": "https://files.pythonhosted.org/packages/d6/b4/ffb86e3971952240eed61d42f1afccca1096e9869eccfbf6fef050502574/fastmorph-1.6.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "30d7e1534b521a0656f970d73d6670ada58f9383996df7b25700d473822c95f8",
                "md5": "23178c6531c26b5896f1142816dd07c3",
                "sha256": "5d4e4816dc583c177e0a9228271d5ec969dba315f173c69e0ca499e070e79f4d"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "23178c6531c26b5896f1142816dd07c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9.0",
            "size": 206656,
            "upload_time": "2025-10-08T22:38:19",
            "upload_time_iso_8601": "2025-10-08T22:38:19.512357Z",
            "url": "https://files.pythonhosted.org/packages/30/d7/e1534b521a0656f970d73d6670ada58f9383996df7b25700d473822c95f8/fastmorph-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9ab4103fbba8bd0d7b6847e6dec4635b3814389480d83d82e899e1c49200b654",
                "md5": "7fca13f55d6ee112d7836c14cca4a28e",
                "sha256": "a2d78fbbf719869be32da1854225377efae3fd98550c9128808eae454b448003"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "7fca13f55d6ee112d7836c14cca4a28e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9.0",
            "size": 176359,
            "upload_time": "2025-10-08T22:38:20",
            "upload_time_iso_8601": "2025-10-08T22:38:20.384950Z",
            "url": "https://files.pythonhosted.org/packages/9a/b4/103fbba8bd0d7b6847e6dec4635b3814389480d83d82e899e1c49200b654/fastmorph-1.6.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c67aef1fafcbe7de7c4e7a88d4d48460ce4e1ba99cdc29b377c26fd3739ea116",
                "md5": "2816d5ae88c18c56bc350e11cfd4f48c",
                "sha256": "d775819568c49e87bbf8fbc7dff2d6aa24d9c640117cb904468aa88930a62019"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2816d5ae88c18c56bc350e11cfd4f48c",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9.0",
            "size": 255275,
            "upload_time": "2025-10-08T22:38:21",
            "upload_time_iso_8601": "2025-10-08T22:38:21.193992Z",
            "url": "https://files.pythonhosted.org/packages/c6/7a/ef1fafcbe7de7c4e7a88d4d48460ce4e1ba99cdc29b377c26fd3739ea116/fastmorph-1.6.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "713dfd950850aa9135efdd3840b9a97b00d11f613d78acea7eb7fa1a615b24d0",
                "md5": "6c0a43a8484ac59a9cb76e390c21bdfc",
                "sha256": "36284aa7615b205c1f61fd81b3fe144aee33018e7d04f328b904a4bc2e7104ba"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6c0a43a8484ac59a9cb76e390c21bdfc",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9.0",
            "size": 266298,
            "upload_time": "2025-10-08T22:38:22",
            "upload_time_iso_8601": "2025-10-08T22:38:22.344997Z",
            "url": "https://files.pythonhosted.org/packages/71/3d/fd950850aa9135efdd3840b9a97b00d11f613d78acea7eb7fa1a615b24d0/fastmorph-1.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8919127453956ac986a0a8bd961e526bcde603a15cf7bc76c6d723efa921f0d1",
                "md5": "73ac85325687016d53fc04f6c6409ebe",
                "sha256": "3e26d28b16ab98fa34324812faa024cb203654288e759f0fe3c7407a3821fefc"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "73ac85325687016d53fc04f6c6409ebe",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9.0",
            "size": 180904,
            "upload_time": "2025-10-08T22:38:24",
            "upload_time_iso_8601": "2025-10-08T22:38:24.473200Z",
            "url": "https://files.pythonhosted.org/packages/89/19/127453956ac986a0a8bd961e526bcde603a15cf7bc76c6d723efa921f0d1/fastmorph-1.6.0-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3505ebd5876da133662104637271a32c294011cc56157ff91f91799197af7f91",
                "md5": "e52d743e481e45dabed186bc0d65133e",
                "sha256": "c6183649f71298a0045fd79716abd736998d07f604d423339a583f2ed9ee1d55"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e52d743e481e45dabed186bc0d65133e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9.0",
            "size": 164006,
            "upload_time": "2025-10-08T22:38:23",
            "upload_time_iso_8601": "2025-10-08T22:38:23.262177Z",
            "url": "https://files.pythonhosted.org/packages/35/05/ebd5876da133662104637271a32c294011cc56157ff91f91799197af7f91/fastmorph-1.6.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0a0c650f4da45f0005f73024108c5398a6afc80d71404cda613e6640655c73a6",
                "md5": "4268c92d521351dc9b075ba30fabf58d",
                "sha256": "a6d375a72e009e9a5b249a3a389b638b4df2d1a76c9993378edb16034e7f7489"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4268c92d521351dc9b075ba30fabf58d",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0",
            "size": 204014,
            "upload_time": "2025-10-08T22:38:25",
            "upload_time_iso_8601": "2025-10-08T22:38:25.587673Z",
            "url": "https://files.pythonhosted.org/packages/0a/0c/650f4da45f0005f73024108c5398a6afc80d71404cda613e6640655c73a6/fastmorph-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "654e595c0e43a546579b53a1f11587075c68f96fa960dfa8ccfff0f83bbfae0d",
                "md5": "bc390b01581523837ba0cf26cc90c6fc",
                "sha256": "f0ae6da5b32d0ac3f84d06f86e8ae0d024b6aadce801200ea050058e1fa93c63"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "bc390b01581523837ba0cf26cc90c6fc",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0",
            "size": 174615,
            "upload_time": "2025-10-08T22:38:26",
            "upload_time_iso_8601": "2025-10-08T22:38:26.489814Z",
            "url": "https://files.pythonhosted.org/packages/65/4e/595c0e43a546579b53a1f11587075c68f96fa960dfa8ccfff0f83bbfae0d/fastmorph-1.6.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f162a7920dd2689408d06f9aa8a4c80907040d94afc4c30b1bc4da4640a73d8d",
                "md5": "0ef53e36e81d8e8a06d4cc15fe88d239",
                "sha256": "0fe3a307cb918cf6604496a9e38f5e7b7bd6bb6de5e77ffbd9d7076c8e58346c"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "0ef53e36e81d8e8a06d4cc15fe88d239",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0",
            "size": 252281,
            "upload_time": "2025-10-08T22:38:27",
            "upload_time_iso_8601": "2025-10-08T22:38:27.791995Z",
            "url": "https://files.pythonhosted.org/packages/f1/62/a7920dd2689408d06f9aa8a4c80907040d94afc4c30b1bc4da4640a73d8d/fastmorph-1.6.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "239bf0894fba70acfe06ea7892b52c474fa9c89d039276ec74a494f0d4f9ec78",
                "md5": "19b52e0ad913c61cb0dafde943597ed5",
                "sha256": "f58e6297829587657a2a4cd920fd2269f16263581f8680c6864bcb750c833f73"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "19b52e0ad913c61cb0dafde943597ed5",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0",
            "size": 261019,
            "upload_time": "2025-10-08T22:38:29",
            "upload_time_iso_8601": "2025-10-08T22:38:29.014098Z",
            "url": "https://files.pythonhosted.org/packages/23/9b/f0894fba70acfe06ea7892b52c474fa9c89d039276ec74a494f0d4f9ec78/fastmorph-1.6.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "faa0c53d3a3d1206f01dfbd99ed67341ed9e00b4074e59ea0afc391a199a3e8d",
                "md5": "c6bcce340ccfd3c5bcc634bdb9886219",
                "sha256": "565c5194b01739c7062444778f8620e26043196dbe6a820cecbff1eb5e6c7179"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "c6bcce340ccfd3c5bcc634bdb9886219",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0",
            "size": 180127,
            "upload_time": "2025-10-08T22:38:31",
            "upload_time_iso_8601": "2025-10-08T22:38:31.405293Z",
            "url": "https://files.pythonhosted.org/packages/fa/a0/c53d3a3d1206f01dfbd99ed67341ed9e00b4074e59ea0afc391a199a3e8d/fastmorph-1.6.0-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f616e19d4c410a7c188a87acd87ec69c834013bf660c1cb3b7a9b2d970638aa3",
                "md5": "96d1f226b9f5b9116e1ddd6fa17e909f",
                "sha256": "80fec9c2b216dedaaf40cdd3edaa0acbfb8f46e8883dee837e8b2e56926ee903"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "96d1f226b9f5b9116e1ddd6fa17e909f",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9.0",
            "size": 164439,
            "upload_time": "2025-10-08T22:38:30",
            "upload_time_iso_8601": "2025-10-08T22:38:30.594255Z",
            "url": "https://files.pythonhosted.org/packages/f6/16/e19d4c410a7c188a87acd87ec69c834013bf660c1cb3b7a9b2d970638aa3/fastmorph-1.6.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "071ca3ff9d96b9eb3c52bf2d1b951e9d0ba1129efd66097608718e906102cfce",
                "md5": "a45682d742813540c0432cc8abddf4a0",
                "sha256": "54503fb7238163e98836c944305f583a495832ee34b71460f2d8c8f5b939a850"
            },
            "downloads": -1,
            "filename": "fastmorph-1.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "a45682d742813540c0432cc8abddf4a0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9.0",
            "size": 30563,
            "upload_time": "2025-10-08T22:38:32",
            "upload_time_iso_8601": "2025-10-08T22:38:32.288498Z",
            "url": "https://files.pythonhosted.org/packages/07/1c/a3ff9d96b9eb3c52bf2d1b951e9d0ba1129efd66097608718e906102cfce/fastmorph-1.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-08 22:38:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "seung-lab",
    "github_project": "fastmorph",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "fastmorph"
}
        
Elapsed time: 2.38125s