# πβοΈπ§¬ Pyskani [](https://github.com/althonos/pyskani/stargazers)
*[PyO3](https://pyo3.rs/) bindings and Python interface to [skani](https://github.com/bluenote-1577/skani), a method for fast fast genomic identity calculation using sparse chaining.*
[](https://github.com/althonos/pyskani/actions)
[](https://codecov.io/gh/althonos/pyskani/)
[](https://choosealicense.com/licenses/mit/)
[](https://pypi.org/project/pyskani)
[](https://anaconda.org/bioconda/pyskani)
[](https://aur.archlinux.org/packages/python-pyskani)
[](https://pypi.org/project/pyskani/#files)
[](https://pypi.org/project/pyskani/#files)
[](https://pypi.org/project/pyskani/#files)
[](https://github.com/althonos/pyskani/)
[](https://git.embl.de/larralde/pyskani/)
[](https://github.com/althonos/pyskani/issues)
[](https://pyskani.readthedocs.io)
[](https://github.com/althonos/pyskani/blob/master/CHANGELOG.md)
[&style=flat-square&label=downloads&color=303f9f&cacheSeconds=86400)](https://pepy.tech/project/pyskani)
[](https://academic.oup.com/nargab/article/7/3/lqaf095/8196481)
## πΊοΈ Overview
`skani`[\[1\]](#ref1) is a method developed by [Jim Shaw](https://jim-shaw-bluenote.github.io/)
and [Yun William Yu](https://github.com/yunwilliamyu) for fast and robust
metagenomic sequence comparison through sparse chaining. It improves on
FastANI by being more accurate and much faster, while requiring less memory.
`pyskani` is a Python module, implemented using the [PyO3](https://pyo3.rs/)
framework, that provides bindings to `skani`. It directly links to the
`skani` code, which has the following advantages over CLI wrappers:
- **pre-built wheels**: `pyskani` is distributed on PyPI and features
pre-built wheels for common platforms, including x86-64 and Arm64 UNIX.
- **single dependency**: If your software or your analysis pipeline is
distributed as a Python package, you can add `pyskani` as a dependency to
your project, and stop worrying about the `skani` binary being present on
the end-user machine.
- **sans I/O**: Everything happens in memory, in Python objects you control,
making it easier to pass your sequences to `skani` without having to write
them to a temporary file.
*This library is still a work-in-progress, and in an experimental stage,
but it should already pack enough features to be used in a standard pipeline.*
## π§ Installing
Pyskani can be installed directly from [PyPI](https://pypi.org/project/pyskani/),
which hosts some pre-built CPython wheels for x86-64 Unix platforms, as well
as the code required to compile from source with Rust:
```console
$ pip install pyskani
```
<!-- Otherwise, pyskani is also available as a [Bioconda](https://anaconda.org/bioconda/pyskani)
package:
```console
$ conda install -c bioconda pyskani
``` -->
In the event you have to compile the package from source, all the required
Rust libraries are vendored in the source distribution, and a Rust compiler
will be setup automatically if there is none on the host machine.
## π Citation
If you found Pyskani useful, please cite [our paper](https://academic.oup.com/nargab/article/7/3/lqaf095/8196481), as well as the original [skani paper](https://www.nature.com/articles/s41592-023-02018-3).
To cite Pyskani:
> Martin Larralde, Georg Zeller, Laura M. Carroll. 2025. PyOrthoANI, PyFastANI, and Pyskani: a suite of Python libraries for computation of average nucleotide identity. *NAR Genomics and Bioinformatics* 7(3):lqaf095. doi:10.1093/nargab/lqaf095.
To cite skani:
> Jim Shaw, Yun William Yu. 2023. Fast and robust metagenomic sequence comparison through sparse chaining with skani. *Nature Methods* 20(11):1661-1665. doi:10.1038/s41592-023-02018-3.
## π‘ Examples
### π Creating a database
A database can be created either in memory or using a folder on the machine
filesystem to store the sketches. Independently of the storage, a database
can be used immediately for querying, or saved to a different location.
Here is how to create a database into memory,
using [Biopython](https://github.com/biopython/biopython)
to load the record:
```python
database = pyskani.Database()
record = Bio.SeqIO.read("vendor/skani/test_files/e.coli-EC590.fasta", "fasta")
database.sketch("E. coli EC590", bytes(record.seq))
```
For draft genomes, simply pass more arguments to the `sketch` method, for
which you can use the splat operator:
```python
database = pyskani.Database()
records = Bio.SeqIO.parse("vendor/skani/test_files/e.coli-o157.fasta", "fasta")
sequences = (bytes(record.seq) for record in records)
database.sketch("E. coli O157", *sequences)
```
### ποΈ Loading a database
To load a database, either created from `skani` or `pyskani`, you can either
load all sketches into memory, for fast querying:
```python
database = pyskani.Database.load("path/to/sketches")
```
Or load the files lazily to save memory, at the cost of slower querying:
```python
database = pyskani.Database.open("path/to/sketches")
```
### π Querying a database
Once a database has been created or loaded, use the `Database.query` method
to compute ANI for some query genomes:
```python
record = Bio.SeqIO.read("vendor/skani/test_files/e.coli-K12.fasta", "fasta")
hits = database.query("E. coli K12", bytes(record.seq))
```
## π See Also
Computing ANI for closed genomes? You may also be interested in
[`pyfastani`, a Python package for computing ANI](https://github.com/althonos/pyfastani)
using the [FastANI method](https://www.nature.com/articles/s41467-018-07641-9)
developed by [Chirag Jain](https://github.com/cjain7) *et al.*
## π Feedback
### β οΈ Issue Tracker
Found a bug ? Have an enhancement request ? Head over to the
[GitHub issue tracker](https://github.com/althonos/pyskani/issues) if you need
to report or ask something. If you are filing in on a bug, please include as
much information as you can about the issue, and try to recreate the same bug
in a simple, easily reproducible situation.
### ποΈ Contributing
Contributions are more than welcome! See
[`CONTRIBUTING.md`](https://github.com/althonos/pyskani/blob/master/CONTRIBUTING.md)
for more details.
## βοΈ License
This library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).
The `skani` code was written by [Jim Shaw](https://jim-shaw-bluenote.github.io/)
and is distributed under the terms of the [MIT License](https://choosealicense.com/licenses/mit/)
as well. See `vendor/skani/LICENSE` for more information. Source distributions
of `pyskani` vendors additional sources under their own terms using
the [`cargo vendor`](https://doc.rust-lang.org/cargo/commands/cargo-vendor.html)
command.
*This project is in no way not affiliated, sponsored, or otherwise endorsed
by the [original `skani` authors](https://jim-shaw-bluenote.github.io/).
It was developed by [Martin Larralde](https://github.com/althonos/) during his
PhD project at the [European Molecular Biology Laboratory](https://www.embl.de/)
in the [Zeller team](https://github.com/zellerlab).*
## π References
- <a id="ref1">\[1\]</a> Jim Shaw and Yun William Yu. 'Fast and robust metagenomic sequence comparison through sparse chaining with skani' (2023). Nature Methods. [doi:10.1038/s41592-023-02018-3](https://doi.org/10.1038/s41592-023-02018-3). [PMID:37735570](https://pubmed.ncbi.nlm.nih.gov/37735570/).
Raw data
{
"_id": null,
"home_page": "https://github.com/althonos/pyskani/",
"name": "pyskani",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "bioinformatics, genomics, average, nucleotide, identity",
"author": "Martin Larralde <martin.larralde@embl.de>",
"author_email": "Martin Larralde <martin.larralde@embl.de>",
"download_url": "https://files.pythonhosted.org/packages/f9/5e/9ee2df677224af9f9c55eda6524c98c7f10c1b5fd96ad033ba47d5e09435/pyskani-0.2.0.tar.gz",
"platform": null,
"description": "# \ud83d\udc0d\u26d3\ufe0f\ud83e\uddec Pyskani [](https://github.com/althonos/pyskani/stargazers)\n\n*[PyO3](https://pyo3.rs/) bindings and Python interface to [skani](https://github.com/bluenote-1577/skani), a method for fast fast genomic identity calculation using sparse chaining.*\n\n[](https://github.com/althonos/pyskani/actions)\n[](https://codecov.io/gh/althonos/pyskani/)\n[](https://choosealicense.com/licenses/mit/)\n[](https://pypi.org/project/pyskani)\n[](https://anaconda.org/bioconda/pyskani)\n[](https://aur.archlinux.org/packages/python-pyskani)\n[](https://pypi.org/project/pyskani/#files)\n[](https://pypi.org/project/pyskani/#files)\n[](https://pypi.org/project/pyskani/#files)\n[](https://github.com/althonos/pyskani/)\n[](https://git.embl.de/larralde/pyskani/)\n[](https://github.com/althonos/pyskani/issues)\n[](https://pyskani.readthedocs.io)\n[](https://github.com/althonos/pyskani/blob/master/CHANGELOG.md)\n[&style=flat-square&label=downloads&color=303f9f&cacheSeconds=86400)](https://pepy.tech/project/pyskani)\n[](https://academic.oup.com/nargab/article/7/3/lqaf095/8196481)\n\n## \ud83d\uddfa\ufe0f Overview\n\n`skani`[\\[1\\]](#ref1) is a method developed by [Jim Shaw](https://jim-shaw-bluenote.github.io/)\nand [Yun William Yu](https://github.com/yunwilliamyu) for fast and robust\nmetagenomic sequence comparison through sparse chaining. It improves on\nFastANI by being more accurate and much faster, while requiring less memory.\n\n`pyskani` is a Python module, implemented using the [PyO3](https://pyo3.rs/)\nframework, that provides bindings to `skani`. It directly links to the\n`skani` code, which has the following advantages over CLI wrappers:\n\n- **pre-built wheels**: `pyskani` is distributed on PyPI and features\n pre-built wheels for common platforms, including x86-64 and Arm64 UNIX.\n- **single dependency**: If your software or your analysis pipeline is\n distributed as a Python package, you can add `pyskani` as a dependency to\n your project, and stop worrying about the `skani` binary being present on\n the end-user machine.\n- **sans I/O**: Everything happens in memory, in Python objects you control,\n making it easier to pass your sequences to `skani` without having to write\n them to a temporary file.\n\n*This library is still a work-in-progress, and in an experimental stage,\nbut it should already pack enough features to be used in a standard pipeline.*\n\n\n## \ud83d\udd27 Installing\n\nPyskani can be installed directly from [PyPI](https://pypi.org/project/pyskani/),\nwhich hosts some pre-built CPython wheels for x86-64 Unix platforms, as well\nas the code required to compile from source with Rust:\n```console\n$ pip install pyskani\n```\n<!-- Otherwise, pyskani is also available as a [Bioconda](https://anaconda.org/bioconda/pyskani)\npackage:\n```console\n$ conda install -c bioconda pyskani\n``` -->\n\nIn the event you have to compile the package from source, all the required\nRust libraries are vendored in the source distribution, and a Rust compiler\nwill be setup automatically if there is none on the host machine.\n\n## \ud83d\udd16 Citation\n\nIf you found Pyskani useful, please cite [our paper](https://academic.oup.com/nargab/article/7/3/lqaf095/8196481), as well as the original [skani paper](https://www.nature.com/articles/s41592-023-02018-3).\n\nTo cite Pyskani:\n\n> Martin Larralde, Georg Zeller, Laura M. Carroll. 2025. PyOrthoANI, PyFastANI, and Pyskani: a suite of Python libraries for computation of average nucleotide identity. *NAR Genomics and Bioinformatics* 7(3):lqaf095. doi:10.1093/nargab/lqaf095.\n\nTo cite skani:\n\n> Jim Shaw, Yun William Yu. 2023. Fast and robust metagenomic sequence comparison through sparse chaining with skani. *Nature Methods* 20(11):1661-1665. doi:10.1038/s41592-023-02018-3.\n\n## \ud83d\udca1 Examples\n\n### \ud83d\udcdd Creating a database\n\nA database can be created either in memory or using a folder on the machine\nfilesystem to store the sketches. Independently of the storage, a database\ncan be used immediately for querying, or saved to a different location.\n\nHere is how to create a database into memory,\nusing [Biopython](https://github.com/biopython/biopython)\nto load the record:\n```python\ndatabase = pyskani.Database()\nrecord = Bio.SeqIO.read(\"vendor/skani/test_files/e.coli-EC590.fasta\", \"fasta\")\ndatabase.sketch(\"E. coli EC590\", bytes(record.seq))\n```\n\nFor draft genomes, simply pass more arguments to the `sketch` method, for\nwhich you can use the splat operator:\n```python\ndatabase = pyskani.Database()\nrecords = Bio.SeqIO.parse(\"vendor/skani/test_files/e.coli-o157.fasta\", \"fasta\")\nsequences = (bytes(record.seq) for record in records)\ndatabase.sketch(\"E. coli O157\", *sequences)\n```\n\n### \ud83d\uddd2\ufe0f Loading a database\n\nTo load a database, either created from `skani` or `pyskani`, you can either\nload all sketches into memory, for fast querying:\n```python\ndatabase = pyskani.Database.load(\"path/to/sketches\")\n```\n\nOr load the files lazily to save memory, at the cost of slower querying:\n```python\ndatabase = pyskani.Database.open(\"path/to/sketches\")\n```\n\n### \ud83d\udd0e Querying a database\n\nOnce a database has been created or loaded, use the `Database.query` method\nto compute ANI for some query genomes:\n```python\nrecord = Bio.SeqIO.read(\"vendor/skani/test_files/e.coli-K12.fasta\", \"fasta\")\nhits = database.query(\"E. coli K12\", bytes(record.seq))\n```\n\n## \ud83d\udd0e See Also\n\nComputing ANI for closed genomes? You may also be interested in\n[`pyfastani`, a Python package for computing ANI](https://github.com/althonos/pyfastani)\nusing the [FastANI method](https://www.nature.com/articles/s41467-018-07641-9)\ndeveloped by [Chirag Jain](https://github.com/cjain7) *et al.*\n\n## \ud83d\udcad Feedback\n\n### \u26a0\ufe0f Issue Tracker\n\nFound a bug ? Have an enhancement request ? Head over to the\n[GitHub issue tracker](https://github.com/althonos/pyskani/issues) if you need\nto report or ask something. If you are filing in on a bug, please include as\nmuch information as you can about the issue, and try to recreate the same bug\nin a simple, easily reproducible situation.\n\n### \ud83c\udfd7\ufe0f Contributing\n\nContributions are more than welcome! See\n[`CONTRIBUTING.md`](https://github.com/althonos/pyskani/blob/master/CONTRIBUTING.md)\nfor more details.\n\n\n## \u2696\ufe0f License\n\nThis library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).\n\nThe `skani` code was written by [Jim Shaw](https://jim-shaw-bluenote.github.io/)\nand is distributed under the terms of the [MIT License](https://choosealicense.com/licenses/mit/)\nas well. See `vendor/skani/LICENSE` for more information. Source distributions\nof `pyskani` vendors additional sources under their own terms using\nthe [`cargo vendor`](https://doc.rust-lang.org/cargo/commands/cargo-vendor.html)\ncommand.\n\n*This project is in no way not affiliated, sponsored, or otherwise endorsed\nby the [original `skani` authors](https://jim-shaw-bluenote.github.io/).\nIt was developed by [Martin Larralde](https://github.com/althonos/) during his\nPhD project at the [European Molecular Biology Laboratory](https://www.embl.de/)\nin the [Zeller team](https://github.com/zellerlab).*\n\n## \ud83d\udcda References\n\n- <a id=\"ref1\">\\[1\\]</a> Jim Shaw and Yun William Yu. 'Fast and robust metagenomic sequence comparison through sparse chaining with skani' (2023). Nature Methods. [doi:10.1038/s41592-023-02018-3](https://doi.org/10.1038/s41592-023-02018-3). [PMID:37735570](https://pubmed.ncbi.nlm.nih.gov/37735570/).\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "PyO3 bindings and Python interface to skani, a method for fast fast genomic identity calculation using sparse chaining.",
"version": "0.2.0",
"project_urls": {
"Bug Tracker": "https://github.com/althonos/pyskani/issues",
"Builds": "https://github.com/althonos/pyskani/actions/",
"Changelog": "https://github.com/althonos/pyskani/blob/master/CHANGELOG.md",
"Documentation": "https://pyskani.readthedocs.io",
"Homepage": "https://github.com/althonos/pyskani/",
"PyPI": "https://pypi.org/project/pyskani"
},
"split_keywords": [
"bioinformatics",
" genomics",
" average",
" nucleotide",
" identity"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d6df9e8cee4072d3df21d6f3402a6f38e9957de18b9f7acc5f3f4139e993c8ca",
"md5": "991e7a62b54076b65cbdb18a8cf869da",
"sha256": "d0efc0d143a37dc13bf367b62b3bcce46e49525fe595d3ec07c3284c24a15458"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "991e7a62b54076b65cbdb18a8cf869da",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 3457314,
"upload_time": "2025-08-20T23:17:02",
"upload_time_iso_8601": "2025-08-20T23:17:02.401682Z",
"url": "https://files.pythonhosted.org/packages/d6/df/9e8cee4072d3df21d6f3402a6f38e9957de18b9f7acc5f3f4139e993c8ca/pyskani-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "789fbcf49c05b72144cfdf27f2a5455f97f3272a4926ad6b602355aaf46b59d9",
"md5": "3dfa9481a287fe4117f9492226474adb",
"sha256": "48d2252b1804c848d2e64d98a418648f5fdb27f35769d8cba29aefd973727d04"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3dfa9481a287fe4117f9492226474adb",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 3463044,
"upload_time": "2025-08-20T23:17:04",
"upload_time_iso_8601": "2025-08-20T23:17:04.113876Z",
"url": "https://files.pythonhosted.org/packages/78/9f/bcf49c05b72144cfdf27f2a5455f97f3272a4926ad6b602355aaf46b59d9/pyskani-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d022996df37b34affe0eeab3ed6168a9775448d751b0269ee158bf81fced61c7",
"md5": "a9a6061a8767a5ab4bbb6510e12b17dd",
"sha256": "0245137eb769a204b503fa24af35e763c8dc749d8d1e5a97ba63f9054c4fc589"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp310-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "a9a6061a8767a5ab4bbb6510e12b17dd",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.7",
"size": 3334973,
"upload_time": "2025-08-20T23:17:05",
"upload_time_iso_8601": "2025-08-20T23:17:05.649598Z",
"url": "https://files.pythonhosted.org/packages/d0/22/996df37b34affe0eeab3ed6168a9775448d751b0269ee158bf81fced61c7/pyskani-0.2.0-cp310-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dfbd7b595688667352a9fc790b88e040ad0128d00ffa8af281ef25a3a457ec94",
"md5": "a463caf11c66ea2445371e9cbd68511f",
"sha256": "64f643b881bd9369c25e85286c0c0b0d955cc61688cb09b417d0c14a7dc3a8ac"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "a463caf11c66ea2445371e9cbd68511f",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 3416589,
"upload_time": "2025-08-20T23:17:07",
"upload_time_iso_8601": "2025-08-20T23:17:07.378149Z",
"url": "https://files.pythonhosted.org/packages/df/bd/7b595688667352a9fc790b88e040ad0128d00ffa8af281ef25a3a457ec94/pyskani-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "093f59558acea4f77e5865f3505a6e276ad5906436171488204e24b3623bc28d",
"md5": "449a7412dd14ffe94c4b911d0df31bbe",
"sha256": "193eee68dae81a421194eb9a4edfd5e584584864164bd637d4550030c0214a20"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "449a7412dd14ffe94c4b911d0df31bbe",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 3408996,
"upload_time": "2025-08-20T23:17:09",
"upload_time_iso_8601": "2025-08-20T23:17:09.366418Z",
"url": "https://files.pythonhosted.org/packages/09/3f/59558acea4f77e5865f3505a6e276ad5906436171488204e24b3623bc28d/pyskani-0.2.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1eb3f0e8e775c712b4bc624c9f7bc8078dee698cc398ac870c845c03ab201dd1",
"md5": "499306c9317b59fde0b2ca3f73b35dbb",
"sha256": "2767ef02d002385344a89581154c857ef7e0636898ca9e658e2c06151829e2cd"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "499306c9317b59fde0b2ca3f73b35dbb",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 3456881,
"upload_time": "2025-08-20T23:17:16",
"upload_time_iso_8601": "2025-08-20T23:17:16.416034Z",
"url": "https://files.pythonhosted.org/packages/1e/b3/f0e8e775c712b4bc624c9f7bc8078dee698cc398ac870c845c03ab201dd1/pyskani-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8bbcd43f351623edf9107ae06bb74da37217f63af145ed3440a9319d40faaddd",
"md5": "c40a875228342b336816c7da601b075a",
"sha256": "aa2f1148b8fe0aad173ce63cae191e43b762094d7b389388aa6948a0463bbcb5"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c40a875228342b336816c7da601b075a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 3463167,
"upload_time": "2025-08-20T23:17:18",
"upload_time_iso_8601": "2025-08-20T23:17:18.433356Z",
"url": "https://files.pythonhosted.org/packages/8b/bc/d43f351623edf9107ae06bb74da37217f63af145ed3440a9319d40faaddd/pyskani-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bec93214b74085395a6d123fd44a898a5d057b3d92bf31b4ea974c47427a24f7",
"md5": "46f1c6d0225e24877ca1143b024b8ac9",
"sha256": "53a9eba239086ecac4d4664bbaa6483474404a531d9c7a4cb6de3c6921ca7d39"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp311-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "46f1c6d0225e24877ca1143b024b8ac9",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.7",
"size": 3334902,
"upload_time": "2025-08-20T23:17:21",
"upload_time_iso_8601": "2025-08-20T23:17:21.834096Z",
"url": "https://files.pythonhosted.org/packages/be/c9/3214b74085395a6d123fd44a898a5d057b3d92bf31b4ea974c47427a24f7/pyskani-0.2.0-cp311-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4a2d4792b0e3e25ccb6d84f1f62da5a43fb70452fe00555add0bc7141599bc35",
"md5": "d0481c6d2954da6840014b527b5e9626",
"sha256": "904d7a85a8eed35ea1adbb477c84024790016e46f659ab19a2cba6e3875beea6"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "d0481c6d2954da6840014b527b5e9626",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 3413453,
"upload_time": "2025-08-20T23:17:23",
"upload_time_iso_8601": "2025-08-20T23:17:23.403749Z",
"url": "https://files.pythonhosted.org/packages/4a/2d/4792b0e3e25ccb6d84f1f62da5a43fb70452fe00555add0bc7141599bc35/pyskani-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6948a583a88c8997b90a87e5de8373136190f4725533119ad2b6bbda3015ea9c",
"md5": "b3c40185b67b8534e31a36ae2cff20fd",
"sha256": "33f700999736003f75a1fb62ad28fd2aa6cd87e119c223b02bede758bd41aa79"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "b3c40185b67b8534e31a36ae2cff20fd",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 3405057,
"upload_time": "2025-08-20T23:17:25",
"upload_time_iso_8601": "2025-08-20T23:17:25.319903Z",
"url": "https://files.pythonhosted.org/packages/69/48/a583a88c8997b90a87e5de8373136190f4725533119ad2b6bbda3015ea9c/pyskani-0.2.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8b6f5dfd6cc42984f9b36bbc6d0ab38bb014cdcda5d9c05acc6856eb3ce300bc",
"md5": "af43932c21d2f7beb2081b27a0179bac",
"sha256": "ce2c8a703ca978a187c017b3ca66524d016596525b4fb05b4f916ddb6321066c"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "af43932c21d2f7beb2081b27a0179bac",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 3456971,
"upload_time": "2025-08-20T23:17:27",
"upload_time_iso_8601": "2025-08-20T23:17:27.130805Z",
"url": "https://files.pythonhosted.org/packages/8b/6f/5dfd6cc42984f9b36bbc6d0ab38bb014cdcda5d9c05acc6856eb3ce300bc/pyskani-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8c5a11901f78397a0227f9b10d4289281c3417258c334b132d6688a5cdedeb7f",
"md5": "9f1ea43ce8f6824318fe138891812cf5",
"sha256": "966ccdbcd3acff9047036c6b1b5009f8a02442e263a30aaed3e33b00255640e7"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "9f1ea43ce8f6824318fe138891812cf5",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 3462247,
"upload_time": "2025-08-20T23:17:28",
"upload_time_iso_8601": "2025-08-20T23:17:28.562524Z",
"url": "https://files.pythonhosted.org/packages/8c/5a/11901f78397a0227f9b10d4289281c3417258c334b132d6688a5cdedeb7f/pyskani-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "588531e4469a7b86cf67077f2e3b7de8f5871ff4544712ac3e3f18a992cfca54",
"md5": "7ed95fcd6cef8a7596076332851d4e68",
"sha256": "29b4449fe76ec40f4b41490796c6136715d9d3efbe6f60ec99fd3d0619ca609b"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp312-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "7ed95fcd6cef8a7596076332851d4e68",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.7",
"size": 3335479,
"upload_time": "2025-08-20T23:17:30",
"upload_time_iso_8601": "2025-08-20T23:17:30.431841Z",
"url": "https://files.pythonhosted.org/packages/58/85/31e4469a7b86cf67077f2e3b7de8f5871ff4544712ac3e3f18a992cfca54/pyskani-0.2.0-cp312-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "89b48a3d61a63d8a67de2645b29a2778fb17922b58a62c48d71c8bb305be467a",
"md5": "e46ceccbc6236962372f453cad6011e2",
"sha256": "929b66e08fa13193179be21034e1a8dcb648556faacef813e4f5ed4493e0eae1"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "e46ceccbc6236962372f453cad6011e2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 3456788,
"upload_time": "2025-08-20T23:17:32",
"upload_time_iso_8601": "2025-08-20T23:17:32.313051Z",
"url": "https://files.pythonhosted.org/packages/89/b4/8a3d61a63d8a67de2645b29a2778fb17922b58a62c48d71c8bb305be467a/pyskani-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a6fcde3d30470256c543094e2354f7b92cb692d0b7a6e682e3ad3c6637e30a1c",
"md5": "1b75b786de550e0d82ee509c673c78b6",
"sha256": "7571af33f8262206199fa7b4cd37024c35b4a4f1e8a5581ce4b4db092a400cef"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp313-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "1b75b786de550e0d82ee509c673c78b6",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.7",
"size": 3335111,
"upload_time": "2025-08-20T23:17:33",
"upload_time_iso_8601": "2025-08-20T23:17:33.752952Z",
"url": "https://files.pythonhosted.org/packages/a6/fc/de3d30470256c543094e2354f7b92cb692d0b7a6e682e3ad3c6637e30a1c/pyskani-0.2.0-cp313-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e47bd5e3aa83277ddc95c045871d4db9152c0629b908b59fb577852d0cce0d10",
"md5": "ac581fda738de63cbb40981f127ce574",
"sha256": "ab7773e77d893857e7807219ca0392fe6d07c126ed66c714c28d50ec808d4340"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "ac581fda738de63cbb40981f127ce574",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 3456707,
"upload_time": "2025-08-20T23:17:35",
"upload_time_iso_8601": "2025-08-20T23:17:35.361320Z",
"url": "https://files.pythonhosted.org/packages/e4/7b/d5e3aa83277ddc95c045871d4db9152c0629b908b59fb577852d0cce0d10/pyskani-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "131c06ea1fcb88a5def8025fae2684f9f8f4aacc7a2e356e5a8987589bab1def",
"md5": "2bbd9b025c5c9153f9573c2fab539acf",
"sha256": "1092ffde3434d79ee87a753d65961f0602eff57b6b2c8e2b454e029499b73838"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "2bbd9b025c5c9153f9573c2fab539acf",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.7",
"size": 3462897,
"upload_time": "2025-08-20T23:17:36",
"upload_time_iso_8601": "2025-08-20T23:17:36.924208Z",
"url": "https://files.pythonhosted.org/packages/13/1c/06ea1fcb88a5def8025fae2684f9f8f4aacc7a2e356e5a8987589bab1def/pyskani-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "babbb498df8ad869f81b35f7c1c9e00ee791795c1087c1beec0b6895944f7468",
"md5": "15831d90482544e29ed8483ac125aeb5",
"sha256": "0abdd724d19b3e1559f5013f9d1f4aa2bf454339206c69b13f1937b49a2c4497"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "15831d90482544e29ed8483ac125aeb5",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 3457827,
"upload_time": "2025-08-20T23:17:38",
"upload_time_iso_8601": "2025-08-20T23:17:38.407068Z",
"url": "https://files.pythonhosted.org/packages/ba/bb/b498df8ad869f81b35f7c1c9e00ee791795c1087c1beec0b6895944f7468/pyskani-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c631f3f498cbd6d125d925315e5804a217dee56e72e821cd70252d440f250f74",
"md5": "c6924b110afe5c3f3eb2fab8e6fdea39",
"sha256": "cc2d39b04d81f0d7da6c9398cfcf8a89b131171f6fa9641e4e25b82b199b8cb7"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c6924b110afe5c3f3eb2fab8e6fdea39",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 3463492,
"upload_time": "2025-08-20T23:17:40",
"upload_time_iso_8601": "2025-08-20T23:17:40.063831Z",
"url": "https://files.pythonhosted.org/packages/c6/31/f3f498cbd6d125d925315e5804a217dee56e72e821cd70252d440f250f74/pyskani-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f7a084d02c6dd6fc97e1870f44eba11d64ac71865df11e16353c80f94b507093",
"md5": "4992242dbd9f98cec5d07d4b0a178ffa",
"sha256": "9b5c77843280f312b8ce99570441bdeb8a90d488d346db7fc5d873405afad4e4"
},
"downloads": -1,
"filename": "pyskani-0.2.0-cp39-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "4992242dbd9f98cec5d07d4b0a178ffa",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.7",
"size": 3335430,
"upload_time": "2025-08-20T23:17:41",
"upload_time_iso_8601": "2025-08-20T23:17:41.532042Z",
"url": "https://files.pythonhosted.org/packages/f7/a0/84d02c6dd6fc97e1870f44eba11d64ac71865df11e16353c80f94b507093/pyskani-0.2.0-cp39-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f707256c6f3f34463dab04bfb8eb07eb3847ea67332c2ea100775222163bb4d9",
"md5": "5fe11507d9c636381ef62daab3d67afa",
"sha256": "7c047a85a2d6fb9684faae3a270eaf38f4875f46b2934d7f225d439fc8a960c0"
},
"downloads": -1,
"filename": "pyskani-0.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "5fe11507d9c636381ef62daab3d67afa",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 3458325,
"upload_time": "2025-08-20T23:17:43",
"upload_time_iso_8601": "2025-08-20T23:17:43.179284Z",
"url": "https://files.pythonhosted.org/packages/f7/07/256c6f3f34463dab04bfb8eb07eb3847ea67332c2ea100775222163bb4d9/pyskani-0.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aebfafea93a151fe584291f3f1815803db727c24c3e80a8bcfbe808b78d84366",
"md5": "512d62c33e46061c3138455ef86a70c0",
"sha256": "995cb04b1132ae10ca2442a7706f79a9425c7250894ebed18c8662682866fca3"
},
"downloads": -1,
"filename": "pyskani-0.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "512d62c33e46061c3138455ef86a70c0",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.7",
"size": 3464956,
"upload_time": "2025-08-20T23:17:44",
"upload_time_iso_8601": "2025-08-20T23:17:44.703765Z",
"url": "https://files.pythonhosted.org/packages/ae/bf/afea93a151fe584291f3f1815803db727c24c3e80a8bcfbe808b78d84366/pyskani-0.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f7963f4dce09ee7909ff24c62f4668e213b69270a78f78f01b369a499f307340",
"md5": "0a1e2178560f4c0c62bb043022d3338c",
"sha256": "4a8cbf8ef64f999e4853398144bfbbd11c19e235ce02e1fc51f837e34398c0f3"
},
"downloads": -1,
"filename": "pyskani-0.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "0a1e2178560f4c0c62bb043022d3338c",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.7",
"size": 3458099,
"upload_time": "2025-08-20T23:17:46",
"upload_time_iso_8601": "2025-08-20T23:17:46.886798Z",
"url": "https://files.pythonhosted.org/packages/f7/96/3f4dce09ee7909ff24c62f4668e213b69270a78f78f01b369a499f307340/pyskani-0.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f95e9ee2df677224af9f9c55eda6524c98c7f10c1b5fd96ad033ba47d5e09435",
"md5": "abb58540d15bba333d52533d7de95882",
"sha256": "270bbc09fb1115208348f2456b859149f91b9d9867c1526c4d379aef232c9bc9"
},
"downloads": -1,
"filename": "pyskani-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "abb58540d15bba333d52533d7de95882",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 2895673,
"upload_time": "2025-08-20T23:17:48",
"upload_time_iso_8601": "2025-08-20T23:17:48.903353Z",
"url": "https://files.pythonhosted.org/packages/f9/5e/9ee2df677224af9f9c55eda6524c98c7f10c1b5fd96ad033ba47d5e09435/pyskani-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-20 23:17:48",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "althonos",
"github_project": "pyskani",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pyskani"
}