Skip to main content

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, and str
  • 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:

  1. Competition Demo - Compare Metrima vs Python vs Decimal
  2. 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.2.0

License

MIT

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

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

metrima-0.2.5.tar.gz (18.0 kB view details)

Uploaded Source

Built Distribution

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

metrima-0.2.5-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file metrima-0.2.5.tar.gz.

File metadata

  • Download URL: metrima-0.2.5.tar.gz
  • Upload date:
  • Size: 18.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for metrima-0.2.5.tar.gz
Algorithm Hash digest
SHA256 1111efef20891ff3f0ed570b963f16028538dfd5d07ca38fd6046db780ea0224
MD5 c30244ff9049b04a6c6c66b49b0be7a5
BLAKE2b-256 935b444cbdcb8acbd94eedc3dfdb79ece7d64bee1011b68679a96942aa253638

See more details on using hashes here.

File details

Details for the file metrima-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: metrima-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for metrima-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 70de457def0d2168bb19ac49e122a5348e6e907b2cf28e336e6d8a1ca6500bf5
MD5 d624eef229de2ae9ae66c549fcf3e7f6
BLAKE2b-256 e04a2ae7f1e3e82f6147764ee0cfedfcb2e9d81646101f3bded49bb7e3e62a17

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