Skip to content

Commit

Permalink
Merge 821c9f2 into 16bf25b
Browse files Browse the repository at this point in the history
  • Loading branch information
bqpd committed Mar 29, 2022
2 parents 16bf25b + 821c9f2 commit f6b7f6f
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 12 deletions.
4 changes: 4 additions & 0 deletions gpkit/constraints/loose.py
Expand Up @@ -16,6 +16,10 @@ def process_result(self, result):
"Checks that all constraints are satisfied with equality"
super().process_result(result)
initsolwarning(result, "Unexpectedly Tight Constraints")
if "sensitivities" not in result:
appendsolwarning("Could not evaluate due to choice variables.",
(), result, "Unexpectedly Tight Constraints")
return
for constraint in self.flat():
c_senss = result["sensitivities"]["constraints"].get(constraint, 0)
if c_senss >= self.senstol:
Expand Down
19 changes: 10 additions & 9 deletions gpkit/constraints/sgp.py
Expand Up @@ -213,15 +213,16 @@ def localsolve(self, solver=None, *, verbosity=1, x0=None, reltol=1e-4,
self.result["cost function"] = self.cost
del self.result["freevariables"][self.slack.key] # pylint: disable=no-member
del self.result["variables"][self.slack.key] # pylint: disable=no-member
del self.result["sensitivities"]["variables"][self.slack.key] # pylint: disable=no-member
del self.result["sensitivities"]["variablerisk"][self.slack.key] # pylint: disable=no-member
slcon = self.gpconstraints[0]
slconsenss = self.result["sensitivities"]["constraints"][slcon]
del self.result["sensitivities"]["constraints"][slcon]
# TODO: create constraint in RelaxPCCP namespace
self.result["sensitivities"]["models"][""] -= slconsenss
if not self.result["sensitivities"]["models"][""]:
del self.result["sensitivities"]["models"][""]
if "sensitivities" in self.result: # not true for MIGP
del self.result["sensitivities"]["variables"][self.slack.key] # pylint: disable=no-member
del self.result["sensitivities"]["variablerisk"][self.slack.key] # pylint: disable=no-member
slcon = self.gpconstraints[0]
slconsenss = self.result["sensitivities"]["constraints"][slcon]
del self.result["sensitivities"]["constraints"][slcon]
# TODO: create constraint in RelaxPCCP namespace
self.result["sensitivities"]["models"][""] -= slconsenss
if not self.result["sensitivities"]["models"][""]:
del self.result["sensitivities"]["models"][""]
return self.result

@property
Expand Down
11 changes: 8 additions & 3 deletions gpkit/solution_array.py
Expand Up @@ -41,7 +41,9 @@ def __init__(self, solarray, saveconstraints):


def __enter__(self):
if self.saveconstraints:
if "sensitivities" not in self.solarray:
pass
elif self.saveconstraints:
for constraint_attr in ["bounded", "meq_bounded", "vks",
"v_ss", "unsubbed", "varkeys"]:
store = {}
Expand All @@ -55,7 +57,9 @@ def __enter__(self):
self.solarray["sensitivities"].pop("constraints")

def __exit__(self, type_, val, traceback):
if self.saveconstraints:
if not self.constraintstore:
pass
elif self.saveconstraints:
for constraint_attr, store in self.attrstore.items():
for constraint, value in store.items():
setattr(constraint, constraint_attr, value)
Expand Down Expand Up @@ -772,7 +776,8 @@ def table(self, showvars=(),
strs = []
for table in tables:
if "breakdown" in table:
if len(self) > 1 or not UNICODE_EXPONENTS:
if (len(self) > 1 or not UNICODE_EXPONENTS
or "sensitivities" not in self):
# no breakdowns for sweeps or no-unicode environments
table = table.replace(" breakdown", "")
if "sensitivities" not in self and ("sensitivities" in table or
Expand Down

0 comments on commit f6b7f6f

Please sign in to comment.