File: sitkProcessObjectTest.py

package info (click to toggle)
simpleitk 1.0.1-3
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 75,056 kB
  • sloc: cpp: 25,403; python: 3,060; sh: 1,131; ansic: 369; java: 260; cs: 215; makefile: 51; ruby: 47; tcl: 22
file content (98 lines) | stat: -rw-r--r-- 3,353 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
#==========================================================================
#
#   Copyright Insight Software Consortium
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#          http://www.apache.org/licenses/LICENSE-2.0.txt
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.
#
#==========================================================================*/
from __future__ import print_function
import sys
import unittest


import SimpleITK as sitk


class ProcessObjectTest(unittest.TestCase):
    """Test the SimpleITK Process Object and related Command classes"""

    def setUp(self):
        pass

    def test_ProcessObject_base(self):
        " Check that ProcessObject is super class of filters"

        # check some manually written filters
        self.assertTrue(issubclass(sitk.CastImageFilter,sitk.ProcessObject))
        self.assertTrue(issubclass(sitk.HashImageFilter,sitk.ProcessObject))
        self.assertTrue(issubclass(sitk.StatisticsImageFilter,sitk.ProcessObject))
        self.assertTrue(issubclass(sitk.LabelStatisticsImageFilter,sitk.ProcessObject))

        # Check some of the different types of generated
        self.assertTrue(issubclass(sitk.AddImageFilter,sitk.ProcessObject))
        self.assertTrue(issubclass(sitk.FastMarchingImageFilter,sitk.ProcessObject))
        self.assertTrue(issubclass(sitk.BinaryDilateImageFilter,sitk.ProcessObject))
        self.assertTrue(issubclass(sitk.GaussianImageSource,sitk.ProcessObject))
        self.assertTrue(issubclass(sitk.JoinSeriesImageFilter,sitk.ProcessObject))


    def test_ProcessObject_lambda_Command(self):
        """Check that the lambda Command on event works"""

        f = sitk.CastImageFilter();

        def s(var,value):
            var[0] = value

        # int/floats are passed by value, use lists to be passed by reference
        start = [0]
        stop = [0]
        p = [0.0]
        f.AddCommand(sitk.sitkStartEvent, lambda start=start: s(start,start[0]+1) )
        f.AddCommand(sitk.sitkStartEvent, lambda stop=stop: s(stop, stop[0]+1) )
        f.AddCommand(sitk.sitkProgressEvent, lambda p=p: s(p, f.GetProgress()) );
        f.Execute(sitk.Image(10,10,sitk.sitkFloat32))

        print( "start: {0} stop: {1} p: {2}".format(start,stop,p))
        self.assertEqual(start,[1])
        self.assertEqual(stop,[1])
        self.assertEqual(p,[1.0])


    def test_ProcessObject_PyCommand(self):
        """Testing PyCommand Class"""

        f = sitk.CastImageFilter();

        p = [0.0]
        def prog():
            p[0] = f.GetProgress();

        cmd = sitk.PyCommand()
        cmd.SetCallbackPyCallable(prog)


        f.AddCommand(sitk.sitkProgressEvent, cmd );
        f.Execute(sitk.Image(10,10,sitk.sitkFloat32))
        self.assertEqual(p,[1.0])

        p = [0.0]
        del cmd


        f.Execute(sitk.Image(10,10,sitk.sitkFloat32))
        self.assertEqual(p,[0.0])


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