feat: add Dimension and unit module

This commit is contained in:
Shunsuke Shibayama 2024-09-20 16:56:22 +09:00
parent 82848c10d6
commit 4651a383ae
16 changed files with 392 additions and 10 deletions

View file

@ -1,6 +1,5 @@
unsound = import "unsound"
# TODO: exception: Exception
unsound.pyexec("""
def try_(p, exc=lambda _: None, els=lambda: None, fin=lambda: None):
__result = None

View file

@ -0,0 +1,96 @@
unsound = import "unsound"
unsound.pyexec("""
kg = Dimension(1)
m = Dimension(1)
s = Dimension(1)
a = Dimension(1)
k = Dimension(1)
mol = Dimension(1)
cd = Dimension(1)
""")
.kg = unsound.pyeval("kg")
.m = unsound.pyeval("m")
.s = unsound.pyeval("s")
.a = unsound.pyeval("a")
.k = unsound.pyeval("k")
.mol = unsound.pyeval("mol")
.cd = unsound.pyeval("cd")
assert .kg in Dimension(Int, 1, 0, 0, 0, 0, 0, 0)
assert .m in Dimension(Int, 0, 1, 0, 0, 0, 0, 0)
assert .s in Dimension(Int, 0, 0, 1, 0, 0, 0, 0)
assert .a in Dimension(Int, 0, 0, 0, 1, 0, 0, 0)
assert .k in Dimension(Int, 0, 0, 0, 0, 1, 0, 0)
assert .mol in Dimension(Int, 0, 0, 0, 0, 0, 1, 0)
assert .cd in Dimension(Int, 0, 0, 0, 0, 0, 0, 1)
# Base unit types
'''
Kilogram
'''
.Kg = Dimension(Int, 1, 0, 0, 0, 0, 0, 0)
'''
Meter
'''
.M = Dimension(Int, 0, 1, 0, 0, 0, 0, 0)
'''
Second
'''
.S = Dimension(Int, 0, 0, 1, 0, 0, 0, 0)
'''
Ampere
'''
.A = Dimension(Int, 0, 0, 0, 1, 0, 0, 0)
'''
Kelvin
'''
.K = Dimension(Int, 0, 0, 0, 0, 1, 0, 0)
.Mol = Dimension(Int, 0, 0, 0, 0, 0, 1, 0)
'''
Candela
'''
.Cd = Dimension(Int, 0, 0, 0, 0, 0, 0, 1)
# Derived unit types
.Hz = Dimension(Int, 0, 0, -1, 0, 0, 0, 0)
.J = Dimension(Int, 1, 2, -2, 0, 0, 0, 0)
.N = Dimension(Int, 1, 1, -2, 0, 0, 0, 0)
.Pa = Dimension(Int, 1, -1, -2, 0, 0, 0, 0)
.W = Dimension(Int, 1, 2, -3, 0, 0, 0, 0)
.C = Dimension(Int, 0, 0, 1, 1, 0, 0, 0)
.V = Dimension(Int, 1, 2, -3, -1, 0, 0, 0)
.F = Dimension(Int, -1, -2, 4, 2, 0, 0, 0)
.Ohm = Dimension(Int, 1, 2, -3, -2, 0, 0, 0)
.Siemens = Dimension(Int, -1, -2, 3, 2, 0, 0, 0)
.Wb = Dimension(Int, 1, 2, -2, -1, 0, 0, 0)
.Tesla = Dimension(Int, 1, 0, -2, -1, 0, 0, 0)
.Henry = Dimension(Int, 1, 2, -2, -2, 0, 0, 0)
.Bq = Dimension(Int, 0, 0, -1, 0, 0, 0, 0)
.Gy = Dimension(Int, 2, 0, -2, 0, 0, 0, 0)
.Sv = Dimension(Int, 2, 0, -2, 0, 0, 0, 0)
.Kat = Dimension(Int, 0, 0, -1, 0, 0, 1, 0)
.quecto = 1e-30
.ronto = 1e-27
.yocto = 1e-24
.zepto = 1e-21
.atto = 1e-18
.femto = 1e-15
.pico = 1e-12
.nano = 1e-9
.micro = 1e-6
.milli = 1e-3
.centi = 1e-2
.deci = 1e-1
.deca = 1e+1
.hecto = 1e+2
.kilo = 1e+3
.mega = 1e+6
.giga = 1e+9
.tera = 1e+12
.peta = 1e+15
.exa = 1e+18
.zetta = 1e+21
.yotta = 1e+24
.ronna = 1e+27
.quetta = 1e+30