File: test_broadcast.py

package info (click to toggle)
pypy3 7.3.19%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 212,236 kB
  • sloc: python: 2,098,316; ansic: 540,565; sh: 21,462; asm: 14,419; cpp: 4,451; makefile: 4,209; objc: 761; xml: 530; exp: 499; javascript: 314; pascal: 244; lisp: 45; csh: 12; awk: 4
file content (97 lines) | stat: -rw-r--r-- 3,059 bytes parent folder | download | duplicates (8)
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
# -*- encoding: utf-8 -*-

from pypy.module.micronumpy.test.test_base import BaseNumpyAppTest


class AppTestArrayBroadcast(BaseNumpyAppTest):
    def test_broadcast_for_row_and_column(self):
        import numpy as np
        x = np.array([[1], [2], [3]])
        y = np.array([4, 5])
        b = list(np.broadcast(x, y))
        assert b == [(1, 4), (1, 5), (2, 4), (2, 5), (3, 4), (3, 5)]

    def test_broadcast_properties(self):
        import numpy as np
        x = np.array([[1], [2], [3]])
        y = np.array([4, 5])
        b = np.broadcast(x, y)

        assert b.shape == (3, 2)
        assert b.size == 6
        assert b.index == 0

        b.next()
        b.next()

        assert b.shape == (3, 2)
        assert b.size == 6
        assert b.index == 2

    def test_broadcast_from_doctest(self):
        """
        Test from numpy.broadcast doctest.
        """
        import numpy as np
        x = np.array([[1], [2], [3]])
        y = np.array([4, 5, 6])
        reference = np.array([[5., 6., 7.],
                              [6., 7., 8.],
                              [7., 8., 9.]])

        b = np.broadcast(x, y)
        out = np.empty(b.shape)
        out.flat = [u + v for (u, v) in b]

        assert (reference == out).all()
        assert out.dtype == reference.dtype
        assert b.shape == reference.shape

    def test_broadcast_linear(self):
        import numpy as np
        x = np.array([1, 2, 3])
        y = np.array([4, 5, 6])
        b = list(np.broadcast(x, y))
        assert b == [(1, 4), (2, 5), (3, 6)]
        assert b[0][0].dtype == x.dtype

    def test_broadcast_failures(self):
        import numpy as np
        import sys
        x = np.array([1, 2, 3])
        y = np.array([4, 5])
        raises(ValueError, np.broadcast, x, y)
        a = np.empty(2**16,dtype='int8')
        a = a.reshape(-1, 1, 1, 1)
        b = a.reshape(1, -1, 1, 1)
        c = a.reshape(1, 1, -1, 1)
        d = a.reshape(1, 1, 1, -1)
        exc = raises(ValueError, np.broadcast, a, b, c, d)
        assert exc.value[0] == ('broadcast dimensions too large.')

    def test_broadcast_3_args(self):
        import numpy as np
        x = np.array([[[1]], [[2]], [[3]]])
        y = np.array([[[40], [50]]])
        z = np.array([[[700, 800]]])

        b = list(np.broadcast(x, y, z))

        assert b == [(1, 40, 700), (1, 40, 800), (1, 50, 700), (1, 50, 800),
                     (2, 40, 700), (2, 40, 800), (2, 50, 700), (2, 50, 800),
                     (3, 40, 700), (3, 40, 800), (3, 50, 700), (3, 50, 800)]

    def test_number_of_arguments(self):
        """
        Test from numpy unit tests.
        """
        import numpy as np
        arr = np.empty((5,))
        for j in range(35):
            arrs = [arr] * j
            if j < 2 or j > 32:
                exc = raises(ValueError, np.broadcast, *arrs)
                assert exc.value[0] == ('Need at least two and fewer than (32) array objects.')
            else:
                mit = np.broadcast(*arrs)
                assert mit.numiter == j