]> gitweb.michael.orlitzky.com - dunshire.git/commitdiff
Fix dict sorting in and add another big example to errors.py.
authorMichael Orlitzky <michael@orlitzky.com>
Thu, 6 Oct 2016 18:18:29 +0000 (14:18 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Thu, 6 Oct 2016 18:18:29 +0000 (14:18 -0400)
src/dunshire/errors.py

index 3a5b601cec9ca0a2753e16ede6460a2ac6ca101a..322479f0d39320ede35977969d7e95577bdce79e 100644 (file)
@@ -10,6 +10,8 @@ def _pretty_format_dict(dictionary):
     Return a pretty-formatted string representation of a dictionary
     containing CVXOPT matrices.
 
+    The dictionary is also sorted so that it can be tested repeatably.
+
     EXAMPLES:
 
         >>> d = {'foo': 1.234, 'bar': matrix([1,2,3])}
@@ -22,7 +24,7 @@ def _pretty_format_dict(dictionary):
 
     """
     result = ''
-    for (key, value) in dictionary.items():
+    for (key, value) in sorted(dictionary.items()):
         if isinstance(value, matrix):
             # Display matrices on their own lines, indented.
             result += '{:s}:'.format(key)
@@ -41,6 +43,50 @@ class GameUnsolvableException(Exception):
     min-max theorem). If we can't solve the conic program associated
     with a linear game, then something is wrong with either the model of
     the input.
+
+    EXAMPLES:
+
+       >>> d = {'residual as dual infeasibility certificate': None,
+       ...      'y': matrix([1,1]),
+       ...      'dual slack': 8.779496368228267e-10,
+       ...      'z': matrix([1,1,0,0]),
+       ...      's': None,
+       ...      'primal infeasibility': None,
+       ...      'status': 'primal infeasible',
+       ...      'dual infeasibility': None,
+       ...      'relative gap': None,
+       ...      'iterations': 5,
+       ...      'primal slack': None,
+       ...      'x': None,
+       ...      'dual objective': 1.0,
+       ...      'primal objective': None,
+       ...      'gap': None,
+       ...      'residual as primal infeasibility certificate': 3.986246886102996e-09}
+       >>> print(GameUnsolvableException(d))
+       Solution failed with result "primal infeasible."
+       CVXOPT returned:
+         dual infeasibility: None
+         dual objective: 1.0
+         dual slack: 8.779496368228267e-10
+         gap: None
+         iterations: 5
+         primal infeasibility: None
+         primal objective: None
+         primal slack: None
+         relative gap: None
+         residual as dual infeasibility certificate: None
+         residual as primal infeasibility certificate: 3.986246886102996e-09
+         s: None
+         status: primal infeasible
+         x: None
+         y:
+           [ 1]
+           [ 1]
+         z:
+           [ 1]
+           [ 1]
+           [ 0]
+           [ 0]
     """
     def __init__(self, solution_dict):
         """