Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F81464461
test_buffers.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Sep 6, 05:18
Size
3 KB
Mime Type
text/x-python
Expires
Sun, Sep 8, 05:18 (2 d)
Engine
blob
Format
Raw Data
Handle
20574251
Attached To
R9490 Homework_sp4e_Peruzzo_SáezUribe
test_buffers.py
View Options
import
io
import
struct
import
sys
import
pytest
from
pybind11_tests
import
buffers
as
m
from
pybind11_tests
import
ConstructorStats
PY3
=
sys
.
version_info
[
0
]
>=
3
pytestmark
=
pytest
.
requires_numpy
with
pytest
.
suppress
(
ImportError
):
import
numpy
as
np
def
test_from_python
():
with
pytest
.
raises
(
RuntimeError
)
as
excinfo
:
m
.
Matrix
(
np
.
array
([
1
,
2
,
3
]))
# trying to assign a 1D array
assert
str
(
excinfo
.
value
)
==
"Incompatible buffer format!"
m3
=
np
.
array
([[
1
,
2
,
3
],
[
4
,
5
,
6
]])
.
astype
(
np
.
float32
)
m4
=
m
.
Matrix
(
m3
)
for
i
in
range
(
m4
.
rows
()):
for
j
in
range
(
m4
.
cols
()):
assert
m3
[
i
,
j
]
==
m4
[
i
,
j
]
cstats
=
ConstructorStats
.
get
(
m
.
Matrix
)
assert
cstats
.
alive
()
==
1
del
m3
,
m4
assert
cstats
.
alive
()
==
0
assert
cstats
.
values
()
==
[
"2x3 matrix"
]
assert
cstats
.
copy_constructions
==
0
# assert cstats.move_constructions >= 0 # Don't invoke any
assert
cstats
.
copy_assignments
==
0
assert
cstats
.
move_assignments
==
0
# PyPy: Memory leak in the "np.array(m, copy=False)" call
# https://bitbucket.org/pypy/pypy/issues/2444
@pytest.unsupported_on_pypy
def
test_to_python
():
mat
=
m
.
Matrix
(
5
,
4
)
assert
memoryview
(
mat
)
.
shape
==
(
5
,
4
)
assert
mat
[
2
,
3
]
==
0
mat
[
2
,
3
]
=
4.0
mat
[
3
,
2
]
=
7.0
assert
mat
[
2
,
3
]
==
4
assert
mat
[
3
,
2
]
==
7
assert
struct
.
unpack_from
(
'f'
,
mat
,
(
3
*
4
+
2
)
*
4
)
==
(
7
,
)
assert
struct
.
unpack_from
(
'f'
,
mat
,
(
2
*
4
+
3
)
*
4
)
==
(
4
,
)
mat2
=
np
.
array
(
mat
,
copy
=
False
)
assert
mat2
.
shape
==
(
5
,
4
)
assert
abs
(
mat2
)
.
sum
()
==
11
assert
mat2
[
2
,
3
]
==
4
and
mat2
[
3
,
2
]
==
7
mat2
[
2
,
3
]
=
5
assert
mat2
[
2
,
3
]
==
5
cstats
=
ConstructorStats
.
get
(
m
.
Matrix
)
assert
cstats
.
alive
()
==
1
del
mat
pytest
.
gc_collect
()
assert
cstats
.
alive
()
==
1
del
mat2
# holds a mat reference
pytest
.
gc_collect
()
assert
cstats
.
alive
()
==
0
assert
cstats
.
values
()
==
[
"5x4 matrix"
]
assert
cstats
.
copy_constructions
==
0
# assert cstats.move_constructions >= 0 # Don't invoke any
assert
cstats
.
copy_assignments
==
0
assert
cstats
.
move_assignments
==
0
@pytest.unsupported_on_pypy
def
test_inherited_protocol
():
"""SquareMatrix is derived from Matrix and inherits the buffer protocol"""
matrix
=
m
.
SquareMatrix
(
5
)
assert
memoryview
(
matrix
)
.
shape
==
(
5
,
5
)
assert
np
.
asarray
(
matrix
)
.
shape
==
(
5
,
5
)
@pytest.unsupported_on_pypy
def
test_pointer_to_member_fn
():
for
cls
in
[
m
.
Buffer
,
m
.
ConstBuffer
,
m
.
DerivedBuffer
]:
buf
=
cls
()
buf
.
value
=
0x12345678
value
=
struct
.
unpack
(
'i'
,
bytearray
(
buf
))[
0
]
assert
value
==
0x12345678
@pytest.unsupported_on_pypy
def
test_readonly_buffer
():
buf
=
m
.
BufferReadOnly
(
0x64
)
view
=
memoryview
(
buf
)
assert
view
[
0
]
==
0x64
if
PY3
else
b
'd'
assert
view
.
readonly
@pytest.unsupported_on_pypy
def
test_selective_readonly_buffer
():
buf
=
m
.
BufferReadOnlySelect
()
memoryview
(
buf
)[
0
]
=
0x64
if
PY3
else
b
'd'
assert
buf
.
value
==
0x64
io
.
BytesIO
(
b
'A'
)
.
readinto
(
buf
)
assert
buf
.
value
==
ord
(
b
'A'
)
buf
.
readonly
=
True
with
pytest
.
raises
(
TypeError
):
memoryview
(
buf
)[
0
]
=
0
if
PY3
else
b
'
\0
'
with
pytest
.
raises
(
TypeError
):
io
.
BytesIO
(
b
'1'
)
.
readinto
(
buf
)
Event Timeline
Log In to Comment