Diff of /units.py [000000] .. [418e14]

Switch to unified view

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})