Exemplo n.º 1
0
def test_get_object_named_itemspace(testmodel):

    itemspace = testmodel.testspace[1]
    name = itemspace.name
    assert mx.get_object("testmodel.testspace." + name) is itemspace
    assert mx.get_object("testmodel.testspace." + name + ".foo") is itemspace.foo
    assert mx.get_object("testmodel.testspace." + name + ".bar") == 3
Exemplo n.º 2
0
def test_get_object_error(testmodel):

    with pytest.raises(NameError):
        assert mx.get_object("testerror")

    with pytest.raises(NameError):
        assert mx.get_object("testmodel.testerror")

    with pytest.raises(NameError):
        assert mx.get_object("testmodel.testspace.testerror")
Exemplo n.º 3
0
def test_get_object_attrs(testmodel):
    """Used by spyder-modelx"""

    objs = [testmodel, testmodel.testspace, testmodel.testspace.foo]
    attrs = ["spaces", "cells", "formula"]

    for obj, attr in zip(objs, attrs):
        assert mx.get_object(obj.fullname + "." + attr) is getattr(obj, attr)
Exemplo n.º 4
0
def test_precedents(precedstest):

    bar = precedstest.bar
    foo = precedstest.foo

    preceds = bar.node(3).precedents
    x = mx.get_object("Preceds.Space1.x", as_proxy=True)
    z = mx.get_object("Preceds.Space1.Child.GrandChild.z", as_proxy=True)
    y = mx.get_object("Preceds.Space1.Child.y", as_proxy=True)

    assert preceds[0] == foo.node(3)
    assert preceds[1] == ReferenceNode((x._impl, ))
    assert preceds[2] == ReferenceNode((z._impl, ))
    assert preceds[3] == ReferenceNode((y._impl, ))

    assert repr(preceds[0]) == "Preceds.Space1.foo(t=3)=3"
    assert repr(preceds[1]) == "Preceds.Space1.x=1"
    assert repr(preceds[2]) == "Preceds.Space1.Child.GrandChild.z=3"
    assert repr(preceds[3]) == "Preceds.Space1.Child.y=2"
Exemplo n.º 5
0
    def mx_get_codelist(self, fullname):
        import modelx as mx

        try:
            obj = mx.get_object(fullname)
            data = obj._to_attrdict(['formula'])
        except:
            data = None

        self.send_mx_msg('codelist', data=data)
Exemplo n.º 6
0
def test_baseattrs():

    s = mx.new_space()
    s.bar = 1
    attrs = mx.get_object(s.fullname + "." + "bar", as_proxy=True)._baseattrs

    assert attrs["name"] == "bar"
    assert attrs["fullname"] == s.fullname + "." + "bar"
    assert attrs["repr"] == "bar"
    assert attrs["namedid"] == s.name + ".bar"
Exemplo n.º 7
0
    def mx_set_formula(self, fullname):
        import modelx as mx

        obj = mx.get_object(fullname)
        ns = self._mglobals()
        if "__mx_temp" in ns:
            formula = ns["__mx_temp"]
            del ns["__mx_temp"]
        else:
            formula = None

        obj.set_formula(formula)
        self.send_mx_msg("mxupdated")
Exemplo n.º 8
0
def _restore_ref(obj):
    """Restore ref from _RefData in nested container"""
    if isinstance(obj, _RefData):
        return mx.get_object(obj.evalrepr)

    elif isinstance(obj, str):
        return obj

    elif isinstance(obj, collections.Sequence):
        return type(obj)(_restore_ref(value) for value in obj)

    elif isinstance(obj, collections.Mapping):
        return type(obj)((key, _restore_ref(val)) for key, val in obj.items())

    else:
        return obj
Exemplo n.º 9
0
def test_get_object(testmodel):

    assert mx.get_object("testmodel") is testmodel
    assert mx.get_object("testmodel.testspace") is testmodel.testspace
    assert mx.get_object("testmodel.testspace.foo") is testmodel.testspace.foo
    assert mx.get_object("testmodel.testspace.bar") == 3
    assert mx.get_object("testmodel.testspace.bar", as_proxy=True).value == 3

    objs = [testmodel, testmodel.testspace, testmodel.testspace.foo]

    for obj in objs:
        assert mx.get_object(obj.fullname) is obj
Exemplo n.º 10
0
    def mx_get_object(self, msgtype, fullname=None, attrs=None):

        import modelx as mx
        if fullname is None:
            obj = mx.cur_model()
        else:
            try:
                obj = mx.get_object(fullname, as_proxy=True)
            except NameError:
                obj = None

        if obj is not None:
            if attrs is None:
                data = obj._baseattrs
            else:
                data = obj._to_attrdict(attrs)
        else:
            data = None

        self.send_mx_msg(msgtype, data=data)
Exemplo n.º 11
0
def test_get_object(testmodel):

    assert mx.get_object("testmodel") is testmodel
    assert mx.get_object("testmodel.testspace") is testmodel.testspace
    assert mx.get_object("testmodel.testspace.foo") is testmodel.testspace.foo
    assert mx.get_object("testmodel.testspace.bar") == 3

    objs = [testmodel, testmodel.testspace, testmodel.testspace.foo]

    for obj in objs:
        assert mx.get_object(obj.fullname) is obj

    attrs = ["spaces", "cells", "formula"]

    for obj, attr in zip(objs, attrs):
        assert mx.get_object(obj.fullname + "." + attr) is getattr(obj, attr)
Exemplo n.º 12
0
    def mx_new_space(self, model, parent, name, bases, define_var, varname):
        import modelx as mx

        model = self._get_or_create_model(model)

        if parent:
            parent = mx.get_object(parent)
        else:
            parent = model

        if not name:
            name = None

        if bases:
            bases = [model._get_from_name(b.strip()) for b in bases.split(",")]
        else:
            bases = None

        space = parent.new_space(name=name, bases=bases)
        if define_var:
            self._define_var(space, varname)

        self.send_mx_msg("mxupdated")
Exemplo n.º 13
0
    def mx_import_names(self, fullname, import_selected, import_children,
                        replace_existing):
        import modelx as mx
        from modelx.core.space import ItemSpace
        from modelx.core.spacecontainer import BaseSpaceContainer
        from modelx.core.space import BaseSpace
        from modelx.core.reference import ReferenceProxy

        obj = mx.get_object(fullname, as_proxy=True)

        if import_selected:  # Retrieve non item parent
            parent = obj
            while isinstance(parent, mx.core.space.ItemSpace):
                parent = obj.parent

            if isinstance(parent, ReferenceProxy):
                self._define_var(parent.value,
                                 varname=parent.name,
                                 replace_existing=replace_existing)
            else:
                self._define_var(parent, replace_existing=replace_existing)

        if import_children and isinstance(obj, BaseSpaceContainer):
            for child in obj.spaces.values():
                self._define_var(child, replace_existing=replace_existing)

            if isinstance(obj, BaseSpace):
                for child in obj.cells.values():
                    self._define_var(child, replace_existing=replace_existing)

            for name, child in obj.refs.items():
                self._define_var(child,
                                 varname=name,
                                 replace_existing=replace_existing)

        self.send_mx_msg("mxupdated")
Exemplo n.º 14
0
    def mx_get_adjacent(self, msgtype, obj: str, jsonargs: str,
                        adjacency: str):

        import modelx as mx
        from modelx.core.base import Interface

        args = json.loads(jsonargs, object_hook=hinted_tuple_hook)
        node = mx.get_object(obj).node(*args)
        nodes = getattr(node, adjacency)
        attrs = [node._baseattrs for node in nodes]

        for node in attrs:
            if isinstance(node["value"], Interface):
                node["value"] = repr(node["value"])

        if spyder.version_info > (4, ):
            return attrs
        else:
            content = {
                'mx_obj': obj,
                'mx_args': args,
                'mx_adjacency': adjacency
            }
            self.send_mx_msg(msgtype, content=content, data=attrs)
Exemplo n.º 15
0
 def bases_hook(inst):
     args = [mx.get_object(base) for base in inst.args]
     return args, inst.kwargs
Exemplo n.º 16
0
 def restore(self):
     return mx.get_object(self.decode())
Exemplo n.º 17
0
 def mx_del_object(self, parent, name):
     import modelx as mx
     mx.get_object(parent).__delattr__(name)
     self.send_mx_msg("mxupdated")