83 lines
1.8 KiB
Python
83 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
pint.converters
|
|
~~~~~~~~~
|
|
|
|
Functions and classes related to unit conversions.
|
|
|
|
:copyright: 2014 by Pint Authors, see AUTHORS for more details.
|
|
:license: BSD, see LICENSE for more details.
|
|
"""
|
|
from __future__ import (division, unicode_literals, print_function,
|
|
absolute_import)
|
|
|
|
|
|
class Converter(object):
|
|
"""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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|