def test_init(self): m1 = Model() m2 = Model() # Test default initialization r = Result(m1) assert r.model() == m1 assert r.loss is None assert r.results is None assert r.values == []
def test_init(self): m1 = Model() m2 = Model() r1 = Result(m1) r2 = Result(m2) d1 = Domain() d2 = Domain() # Test initializing with various values, results, and domains values = [None, True, False, 1, 1.0, '1', (1, ), [1], {'1': 1}] for val in values: v = Value(val, d1, r1) assert v.value == val assert v.result() is r1 assert v.domain() is d1 v = Value(val, d2, r1) assert v.value == val assert v.result() is r1 assert v.domain() is d2 v = Value(val, d1, r2) assert v.value == val assert v.result() is r2 assert v.domain() is d1 v = Value(val, d2, r2) assert v.value == val assert v.result() is r2 assert v.domain() is d2 values = [True, False, 1, 1.0, (1, ), [1], {'1': 1}] # Test initializing with invalid domains for val in values: with pytest.raises(InvalidDomainError): Value(val, val, r1) with pytest.raises(InvalidDomainError): Value(val, val, r2) # Test initializing with invalid results for val in values[1:]: with pytest.raises(InvalidResultError): Value(val, d1, val) with pytest.raises(InvalidResultError): Value(val, d2, val)
def test_add_model(self): m1 = Model(id=1) cc = ComputeClass("name", "resource", 1, 100) cc.add_model(m1) assert len(cc.model_group.models.keys()) == 1
def test_remove_model(self): m1 = Model(id=1) cc = ComputeClass("name", "resource", 1, 100) cc.model_group = ModelGroup(m1) assert len(cc.model_group.models.keys()) == 1 cc.remove_model(1) assert len(cc.model_group.models.keys()) == 0
def test_to_json(self): m1 = Model() m2 = Model() r1 = Result(m1) r2 = Result(m2) d1 = Domain() d2 = Domain() # Test initializing with various values, results, and domains values = [None, True, False, 1, 1.0, '1', (1, ), [1], {'1': 1}] for val in values: v = Value(val, d1, r1) assert v.to_json() == { 'value': val, 'domain': d1.id, 'result': r1.id } v = Value(val, d2, r1) assert v.to_json() == { 'value': val, 'domain': d2.id, 'result': r1.id } v = Value(val, d1, r2) assert v.to_json() == { 'value': val, 'domain': d1.id, 'result': r2.id } v = Value(val, d2, r2) assert v.to_json() == { 'value': val, 'domain': d2.id, 'result': r2.id }
def test_clear(self): models = [Model(id=i) for i in range(100)] # Test clearing an empty CC (nothing should happen) cc = ComputeClass('name', 'resource', 1, 100) assert len(cc.model_group) == 0 cc.clear() assert len(cc.model_group) == 0 # Test clearing a single- and multi-model ModelGroup for i in range(1, len(models)): cc.model_group = ModelGroup(models=models[:i]) assert len(cc.model_group) == i cc.clear() assert len(cc.model_group) == 0
def load(self): """Load model state from file. Returns ------- models : list of `pyrameter.models.model.Model` Models loaded from the JSON store. Raises ------ OSError Raised when the files cannot be read. """ models = None path, fname = os.path.split(self.path) name, ext = os.path.splitext(fname) current_path = self.path current_backup = 1 while models is None and os.path.isfile(current_path): try: with open(current_path, 'r') as f: models = json.load(f) except (OSError, json.JSONDecodeError): models = None current_path = os.path.join( path, ''.join([path, '_{}'.format(current_backup), ext])) if models is None: raise OSError('Could not load files from {}.'.format(self.path)) model_objs = [] for m in models: model = Model.from_json(m) model_objs.append(model) return model_objs
def test_save(self, tmpdir, setup_dummy_models): s = JsonStorage(tmpdir.strpath) # Test with no models s.save([]) assert os.path.isfile(os.path.join(tmpdir.strpath, 'results.json')) # Test with single model models = [] models.append(Model()) s.save(models) json_list = [] for model in models: json_list.append(model.to_json()) json_list = json.dumps(json_list) with open(os.path.join(tmpdir.strpath, 'results.json')) as json_file: data = json.load(json_file) data = json.dumps(data) assert data == json_list # Test with multiple models models = setup_dummy_models s.save(models) json_list = [] for model in models: json_list.append(model.to_json()) json_list = json.dumps(json_list) with open(os.path.join(tmpdir.strpath, 'results.json')) as json_file: data = json.load(json_file) data = json.dumps(data) assert data == json_list
def test_save(self, tmpdir, dummy_models): s = JsonStorage(tmpdir.strpath) # Test with no models s.save([]) assert os.path.isfile(os.path.join(tmpdir.strpath, 'results.json')) with open(os.path.join(tmpdir.strpath, 'results.json'), 'r') as f: data = json.load(f) assert data == [] # Test with single model models = [] models.append(Model()) s.save(models) json_list = [] for model in models: json_list.append(json.loads(json.dumps(model.to_json()))) with open(os.path.join(tmpdir.strpath, 'results.json')) as json_file: data = json.load(json_file) assert data == json_list # Test with multiple models models = dummy_models s.save(models) json_list = [] for model in models: json_list.append(json.loads(json.dumps(model.to_json()))) with open(os.path.join(tmpdir.strpath, 'results.json')) as json_file: data = json.load(json_file) for i in range(len(json_list)): assert data[i] == json_list[i]
def setup_dummy_models(): d1 = ContinuousDomain(uniform, loc=0, scale=1) d2 = DiscreteDomain([1, 2, 3, 4]) r1 = Result(None, loss=0.37276) r2 = Result(None, loss=1.346) models = [] models.append(Model()) models.append(Model(domains=[d1])) models.append(Model(domains=[d2])) models.append(Model(domains=[d1, d2])) m = Model() r1 = Result(m, loss=0.37276) m.add_result(r1) models.append(m) m = Model(domains=[d1]) r1 = Result(m, loss=0.37276) m.add_result(r1) models.append(m) m = Model(domains=[d1]) r1 = Result(m, loss=0.37276) m.add_result(r1) models.append(m) return models