示例#1
0
    def __init__(self,
                 parent,
                 name,
                 formula=None,
                 refs=None,
                 source=None,
                 doc=None):
        BaseSpaceImpl.__init__(self,
                               parent=parent,
                               name=name,
                               formula=formula,
                               refs=refs,
                               source=source,
                               doc=doc)

        self._refs = ImplChainMap(
            self,
            RefView,
            [self.model._global_refs, self._local_refs, self._self_refs],
        )

        self._namespace_impl = ImplChainMap(
            self, None, [self._cells, self._refs, self._spaces])

        self.lazy_evals = self._namespace_impl
示例#2
0
    def __init__(self, *, system, name):

        if not name:
            name = system._modelnamer.get_next(system.models)
        elif not is_valid_name(name):
            raise ValueError("Invalid name '%s'." % name)

        Impl.__init__(self, system=system, parent=None, name=name)
        EditableSpaceContainerImpl.__init__(self)
        TraceManager.__init__(self)

        self.spacemgr = SpaceManager(self)
        self.currentspace = None
        self._global_refs = RefDict(self)
        self._global_refs.set_item("__builtins__", builtins)
        self._named_spaces = SpaceDict(self)
        self._dynamic_bases = SpaceDict(self)
        self._all_spaces = ImplChainMap(
            self, SpaceView, [self._named_spaces, self._dynamic_bases])
        self._dynamic_bases_inverse = {}
        self._dynamic_base_namer = AutoNamer("__Space")
        self._namespace = ImplChainMap(self, BaseView,
                                       [self._named_spaces, self._global_refs])
        self.allow_none = False
        self.lazy_evals = self._namespace
        self.datarefmgr = DataClientReferenceManager()
示例#3
0
文件: model.py 项目: alebaran/modelx
    def __init__(self, *, system, name):
        Impl.__init__(self, system=system)
        EditableSpaceContainerImpl.__init__(self)

        self.cellgraph = DependencyGraph()
        self.lexdep = DependencyGraph()  # Lexical dependency
        self.spacegraph = SpaceGraph()
        self.currentspace = None

        if not name:
            self.name = system._modelnamer.get_next(system.models)
        elif is_valid_name(name):
            self.name = name
        else:
            raise ValueError("Invalid name '%s'." % name)

        data = {"__builtins__": builtins}
        self._global_refs = RefDict(self, data=data)
        self._spaces = ImplDict(self, SpaceView)
        self._dynamic_bases = {}
        self._dynamic_bases_inverse = {}
        self._dynamic_base_namer = AutoNamer("__Space")
        self._namespace = ImplChainMap(self, BaseView,
                                       [self._spaces, self._global_refs])
        self.allow_none = False
        self.lazy_evals = self._namespace
示例#4
0
    def _create_parentargs(self):
        if isinstance(self.parent, StaticSpaceImpl):
            parentargs = []
        elif isinstance(self.parent, RootDynamicSpaceImpl):
            parentargs = [self.parent._arguments, self.parent._parentargs]
        else:
            parentargs = [self.parent._parentargs]

        return ImplChainMap(self, None, parentargs)
示例#5
0
    def _create_refs(self, arguments=None):
        self._parentargs = self._create_parentargs()

        return ImplChainMap(
            self,
            RefView,
            [
                self.model._global_refs,
                self._local_refs,
                self._parentargs,
                self._self_refs,
            ],
        )
示例#6
0
    def __init__(self,
                 parent,
                 name,
                 formula=None,
                 refs=None,
                 source=None,
                 arguments=None,
                 doc=None):
        Impl.__init__(self, system=parent.system, doc=doc)
        BaseSpaceContainerImpl.__init__(self)
        Derivable.__init__(self)

        self.name = name
        self.parent = parent
        self.cellsnamer = AutoNamer("Cells")

        self._mro_cache = None
        self.update_mro = True

        if isinstance(source, ModuleType):
            self.source = source.__name__
        else:
            self.source = source

        # ------------------------------------------------------------------
        # Construct member containers

        self._dynamic_spaces = ImplDict(self, SpaceView)
        self._dynamic_subs = []
        self._self_refs = RefDict(self)
        self._cells = CellsDict(self)
        self._static_spaces = SpaceDict(self)
        self._spaces = ImplChainMap(
            self, SpaceView, [self._static_spaces, self._dynamic_spaces])

        self._local_refs = {"_self": self, "_space": self}

        self._refs = self._create_refs(arguments)

        self._namespace_impl = ImplChainMap(
            self, None, [self._cells, self._refs, self._spaces])

        self.lazy_evals = self._namespace_impl

        # ------------------------------------------------------------------
        # Add initial refs members

        if refs is not None:
            refsimpl = {
                name: ReferenceImpl(self, name, value)
                for name, value in refs.items()
            }
            self._self_refs.update(refsimpl)
            self._self_refs.set_update()

        # ------------------------------------------------------------------
        # Construct altfunc after space members are crated

        self.param_spaces = {}
        self.formula = None
        if formula is not None:
            self.set_formula(formula)

        # ------------------------------------------------------------------
        # For repr of LazyEvalDict, LazyEvalImpl

        self._cells.debug_name = "_cells"
        self._static_spaces.debug_name = "_static_spaces"
        self._dynamic_spaces.debug_name = "_dynamic_spaces"
        self._self_refs.debug_name = "_self_refs"
        self._refs.debug_name = "_refs"
        self._namespace_impl.debug_name = "_namespace_impl"
示例#7
0
 def _create_refs(self, arguments=None):
     return ImplChainMap(
         self,
         RefView,
         [self.model._global_refs, self._local_refs, self._self_refs],
     )