def test_policies(self): ensemble = ModelEnsemble() policy = {'name': 'test'} ensemble.policies = policy ensemble = ModelEnsemble() policies = [{'name': 'test'}, {'name': 'test2'}] ensemble.policies = policies
def test_model_structures(self): model_a = DummyInterface(None, "A") ensemble = ModelEnsemble() ensemble.model_structure = model_a self.assertEqual(ensemble.model_structure, model_a) model_a = DummyInterface(None, "A") model_b = DummyInterface(None, "B") ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b] self.assertEqual(list(ensemble.model_structures), [model_a, model_b])
def test_determine_unique_attributes(self): # everything shared model_a = DummyInterface(None, "A") model_b = DummyInterface(None, "B") model_c = DummyInterface(None, "C") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0,1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0,1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0,1), "shared ab 1") shared_bc_1 = ParameterUncertainty((0,1), "shared bc 1") a_1 = ParameterUncertainty((0,1), "a 1") b_1 = ParameterUncertainty((0,1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1] model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] overview_dict, element_dict = ensemble._determine_unique_attributes('uncertainties') msg = 'checking uncertainties' self.assertIn(shared_abc_1.name, element_dict.keys(), msg) self.assertIn(shared_abc_2.name, element_dict.keys(), msg) self.assertIn(shared_ab_1.name, element_dict.keys(), msg) self.assertIn(shared_bc_1.name, element_dict.keys(), msg) self.assertIn(a_1.name, element_dict.keys(), msg) self.assertIn(b_1.name, element_dict.keys(), msg) self.assertEqual(len(overview_dict.keys()),5, msg) # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0,1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0,2), "shared abc 1") shared_ab_1 = ParameterUncertainty((0,1), "shared ab 1") a_1 = ParameterUncertainty((0,1), "a 1") b_1 = ParameterUncertainty((0,1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] self.assertRaises(EMAError, ensemble._determine_unique_attributes, 'uncertainties')
def test_perform_experiments(self): # everything shared model_a = DummyInterface(None, "A") model_b = DummyInterface(None, "B") model_c = DummyInterface(None, "C") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0,1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0,1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0,1), "shared ab 1") shared_bc_1 = ParameterUncertainty((0,1), "shared bc 1") a_1 = ParameterUncertainty((0,1), "a 1") b_1 = ParameterUncertainty((0,1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1] model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1] #let's add an outcome to this outcome_shared = Outcome("test", time=True) model_a.outcomes = [outcome_shared] model_b.outcomes = [outcome_shared] model_c.outcomes = [outcome_shared] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] ensemble.perform_experiments(10, which_uncertainties=UNION, which_outcomes=UNION, reporting_interval=1 ) ensemble.perform_experiments(10, which_uncertainties=UNION, which_outcomes=INTERSECTION, reporting_interval=1 ) ensemble.perform_experiments(10, which_uncertainties=INTERSECTION, which_outcomes=UNION, reporting_interval=1 ) ensemble.perform_experiments(10, which_uncertainties=INTERSECTION, which_outcomes=INTERSECTION, reporting_interval=1 ) self.assertRaises(ValueError, ensemble.perform_experiments, 10, which_uncertainties=INTERSECTION, which_outcomes='Label')
def test_determine_unique_attributes(self): # everything shared model_a = DummyInterface(None, "A") model_b = DummyInterface(None, "B") model_c = DummyInterface(None, "C") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0, 1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0, 1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0, 1), "shared ab 1") shared_bc_1 = ParameterUncertainty((0, 1), "shared bc 1") a_1 = ParameterUncertainty((0, 1), "a 1") b_1 = ParameterUncertainty((0, 1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [ shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1 ] model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] overview_dict, element_dict = ensemble._determine_unique_attributes( 'uncertainties') msg = 'checking uncertainties' self.assertIn(shared_abc_1.name, element_dict.keys(), msg) self.assertIn(shared_abc_2.name, element_dict.keys(), msg) self.assertIn(shared_ab_1.name, element_dict.keys(), msg) self.assertIn(shared_bc_1.name, element_dict.keys(), msg) self.assertIn(a_1.name, element_dict.keys(), msg) self.assertIn(b_1.name, element_dict.keys(), msg) self.assertEqual(len(overview_dict.keys()), 5, msg) # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0, 1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0, 2), "shared abc 1") shared_ab_1 = ParameterUncertainty((0, 1), "shared ab 1") a_1 = ParameterUncertainty((0, 1), "a 1") b_1 = ParameterUncertainty((0, 1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [ shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1 ] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] self.assertRaises(EMAError, ensemble._determine_unique_attributes, 'uncertainties')
def test_generate_experiments(self): # everything shared model_a = DummyInterface(None, "A") model_b = DummyInterface(None, "B") model_c = DummyInterface(None, "C") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0,1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0,1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0,1), "shared ab 1") shared_bc_1 = ParameterUncertainty((0,1), "shared bc 1") a_1 = ParameterUncertainty((0,1), "a 1") b_1 = ParameterUncertainty((0,1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1] model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] experiments, nr_of_exp, uncertainties = ensemble._generate_experiments(10, UNION ) msg = 'testing UNION' self.assertIn(shared_abc_1, uncertainties, msg) self.assertIn(shared_abc_2, uncertainties, msg) self.assertIn(shared_ab_1, uncertainties, msg) self.assertIn(shared_bc_1, uncertainties, msg) self.assertIn(a_1, uncertainties, msg) self.assertIn(b_1, uncertainties, msg) self.assertEqual(nr_of_exp, 10* len(ensemble.model_structures), msg) for experiment in experiments: self.assertIn('policy', experiment.keys(), msg) self.assertIn('model', experiment.keys(), msg) self.assertIn('experiment id', experiment.keys(), msg) model = ensemble._msis[experiment['model']] for unc in model.uncertainties: self.assertIn(unc.name, experiment.keys()) self.assertEqual(len(experiment.keys()), len(model.uncertainties)+3) experiments, nr_of_exp, uncertainties = ensemble._generate_experiments(10, INTERSECTION ) msg = 'testing INTERSECTION' self.assertIn(shared_abc_1, uncertainties, msg) self.assertIn(shared_abc_2, uncertainties, msg) self.assertNotIn(shared_ab_1, uncertainties, msg) self.assertNotIn(shared_bc_1, uncertainties, msg) self.assertNotIn(a_1, uncertainties, msg) self.assertNotIn(b_1, uncertainties, msg) self.assertEqual(nr_of_exp, 10* len(ensemble.model_structures), msg) experiment = six.next(experiments) self.assertIn('policy', experiment.keys(), msg) self.assertIn('model', experiment.keys(), msg) self.assertIn('experiment id', experiment.keys(), msg) for experiment in experiments: self.assertIn('policy', experiment.keys(), msg) self.assertIn('model', experiment.keys(), msg) self.assertIn('experiment id', experiment.keys(), msg) model = ensemble._msis[experiment['model']] for unc in [shared_abc_1, shared_abc_2]: self.assertIn(unc.name, experiment.keys()) self.assertNotEqual(len(experiment.keys()), len(model.uncertainties)+3) self.assertEqual(len(experiment.keys()), 5) # predefined experiments model_a = DummyInterface(None, "A") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0,1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0,1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0,1), "shared ab 1") a_1 = ParameterUncertainty((0,1), "a 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] ensemble = ModelEnsemble() ensemble.model_structure = model_a cases = [{"shared abc 1":1, "shared abc 2":2, "shared ab 1":3, "a 1": 4}] experiments, nr_of_exp, uncertainties = ensemble._generate_experiments(cases, UNION) self.assertEqual(nr_of_exp, 1) self.assertIn(shared_abc_1, uncertainties) self.assertIn(shared_abc_2, uncertainties) self.assertIn(shared_ab_1, uncertainties) self.assertIn(a_1, uncertainties) # test raises EMAError self.assertRaises(EMAError, ensemble._generate_experiments, 'a string', UNION)
def test_generate_experiments(self): # everything shared model_a = DummyInterface(None, "A") model_b = DummyInterface(None, "B") model_c = DummyInterface(None, "C") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0, 1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0, 1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0, 1), "shared ab 1") shared_bc_1 = ParameterUncertainty((0, 1), "shared bc 1") a_1 = ParameterUncertainty((0, 1), "a 1") b_1 = ParameterUncertainty((0, 1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [ shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1 ] model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] experiments, nr_of_exp, uncertainties = ensemble._generate_experiments( 10, UNION) msg = 'testing UNION' self.assertIn(shared_abc_1, uncertainties, msg) self.assertIn(shared_abc_2, uncertainties, msg) self.assertIn(shared_ab_1, uncertainties, msg) self.assertIn(shared_bc_1, uncertainties, msg) self.assertIn(a_1, uncertainties, msg) self.assertIn(b_1, uncertainties, msg) self.assertEqual(nr_of_exp, 10 * len(ensemble.model_structures), msg) for experiment in experiments: self.assertIn('policy', experiment.keys(), msg) self.assertIn('model', experiment.keys(), msg) self.assertIn('experiment id', experiment.keys(), msg) model = ensemble._msis[experiment['model']] for unc in model.uncertainties: self.assertIn(unc.name, experiment.keys()) self.assertEqual(len(experiment.keys()), len(model.uncertainties) + 3) experiments, nr_of_exp, uncertainties = ensemble._generate_experiments( 10, INTERSECTION) msg = 'testing INTERSECTION' self.assertIn(shared_abc_1, uncertainties, msg) self.assertIn(shared_abc_2, uncertainties, msg) self.assertNotIn(shared_ab_1, uncertainties, msg) self.assertNotIn(shared_bc_1, uncertainties, msg) self.assertNotIn(a_1, uncertainties, msg) self.assertNotIn(b_1, uncertainties, msg) self.assertEqual(nr_of_exp, 10 * len(ensemble.model_structures), msg) experiment = six.next(experiments) self.assertIn('policy', experiment.keys(), msg) self.assertIn('model', experiment.keys(), msg) self.assertIn('experiment id', experiment.keys(), msg) for experiment in experiments: self.assertIn('policy', experiment.keys(), msg) self.assertIn('model', experiment.keys(), msg) self.assertIn('experiment id', experiment.keys(), msg) model = ensemble._msis[experiment['model']] for unc in [shared_abc_1, shared_abc_2]: self.assertIn(unc.name, experiment.keys()) self.assertNotEqual(len(experiment.keys()), len(model.uncertainties) + 3) self.assertEqual(len(experiment.keys()), 5) # predefined experiments model_a = DummyInterface(None, "A") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0, 1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0, 1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0, 1), "shared ab 1") a_1 = ParameterUncertainty((0, 1), "a 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] ensemble = ModelEnsemble() ensemble.model_structure = model_a cases = [{ "shared abc 1": 1, "shared abc 2": 2, "shared ab 1": 3, "a 1": 4 }] experiments, nr_of_exp, uncertainties = ensemble._generate_experiments( cases, UNION) self.assertEqual(nr_of_exp, 1) self.assertIn(shared_abc_1, uncertainties) self.assertIn(shared_abc_2, uncertainties) self.assertIn(shared_ab_1, uncertainties) self.assertIn(a_1, uncertainties) # test raises EMAError self.assertRaises(EMAError, ensemble._generate_experiments, 'a string', UNION)
def test_perform_experiments(self): # everything shared model_a = DummyInterface(None, "A") model_b = DummyInterface(None, "B") model_c = DummyInterface(None, "C") # let's add some uncertainties to this shared_abc_1 = ParameterUncertainty((0, 1), "shared abc 1") shared_abc_2 = ParameterUncertainty((0, 1), "shared abc 2") shared_ab_1 = ParameterUncertainty((0, 1), "shared ab 1") shared_bc_1 = ParameterUncertainty((0, 1), "shared bc 1") a_1 = ParameterUncertainty((0, 1), "a 1") b_1 = ParameterUncertainty((0, 1), "b 1") model_a.uncertainties = [shared_abc_1, shared_abc_2, shared_ab_1, a_1] model_b.uncertainties = [ shared_abc_1, shared_abc_2, shared_ab_1, shared_bc_1, b_1 ] model_c.uncertainties = [shared_abc_1, shared_abc_2, shared_bc_1] #let's add an outcome to this outcome_shared = Outcome("test", time=True) model_a.outcomes = [outcome_shared] model_b.outcomes = [outcome_shared] model_c.outcomes = [outcome_shared] ensemble = ModelEnsemble() ensemble.model_structures = [model_a, model_b, model_c] ensemble.perform_experiments(10, which_uncertainties=UNION, which_outcomes=UNION, reporting_interval=1) ensemble.perform_experiments(10, which_uncertainties=UNION, which_outcomes=INTERSECTION, reporting_interval=1) ensemble.perform_experiments(10, which_uncertainties=INTERSECTION, which_outcomes=UNION, reporting_interval=1) ensemble.perform_experiments(10, which_uncertainties=INTERSECTION, which_outcomes=INTERSECTION, reporting_interval=1) self.assertRaises(ValueError, ensemble.perform_experiments, 10, which_uncertainties=INTERSECTION, which_outcomes='Label')