esMorph
A fast Spanish morphological analyzer written in Rust with a Python API
Documentation · PyPI · crates.io · Español
esMorph is a morphological analyzer of Spanish: a Rust core with a Python API. For a word form it finds the analyses in a dictionary built from Wiktionary - the lemma, the part of speech and the Universal Dependencies features - orders them by probability and builds the forms of the word: conjugation, gender and number.
It analyzes 1.2 million tokens per second from Python, 28 times faster than spaCy, and lemmatizes as fast as simplemma, whose lemmas are right less often on the UD test sets of AnCora, PUD and COSER. Parts of speech, features and lemmas follow the UD guidelines and the conventions of the AnCora treebank, so the results can be compared with spaCy, Stanza and other UD tools.
- Analyzer - the analyses of a word form by probability, lists of words and lemmatization, checking a word form against the dictionary
- Universal Dependencies - parts of speech, features and lemmas by the UD guidelines and the AnCora conventions
- Verbs with clitics - a verb with enclitic pronouns and its words:
dámeloisda+me+lo - Tokens out of the dictionary - punctuation, numbers, ordinals, Roman numerals, names, addresses and abbreviations by rules
- Unknown words - analyses by the ending, a hyphen or a prefix, and the forms of guessed words
- Inflection - the forms of a lexeme and the form with given UD features
- Comparison - accuracy, inflection and speed compared with simplemma, spaCy, Stanza, ablaut and verbecc
Installation
Python 3.11 or newer is required.
pip install esmorph
Or with uv:
uv add esmorph
Wheels are built for Linux (Alpine included), macOS and Windows and for the free-threaded Python 3.14t; Rust is not needed to install them, and the dictionary is in the package. On other platforms pip builds the package from source, which requires Rust 1.88 or newer. See the Installation page.
For Rust there is the crate esmorph with the dictionary (cargo add esmorph; the documentation is on docs.rs).
Quick start
>>> from esmorph import Analyzer
>>> morph = Analyzer()
>>> morph.lemmatize("Los niños cantaban en la plaza".split())
['el', 'niño', 'cantar', 'en', 'el', 'plaza']
>>> analysis = morph.analyze("camiones")[0]
>>> analysis.lemma, analysis.pos, analysis.feats
('camión', 'NOUN', {'Gender': 'Masc', 'Number': 'Plur'})
>>> morph.analyze("hablar")[0].inflect(Tense="Past", Person="3", Number="Plur")
'hablaron'
>>> [form.word for form in morph.analyze("bonitas")[0].forms()]
['bonito', 'bonita', 'bonitos', 'bonitas']
The analyzer is created once: it loads the dictionary, and then it can be used in the whole program.
Features
Analysis of a word form
analyze gives the analyses of a word form, the most probable first: objects Analysis with the lemma, the part of speech, the UD features, the probability and the source of the analysis. Case does not matter for finding a word, though a word with a capital letter may also be a name, and a word without its accents is found too. Analyses are immutable: they can be compared, put into sets and pickled.
>>> [(a.lemma, a.pos, round(a.prob, 3)) for a in morph.analyze("canto")]
[('canto', 'NOUN', 0.999), ('cantar', 'VERB', 0.001)]
>>> analysis = morph.analyze("dámelo")[0]
>>> analysis.lemma, analysis.pos, analysis.words
('dar', 'VERB', ('da', 'me', 'lo'))
>>> morph.is_known("Camion"), morph.is_known("qzxw")
(True, False)
analyze_many analyzes a list of words, and lemmatize gives their lemmas without the GIL. The analyzer and the analyses are pickled, so they work with multiprocessing and joblib.
See the documentation: analyzer, word analysis.
Parts of speech and features of Universal Dependencies
Parts of speech, features and lemmas follow the Universal Dependencies guidelines and, where they are silent, the conventions of the largest Spanish treebank, UD Spanish AnCora:
- determiners, pronouns, prepositions and conjunctions have the lemmas and features of AnCora:
lais the articleelor the pronounél,seisélwithReflex=Yes,suisDETwithPoss=Yes ser,estar,haberand the other auxiliaries have bothAUXandVERBanalyses- a participle is a verb and an adjective, verbs have no
-sein the lemma, a proper name has a lemma with a capital letter
>>> [(w, morph.analyze(w)[0].lemma, morph.analyze(w)[0].pos) for w in ["la", "su", "hay", "madrid"]]
[('la', 'el', 'DET'), ('su', 'su', 'DET'), ('hay', 'haber', 'VERB'), ('madrid', 'Madrid', 'PROPN')]
>>> morph.analyze("la")[0].feats
{'Definite': 'Def', 'Gender': 'Fem', 'Number': 'Sing', 'PronType': 'Art'}
See the documentation.
Tokens out of the dictionary and unknown words
Tokens that the dictionary does not have get the analyses of rules, with source equal to "rule": punctuation, symbols, numbers in digits, ordinals (2.ª), Roman numerals, names, addresses and abbreviations. A lowercase word that neither the dictionary nor the rules know is guessed, with source equal to "guess": by its last part after a hyphen, by the word without a known prefix, as a verb with clitics or by the dictionary words with its ending. A guessed word has its forms too.
>>> [(a.lemma, a.pos, a.source) for w in ["2.ª", "10.000", "xii"] for a in morph.analyze(w)]
[('2.º', 'ADJ', 'rule'), ('10000', 'NUM', 'rule'), ('xii', 'NUM', 'rule')]
>>> [(morph.analyze(w)[0].lemma, morph.analyze(w)[0].source) for w in ["supergallos", "esbeltísima"]]
[('supergallo', 'guess'), ('esbeltísimo', 'guess')]
>>> morph.analyze("zumbeábamos")[0].inflect(Tense="Pres", Person="3", Number="Sing")
'zumbea'
See the documentation: tokens out of the dictionary, unknown words.
Inflection
forms() gives the forms of the lexeme of an analysis in the order of its paradigm, and inflect gives the form with the given UD features, keeping the other features of the analysis. A variant, such as a form of vos or an older spelling, comes only from a variant.
>>> morph.analyze("gata")[0].inflect(Number="Plur")
'gatas'
>>> morph.analyze("hablás")[0].inflect(Mood="Imp")
'hablá'
See the documentation.
Comparison
The share of words whose first analysis has the right lemma, and the right part of speech, features and lemma all together, % (test parts of the UD 2.18 treebanks), and the speed of text analysis:
| System | Lemma, AnCora | Lemma, PUD | Lemma, COSER | All together, PUD | Tokens per second |
|---|---|---|---|---|---|
| esMorph | 97.80 | 97.74 | 94.49 | 87.90 | 1,228,661 |
| simplemma | 96.94 | 96.96 | 93.50 | - | 2,507,937 |
| spaCy es_core_news_sm | 98.66 | 96.69 | 93.39 | 83.59 | 44,100 |
| Stanza | 99.16 | 97.80 | 94.98 | 86.34 | 2,694 |
esMorph analyzes a word without context, while spaCy and Stanza choose the analysis by the sentence and are trained on AnCora, so they lead on it; on PUD, new to all of them, the first analysis of esMorph has the right features and lemma together more often. An analysis with the right part of speech and lemma is among the analyses of esMorph for 96-99 % of words. It gives the gold form of 99.65, 93.29 and 95.55 % of the verbs of AnCora, PUD and COSER, against 98.87, 92.71 and 93.61 % of ablaut. A short text together with loading takes 3.5 ms against 0.35-2.3 s, and every further process with the same dictionary adds 3.6 MB of memory. Measured on Apple M3 Pro, Python 3.11.
See the documentation: all the scores, verb inflection, the chart of speed by the size of the text, memory and how it was measured.
Development
The project uses uv to manage dependencies, maturin to build the Rust module and ruff for linting and formatting. Python 3.11 or newer and Rust 1.88 or newer are required.
git clone https://github.com/SergeyShk/esMorph.git
cd esMorph
make deps # create the environment, install the dependencies and build the Rust module
make dictionary # build the dictionary from the snapshot of Wiktionary and the counts of treebanks
make test # run the Python tests, the docstring examples (doctest) and the Rust tests
make lint # ruff, mypy, rustfmt and clippy
The full list of commands is make help. The documentation is bilingual: English pages docs/*.md with Spanish docs/*.es.md next to them; update both versions when editing a page.
Before submitting changes, install the hooks that run the linters on commit and the tests on push:
uv run pre-commit install
Contributing
Bug reports, ideas and pull requests are welcome, in English or Spanish - the issues are open. The workflow and the checks to run before submitting a pull request are in CONTRIBUTING.md.
Project structure
- crates/esmorph - the analyzer core in Rust
- crates/esmorph-build - the builder of the dictionary
- crates/esmorph-dict-es - the dictionary as a crate
- crates/esmorph-py - the Python module
esmorph._esmorphbuilt with PyO3 - python/esmorph - the Python package
- scripts - exporting Wiktionary and the counts of the treebanks, the conventions of the dictionary, checking the installed package before publishing and the comparison with other tools
- data - the tables of closed classes after UD Spanish AnCora and of the symbols of units
- docs - MkDocs documentation in English and Spanish
- tests - tests of the Python package
Authors
- Sergey Shkarin (kouki.sergey@gmail.com)
License
The code is distributed under the MIT license. The dictionary is built from Wiktionary and the treebanks UD Spanish AnCora and UD Spanish GSD, and is distributed under the CC BY-SA 4.0 license.
Citation
If you use esMorph in research or software, please cite it with the following BibTeX entry: this helps the project grow and be maintained. The same metadata is in CITATION.cff - GitHub shows it under "Cite this repository".
@software{esMorph,
author = {Sergey Shkarin},
title = {{esMorph, a fast morphological analyzer for Spanish}},
year = 2026,
url = {https://github.com/SergeyShk/esMorph}
}
Metadata
Release files for esmorph 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| esmorph-0.1.0.tar.gz | 3.3 MB | Without provenance | Details for esmorph-0.1.0.tar.gz |
Built distributions (wheels)
Total release size: 58.2 MB
Release files / esmorph-0.1.0.tar.gz
| Download URL | esmorph-0.1.0.tar.gz |
|---|---|
| Size | 3.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7f48799102b99736b3dda1cf1a576c47c982a27bba53ec05122f9b52a3b2c0f4
|
|
BLAKE2b-256 checksum How to use checksums |
ca2c4465facf353acaa5fbd0cbea46720983a380ccfa0fda95481be55eed999b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-win_arm64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
a5c554e99bf542ec7eb17ec9aef9be2d6b648b96498acbb8ce12817c2917b26b
|
|
BLAKE2b-256 checksum How to use checksums |
e948c53baf202a63f0129606184ebff5a4b2c4e02c6ce5aa4bf9d217e74a1de0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-win_amd64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
bfe7fcf1216dc2e74ee81fd34b278511600bfb584e21215a29f00772668ab77f
|
|
BLAKE2b-256 checksum How to use checksums |
c1cc7e8707e9dad9244dd4f0562690d844135917db66e05e24f8442365fe304e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
633648c99f7321df2548802186d08123966d6a9b4454fadd7b7309afc49002a7
|
|
BLAKE2b-256 checksum How to use checksums |
0554deadacc1e8f54599b287ffbab1e22631a77a1877b6d33f0ae95bc6bf0457
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
08f63e54057b943e0600c928c47c11ea60a74535b867a0a86c5ce02a0a72269f
|
|
BLAKE2b-256 checksum How to use checksums |
867fcef4120f3e6ab37699eadee1edd9200b45365d1f798abfcb4ecf629a0e46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
7415d3b4de3ce058fce3abaffd639c94426897fcf777c449c56eb08920436585
|
|
BLAKE2b-256 checksum How to use checksums |
9482e70ab92a556e2fed40bb820fdc4de37e8b6429db1844e761f72d77113d29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
1ea297da161f39fc875d07df70bb2bc0c565fa065b214f58e89507b73d40493e
|
|
BLAKE2b-256 checksum How to use checksums |
d6c7cdedeb74ff558e69f7a3afbc8b80fce7c1062a92b15f413fb93e34182dbb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
2222d3a4a77fad5cc66ca845c4507c8c945dee22c6c9c30502ee94ca125df0df
|
|
BLAKE2b-256 checksum How to use checksums |
22a192e80ecd08f4e804e7e2cb2ebe905e01491e717479e3477e08cf8b00471b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | esmorph-0.1.0-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
0600516720288889ca9f610dd3e94a06f9f6a7b2440ebde8a661db1a614885ba
|
|
BLAKE2b-256 checksum How to use checksums |
fa15eeb85952934a1ff55787bd62cd06a769ee26f67e9826493d6e166649ee87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-win_arm64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-win_arm64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.11 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
38f51433d7ab8d109a7961635784cb6793459a03b7ae6563a07e4073b03f8500
|
|
BLAKE2b-256 checksum How to use checksums |
6ee543c40a181982226e9256267021dc33d302eab12241bf9cc027775c120682
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-win_amd64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 3.3 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
941e169bc8f6cbbe75895c57fc0ee50f4f34f2ef28399a434cc1187e8f9d7347
|
|
BLAKE2b-256 checksum How to use checksums |
3fb5dcb8a22dadcf610c63a7160c624444baea60351e46268ddb998b2412f076
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1f32b687a425178aa4d9d71b2b5175df974dc319b3deb7206121039b9321cfde
|
|
BLAKE2b-256 checksum How to use checksums |
a458b18426d9e963916e199e959dad3ddc89456890855b0ae2bb39f1ddffbdbb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.11 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
93069b914a51fed6a7d1b38f7fde968e0c50769e2b70ffbe87318c9b883c75bc
|
|
BLAKE2b-256 checksum How to use checksums |
b66678efa04da0a64d5bb55216aa83f4f391ac7c40cd64b3780792dee5320f64
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
cd3bb328a6879d21a16ce02d1f64c760b87fc655a2943ee72b7795e64ed53f5b
|
|
BLAKE2b-256 checksum How to use checksums |
db1c020d707df9eb31606041cb342de3d2f3e61e827faaf4b1f17ae8dc4a74d6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
11852c51d174a7f978ac398ba0cf24e1d6df3ffa87d48650720a6f81f5e5dbde
|
|
BLAKE2b-256 checksum How to use checksums |
7b81b3cf839d3c9cd6bd88c9eed798aacfd05c116e036212559b613ee6a4efe2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
e152a4b761898870a656550ddddced8b983d8da8403012308ff94c7c67d3a838
|
|
BLAKE2b-256 checksum How to use checksums |
3b48901ac0be7877bcc42d4816f2e4f181746329500b8f1ec27bbb31157217a5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / esmorph-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | esmorph-0.1.0-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 3.4 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
d712834fa9db5157a582e7a01c2a6c96bc6581a825137d4ed9cdfa6da7d2bd62
|
|
BLAKE2b-256 checksum How to use checksums |
441584f8948b8afaea93d5b1f96dff72055c09c9d44f0a2584f6dafb3afe4a55
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for esmorph 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.