def test_paramprompt_single_parameter_check_invalid_max_out_of_bound(caplog): """Note this creates two warnings""" s = Session() s._add_model_types(sherpa.models.basic) s.paramprompt(True) assert len(caplog.records) == 0 with SherpaVerbosity('INFO'): with patch("sys.stdin", StringIO(",,typo\n,,-200")): s.set_source("scale1d.bob") assert len(caplog.records) == 2 lname, lvl, msg = caplog.record_tuples[0] assert lname == "sherpa.ui.utils" assert lvl == logging.INFO assert msg == "Please provide a float value; could not convert string to float: 'typo'" lname, lvl, msg = caplog.record_tuples[1] assert lname == "sherpa.models.parameter" assert lvl == logging.WARN assert msg == "parameter bob.c0 greater than new maximum; bob.c0 reset to -200" mdl = s.get_model_component('bob') assert mdl.c0.val == pytest.approx(-200) assert mdl.c0.min < -3e38 assert mdl.c0.max == pytest.approx(-200) # remove the bob symbol from the global table s.clean()
def test_paramprompt_single_parameter_check_too_many_commas(caplog): """Check we tell users there was a problem""" s = Session() s._add_model_types(sherpa.models.basic) s.paramprompt(True) assert len(caplog.records) == 0 with SherpaVerbosity('INFO'): with patch("sys.stdin", StringIO(",,,,\n12")): s.set_source("scale1d.bob") assert len(caplog.records) == 1 lname, lvl, msg = caplog.record_tuples[0] assert lname == "sherpa.ui.utils" assert lvl == logging.INFO assert msg == "Error: Please provide a comma-separated list of floats; e.g. val,min,max" mdl = s.get_model_component('bob') assert mdl.c0.val == pytest.approx(12) assert mdl.c0.min < -3e38 assert mdl.c0.max > 3e38 # remove the bob symbol from the global table s.clean()
def test_paramprompt_single_parameter_check_invalid_max(caplog): s = Session() s._add_model_types(sherpa.models.basic) s.paramprompt(True) assert len(caplog.records) == 0 with SherpaVerbosity('INFO'): with patch("sys.stdin", StringIO("-2,,typo\n-200,,-2")): s.set_source("scale1d.bob") assert len(caplog.records) == 1 lname, lvl, msg = caplog.record_tuples[0] assert lname == "sherpa.ui.utils" assert lvl == logging.INFO assert msg == "Please provide a float value; could not convert string to float: 'typo'" mdl = s.get_model_component('bob') assert mdl.c0.val == pytest.approx(-200) assert mdl.c0.min < -3e38 assert mdl.c0.max == pytest.approx(-2) # remove the bob symbol from the global table s.clean()
def test_set_log_clean(): """Cleaning the session resets the plot preferences.""" # relies on the tests in test_set_log session = Session() session.set_xlog() session.set_ylog() session.clean() assert not session.get_data_plot_prefs()['xlog'] assert not session.get_data_plot_prefs()['ylog']
def test_save_restore(tmpdir): outfile = tmpdir.join("sherpa.save") session = Session() session.load_arrays(1, TEST, TEST2) session.save(str(outfile), clobber=True) session.clean() assert set() == set(session.list_data_ids()) session.restore(str(outfile)) assert {1, } == set(session.list_data_ids()) assert_array_equal(TEST, session.get_data(1).get_indep()[0]) assert_array_equal(TEST2, session.get_data(1).get_dep())
def test_add_user_pars_modelname_not_a_model2(): """Use an actual model, but not a user model""" s = Session() s._add_model_types(sherpa.models.basic) s.create_model_component('scale1d', 'foo') with pytest.raises(ArgumentTypeErr) as exc: s.add_user_pars('foo', ['x']) assert str(exc.value) == "'foo' must be a user model" # remove the foo symbol from the global table s.clean()
def test_paramprompt_single_parameter_combo_works(caplog): s = Session() s._add_model_types(sherpa.models.basic) s.paramprompt(True) assert len(caplog.records) == 0 with SherpaVerbosity('INFO'): with patch("sys.stdin", StringIO("-2,-10,10")): s.set_source("scale1d.bob") assert len(caplog.records) == 0 mdl = s.get_model_component('bob') assert mdl.c0.val == pytest.approx(-2) assert mdl.c0.min == pytest.approx(-10) assert mdl.c0.max == pytest.approx(10) # remove the bob symbol from the global table s.clean()
def test_delete_model_component_warning(caplog): """Check we get a warning (which ends up being issue #16)""" s = Session() s._add_model_types(sherpa.models.basic) s.set_source('const1d.mdl + gauss1d.mdl2') assert s.list_model_components() == ['mdl', 'mdl2'] assert len(caplog.records) == 0 s.delete_model_component('mdl2') assert len(caplog.records) == 1 lname, lvl, msg = caplog.record_tuples[0] assert lname == "sherpa.ui.utils" assert lvl == logging.WARNING assert msg == "the model component 'gauss1d.mdl2' is found in model 1 and cannot be deleted" assert s.list_model_components() == ['mdl', 'mdl2'] # remove the mdl1 and mdl2 symbols from the global table s.clean()
def test_paramprompt_eof(caplog): """What happens when we end early?""" s = Session() s._add_model_types(sherpa.models.basic) cpt1 = s.create_model_component('const1d', 'bob') cpt2 = s.create_model_component('gauss1d', 'fred') s.paramprompt(True) assert len(caplog.records) == 0 with pytest.raises(EOFError): with SherpaVerbosity('INFO'): with patch("sys.stdin", StringIO("\n5,1,5\n2\n")): s.set_source(bob + fred) assert len(caplog.records) == 0 assert cpt1.c0.val == pytest.approx(1) assert cpt1.c0.min < -3e38 assert cpt1.c0.max > 3e38 assert cpt2.fwhm.val == pytest.approx(5) assert cpt2.fwhm.min == pytest.approx(1) assert cpt2.fwhm.max == pytest.approx(5) assert cpt2.pos.val == pytest.approx(2) assert cpt2.pos.min < -3e38 assert cpt2.pos.max > 3e38 assert cpt2.ampl.val == pytest.approx(1) assert cpt2.ampl.min < -3e38 assert cpt2.ampl.max > 3e38 # remove the bob and fred symbols from the global table s.clean()
def test_paramprompt_multi_parameter(caplog): """Check that paramprompt works with multiple parameters""" s = Session() s._add_model_types(sherpa.models.basic) cpt1 = s.create_model_component('const1d', 'bob') cpt2 = s.create_model_component('gauss1d', 'fred') s.paramprompt(True) assert len(caplog.records) == 0 with SherpaVerbosity('INFO'): with patch("sys.stdin", StringIO("\n5,1,5\n\n-5, -5, 0")): s.set_source(bob + fred) assert len(caplog.records) == 0 assert cpt1.c0.val == pytest.approx(1) assert cpt1.c0.min < -3e38 assert cpt1.c0.max > 3e38 assert cpt2.fwhm.val == pytest.approx(5) assert cpt2.fwhm.min == pytest.approx(1) assert cpt2.fwhm.max == pytest.approx(5) assert cpt2.pos.val == pytest.approx(0) assert cpt2.pos.min < -3e38 assert cpt2.pos.max > 3e38 assert cpt2.ampl.val == pytest.approx(-5) assert cpt2.ampl.min == pytest.approx(-5) assert cpt2.ampl.max == pytest.approx(0) # remove the bob and fred symbols from the global table s.clean()