def miri_params(request): cid, asn_type, asn_name, product_name = request.param pool = combine_pools(t_path('data/pool_007_spec_miri.csv')) gc = constrain_on_candidates((cid, )) rules = registry_level3_only(global_constraints=gc) asns = generate(pool, rules) return asns, asn_type, asn_name, product_name
def test_level3_asn_names_with_version(pool_params): pool_path = helpers.t_path(pool_params) pool = helpers.combine_pools(pool_path) rules = helpers.registry_level3_only() asns = generate(pool, rules, version_id=True) assert len(asns) > 0 for asn in asns: name = asn.asn_name m = re.match(LEVEL3_ASN_WITH_VERSION, name) assert m is not None
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) else: m = re.match(LEVEL3_PRODUCT_NAME_REGEX, product_name) assert m is not None
def test_level3_productname_components_discovered(): rules = registry_level3_only() 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'] == 'a3001' assert matches['target'] == 't001' assert matches['instrument'] == 'miri' assert matches['opt_elem'] == 'f560w'
def test_level3_names(pool_file, global_constraints): rules = registry_level3_only( global_constraints=global_constraints ) pool = AssociationPool.read(pool_file) asns = generate(pool, rules) for asn in asns: product_name = asn['products'][0]['name'] if asn['asn_rule'] == 'Asn_Lv3MIRMRS': m = re.match(LEVEL3_PRODUCT_NAME_NO_OPTELEM_REGEX, product_name) else: m = re.match(LEVEL3_PRODUCT_NAME_REGEX, product_name) assert m is not None assert m.groupdict()['acid'] == 'o002'
def test_duplicate_names(): """ For Level 3 association, there should be no association with the same product name. Generation should produce log messages indicating when duplicate names have been found. """ pool = AssociationPool.read(t_path('data/jw00632_dups.csv')) constrain_all_candidates = constrain_on_candidates(None) rules = registry_level3_only(global_constraints=constrain_all_candidates) with pytest.warns(RuntimeWarning): asns = generate(pool, rules) # There should only be one association left. assert len(asns) == 1
def test_targacq(pool_file): """Test for existence of target acquisitions in associatons""" rules = registry_level3_only() pool = combine_pools(t_path(pool_file)) asns = generate(pool, rules) assert len(asns) > 0 for asn in asns: # Ignore reprocessed asn's with only science if not asn['asn_rule'] in ["Asn_Lv3SpecAux", "Asn_Lv3NRSIFUBackground"]: for product in asn['products']: exptypes = [ member['exptype'].lower() for member in product['members'] ] assert 'target_acquisition' in exptypes
def test_meta(): rules = registry_level3_only() pool = combine_pools(t_path('data/pool_002_image_miri.csv')) asns = generate(pool, rules) assert len(asns) == 1 asn = asns[0] data = asn.data assert data['program'] == '99009' assert data['target'] == 't001' assert data['asn_type'] == 'image3' assert data['asn_id'] == 'a3001' assert data['asn_pool'] == 'pool_002_image_miri' assert data['asn_rule'] == 'Asn_Lv3Image' assert data['degraded_status'] == 'No known degraded exposures in association.' assert data['version_id'] is None assert data['constraints'] is not None
def test_level3_asn_names(pool_params): pool_path = helpers.t_path(pool_params) pool = helpers.combine_pools(pool_path) rules = helpers.registry_level3_only() asns = generate(pool, rules) assert len(asns) > 0 for asn in asns: name = asn.asn_name if any( getattr(c, 'is_acid', False) for c in asn.constraints ): m = re.match(LEVEL3_ASN_ACID_NAME_REGEX, name) else: m = re.match(LEVEL3_ASN_DISCOVERED_NAME_REGEX, name) assert m is not None
def test_multiple_optelems(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_Lv3MIRMRS': m = re.match(LEVEL3_PRODUCT_NAME_REGEX, product_name) assert m is not None try: value = '-'.join(asn.constraints['opt_elem2'].found_values) except KeyError: value = None if value in EMPTY: assert '-' not in m.groupdict()['opt_elem'] else: assert '-' in m.groupdict()['opt_elem']
def test_duplicate_generate(): """Test for duplicate/overwrite association The pool has two exposures, one without a valid `asn_candidate`, and one with a valid observation `asn_candidate`. When set with the "all candidates" constraint, only one association should be made. The prompt for this test was that three associations were being created, two of which were the observation candidate, with the second being a duplicate of the first. The third was an extraneous discovered candidate. """ pool = AssociationPool.read(t_path('data/pool_duplicate.csv')) constrain_all_candidates = constrain_on_candidates(None) rules = registry_level3_only(global_constraints=constrain_all_candidates) asns = generate(pool, rules) assert len(asns) == 1 asn = asns[0] assert asn['asn_type'] == 'image3' assert asn['asn_id'] == 'o029'
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'
"""test_level3_dithers: Test of WFS rules.""" from jwst.associations.tests import helpers from jwst.associations import generate from jwst.associations.main import constrain_on_candidates # Generate Level3 assocations all_candidates = constrain_on_candidates(None) rules = helpers.registry_level3_only(global_constraints=all_candidates) pool = helpers.combine_pools(helpers.t_path('data/pool_004_wfs.csv')) level3_asns = generate(pool, rules) class TestLevel3WFS(helpers.BasePoolRule): pools = [ helpers.PoolParams(path=helpers.t_path('data/pool_004_wfs.csv'), n_asns=42, n_orphaned=0), ] valid_rules = [ 'Asn_Lv3WFSCMB', ] def test_wfs_duplicate_product_names(): """Test for duplicate product names""" global level3_asns