Skip to main content

Statically typed units

Reason this release was yanked:

contains a breaking change

Project description

u

Statically typed units.

Quickstart

Type safe assignments:

duration: u.Duration = u.seconds(5)  # Ok
distance: u.Distance = u.amperes(5)  # Type checking error

Type safe math:

print(u.seconds(120) + u.minutes(3))  # Ok
print(u.seconds(120) + u.amperes(3))  # Type checking error

Type safe derived units:

SPEED = u.DIV[u.DISTANCE, u.DURATION]
Speed = u.Quantity[SPEED]

speed: Speed = u.km(5) / u.hours(1)  # Ok
speed: Speed = (u.km / u.hours)(5)  # Also ok

ELECTRIC_CHARGE = u.MUL[u.DURATION, u.ELECTRIC_CURRENT]
ElectricCharge = u.Quantity[ELECTRIC_CHARGE]

charge: ElectricCharge = u.sec(3) * u.amperes(2)  # Ok
charge: ElectricCharge = u.amperes(2) * u.sec(3)  # Also ok

Reusable prefixes:

print(u.megabytes(5) == u.mega(u.bytes)(5))  # True

Define your own quantities and units:

class TASTINESS(u.QUANTITY):
    pass

Tastiness = u.Quantity[TASTINESS]

mmm = u.Unit(Tastiness, symbol='mmm', multiplier=1)
yum = u.Unit(Tastiness, 'yum', 10)

taste: Tastiness = yum(42)

Convert to string:

thousand_meters = u.meters(1000)
print(thousand_meters)             # Automatically selects a suitable unit: "1 km"
print(f'{thousand_meters:m}')      # Uses the specified unit: "1000 m"
print(f'{thousand_meters:cm:m}')   # Selects a unit from the given range: "1000 m"
print(f'{thousand_meters:.1f m}')  # Formats the number: "1000.0 m"

Caveats

Since type checkers don't understand math, calculations involving different types of quantities sometimes cause type checkers to complain even though they're correct. For example:

area: u.Area = (u.m2 * u.kelvins / u.kelvins)(1)  # Type checking error

Documentation

There is no online documentation, but everything has docstrings and type annotations. Your IDE should be able to show you all the relevant information.

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

u-1.1.1.tar.gz (32.3 kB view details)

Uploaded Source

Built Distribution

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

u-1.1.1-py3-none-any.whl (25.8 kB view details)

Uploaded Python 3

File details

Details for the file u-1.1.1.tar.gz.

File metadata

  • Download URL: u-1.1.1.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.5

File hashes

Hashes for u-1.1.1.tar.gz
Algorithm Hash digest
SHA256 1e619c9594bd4d6daefdc7707fde33084c85adf455f0c0f07db91425822b8590
MD5 627c942c90e1e90a63116564f4535f4b
BLAKE2b-256 a494af57b2c03c42b611e4f9cf0a5bebf1a3581c51d9ac4300de1c124c71244b

See more details on using hashes here.

File details

Details for the file u-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: u-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 25.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.5

File hashes

Hashes for u-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 aff95e4e02df7bacf56cb24dad4a46fc459f5ebab46c58830a27422fca4bb787
MD5 2ccec7638b59bacb24ec6c3ff272c452
BLAKE2b-256 c3307d763705269cba63d84db3ce404f646cce0337e06f538996cad80df646fa

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