ruMorph
Russian Morphology - быстрый морфологический анализатор русского языка на Rust с API для Python
Документация · PyPI · crates.io · English
ruMorph - морфологический анализатор русского языка: ядро на Rust и API для Python. Для словоформы анализатор находит по словарю OpenCorpora варианты разбора - начальную форму (лемму), часть речи и признаки Universal Dependencies - упорядочивает их по вероятности и строит формы слова.
Разбор и лемматизация в 6-8 раз быстрее, чем в pymorphy3 с ускорением pymorphy3[fast], форма по признакам и согласование с количеством - в 16-19 раз; списки слов разбираются без GIL. Части речи, признаки и леммы следуют соглашениям трибанка SynTagRus, поэтому результат можно сравнивать с разметкой spaCy, Stanza и других инструментов на UD.
- Анализатор - разборы словоформы по убыванию вероятности, разбор списков слов и лемматизация без GIL, проверка словоформы по словарю
- Части речи и признаки UD - части речи, признаки и леммы в соглашениях SynTagRus; пометы OpenCorpora, у которых нет признака UD
- Токены вне словаря - числа, знаки, латиница, инициалы и сокращения по правилам
- Незнакомые слова - разборы по окончанию, слова через дефис и с приставками, формы угаданных слов
- Словоизменение - формы лексемы, форма по признакам UD, согласование с количеством
- Команда rumorph - разбор файлов и потоков: леммы, CoNLL-U, TSV и JSON Lines
- Переход с pymorphy - соответствие вызовов pymorphy2 и pymorphy3, частей речи и граммем
- Сравнение - точность и скорость в сравнении с pymorphy3, mystem, spaCy, Stanza и Slovnet, загрузка словаря и память
Установка
Требуется Python 3.11 или новее.
pip install rumorph
Или с помощью uv:
uv add rumorph
Колеса собираются для Linux (в том числе Alpine), macOS и Windows, включая Python 3.14t без GIL; Rust для установки не нужен, словарь входит в пакет. На других платформах pip соберет пакет из исходников - для этого нужен Rust 1.88 или новее. Подробнее - на странице Установка.
Для Rust - крейт rumorph со словарем (cargo add rumorph, документация - на docs.rs); команда rumorph без Python ставится через cargo install rumorph --features cli.
Быстрый старт
>>> from rumorph import Analyzer
>>> morph = Analyzer()
>>> morph.lemmatize("Мы стали друзьями в ковиде".split())
['мы', 'стать', 'друг', 'в', 'ковид']
>>> [(a.lemma, a.pos, a.feats.get("Case"), round(a.prob, 3)) for a in morph.analyze("стали")][:2]
[('стать', 'VERB', None, 0.988), ('сталь', 'NOUN', 'Gen', 0.005)]
>>> morph.analyze("кошка")[0].inflect(Case="Gen", Number="Plur")
'кошек'
>>> morph.analyze("рубль")[0].agree(5)
'рублей'
Анализатор достаточно создать один раз: при создании он загружает словарь, дальше им можно пользоваться во всей программе.
Возможности
Разбор словоформы
Метод analyze возвращает разборы словоформы по убыванию вероятности - объекты Analysis с леммой, частью речи, признаками UD, пометами словаря, вероятностью и источником разбора. Регистр для поиска не важен, но меняет доли имен собственных («шаров» - «шар», «Шаров» - фамилия), буква «е» может обозначать «ё». Разборы неизменяемы: их можно сравнивать, класть в множества и сохранять через pickle.
>>> from rumorph import Analyzer
>>> morph = Analyzer()
>>> morph.analyze("стали")[0]
Analysis(word='стали', lemma='стать', pos='VERB', feats='Aspect=Perf|Mood=Ind|Number=Plur|Tense=Past|VerbForm=Fin|Voice=Mid', labels='intr', prob=0.9877829877829878, source='dictionary')
>>> [len(analyses) for analyses in morph.analyze_many(["мама", "мыла", "раму"])]
[1, 4, 2]
>>> morph.is_known("Ежи"), morph.is_known("вайб")
(True, False)
Списки слов методы analyze_many и lemmatize разбирают без GIL, поэтому несколько потоков с одним анализатором работают параллельно; в Python 3.14t без GIL параллельно работают и analyze, inflect и agree. Анализатор и разборы сохраняются через pickle и работают с multiprocessing и joblib.
Подробнее - в документации: анализатор, разбор словоформы.
Части речи и признаки Universal Dependencies
Части речи и признаки следуют Universal Dependencies в соглашениях крупнейшего русского трибанка UD_Russian-SynTagRus. Отличия от частей речи OpenCorpora:
- «который», «этот», «свой», «весь», «такой» и другие местоименные прилагательные -
DET - «быть» и «бы» -
AUX - вводные слова «однако», «например», «конечно» -
ADV - «можно», «надо», «нельзя» -
VERBбез признаков - предлоги -
ADP, сочинительные союзы -CCONJ, подчинительные -SCONJ, частицы -PART
Признаки: падеж, число, род, одушевленность, лицо, время, вид, наклонение, залог, форма глагола, степень, краткая форма, тип имени собственного, сокращение, притяжательность, тип числительного и его запись, тип местоимения, возвратность, несклоняемость, отрицание. Леммы тоже следуют SynTagRus: «Ивановой» - «иванова», «важнейшей» - «важнейший», «денег» - «деньги». Граммемы OpenCorpora, для которых в UD нет признака, - стиль, переходность, второй предложный падеж и другие - лежат в пометах labels.
>>> from rumorph import Analyzer
>>> morph = Analyzer()
>>> words = ["который", "был", "конечно", "можно", "Ивановой", "денег"]
>>> [(analyses[0].lemma, analyses[0].pos) for analyses in morph.analyze_many(words)]
[('который', 'DET'), ('быть', 'AUX'), ('конечно', 'ADV'), ('можно', 'VERB'), ('иванова', 'PROPN'), ('деньги', 'NOUN')]
>>> lesu = morph.analyze("лесу")[0]
>>> lesu.feats["Case"], lesu.labels
('Loc', frozenset({'loc2'}))
Подробнее - в документации; соответствие граммем OpenCorpora признакам UD - на странице Переход с pymorphy.
Токены вне словаря
Числа, знаки, латиницу и сокращения анализатор разбирает по правилам, source у таких разборов - "rule":
- знаки препинания -
PUNCT, символы%,$,№и эмодзи -SYM - числа цифрами -
NUM; целое число может быть и порядковымADJ, у годов это первый разбор - числа с окончанием «2005-го», «5-ти» - порядковые
ADJс падежом или количественныеNUM, римские числа - порядковыеADJ - слова латиницей -
XсForeign=Yes - инициалы «А.» - имя, отчество или фамилия с
Abbr=Yes - сокращения с точкой «т.», «им.» - разборы словарного сокращения, аббревиатуры капсом «НКО» -
PROPNилиNOUNсAbbr=Yes - наречия «по-бурятски», «по-молодому» -
ADV - прочие токены «км/ч», «100%-ный» -
Xбез признаков, лемма - токен в нижнем регистре
Доли неоднозначных разборов взяты из частот в трибанках UD Taiga и GSD, доли имен собственных - с учетом регистра: «Земли» - прежде всего планета (PROPN), «земли» - NOUN.
>>> from rumorph import Analyzer
>>> morph = Analyzer()
>>> [(a.lemma, a.pos, a.feats["NumType"], round(a.prob, 2)) for a in morph.analyze("2026")]
[('2026', 'ADJ', 'Ord', 0.98), ('2026', 'NUM', 'Card', 0.02)]
>>> [(a.lemma, a.pos, a.feats["Case"]) for a in morph.analyze("2005-го")][:1]
[('2005-й', 'ADJ', 'Gen')]
>>> [(a.pos, a.feats, a.source) for a in morph.analyze("iPhone")]
[('X', {'Foreign': 'Yes'}, 'rule')]
Подробнее - в документации.
Незнакомые слова
Разборы слова кириллицей, которого нет в словаре, анализатор угадывает по окончанию: берет формы словарных слов с тем же окончанием - их часть речи, признаки и словоизменение. source у таких разборов - "guess".
- Слово в нижнем регистре угадывается как нарицательное, слово с заглавной буквы - в основном как имя собственное: фамилия, имя, топоним
- Слово через дефис разбирается по последней части: «крэш-тестов» - «крэш-тест», «Мак-Киннона» - «мак-киннон», а слово с протяжкой или заиканием - по словарному слову без них: «не-е-ет» - «нет», «с-спасибо» - «спасибо»
- Слово с известной приставкой - «эко», «анти», «супер», «микро» и другими - разбирается по словарному слову без нее: «экодомов» - «экодом»
- У угаданного разбора есть формы, и они сохраняют заглавные буквы: «Мак-Киннона» в дательном падеже - «Мак-Киннону»
- Слово, которое нужно разбирать точно, можно добавить по образцу - словарному слову, которое изменяется так же:
Analyzer(words={"зумер": "геймер"})
>>> from rumorph import Analyzer
>>> morph = Analyzer()
>>> [(a.lemma, a.pos, a.feats["Case"], a.source) for a in morph.analyze("чатботу")][:1]
[('чатбот', 'NOUN', 'Dat', 'guess')]
>>> guess = morph.analyze("Мартова")[0]
>>> guess.lemma, guess.pos, guess.feats["NameType"], guess.inflect(Case="Dat")
('мартов', 'PROPN', 'Sur', 'Мартову')
>>> morph.analyze("крэш-тестов")[0].lemma, morph.analyze("экодомов")[0].lemma
('крэш-тест', 'экодом')
>>> zoomers = Analyzer(words={"зумер": "геймер"})
>>> zoomers.analyze("зумерами")[0].lemma, zoomers.is_known("зумеры")
('зумер', True)
Подробнее - в документации.
Словоизменение
Каждый разбор знает свою лексему - все формы слова с той же леммой:
forms- формы лексемы в порядке словаряinflect- форма с заданными признаками UD; признаки, которые не названы, по возможности сохраняютсяagree- форма существительного, прилагательного или причастия, согласованная с количеством: «1 рубль», «2 рубля», «5 рублей», «2 суток»
Если у лексемы нет нужной формы, inflect и agree бросают FormNotFoundError, а на опечатку в признаке inflect бросает ValueError со списком допустимых значений.
>>> from rumorph import Analyzer
>>> morph = Analyzer()
>>> cat = morph.analyze("кошка")[0]
>>> [form.word for form in cat.forms()][:5]
['кошка', 'кошки', 'кошке', 'кошку', 'кошкой']
>>> cat.inflect(Case="Gen"), cat.inflect(Case="Gen", Number="Plur")
('кошки', 'кошек')
>>> verb = morph.analyze("читал")[0]
>>> verb.inflect(Gender="Fem"), verb.inflect(Tense="Pres", Person="3", Number="Plur")
('читала', 'читают')
>>> ruble = morph.analyze("рубль")[0]
>>> [f"{n} {ruble.agree(n)}" for n in (1, 2, 5, 21)]
['1 рубль', '2 рубля', '5 рублей', '21 рубль']
Подробнее - в документации.
Команда rumorph
Команда ставится вместе с пакетом и разбирает текст из файлов или стандартного ввода: леммы, CoNLL-U, TSV или JSON Lines со всеми разборами. На входе - текст, токены по одному в строке или CoNLL-U, в котором заполняются LEMMA, UPOS и FEATS.
$ echo "Мы стали друзьями в ковиде." | rumorph
мы стать друг в ковид .
$ rumorph --format conllu text.txt > text.conllu
Подробнее - в документации: параметры, форматы и коды выхода.
Переход с pymorphy
ruMorph работает с тем же словарем OpenCorpora, что pymorphy2 и pymorphy3, но API у него свое: части речи и признаки UD вместо граммем OpenCorpora, вероятность вместо score, словоформы строкой, исключения вместо None. Здесь morph - анализатор, p - разбор pymorphy, a - разбор ruMorph:
| pymorphy2, pymorphy3 | ruMorph |
|---|---|
MorphAnalyzer() |
Analyzer() |
morph.parse(word) |
morph.analyze(word) |
[morph.parse(w)[0].normal_form for w in words] |
morph.lemmatize(words) |
morph.word_is_known(word) |
morph.is_known(word) |
p.normal_form, p.tag.POS, p.score |
a.lemma, a.pos, a.prob |
p.tag.case, p.tag.number |
a.feats.get("Case"), a.feats.get("Number") |
p.lexeme |
a.forms() |
p.inflect({"gent", "plur"}).word |
a.inflect(Case="Gen", Number="Plur") |
p.make_agree_with_number(n).word |
a.agree(n) |
Подробнее - в документации: все вызовы, части речи и граммемы.
Сравнение
Доля слов, у которых верны часть речи и лемма первого разбора, % (тестовые части трибанков UD 2.18):
| Система | SynTagRus | Taiga | GSD | Токенов в секунду |
|---|---|---|---|---|
| ruMorph | 93,7 | 90,5 | 92,1 | 709 381 |
| pymorphy3 | 84,8 | 82,9 | 84,3 | 23 484 |
| mystem | 81,9 | 79,4 | 79,9 | 82 191 |
Теггер с контекстом Stanza точнее в признаках, но разбирает 2 738 токенов в секунду. На короткий текст вместе с загрузкой ruMorph отвечает за 5 мс против 0,2-2 с у теггеров, процессы делят словарь, и каждый следующий добавляет 1,2 МБ. Замер - Apple M3 Pro, Python 3.11.
Подробнее - в документации: теггеры с контекстом, график скорости от объема текста, операции в сравнении с pymorphy3, память и как это измерено.
Разработка
Проект использует uv для управления зависимостями, maturin для сборки модуля на Rust и ruff для линтинга и форматирования. Нужен Rust 1.88 или новее.
git clone https://github.com/SergeyShk/ruMorph.git
cd ruMorph
make deps # создать окружение, установить зависимости и собрать модуль на Rust
make dictionary # собрать словарь из pymorphy3-dicts-ru и трибанков UD
make test # запустить тесты Python, примеры из докстрингов (doctest) и тесты Rust
make lint # ruff, mypy, rustfmt и clippy
Полный список команд - make help. Документация двуязычная: русские страницы docs/*.md, английские - docs/*.en.md рядом с ними; при правке страницы обновляйте обе версии.
Перед отправкой изменений стоит установить хуки, которые прогонят линтеры на коммите и тесты на пуше:
uv run pre-commit install
Участие в проекте
Баг-репорты, идеи и пул-реквесты приветствуются - issues открыты. Как устроен процесс и что проверить перед отправкой пул-реквеста - в CONTRIBUTING.md; правила общения - в кодексе поведения.
Структура проекта
- crates/rumorph - ядро анализатора на Rust: формат словаря, сборка, разбор и словоизменение
- crates/rumorph-build - сборка словаря из выгрузки pymorphy3-dicts-ru, перевод тегов OpenCorpora в UD и частоты разборов по трибанкам UD
- crates/rumorph-dict-ru - крейт со словарем для
rumorphна crates.io - crates/rumorph-py - модуль Python
rumorph._rumorphна PyO3 - python/rumorph - пакет Python
- scripts - выгрузка словаря pymorphy3-dicts-ru и счетчиков трибанков UD, проверка установленного пакета перед публикацией и сравнение с другими анализаторами
- docs - документация MkDocs на русском и английском
- tests - тесты пакета Python
Авторы
- Шкарин Сергей (kouki.sergey@gmail.com)
Лицензия
Код распространяется под лицензией MIT. Словарь в пакете собран из словаря OpenCorpora с частотами по трибанкам UD_Russian-Taiga и UD_Russian-GSD и распространяется по лицензии CC BY-SA 4.0 (LICENSE-DICTIONARY.txt).
Цитирование
Если вы используете ruMorph в исследованиях или программах, пожалуйста, цитируйте библиотеку по следующей записи BibTeX - это помогает развитию и поддержке проекта. Те же метаданные лежат в CITATION.cff - GitHub показывает их по кнопке «Cite this repository». Concept DOI 10.5281/zenodo.23520738 на Zenodo указывает на все версии библиотеки; DOI конкретной версии - на странице релиза.
@software{ruMorph,
author = {Sergey Shkarin},
title = {{ruMorph, a fast morphological analyzer for Russian}},
year = 2026,
doi = {10.5281/zenodo.23520738},
url = {https://github.com/SergeyShk/ruMorph}
}
Metadata
Release files for rumorph 0.3.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 | |
|---|---|---|---|---|
| rumorph-0.3.0.tar.gz | 6.9 MB | Without provenance | Details |
Built distributions (wheels)
Total release size: 119.3 MB
Release files / rumorph-0.3.0.tar.gz
| Download URL | rumorph-0.3.0.tar.gz |
|---|---|
| Size | 6.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dd7c5d17d61d28af1b7ad7af259a2ca5f23d16ad10054e7a9977818484959289
|
|
BLAKE2b-256 checksum How to use checksums |
b0058e78fc5dd1742fa36208bd2fd92609ccd441678b584edf3d0343aec4185e
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-win_arm64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
f2f775ce523e09bde51d3569d5a210c12d840901f6668c24df3ac6c30bf676e0
|
|
BLAKE2b-256 checksum How to use checksums |
e5b9944e1120b0ce79352f8d1df3f0ac7064b6eee7578344b8c663ca1e2ef4e3
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-win_amd64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b7d99ce46f1b33e463078208bf2d8127b0f1ff00faf16e5faefba4e552263afc
|
|
BLAKE2b-256 checksum How to use checksums |
b3b2ba0a10268f34f720a68a69167296ddd8ff2778d27fa480a956dff7fa43bd
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 7.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 |
|
SHA-256 checksum How to use checksums |
202ba16f7cedea0e2cf4849c183bf80e8240c1357a8f735263c0a964f381553d
|
|
BLAKE2b-256 checksum How to use checksums |
6206fa4f2b01d5b960ac93ecc831b66b6bd5b5c5b00fc5a76cb4424171c1e32e
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 7.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 |
|
SHA-256 checksum How to use checksums |
73525aabb3aa73bd6528102c4fad8867710c5fcc3ae24ee2b7ca875b28841c29
|
|
BLAKE2b-256 checksum How to use checksums |
91590e536aa5b8a528458223850733fdb255300930875486354851e2eea25d4b
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
e2d1d1e3d07c5806e0b9098b9a03bad897069a033b2a2bad2262b127920a8d1a
|
|
BLAKE2b-256 checksum How to use checksums |
d589d31fbf9b5b6d0d53fe34ff63aa31dfb431867cd8542c88cd0761f3016263
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
f9d4925bbfffd7b02a3104a2738faf0eb76c1f4fd43642609968f336619b479c
|
|
BLAKE2b-256 checksum How to use checksums |
5611085abf483869b0dd9a157a91a62ae1c88589dc9cf7cbd719a6144744d7ad
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
36373e592713b63a3635a6acd76b376d6ff1e1b761b3a18c28dd7c4d089d7c71
|
|
BLAKE2b-256 checksum How to use checksums |
fbed35442263f3901e784d733aac207851d2969eed594c0a85325a3cbca1acc0
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | rumorph-0.3.0-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
4b6113ff8c024630f8a84ae7945efea7020f56c785c9d5666203ee1d234fcaa2
|
|
BLAKE2b-256 checksum How to use checksums |
f0dd4364e2d49811af3ae1c630cf1b12ba0b4bd53af3af9743017ffc38ba1e16
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-win_arm64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-win_arm64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.11 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
c27acf10b892bb074108f0bc0d04d34ea4e2c83682cf6df2eb28ec8c0381dc98
|
|
BLAKE2b-256 checksum How to use checksums |
94b6c1d629b6cc8b73b42fce567585cf69152a58c42099413a022fa0817cd148
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-win_amd64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 6.9 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
db0a1b15c109b71fe507c3a75f91da75b7749e195be5c56f9e6a7f0d0f310a7f
|
|
BLAKE2b-256 checksum How to use checksums |
1507f9388a2077099b3ecd400f9e4799773a1988b0a88c3430f30a49c57c9fe1
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-musllinux_1_2_x86_64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-musllinux_1_2_x86_64.whl |
|---|---|
| Size | 7.2 MB |
| Tags | CPython 3.11 Linux musl 1.2+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e672154444d8ca0017b740bf4e60459dafdc03189ee08dc57c80bb7e87914556
|
|
BLAKE2b-256 checksum How to use checksums |
e75b80682656242f518d2e3b1ca27757585544783f5b0222867506d5d4566df1
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-musllinux_1_2_aarch64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-musllinux_1_2_aarch64.whl |
|---|---|
| Size | 7.2 MB |
| Tags | CPython 3.11 Linux musl 1.2+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
c74038aae60956eda838611c2ba0efc7757888d3fc2202bf27b87739ca716373
|
|
BLAKE2b-256 checksum How to use checksums |
ed4eef5e9dc69a41dbcc7627f75240e9ebfb5eac8e66f63fa3865a39eea39e1e
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1d845a0119c4aac76e5986695f9f6f4fbbd59535143a524e8cd6509060e22432
|
|
BLAKE2b-256 checksum How to use checksums |
35b7ca8bdb3665960fcef10c557bada8faf61ecaedc029cf4453efddf51cc4d1
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
8b283652505449789515c19282f78c422d02603d3fb35813ec565eb02560abbe
|
|
BLAKE2b-256 checksum How to use checksums |
8713c5f520f41a32cab727d4a724f499b5ab6fc8a996f96f3bba82d5c0be3d89
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a812e9bd86999d15da85b71aa149a064c622e26ae6244ae4b52f60663667af7c
|
|
BLAKE2b-256 checksum How to use checksums |
c354c01494916b60a2bc1cfb75d75f16fd434df82a708df3fca98711697767a5
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / rumorph-0.3.0-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | rumorph-0.3.0-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 7.0 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
5cb44df6e8272d20c19f360ad9e18c575b633524ad6a9fe5f5644a9c4345122f
|
|
BLAKE2b-256 checksum How to use checksums |
ffbfcb2643e548c3f36d9a53da1519b339c9ce46c32ef197243520c4f65767d2
|
| 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":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for rumorph 0.3.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.