codekingpro/portable-devtools
115k
1import numpy as np
2from numpy.testing import assert_raises, assert_raises_regex
3
4
5class TestIndexErrors:
6 '''Tests to exercise indexerrors not covered by other tests.'''
7
8 def test_arraytypes_fasttake(self):
9 'take from a 0-length dimension'
10 x = np.empty((2, 3, 0, 4))
11 assert_raises(IndexError, x.take, [0], axis=2)
12 assert_raises(IndexError, x.take, [1], axis=2)
13 assert_raises(IndexError, x.take, [0], axis=2, mode='wrap')
14 assert_raises(IndexError, x.take, [0], axis=2, mode='clip')
15
16 def test_take_from_object(self):
17 # Check exception taking from object array
18 d = np.zeros(5, dtype=object)
19 assert_raises(IndexError, d.take, [6])
20
21 # Check exception taking from 0-d array
22 d = np.zeros((5, 0), dtype=object)
23 assert_raises(IndexError, d.take, [1], axis=1)
24 assert_raises(IndexError, d.take, [0], axis=1)
25 assert_raises(IndexError, d.take, [0])
26 assert_raises(IndexError, d.take, [0], mode='wrap')
27 assert_raises(IndexError, d.take, [0], mode='clip')
28
29 def test_multiindex_exceptions(self):
30 a = np.empty(5, dtype=object)
31 assert_raises(IndexError, a.item, 20)
32 a = np.empty((5, 0), dtype=object)
33 assert_raises(IndexError, a.item, (0, 0))
34
35 def test_put_exceptions(self):
36 a = np.zeros((5, 5))
37 assert_raises(IndexError, a.put, 100, 0)
38 a = np.zeros((5, 5), dtype=object)
39 assert_raises(IndexError, a.put, 100, 0)
40 a = np.zeros((5, 5, 0))
41 assert_raises(IndexError, a.put, 100, 0)
42 a = np.zeros((5, 5, 0), dtype=object)
43 assert_raises(IndexError, a.put, 100, 0)
44
45 def test_iterators_exceptions(self):
46 "cases in iterators.c"
47 def assign(obj, ind, val):
48 obj[ind] = val
49
50 a = np.zeros([1, 2, 3])
51 assert_raises(IndexError, lambda: a[0, 5, None, 2])
52 assert_raises(IndexError, lambda: a[0, 5, 0, 2])
53 assert_raises(IndexError, lambda: assign(a, (0, 5, None, 2), 1))
54 assert_raises(IndexError, lambda: assign(a, (0, 5, 0, 2), 1))
55
56 a = np.zeros([1, 0, 3])
57 assert_raises(IndexError, lambda: a[0, 0, None, 2])
58 assert_raises(IndexError, lambda: assign(a, (0, 0, None, 2), 1))
59
60 a = np.zeros([1, 2, 3])
61 assert_raises(IndexError, lambda: a.flat[10])
62 assert_raises(IndexError, lambda: assign(a.flat, 10, 5))
63 a = np.zeros([1, 0, 3])
64 assert_raises(IndexError, lambda: a.flat[10])
65 assert_raises(IndexError, lambda: assign(a.flat, 10, 5))
66
67 a = np.zeros([1, 2, 3])
68 assert_raises(IndexError, lambda: a.flat[np.array(10)])
69 assert_raises(IndexError, lambda: assign(a.flat, np.array(10), 5))
70 a = np.zeros([1, 0, 3])
71 assert_raises(IndexError, lambda: a.flat[np.array(10)])
72 assert_raises(IndexError, lambda: assign(a.flat, np.array(10), 5))
73
74 a = np.zeros([1, 2, 3])
75 assert_raises(IndexError, lambda: a.flat[np.array([10])])
76 assert_raises(IndexError, lambda: assign(a.flat, np.array([10]), 5))
77 a = np.zeros([1, 0, 3])
78 assert_raises(IndexError, lambda: a.flat[np.array([10])])
79 assert_raises(IndexError, lambda: assign(a.flat, np.array([10]), 5))
80
81 def test_mapping(self):
82 "cases from mapping.c"
83
84 def assign(obj, ind, val):
85 obj[ind] = val
86
87 a = np.zeros((0, 10))
88 assert_raises(IndexError, lambda: a[12])
89
90 a = np.zeros((3, 5))
91 assert_raises(IndexError, lambda: a[(10, 20)])
92 assert_raises(IndexError, lambda: assign(a, (10, 20), 1))
93 a = np.zeros((3, 0))
94 assert_raises(IndexError, lambda: a[(1, 0)])
95 assert_raises(IndexError, lambda: assign(a, (1, 0), 1))
96
97 a = np.zeros((10,))
98 assert_raises(IndexError, lambda: assign(a, 10, 1))
99 a = np.zeros((0,))
100 assert_raises(IndexError, lambda: assign(a, 10, 1))
101
102 a = np.zeros((3, 5))
103 assert_raises(IndexError, lambda: a[(1, [1, 20])])
104 assert_raises(IndexError, lambda: assign(a, (1, [1, 20]), 1))
105 a = np.zeros((3, 0))
106 assert_raises(IndexError, lambda: a[(1, [0, 1])])
107 assert_raises(IndexError, lambda: assign(a, (1, [0, 1]), 1))
108
109 def test_mapping_error_message(self):
110 a = np.zeros((3, 5))
111 index = (1, 2, 3, 4, 5)
112 assert_raises_regex(
113 IndexError,
114 "too many indices for array: "
115 "array is 2-dimensional, but 5 were indexed",
116 lambda: a[index])
117
118 def test_methods(self):
119 "cases from methods.c"
120
121 a = np.zeros((3, 3))
122 assert_raises(IndexError, lambda: a.item(100))
123 