def test_reload(self): # Has Metric instance pa1_meas = Measurement( self.metric_set['testing.PA1'], 4. * u.mmag ) # Don't have metric instances am1_meas = Measurement( 'testing.AM1', 2. * u.marcsec ) pa2_meas = Measurement( 'testing.PA2', 10. * u.mmag ) measurements = MeasurementSet([pa1_meas, am1_meas, pa2_meas]) measurements.refresh_metrics(self.metric_set) self.assertIs( measurements['testing.PA1'].metric, self.metric_set['testing.PA1'] ) self.assertIs( measurements['testing.AM1'].metric, self.metric_set['testing.AM1'] ) self.assertIs( measurements['testing.PA2'].metric, self.metric_set['testing.PA2'] )
def test_measurement_set_update(self): meas_set = MeasurementSet([self.pa1_meas, self.am1_meas]) meas_set_2 = MeasurementSet([self.am1_meas, self.pa2_meas]) meas_set.update(meas_set_2) self.assertIs(meas_set['testing.PA1'], self.pa1_meas) self.assertIs(meas_set['testing.PA2'], self.pa2_meas) self.assertIs(meas_set['testing.AM1'], self.am1_meas)
def test_measurement_iadd(self): meas_set = MeasurementSet([self.pa1_meas, self.am1_meas]) meas_set_2 = MeasurementSet([self.am1_meas, self.pa2_meas]) meas_set += meas_set_2 self.assertIs(meas_set['testing.PA1'], self.pa1_meas) self.assertIs(meas_set['testing.PA2'], self.pa2_meas) self.assertIs(meas_set['testing.AM1'], self.am1_meas)
def setUp(self): # Mock metrics self.metric_photrms = Metric('test.PhotRms', 'Photometric RMS', 'mmag') self.metric_photmed = Metric('test.PhotMedian', 'Median magntidue', 'mag') self.metric_set = MetricSet([self.metric_photrms, self.metric_photmed]) # Mock specifications self.spec_photrms_design = ThresholdSpecification( 'test.PhotRms.design', 20. * u.mmag, '<') self.spec_set = SpecificationSet([self.spec_photrms_design]) # Mock measurements self.meas_photrms = Measurement(self.metric_photrms, 15 * u.mmag, notes={'note': 'value'}) self.meas_photrms.extras['n_stars'] = Datum( 250, label='N stars', description='Number of stars included in RMS estimate') self.measurement_set = MeasurementSet([self.meas_photrms]) # Metrics for Job 2 self.metric_test_2 = Metric('test2.SourceCount', 'Source Count', '') self.blob_test_2 = Blob('test2_blob', sn=Datum(50 * u.dimensionless_unscaled, label='S/N')) self.metric_set_2 = MetricSet([self.metric_test_2]) # Specifications for Job 2 self.spec_test_2 = ThresholdSpecification( 'test2.SourceCount.design', 100 * u.dimensionless_unscaled, '>=') self.spec_set_2 = SpecificationSet([self.spec_test_2]) # Measurements for Job 2 self.meas_test_2_SourceCount = Measurement( self.metric_test_2, 200 * u.dimensionless_unscaled) self.meas_test_2_SourceCount.link_blob(self.blob_test_2) self.measurement_set_2 = MeasurementSet([self.meas_test_2_SourceCount])
def test_metric_package_reload(self): # Create a Job without Metric definitions meas = Measurement('validate_drp.PA1', 15 * u.mmag) measurement_set = MeasurementSet([meas]) job = Job(measurements=measurement_set) job.reload_metrics_package('verify_metrics') # Should now have metrics and specs self.assertTrue(len(job.specs) > 0) self.assertTrue(len(job.metrics) > 0) self.assertIsInstance(job.measurements['validate_drp.PA1'].metric, Metric)
def test_measurement_set(self): meas_set = MeasurementSet([self.pa1_meas]) self.assertEqual(len(meas_set), 1) self.assertIn('testing.PA1', meas_set) self.assertIs(self.pa1_meas, meas_set['testing.PA1']) self.assertNotIn('testing.AM1', meas_set) # add an inconsistently labelled measurement with self.assertRaises(KeyError): meas_set['testing.AMx'] = self.am1_meas # Add measurement by key meas_set[self.am1_meas.metric_name] = self.am1_meas self.assertEqual(len(meas_set), 2) self.assertIn('testing.AM1', meas_set) self.assertIs(self.am1_meas, meas_set['testing.AM1']) # Insert measurement meas_set.insert(self.pa2_meas) self.assertEqual(len(meas_set), 3) self.assertIn('testing.PA2', meas_set) self.assertIs(self.pa2_meas, meas_set['testing.PA2']) # Delete measurement del meas_set['testing.PA2'] self.assertNotIn('testing.PA2', meas_set) # Iterate items = {k: v for k, v in meas_set.items()} self.assertEqual(len(items), len(meas_set)) names = [n for n in meas_set] self.assertEqual(len(names), 2) for n in names: self.assertIsInstance(n, Name) # Serialize json_doc = meas_set.json self.assertIsInstance(json_doc, list) self.assertEqual(len(json_doc), 2) for meas in json_doc: self.assertIn('metric', meas) # Deserialize (no blobs/BlobSet to propagate) new_meas_set = MeasurementSet.deserialize( measurements=json_doc, metric_set=self.metric_set) self.assertEqual(meas_set, new_meas_set)