|
|
ucon
|
A lightweight, unit-aware computation library for Python — built on first-principles.
Documentation · Quickstart · API Reference
What is ucon?
ucon helps Python understand the physical meaning of your numbers. It treats units, dimensions, and scales as first-class objects — enforcing physics, not just labels.
from ucon import units
length = units.meter(5)
time = units.second(2)
speed = length / time # <2.5 m/s>
invalid = length + time # raises: incompatible dimensions
Installation
pip install ucon
With extras:
pip install ucon[pydantic] # Pydantic v2 integration
pip install ucon[mcp] # MCP server for AI agents
Quick Examples
Unit Conversion
from ucon import units, Scale
km = Scale.kilo * units.meter
distance = km(5)
print(distance.to(units.mile)) # <3.107... mi>
Dimensional Safety
from ucon import Number, Dimension, enforce_dimensions
@enforce_dimensions
def speed(
distance: Number[Dimension.length],
time: Number[Dimension.time],
) -> Number:
return distance / time
speed(units.meter(100), units.second(10)) # <10.0 m/s>
speed(units.second(100), units.second(10)) # raises ValueError
Pydantic Integration
from pydantic import BaseModel
from ucon.pydantic import Number
class Measurement(BaseModel):
value: Number
m = Measurement(value={"quantity": 9.8, "unit": "m/s^2"})
print(m.model_dump_json())
# {"value": {"quantity": 9.8, "unit": "m/s^2", "uncertainty": null}}
MCP Server for AI Agents
Configure in Claude Desktop:
{
"mcpServers": {
"ucon": {
"command": "uvx",
"args": ["--from", "ucon[mcp]", "ucon-mcp"]
}
}
}
AI agents can then convert units, check dimensions, and perform factor-label calculations with dimensional validation at each step.
Features
- Dimensional algebra — Units combine through multiplication/division with automatic dimension tracking
- Scale prefixes — Full SI (kilo, milli, micro, etc.) and binary (kibi, mebi) prefix support
- Uncertainty propagation — Errors propagate through arithmetic and conversions
- Pseudo-dimensions — Semantically isolated handling of angles, ratios, and counts
- Pydantic v2 — Type-safe API validation and JSON serialization
- MCP server — AI agent integration with Claude, Cursor, and other MCP clients
- ConversionGraph — Extensible conversion registry with custom unit support
Roadmap Highlights
| Version | Theme | Status |
|---|---|---|
| 0.3.x | Dimensional Algebra | Complete |
| 0.4.x | Conversion System | Complete |
| 0.5.x | Dimensionless Units + Uncertainty | Complete |
| 0.6.x | Pydantic + MCP Server | Complete |
| 0.7.x | Compute Tool + Extension API | Complete |
| 0.8.x | String Parsing | Planned |
| 0.9.x | Constants + Logarithmic Units | Planned |
| 0.10.x | NumPy/Polars Integration | Planned |
| 1.0.0 | API Stability | Planned |
See full roadmap: ROADMAP.md
Documentation
| Section | Description |
|---|---|
| Getting Started | Why ucon, quickstart, installation |
| Guides | MCP server, Pydantic, custom units, dimensional analysis |
| Reference | API docs, unit tables, MCP tool schemas |
| Architecture | Design principles, ConversionGraph, comparison with Pint |
Contributing
make venv # Create virtual environment
source .ucon-3.12/bin/activate # Activate
make test # Run tests
make test-all # Run tests across all Python versions
When modifying ucon/dimension.py (adding/removing dimensions), regenerate the type stubs:
make stubs # Regenerate ucon/dimension.pyi
make stubs-check # Verify stubs are current (used in CI)
All pull requests must include a CHANGELOG.md entry under the [Unreleased] section:
## [Unreleased]
### Added
- Your new feature description (#PR_NUMBER)
Use the appropriate category: Added, Changed, Deprecated, Removed, Fixed, or Security.
License
Apache 2.0. See LICENSE.
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 ucon-0.8.3.tar.gz.
File metadata
- Download URL: ucon-0.8.3.tar.gz
- Upload date:
- Size: 713.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77bd06c9d1f234ac083388fe03f870b214f53b458c525eb5982764b0e4b8ce68
|
|
| MD5 |
10ae5506371469de691e6d735feccb68
|
|
| BLAKE2b-256 |
c5a02d44da7b14db610172300667183b2bb5ae710e67bbb0446e4b5b95c2fc1c
|
File details
Details for the file ucon-0.8.3-py3-none-any.whl.
File metadata
- Download URL: ucon-0.8.3-py3-none-any.whl
- Upload date:
- Size: 86.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
34408271222ebb4b3369ceee326d3e78f13173db7b06fc923d2eb36c58d0e086
|
|
| MD5 |
fb91d2cd6205a918981fc90e3b1b1ea4
|
|
| BLAKE2b-256 |
a2d9292a69c79e7a122f004bbd4120ed1508abab4c8b74f3233a0eb8ad20e7b2
|