cython

Форк
0
/
pyarray.pyx 
194 строки · 4.1 Кб
1
# tag: array
2

3
import array  # Python builtin module  
4
from cpython cimport array  # array.pxd / arrayarray.h
5

6
a = array.array('f', [1.0, 2.0, 3.0])
7

8
def test_len(a):
9
    """
10
    >>> a = array.array('f', [1.0, 2.0, 3.0])
11
    >>> len(a)
12
    3
13
    >>> int(test_len(a))
14
    3
15
    >>> assert len(a) == test_len(a)
16
    """
17
    cdef array.array ca = a  # for C-fast array usage
18
    return len(ca)
19

20
def test_copy(a):
21
    """
22
    >>> a = array.array('f', [1.0, 2.0, 3.0])
23
    >>> test_copy(a)
24
    array('f', [1.0, 2.0, 3.0])
25
    """
26
    cdef array.array ca = a
27
    cdef array.array b
28
    b = array.copy(ca)
29
    assert a == b
30
    a[2] = 3.5
31
    assert b[2] != a[2]
32
    return b
33

34

35
def test_fast_access(a):
36
    """
37
    >>> a = array.array('f', [1.0, 2.0, 3.0])
38
    >>> test_fast_access(a)
39
    """
40
    
41
    cdef array.array ca = a
42
    
43
    cdef float value
44
    with nogil:
45
        value = ca.data.as_floats[1]
46
    assert value == 2.0, value
47

48
    #assert ca._c[:5] == b'\x00\x00\x80?\x00', repr(ca._c[:5])
49

50
    with nogil:
51
        ca.data.as_floats[1] += 2.0
52
    assert ca.data.as_floats[1] == 4.0
53

54

55
def test_fast_buffer_access(a):
56
    """
57
    >>> a = array.array('f', [1.0, 2.0, 3.0])
58
    >>> test_fast_buffer_access(a)
59
    """
60
    
61
    cdef array.array[float] ca = a
62
    
63
    cdef float value
64
    with nogil:
65
        value = ca[1]
66
    assert value == 2.0, value
67

68
    with nogil:
69
        ca[1] += 2.0
70
    assert ca[1] == 4.0
71

72

73
def test_new_zero(a):
74
    """
75
    >>> a = array.array('f', [1.0, 2.0, 3.0])
76
    >>> test_new_zero(a)
77
    array('f', [0.0, 0.0, 0.0])
78
    """
79
    cdef array.array cb = array.clone(a, len(a), True)
80
    assert len(cb) == len(a)
81
    return cb
82

83

84
def test_set_zero(a):
85
    """
86
    >>> a = array.array('f', [1.0, 2.0, 3.0])
87
    >>> test_set_zero(a)
88
    array('f', [0.0, 0.0, 0.0])
89
    """
90
    cdef array.array cb = array.copy(a)
91
    array.zero(cb)
92
    assert a[1] != 0.0, a
93
    assert cb[1] == 0.0, cb
94
    return cb
95

96
def test_resize(a):
97
    """
98
    >>> a = array.array('f', [1.0, 2.0, 3.0])
99
    >>> test_resize(a)
100
    """
101
    cdef array.array cb = array.copy(a)
102
    array.resize(cb, 10)
103
    for i in range(10):
104
        cb.data.as_floats[i] = i
105
    assert len(cb) == 10
106
    assert cb[9] == cb[-1] == cb.data.as_floats[9] == 9
107

108
def test_resize_smart(a):
109
    """
110
    >>> a = array.array('d', [1, 2, 3])
111
    >>> test_resize_smart(a)
112
    2
113
    """
114
    cdef array.array cb = array.copy(a)
115
    array.resize_smart(cb, 2)
116
    return len(cb)
117

118
def test_buffer():
119
    """
120
    >>> test_buffer()
121
    """
122
    cdef object a = array.array('i', [1, 2, 3])
123
    cdef object[int] ca = a
124
    assert ca[0] == 1
125
    assert ca[2] == 3
126

127
def test_buffer_typed():
128
    """
129
    >>> test_buffer_typed()
130
    """
131
    cdef array.array a = array.array('i', [1, 2, 3])
132
    cdef object[int] ca = a
133
    assert ca[0] == 1
134
    assert ca[2] == 3
135

136
def test_view():
137
    """
138
    >>> test_view()
139
    """
140
    cdef object a = array.array('i', [1, 2, 3])
141
    cdef int[:] ca = a
142
    assert ca[0] == 1
143
    assert ca[2] == 3
144

145
def test_view_typed():
146
    """
147
    >>> test_view_typed()
148
    """
149
    cdef array.array a = array.array('i', [1, 2, 3])
150
    cdef int[:] ca = a
151
    assert ca[0] == 1
152
    assert ca[2] == 3
153

154
def test_extend():
155
    """
156
    >>> test_extend()
157
    """
158
    cdef array.array ca = array.array('i', [1, 2, 3])
159
    cdef array.array cb = array.array('i', [4, 5])
160
    cdef array.array cf = array.array('f', [1.0, 2.0, 3.0])
161
    array.extend(ca, cb)
162
    assert list(ca) == [1, 2, 3, 4, 5], list(ca)
163
    try:
164
        array.extend(ca, cf)
165
    except TypeError:
166
        pass
167
    else:
168
        assert False, 'extending incompatible array types did not raise'
169

170
def test_likes(a):
171
    """
172
    >>> a = array.array('f', [1.0, 2.0, 3.0])
173
    >>> test_likes(a)
174
    array('f', [0.0, 0.0, 0.0])
175
    """
176
    cdef array.array z = array.clone(a, len(a), True)
177
    cdef array.array e = array.clone(a, len(a), False)
178
    assert len(e) == len(a)
179
    return z
180

181
def test_extend_buffer():
182
    """
183
    >>> test_extend_buffer()
184
    array('l', [15, 37, 389, 5077])
185
    """
186
    cdef array.array ca = array.array('l', [15, 37])
187
    cdef long[2] s
188
    s[0] = 389
189
    s[1] = 5077
190
    array.extend_buffer(ca, <char*> &s, 2)
191

192
    assert ca.data.as_ulongs[3] == 5077
193
    assert len(ca) == 4
194
    return ca
195

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.