Source code for pyomo.core.base.misc

#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2024
#  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.
#  ___________________________________________________________________________

import logging
import sys

from pyomo.common.deprecation import relocated_module_attribute

logger = logging.getLogger('pyomo.core')

relocated_module_attribute(
    'tabular_writer', 'pyomo.common.formatting.tabular_writer', version='6.1'
)
relocated_module_attribute(
    'sorted_robust', 'pyomo.common.sorting.sorted_robust', version='6.1'
)


[docs] def display(obj, ostream=None): """Display data in a Pyomo object""" if ostream is None: ostream = sys.stdout try: display_fcn = obj.display except AttributeError: raise TypeError( "Error trying to display values for object of type %s:\n" "\tObject does not support the 'display()' method" % (type(obj),) ) try: display_fcn(ostream=ostream) except Exception: err = sys.exc_info()[1] logger.error( "Error trying to display values for object of type %s:\n\t%s" % (type(obj), err) ) raise
[docs] def create_name(name, ndx): """Create a canonical name for a component using the given index""" if ndx is None: return name if type(ndx) is tuple: tmp = str(ndx).replace(', ', ',') return name + "[" + tmp[1:-1] + "]" return name + "[" + str(ndx) + "]"
[docs] def apply_indexed_rule(obj, rule, model, index, options=None): try: if options is None: if index.__class__ is tuple: return rule(model, *index) elif index is None and not obj.is_indexed(): return rule(model) else: return rule(model, index) else: if index.__class__ is tuple: return rule(model, *index, **options) elif index is None and not obj.is_indexed(): return rule(model, **options) else: return rule(model, index, **options) except TypeError: try: if options is None: return rule(model) else: return rule(model, **options) except: # Nothing appears to have matched... re-trigger the original # TypeError if options is None: if index.__class__ is tuple: return rule(model, *index) elif index is None and not obj.is_indexed(): return rule(model) else: return rule(model, index) else: if index.__class__ is tuple: return rule(model, *index, **options) elif index is None and not obj.is_indexed(): return rule(model, **options) else: return rule(model, index, **options)
[docs] def apply_parameterized_indexed_rule(obj, rule, model, param, index): if index.__class__ is tuple: return rule(model, param, *index) if index is None: return rule(model, param) return rule(model, param, index)