Skip to main content

RomanPy

release pypi develop master gitlab github

RomanPy Logo

RomanPy is a Python library and CLI for converting decimal numbers to Roman numerals. It provides:

  • ASCII or Unicode output (with full support for Unicode numeral symbols)
  • Upper- and lowercase variants
  • Configurable numeral variants (subtractive, extended, apostrophus, medieval, zero, or custom mappings)
  • Arithmetic operations (+, -, *, //) between Roman numerals and integers
  • Equality and comparison with ints and strings

Licensed under the AGPLv3.0.

Installation

RomanPy is available on PyPI and can be installed using pip:

pip install RomanPy

Alternatively, you can pull the repository and install it straight from the source:

git clone git@scm.parcifal.dev:parcifal/RomanPy.git
cd RomanPy
pip install .

Usage (API)

Basic Conversion

from roman import roman

print(roman(207))  # CCVII

Encoding and Case Variants

n = roman(1776)

print(n.encode("ascii").upper())   # MDCCLXXVI
print(n.encode("ascii").lower())   # mdcclxxvi
print(n.encode("unicode").upper()) # ⅯⅮⅭⅭⅬⅩⅩⅥ
print(n.encode("unicode").lower()) # ⅿⅾⅽⅽⅼⅹⅹⅵ

Arithmetic with Roman Numerals

Roman numerals can be added, subtracted, multiplied, or divided with
other Roman numerals or integers:

print(roman(100) + roman(60))   # CLX
print(roman(45) - roman(7))     # XXXVIII
print(roman(533) * 2)           # MLXVI
print(roman(2460) // 10)        # CCXLVI

# mix with ints
print(100 + roman(60))          # CLX
print(roman(1954) == "MCMLIV")  # True

Custom Variants

You can extend or override numeral variants:

from roman.roman import VARIANT_ZERO

n = roman(0).extend_variant(VARIANT_ZERO)
print(n)  # N

Built-in variants include:

  • VARIANT_BASE (I, V, X, …)
  • VARIANT_SUBTRACTIVE (IV, IX, XL, …)
  • VARIANT_SUBTRACTIVE_EXTENDED (IIX, IC, …)
  • VARIANT_ZERO (N)
  • VARIANT_APOSTROPHUS (large numbers with I) and ((I)))
  • VARIANT_MEDIEVAL (A, Z, O, …)

By default, VARIANT_SUBTRACTIVE is used.

Usage (CLI)

Installing RomanPy also provides a roman command-line tool:

roman 42
# = XLII

Options

usage: roman [-h] [-a | -A | -u | -U] [-b | -s | -e] [-z] [-p] [-m] [-c DECIMAL NUMERAL] [-v] [-V] value

Convert a decimal number to roman numeral.

positional arguments:
  value                 a decimal number to convert to a roman numeral

optional arguments:
  -h, --help            show this help message and exit
  -a, --ascii           output encoding of roman numerals in lowercase ascii
  -A, --ASCII           output encoding of roman numerals in uppercase ascii (default)
  -u, --unicode         output encoding of roman numerals in lowercase unicode
  -U, --UNICODE         output encoding of roman numerals in uppercase unicode
  -b, --no-base         do not use the base variant
  -s, --subtractive     use the subtractive variant (includes base) (default)
  -e, --subtractive-extended
                        use the extended subtractive variant(includes subtractive)
  -z, --zero            use the zero variant N
  -p, --apostrophus     use the apostrophus method for large numbers
  -m, --medieval        use the medieval variant
  -c DECIMAL NUMERAL, --custom DECIMAL NUMERAL
                        map a decimal number to a roman numeral
  -v, --verbose         increase verbosity
  -V, --version         show program's version number and exit

Contributing

Found a bug? Have a suggestion? Open an issue or submit a merge request at the Forgejo repository. All contributions are welcome.

Metadata

Release files for RomanPy 1.3.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for RomanPy 1.3.6
File Size Uploaded
romanpy-1.3.6.tar.gz 19.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for RomanPy 1.3.6
File Interpreter ABI Platform
romanpy-1.3.6-py3-none-any.whl Python 3 none any Details

Total release size: 37.9 kB

Release files / romanpy-1.3.6.tar.gz

Download URL romanpy-1.3.6.tar.gz
Size 19.3 kB
Tags Source
SHA-256 checksum
How to use checksums
617f6f63e2666b4806f136c25b2723d30c9777f0d94109b6c73957e639daeba3
BLAKE2b-256 checksum
How to use checksums
6e053292186098eafe04a655a8f35f41884d1b29082793c1a2083f223a535e67
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / romanpy-1.3.6-py3-none-any.whl

Download URL romanpy-1.3.6-py3-none-any.whl
Size 18.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
300fa9cebed662bad46b5f151b56afeb077116fd74595a3d48e8a172f5b0d748
BLAKE2b-256 checksum
How to use checksums
ba7fe18b7429e34112de65ffd463711d3a17b269d0cfd53f397f852d1e482576
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

1.3.6 This release

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.0

2 release files

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