Source code for pyomo.core.kernel.container_utils

#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2025
#  National Technology and Engineering Solutions of Sandia, LLC
#  Under the terms of Contract DE-NA0003525 with National Technology and
#  Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
#  rights in this software.
#  This software is distributed under the 3-clause BSD License.
#  ___________________________________________________________________________

from pyomo.core.kernel.dict_container import DictContainer
from pyomo.core.kernel.tuple_container import TupleContainer
from pyomo.core.kernel.list_container import ListContainer


[docs] def define_homogeneous_container_type( namespace, name, container_class, ctype, doc=None, use_slots=True ): """ This function is designed to be called for the simple container implementations (DictContainer, TupleContainer, and ListContainer) as the container_class argument. When called using the globals() namespace within a module, it is equivalent to placing the following class definition within that module: .. code:: class <name>(<container_class>): <doc> _ctype = <ctype> ### if ### <use_slots> __slots__ = ("_parent", "_storage_key", "_active", "_data", "__weakref__") ### fi ### def __init__(self, *args, **kwds): self._parent = None self._storage_key = None self._active = True super(<name>, self).__init__(*args, **kwds) """ assert name not in namespace cls_dict = {} cls_dict['_ctype'] = ctype if use_slots: cls_dict['__slots__'] = ( "_parent", "_storage_key", "_active", "_data", "__weakref__", ) def _init(self, *args, **kwds): self._parent = None self._storage_key = None self._active = True container_class.__init__(self, *args, **kwds) cls_dict['__init__'] = _init cls_dict['__module__'] = namespace['__name__'] if doc is not None: cls_dict['__doc__'] = doc namespace[name] = type(name, (container_class,), cls_dict)
[docs] def define_simple_containers(namespace, prefix, ctype, use_slots=True): """Use this function to define all three simple container definitions for a new object category type.""" doc_ = "A %s-style container for objects with category type " + ctype.__name__ for suffix, container_class in ( ('tuple', TupleContainer), ('list', ListContainer), ('dict', DictContainer), ): doc = doc_ % (suffix,) define_homogeneous_container_type( namespace, prefix + "_" + suffix, container_class, ctype, doc=doc, use_slots=use_slots, )