def __init__(self, *args, **kwargs): # Setup target acquisition inclusion constraint_acqs = Constraint([ DMSAttrConstraint(name='acq_exp', sources=['exp_type'], value='|'.join(ACQ_EXP_TYPES), force_unique=False), DMSAttrConstraint( name='acq_obsnum', sources=['obs_num'], value=lambda: '(' + '|'.join(self.constraints['obs_num']. found_values) + ')', force_unique=False, ) ], name='acq_constraint', work_over=ProcessList.EXISTING) # Put all constraints together. self.constraints = Constraint([ Constraint_Base(), DMSAttrConstraint(sources=['is_imprt'], force_undefined=True), Constraint([ Constraint( [self.constraints, Constraint_Obsnum()], name='rule'), constraint_acqs ], name='acq_check', reduce=Constraint.any), ], name='dmsbase_bkg') super(AsnMixin_BkgScience, self).__init__(*args, **kwargs)
def __init__(self): super(Constraint_Image_Nonscience, self).__init__( [ Constraint_TargetAcq(), DMSAttrConstraint( name='non_science', sources=['exp_type'], value='|'.join(IMAGE2_NONSCIENCE_EXP_TYPES), ), Constraint( [ DMSAttrConstraint( name='exp_type', sources=['exp_type'], value='nrs_msaspec' ), DMSAttrConstraint( sources=['msastate'], value='primarypark_allopen' ), DMSAttrConstraint( sources=['grating'], value='mirror' ) ] ) ], reduce=Constraint.any )
def __init__(self): super(Constraint_Mode, self).__init__([ DMSAttrConstraint( name='instrument', sources=['instrume'] ), DMSAttrConstraint( name='detector', sources=['detector'] ), DMSAttrConstraint( name='opt_elem', sources=['filter', 'band'] ), DMSAttrConstraint( name='opt_elem2', sources=['pupil', 'grating'], required=False, ), DMSAttrConstraint( name='subarray', sources=['subarray'], required=False, ), DMSAttrConstraint( name='channel', sources=['channel'], required=False, ), Constraint( [ DMSAttrConstraint( sources=['detector'], value='nirspec' ), DMSAttrConstraint( sources=['filter'], value='opaque' ), ], reduce=Constraint.notany ), Constraint( [ DMSAttrConstraint( sources=['visitype'], value='.+wfsc.+', ), ], reduce=Constraint.notany ), DMSAttrConstraint( name='slit', sources=['fxd_slit'], required=False, ) ])
def __init__(self): super(Constraint_Base, self).__init__([ DMSAttrConstraint(name='program', sources=['program']), DMSAttrConstraint( name='is_tso', sources=['tsovisit'], required=False, force_unique=True, ) ])
def __init__(self): super(Constraint_Base, self).__init__([ DMSAttrConstraint( name='program', sources=['program'], ), DMSAttrConstraint( name='instrument', sources=['instrume'], ), ], name='base')
def __init__(self): super(Constraint_MSA, self).__init__([ DMSAttrConstraint(name='exp_type', sources=['exp_type'], value=('nrs_msaspec'), force_unique=False), DMSAttrConstraint( name='is_msa', sources=['msametfl'], force_unique=False, ) ], name='msa_spectral')
def __init__(self): super(Constraint_Optical_Path, self).__init__([ DMSAttrConstraint( name='opt_elem', sources=['filter'], ), DMSAttrConstraint( name='opt_elem2', sources=['pupil', 'grating'], required=False, ), DMSAttrConstraint(name='subarray', sources=['subarray']) ])
def global_constraints(): constraint = DMSAttrConstraint( name='asn_candidate', value=['.+o002.+'], sources=['asn_candidate'], force_unique=True, is_acid=True, evaluate=True, ) return constraint
def __init__(self): super(Constraint_ExtCal, self).__init__( [ DMSAttrConstraint( name='exp_type', sources=['exp_type'], value='nis_extcal' ) ], reduce=Constraint.notany )
def __init__(self): super(Constraint_Mode, self).__init__([ DMSAttrConstraint( name='program', sources=['program'] ), DMSAttrConstraint( name='target', sources=['targetid'], ), DMSAttrConstraint( name='instrument', sources=['instrume'] ), DMSAttrConstraint( name='detector', sources=['detector'] ), DMSAttrConstraint( name='opt_elem', sources=['filter', 'band'] ), DMSAttrConstraint( name='opt_elem2', sources=['pupil', 'grating'], required=False, ), DMSAttrConstraint( name='subarray', sources=['subarray'], required=False, ), DMSAttrConstraint( name='channel', sources=['channel'], required=False, ), DMSAttrConstraint( name='slit', sources=['fxd_slit'], required=False, ) ])
def __init__(self, exclude_exp_types=None): if exclude_exp_types is None: general_science = SPEC2_SCIENCE_EXP_TYPES else: general_science = set(SPEC2_SCIENCE_EXP_TYPES ).symmetric_difference(exclude_exp_types) super(Constraint_Spectral_Science, self).__init__([ DMSAttrConstraint(name='exp_type', sources=['exp_type'], value='|'.join(general_science)) ], reduce=Constraint.any)
def test_level3_productname_components_acid(): global_constraints = DMSAttrConstraint( name='asn_candidate_ids', value='.+o001.+', sources=['asn_candidate'], force_unique=True, is_acid=True, evaluate=True, ) rules = registry_level3_only(global_constraints=global_constraints) pool = combine_pools(t_path('data/pool_002_image_miri.csv')) asns = generate(pool, rules) asn = asns[0] match = re.match(LEVEL3_PRODUCT_NAME_REGEX, asn['products'][0]['name']) assert match is not None matches = match.groupdict() assert matches['program'] == '99009' assert matches['acid'] == 'o001' assert matches['target'] == 't001' assert matches['instrument'] == 'miri' assert matches['opt_elem'] == 'f560w'
def constrain_on_candidates(candidates): """Create a constraint based on a list of candidates Parameters ---------- candidates: (str, ...) or None List of candidate id's. If None, then all candidates are matched. """ if candidates is not None and len(candidates): c_list = '|'.join(candidates) values = ''.join(['.+(', c_list, ').+']) else: values = None constraint = DMSAttrConstraint( name='asn_candidate', sources=['asn_candidate'], value=values, force_unique=True, is_acid=True, evaluate=True, ) return constraint
# Null values EMPTY = (None, '', 'NULL', 'Null', 'null', 'F', 'f', 'N', 'n') pool_file = func_fixture(generate_params, scope='module', params=[ t_path('data/mega_pool.csv'), ]) global_constraints = func_fixture(generate_params, scope='module', params=[ DMSAttrConstraint( name='asn_candidate', value=['.+o002.+'], sources=['asn_candidate'], force_unique=True, is_acid=True, evaluate=True, ), ]) @pytest.mark.slow def test_level35_names(pool_file): rules = registry_level3_only() pool = AssociationPool.read(pool_file) asns = generate(pool, rules) for asn in asns: product_name = asn['products'][0]['name'] if asn['asn_rule'] == 'Asn_IFU': m = re.match(LEVEL3_PRODUCT_NAME_NO_OPTELEM_REGEX, product_name)
'Asn_Dither_Set1', 'Asn_Dither_Set2', 'Asn_WFS_Set1', 'Asn_WFS_Set2' ] for rule in valid_rules: assert rule in rule_names def test_base_instatiation(): """Create an association without any initialization""" assert Association() @pytest.mark.parametrize('constraints, pool, n_asns', [ ( DMSAttrConstraint(name='obs_id', value='V99009001001P0000000002101', sources=['obs_id']), helpers.t_path('data/pool_018_all_exptypes.csv'), 1, ), ( DMSAttrConstraint(name='obs_id', value='junk', sources=['obs_id']), helpers.t_path('data/pool_001_candidates.csv'), 0, ), ( DMSAttrConstraint( name='asn_candidate_id', value='.+(o001|o002).+', sources=['asn_candidate'], force_unique=False,