File: test_composite_mapper.py

package info (click to toggle)
python-pyvista 0.46.4-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 176,968 kB
  • sloc: python: 94,346; sh: 216; makefile: 70
file content (178 lines) | stat: -rw-r--r-- 4,929 bytes parent folder | download
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
from __future__ import annotations

import pytest
from vtkmodules.vtkCommonCore import vtkLookupTable

import pyvista as pv
from pyvista.plotting.composite_mapper import BlockAttributes
from pyvista.plotting.composite_mapper import CompositePolyDataMapper


@pytest.fixture
def composite_mapper(multiblock_poly):
    pl = pv.Plotter()
    actor, mapper = pl.add_composite(multiblock_poly)
    return mapper


@pytest.fixture
def block_attributes(composite_mapper):
    return composite_mapper.block_attr


@pytest.fixture
def block_attr(block_attributes):
    return block_attributes[0]


def test_basic_mapper(composite_mapper):
    assert isinstance(composite_mapper, CompositePolyDataMapper)
    assert isinstance(composite_mapper.dataset, pv.MultiBlock)


def test_interpolate_before_map(composite_mapper):
    assert isinstance(composite_mapper.interpolate_before_map, bool)


def test_color_missing_with_nan(composite_mapper):
    assert isinstance(composite_mapper.color_missing_with_nan, bool)


def test_lookup_table(composite_mapper):
    isinstance(composite_mapper.lookup_table, vtkLookupTable)

    table = vtkLookupTable()
    composite_mapper.lookup_table = table
    assert composite_mapper.lookup_table is table


def test_scalar_visibility(composite_mapper):
    isinstance(composite_mapper.scalar_visibility, bool)


def test_scalar_map_mode(composite_mapper):
    isinstance(composite_mapper.scalar_map_mode, str)
    with pytest.raises(ValueError, match='Invalid `scalar_map_mode`'):
        composite_mapper.scalar_map_mode = 'foo'


@pytest.mark.parametrize(
    'value',
    ['default', 'point', 'cell', 'point_field', 'cell_field', 'field'],
)
def test_scalar_map_mode_values(value, composite_mapper):
    composite_mapper.scalar_map_mode = value
    assert composite_mapper.scalar_map_mode == value


def test_composite_mapper_non_poly(multiblock_all):
    # should run without raising
    pl = pv.Plotter()
    actor, mapper = pl.add_composite(multiblock_all)


def test_block_attr(block_attributes):
    block = block_attributes[0]
    assert isinstance(block, BlockAttributes)
    with pytest.raises(KeyError, match='Invalid block key'):
        block_attributes[-1]
    with pytest.raises(KeyError, match='out of bounds'):
        block_attributes[100000]
    with pytest.raises(TypeError):
        block_attributes[0.5]


def test_block_attr_get_item_(multiblock_poly):
    """Verify flat indexing is correct."""
    block_b = multiblock_poly.copy()
    block_c = multiblock_poly.copy()
    block_a = pv.MultiBlock([block_b, block_c])
    pl = pv.Plotter()
    actor, mapper = pl.add_composite(block_a)
    assert len(mapper.block_attr) == len(block_b) + len(block_c) + 3
    with pytest.raises(KeyError):
        mapper.block_attr[len(mapper.block_attr)]


def test_visible(block_attr):
    assert block_attr.visible is None

    visible = True
    block_attr.visible = visible
    assert block_attr.visible is visible

    block_attr.visible = None
    assert block_attr.visible is None


def test_opacity(block_attr):
    # unset must be none
    assert block_attr.opacity is None

    opacity = 0.5
    block_attr.opacity = opacity
    assert block_attr.opacity == opacity

    block_attr.opacity = None
    assert block_attr.opacity is None


def test_color(block_attr):
    # when unset this must be None
    assert block_attr.color is None

    color = 'red'
    block_attr.color = color
    assert block_attr.color == pv.Color(color).float_rgb

    color = (1, 1, 0)
    block_attr.color = color
    assert block_attr.color == pv.Color(color).float_rgb

    block_attr.color = None
    assert block_attr.color is None


def test_attr_repr(block_attr):
    block_attr.visible = True
    block_attr.opacity = 0.9
    block_attr.color = 'blue'
    block_attr.pickable = False

    repr_ = repr(block_attr)
    assert 'True' in repr_
    assert 'False' in repr_
    assert 'blue' in repr_
    assert '0.9' in repr_


def test_block_attributes(block_attributes):
    color = (1.0, 1.0, 1.0)
    pickable = False
    opacity = 0.5
    visible = False
    block_attributes[0].color = color
    block_attributes[0].pickable = pickable
    block_attributes[0].opacity = opacity
    block_attributes[0].visible = visible

    assert block_attributes[0].color == color
    assert block_attributes[0].pickable == pickable
    assert block_attributes[0].opacity == opacity
    assert block_attributes[0].visible == visible

    block_attributes[0].pickable = None
    assert block_attributes[0].pickable is None
    block_attributes[0].pickable = True

    block_attributes.reset_colors()
    assert block_attributes[0].color is None

    block_attributes.reset_pickabilities()
    assert block_attributes[0].pickable is None

    block_attributes.reset_opacities()
    assert block_attributes[0].opacity is None

    block_attributes.reset_visibilities()
    assert block_attributes[0].visible is None