本文整理汇总了Python中openmdao.main.expreval.ExprEvaluator.ordered_refs方法的典型用法代码示例。如果您正苦于以下问题:Python ExprEvaluator.ordered_refs方法的具体用法?Python ExprEvaluator.ordered_refs怎么用?Python ExprEvaluator.ordered_refs使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类openmdao.main.expreval.ExprEvaluator
的用法示例。
在下文中一共展示了ExprEvaluator.ordered_refs方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Constraint
# 需要导入模块: from openmdao.main.expreval import ExprEvaluator [as 别名]
# 或者: from openmdao.main.expreval.ExprEvaluator import ordered_refs [as 别名]
class Constraint(object):
""" Object that stores info for a single constraint. """
def __init__(self, lhs, comparator, rhs, scope, jacs=None):
self.lhs = ExprEvaluator(lhs, scope=scope)
self._pseudo = None
self.pcomp_name = None
unresolved_vars = self.lhs.get_unresolved()
if unresolved_vars:
msg = "Left hand side of constraint '{0}' has invalid variables {1}"
expression = ' '.join((lhs, comparator, rhs))
raise ExprEvaluator._invalid_expression_error(unresolved_vars,
expr=expression,
msg=msg)
self.rhs = ExprEvaluator(rhs, scope=scope)
unresolved_vars = self.rhs.get_unresolved()
if unresolved_vars:
msg = "Right hand side of constraint '{0}' has invalid variables {1}"
expression = ' '.join((lhs, comparator, rhs))
raise ExprEvaluator._invalid_expression_error(unresolved_vars,
expr=expression,
msg=msg)
self.comparator = comparator
self._size = None
# Linear flag: constraints are nonlinear by default
self.linear = False
# User-defined jacobian function
self.jacs = jacs
self._create_pseudo()
@property
def size(self):
"""Total scalar items in this constraint."""
if self._size is None:
self._size = len(self.evaluate(self.lhs.scope))
return self._size
def _create_pseudo(self):
"""Create our pseudo component."""
if self.comparator == '=':
subtype = 'equality'
else:
subtype = 'inequality'
# check for simple structure of equality constraint,
# either
# var1 = var2
# OR
# var1 - var2 = 0
# OR
# var1 = 0
lrefs = list(self.lhs.ordered_refs())
rrefs = list(self.rhs.ordered_refs())
try:
leftval = float(self.lhs.text)
except ValueError:
leftval = None
try:
rightval = float(self.rhs.text)
except ValueError:
rightval = None
pseudo_class = PseudoComponent
if self.comparator == '=':
# look for var1-var2=0
if len(lrefs) == 2 and len(rrefs) == 0:
if rightval == 0. and \
_remove_spaces(self.lhs.text) == \
lrefs[0]+'-'+lrefs[1]:
pseudo_class = SimpleEQConPComp
# look for 0=var1-var2
elif len(lrefs) == 0 and len(rrefs) == 2:
if leftval==0. and \
_remove_spaces(self.rhs.text) == \
rrefs[0]+'-'+rrefs[1]:
pseudo_class = SimpleEQConPComp
# look for var1=var2
elif len(lrefs) == 1 and len(rrefs) == 1:
if lrefs[0] == self.lhs.text and \
rrefs[0] == self.rhs.text:
pseudo_class = SimpleEQConPComp
# look for var1=0
elif len(lrefs) == 1 and len(rrefs) == 0 and rightval is not None:
pseudo_class = SimpleEQ0PComp
self._pseudo = pseudo_class(self.lhs.scope,
self._combined_expr(),
pseudo_type='constraint',
subtype=subtype,
exprobject=self)
#.........这里部分代码省略.........
示例2: Constraint2Sided
# 需要导入模块: from openmdao.main.expreval import ExprEvaluator [as 别名]
# 或者: from openmdao.main.expreval.ExprEvaluator import ordered_refs [as 别名]
class Constraint2Sided(Constraint):
""" Object that stores info for a double-sided constraint. """
def __init__(self, lhs, center, rhs, comparator, scope, jacs=None):
self.lhs = ExprEvaluator(lhs, scope=scope)
unresolved_vars = self.lhs.get_unresolved()
self._pseudo = None
self.pcomp_name = None
if unresolved_vars:
msg = "Left hand side of constraint '{0}' has invalid variables {1}"
expression = ' '.join((lhs, comparator, center, comparator,
rhs))
raise ExprEvaluator._invalid_expression_error(unresolved_vars,
expr=expression,
msg=msg)
self.center = ExprEvaluator(center, scope=scope)
unresolved_vars = self.center.get_unresolved()
if unresolved_vars:
msg = "Center of constraint '{0}' has invalid variables {1}"
expression = ' '.join((lhs, comparator, center, comparator,
rhs))
raise ExprEvaluator._invalid_expression_error(unresolved_vars,
expr=expression,
msg=msg)
self.rhs = ExprEvaluator(rhs, scope=scope)
unresolved_vars = self.rhs.get_unresolved()
if unresolved_vars:
msg = "Right hand side of constraint '{0}' has invalid variables {1}"
expression = ' '.join((lhs, comparator, center, comparator,
rhs))
raise ExprEvaluator._invalid_expression_error(unresolved_vars,
expr=expression,
msg=msg)
self.comparator = comparator
self._size = None
# Linear flag: constraints are nonlinear by default
self.linear = False
self.low = self.lhs.evaluate()
self.high = self.rhs.evaluate()
# User-defined jacobian function
self.jacs = jacs
self._create_pseudo()
def _create_pseudo(self):
"""Create our pseudo component."""
scope = self.lhs.scope
refs = list(self.center.ordered_refs())
pseudo_class = PseudoComponent
# look for a<var1<b
if len(refs) == 1 and self.center.text == refs[0]:
pseudo_class = SimpleEQ0PComp
self._pseudo = pseudo_class(scope,
self.center,
pseudo_type='constraint',
subtype='inequality',
exprobject=self)
self.pcomp_name = self._pseudo.name
def _combined_expr(self):
"""Only need the center expression
"""
return self.center
def copy(self):
""" Returns a copy of our self. """
return Constraint2Sided(str(self.lhs), str(self.center), str(self.rhs),
self.comparator, scope=self.lhs.scope,
jacs=self.jacs)
def get_referenced_compnames(self):
"""Returns a set of names of each component referenced by this
constraint.
"""
return self.center.get_referenced_compnames()
def get_referenced_varpaths(self, copy=True, refs=False):
"""Returns a set of names of each component referenced by this
constraint.
"""
return self.center.get_referenced_varpaths(copy=copy, refs=refs)
def name_changed(self, old, new):
"""Update expressions if necessary when an object is renamed."""
self.rhs.name_changed(old, new)
self.lhs.name_changed(old, new)
self.center.name_changed(old, new)
#.........这里部分代码省略.........