Add gradation.py
This commit is contained in:
60
gradation.py
Normal file
60
gradation.py
Normal file
@ -0,0 +1,60 @@
|
||||
|
||||
from __future__ import annotations
|
||||
from typing import Union
|
||||
import math
|
||||
|
||||
|
||||
class Gradation:
|
||||
grams_per_liter: int
|
||||
|
||||
def __init__(self, grams_per_liter: Union[float, int]):
|
||||
self.grams_per_liter = int(grams_per_liter)
|
||||
|
||||
def get_nm(self) -> float:
|
||||
return self.grams_per_liter / 10
|
||||
|
||||
def get_kmw(self) -> float:
|
||||
return 0.732 * self.get_nm() + 3.2
|
||||
|
||||
def get_oe(self) -> float:
|
||||
return self.get_kmw() * (4.54 + 0.022 * self.get_kmw())
|
||||
|
||||
def get_be(self) -> float:
|
||||
return self.get_kmw() / 1.53
|
||||
|
||||
def get_bx(self) -> float:
|
||||
return self.get_be() / 0.55
|
||||
|
||||
@staticmethod
|
||||
def from_nm(nm: float) -> Gradation:
|
||||
return Gradation(nm * 10)
|
||||
|
||||
@staticmethod
|
||||
def from_kmw(kmw: float) -> Gradation:
|
||||
return Gradation.from_nm((kmw - 3.2) / 0.732)
|
||||
|
||||
@staticmethod
|
||||
def from_oe(oe: float) -> Gradation:
|
||||
return Gradation.from_kmw((-4.54 + math.sqrt(4.54 * 4.54 - 4 * 0.022 * -oe)) / (2 * 0.022))
|
||||
|
||||
|
||||
def test():
|
||||
g1 = Gradation.from_kmw(15)
|
||||
assert round(g1.get_kmw(), 1) == 15
|
||||
assert round(g1.get_oe(), 0) == 73
|
||||
|
||||
|
||||
def print_all():
|
||||
for i in range(14 * 2, 22 * 2):
|
||||
kmw = i / 2
|
||||
g = Gradation.from_kmw(kmw)
|
||||
print(f"{kmw} -> {g.get_kmw():.1f} °KMW, {g.get_oe():3.0f} °Oe, {g.get_nm():.1f} °NM, {g.grams_per_liter}")
|
||||
print("================================")
|
||||
for oe in range(65, 110):
|
||||
g = Gradation.from_oe(oe)
|
||||
print(f"{oe:3} -> {g.get_kmw():.1f} °KMW, {g.get_oe():3.0f} °Oe, {g.get_nm():.1f} °NM, {g.grams_per_liter}")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print_all()
|
||||
test()
|
Reference in New Issue
Block a user