"python-package/vscode:/vscode.git/clone" did not exist on "15566421bcc96d46bac353dee17b981a12827604"
test_array.py 3.37 KB
Newer Older
root's avatar
root committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import copy
import unittest

import numpy

import cupy
from cupy import testing


@testing.parameterize(
    *testing.product({
        'assertion': ['assert_allclose', 'assert_array_almost_equal',
                      'assert_array_almost_equal_nulp',
                      'assert_array_max_ulp', 'assert_array_equal'],
        'array_module_x': [numpy, cupy],
        'array_module_y': [numpy, cupy]
    })
)
class TestEqualityAssertion(unittest.TestCase):

    def setUp(self):
        self.assertion = getattr(testing, self.assertion)
        val = numpy.random.uniform(-1, 1, (2, 3))
        self.x = self.array_module_x.array(val, val.dtype, copy=True)
        self.y = self.array_module_y.array(val, val.dtype, copy=True)

    def test_equality(self):
        self.assertion(self.x, self.y)

    def test_inequality(self):
        self.y += 1
        with self.assertRaises(AssertionError):
            self.assertion(self.x, self.y)


def _convert_array(xs, array_module):
    if array_module == 'all_numpy':
        return xs
    elif array_module == 'all_cupy':
        return [
            cupy.asarray(x)
            for x in xs
        ]
    else:
        return [
            cupy.asarray(x) if numpy.random.randint(0, 2) else x
            for x in xs
        ]


@testing.parameterize(
    *testing.product({
        'array_module_x': ['all_numpy', 'all_cupy', 'random'],
        'array_module_y': ['all_numpy', 'all_cupy', 'random']
    })
)
class TestListEqualityAssertion(unittest.TestCase):

    def setUp(self):
        xs = [numpy.random.uniform(-1, 1, (2, 3)) for _ in range(10)]
        ys = copy.deepcopy(xs)
        self.xs = _convert_array(xs, self.array_module_x)
        self.ys = _convert_array(ys, self.array_module_y)

    def test_equality_numpy(self):
        testing.assert_array_list_equal(self.xs, self.ys)

    def test_inequality_numpy(self):
        self.xs[0] += 1
        with self.assertRaisesRegex(
                AssertionError, '^\nArrays are not equal'):
            testing.assert_array_list_equal(self.xs, self.ys)


@testing.parameterize(
    *testing.product({
        'array_module_x': [numpy, cupy],
        'array_module_y': [numpy, cupy]
    })
)
class TestStridesEqualityAssertion(unittest.TestCase):

    def setUp(self):
        val = numpy.random.uniform(-1, 1, (2, 3))
        self.x = self.array_module_x.array(val, val.dtype, copy=True)
        self.y = self.array_module_y.array(val, val.dtype, copy=True)

    def test_equality_numpy(self):
        testing.assert_array_equal(self.x, self.y, strides_check=True)

    def test_inequality_numpy(self):
        self.y = self.array_module_y.asfortranarray(self.y)
        with self.assertRaises(AssertionError):
            testing.assert_array_equal(self.x, self.y, strides_check=True)


@testing.parameterize(
    *testing.product({
        'array_module_x': [numpy, cupy],
        'array_module_y': [numpy, cupy]
    })
)
class TestLessAssertion(unittest.TestCase):

    def setUp(self):
        val = numpy.random.uniform(-1, 1, (2, 3))
        self.x = self.array_module_x.array(val, val.dtype, copy=True)
        self.y = self.array_module_y.array(val + 1, val.dtype, copy=True)

    def test_equality_numpy(self):
        testing.assert_array_less(self.x, self.y)

    def test_inequality_numpy(self):
        self.x[0] += 100
        with self.assertRaises(AssertionError):
            testing.assert_array_less(self.x, self.y)