[pypy-svn] r32740 - in pypy/dist/pypy/tool/algo: . test

arigo at codespeak.net arigo at codespeak.net
Fri Sep 29 15:23:02 CEST 2006


Author: arigo
Date: Fri Sep 29 15:23:00 2006
New Revision: 32740

Modified:
   pypy/dist/pypy/tool/algo/sparsemat.py
   pypy/dist/pypy/tool/algo/test/test_sparsemat.py
Log:
Bug bug!  The code was carefully picking the *worst* possible choice
among the possible operations at every step of the algorithm.  It leads
to numerical instability.  A largish example shows this.


Modified: pypy/dist/pypy/tool/algo/sparsemat.py
==============================================================================
--- pypy/dist/pypy/tool/algo/sparsemat.py	(original)
+++ pypy/dist/pypy/tool/algo/sparsemat.py	Fri Sep 29 15:23:00 2006
@@ -1,6 +1,6 @@
 from __future__ import division
 
-EPSILON = 1E-6
+EPSILON = 1E-12
 
 
 class SparseMatrix:
@@ -42,17 +42,17 @@
             currentcolumn = columns[ncol]
             lst = [(abs(a), i) for (i, a) in currentcolumn.items()
                                if i in lines_left]
-            _, nrow = min(lst)    # ValueError -> no solution
+            _, nrow = max(lst)    # ValueError -> no solution
             nrows.append(nrow)
             del lines_left[nrow]
             line1 = lines[nrow]
-            mina = line1[ncol]
+            maxa = line1[ncol]
             for _, i in lst:
                 if i != nrow:
                     line2 = lines[i]
                     a = line2.pop(ncol)
                     #del currentcolumn[i]  -- but currentcolumn no longer used
-                    factor = a / mina
+                    factor = a / maxa
                     vector[i] -= factor*vector[nrow]
                     for col in line1:
                         if col > ncol:
@@ -60,7 +60,8 @@
                             if abs(value) > EPSILON:
                                 line2[col] = columns[col][i] = value
                             else:
-                                del line2[col]
+                                if col in line2:
+                                    del line2[col]
                                 del columns[col][i]
         solution = [None] * len(vector)
         for i in range(len(vector)-1, -1, -1):

Modified: pypy/dist/pypy/tool/algo/test/test_sparsemat.py
==============================================================================
--- pypy/dist/pypy/tool/algo/test/test_sparsemat.py	(original)
+++ pypy/dist/pypy/tool/algo/test/test_sparsemat.py	Fri Sep 29 15:23:00 2006
@@ -21,3 +21,911 @@
     M[2,1] = M[2,3] = -0.5
     res = M.solve([6, 3, 6, 0])
     assert res == [14, 8, 10, 0]
+
+def test_big_example():
+    M = SparseMatrix(754)
+    M.lines = [
+        {0: 1, 1: -0.5, 752: -0.5},
+        {1: 1, 2: -0.5, 4: -0.5},
+        {2: 1, 3: -1.0},
+        {3: 1},
+        {4: 1, 5: -0.5, 750: -0.5},
+        {5: 1, 6: -0.5, 7: -0.5},
+        {3: -1.0, 6: 1},
+        {8: -0.5, 748: -0.5, 7: 1},
+        {8: 1, 9: -0.5, 10: -0.5},
+        {9: 1, 3: -1.0},
+        {10: 1, 11: -0.5, 747: -0.5},
+        {11: 1, 12: -1.0},
+        {12: 1, 13: -1.0},
+        {745: -0.5, 13: 1, 14: -0.5},
+        {16: -0.5, 14: 1, 15: -0.5},
+        {3: -1.0, 15: 1},
+        {16: 1, 17: -0.5, 744: -0.5},
+        {17: 1, 18: -1.0},
+        {576: -0.5, 18: 1, 19: -0.5},
+        {19: 1, 20: -0.5, 574: -0.5},
+        {20: 1, 21: -0.5, 22: -0.5},
+        {3: -1.0, 21: 1},
+        {573: -0.5, 22: 1, 23: -0.5},
+        {24: -1.0, 23: 1},
+        {24: 1, 25: -1.0},
+        {25: 1, 26: -0.5, 571: -0.5},
+        {26: 1, 27: -0.5, 28: -0.5},
+        {3: -1.0, 27: 1},
+        {570: -0.5, 28: 1, 29: -0.5},
+        {29: 1, 30: -1.0},
+        {567: -0.5, 30: 1, 31: -0.5},
+        {32: -0.5, 565: -0.5, 31: 1},
+        {32: 1, 33: -0.5, 34: -0.5},
+        {33: 1, 3: -1.0},
+        {34: 1, 35: -0.5, 564: -0.5},
+        {35: 1, 36: -1.0},
+        {563: -0.5, 36: 1, 37: -0.5},
+        {561: -0.5, 37: 1, 38: -0.5},
+        {40: -0.5, 38: 1, 39: -0.5},
+        {3: -1.0, 39: 1},
+        {40: 1, 41: -0.5, 560: -0.5},
+        {41: 1, 42: -1.0},
+        {42: 1, 43: -0.5, 559: -0.5},
+        {43: 1, 44: -1.0},
+        {44: 1, 45: -0.5, 557: -0.5},
+        {45: 1, 46: -0.29999999999999999, 47: -0.69999999999999996},
+        {3: -1.0, 46: 1},
+        {48: -0.5, 555: -0.5, 47: 1},
+        {48: 1, 49: -0.29999999999999999, 50: -0.69999999999999996},
+        {49: 1, 3: -1.0},
+        {553: -0.5, 50: 1, 51: -0.5},
+        {51: 1, 52: -0.29999999999999999, 53: -0.69999999999999996},
+        {3: -1.0, 52: 1},
+        {53: 1, 54: -0.5, 551: -0.5},
+        {56: -0.69999999999999996, 54: 1, 55: -0.29999999999999999},
+        {3: -1.0, 55: 1},
+        {56: 1, 57: -0.5, 550: -0.5},
+        {57: 1, 58: -1.0},
+        {58: 1, 59: -0.29999999999999999, 63: -0.69999999999999996},
+        {59: 1, 60: -0.5, 61: -0.5},
+        {3: -1.0, 60: 1},
+        {61: 1, 62: -1.0},
+        {62: 1},
+        {64: -0.5, 548: -0.5, 63: 1},
+        {64: 1, 65: -0.29999999999999999, 66: -0.69999999999999996},
+        {65: 1, 3: -1.0},
+        {66: 1, 67: -0.5, 546: -0.5},
+        {67: 1, 68: -0.29999999999999999, 69: -0.69999999999999996},
+        {3: -1.0, 68: 1},
+        {544: -0.5, 69: 1, 70: -0.5},
+        {72: -0.69999999999999996, 70: 1, 71: -0.29999999999999999},
+        {3: -1.0, 71: 1},
+        {72: 1, 73: -0.5, 542: -0.5},
+        {73: 1, 74: -0.29999999999999999, 75: -0.69999999999999996},
+        {74: 1, 3: -1.0},
+        {540: -0.5, 75: 1, 76: -0.5},
+        {76: 1, 77: -0.29999999999999999, 78: -0.69999999999999996},
+        {3: -1.0, 77: 1},
+        {538: -0.5, 78: 1, 79: -0.5},
+        {80: -0.29999999999999999, 81: -0.69999999999999996, 79: 1},
+        {80: 1, 3: -1.0},
+        {81: 1, 82: -0.5, 537: -0.5},
+        {82: 1, 83: -1.0},
+        {522: -0.5, 83: 1, 84: -0.5},
+        {520: -0.5, 84: 1, 85: -0.5},
+        {85: 1, 86: -0.29999999999999999, 87: -0.69999999999999996},
+        {3: -1.0, 86: 1},
+        {88: -0.5, 518: -0.5, 87: 1},
+        {88: 1, 89: -0.29999999999999999, 90: -0.69999999999999996},
+        {89: 1, 3: -1.0},
+        {90: 1, 91: -0.5, 516: -0.5},
+        {91: 1, 92: -0.29999999999999999, 93: -0.69999999999999996},
+        {3: -1.0, 92: 1},
+        {514: -0.5, 93: 1, 94: -0.5},
+        {96: -0.69999999999999996, 94: 1, 95: -0.29999999999999999},
+        {3: -1.0, 95: 1},
+        {96: 1, 97: -0.5, 512: -0.5},
+        {97: 1, 98: -0.29999999999999999, 99: -0.69999999999999996},
+        {98: 1, 3: -1.0},
+        {99: 1, 100: -0.5, 510: -0.5},
+        {100: 1, 101: -0.29999999999999999, 102: -0.69999999999999996},
+        {3: -1.0, 101: 1},
+        {508: -0.5, 102: 1, 103: -0.5},
+        {104: -0.29999999999999999, 105: -0.69999999999999996, 103: 1},
+        {104: 1, 3: -1.0},
+        {105: 1, 106: -0.5, 506: -0.5},
+        {106: 1, 107: -0.29999999999999999, 108: -0.69999999999999996},
+        {3: -1.0, 107: 1},
+        {504: -0.5, 108: 1, 109: -0.5},
+        {109: 1, 110: -0.29999999999999999, 111: -0.69999999999999996},
+        {3: -1.0, 110: 1},
+        {112: -0.5, 502: -0.5, 111: 1},
+        {112: 1, 113: -0.29999999999999999, 114: -0.69999999999999996},
+        {113: 1, 3: -1.0},
+        {114: 1, 115: -0.5, 500: -0.5},
+        {115: 1, 116: -0.29999999999999999, 117: -0.69999999999999996},
+        {3: -1.0, 116: 1},
+        {498: -0.5, 117: 1, 118: -0.5},
+        {120: -0.69999999999999996, 118: 1, 119: -0.29999999999999999},
+        {3: -1.0, 119: 1},
+        {120: 1, 121: -0.5, 496: -0.5},
+        {121: 1, 122: -0.29999999999999999, 123: -0.69999999999999996},
+        {122: 1, 3: -1.0},
+        {123: 1, 124: -0.5, 494: -0.5},
+        {124: 1, 125: -0.29999999999999999, 126: -0.69999999999999996},
+        {3: -1.0, 125: 1},
+        {492: -0.5, 126: 1, 127: -0.5},
+        {128: -0.29999999999999999, 129: -0.69999999999999996, 127: 1},
+        {128: 1, 3: -1.0},
+        {129: 1, 130: -0.5, 490: -0.5},
+        {130: 1, 131: -0.29999999999999999, 132: -0.69999999999999996},
+        {3: -1.0, 131: 1},
+        {488: -0.5, 132: 1, 133: -0.5},
+        {133: 1, 134: -0.29999999999999999, 135: -0.69999999999999996},
+        {3: -1.0, 134: 1},
+        {136: -0.5, 486: -0.5, 135: 1},
+        {136: 1, 137: -0.29999999999999999, 138: -0.69999999999999996},
+        {137: 1, 3: -1.0},
+        {138: 1, 139: -0.5, 484: -0.5},
+        {139: 1, 140: -0.29999999999999999, 141: -0.69999999999999996},
+        {3: -1.0, 140: 1},
+        {483: -0.5, 141: 1, 142: -0.5},
+        {142: 1, 143: -1.0},
+        {144: -0.5, 460: -0.5, 143: 1},
+        {144: 1, 145: -0.5, 481: -0.5},
+        {145: 1, 146: -0.29999999999999999, 147: -0.69999999999999996},
+        {146: 1, 3: -1.0},
+        {147: 1, 148: -0.5, 479: -0.5},
+        {148: 1, 149: -0.29999999999999999, 150: -0.69999999999999996},
+        {3: -1.0, 149: 1},
+        {477: -0.5, 150: 1, 151: -0.5},
+        {152: -0.29999999999999999, 153: -0.69999999999999996, 151: 1},
+        {152: 1, 3: -1.0},
+        {153: 1, 154: -0.5, 476: -0.5},
+        {154: 1, 155: -1.0},
+        {460: -0.5, 155: 1, 156: -0.5},
+        {458: -0.5, 156: 1, 157: -0.5},
+        {157: 1, 158: -0.29999999999999999, 159: -0.69999999999999996},
+        {3: -1.0, 158: 1},
+        {160: -0.5, 456: -0.5, 159: 1},
+        {160: 1, 161: -0.29999999999999999, 162: -0.69999999999999996},
+        {161: 1, 3: -1.0},
+        {162: 1, 163: -0.5, 454: -0.5},
+        {163: 1, 164: -0.29999999999999999, 165: -0.69999999999999996},
+        {3: -1.0, 164: 1},
+        {452: -0.5, 165: 1, 166: -0.5},
+        {168: -0.69999999999999996, 166: 1, 167: -0.29999999999999999},
+        {3: -1.0, 167: 1},
+        {168: 1, 169: -0.5, 451: -0.5},
+        {169: 1, 170: -1.0},
+        {170: 1, 171: -0.5, 435: -0.5},
+        {433: -0.5, 171: 1, 172: -0.5},
+        {172: 1, 173: -0.29999999999999999, 174: -0.69999999999999996},
+        {3: -1.0, 173: 1},
+        {431: -0.5, 174: 1, 175: -0.5},
+        {176: -0.29999999999999999, 177: -0.69999999999999996, 175: 1},
+        {176: 1, 3: -1.0},
+        {177: 1, 178: -0.5, 429: -0.5},
+        {178: 1, 179: -0.29999999999999999, 180: -0.69999999999999996},
+        {3: -1.0, 179: 1},
+        {428: -0.5, 180: 1, 181: -0.5},
+        {181: 1, 182: -1.0},
+        {204: -0.5, 182: 1, 183: -0.5},
+        {184: -0.5, 202: -0.5, 183: 1},
+        {184: 1, 185: -0.29999999999999999, 186: -0.69999999999999996},
+        {185: 1, 3: -1.0},
+        {200: -0.5, 186: 1, 187: -0.5},
+        {187: 1, 188: -0.29999999999999999, 189: -0.69999999999999996},
+        {3: -1.0, 188: 1},
+        {198: -0.5, 189: 1, 190: -0.5},
+        {192: -0.69999999999999996, 190: 1, 191: -0.29999999999999999},
+        {3: -1.0, 191: 1},
+        {192: 1, 193: -0.5, 196: -0.5},
+        {193: 1, 194: -0.29999999999999999, 195: -0.69999999999999996},
+        {194: 1, 3: -1.0},
+        {195: 1, 44: -1.0},
+        {193: -0.5, 196: 1, 197: -0.5},
+        {193: -1.0, 197: 1},
+        {190: -0.5, 198: 1, 199: -0.5},
+        {190: -1.0, 199: 1},
+        {200: 1, 201: -0.5, 187: -0.5},
+        {201: 1, 187: -1.0},
+        {184: -0.5, 202: 1, 203: -0.5},
+        {184: -1.0, 203: 1},
+        {426: -0.5, 204: 1, 205: -0.5},
+        {205: 1, 206: -0.29999999999999999, 207: -0.69999999999999996},
+        {3: -1.0, 206: 1},
+        {208: -0.5, 424: -0.5, 207: 1},
+        {208: 1, 209: -0.29999999999999999, 210: -0.69999999999999996},
+        {209: 1, 3: -1.0},
+        {210: 1, 211: -0.5, 422: -0.5},
+        {211: 1, 212: -0.29999999999999999, 213: -0.69999999999999996},
+        {3: -1.0, 212: 1},
+        {213: 1, 214: -0.5, 421: -0.5},
+        {214: 1, 215: -1.0},
+        {216: -0.5, 183: -0.5, 215: 1},
+        {216: 1, 217: -0.5, 419: -0.5},
+        {217: 1, 218: -0.29999999999999999, 219: -0.69999999999999996},
+        {218: 1, 3: -1.0},
+        {417: -0.5, 219: 1, 220: -0.5},
+        {220: 1, 221: -0.29999999999999999, 222: -0.69999999999999996},
+        {3: -1.0, 221: 1},
+        {415: -0.5, 222: 1, 223: -0.5},
+        {224: -0.29999999999999999, 225: -0.69999999999999996, 223: 1},
+        {224: 1, 3: -1.0},
+        {225: 1, 226: -0.5, 413: -0.5},
+        {226: 1, 227: -0.29999999999999999, 228: -0.69999999999999996},
+        {3: -1.0, 227: 1},
+        {411: -0.5, 228: 1, 229: -0.5},
+        {229: 1, 230: -0.29999999999999999, 231: -0.69999999999999996},
+        {3: -1.0, 230: 1},
+        {232: -0.5, 409: -0.5, 231: 1},
+        {232: 1, 233: -0.29999999999999999, 234: -0.69999999999999996},
+        {233: 1, 3: -1.0},
+        {234: 1, 235: -0.5, 407: -0.5},
+        {235: 1, 236: -0.29999999999999999, 237: -0.69999999999999996},
+        {3: -1.0, 236: 1},
+        {237: 1, 238: -0.5, 405: -0.5},
+        {240: -0.69999999999999996, 238: 1, 239: -0.29999999999999999},
+        {3: -1.0, 239: 1},
+        {240: 1, 241: -0.5, 403: -0.5},
+        {241: 1, 242: -0.29999999999999999, 243: -0.69999999999999996},
+        {242: 1, 3: -1.0},
+        {401: -0.5, 243: 1, 244: -0.5},
+        {244: 1, 245: -0.29999999999999999, 246: -0.69999999999999996},
+        {3: -1.0, 245: 1},
+        {399: -0.5, 246: 1, 247: -0.5},
+        {248: -0.29999999999999999, 249: -0.69999999999999996, 247: 1},
+        {248: 1, 3: -1.0},
+        {249: 1, 250: -0.5, 397: -0.5},
+        {250: 1, 251: -0.29999999999999999, 252: -0.69999999999999996},
+        {3: -1.0, 251: 1},
+        {395: -0.5, 252: 1, 253: -0.5},
+        {253: 1, 254: -0.29999999999999999, 255: -0.69999999999999996},
+        {3: -1.0, 254: 1},
+        {256: -0.5, 393: -0.5, 255: 1},
+        {256: 1, 257: -0.29999999999999999, 258: -0.69999999999999996},
+        {257: 1, 3: -1.0},
+        {258: 1, 259: -0.5, 391: -0.5},
+        {259: 1, 260: -0.29999999999999999, 261: -0.69999999999999996},
+        {3: -1.0, 260: 1},
+        {261: 1, 262: -0.5, 389: -0.5},
+        {264: -0.69999999999999996, 262: 1, 263: -0.29999999999999999},
+        {3: -1.0, 263: 1},
+        {264: 1, 265: -0.5, 387: -0.5},
+        {265: 1, 266: -0.29999999999999999, 267: -0.69999999999999996},
+        {266: 1, 3: -1.0},
+        {385: -0.5, 267: 1, 268: -0.5},
+        {268: 1, 269: -0.29999999999999999, 270: -0.69999999999999996},
+        {3: -1.0, 269: 1},
+        {383: -0.5, 270: 1, 271: -0.5},
+        {272: -0.29999999999999999, 273: -0.69999999999999996, 271: 1},
+        {272: 1, 3: -1.0},
+        {273: 1, 274: -0.5, 382: -0.5},
+        {274: 1, 275: -1.0},
+        {297: -0.5, 275: 1, 276: -0.5},
+        {276: 1, 277: -0.5, 295: -0.5},
+        {277: 1, 278: -0.29999999999999999, 279: -0.69999999999999996},
+        {3: -1.0, 278: 1},
+        {280: -0.5, 293: -0.5, 279: 1},
+        {280: 1, 281: -0.29999999999999999, 282: -0.69999999999999996},
+        {281: 1, 3: -1.0},
+        {291: -0.5, 282: 1, 283: -0.5},
+        {283: 1, 284: -0.29999999999999999, 285: -0.69999999999999996},
+        {3: -1.0, 284: 1},
+        {289: -0.5, 285: 1, 286: -0.5},
+        {288: -0.69999999999999996, 286: 1, 287: -0.29999999999999999},
+        {3: -1.0, 287: 1},
+        {288: 1, 183: -1.0},
+        {289: 1, 290: -0.5, 286: -0.5},
+        {290: 1, 286: -1.0},
+        {283: -0.5, 291: 1, 292: -0.5},
+        {283: -1.0, 292: 1},
+        {280: -0.5, 293: 1, 294: -0.5},
+        {280: -1.0, 294: 1},
+        {296: -0.5, 277: -0.5, 295: 1},
+        {296: 1, 277: -1.0},
+        {297: 1, 298: -0.5, 380: -0.5},
+        {298: 1, 299: -0.29999999999999999, 300: -0.69999999999999996},
+        {3: -1.0, 299: 1},
+        {378: -0.5, 300: 1, 301: -0.5},
+        {301: 1, 302: -0.29999999999999999, 303: -0.69999999999999996},
+        {3: -1.0, 302: 1},
+        {304: -0.5, 376: -0.5, 303: 1},
+        {304: 1, 305: -0.29999999999999999, 306: -0.69999999999999996},
+        {305: 1, 3: -1.0},
+        {306: 1, 307: -0.5, 375: -0.5},
+        {307: 1, 308: -1.0},
+        {276: -0.5, 308: 1, 309: -0.5},
+        {309: 1, 310: -0.5, 373: -0.5},
+        {312: -0.69999999999999996, 310: 1, 311: -0.29999999999999999},
+        {3: -1.0, 311: 1},
+        {312: 1, 313: -0.5, 371: -0.5},
+        {313: 1, 314: -0.29999999999999999, 315: -0.69999999999999996},
+        {314: 1, 3: -1.0},
+        {369: -0.5, 315: 1, 316: -0.5},
+        {316: 1, 317: -0.29999999999999999, 318: -0.69999999999999996},
+        {3: -1.0, 317: 1},
+        {367: -0.5, 318: 1, 319: -0.5},
+        {320: -0.29999999999999999, 321: -0.69999999999999996, 319: 1},
+        {320: 1, 3: -1.0},
+        {321: 1, 322: -0.5, 365: -0.5},
+        {322: 1, 323: -0.29999999999999999, 324: -0.69999999999999996},
+        {3: -1.0, 323: 1},
+        {363: -0.5, 324: 1, 325: -0.5},
+        {325: 1, 326: -0.29999999999999999, 327: -0.69999999999999996},
+        {3: -1.0, 326: 1},
+        {328: -0.5, 361: -0.5, 327: 1},
+        {328: 1, 329: -0.29999999999999999, 330: -0.69999999999999996},
+        {329: 1, 3: -1.0},
+        {330: 1, 331: -0.5, 359: -0.5},
+        {331: 1, 332: -0.29999999999999999, 333: -0.69999999999999996},
+        {3: -1.0, 332: 1},
+        {333: 1, 334: -0.5, 357: -0.5},
+        {336: -0.69999999999999996, 334: 1, 335: -0.29999999999999999},
+        {3: -1.0, 335: 1},
+        {336: 1, 337: -0.5, 355: -0.5},
+        {337: 1, 338: -0.29999999999999999, 339: -0.69999999999999996},
+        {338: 1, 3: -1.0},
+        {353: -0.5, 339: 1, 340: -0.5},
+        {340: 1, 341: -0.29999999999999999, 342: -0.69999999999999996},
+        {3: -1.0, 341: 1},
+        {351: -0.5, 342: 1, 343: -0.5},
+        {344: -0.29999999999999999, 345: -0.69999999999999996, 343: 1},
+        {344: 1, 3: -1.0},
+        {345: 1, 346: -0.5, 349: -0.5},
+        {346: 1, 347: -0.29999999999999999, 348: -0.69999999999999996},
+        {3: -1.0, 347: 1},
+        {44: -1.0, 348: 1},
+        {346: -0.5, 349: 1, 350: -0.5},
+        {346: -1.0, 350: 1},
+        {352: -0.5, 343: -0.5, 351: 1},
+        {352: 1, 343: -1.0},
+        {353: 1, 354: -0.5, 340: -0.5},
+        {354: 1, 340: -1.0},
+        {337: -0.5, 355: 1, 356: -0.5},
+        {337: -1.0, 356: 1},
+        {358: -0.5, 357: 1, 334: -0.5},
+        {334: -1.0, 358: 1},
+        {360: -0.5, 331: -0.5, 359: 1},
+        {360: 1, 331: -1.0},
+        {328: -0.5, 361: 1, 362: -0.5},
+        {328: -1.0, 362: 1},
+        {363: 1, 364: -0.5, 325: -0.5},
+        {364: 1, 325: -1.0},
+        {322: -0.5, 365: 1, 366: -0.5},
+        {322: -1.0, 366: 1},
+        {368: -0.5, 319: -0.5, 367: 1},
+        {368: 1, 319: -1.0},
+        {369: 1, 370: -0.5, 316: -0.5},
+        {370: 1, 316: -1.0},
+        {313: -0.5, 371: 1, 372: -0.5},
+        {313: -1.0, 372: 1},
+        {374: -0.5, 373: 1, 310: -0.5},
+        {310: -1.0, 374: 1},
+        {308: -1.0, 375: 1},
+        {376: 1, 304: -0.5, 377: -0.5},
+        {304: -1.0, 377: 1},
+        {378: 1, 379: -0.5, 301: -0.5},
+        {379: 1, 301: -1.0},
+        {298: -0.5, 380: 1, 381: -0.5},
+        {298: -1.0, 381: 1},
+        {275: -1.0, 382: 1},
+        {384: -0.5, 271: -0.5, 383: 1},
+        {384: 1, 271: -1.0},
+        {385: 1, 386: -0.5, 268: -0.5},
+        {386: 1, 268: -1.0},
+        {265: -0.5, 387: 1, 388: -0.5},
+        {265: -1.0, 388: 1},
+        {389: 1, 262: -0.5, 390: -0.5},
+        {262: -1.0, 390: 1},
+        {392: -0.5, 259: -0.5, 391: 1},
+        {392: 1, 259: -1.0},
+        {256: -0.5, 393: 1, 394: -0.5},
+        {256: -1.0, 394: 1},
+        {395: 1, 396: -0.5, 253: -0.5},
+        {396: 1, 253: -1.0},
+        {250: -0.5, 397: 1, 398: -0.5},
+        {250: -1.0, 398: 1},
+        {400: -0.5, 247: -0.5, 399: 1},
+        {400: 1, 247: -1.0},
+        {401: 1, 402: -0.5, 244: -0.5},
+        {402: 1, 244: -1.0},
+        {241: -0.5, 403: 1, 404: -0.5},
+        {241: -1.0, 404: 1},
+        {405: 1, 238: -0.5, 406: -0.5},
+        {238: -1.0, 406: 1},
+        {408: -0.5, 235: -0.5, 407: 1},
+        {408: 1, 235: -1.0},
+        {232: -0.5, 409: 1, 410: -0.5},
+        {232: -1.0, 410: 1},
+        {411: 1, 412: -0.5, 229: -0.5},
+        {412: 1, 229: -1.0},
+        {226: -0.5, 413: 1, 414: -0.5},
+        {226: -1.0, 414: 1},
+        {416: -0.5, 223: -0.5, 415: 1},
+        {416: 1, 223: -1.0},
+        {417: 1, 418: -0.5, 220: -0.5},
+        {418: 1, 220: -1.0},
+        {217: -0.5, 419: 1, 420: -0.5},
+        {217: -1.0, 420: 1},
+        {421: 1, 215: -1.0},
+        {211: -0.5, 422: 1, 423: -0.5},
+        {211: -1.0, 423: 1},
+        {424: 1, 208: -0.5, 425: -0.5},
+        {208: -1.0, 425: 1},
+        {426: 1, 427: -0.5, 205: -0.5},
+        {427: 1, 205: -1.0},
+        {428: 1, 182: -1.0},
+        {178: -0.5, 429: 1, 430: -0.5},
+        {178: -1.0, 430: 1},
+        {432: -0.5, 175: -0.5, 431: 1},
+        {432: 1, 175: -1.0},
+        {433: 1, 434: -0.5, 172: -0.5},
+        {434: 1, 172: -1.0},
+        {449: -0.5, 435: 1, 436: -0.5},
+        {436: 1, 437: -0.29999999999999999, 438: -0.69999999999999996},
+        {3: -1.0, 437: 1},
+        {447: -0.5, 438: 1, 439: -0.5},
+        {440: -0.29999999999999999, 441: -0.69999999999999996, 439: 1},
+        {440: 1, 3: -1.0},
+        {441: 1, 442: -0.5, 445: -0.5},
+        {442: 1, 443: -0.29999999999999999, 444: -0.69999999999999996},
+        {3: -1.0, 443: 1},
+        {171: -1.0, 444: 1},
+        {442: -0.5, 445: 1, 446: -0.5},
+        {442: -1.0, 446: 1},
+        {448: -0.5, 439: -0.5, 447: 1},
+        {448: 1, 439: -1.0},
+        {449: 1, 450: -0.5, 436: -0.5},
+        {450: 1, 436: -1.0},
+        {170: -1.0, 451: 1},
+        {452: 1, 453: -0.5, 166: -0.5},
+        {453: 1, 166: -1.0},
+        {163: -0.5, 454: 1, 455: -0.5},
+        {163: -1.0, 455: 1},
+        {456: 1, 160: -0.5, 457: -0.5},
+        {160: -1.0, 457: 1},
+        {458: 1, 459: -0.5, 157: -0.5},
+        {459: 1, 157: -1.0},
+        {474: -0.5, 460: 1, 461: -0.5},
+        {461: 1, 462: -0.29999999999999999, 463: -0.69999999999999996},
+        {3: -1.0, 462: 1},
+        {464: -0.5, 472: -0.5, 463: 1},
+        {464: 1, 465: -0.29999999999999999, 466: -0.69999999999999996},
+        {465: 1, 3: -1.0},
+        {466: 1, 467: -0.5, 470: -0.5},
+        {467: 1, 468: -0.29999999999999999, 469: -0.69999999999999996},
+        {3: -1.0, 468: 1},
+        {44: -1.0, 469: 1},
+        {467: -0.5, 470: 1, 471: -0.5},
+        {467: -1.0, 471: 1},
+        {472: 1, 464: -0.5, 473: -0.5},
+        {464: -1.0, 473: 1},
+        {474: 1, 475: -0.5, 461: -0.5},
+        {475: 1, 461: -1.0},
+        {155: -1.0, 476: 1},
+        {477: 1, 478: -0.5, 151: -0.5},
+        {478: 1, 151: -1.0},
+        {480: -0.5, 148: -0.5, 479: 1},
+        {480: 1, 148: -1.0},
+        {481: 1, 482: -0.5, 145: -0.5},
+        {145: -1.0, 482: 1},
+        {483: 1, 143: -1.0},
+        {139: -0.5, 484: 1, 485: -0.5},
+        {139: -1.0, 485: 1},
+        {136: -0.5, 486: 1, 487: -0.5},
+        {136: -1.0, 487: 1},
+        {488: 1, 489: -0.5, 133: -0.5},
+        {489: 1, 133: -1.0},
+        {490: 1, 491: -0.5, 130: -0.5},
+        {130: -1.0, 491: 1},
+        {492: 1, 493: -0.5, 127: -0.5},
+        {493: 1, 127: -1.0},
+        {124: -0.5, 494: 1, 495: -0.5},
+        {124: -1.0, 495: 1},
+        {496: 1, 121: -0.5, 497: -0.5},
+        {497: 1, 121: -1.0},
+        {498: 1, 499: -0.5, 118: -0.5},
+        {499: 1, 118: -1.0},
+        {115: -0.5, 500: 1, 501: -0.5},
+        {115: -1.0, 501: 1},
+        {112: -0.5, 502: 1, 503: -0.5},
+        {112: -1.0, 503: 1},
+        {504: 1, 505: -0.5, 109: -0.5},
+        {505: 1, 109: -1.0},
+        {506: 1, 507: -0.5, 106: -0.5},
+        {106: -1.0, 507: 1},
+        {508: 1, 509: -0.5, 103: -0.5},
+        {509: 1, 103: -1.0},
+        {100: -0.5, 510: 1, 511: -0.5},
+        {100: -1.0, 511: 1},
+        {512: 1, 97: -0.5, 513: -0.5},
+        {513: 1, 97: -1.0},
+        {514: 1, 515: -0.5, 94: -0.5},
+        {515: 1, 94: -1.0},
+        {91: -0.5, 516: 1, 517: -0.5},
+        {91: -1.0, 517: 1},
+        {88: -0.5, 518: 1, 519: -0.5},
+        {88: -1.0, 519: 1},
+        {520: 1, 521: -0.5, 85: -0.5},
+        {521: 1, 85: -1.0},
+        {522: 1, 523: -0.5, 535: -0.5},
+        {523: 1, 524: -0.29999999999999999, 525: -0.69999999999999996},
+        {3: -1.0, 524: 1},
+        {534: -0.5, 525: 1, 526: -0.5},
+        {526: 1, 527: -1.0},
+        {528: -0.69999999999999996, 59: -0.29999999999999999, 527: 1},
+        {528: 1, 529: -0.5, 532: -0.5},
+        {529: 1, 530: -0.29999999999999999, 531: -0.69999999999999996},
+        {530: 1, 3: -1.0},
+        {531: 1, 84: -1.0},
+        {529: -0.5, 532: 1, 533: -0.5},
+        {529: -1.0, 533: 1},
+        {534: 1, 527: -1.0},
+        {536: -0.5, 523: -0.5, 535: 1},
+        {536: 1, 523: -1.0},
+        {537: 1, 83: -1.0},
+        {538: 1, 539: -0.5, 79: -0.5},
+        {539: 1, 79: -1.0},
+        {76: -0.5, 540: 1, 541: -0.5},
+        {76: -1.0, 541: 1},
+        {73: -0.5, 542: 1, 543: -0.5},
+        {73: -1.0, 543: 1},
+        {544: 1, 545: -0.5, 70: -0.5},
+        {545: 1, 70: -1.0},
+        {547: -0.5, 546: 1, 67: -0.5},
+        {67: -1.0, 547: 1},
+        {64: -0.5, 548: 1, 549: -0.5},
+        {64: -1.0, 549: 1},
+        {58: -1.0, 550: 1},
+        {552: -0.5, 54: -0.5, 551: 1},
+        {552: 1, 54: -1.0},
+        {553: 1, 554: -0.5, 51: -0.5},
+        {554: 1, 51: -1.0},
+        {48: -0.5, 555: 1, 556: -0.5},
+        {48: -1.0, 556: 1},
+        {557: 1, 558: -0.5, 45: -0.5},
+        {45: -1.0, 558: 1},
+        {44: -1.0, 559: 1},
+        {560: 1, 42: -1.0},
+        {561: 1, 562: -0.5, 38: -0.5},
+        {562: 1, 38: -1.0},
+        {563: 1, 44: -1.0},
+        {36: -1.0, 564: 1},
+        {32: -0.5, 565: 1, 566: -0.5},
+        {32: -1.0, 566: 1},
+        {568: -0.5, 569: -0.5, 567: 1},
+        {568: 1, 3: -1.0},
+        {569: 1, 62: -1.0},
+        {570: 1, 30: -1.0},
+        {26: -0.5, 571: 1, 572: -0.5},
+        {26: -1.0, 572: 1},
+        {24: -1.0, 573: 1},
+        {20: -0.5, 574: 1, 575: -0.5},
+        {20: -1.0, 575: 1},
+        {576: 1, 577: -0.5, 742: -0.5},
+        {577: 1, 578: -0.5, 579: -0.5},
+        {578: 1, 3: -1.0},
+        {740: -0.5, 579: 1, 580: -0.5},
+        {580: 1, 581: -0.5, 582: -0.5},
+        {3: -1.0, 581: 1},
+        {738: -0.5, 582: 1, 583: -0.5},
+        {584: -0.5, 585: -0.5, 583: 1},
+        {584: 1, 3: -1.0},
+        {585: 1, 586: -0.5, 737: -0.5},
+        {586: 1, 587: -1.0},
+        {25: -0.5, 587: 1, 588: -0.5},
+        {588: 1, 589: -0.5, 735: -0.5},
+        {589: 1, 590: -0.5, 591: -0.5},
+        {3: -1.0, 590: 1},
+        {592: -0.5, 733: -0.5, 591: 1},
+        {592: 1, 593: -0.5, 594: -0.5},
+        {593: 1, 3: -1.0},
+        {594: 1, 595: -0.5, 731: -0.5},
+        {595: 1, 596: -0.5, 597: -0.5},
+        {3: -1.0, 596: 1},
+        {729: -0.5, 597: 1, 598: -0.5},
+        {600: -0.5, 598: 1, 599: -0.5},
+        {3: -1.0, 599: 1},
+        {600: 1, 601: -0.5, 727: -0.5},
+        {601: 1, 602: -0.5, 603: -0.5},
+        {602: 1, 3: -1.0},
+        {603: 1, 604: -0.5, 725: -0.5},
+        {604: 1, 605: -0.5, 606: -0.5},
+        {3: -1.0, 605: 1},
+        {723: -0.5, 606: 1, 607: -0.5},
+        {608: -0.5, 609: -0.5, 607: 1},
+        {608: 1, 3: -1.0},
+        {609: 1, 610: -0.5, 721: -0.5},
+        {610: 1, 611: -0.5, 612: -0.5},
+        {3: -1.0, 611: 1},
+        {612: 1, 613: -0.5, 719: -0.5},
+        {613: 1, 614: -0.5, 615: -0.5},
+        {3: -1.0, 614: 1},
+        {616: -0.5, 717: -0.5, 615: 1},
+        {616: 1, 617: -0.5, 618: -0.5},
+        {617: 1, 3: -1.0},
+        {618: 1, 619: -0.5, 715: -0.5},
+        {619: 1, 620: -0.5, 621: -0.5},
+        {3: -1.0, 620: 1},
+        {713: -0.5, 621: 1, 622: -0.5},
+        {624: -0.5, 622: 1, 623: -0.5},
+        {3: -1.0, 623: 1},
+        {624: 1, 625: -0.5, 711: -0.5},
+        {625: 1, 626: -0.5, 627: -0.5},
+        {626: 1, 3: -1.0},
+        {627: 1, 628: -0.5, 710: -0.5},
+        {628: 1, 629: -1.0},
+        {629: 1, 630: -0.5, 670: -0.5},
+        {668: -0.5, 630: 1, 631: -0.5},
+        {632: -0.5, 633: -0.5, 631: 1},
+        {632: 1, 3: -1.0},
+        {633: 1, 634: -0.5, 667: -0.5},
+        {634: 1, 635: -1.0},
+        {656: -0.5, 635: 1, 636: -0.5},
+        {636: 1, 637: -0.5, 654: -0.5},
+        {637: 1, 638: -0.5, 639: -0.5},
+        {3: -1.0, 638: 1},
+        {640: -0.5, 653: -0.5, 639: 1},
+        {640: 1, 641: -1.0},
+        {641: 1, 642: -0.5, 25: -0.5},
+        {642: 1, 643: -0.5, 651: -0.5},
+        {643: 1, 644: -0.5, 645: -0.5},
+        {3: -1.0, 644: 1},
+        {649: -0.5, 645: 1, 646: -0.5},
+        {648: -0.5, 646: 1, 647: -0.5},
+        {3: -1.0, 647: 1},
+        {648: 1, 25: -1.0},
+        {649: 1, 650: -0.5, 646: -0.5},
+        {650: 1, 646: -1.0},
+        {652: -0.5, 651: 1, 643: -0.5},
+        {643: -1.0, 652: 1},
+        {641: -1.0, 653: 1},
+        {637: -0.5, 654: 1, 655: -0.5},
+        {637: -1.0, 655: 1},
+        {656: 1, 657: -0.5, 665: -0.5},
+        {657: 1, 658: -0.5, 659: -0.5},
+        {658: 1, 3: -1.0},
+        {659: 1, 660: -0.5, 663: -0.5},
+        {660: 1, 661: -0.5, 662: -0.5},
+        {3: -1.0, 661: 1},
+        {25: -1.0, 662: 1},
+        {664: -0.5, 660: -0.5, 663: 1},
+        {664: 1, 660: -1.0},
+        {665: 1, 666: -0.5, 657: -0.5},
+        {657: -1.0, 666: 1},
+        {635: -1.0, 667: 1},
+        {668: 1, 669: -0.5, 631: -0.5},
+        {669: 1, 631: -1.0},
+        {708: -0.5, 670: 1, 671: -0.5},
+        {672: -0.5, 673: -0.5, 671: 1},
+        {672: 1, 3: -1.0},
+        {673: 1, 674: -0.5, 707: -0.5},
+        {674: 1, 675: -1.0},
+        {696: -0.5, 675: 1, 676: -0.5},
+        {676: 1, 677: -0.5, 694: -0.5},
+        {677: 1, 678: -0.5, 679: -0.5},
+        {3: -1.0, 678: 1},
+        {680: -0.5, 693: -0.5, 679: 1},
+        {680: 1, 681: -1.0},
+        {681: 1, 682: -0.5, 25: -0.5},
+        {682: 1, 683: -0.5, 691: -0.5},
+        {683: 1, 684: -0.5, 685: -0.5},
+        {3: -1.0, 684: 1},
+        {689: -0.5, 685: 1, 686: -0.5},
+        {688: -0.5, 686: 1, 687: -0.5},
+        {3: -1.0, 687: 1},
+        {688: 1, 25: -1.0},
+        {689: 1, 690: -0.5, 686: -0.5},
+        {690: 1, 686: -1.0},
+        {691: 1, 692: -0.5, 683: -0.5},
+        {683: -1.0, 692: 1},
+        {681: -1.0, 693: 1},
+        {677: -0.5, 694: 1, 695: -0.5},
+        {677: -1.0, 695: 1},
+        {696: 1, 697: -0.5, 705: -0.5},
+        {697: 1, 698: -0.5, 699: -0.5},
+        {698: 1, 3: -1.0},
+        {699: 1, 700: -0.5, 703: -0.5},
+        {700: 1, 701: -0.5, 702: -0.5},
+        {3: -1.0, 701: 1},
+        {25: -1.0, 702: 1},
+        {704: -0.5, 700: -0.5, 703: 1},
+        {704: 1, 700: -1.0},
+        {705: 1, 706: -0.5, 697: -0.5},
+        {697: -1.0, 706: 1},
+        {707: 1, 675: -1.0},
+        {708: 1, 709: -0.5, 671: -0.5},
+        {709: 1, 671: -1.0},
+        {629: -1.0, 710: 1},
+        {712: -0.5, 625: -0.5, 711: 1},
+        {712: 1, 625: -1.0},
+        {713: 1, 714: -0.5, 622: -0.5},
+        {714: 1, 622: -1.0},
+        {619: -0.5, 715: 1, 716: -0.5},
+        {619: -1.0, 716: 1},
+        {616: -0.5, 717: 1, 718: -0.5},
+        {616: -1.0, 718: 1},
+        {720: -0.5, 613: -0.5, 719: 1},
+        {720: 1, 613: -1.0},
+        {721: 1, 610: -0.5, 722: -0.5},
+        {722: 1, 610: -1.0},
+        {723: 1, 724: -0.5, 607: -0.5},
+        {724: 1, 607: -1.0},
+        {604: -0.5, 725: 1, 726: -0.5},
+        {604: -1.0, 726: 1},
+        {728: -0.5, 601: -0.5, 727: 1},
+        {728: 1, 601: -1.0},
+        {729: 1, 730: -0.5, 598: -0.5},
+        {730: 1, 598: -1.0},
+        {595: -0.5, 731: 1, 732: -0.5},
+        {595: -1.0, 732: 1},
+        {592: -0.5, 733: 1, 734: -0.5},
+        {592: -1.0, 734: 1},
+        {736: -0.5, 589: -0.5, 735: 1},
+        {736: 1, 589: -1.0},
+        {737: 1, 587: -1.0},
+        {738: 1, 739: -0.5, 583: -0.5},
+        {739: 1, 583: -1.0},
+        {580: -0.5, 740: 1, 741: -0.5},
+        {580: -1.0, 741: 1},
+        {577: -0.5, 742: 1, 743: -0.5},
+        {577: -1.0, 743: 1},
+        {744: 1, 18: -1.0},
+        {745: 1, 746: -0.5, 14: -0.5},
+        {746: 1, 14: -1.0},
+        {747: 1, 12: -1.0},
+        {8: -0.5, 748: 1, 749: -0.5},
+        {8: -1.0, 749: 1},
+        {5: -0.5, 750: 1, 751: -0.5},
+        {5: -1.0, 751: 1},
+        {752: 1, 1: -0.5, 753: -0.5},
+        {753: 1, 1: -1.0}]
+
+    v = [2, 1, 1, 0, 9.5, 1, 1, 17.5, 1, 1, 10.5, 3.5, 3, 15.5, 1, 1,
+         10.5, 3.5, 3, 5.5, 1, 1, 10.5, 3.5, 3, 5.5, 1, 1, 10.5, 3.5,
+         3, 5.5, 1, 1, 10.5, 3.5, 3, 5.5, 1, 1, 10.5, 3.5, 3, 10, 2, 1,
+         1, 13.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 10.5, 3.5, 3, 13, 1, 5,
+         0, 2, 1, 1, 13.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0,
+         1, 1, 10.5, 3.5, 3, 2, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1,
+         14.0, 1, 1, 17.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0,
+         1, 1, 9.5, 1, 1, 14.0, 1, 1, 17.0, 1, 1, 9.5, 1, 1, 14.0, 1,
+         1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 10.5, 3.5, 3,
+         2, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 10.5, 3.5, 3, 2, 1, 1, 13.0,
+         1, 1, 9.5, 1, 1, 14.0, 1, 1, 10.5, 3.5, 3, 2, 1, 1, 9.5, 1, 1,
+         14.0, 1, 1, 10.5, 3.5, 3, 2, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5,
+         1, 1, 19.5, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 1, 9.5, 1, 1, 14.0,
+         1, 1, 10.5, 3.5, 3, 2, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1,
+         14.0, 1, 1, 17.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0,
+         1, 1, 9.5, 1, 1, 14.0, 1, 1, 17.0, 1, 1, 9.5, 1, 1, 14.0, 1,
+         1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 10.5, 3.5, 3,
+         2, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 19.5, 4, 1, 4, 1,
+         4, 1, 4, 1, 2, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 10.5, 3.5, 3, 2,
+         1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1,
+         14.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 28.5,
+         1, 1, 9.5, 1, 1, 12.0, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4,
+         1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 3, 4, 1, 4, 1, 4, 1, 3,
+         4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4,
+         1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 3, 4, 1, 4,
+         1, 4, 1, 3, 4, 1, 4, 1, 4, 1, 2, 1, 1, 9.5, 1, 1, 14.0, 1, 1,
+         18.5, 4, 1, 4, 1, 4, 1, 3, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 1, 28.5,
+         1, 1, 9.5, 1, 1, 12.0, 4, 1, 4, 1, 4, 1, 3, 4, 1, 4, 1, 4, 1,
+         3, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1,
+         4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 2, 1, 1,
+         10.5, 3.5, 3, 2, 1, 1, 18.5, 4, 1, 3, 4, 1, 3, 4, 1, 4, 1, 4,
+         1, 4, 1, 4, 1, 4, 1, 3, 4, 1, 4, 1, 4, 1, 4, 1, 10, 3, 4, 1,
+         10, 3, 4, 1, 25, 1, 5, 3, 4, 1, 3, 4, 1, 2, 1, 1, 9.5, 1, 1,
+         14.0, 1, 1, 10.5, 3.5, 3, 2, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 17.0,
+         1, 1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 14.0, 1, 1, 17.0, 1,
+         1, 9.5, 1, 1, 14.0, 1, 1, 9.5, 1, 1, 17.5, 1, 1, 10.5, 3.5, 3,
+         5.5, 1, 1, 10.5, 3.5, 3, 5.5, 1, 1, 10.5, 3.5, 3, 2, 1, 1, 9.5,
+         1, 1, 12.0, 4, 1, 4, 1, 3, 4, 1, 2, 1, 1, 9.5, 1, 1, 12.0, 4,
+         1, 4, 1, 3, 4, 1, 5.5, 1, 1, 10.5, 3.5, 3, 5.5, 1, 1, 10.5, 3.5,
+         3, 2, 1, 1, 9.5, 1, 1, 12.0, 4, 1, 4, 1, 3, 4, 1, 2, 1, 1, 9.5,
+         1, 1, 12.0, 4, 1, 4, 1, 3, 4, 1, 3, 4, 1, 4, 1, 4, 1, 4, 1, 4,
+         1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 3, 4, 1, 4,
+         1, 4, 1, 3, 4, 1, 3, 4, 1, 4, 1, 4, 1]
+
+    expected = [25.033, 20.783, 1.0, 0.0, 38.565, 26.815, 1.0, 50.631,
+                30.881, 1.0, 58.762, 48.512, 45.012, 42.012, 24.262, 1.0,
+                45.523, 35.273, 31.773, 35.124, 27.374, 1.0, 51.747, 41.497,
+                37.997, 34.997, 27.247, 1.0, 51.494, 41.244, 37.744, 41.489,
+                33.739, 1.0, 64.477, 54.227, 50.727, 43.568, 35.818, 1.0,
+                68.636, 58.386, 54.886, 51.886, 41.886, 37.636, 1.0, 51.909,
+                36.659, 1.0, 50.512, 38.762, 1.0, 53.518, 37.268, 1.0,
+                51.383, 41.133, 37.633, 16.0, 1.0, 5.0, 0.0, 42.618, 38.368,
+                1.0, 52.954, 37.704, 1.0, 52.006, 40.256, 1.0, 55.652,
+                39.402, 1.0, 54.431, 42.681, 1.0, 59.116, 42.866, 1.0,
+                59.38, 49.13, 45.63, 41.369, 37.119, 1.0, 51.171, 39.421,
+                1.0, 54.458, 38.208, 1.0, 52.726, 40.976, 1.0, 56.68,
+                40.43, 1.0, 55.899, 36.649, 1.0, 50.499, 38.749, 1.0,
+                53.499, 37.249, 1.0, 51.355, 39.605, 1.0, 54.722, 38.472,
+                1.0, 53.103, 41.353, 1.0, 57.219, 40.969, 1.0, 56.669,
+                37.419, 1.0, 51.599, 39.849, 1.0, 55.07, 38.82, 1.0, 53.6,
+                41.85, 1.0, 57.929, 41.679, 1.0, 57.684, 45.934, 1.0,
+                63.762, 47.512, 1.0, 66.018, 55.768, 52.268, 45.673, 41.423,
+                1.0, 57.319, 45.569, 1.0, 63.241, 46.991, 1.0, 65.273,
+                55.023, 51.523, 44.184, 39.934, 1.0, 55.191, 39.941, 1.0,
+                55.202, 43.452, 1.0, 60.217, 43.967, 1.0, 60.952, 50.702,
+                47.202, 43.764, 39.514, 1.0, 54.591, 42.841, 1.0, 59.344,
+                43.094, 1.0, 59.706, 49.456, 45.956, 42.499, 38.249, 1.0,
+                52.785, 41.035, 1.0, 56.764, 40.514, 1.0, 56.02, 44.27,
+                1.0, 61.386, 48.77, 45.27, 45.014, 41.514, 45.535, 42.035,
+                42.749, 39.249, 43.412, 39.162, 1.0, 54.089, 42.339, 1.0,
+                58.627, 42.377, 1.0, 58.681, 48.431, 44.931, 41.362, 37.112,
+                1.0, 51.16, 39.41, 1.0, 54.443, 38.193, 1.0, 52.705, 40.955,
+                1.0, 56.65, 40.4, 1.0, 55.857, 36.607, 1.0, 50.438, 38.688,
+                1.0, 53.412, 37.162, 1.0, 51.231, 39.481, 1.0, 54.545,
+                38.295, 1.0, 52.849, 41.099, 1.0, 56.856, 40.606, 1.0,
+                56.152, 36.902, 1.0, 50.86, 39.11, 1.0, 54.014, 37.764,
+                1.0, 52.091, 40.341, 1.0, 55.773, 39.523, 1.0, 54.604,
+                42.854, 1.0, 59.363, 43.113, 1.0, 59.733, 49.483, 45.983,
+                42.647, 38.397, 1.0, 52.995, 41.245, 1.0, 57.065, 40.815,
+                1.0, 56.45, 44.7, 1.0, 61.999, 49.2, 45.7, 45.315, 41.815,
+                45.745, 42.245, 42.897, 39.397, 43.32, 39.07, 1.0, 53.957,
+                42.207, 1.0, 58.439, 42.189, 1.0, 58.412, 48.162, 44.662,
+                40.678, 36.428, 1.0, 50.182, 38.432, 1.0, 53.046, 36.796,
+                1.0, 50.709, 38.959, 1.0, 53.799, 37.549, 1.0, 51.784,
+                40.034, 1.0, 55.334, 39.084, 1.0, 53.977, 42.227, 1.0,
+                58.468, 42.218, 1.0, 58.454, 46.704, 1.0, 64.862, 48.612,
+                1.0, 67.589, 36.839, 1.0, 50.77, 39.02, 1.0, 53.886, 43.52,
+                40.02, 41.339, 37.839, 53.112, 49.612, 51.204, 47.704,
+                46.718, 43.218, 46.727, 43.227, 43.584, 40.084, 44.534,
+                41.034, 42.049, 38.549, 43.459, 39.959, 41.296, 37.796,
+                42.932, 39.432, 40.928, 37.428, 47.662, 46.689, 43.189,
+                46.707, 43.207, 43.57, 40.07, 48.983, 47.613, 44.113,
+                47.354, 43.854, 44.023, 40.523, 44.841, 41.341, 42.264,
+                38.764, 43.61, 40.11, 41.402, 37.902, 45.106, 41.606,
+                45.599, 42.099, 42.795, 39.295, 43.981, 40.481, 41.662,
+                38.162, 43.188, 39.688, 41.107, 37.607, 44.9, 41.4, 45.455,
+                41.955, 42.693, 39.193, 43.91, 40.41, 41.612, 38.112,
+                47.931, 46.877, 43.377, 46.839, 43.339, 43.662, 40.162,
+                48.956, 47.594, 44.094, 47.341, 43.841, 44.014, 40.514,
+                44.641, 40.391, 1.0, 55.844, 44.094, 1.0, 61.134, 44.884,
+                1.0, 62.264, 49.384, 45.884, 48.594, 45.094, 44.891, 41.391,
+                50.202, 48.467, 44.967, 47.952, 44.452, 44.441, 40.941,
+                44.434, 40.934, 52.862, 48.612, 1.0, 67.589, 36.839, 1.0,
+                50.77, 39.02, 1.0, 53.886, 43.52, 40.02, 41.339, 37.839,
+                53.112, 49.612, 54.523, 51.491, 47.991, 50.069, 46.569,
+                45.923, 42.423, 55.268, 52.012, 48.512, 50.434, 46.934,
+                46.179, 42.679, 46.35, 42.85, 43.32, 39.82, 44.349, 40.849,
+                41.919, 38.419, 45.469, 41.969, 45.853, 42.353, 42.972,
+                39.472, 44.105, 40.605, 41.749, 38.249, 43.249, 39.749,
+                41.149, 37.649, 44.93, 41.43, 45.476, 41.976, 42.708,
+                39.208, 43.921, 40.421, 41.619, 38.119, 43.89, 39.64,
+                1.0, 54.771, 44.521, 41.021, 47.459, 43.209, 1.0, 59.869,
+                47.709, 44.209, 44.021, 44.14, 40.64, 48.63, 47.366, 43.866,
+                47.181, 43.681, 43.902, 40.402, 44.756, 41.256, 42.204,
+                38.704, 42.868, 39.368, 40.633, 41.768, 38.268, 43.262,
+                39.762, 41.159, 37.659, 42.136, 38.636, 51.886, 57.886,
+                40.318, 36.818, 51.886, 53.727, 38.239, 34.739, 28.0,
+                1.0, 5.0, 40.744, 31.747, 28.247, 40.997, 31.874, 28.374,
+                22.423, 18.173, 1.0, 33.347, 21.597, 1.0, 40.193, 23.943,
+                1.0, 44.887, 34.637, 31.137, 21.277, 17.027, 1.0, 31.053,
+                19.303, 1.0, 35.606, 19.356, 1.0, 35.713, 16.463, 1.0,
+                29.926, 18.176, 1.0, 33.352, 17.102, 1.0, 31.203, 19.453,
+                1.0, 35.906, 19.656, 1.0, 36.313, 17.063, 1.0, 31.125,
+                19.375, 1.0, 35.751, 19.501, 1.0, 36.002, 24.252, 1.0,
+                45.504, 25.754, 1.0, 48.507, 38.257, 34.757, 31.757, 24.007,
+                1.0, 45.015, 34.765, 31.265, 32.405, 24.655, 1.0, 46.311,
+                36.061, 32.561, 24.124, 19.874, 1.0, 36.749, 24.999, 1.0,
+                46.997, 29.499, 25.999, 24.374, 20.874, 35.561, 29.155,
+                25.655, 24.124, 19.874, 1.0, 36.749, 24.999, 1.0, 46.997,
+                29.499, 25.999, 24.374, 20.874, 34.265, 28.507, 25.007,
+                31.757, 24.007, 1.0, 45.015, 34.765, 31.265, 32.405, 24.655,
+                1.0, 46.311, 36.061, 32.561, 24.124, 19.874, 1.0, 36.749,
+                24.999, 1.0, 46.997, 29.499, 25.999, 24.374, 20.874, 35.561,
+                29.155, 25.655, 24.124, 19.874, 1.0, 36.749, 24.999, 1.0,
+                46.997, 29.499, 25.999, 24.374, 20.874, 34.265, 28.507,
+                25.007, 37.757, 30.254, 26.754, 28.752, 25.252, 24.001,
+                20.501, 23.875, 20.375, 21.563, 18.063, 24.156, 20.656,
+                23.953, 20.453, 21.602, 18.102, 22.676, 19.176, 20.963,
+                17.463, 23.856, 20.356, 23.803, 20.303, 21.527, 18.027,
+                34.137, 28.443, 24.943, 26.097, 22.597, 22.673, 19.173,
+                34.773, 28.762, 25.262, 48.012, 35.381, 31.881, 31.315,
+                27.815, 25.283, 21.783]
+
+    answer = M.solve(v)
+
+    assert len(answer) == len(expected)
+    for x, y in zip(answer, expected):
+        error = abs(y - x)
+        assert error < 0.01



More information about the Pypy-commit mailing list