Source code for pyomo.core.base.enums

#  ___________________________________________________________________________
#
#  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 enum
import sys

if sys.version_info[:2] >= (3, 11):
    strictEnum = {'boundary': enum.STRICT}
else:
    strictEnum = {}


[docs] class TraversalStrategy(enum.Enum, **strictEnum): BreadthFirstSearch = 1 PrefixDepthFirstSearch = 2 PostfixDepthFirstSearch = 3 # aliases BFS = BreadthFirstSearch ParentLastDepthFirstSearch = PostfixDepthFirstSearch PostfixDFS = PostfixDepthFirstSearch ParentFirstDepthFirstSearch = PrefixDepthFirstSearch PrefixDFS = PrefixDepthFirstSearch DepthFirstSearch = PrefixDepthFirstSearch DFS = DepthFirstSearch
[docs] class SortComponents(enum.Flag, **strictEnum): """ This class is a convenient wrapper for specifying various sort ordering. We pass these objects to the "sort" argument to various accessors / iterators to control how much work we perform sorting the resultant list. The idea is that "sort=SortComponents.deterministic" is more descriptive than "sort=True". """ UNSORTED = 0 # Note: skip '1' so that we can map True to something other than 1 ORDERED_INDICES = 2 SORTED_INDICES = 4 ALPHABETICAL = 8 # aliases # TODO: deprecate some of these unsorted = UNSORTED indices = SORTED_INDICES declOrder = UNSORTED declarationOrder = declOrder alphaOrder = ALPHABETICAL alphabeticalOrder = alphaOrder alphabetical = alphaOrder # both alpha and decl orders are deterministic, so only must sort indices deterministic = ORDERED_INDICES sortBoth = indices | alphabeticalOrder # Same as True alphabetizeComponentAndIndex = sortBoth @classmethod def _missing_(cls, value): if type(value) is bool: if value: return cls.SORTED_INDICES | cls.ALPHABETICAL else: return cls.UNSORTED elif value is None: return cls.UNSORTED return super()._missing_(value)
[docs] @staticmethod def default(): return SortComponents.UNSORTED
[docs] @staticmethod def sorter(sort_by_names=False, sort_by_keys=False): sort = SortComponents.default() if sort_by_names: sort |= SortComponents.ALPHABETICAL if sort_by_keys: sort |= SortComponents.SORTED_INDICES return sort
[docs] @staticmethod def sort_names(flag): return SortComponents.ALPHABETICAL in SortComponents(flag)
[docs] @staticmethod def sort_indices(flag): return SortComponents.SORTED_INDICES in SortComponents(flag)