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-18 раз; списки слов разбираются без GIL. Части речи, признаки и леммы следуют руководству UD, а где оно молчит - соглашениям трибанка SynTagRus, поэтому результат можно сравнивать с разметкой spaCy, Stanza и других инструментов на UD.

  • Анализатор - разборы словоформы по убыванию вероятности, разбор списков слов и лемматизация без GIL, проверка словоформы по словарю
  • Разбор предложения - выбор разбора по соседним словам контекстной моделью: часть речи, лемма и признаки верны у 82-94 % слов против 71-82 % без контекста
  • Части речи и признаки UD - части речи, признаки и леммы по руководству UD и соглашениям SynTagRus; пометы OpenCorpora, у которых нет признака UD
  • Токены вне словаря - числа, знаки, латиница, инициалы и сокращения по правилам
  • Незнакомые слова - разборы по окончанию, слова через дефис и с приставками, формы угаданных слов
  • Словоизменение - формы лексемы, форма по признакам UD, согласование с количеством
  • Команда rumorph - разбор файлов и потоков: леммы, CoNLL-U, TSV и JSON Lines
  • spaCy - компонент конвейера spaCy вместо теггера, морфологизатора и лемматизатора
  • Переход с 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=Act', 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.

Подробнее - в документации: анализатор, разбор словоформы.

Разбор предложения

Метод analyze_sentence упорядочивает разборы слов предложения с учетом соседних слов: первым идет разбор, который выбрала контекстная модель, а вероятность - ее оценка в этом предложении. Модель (BiLSTM, 0,9 МБ) обучена на трибанках UD_Russian-Taiga, UD_Russian-GSD и корпусе OpenCorpora и входит в словарь пакета; слова - токены одного предложения.

>>> words = ["Я", "читаю", "книги"]
>>> [analyses[0].feats.get("Case") for analyses in morph.analyze_many(words)]
['Nom', None, 'Gen']
>>> [analyses[0].feats.get("Case") for analyses in morph.analyze_sentence(words)]
['Nom', None, 'Acc']
>>> morph.analyze_sentence(["Мост", "сделан", "из", "стали"])[3][0].lemma
'сталь'
Части речи и признаки 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

Подробнее - в документации: параметры, форматы и коды выхода.

spaCy

Компонент rumorph (pip install "rumorph[spacy]") размечает токены конвейера spaCy частью речи, признаками UD и леммой по разбору с контекстом. В моделях ru_core_news_* он заменяет морфологизатор и лемматизатор: на SynTagRus test часть речи, лемма и признаки вместе верны у 93,7 % слов против 82,0 % у ru_core_news_sm, а конвейер работает быстрее.

import spacy

nlp = spacy.load("ru_core_news_sm", exclude=["morphologizer", "lemmatizer"])
nlp.add_pipe("rumorph", after="parser")
doc = nlp("Мост сделан из стали.")

Подробнее - в документации: предложения, параметры и разбор ruMorph токена.

Переход с 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 94,1 90,7 92,0 639 969
pymorphy3 84,8 82,9 84,3 23 263
mystem 81,9 79,4 79,9 81 138

С контекстом (analyze_sentence) ruMorph по части речи, лемме и признакам вместе точнее всех теггеров на Taiga и GSD (90,2 и 81,6 % слов против 85,6 и 80,3 % у Stanza), а на SynTagRus идет вровень со Stanza (93,7 и 93,5 %), хотя Stanza обучена на SynTagRus. При этом он разбирает 109 тыс. токенов в секунду против 2 858 у Stanza. На короткий текст вместе с загрузкой ruMorph отвечает за 6 мс против 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, обучение контекстной модели, проверка установленного пакета перед публикацией и сравнение с другими анализаторами
  • data - веса контекстной модели, которые сборщик вшивает в словарь
  • docs - документация MkDocs на русском и английском
  • tests - тесты пакета Python

Авторы

Лицензия

Код распространяется под лицензией MIT. Словарь в пакете собран из словаря OpenCorpora с частотами и контекстной моделью по трибанкам UD_Russian-Taiga и UD_Russian-GSD и корпусу OpenCorpora и распространяется по лицензии 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.4.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.4.0
File Size Uploaded Provenance
rumorph-0.4.0.tar.gz 8.5 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for rumorph 0.4.0
File
rumorph-0.4.0-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
rumorph-0.4.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
rumorph-0.4.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.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
rumorph-0.4.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.4.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.4.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
rumorph-0.4.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.4.0-cp311-abi3-win_arm64.whl CPython 3.11 abi3 Windows ARM64 Details
rumorph-0.4.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details
rumorph-0.4.0-cp311-abi3-musllinux_1_2_x86_64.whl CPython 3.11 abi3 Linux musl 1.2+ x86-64 Details
rumorph-0.4.0-cp311-abi3-musllinux_1_2_aarch64.whl CPython 3.11 abi3 Linux musl 1.2+ ARM64 Details
rumorph-0.4.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.4.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 abi3 Linux glibc 2.17+ ARM64 Details
rumorph-0.4.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details
rumorph-0.4.0-cp311-abi3-macosx_10_12_x86_64.whl CPython 3.11 abi3 macOS 10.12+ x86-64 Details

Total release size: 134.5 MB

Release files / rumorph-0.4.0.tar.gz

Download URL rumorph-0.4.0.tar.gz
Size 8.5 MB
Tags Source
SHA-256 checksum
How to use checksums
aa6b4e4d39df3ef5d64177c5fc755fab59f8c175e24260e85b775235b476ec03
BLAKE2b-256 checksum
How to use checksums
8e73c8ff66cb1f6d702ed6bd6cc743ec531f5099e97ddb02c72acf1e204fac6f
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.4.0-cp314-cp314t-win_arm64.whl

Download URL rumorph-0.4.0-cp314-cp314t-win_arm64.whl
Size 7.7 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
a9b4c0000568f1e1ffc3fe3d09a71991c21bece78fb830a02958fb1c0c44299f
BLAKE2b-256 checksum
How to use checksums
a5a5ec9425955b9c4ec55e49bb91559d3d1a7ee4017ae2a14b258ef9f7cbbd38
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.4.0-cp314-cp314t-win_amd64.whl

Download URL rumorph-0.4.0-cp314-cp314t-win_amd64.whl
Size 7.8 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
1ba60d6ae3c4dca9296dbf431d1fa6e49eb23d2762816820cf7e284b813e882e
BLAKE2b-256 checksum
How to use checksums
7e0950169770611087af159a980412cc9a89e24abcf3d42a8da2c5db25478807
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.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL rumorph-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 8.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
b4b13048cebfc92ffb52dd7b98b94e4bce8944e42d316124a9e97d6e3c3ff369
BLAKE2b-256 checksum
How to use checksums
6e7ff4823d4ca44268aa6663adfe8ad43eba7a126a491cfd308e3607950a4843
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.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL rumorph-0.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 8.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
071d9e1b5d807660786fce5a977a1e8d684e5797946ef67411f7bec95dc8f483
BLAKE2b-256 checksum
How to use checksums
60d835d69a9f29f1fb92b698f8a7e8604fbaecc9c5772fec780d0967527f8316
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.4.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL rumorph-0.4.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 7.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
f61f552a94342bdae51c579b0607f070854a5571f89ab30b27b81e5577278c63
BLAKE2b-256 checksum
How to use checksums
b540acf8c90531179364b3f9b6e93114fad731c7ba041f05c1f7fc57b5218c9e
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.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL rumorph-0.4.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 7.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
d263d3cd0d4208202eaed689f64f7887892cac2e6109b3d13ee29884995eda63
BLAKE2b-256 checksum
How to use checksums
24286b9834b512754ae74105129d5bc581d9769468205fc8a56879aa6c9c2a5a
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.4.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL rumorph-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 7.8 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0ccbe9ff181e2b9f86b640ec098322de47907a9eedd38618d1de026216078f60
BLAKE2b-256 checksum
How to use checksums
7a83cb0cce8e85f96151ae3b9036e0d433d3aba8e80b229f4f4f0de7b7785ce6
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.4.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL rumorph-0.4.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 7.9 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
26a234ecce44f88f2389f6c6d42347eef3bd1bf176bd55fd1ccfc9e20f0fdfc5
BLAKE2b-256 checksum
How to use checksums
e0c0f88298f1009f5f7f8732cb4b03b38506505d77948f5d3237ed8c5204d3c1
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.4.0-cp311-abi3-win_arm64.whl

Download URL rumorph-0.4.0-cp311-abi3-win_arm64.whl
Size 7.7 MB
Tags CPython 3.11 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
65c7f7b4ef242ecc172a3ca567570fcb764ccb6d47d51eee614bbad733248a86
BLAKE2b-256 checksum
How to use checksums
a57f500f4942064f211fb45a79ed2e3c9e256f8849b8185b2c8cf21aee5a02f4
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.4.0-cp311-abi3-win_amd64.whl

Download URL rumorph-0.4.0-cp311-abi3-win_amd64.whl
Size 7.8 MB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
5cfc34b57200ee88e5ced6f2e517ddd40db5d6cff418875f12ab3c7c87114c2c
BLAKE2b-256 checksum
How to use checksums
9126698bc7df22c5fc04d4580583a06411f24e4c86b492ff10985757ff341594
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.4.0-cp311-abi3-musllinux_1_2_x86_64.whl

Download URL rumorph-0.4.0-cp311-abi3-musllinux_1_2_x86_64.whl
Size 8.1 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
26cb1e56993d56c0b8749efe665971f934e7609e791e852c37233dbe11250d32
BLAKE2b-256 checksum
How to use checksums
5ac4ea02c697fd9cb8f5446796f02904f3cc4827fb22f70c43d570f14ea937d6
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.4.0-cp311-abi3-musllinux_1_2_aarch64.whl

Download URL rumorph-0.4.0-cp311-abi3-musllinux_1_2_aarch64.whl
Size 8.0 MB
Tags CPython 3.11 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
863c65a8130c5a8b06ca6da1a027c0ab13f2f01997bddbb7728c7bebb3ce6a68
BLAKE2b-256 checksum
How to use checksums
0bf5257ffc97134a66679d9be31437b7953360549365e5b28e67ed73e4e27118
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.4.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL rumorph-0.4.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 7.9 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
8a091e33e533fad098066379377eff305f22d88c10afd7649fdbf337361a2988
BLAKE2b-256 checksum
How to use checksums
47b0fa2ec69de578ac266bf3fa00cf82fd1e9d27eb9b9280c317dee0c3216fa3
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.4.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL rumorph-0.4.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 7.9 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
51853a2665d1fc8b7360110aab22ff2e01e947456fbd1bf3c61e2d353c8f586a
BLAKE2b-256 checksum
How to use checksums
c9d16373a313eab66ebf02fc8b0d11fe037d7aa91ddcb42ef2cec62b362b6b67
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.4.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL rumorph-0.4.0-cp311-abi3-macosx_11_0_arm64.whl
Size 7.8 MB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
836750e66c1ca4bcc94bc34ebf0c5b6bb28efc0ad3c1f32ca386f6ee938dc40f
BLAKE2b-256 checksum
How to use checksums
85d647cf725afb4b4b27e16a0267535956dc39789f077a83aa2331a339bf0973
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.4.0-cp311-abi3-macosx_10_12_x86_64.whl

Download URL rumorph-0.4.0-cp311-abi3-macosx_10_12_x86_64.whl
Size 7.9 MB
Tags CPython 3.11 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
8d1b48e25a215feef49efad3fc350c701eae2a0babf433bfd60ae509a8f87bf6
BLAKE2b-256 checksum
How to use checksums
4992d872bb21cc1c168c0dcf4b1e8cee785d7675a97baf48d9b4546426b498e6
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.4.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