|
a |
|
b/units.py |
|
|
1 |
from pint import UnitRegistry |
|
|
2 |
from pint.unit import UnitsContainer |
|
|
3 |
import pandas as pd |
|
|
4 |
|
|
|
5 |
class MedicalUreg(UnitRegistry): |
|
|
6 |
|
|
|
7 |
def __init__(self,medical_uom_defs='config/medical_units.txt',**kwargs): |
|
|
8 |
super(MedicalUreg, self).__init__(**kwargs) |
|
|
9 |
self.load_definitions(medical_uom_defs) |
|
|
10 |
|
|
|
11 |
def parse_units(self,units): |
|
|
12 |
try: |
|
|
13 |
parsed_units = super(MedicalUreg,self).parse_units(units) |
|
|
14 |
except: |
|
|
15 |
parsed_units = super(MedicalUreg,self).parse_units(units.lower()) |
|
|
16 |
return parsed_units |
|
|
17 |
|
|
|
18 |
def same_units(self,unit1,unit2): |
|
|
19 |
return same_units(unit1,unit2,self) |
|
|
20 |
|
|
|
21 |
def same_dimensionality(self,unit1,unit2): |
|
|
22 |
return same_dimensionality(unit1,unit2,self) |
|
|
23 |
|
|
|
24 |
def convert_units(self,from_units,to_units,data): |
|
|
25 |
return convert_units(from_units,to_units,data,self) |
|
|
26 |
|
|
|
27 |
def is_volume(self,units): |
|
|
28 |
if type(units) is str: |
|
|
29 |
units = self.parse_units(units) |
|
|
30 |
return is_volume(units) |
|
|
31 |
|
|
|
32 |
def is_mass(self,units): |
|
|
33 |
if type(units) is str: |
|
|
34 |
units = self.parse_units(units) |
|
|
35 |
return is_mass(units) |
|
|
36 |
|
|
|
37 |
def is_temp(self,units): |
|
|
38 |
if type(units) is str: |
|
|
39 |
units = self.parse_units(units) |
|
|
40 |
return units.dimensionality == UnitsContainer({'[temperature]':1.0}) |
|
|
41 |
|
|
|
42 |
def is_rate(self,units): |
|
|
43 |
if type(units) is str: |
|
|
44 |
units = self.parse_units(units) |
|
|
45 |
return units.dimensionality.get('[time]',0) == -1.0 |
|
|
46 |
|
|
|
47 |
|
|
|
48 |
def smart_parse_units(units,ureg): |
|
|
49 |
try: |
|
|
50 |
parsed_units = ureg.parse_units(units) |
|
|
51 |
except: |
|
|
52 |
parsed_units = ureg.parse_units(units.lower()) |
|
|
53 |
return parsed_units |
|
|
54 |
|
|
|
55 |
|
|
|
56 |
def same_units(unit1,unit2,ureg): |
|
|
57 |
return ureg.parse_units(unit1) == ureg.parse_units(unit2) |
|
|
58 |
|
|
|
59 |
def same_dimensionality(unit1,unit2,ureg): |
|
|
60 |
return ureg.parse_units(unit1).dimensionality == ureg.parse_units(unit2).dimensionality |
|
|
61 |
|
|
|
62 |
def convert_units(from_units,to_units,data,ureg): |
|
|
63 |
from_parsed = ureg.parse_units(from_units) |
|
|
64 |
to_parsed = ureg.parse_units(to_units) |
|
|
65 |
Q_ = ureg.Quantity |
|
|
66 |
unit_data = Q_(data,from_parsed) |
|
|
67 |
np_ar = unit_data.to(to_parsed) |
|
|
68 |
return pd.Series(np_ar,name=np_ar.name,index=data.index) |
|
|
69 |
|
|
|
70 |
|
|
|
71 |
def is_volume(units): |
|
|
72 |
return units.dimensionality == UnitsContainer({'[length]':3.0}) |
|
|
73 |
|
|
|
74 |
def is_mass(units): |
|
|
75 |
return units.dimensionality == UnitsContainer({'[mass]':1.0}) |