22 """Helpers for writing tests against subclassses of Instrument. 24 These are not tests themselves, but can be subclassed (plus unittest.TestCase) 25 to get a functional test of an Instrument. 31 from lsst.daf.butler
import Registry
32 from lsst.daf.butler
import ButlerConfig
35 @dataclasses.dataclass
37 """Values to test against in sublcasses of `InstrumentTests`. 41 """The name of the Camera this instrument describes.""" 44 """The number of detectors in the Camera.""" 46 firstDetectorName: str
47 """The name of the first detector in the Camera.""" 49 physical_filters: {str}
50 """A subset of the physical filters should be registered.""" 54 """Tests of sublcasses of Instrument. 56 TestCase subclasses must derive from this, then `TestCase`, and override 57 ``data`` and ``instrument``. 61 """`InstrumentTestData` containing the values to test against.""" 64 """The `~lsst.obs.base.Instrument` to be tested.""" 70 """Test that getCamera() returns a reasonable Camera definition. 73 self.assertEqual(camera.getName(), self.
instrument.getName())
74 self.assertEqual(len(camera), self.
data.nDetectors)
75 self.assertEqual(next(iter(camera)).getName(), self.
data.firstDetectorName)
78 """Test that register() sets appropriate Dimensions. 80 registry = Registry.fromConfig(ButlerConfig())
82 self.assertEqual(list(registry.queryDimensions([
"instrument"])), [])
83 self.assertEqual(list(registry.queryDimensions([
"detector"])), [])
84 self.assertEqual(list(registry.queryDimensions([
"physical_filter"])), [])
88 instrumentDataIds = list(registry.queryDimensions([
"instrument"]))
89 self.assertEqual(len(instrumentDataIds), 1)
90 instrumentNames = {dataId[
"instrument"]
for dataId
in instrumentDataIds}
91 self.assertEqual(instrumentNames, {self.
data.name})
92 detectorDataIds = list(registry.queryDimensions([
"detector"]))
93 self.assertEqual(len(detectorDataIds), self.
data.nDetectors)
94 detectorNames = {dataId.records[
"detector"].full_name
for dataId
in detectorDataIds}
95 self.assertIn(self.
data.firstDetectorName, detectorNames)
96 physicalFilterDataIds = list(registry.queryDimensions([
"physical_filter"]))
97 filterNames = {dataId[
'physical_filter']
for dataId
in physicalFilterDataIds}
98 self.assertGreaterEqual(filterNames, self.
data.physical_filters)