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
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")
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)
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"
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)
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"
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")
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
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
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)
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)
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")
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")
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)
def bases_hook(inst): args = [mx.get_object(base) for base in inst.args] return args, inst.kwargs
def restore(self): return mx.get_object(self.decode())
def mx_del_object(self, parent, name): import modelx as mx mx.get_object(parent).__delattr__(name) self.send_mx_msg("mxupdated")