def test_frequentist_calculator_one_poi(constraint): with pytest.raises(TypeError): FrequentistCalculator() loss, (mean, sigma) = create_loss(constraint=constraint) calc = FrequentistCalculator(loss, Minuit(), ntoysnull=100, ntoysalt=100) assert calc.ntoysnull == 100 assert calc.ntoysalt == 100 samplers = calc.sampler(floating_params=[mean]) assert all(is_valid_data(s) for s in samplers) loss = calc.toys_loss(mean.name) assert is_valid_loss(loss)
def test_asymptotic_calculator_one_poi(): with pytest.raises(TypeError): AsymptoticCalculator() loss, (mean, sigma) = create_loss() calc = AsymptoticCalculator(loss, Minuit()) poi_null = POIarray(mean, [1.15, 1.2, 1.25]) poi_alt = POI(mean, 1.2) dataset = calc.asimov_dataset(poi_alt) assert all(is_valid_data(d) for d in dataset) loss = calc.asimov_loss(poi_alt) assert is_valid_loss(loss) null_nll = calc.asimov_nll(pois=poi_null, poialt=poi_alt) assert null_nll[0] >= null_nll[1] assert null_nll[2] >= null_nll[1]
def test_toymanager_attributes(): loss, (Nsig, poigen, poieval) = create_loss() tm = ToysManager.from_yaml( f"{notebooks_dir}/toys/discovery_freq_zfit_toys.yml", loss, Minuit() ) with pytest.raises(ParameterNotFound): ToysManager.from_yaml( f"{notebooks_dir}/toys/discovery_freq_zfit_toys.yml", create_loss_1(), Minuit(), ) tr = list(tm.values())[0] assert isinstance(tr, ToyResult) assert list(tm.keys())[0] == (poigen, poigen) assert (poigen, poieval) in tm.keys() assert tm.get_toyresult(poigen, poieval) == tr tr1 = ToyResult(poigen, poieval.append(1)) tm.add_toyresult(tr1) with pytest.raises(TypeError): tm.add_toyresult("tr1") assert (tr1.poigen, tr1.poieval) in tm.keys() tm.to_yaml(f"{pwd}/test_toyutils.yml") tm.to_yaml(f"{pwd}/test_toyutils.yml") tmc = ToysManager.from_yaml(f"{pwd}/test_toyutils.yml", loss, Minuit()) assert ( tm.get_toyresult(poigen, poieval).ntoys == tmc.get_toyresult(poigen, poieval).ntoys ) samplers = tm.sampler(floating_params=[poigen.parameter]) assert all(is_valid_data(s) for s in samplers) loss = tm.toys_loss(poigen.name) assert is_valid_loss(loss) os.remove(f"{pwd}/test_toyutils.yml")
def test_base_calculator(calculator): with pytest.raises(TypeError): calculator() loss, (mean, sigma) = create_loss() with pytest.raises(ValueError): calculator("loss", Minuit()) with pytest.raises(ValueError): calculator(loss, "Minuit()") calc_loss = calculator(loss, Minuit()) with pytest.raises(ValueError): calc_loss.bestfit = "bestfit" bestfit = calc_loss.bestfit calc_fitresult = calculator(bestfit, calc_loss.minimizer) assert calc_loss.bestfit == calc_fitresult.bestfit assert calc_loss.loss == calc_fitresult.loss mean_poi = POIarray(mean, [1.15, 1.2, 1.25]) mean_nll = calc_loss.obs_nll(pois=mean_poi) calc_loss.obs_nll(pois=mean_poi) # get from cache assert mean_nll[0] >= mean_nll[1] assert mean_nll[2] >= mean_nll[1] assert calc_loss.obs_nll(mean_poi[0]) == mean_nll[0] assert calc_loss.obs_nll(mean_poi[1]) == mean_nll[1] assert calc_loss.obs_nll(mean_poi[2]) == mean_nll[2] mean_poialt = POI(mean, 1.2) pvalue = lambda: calc_loss.pvalue(poinull=mean_poi, poialt=mean_poialt) exp_pvalue = lambda: calc_loss.expected_pvalue( poinull=mean_poi, poialt=mean_poialt, nsigma=np.arange(-2, 3, 1) ) exp_poi = lambda: calc_loss.expected_poi( poinull=mean_poi, poialt=mean_poialt, nsigma=np.arange(-2, 3, 1) ) if calculator == BaseCalculator: with pytest.raises(NotImplementedError): pvalue() with pytest.raises(NotImplementedError): exp_pvalue() else: pvalue() exp_pvalue() model = calc_loss.model[0] sampler = model.create_sampler(n=10000) assert is_valid_data(sampler) loss = calc_loss.lossbuilder(model=[model], data=[sampler], weights=None) assert is_valid_loss(loss) with pytest.raises(ValueError): calc_loss.lossbuilder(model=[model, model], data=[sampler]) with pytest.raises(ValueError): calc_loss.lossbuilder(model=[model], data=[sampler, calc_loss.data[0]]) with pytest.raises(ValueError): calc_loss.lossbuilder(model=[model], data=[sampler], weights=[]) with pytest.raises(ValueError): calc_loss.lossbuilder( model=[model], data=[sampler], weights=[np.ones(10000), np.ones(10000)] ) assert calc_loss.get_parameter(mean_poi.name) == mean with pytest.raises(KeyError): calc_loss.get_parameter("dummy_parameter")