Exemple #1
0
    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 == []
Exemple #2
0
    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)
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
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
            }
Exemple #6
0
    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
Exemple #7
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
Exemple #8
0
    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
Exemple #9
0
    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]
Exemple #10
0
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