Exemplo n.º 1
0
class TestSpecificationSetMetadataSubset(unittest.TestCase):
    """Test creating metadata-based or name and metadata-based subsets
    from a SpecificationSet.
    """

    def setUp(self):
        s1 = ThresholdSpecification(
            Name('validate_drp.AM1.design_r'),
            5. * u.marcsec, '<',
            metadata_query={'filter_name': 'r'})
        s2 = ThresholdSpecification(
            Name('validate_drp.AM1.design_i'),
            5. * u.marcsec, '<',
            metadata_query={'filter_name': 'i'})
        s3 = ThresholdSpecification(
            Name('validate_drp.AM1.design_HSC_r'),
            5. * u.marcsec, '<',
            metadata_query={'filter_name': 'r', 'camera': 'HSC'})
        s4 = ThresholdSpecification(
            Name('validate_drp.PA1.design_r'),
            10 * u.mmag, '<',
            metadata_query={'filter_name': 'r'})
        self.spec_set = SpecificationSet([s1, s2, s3, s4])

    def test_metadata_subset(self):
        """Subset by metadata only."""
        subset = self.spec_set.subset(meta={'filter_name': 'r'})

        self.assertIn('validate_drp.AM1.design_r', subset)
        self.assertNotIn('validate_drp.AM1.design_i', subset)
        self.assertNotIn('validate_drp.AM1.design_HSC_r', subset)
        self.assertNotIn('validate_drp.PA1.design_HSC_r', subset)

    def test_name_and_metadata_subset(self):
        """Subset by name and metadata."""
        subset = self.spec_set.subset(name='validate_drp.AM1',
                                      meta={'filter_name': 'r'})

        self.assertIn('validate_drp.AM1.design_r', subset)
        self.assertNotIn('validate_drp.AM1.design_i', subset)
        self.assertNotIn('validate_drp.AM1.design_HSC_r', subset)
        self.assertNotIn('validate_drp.PA1.design_HSC_r', subset)

    def test_name_subset(self):
        """Subset by name."""
        subset = self.spec_set.subset(name='validate_drp.AM1')

        self.assertIn('validate_drp.AM1.design_r', subset)
        self.assertIn('validate_drp.AM1.design_i', subset)
        self.assertIn('validate_drp.AM1.design_HSC_r', subset)
        self.assertNotIn('validate_drp.PA1.design_HSC_r', subset)
class TestSpecificationSetMetadataSubset(unittest.TestCase):
    """Test creating metadata-based or name and metadata-based subsets
    from a SpecificationSet.
    """

    def setUp(self):
        s1 = ThresholdSpecification(
            Name('validate_drp.AM1.design_r'),
            5. * u.marcsec, '<',
            metadata_query={'filter_name': 'r'})
        s2 = ThresholdSpecification(
            Name('validate_drp.AM1.design_i'),
            5. * u.marcsec, '<',
            metadata_query={'filter_name': 'i'})
        s3 = ThresholdSpecification(
            Name('validate_drp.AM1.design_HSC_r'),
            5. * u.marcsec, '<',
            metadata_query={'filter_name': 'r', 'camera': 'HSC'})
        s4 = ThresholdSpecification(
            Name('validate_drp.PA1.design_r'),
            10 * u.mmag, '<',
            metadata_query={'filter_name': 'r'})
        s5 = ThresholdSpecification(
            Name('validate_drp.AM1.design'),
            5. * u.marcsec, '<',
            metadata_query={})
        self.spec_set = SpecificationSet([s1, s2, s3, s4, s5])

    def test_metadata_subset(self):
        """Subset by metadata only."""
        subset = self.spec_set.subset(meta={'filter_name': 'r'})

        # In because filter_name: r does not conflict with spec
        self.assertIn('validate_drp.AM1.design_r', subset)
        # In because spec has no filter_name metadata query
        self.assertIn('validate_drp.AM1.design', subset)
        # Not in because spec has conflicting filter_name
        self.assertNotIn('validate_drp.AM1.design_i', subset)
        # Not in because spec requires 'camera' term
        self.assertNotIn('validate_drp.AM1.design_HSC_r', subset)
        # In because compatible filter_name
        self.assertIn('validate_drp.PA1.design_r', subset)

    def test_name_and_metadata_subset(self):
        """Subset by name and metadata."""
        subset = self.spec_set.subset(name='validate_drp.AM1',
                                      meta={'filter_name': 'r'})

        # Spec has right metric, compatible metadata query
        self.assertIn('validate_drp.AM1.design_r', subset)
        # Spec has right metric, no metadata query
        self.assertIn('validate_drp.AM1.design', subset)
        # Conflicting filter_name
        self.assertNotIn('validate_drp.AM1.design_i', subset)
        # Requires camera term
        self.assertNotIn('validate_drp.AM1.design_HSC_r', subset)
        # Wrong metric
        self.assertNotIn('validate_drp.PA1.design_r', subset)

    def test_required_metadata_subset(self):
        """Subset by required_meta only."""
        subset = self.spec_set.subset(required_meta={'filter_name': 'r'})

        # In because filter_name: r does not conflict with spec
        self.assertIn('validate_drp.AM1.design_r', subset)
        # Not in because spec has no filter_name metadata query
        self.assertNotIn('validate_drp.AM1.design', subset)
        # Not in because spec has conflicting filter_name
        self.assertNotIn('validate_drp.AM1.design_i', subset)
        # In because spec has compatible filter_name
        self.assertIn('validate_drp.AM1.design_HSC_r', subset)
        # In because compatible filter_name
        self.assertIn('validate_drp.PA1.design_r', subset)

    def test_name_and_required_metadata_subset(self):
        """Subset by name and required_meta."""
        subset = self.spec_set.subset(name='validate_drp.AM1',
                                      required_meta={'filter_name': 'r'})

        # In because AM1.design_r has `filter_name: r`
        self.assertIn('validate_drp.AM1.design_r', subset)
        # This AM1.design spec doesn't have a `filter_name` term.
        self.assertNotIn('validate_drp.AM1.design', subset)
        # Wrong filter_name value
        self.assertNotIn('validate_drp.AM1.design_i', subset)
        # Has the filer_name: r term; ignores camera term.
        self.assertIn('validate_drp.AM1.design_HSC_r', subset)
        # Not in because PA1 metric
        self.assertNotIn('validate_drp.PA1.design_r', subset)

    def test_name_subset(self):
        """Subset by name."""
        subset = self.spec_set.subset(name='validate_drp.AM1')

        # In because AM1 metric
        self.assertIn('validate_drp.AM1.design_r', subset)
        self.assertIn('validate_drp.AM1.design_i', subset)
        self.assertIn('validate_drp.AM1.design_HSC_r', subset)
        # Not in because PA1 metric
        self.assertNotIn('validate_drp.PA1.design_HSC_r', subset)