4
from numpy import arange, array, zeros, inf
5
from numpy.testing import assert_equal
7
from enthought.chaco2.api import DataRange1D, ArrayDataSource
10
class DataRangeTestCase(unittest.TestCase):
12
def test_empty_range(self):
14
self.assert_(r.low == -inf)
15
self.assert_(r.high == inf)
16
self.assert_(r.low_setting == "auto")
17
self.assert_(r.high_setting == "auto")
20
self.assert_(r.low_setting == 5.0)
21
self.assert_(r.high_setting == 10.0)
22
self.assert_(r.low == 5.0)
23
self.assert_(r.high == 10.0)
26
def test_single_source(self):
29
ds = ArrayDataSource(ary)
31
self.assert_(r.low == 0.0)
32
self.assert_(r.high == 9.0)
36
self.assert_(r.low_setting == 3.0)
37
self.assert_(r.high_setting == 6.0)
38
self.assert_(r.low == 3.0)
39
self.assert_(r.high == 6.0)
42
self.assert_(r.low_setting == 3.0)
43
self.assert_(r.high_setting == 6.0)
44
self.assert_(r.low == 3.0)
45
self.assert_(r.high == 6.0)
48
self.assert_(r.low_setting == "auto")
49
self.assert_(r.low == 0.0)
52
def test_constant_value(self):
55
ds = ArrayDataSource(ary)
57
# A constant value > 1.0, by default, gets a range that brackets
58
# it to the nearest power of ten above and below
59
self.assert_(r.low == 1.0)
60
self.assert_(r.high == 10.0)
63
ds = ArrayDataSource(array([31.4]))
65
self.assert_(r.low == 10.0)
66
self.assert_(r.high == 100.0)
69
ds = ArrayDataSource(array([0.03]))
71
self.assert_(r.low == -1.0)
72
self.assert_(r.high == 1.0)
75
ds = ArrayDataSource(array([-0.03]))
77
self.assert_(r.low == -1.0)
78
self.assert_(r.high == 1.0)
81
def test_multi_source(self):
82
ds1 = ArrayDataSource(array([3, 4, 5, 6, 7]))
83
ds2 = ArrayDataSource(array([5, 10, 15, 20]))
84
r = DataRange1D(ds1, ds2)
85
self.assert_(r.low == 3.0)
86
self.assert_(r.high == 20.0)
89
def test_clip_data(self):
90
r = DataRange1D(low=2.0, high=10.0)
91
ary = array([1, 3, 4, 9.8, 10.2, 12])
92
assert_equal(r.clip_data(ary) , array([3.0,4.0,9.8]))
94
r = DataRange1D(low=10, high=20)
95
ary = array([5, 10, 15, 20, 25, 30])
96
assert_equal(r.clip_data(ary) , array([10, 15, 20]))
97
assert_equal(r.clip_data(ary[::-1]) , array([20, 15, 10]))
99
r = DataRange1D(low=2.0, high=2.5)
100
assert_equal(len(r.clip_data(ary)) , 0)
103
def test_mask_data(self):
104
r = DataRange1D(low=2.0, high=10.0)
105
ary = array([1, 3, 4, 9.8, 10.2, 12])
106
assert_equal(r.mask_data(ary) , array([0,1,1,1,0,0], 'b'))
108
r = DataRange1D(low=10, high=20)
109
ary = array([5, 10, 15, 20, 25, 30])
110
target_mask = array([0,1,1,1,0,0], 'b')
111
assert_equal(r.mask_data(ary) , target_mask)
112
assert_equal(r.mask_data(ary[::-1]) , target_mask[::-1])
114
r = DataRange1D(low=2.0, high=2.5)
115
assert_equal(r.mask_data(ary) , zeros(len(ary)))
118
def test_bound_data(self):
119
r = DataRange1D(low=2.9, high=6.1)
121
assert_equal(r.bound_data(ary) , (3,6))
123
# test non-monotonic data
124
ary = array([-5,-4,-7,-8,-2,1,2,3,4,5,4,3,8,9,10,9,8])
125
bounds = r.bound_data(ary)
126
assert_equal(bounds , (7,11))
129
def test_custom_bounds_func(self):
130
def custom_func(low, high, margin, tight_bounds):
133
assert tight_bounds==False
137
r = DataRange1D(tight_bounds=False, margin=1.0, bounds_func=custom_func)
139
ds = ArrayDataSource(ary)
144
if __name__ == '__main__':