def test_parse_model_dat(path): """Can we parse the model.dat file (via string or pathlike) There's limited checking of the data since we can't guarantee it won't change significantly over time. """ from sherpa.astro.xspec import get_xspath_manager path = get_xspath_manager() mfile = os.path.join(path, 'model.dat') if path: mfile = pathlib.PurePath(mfile) parsed = xspec.parse_xspec_model_description(mfile) assert len(parsed) > 0 # Check we only have Add, Mul, Con, and Acn types # mtypes = set() for model in parsed: mtypes.add(model.modeltype) assert mtypes == set(["Add", "Mul", "Con", "Acn"])
def test_set_xsstate_path_manager(): """Check set_xsstate works for the manager path """ from sherpa.astro import xspec ostate = xspec.get_xsstate() opath = xspec.get_xspath_manager() spath = ostate['paths'].get('manager', None) # This is just an internal validation check if spath is not None: assert spath == opath if opath == 'b/a': npath = 'a/b' else: npath = 'b/a' nstate = copy.deepcopy(ostate) nstate['paths']['manager'] = npath xspec.set_xsstate(nstate) assert xspec.get_xspath_manager() == npath xspec.set_xsstate(ostate) # Similar to the state xset tests, using an empty # dictionary for paths does not clear out/reset the # manager path. In this case it's not obvious what # should be done (as there's no obvious default value # to use, unless we fall back to the FNINIT-created # value, which is not ideal since there's no guarantee # that we will notice any changes to that logic). # # This is an edge case. # # assert xspec.get_xspath_manager() == opath # assert xspec.get_xsstate() == ostate xspec.set_xspath_manager(opath)
def test_set_xsstate_path_manager(): """Check set_xsstate works for the manager path """ from sherpa.astro import xspec ostate = xspec.get_xsstate() opath = xspec.get_xspath_manager() spath = ostate['paths'].get('manager', None) # This is just an internal validation check if spath is not None: assert spath == opath if opath == 'b/a': npath = 'a/b' else: npath = 'b/a' nstate = copy.deepcopy(ostate) nstate['paths']['manager'] = npath xspec.set_xsstate(nstate) assert xspec.get_xspath_manager() == npath xspec.set_xsstate(ostate) # Similar to the state xset tests, using an empty # dictionary for paths does not clear out/reset the # manager path. In this case it's not obvious what # should be done (as there's no obvious default value # to use, unless we fall back to the FNINIT-created # value, which is not ideal since there's no guarantee # that we will notice any changes to that logic). # # This is an edge case. # # assert xspec.get_xspath_manager() == opath # assert xspec.get_xsstate() == ostate xspec.set_xspath_manager(opath)
def test_manager_path_default(): """Check the expected default setting for the manager path. Ideally this test would be run before any other tests of XSPEC are made (i.e. any XSPEC code is called). """ # Is this always going to be correct? default_path = os.path.join(os.environ['HEADAS'], '../spectral/manager') from sherpa.astro import xspec oval = xspec.get_xspath_manager() # Normalize the paths to remove double / - e.g. if HEADAS is # set to /a/b/c/ rather than /a/b/c. # assert os.path.normpath(oval) == os.path.normpath(default_path)
def test_convert_model_dat(): """Can we convert the model.dat file? This is more just an existence test (i.e. does it work) with limited checking of the output. Checking the warnings that are created by parsing/converting the XSPEC model.dat is tricky to do reliably as it depends on the XSPEC version, so we do not check them (there are specific tests above). """ from sherpa.astro.xspec import get_xspath_manager path = get_xspath_manager() mfile = os.path.join(path, 'model.dat') # We do not check the return value, just that it runs parsed = xspec.parse_xspec_model_description(mfile) xspec.create_xspec_code(parsed)
def test_manager_path_default(): """Check the expected default setting for the manager path. Ideally this test would be run before any other tests of XSPEC are made (i.e. any XSPEC code is called). """ # Is this always going to be correct? default_path = os.path.join(os.environ['HEADAS'], '../spectral/manager') from sherpa.astro import xspec oval = xspec.get_xspath_manager() # Normalize the paths to remove double / - e.g. if HEADAS is # set to /a/b/c/ rather than /a/b/c. # assert os.path.normpath(oval) == os.path.normpath(default_path)