Skip to content

Commit f0a15e7

Browse files
committed
unit tests use unittest or unittest2, not nose
1 parent f38029b commit f0a15e7

30 files changed

Lines changed: 1465 additions & 1837 deletions

quantities/__init__.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,3 @@
264264
from . import constants
265265

266266
from .umath import *
267-
268-
try:
269-
from .tests import test
270-
except ImportError:
271-
pass

quantities/dimensionality.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ def _d_multiply(q1, q2, out=None):
231231
except:
232232
return q2.dimensionality
233233
p_dict[np.multiply] = _d_multiply
234+
p_dict[np.cross] = _d_multiply
234235

235236
def _d_divide(q1, q2, out=None):
236237
try:
@@ -279,6 +280,7 @@ def _d_check_uniform(q1, q2, out=None):
279280
p_dict[np.remainder] = _d_check_uniform
280281
p_dict[np.floor_divide] = _d_check_uniform
281282
p_dict[np.arctan2] = _d_check_uniform
283+
p_dict[np.hypot] = _d_check_uniform
282284

283285
def _d_power(q1, q2, out=None):
284286
if getattr(q2, 'dimensionality', None):

quantities/markup.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@
77
import operator
88
import re
99
import threading
10-
try:
11-
import user
12-
except ImportError:
13-
user = None
1410

1511

1612
class _Config(object):
@@ -29,7 +25,7 @@ def use_unicode(self, val):
2925

3026
def __init__(self):
3127
self._lock = threading.RLock()
32-
self._use_unicode = getattr(user, 'quantities_unicode', False)
28+
self._use_unicode = False
3329

3430
config = _Config()
3531

quantities/quantity.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ def __new__(cls, data, units='', dtype=None, copy=True):
119119
if isinstance(data, cls):
120120
if units:
121121
data = data.rescale(units)
122+
if isinstance(data, unit_registry['UnitQuantity']):
123+
return 1*data
122124
return np.array(data, dtype=dtype, copy=copy, subok=True)
123125

124126
ret = np.array(data, dtype=dtype, copy=copy).view(cls)
@@ -343,17 +345,18 @@ def __str__(self):
343345

344346
@with_doc(np.ndarray.__getitem__)
345347
def __getitem__(self, key):
346-
if isinstance(key, int):
347-
# This might be resolved by issue # 826
348-
return Quantity(self.magnitude[key], self._dimensionality)
348+
ret = super(Quantity, self).__getitem__(key)
349+
if isinstance(ret, Quantity):
350+
return ret
349351
else:
350-
return super(Quantity, self).__getitem__(key)
352+
return Quantity(ret, self._dimensionality)
351353

352354
@with_doc(np.ndarray.__setitem__)
353355
def __setitem__(self, key, value):
354-
if isinstance(value, Quantity):
355-
if self._dimensionality != value._dimensionality:
356-
value = value.rescale(self._dimensionality)
356+
if not isinstance(value, Quantity):
357+
value = Quantity(value)
358+
if self._dimensionality != value._dimensionality:
359+
value = value.rescale(self._dimensionality)
357360
self.magnitude[key] = value
358361

359362
@with_doc(np.ndarray.__lt__)
@@ -439,13 +442,11 @@ def put(self, indicies, values, mode='raise'):
439442
performs the equivalent of ndarray.put() but enforces units
440443
values - must be an Quantity with the same units as self
441444
"""
442-
if isinstance(values, Quantity):
443-
if values._dimensionality == self._dimensionality:
444-
self.magnitude.put(indicies, values, mode)
445-
else:
446-
raise ValueError("values must have the same units as self")
447-
else:
448-
raise TypeError("values must be a Quantity")
445+
if not isinstance(values, Quantity):
446+
values = Quantity(values)
447+
if values._dimensionality != self._dimensionality:
448+
values = values.rescale(self.units)
449+
self.magnitude.put(indicies, values, mode)
449450

450451
# choose does not function correctly, and it is not clear
451452
# how it would function, so for now it will not be implemented

quantities/tests/__init__.py

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +0,0 @@
1-
2-
from functools import wraps
3-
4-
from nose.tools import assert_equal
5-
import numpy as np
6-
from numpy.testing import Tester, assert_array_equal, assert_array_almost_equal
7-
8-
from .. import markup
9-
10-
USE_UNICODE = False
11-
def setup():
12-
global USE_UNICODE
13-
USE_UNICODE = markup.config.use_unicode
14-
markup.config.use_unicode = False
15-
16-
def teardown():
17-
markup.config.use_unicode = USE_UNICODE
18-
19-
class QuantityTester(Tester):
20-
def test(self, *args, **kwargs):
21-
argv = kwargs.get('extra_argv', [])
22-
argv.append('--exe')
23-
kwargs['extra_argv'] = argv
24-
return Tester.test(self, *args, **kwargs)
25-
test = QuantityTester().test
26-
27-
def assert_quantity_equal(x, y, err_msg='', verbose=True):
28-
try:
29-
assert_array_equal(x, y, err_msg, verbose)
30-
assert_equal(x._dimensionality, y._dimensionality)
31-
except AssertionError:
32-
raise AssertionError(
33-
'Quantities are not equal:\nx: %s\ny: %s'
34-
% (str(x), str(y))
35-
)
36-
except AttributeError:
37-
if (
38-
getattr(x, '_dimensionality', None)
39-
or getattr(y, '_dimensionality', None)
40-
):
41-
raise AssertionError(
42-
'Quantities are not equal:\nx: %s\ny: %s'
43-
% (str(x), str(y))
44-
)
45-
46-
def assert_quantity_almost_equal(x, y, decimal=6, err_msg='', verbose=True):
47-
try:
48-
assert_array_almost_equal(x, y, decimal, err_msg, verbose)
49-
assert_equal(x._dimensionality, y._dimensionality)
50-
except AssertionError:
51-
raise AssertionError(
52-
'Quantities are not equal:\nx: %s\ny: %s'
53-
% (str(x), str(y))
54-
)
55-
except AttributeError:
56-
if (
57-
getattr(x, '_dimensionality', None)
58-
or getattr(y, '_dimensionality', None)
59-
):
60-
raise AssertionError(
61-
'Quantities are not equal:\nx: %s\ny: %s'
62-
% (str(x), str(y))
63-
)

quantities/tests/common.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import sys
2+
if sys.version.startswith('2.6') or sys.version.startswith('3.1'):
3+
import unittest2 as unittest
4+
else:
5+
import unittest
6+
7+
import numpy as np
8+
9+
from quantities import Quantity
10+
11+
class TestCase(unittest.TestCase):
12+
13+
def assertQuantityEqual(self, q1, q2, msg=None, delta=None):
14+
"""
15+
Make sure q1 and q2 are the same quantities to within the given
16+
precision.
17+
"""
18+
delta = 1e-5 if delta is None else delta
19+
msg = '' if msg is None else ' (%s)' % msg
20+
21+
q1 = Quantity(q1)
22+
q2 = Quantity(q2)
23+
if q1.shape != q2.shape:
24+
raise self.failureException(
25+
"Shape mismatch (%s vs %s)%s" % (q1.shape, q2.shape, msg)
26+
)
27+
if not np.all(np.abs(q1.magnitude - q2.magnitude) < delta):
28+
raise self.failureException(
29+
"Magnitudes differ by more than %g (%s vs %s)%s"
30+
% (delta, q1.magnitude, q2.magnitude, msg)
31+
)
32+
33+
d1 = getattr(q1, '_dimensionality', None)
34+
d2 = getattr(q2, '_dimensionality', None)
35+
if (d1 or d2) and not (d1 == d2):
36+
raise self.failureException(
37+
"Dimensionalities are not equal (%s vs %s)%s" % (d1, d2, msg)
38+
)

quantities/tests/test_01_dimensionality.py

Lines changed: 0 additions & 172 deletions
This file was deleted.

quantities/tests/test_10_units.py

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)