cadquery-freecad-module/CadQuery/Libs/pint/compat/__init__.py

124 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
"""
pint.compat
~~~~~~~~~~~
Compatibility layer.
:copyright: 2013 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
import sys
import tokenize
from numbers import Number
from decimal import Decimal
PYTHON3 = sys.version >= '3'
if PYTHON3:
from io import BytesIO
string_types = str
tokenizer = lambda input_string: tokenize.tokenize(BytesIO(input_string.encode('utf-8')).readline)
def u(x):
return x
maketrans = str.maketrans
long_type = int
else:
from StringIO import StringIO
string_types = basestring
tokenizer = lambda input_string: tokenize.generate_tokens(StringIO(input_string).readline)
import codecs
def u(x):
return codecs.unicode_escape_decode(x)[0]
maketrans = lambda f, t: dict((ord(a), b) for a, b in zip(f, t))
long_type = long
if sys.version_info < (2, 7):
try:
import unittest2 as unittest
except ImportError:
raise Exception("Testing Pint in Python 2.6 requires package 'unittest2'")
else:
import unittest
try:
from collections import Chainmap
except ImportError:
from .chainmap import ChainMap
try:
from collections import TransformDict
except ImportError:
from .transformdict import TransformDict
try:
from functools import lru_cache
except ImportError:
from .lrucache import lru_cache
try:
from logging import NullHandler
except ImportError:
from .nullhandler import NullHandler
try:
import numpy as np
from numpy import ndarray
HAS_NUMPY = True
NUMPY_VER = np.__version__
NUMERIC_TYPES = (Number, Decimal, ndarray, np.number)
def _to_magnitude(value, force_ndarray=False):
if isinstance(value, (dict, bool)) or value is None:
raise TypeError('Invalid magnitude for Quantity: {0!r}'.format(value))
elif isinstance(value, string_types) and value == '':
raise ValueError('Quantity magnitude cannot be an empty string.')
elif isinstance(value, (list, tuple)):
return np.asarray(value)
if force_ndarray:
return np.asarray(value)
return value
except ImportError:
np = None
class ndarray(object):
pass
HAS_NUMPY = False
NUMPY_VER = '0'
NUMERIC_TYPES = (Number, Decimal)
def _to_magnitude(value, force_ndarray=False):
if isinstance(value, (dict, bool)) or value is None:
raise TypeError('Invalid magnitude for Quantity: {0!r}'.format(value))
elif isinstance(value, string_types) and value == '':
raise ValueError('Quantity magnitude cannot be an empty string.')
elif isinstance(value, (list, tuple)):
raise TypeError('lists and tuples are valid magnitudes for '
'Quantity only when NumPy is present.')
return value
try:
from uncertainties import ufloat
HAS_UNCERTAINTIES = True
except ImportError:
ufloat = None
HAS_UNCERTAINTIES = False