A robust, modern Python library for high-precision sexagesimal (base-60) arithmetic, born from a project for the History of Mathematics in India (HoMI) initiative at Indian Institute of Technology, Gandhinagar.
This library provides a Sexagesimal class that represents numbers as immutable objects, allowing for intuitive and accurate calculations. It is ideal for applications in historical mathematics, astronomy, and any domain requiring base-60 computation.
Full Documentation | PyPI Project | Source Code
- Immutable Objects:
Sexagesimalnumbers are immutable, ensuring predictable and bug-free calculations. - Intuitive API: Use standard Python operators (
+,-,*,/,**,round()) for all arithmetic. - High Precision: Backed by Python's
Decimalandsympy.Rationalfor conversions, guaranteeing precision. - Flexible Initialization: Create
Sexagesimalnumbers from integers, floats, decimals, or strings. - Educational Tools: Generate beautiful, step-by-step explanations of calculations, perfect for teaching or validation.
- Fully Typed and Tested: High test coverage with a comprehensive
pytestandhypothesissuite.
This package is hosted on PyPI.
pip install sexagesimal-calculator
# OR
uv add sexagesimal-calculatorThe core of the library is the Sexagesimal class.
from sexagesimal_calculator import Sexagesimal
# Initialization is flexible
a = Sexagesimal("10;15,30") # From a sexagesimal string
b = Sexagesimal(1.75) # From a float
c = Sexagesimal("-5") # From an integer string
print(f"A = {a}") # A = 10;15,30
print(f"B = {b}") # B = 01;45
print(f"C = {c}") # C = -05;00
# Arithmetic uses standard Python operators
sum_val = a + b
print(f"A + B = {sum_val}") # A + B = 12;00,30
# Convert to a high-precision Decimal
dec_val = sum_val.to_decimal()
print(f"Sum as Decimal: {dec_val}") # Sum as Decimal: 12.008333...
# Rounding
rounded = Sexagesimal("21;19,53,47").round(precision=2)
print(f"Rounded value: {rounded}") # Rounded value: 21;19,54A standout feature is the ability to generate detailed, step-by-step explanations for calculations.
from sexagesimal_calculator import explain_multiplication
a = Sexagesimal("01;15")
b = Sexagesimal("02;30")
# Generate the explanation object
explanation = explain_multiplication(a, b)
# Print the beautiful, colored explanation to your terminal
explanation.print()This produces a detailed, formatted breakdown of the entire long multiplication process, perfect for educational purposes. Similar functions (explain_addition, explain_subtraction, explain_division) are also available.
To set up for development, clone the repository and use uv to sync dependencies.
git clone https://github.com/HrushikeshPawar/Sexagesimal-Calculator.git
cd Sexagesimal-Calculator
uv sync --all-packagesTo run the test suite with coverage:
uv run pytest --cov=src/sexagesimal_calculator