Skip to main content

Performing calculations in Sexagesimal Coordinate System.

Project description

Sexagesimal Calculator

PyPI version Python versions Coverage Status Pepy Total Downloads Conventional Commits License: MIT GitHub stars GitHub issues uv Ruff

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


Features

  • Immutable Objects: Sexagesimal numbers are immutable, ensuring predictable and bug-free calculations.
  • Intuitive API: Use standard Python operators (+, -, *, /, **, round()) for all arithmetic.
  • High Precision: Backed by Python's Decimal and sympy.Rational for conversions, guaranteeing precision.
  • Flexible Initialization: Create Sexagesimal numbers 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 pytest and hypothesis suite.

Installation

This package is hosted on PyPI.

pip install sexagesimal-calculator

# OR

uv add sexagesimal-calculator

Basic Usage

The 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,54

Explanations Feature

A 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.

Development

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-packages

To run the test suite with coverage:

uv run pytest --cov=src/sexagesimal_calculator

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sexagesimal_calculator-2.0.1.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sexagesimal_calculator-2.0.1-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file sexagesimal_calculator-2.0.1.tar.gz.

File metadata

File hashes

Hashes for sexagesimal_calculator-2.0.1.tar.gz
Algorithm Hash digest
SHA256 143e70b21c73982b315fc71609372d6d187a506c188baffce9f9ff170da72d75
MD5 9cf9215bfb3b16cc86d01dea433f2f32
BLAKE2b-256 3b20a0b0ef5a99fde5125849c751e9de90a2bb13eeed85fbcbddd3421843d217

See more details on using hashes here.

File details

Details for the file sexagesimal_calculator-2.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for sexagesimal_calculator-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bc32720824eb53dbff9f026d61c6b1efb3f3d7637cd0b01b4bf83a48952da64c
MD5 08796bb09261d0149472448290209029
BLAKE2b-256 924f9a020470d2c4650a3261e4397485bed16641997adcf5c3eebf871700f431

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page