erg/crates/erg_compiler/lib/std/unit.er
2024-09-20 21:15:40 +09:00

124 lines
2.7 KiB
Python

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")
.meter = .m
.sec = .s
.ampere = .a
.kelvin = .k
.candela = .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)
assert .meter in Dimension(Int, 0, 1, 0, 0, 0, 0, 0)
assert .sec in Dimension(Int, 0, 0, 1, 0, 0, 0, 0)
assert .ampere in Dimension(Int, 0, 0, 0, 1, 0, 0, 0)
assert .kelvin in Dimension(Int, 0, 0, 0, 0, 1, 0, 0)
assert .candela 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)
.Meter = .M
'''
Second
'''
.S = Dimension(Int, 0, 0, 1, 0, 0, 0, 0)
.Sec = .S
'''
Ampere
'''
.A = Dimension(Int, 0, 0, 0, 1, 0, 0, 0)
.Ampere = .A
'''
Kelvin
'''
.K = Dimension(Int, 0, 0, 0, 0, 1, 0, 0)
.Kelvin = .K
.Mol = Dimension(Int, 0, 0, 0, 0, 0, 1, 0)
'''
Candela
'''
.Cd = Dimension(Int, 0, 0, 0, 0, 0, 0, 1)
.Candela = .Cd
# Derived unit types
.Hz = Dimension(Int, 0, 0, -1, 0, 0, 0, 0)
.Hertz = .Hz
.J = Dimension(Int, 1, 2, -2, 0, 0, 0, 0)
.Joule = .J
.N = Dimension(Int, 1, 1, -2, 0, 0, 0, 0)
.Newton = .N
.Pa = Dimension(Int, 1, -1, -2, 0, 0, 0, 0)
.Pascal = .Pa
.W = Dimension(Int, 1, 2, -3, 0, 0, 0, 0)
.Watt = .W
.C = Dimension(Int, 0, 0, 1, 1, 0, 0, 0)
.Coulomb = .C
.V = Dimension(Int, 1, 2, -3, -1, 0, 0, 0)
.Volt = .V
.F = Dimension(Int, -1, -2, 4, 2, 0, 0, 0)
.Farad = .F
.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)
.Weber = .Wb
.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)
.Becquerel = .Bq
.Gy = Dimension(Int, 2, 0, -2, 0, 0, 0, 0)
.Gray = .Gy
.Sv = Dimension(Int, 2, 0, -2, 0, 0, 0, 0)
.Sievert = .Sv
.Kat = Dimension(Int, 0, 0, -1, 0, 0, 1, 0)
.Katal = .Kat
.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