Source code for pint.converters
"""
pint.converters
~~~~~~~~~~~~~~~
Functions and classes related to unit conversions.
:copyright: 2016 by Pint Authors, see AUTHORS for more details.
:license: BSD, see LICENSE for more details.
"""
[docs]class Converter:
"""Base class for value converters."""
is_multiplicative = True
def to_reference(self, value, inplace=False):
return value
def from_reference(self, value, inplace=False):
return value
[docs]class ScaleConverter(Converter):
"""A linear transformation."""
is_multiplicative = True
def __init__(self, scale):
self.scale = scale
def to_reference(self, value, inplace=False):
if inplace:
value *= self.scale
else:
value = value * self.scale
return value
def from_reference(self, value, inplace=False):
if inplace:
value /= self.scale
else:
value = value / self.scale
return value
[docs]class OffsetConverter(Converter):
"""An affine transformation."""
def __init__(self, scale, offset):
self.scale = scale
self.offset = offset
@property
def is_multiplicative(self):
return self.offset == 0
def to_reference(self, value, inplace=False):
if inplace:
value *= self.scale
value += self.offset
else:
value = value * self.scale + self.offset
return value
def from_reference(self, value, inplace=False):
if inplace:
value -= self.offset
value /= self.scale
else:
value = (value - self.offset) / self.scale
return value