Coverage for tests/test_pipeline.py : 42%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of pipe_base.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (http://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
22"""Simple unit test for Pipeline.
23"""
25import unittest
27import lsst.pex.config as pexConfig
28from lsst.pipe.base import (Struct, PipelineTask, PipelineTaskConfig, Pipeline, TaskDef,
29 PipelineTaskConnections)
30import lsst.utils.tests
33class DummyConnections(PipelineTaskConnections, dimensions=()):
34 pass
37class AddConfig(PipelineTaskConfig, pipelineConnections=DummyConnections):
38 addend = pexConfig.Field(doc="amount to add", dtype=float, default=3.1)
41class AddTask(PipelineTask):
42 ConfigClass = AddConfig
44 def run(self, val):
45 self.metadata.add("add", self.config.addend)
46 return Struct(
47 val=val + self.config.addend,
48 )
51class MultConfig(PipelineTaskConfig, pipelineConnections=DummyConnections):
52 multiplicand = pexConfig.Field(doc="amount by which to multiply", dtype=float, default=2.5)
55class MultTask(PipelineTask):
56 ConfigClass = MultConfig
58 def run(self, val):
59 self.metadata.add("mult", self.config.multiplicand)
60 return Struct(
61 val=val * self.config.multiplicand,
62 )
65class TaskTestCase(unittest.TestCase):
66 """A test case for Task
67 """
69 def setUp(self):
70 pass
72 def tearDown(self):
73 pass
75 def testTaskDef(self):
76 """Tests for TaskDef structure
77 """
78 task1 = TaskDef("lsst.pipe.base.tests.Add", AddConfig())
79 self.assertEqual(task1.taskName, "lsst.pipe.base.tests.Add")
80 self.assertIsInstance(task1.config, AddConfig)
81 self.assertIsNone(task1.taskClass)
82 self.assertEqual(task1.label, "")
84 task2 = TaskDef("lsst.pipe.base.tests.Mult", MultConfig(), MultTask, "mult_task")
85 self.assertEqual(task2.taskName, "lsst.pipe.base.tests.Mult")
86 self.assertIsInstance(task2.config, MultConfig)
87 self.assertIs(task2.taskClass, MultTask)
88 self.assertEqual(task2.label, "mult_task")
89 self.assertEqual(task2.metadataDatasetName, "mult_task_metadata")
91 config = MultConfig()
92 config.saveMetadata = False
93 task3 = TaskDef("lsst.pipe.base.tests.Mult", config, MultTask, "mult_task")
94 self.assertIsNone(task3.metadataDatasetName)
96 def testEmpty(self):
97 """Creating empty pipeline
98 """
99 pipeline = Pipeline("test")
100 self.assertEqual(len(pipeline), 0)
102 def testInitial(self):
103 """Testing constructor with initial data
104 """
105 pipeline = Pipeline("test")
106 pipeline.addTask(AddTask, "add")
107 pipeline.addTask(MultTask, "mult")
108 self.assertEqual(len(pipeline), 2)
109 expandedPipeline = list(pipeline.toExpandedPipeline())
110 self.assertEqual(expandedPipeline[0].taskName, "AddTask")
111 self.assertEqual(expandedPipeline[1].taskName, "MultTask")
113 def testSerialization(self):
114 pipeline = Pipeline("test")
115 pipeline.addTask(AddTask, "add")
116 pipeline.addTask(MultTask, "mult")
117 dump = str(pipeline)
118 load = Pipeline.fromString(dump)
119 self.assertEqual(pipeline, load)
122class MyMemoryTestCase(lsst.utils.tests.MemoryTestCase):
123 pass
126def setup_module(module):
127 lsst.utils.tests.init()
130if __name__ == "__main__": 130 ↛ 131line 130 didn't jump to line 131, because the condition on line 130 was never true
131 lsst.utils.tests.init()
132 unittest.main()