Files
deb-python-pint/pint/converters.py
Matthieu Dartiailh 293066eff7 Move definitions, errors, and converters into their own modules.
Move definitions, errors and converters tests to their own modules.
(tests pass locally)
2015-01-06 14:03:33 +01:00

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