Skip to main content

ruMorph

ruMorph

Russian Morphology - быстрый морфологический анализатор русского языка на Rust с API для Python

Документация · PyPI · crates.io · English

Версия Поддерживаемые версии Python Крейт Сборка Ruff Лицензия DOI


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

Авторы

Лицензия

Код распространяется под лицензией 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)

Source distribution for rumorph 0.3.0
File Size Uploaded Provenance
rumorph-0.3.0.tar.gz 6.9 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for rumorph 0.3.0
File
rumorph-0.3.0-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
rumorph-0.3.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
rumorph-0.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
rumorph-0.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
rumorph-0.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
rumorph-0.3.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details
rumorph-0.3.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
rumorph-0.3.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
rumorph-0.3.0-cp311-abi3-win_arm64.whl CPython 3.11 abi3 Windows ARM64 Details
rumorph-0.3.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
rumorph-0.3.0-cp311-abi3-musllinux_1_2_x86_64.whl CPython 3.11 abi3 Linux musl 1.2+ x86-64 Details
rumorph-0.3.0-cp311-abi3-musllinux_1_2_aarch64.whl CPython 3.11 abi3 Linux musl 1.2+ ARM64 Details
rumorph-0.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64 Details
rumorph-0.3.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details
rumorph-0.3.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
rumorph-0.3.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page