Just another (cool) no-deps math library
Project description
Metrima
A small, comprehensive math library with fixed-point arithmetic precision.
Overview
Metrima is a Python math library that implements the Fx (Fixed-point) class to provide precise decimal arithmetic without the floating-point precision issues common in standard Python operations.
Features
- Fixed-Point Arithmetic: Avoid floating-point precision errors
- Full Operator Support: All standard math operations (+, -, *, /, //, %, **)
- Type Conversions: Seamless conversion between
Fx,int,float, andstr - Comparison Operations: Complete set of comparison operators
- In-place Operations: Support for
+=,-=,*=, etc. - Unary Operations: Negation, absolute value, and rounding
Installation
pip install metrima
Quick Start
from metrima import Fx, fx
# Create fixed-point numbers
a = Fx("1.432")
b = fx(5.1234) # Convenience function
# Perform arithmetic
result = a + b
print(result) # 6.5554
# Mix with regular numbers
c = Fx(10.0) - 2.45
print(c) # 7.55
# Complex expressions
d = (Fx(2.5) + Fx(3.5)) * Fx(4) - Fx(10) / Fx(2)
print(d) # 19.0
Why Metrima?
Standard Python floating-point arithmetic can produce unexpected results:
# Python's float arithmetic
0.1 + 0.2 # 0.30000000000000004 😱
# Metrima's Fx arithmetic
Fx(0.1) + Fx(0.2) # 0.3 ✨
The Fx Class
The Fx class stores numbers as scaled integers, maintaining precision by tracking the decimal scale separately.
Creating Fx Objects
# From string (recommended for decimals)
x = Fx("3.14159")
# From int
y = Fx(42)
# From float
z = Fx(2.5)
# Using the fx() convenience function
w = fx("1.23")
Arithmetic Operations
a = Fx("10.5")
b = Fx("2.5")
a + b # Addition: 13.0
a - b # Subtraction: 8.0
a * b # Multiplication: 26.25
a / b # Division: 4.2
a // b # Floor division: 4.0
a % b # Modulo: 0.5
a ** 2 # Power: 110.25
Comparisons
Fx("2.0") == Fx("2") # True
Fx(3) != 3 # False
Fx("1.5") > Fx("1.4") # True
Fx("1.2") < 2 # True
Type Conversions
x = Fx("3.14")
float(x) # 3.14
int(x) # 3
str(x) # "3.14"
bool(x) # True
Testing
Metrima includes comprehensive test suites comparing its accuracy against both standard Python arithmetic and Python's Decimal class.
Run Interactive Tests
metrimatest
This launches an interactive menu where you can choose:
- Competition Demo - Compare Metrima vs Python vs Decimal
- Fx Class Testing - Detailed unit tests for the Fx class
Test from Code
from metrima import test_main
test_main() # Run the full test suite
API Reference
Basic Functions
from metrima import add, subtract, mul, div
add(a, b) # Addition
subtract(a, b) # Subtraction
mul(a, b) # Multiplication
div(a, b) # Division
Fx Methods
__add__,__sub__,__mul__,__truediv__,__floordiv__,__mod__,__pow____neg__,__pos__,__abs__,__round____eq__,__ne__,__lt__,__le__,__gt__,__ge____int__,__float__,__str__,__repr__,__bool__
Requirements
- Python >= 3.14
tinycolors(for colorized test output)
Version
Current version: 0.1.0.1
License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
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 metrima-0.1.0.1.tar.gz.
File metadata
- Download URL: metrima-0.1.0.1.tar.gz
- Upload date:
- Size: 11.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41447cc48a91e27fb048d8aa3dfc390b71f6807ec2df1a6f026e7efb5d9d3728
|
|
| MD5 |
ea42c225e532c394baae0cdeda126d36
|
|
| BLAKE2b-256 |
ea375428890bd8e2a9cf3926668edf7bd9d76c572743b8e625456a27c4abb9d5
|
File details
Details for the file metrima-0.1.0.1-py3-none-any.whl.
File metadata
- Download URL: metrima-0.1.0.1-py3-none-any.whl
- Upload date:
- Size: 10.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cfebdecdbce7cef097d8ab73dedf89c07a3145c0a4ade5bc56c64c6c284f15c0
|
|
| MD5 |
e4d6e46400414fecd0067bf8d5f3e7bc
|
|
| BLAKE2b-256 |
9299fe1cc66bd22ba7a0fad6729e6d8ca2eb5ff397260cc54af46dad92719183
|