forked from pyvista/pyvista
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_container.py
252 lines (223 loc) · 8.31 KB
/
test_container.py
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
import os
from subprocess import PIPE, Popen
import numpy as np
import pytest
import vtk
import pyvista
from pyvista import examples as ex
from pyvista.plotting import system_supports_plotting
def test_multi_block_init_vtk():
multi = vtk.vtkMultiBlockDataSet()
multi.SetBlock(0, vtk.vtkRectilinearGrid())
multi.SetBlock(1, vtk.vtkTable())
multi = pyvista.MultiBlock(multi)
assert isinstance(multi, pyvista.MultiBlock)
assert multi.n_blocks == 2
assert isinstance(multi[0], pyvista.RectilinearGrid)
assert isinstance(multi[1], vtk.vtkTable)
multi = vtk.vtkMultiBlockDataSet()
multi.SetBlock(0, vtk.vtkRectilinearGrid())
multi.SetBlock(1, vtk.vtkTable())
multi = pyvista.MultiBlock(multi, deep=True)
assert isinstance(multi, pyvista.MultiBlock)
assert multi.n_blocks == 2
assert isinstance(multi[0], pyvista.RectilinearGrid)
assert isinstance(multi[1], vtk.vtkTable)
def test_multi_block_init_dict():
data = dict()
data['grid'] = ex.load_rectilinear()
data['poly'] = ex.load_airplane()
multi = pyvista.MultiBlock(data)
assert isinstance(multi, pyvista.MultiBlock)
assert multi.n_blocks == 2
# Note that disctionaries do not maintain order
assert isinstance(multi[0], (pyvista.RectilinearGrid, pyvista.PolyData))
assert multi.get_block_name(0) in ['grid','poly']
assert isinstance(multi[1], (pyvista.RectilinearGrid, pyvista.PolyData))
assert multi.get_block_name(1) in ['grid','poly']
def test_multi_block_init_list():
data = [ex.load_rectilinear(), ex.load_airplane()]
multi = pyvista.MultiBlock(data)
assert isinstance(multi, pyvista.MultiBlock)
assert multi.n_blocks == 2
assert isinstance(multi[0], pyvista.RectilinearGrid)
assert isinstance(multi[1], pyvista.PolyData)
def test_multi_block_append():
"""This puts all of the example data objects into a a MultiBlock container"""
multi = pyvista.MultiBlock()
# Add examples
multi.append(ex.load_ant())
multi.append(ex.load_sphere())
multi.append(ex.load_uniform())
multi.append(ex.load_airplane())
multi.append(ex.load_rectilinear())
# Now check everything
assert multi.n_blocks == 5
assert multi.bounds is not None
assert isinstance(multi[0], pyvista.PolyData)
assert isinstance(multi[1], pyvista.PolyData)
assert isinstance(multi[2], pyvista.UniformGrid)
assert isinstance(multi[3], pyvista.PolyData)
assert isinstance(multi[4], pyvista.RectilinearGrid)
# Now overwrite a block
multi[4] = pyvista.Sphere()
assert isinstance(multi[4], pyvista.PolyData)
multi[4] = vtk.vtkUnstructuredGrid()
assert isinstance(multi[4], pyvista.UnstructuredGrid)
def test_multi_block_set_get_ers():
"""This puts all of the example data objects into a a MultiBlock container"""
multi = pyvista.MultiBlock()
# Set the number of blocks
multi.n_blocks = 6
assert multi.GetNumberOfBlocks() == 6 # Check that VTK side registered it
assert multi.n_blocks == 6 # Check pyvista side registered it
# Add data to the MultiBlock
data = ex.load_rectilinear()
multi[1, 'rect'] = data
# Make sure number of blocks is constant
assert multi.n_blocks == 6
# Check content
assert isinstance(multi[1], pyvista.RectilinearGrid)
for i in [0,2,3,4,5]:
assert multi[i] == None
# Check the bounds
assert multi.bounds == list(data.bounds)
multi[5] = ex.load_uniform()
multi.set_block_name(5, 'uni')
multi.set_block_name(5, None) # Make sure it doesn't get overwritten
assert isinstance(multi.get(5), pyvista.UniformGrid)
# Test get by name
assert isinstance(multi['uni'], pyvista.UniformGrid)
assert isinstance(multi['rect'], pyvista.RectilinearGrid)
# Test the del operator
del multi[0]
assert multi.n_blocks == 5
# Make sure the rect grid was moved up
assert isinstance(multi[0], pyvista.RectilinearGrid)
assert multi.get_block_name(0) == 'rect'
assert multi.get_block_name(2) == None
# test del by name
del multi['uni']
assert multi.n_blocks == 4
# test the pop operator
pop = multi.pop(0)
assert isinstance(pop, pyvista.RectilinearGrid)
assert multi.n_blocks == 3
assert multi.get_block_name(10) is None
with pytest.raises(KeyError):
idx = multi.get_index_by_name('foo')
# def test_mutli_block_clean():
# # now test a clean of the null values
# multi = pyvista.MultiBlock()
# multi[1, 'rect'] = ex.load_rectilinear()
# multi[5, 'uni'] = ex.load_uniform()
# # perfromt he clean to remove all Null elements
# multi.clean()
# assert multi.n_blocks == 2
# assert multi.GetNumberOfBlocks() == 2
# assert isinstance(multi[0], pyvista.RectilinearGrid)
# assert isinstance(multi[1], pyvista.UniformGrid)
# assert multi.get_block_name(0) == 'rect'
# assert multi.get_block_name(1) == 'uni'
def test_multi_block_repr():
multi = pyvista.MultiBlock()
# Add examples
multi.append(ex.load_ant())
multi.append(ex.load_sphere())
multi.append(ex.load_uniform())
multi.append(ex.load_airplane())
multi.append(None)
# Now check everything
assert multi.n_blocks == 5
assert multi._repr_html_() is not None
@pytest.mark.parametrize('binary', [True, False])
@pytest.mark.parametrize('extension', ['vtm', 'vtmb'])
def test_multi_block_io(extension, binary, tmpdir):
filename = str(tmpdir.mkdir("tmpdir").join('tmp.%s' % extension))
multi = pyvista.MultiBlock()
# Add examples
multi.append(ex.load_ant())
multi.append(ex.load_sphere())
multi.append(ex.load_uniform())
multi.append(ex.load_airplane())
multi.append(ex.load_globe())
# Now check everything
assert multi.n_blocks == 5
# Save it out
multi.save(filename, binary)
foo = pyvista.MultiBlock(filename)
assert foo.n_blocks == multi.n_blocks
foo = pyvista.read(filename)
assert foo.n_blocks == multi.n_blocks
def test_multi_io_erros(tmpdir):
fdir = tmpdir.mkdir("tmpdir")
multi = pyvista.MultiBlock()
# Check saving with bad extension
bad_ext_name = str(fdir.join('tmp.%s' % 'npy'))
with pytest.raises(Exception):
multi.save(bad_ext_name)
arr = np.random.rand(10, 10)
np.save(bad_ext_name, arr)
# Load non existing file
with pytest.raises(Exception):
data = pyvista.MultiBlock('foo.vtm')
# Load bad extension
with pytest.raises(IOError):
data = pyvista.MultiBlock(bad_ext_name)
def test_extract_geometry():
multi = pyvista.MultiBlock()
# Add examples
multi.append(ex.load_ant())
multi.append(ex.load_sphere())
multi.append(ex.load_uniform())
multi.append(ex.load_airplane())
multi.append(ex.load_globe())
# Now check everything
assert multi.n_blocks == 5
# Now apply the geometry filter to combine a plethora of data blocks
geom = multi.extract_geometry()
assert isinstance(geom, pyvista.PolyData)
def test_combine_filter():
multi = pyvista.MultiBlock()
# Add examples
multi.append(ex.load_ant())
multi.append(ex.load_sphere())
multi.append(ex.load_uniform())
multi.append(ex.load_airplane())
multi.append(ex.load_globe())
# Now check everything
assert multi.n_blocks == 5
# Now apply the geometry filter to combine a plethora of data blocks
geom = multi.combine()
assert isinstance(geom, pyvista.UnstructuredGrid)
def test_multi_block_copy():
multi = pyvista.MultiBlock()
# Add examples
multi.append(ex.load_ant())
multi.append(ex.load_sphere())
multi.append(ex.load_uniform())
multi.append(ex.load_airplane())
multi.append(ex.load_globe())
# Now check everything
newobj = multi.copy()
assert multi.n_blocks == 5 == newobj.n_blocks
assert id(multi[0]) != id(newobj[0])
assert id(multi[-1]) != id(newobj[-1])
return
def test_multi_block_negative_index():
multi = pyvista.MultiBlock()
# Add examples
multi.append(ex.load_ant())
multi.append(ex.load_sphere())
multi.append(ex.load_uniform())
multi.append(ex.load_airplane())
multi.append(ex.load_globe())
# Now check everything
assert id(multi[-1]) == id(multi[4])
assert id(multi[-2]) == id(multi[3])
assert id(multi[-3]) == id(multi[2])
assert id(multi[-4]) == id(multi[1])
assert id(multi[-5]) == id(multi[0])
with pytest.raises(IndexError):
foo = multi[-6]
return