Performing calculations in Sexagesimal Coordinate System.
Project description
Sexagesimal Calculator
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:
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.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sexagesimal_calculator-2.0.1.tar.gz.
File metadata
- Download URL: sexagesimal_calculator-2.0.1.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
143e70b21c73982b315fc71609372d6d187a506c188baffce9f9ff170da72d75
|
|
| MD5 |
9cf9215bfb3b16cc86d01dea433f2f32
|
|
| BLAKE2b-256 |
3b20a0b0ef5a99fde5125849c751e9de90a2bb13eeed85fbcbddd3421843d217
|
File details
Details for the file sexagesimal_calculator-2.0.1-py3-none-any.whl.
File metadata
- Download URL: sexagesimal_calculator-2.0.1-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.22
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc32720824eb53dbff9f026d61c6b1efb3f3d7637cd0b01b4bf83a48952da64c
|
|
| MD5 |
08796bb09261d0149472448290209029
|
|
| BLAKE2b-256 |
924f9a020470d2c4650a3261e4397485bed16641997adcf5c3eebf871700f431
|