Skip to main content

English

Module converting Arabic numerals to Greek and Roman numbers

Version: 1.2.0
Supported Python: 3.11-3.14 stable; 3.15.0rc2 provisionally tested
Repository: GitHub - GreekRomanNumerical
License: Apache 2.0

Description

The library converts Arabic numbers, such as 1234, to Roman equivalents, such as MCCXXXIV, or Greek — Α_ΣΛΔ.

This module can also output Greek numbers in different formats. For example, the number 20005003001 can be represented as Κ___Ε__Γ_Α or Κ~Ε~Γ~Α. In addition, it is possible to output the text name of the digits, for example, Kappa macron Epsilon macron Gamma macron Alpha, or output them in lowercase.

Finite float fractions are encoded digit by digit, with numeral tokens separated by colons. For example, 1.25 becomes I.(II:V) or α.(β:ε). A zero digit is written as _ for Roman numerals and classic Greek, or ~ for positional Greek; thus 1.05 becomes I.(_:V), α.(_:ε), or α.(~:ε).

Installation

Install the package using pip:

pip install GreekRomanUtils

Detailed usage

For step-by-step examples of the converters, number formats, arithmetic, and backend selection, see the detailed usage guide.

Hybrid backend (Python + Rust)

Starting from this migration stage, the public API stays unchanged while internal conversion logic can run on a Rust backend.

  • Default behavior: try Rust backend first, fallback to Python automatically.
  • Force Python backend:
GREEKROMAN_FORCE_PYTHON=1

The Rust bridge preserves Python's arbitrary-precision integers. The core library applies configured input, output, and Greek-group limits to bound resource use.

Development environment and quality checks

Requirements: Python 3.11 or newer, uv, and rustup. Windows builds also require the MSVC C++ Build Tools.

The Rust core is included as the greekromannumerical-core Git submodule. Clone this repository with submodules, or initialize them in an existing checkout:

git clone --recurse-submodules git@github.com:PavelKotDRM/GreekRomanNumerical.git
# Existing checkout:
git submodule update --init --recursive

The core repository is accessed over SSH. GitHub Actions also needs a CORE_SUBMODULE_TOKEN repository secret: a read-only token with Contents: read access to both this repository and the core repository.

Create the environment and install the project with its Rust extension:

rustup toolchain install stable
uv python install 3.11
uv sync --locked --group dev --python 3.11

Install the optional notebook tools only when needed:

uv sync --locked --group dev --group notebook --python 3.11

Run the full test suite with the Python backend:

GREEKROMAN_FORCE_PYTHON=1 uv run pytest -v

On Windows PowerShell:

$env:GREEKROMAN_FORCE_PYTHON = "1"
uv run pytest -v
Remove-Item Env:GREEKROMAN_FORCE_PYTHON

Rebuild the Rust extension after Rust changes and test the hybrid backend:

uv run maturin develop --manifest-path rust/Cargo.toml
uv run pytest -v

Run Python lint and type checks:

uv run ruff check --exclude tests/
uv run ty check --exclude tests/

Check Rust formatting, compile the Rust crate, and build the package:

cargo fmt --manifest-path rust/Cargo.toml --check
cargo test --locked --manifest-path rust/Cargo.toml
uv build

Rust behavior is covered by native unit tests and Python backend-equivalence tests.

Run the opt-in performance benchmarks (the Rust extension must be built):

uv sync --locked --group dev --group performance --python 3.11
uv run maturin develop --manifest-path rust/Cargo.toml
uv run --group performance pytest benchmarks/test_backend_performance.py --benchmark-only --benchmark-sort=mean

The benchmark checks result equivalence before timing Roman, classic Greek, and positional Greek conversions in both backends. It reports measurements without enforcing a speed threshold because timings depend on the machine.

The structure of the project

There are two main classes: GreekConvert and RomanConvert. They implement the logic of converting to the corresponding numbers. There are also classes GreekAlphabet and RomanNumberAlphabet, which are used to store lists and dictionaries.
There are proprietary data types GreekNumber and RomanNumber for working with Greek and Roman numbers, which will allow you to perform basic mathematical operations with them.

Main functions

For "GreekConvert":

  • change_capital — A flag that controls the conversion of characters to upper or lower case.
  • change_positional — Change the positional mode for conversion.
  • convert — The function of converting an Arabic number to a Greek one, returns GreekNumber object. For example, the number 20005003001 is converted to Κ___Ε__Γ_Α (non-positional mode) or to Κ~Ε~Γ~Α (positional mode).
  • convert_to_arabic — A function for converting a Greek number to an Arabic one.
  • unicode_to_name — The function converts a Unicode character into its name.
  • name_to_unicode — The reverse operation for unicode_to_name.

The "GreekNumber" class:

  • set_number — Set a new value.
  • set_positional — Set the positional mode flag (affects display format: underscore _ for non-positional, tilde ~ for positional).
  • set_capital — Set the upper case flag.
  • get_number — Get the current number.
  • get_positional — Get the positional flag value.
  • get_capital — Get the capital flag value.
  • get_str — Get the textual representation of the number (e.g., "alpha beta gamma").
  • And basic mathematical operations (+, -, *, /, //, %, **, ==, !=, <, <=, >, >=).

For "RomanConvert":

  • convert — The method converts an Arabic number to a Roman number, returns RomanNumber object.
  • convert_to_arabic — The reverse method for convert.

For "RomanNumber":

  • set_number — Set a new value.
  • get_number — Get the current number.
  • get_value — Get the string representation of the Roman numeral.
  • And basic mathematical operations (+, -, *, /, //, %, **, ==, !=, <, <=, >, >=).

Ru

Модуль преобразование арабских цифр в греческие и римские числа

Версия: 1.2.0
Поддерживаемые версии Python: 3.11-3.14 stable; 3.15.0rc2 проверяется предварительно
Репозиторий: GitHub - GreekRomanNumerical
Лицензия: Apache 2.0

Описание

Библиотека преобразует арабские числа, такие как 1234, в римские эквиваленты, например, MCCXXXIV, или греческие — Α_ΣΛΔ.

Также этот модуль может выводить греческие цифры в разных форматах. Например, число 20005003001 можно представить как Κ___Ε__Γ_Α или Κ~Ε~Γ~Α. Кроме того, есть возможность выводить текстовое название цифр, например, Kappa macron Epsilon macron Gamma macron Alpha, или выводить их в нижнем регистре.

Дробная часть конечного float кодируется по цифрам, разделённым двоеточиями. Например, 1.25 преобразуется в I.(II:V) или α.(β:ε). Нулевой разряд записывается как _ для римского и классического греческого форматов, или ~ для позиционного греческого; поэтому 1.05 выглядит как I.(_:V), α.(_:ε) или α.(~:ε).

Установка

Установите пакет с помощью pip:

pip install GreekRomanUtils

Подробная документация

Подробные примеры конвертации, форматов чисел, арифметики и настройки backend собраны в руководстве на русском языке. См. также английскую версию.

Гибридный backend (Python + Rust)

На этапе миграции публичный API не меняется, но внутренняя логика конвертации может выполняться через Rust backend.

  • Поведение по умолчанию: сначала попытка Rust backend, при недоступности автоматический fallback на Python.
  • Принудительное отключение Rust backend:
GREEKROMAN_FORCE_PYTHON=1

Rust-мост сохраняет произвольную точность целых Python. Core-библиотека ограничивает размер входа и результата, а также число греческих разрядов, чтобы контролировать расход ресурсов.

Настройка среды и проверки качества

Требования: Python 3.11 или новее, uv и rustup. Для сборки в Windows также нужны MSVC C++ Build Tools.

Rust core подключён как Git submodule greekromannumerical-core. Клонируйте репозиторий вместе с submodule или инициализируйте его в уже существующей копии:

git clone --recurse-submodules git@github.com:PavelKotDRM/GreekRomanNumerical.git
# Для уже клонированного репозитория:
git submodule update --init --recursive

Core-репозиторий доступен по SSH. Для GitHub Actions также задайте секрет репозитория CORE_SUBMODULE_TOKEN: токен только для чтения с правом Contents: read для обоих репозиториев.

Создание окружения и установка проекта вместе с Rust-расширением:

rustup toolchain install stable
uv python install 3.11
uv sync --locked --group dev --python 3.11

Дополнительные инструменты для ноутбуков устанавливаются отдельно:

uv sync --locked --group dev --group notebook --python 3.11

Полный набор тестов с Python backend:

$env:GREEKROMAN_FORCE_PYTHON = "1"
uv run pytest -v
Remove-Item Env:GREEKROMAN_FORCE_PYTHON

После изменений Rust пересоберите расширение и запустите тесты в hybrid-режиме:

uv run maturin develop --manifest-path rust/Cargo.toml
uv run pytest -v

Проверки Python-кода:

uv run ruff check --exclude tests/
uv run ty check --exclude tests/

Проверки Rust и сборка пакета:

cargo fmt --manifest-path rust/Cargo.toml --check
cargo test --locked --manifest-path rust/Cargo.toml
uv build

Поведение Rust backend покрывается собственными unit-тестами и Python-тестами эквивалентности backend-ов.

Запуск opt-in тестов производительности (Rust-расширение должно быть собрано):

uv sync --locked --group dev --group performance --python 3.11
uv run maturin develop --manifest-path rust/Cargo.toml
uv run --group performance pytest benchmarks/test_backend_performance.py --benchmark-only --benchmark-sort=mean

Перед замером тесты проверяют равенство результатов и затем измеряют Roman, classic Greek и positional Greek конвертации в обоих backend’ах. Порог скорости не задан: время зависит от машины и окружения.

Структура пректа

Есть два основных класса: GreekConvert и RomanConvert. Они реализуют логику преобразования в соответствующие числа. Также есть классы GreekAlphabet и RomanNumberAlphabet, которые используются для хранения списков и словарей.
Есть собственные типы данных GreekNumber и RomanNumber для работы с греческими и римскими числами, что позволит выполнять с ними базовые математические операции.

Основные функции

Для «GreekConvert»:

  • change_capital — Флаг, управляющий преобразованием символов в верхний или нижний регистр.
  • change_positional — Изменить режим позиционного преобразования.
  • convert — Функция преобразования арабского числа в греческое, возвращает объект GreekNumber. Например, число 20005003001 преобразуется в Κ___Ε__Γ_Α (непозиционный режим) или в Κ~Ε~Γ~Α (позиционный режим).
  • convert_to_arabic — Функция преобразования греческого числа в арабское.
  • unicode_to_name — Функция преобразует символ Unicode в его название.
  • name_to_unicode — Обратная операция для unicode_to_name.

Класс «GreekNumber»:

  • set_number — Установить новое значение.
  • set_positional — Установить флаг позиционного режима (влияет на формат отображения: подчеркивание _ для непозиционного, тильда ~ для позиционного).
  • set_capital — Установить флаг верхнего регистра.
  • get_number — Получить текущее число.
  • get_positional — Получить значение флага позиционности.
  • get_capital — Получить значение флага регистра.
  • get_str — Получить текстовое представление числа (например, "alpha beta gamma").
  • И базовые математические операции (+, -, *, /, //, %, **, ==, !=, <, <=, >, >=).

Для «RomanConvert»:

  • convert — Метод преобразует арабское число в римское, возвращает объект RomanNumber.
  • convert_to_arabic — Обратный метод для convert.

Для «RomanNumber»:

  • set_number — Установить новое значение.
  • get_number — Получить текущее число.
  • get_value — Получить строковое представление римского числа.
  • И базовые математические операции (+, -, *, /, //, %, **, ==, !=, <, <=, >, >=).

Схема пректа
ScheemProject

License

Apache License 2.0

Metadata

Release files for GreekRomanUtils 1.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 GreekRomanUtils 1.3.0
File Size Uploaded Provenance Actions
greekromanutils-1.3.0.tar.gz 45.6 kB Without provenance Details for greekromanutils-1.3.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for GreekRomanUtils 1.3.0
File Interpreter ABI Platform Actions
greekromanutils-1.3.0-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details for greekromanutils-1.3.0-cp311-abi3-win_amd64.whl
greekromanutils-1.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 abi3 Linux glibc 2.17+ x86-64 Details for greekromanutils-1.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
greekromanutils-1.3.0-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details for greekromanutils-1.3.0-cp311-abi3-macosx_11_0_arm64.whl

Total release size: 996.0 kB

Release files / greekromanutils-1.3.0.tar.gz

Download URL greekromanutils-1.3.0.tar.gz
Size 45.6 kB
Tags Source
SHA-256 checksum
How to use checksums
7e7e9232dfb25a47a345a25a9e1d431d1dde290fda072b016fcb7bad2c82dcdb
BLAKE2b-256 checksum
How to use checksums
bf1f6c9c16e318ff5f618179a481a9c387e8280a64779a0e242a9e664caa23a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / greekromanutils-1.3.0-cp311-abi3-win_amd64.whl

Download URL greekromanutils-1.3.0-cp311-abi3-win_amd64.whl
Size 236.5 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
e54a256a31d1381eb5a6b51e745078444aad3536d2d112191e23b6c6f36e71bb
BLAKE2b-256 checksum
How to use checksums
1e055f17fb68d2b56c5b47c02082084429a96fe206fe7e7deab3f5c2592e1929
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / greekromanutils-1.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL greekromanutils-1.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 376.4 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
ec32b5600dd1e4976e5b97557fcb9f499d602d198dc69e8aada98efc4135c5b6
BLAKE2b-256 checksum
How to use checksums
ebb1c0d7c6f8458b74eb45e158cc3247933f4ec221eabcd4e7e52aa1861dbcb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / greekromanutils-1.3.0-cp311-abi3-macosx_11_0_arm64.whl

Download URL greekromanutils-1.3.0-cp311-abi3-macosx_11_0_arm64.whl
Size 337.4 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9cd28b349b4ca9273324e608e09d28260c4e318e0605db89213602b018f8a3ad
BLAKE2b-256 checksum
How to use checksums
7eabf5eb168e461dfa82e5320dbd2bcfaa9ed792831b4a8377a9cd9459332a34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Security for GreekRomanUtils 1.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