File: test_core_utils.py

package info (click to toggle)
mayavi2 4.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 21,892 kB
  • sloc: python: 49,447; javascript: 32,885; makefile: 129; fortran: 60
file content (87 lines) | stat: -rw-r--r-- 2,959 bytes parent folder | download | duplicates (4)
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
import unittest
import numpy as np

from tvtk.api import tvtk
from mayavi.core.utils import DataSetHelper
from vtk.numpy_interface import dataset_adapter as dsa


class TestDataSetHelper(unittest.TestCase):
    def _make_data(self, factor=1.0):
        id = tvtk.ImageData(dimensions=(2, 2, 1), origin=(0, 0, 0),
                            spacing=(1, 1, 1))
        id.point_data.scalars = np.arange(4, dtype=float)*factor
        id.point_data.scalars.name = 'ps'
        id.point_data.vectors = np.ones((4, 3), dtype=float)*factor
        id.point_data.vectors.name = 'pv'
        id.cell_data.scalars = np.arange(4, dtype=float)*0.5*factor
        id.cell_data.scalars.name = 'cs'
        id.cell_data.vectors = np.ones((4, 3), dtype=float)*0.5*factor
        id.cell_data.vectors.name = 'cv'
        return id

    def test_get_range_works_for_simple_datasets(self):
        # Given
        id = self._make_data()

        # When
        dsh = DataSetHelper(id)

        # Then
        name, rng = dsh.get_range('scalars', 'point')
        self.assertEqual(name, 'ps')
        self.assertEqual(rng, [0.0, 3.0])

        name, rng = dsh.get_range('scalars', 'cell')
        self.assertEqual(name, 'cs')
        self.assertEqual(rng, [0.0, 1.5])

        name, rng = dsh.get_range('vectors', 'point')
        self.assertEqual(name, 'pv')
        self.assertEqual(rng, [0.0, np.sqrt(3.0)])

        name, rng = dsh.get_range('vectors', 'cell')
        self.assertEqual(name, 'cv')
        self.assertEqual(rng, [0.0, np.sqrt(3.0)*0.5])

    def test_get_range_works_for_multiblock_datasets(self):
        # Given
        id1 = self._make_data()
        id2 = self._make_data(factor=2.0)

        mb = tvtk.MultiBlockDataSet()
        mb.set_block(0, id1)
        mb.set_block(1, id2)

        # When
        dsh = DataSetHelper(mb)

        # Then
        name, rng = dsh.get_range('scalars', 'point')
        self.assertEqual(name, 'ps')
        self.assertEqual(rng, [0.0, 6.0])

        name, rng = dsh.get_range('scalars', 'cell')
        self.assertEqual(name, 'cs')
        self.assertEqual(rng, [0.0, 3.0])

        name, rng = dsh.get_range('vectors', 'point')
        self.assertEqual(name, 'pv')
        self.assertEqual(rng, [0.0, np.sqrt(3.0)*2.0])

        name, rng = dsh.get_range('vectors', 'cell')
        self.assertEqual(name, 'cv')
        self.assertEqual(rng, [0.0, np.sqrt(3.0)])

    def test_get_range_works_for_VTKNoneArray(self):
        id_ = tvtk.ImageData(dimensions=(2, 2, 1), origin=(0, 0, 0),
                             spacing=(1, 1, 1))
        id_.point_data.scalars = np.arange(4, dtype=float)
        dsh = DataSetHelper(id_)
        self.assertFalse(dsh._composite)
        self.assertEqual(dsh.get_range(), (None, [0., 1.]))
        # XXX there is some wackiness here, no idea why this changes!
        self.assertEqual(dsh.get_range(), ('point_scalars', [0., 3.]))

if __name__ == '__main__':
    unittest.main()