Coverage for tests/test_metrics.py : 25%

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
# This file is part of ap_association. # # Developed for the LSST Data Management System. # This product includes software developed by the LSST Project # (https://www.lsst.org). # See the COPYRIGHT file at the top-level directory of this distribution # for details of code ownership. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>.
NumberNewDiaObjectsMetricTask, \ NumberUnassociatedDiaObjectsMetricTask, \ FractionUpdatedDiaObjectsMetricTask, \ TotalUnassociatedDiaObjectsMetricTask
metadata = PropertySet() metadata.add("association.numUpdatedDiaObjects", numUpdated) metadata.add("association.numNewDiaObjects", numNew) metadata.add("association.numUnassociatedDiaObjects", numUnassociated) return metadata
def makeTask(cls): return NumberNewDiaObjectsMetricTask()
metadata = _makeAssociationMetadata() result = self.task.run([metadata]) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.numNewDiaObjects")) self.assertEqual(meas.quantity, metadata.getAsDouble("association.numNewDiaObjects") * u.count)
metadata = _makeAssociationMetadata(numNew=0) result = self.task.run([metadata]) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.numNewDiaObjects")) self.assertEqual(meas.quantity, 0.0 * u.count)
result = self.task.run([None]) meas = result.measurement self.assertIsNone(meas)
result = self.task.run([]) meas = result.measurement self.assertIsNone(meas)
result = self.task.run([PropertySet()]) meas = result.measurement self.assertIsNone(meas)
metadata = _makeAssociationMetadata() metadata.set("association.numNewDiaObjects", "Ultimate Answer")
with self.assertRaises(MetricComputationError): self.task.run([metadata])
config = self.taskClass.ConfigClass() config.metadata.name = "test_metadata" types = self.taskClass.getInputDatasetTypes(config) # dict.keys() is a collections.abc.Set, which has a narrower interface than __builtins__.set... self.assertSetEqual(set(types.keys()), {"metadata"}) self.assertEqual(types["metadata"], "test_metadata")
metadata = _makeAssociationMetadata() inputData = {"metadata": [metadata]} inputDataIds = {"metadata": [{"visit": 42, "ccd": 1}]} outputDataId = {"measurement": {"visit": 42, "ccd": 1}} measDirect = self.task.run([metadata]).measurement measIndirect = self.task.adaptArgsAndRun(inputData, inputDataIds, outputDataId).measurement
assert_quantity_allclose(measIndirect.quantity, measDirect.quantity)
metadata = _makeAssociationMetadata() nCcds = 3 inputData = {"metadata": [metadata] * nCcds} inputDataIds = {"metadata": [{"visit": 42, "ccd": x} for x in range(nCcds)]} outputDataId = {"measurement": {"visit": 42}} measDirect = self.task.run([metadata]).measurement measMany = self.task.adaptArgsAndRun(inputData, inputDataIds, outputDataId).measurement
assert_quantity_allclose(measMany.quantity, nCcds * measDirect.quantity)
def makeTask(cls): return NumberUnassociatedDiaObjectsMetricTask()
metadata = _makeAssociationMetadata() result = self.task.run([metadata]) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.numUnassociatedDiaObjects")) self.assertEqual(meas.quantity, metadata.getAsDouble("association.numUnassociatedDiaObjects") * u.count)
metadata = _makeAssociationMetadata(numUnassociated=0) result = self.task.run([metadata]) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.numUnassociatedDiaObjects")) self.assertEqual(meas.quantity, 0.0 * u.count)
result = self.task.run([None]) meas = result.measurement self.assertIsNone(meas)
result = self.task.run([]) meas = result.measurement self.assertIsNone(meas)
result = self.task.run([PropertySet()]) meas = result.measurement self.assertIsNone(meas)
metadata = _makeAssociationMetadata() metadata.set("association.numUnassociatedDiaObjects", "Ultimate Answer")
with self.assertRaises(MetricComputationError): self.task.run([metadata])
config = self.taskClass.ConfigClass() config.metadata.name = "test_metadata" types = self.taskClass.getInputDatasetTypes(config) # dict.keys() is a collections.abc.Set, which has a narrower interface than __builtins__.set... self.assertSetEqual(set(types.keys()), {"metadata"}) self.assertEqual(types["metadata"], "test_metadata")
metadata = _makeAssociationMetadata() inputData = {"metadata": [metadata]} inputDataIds = {"metadata": [{"visit": 42, "ccd": 1}]} outputDataId = {"measurement": {"visit": 42, "ccd": 1}} measDirect = self.task.run([metadata]).measurement measIndirect = self.task.adaptArgsAndRun(inputData, inputDataIds, outputDataId).measurement
assert_quantity_allclose(measIndirect.quantity, measDirect.quantity)
metadata = _makeAssociationMetadata() nCcds = 3 inputData = {"metadata": [metadata] * nCcds} inputDataIds = {"metadata": [{"visit": 42, "ccd": x} for x in range(nCcds)]} outputDataId = {"measurement": {"visit": 42}} measDirect = self.task.run([metadata]).measurement measMany = self.task.adaptArgsAndRun(inputData, inputDataIds, outputDataId).measurement
assert_quantity_allclose(measMany.quantity, nCcds * measDirect.quantity)
def makeTask(cls): return FractionUpdatedDiaObjectsMetricTask()
metadata = _makeAssociationMetadata() result = self.task.run([metadata]) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.fracUpdatedDiaObjects")) nUpdated = metadata.getAsDouble("association.numUpdatedDiaObjects") nTotal = metadata.getAsDouble("association.numUnassociatedDiaObjects") + nUpdated self.assertEqual(meas.quantity, nUpdated / nTotal * u.dimensionless_unscaled)
metadata = _makeAssociationMetadata(numUpdated=0) result = self.task.run([metadata]) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.fracUpdatedDiaObjects")) self.assertEqual(meas.quantity, 0.0 * u.dimensionless_unscaled)
metadata = _makeAssociationMetadata(numUnassociated=0) result = self.task.run([metadata]) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.fracUpdatedDiaObjects")) self.assertEqual(meas.quantity, 1.0 * u.dimensionless_unscaled)
metadata = _makeAssociationMetadata(numUpdated=0, numUnassociated=0) with self.assertRaises(MetricComputationError): self.task.run([metadata])
result = self.task.run([None]) meas = result.measurement self.assertIsNone(meas)
result = self.task.run([]) meas = result.measurement self.assertIsNone(meas)
result = self.task.run([PropertySet()]) meas = result.measurement self.assertIsNone(meas)
metadata = _makeAssociationMetadata() metadata.set("association.numUnassociatedDiaObjects", "Ultimate Answer")
with self.assertRaises(MetricComputationError): self.task.run([metadata])
config = self.taskClass.ConfigClass() config.metadata.name = "test_metadata" types = self.taskClass.getInputDatasetTypes(config) # dict.keys() is a collections.abc.Set, which has a narrower interface than __builtins__.set... self.assertSetEqual(set(types.keys()), {"metadata"}) self.assertEqual(types["metadata"], "test_metadata")
metadata = _makeAssociationMetadata() inputData = {"metadata": [metadata]} inputDataIds = {"metadata": [{"visit": 42, "ccd": 1}]} outputDataId = {"measurement": {"visit": 42, "ccd": 1}} measDirect = self.task.run([metadata]).measurement measIndirect = self.task.adaptArgsAndRun(inputData, inputDataIds, outputDataId).measurement
assert_quantity_allclose(measIndirect.quantity, measDirect.quantity)
metadata = _makeAssociationMetadata() nCcds = 3 inputData = {"metadata": [metadata] * nCcds} inputDataIds = {"metadata": [{"visit": 42, "ccd": x} for x in range(nCcds)]} outputDataId = {"measurement": {"visit": 42}} measDirect = self.task.run([metadata]).measurement measMany = self.task.adaptArgsAndRun(inputData, inputDataIds, outputDataId).measurement
assert_quantity_allclose(measMany.quantity, measDirect.quantity)
def _makePpdb(): ppdb = unittest.mock.Mock(Ppdb) return ppdb
def makeTask(cls): class SimpleDbLoader(Task): ConfigClass = Config
def run(self, dummy): if dummy is not None: return Struct(ppdb=cls._makePpdb()) else: return Struct(ppdb=None)
config = TotalUnassociatedDiaObjectsMetricTask.ConfigClass() config.dbLoader.retarget(SimpleDbLoader) return TotalUnassociatedDiaObjectsMetricTask(config=config)
super().setUp() # Do the patch here to avoid passing extra arguments to superclass tests patcher = unittest.mock.patch("lsst.ap.association.metrics.countUnassociatedObjects", return_value=42) self.mockCounter = patcher.start() self.addCleanup(patcher.stop)
result = self.task.adaptArgsAndRun({"dbInfo": "DB source"}, {"dbInfo": {}}, {"measurement": {}}) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.totalUnassociatedDiaObjects")) nObjects = self.mockCounter(self._makePpdb()) self.assertEqual(meas.quantity, nObjects * u.count)
with unittest.mock.patch("lsst.ap.association.metrics.countUnassociatedObjects", return_value=0): result = self.task.adaptArgsAndRun({"dbInfo": "DB source"}, {"dbInfo": {}}, {"measurement": {}}) meas = result.measurement
self.assertEqual(meas.metric_name, Name(metric="ap_association.totalUnassociatedDiaObjects")) self.assertEqual(meas.quantity, 0.0 * u.count)
result = self.task.adaptArgsAndRun({"dbInfo": None}, {"dbInfo": {}}, {"measurement": {}}) meas = result.measurement self.assertIsNone(meas)
with self.assertRaises(ValueError): self.task.adaptArgsAndRun({"dbInfo": "DB source"}, {"dbInfo": {}}, {"measurement": {"visit": 42}})
config = self.taskClass.ConfigClass() config.dbInfo.name = "absolutely anything" types = self.taskClass.getInputDatasetTypes(config) # dict.keys() is a collections.abc.Set, which has a narrower interface than __builtins__.set... self.assertSetEqual(set(types.keys()), {"dbInfo"}) self.assertEqual(types["dbInfo"], "absolutely anything")
# Override because of non-standard adaptArgsAndRun dummy = Measurement('foo.bar', 0.0) with unittest.mock.patch.multiple( self.taskClass, autospec=True, makeMeasurement=unittest.mock.DEFAULT, addStandardMetadata=unittest.mock.DEFAULT) as mockDict: mockDict['makeMeasurement'].return_value = Struct(measurement=dummy)
dataId = {} result = self.task.adaptArgsAndRun( {"dbInfo": "DB Source"}, {"dbInfo": dataId}, {'measurement': dataId}) mockDict['addStandardMetadata'].assert_called_once_with( self.task, result.measurement, dataId)
# Hack around unittest's hacky test setup system
lsst.utils.tests.init()
lsst.utils.tests.init() unittest.main() |