spacepaste

  1.  
  2. #!/usr/bin/python2
  3. def expand(l):
  4. return expand_help(l, [], 1)
  5. def expand_help(l, r, s):
  6. """
  7. Basically what we want to do is walk through a list like
  8. l = [(0, 2), (0, 1), (1, 2)] and turn it into something like
  9. r = [(-1, [(0, 2)]), (-1, [(0, 1), (1, 2)])], so there are a
  10. few different cases.
  11. if l[0] is a list then we should expand that, if not then it must be
  12. (1, [(0, 2)]) by definition of phi_b_ext.
  13. if l[1] is a list, expand that, then if l[2] is a list as well expand
  14. it and foil, otherwise multiply each element of l[1] by l[2],
  15. similarly, if l[2] is a list, multiply each element of l[2] by l[1],
  16. otherwise just multiply l[1] and l[2]
  17. """
  18. if type(l[0]) == list:
  19. r.extend(expand_help(l[0], [], -1*s))
  20. else:
  21. r.append((-1*s, [l[0]]))
  22. t = []
  23. if type(l[1]) == list:
  24. a = expand_help(l[1], [], -1*s)
  25. if type(l[2]) == list:
  26. b = expand_help(l[2], [], s)
  27. for i in a:
  28. s_a, els_a = i
  29. for j in b:
  30. n_a = list(els_a)
  31. s_b, els_b = j
  32. n_a.extend(els_b)
  33. t.append((s_a*s_b, n_a))
  34. else:
  35. for i in a:
  36. x, y = i
  37. y.append(l[2])
  38. t.append((x, y))
  39. else:
  40. if type(l[2]) == list:
  41. a = expand_help(l[2], [], s)
  42. for i in a:
  43. x, y = i
  44. if type(y) == list:
  45. new_l1 = [l[1]]
  46. new_l1.extend(y)
  47. t.append((-1*s*x, new_l1))
  48. else:
  49. t.append((-1*s*x, [l[1], y]))
  50. else:
  51. t.append((-1*s, [l[1]]))
  52. t[-1][1].append(l[2])
  53. r.extend(t)
  54. return r
  55. def test_expand():
  56. a = [(0, 2), (0, 1), (1, 2)]
  57. r = [(-1, [(0, 2)]), (-1, [(0, 1), (1, 2)])]
  58. t = expand(a)
  59. print "test 1:"
  60. print "-as2 - as1a12"
  61. print "a = " + str(a)
  62. print "r = " + str(r)
  63. print "t = " + str(t)
  64. try:
  65. assert t == r
  66. print "PASS"
  67. except AssertionError:
  68. print "FAILED"
  69. exit()
  70. print
  71. a = [[(0, 2), (0, 1), (1, 2)], (2, 1), (1, 0)]
  72. r = [(1, [(0, 2)]), (1, [(0, 1), (1, 2)]), (-1, [(2, 1), (1, 0)])]
  73. t = expand(a)
  74. print "test 2:"
  75. print "-(-as2 - as1*a12) - a21*a1s"
  76. print "a = " + str(a)
  77. print "r = " + str(r)
  78. print "t = " + str(t)
  79. try:
  80. assert t == r
  81. print "PASS"
  82. except AssertionError:
  83. print "FAILED"
  84. exit()
  85. print
  86. a = [(1, 0), (2, 1), [(0, 1), (1, 2), (2, 0)]]
  87. r = [(-1, [(1, 0)]), (1, [(2, 1), (0, 1)]), (1, [(2, 1), (1, 2), (2, 0)])]
  88. t = expand(a)
  89. print "test 3:"
  90. print "-a1s - a21*(-as1 - a12*a2s)"
  91. print "a = " + str(a)
  92. print "r = " + str(r)
  93. print "t = " + str(t)
  94. try:
  95. assert t == r
  96. print "PASS"
  97. except AssertionError:
  98. print "FAILED"
  99. exit()
  100. print [57/418]
  101. a = [[(2, 0), (2, 1), (1, 0)], (2, 1), [(1, 0), (1, 2), [(2, 0), (2, 1), (1, 0)]]]
  102. r = [(1, [(2, 0)]), (1, [(2, 1), (1, 0)]), (1, [(2, 1), (1, 0)]), (-1, [(2, 1), (1
  103. , 2), (2, 0)]), (-1, [(2, 1), (1, 2), (2, 1), (1, 0)])]
  104. t = expand(a)
  105. print "test 4:"
  106. print "-(-a2s - a21*a1s) - a21*(-a1s - a12*(-a2s - a21*a1s))"
  107. print "a = " + str(a)
  108. print "r = " + str(r)
  109. print "t = " + str(t)
  110. try:
  111. assert t == r
  112. print "PASS"
  113. except AssertionError:
  114. print "FAILED"
  115. exit()
  116. print
  117. a = [(0, 1), [(0, 2), (0, 1), (1, 2)], (2, 1)]
  118. r = [(-1, [(0, 1)]), (1, [(0, 2), (2, 1)]), (1, [(0, 1), (1, 2), (2, 1)])]
  119. t = expand(a)
  120. print "test 5:"
  121. print "-as1 - (-as2 - as1*a12)*a21"
  122. print "a = " + str(a)
  123. print "r = " + str(r)
  124. print "t = " + str(t)
  125. try:
  126. assert t == r
  127. print "PASS"
  128. except AssertionError:
  129. print "FAILED"
  130. exit()
  131. print
  132. a = [(1, 0), [(1, 2), (2, 0), (1, 0)], [(2, 1), (1, 0), (2, 0)]]
  133. r = [(-1, [(1, 0)]), (-1, [(1, 2), (2, 1)]),
  134. (-1, [(1, 2), (1, 0), (2, 0)]), (-1, [(2, 0), (1, 0), (2, 1)]),
  135. (-1, [(2, 0), (1, 0), (1, 0), (2, 0)])]
  136. t = expand(a)
  137. print "test 6:"
  138. print "-as1 - (-a12 + a2s*a1s)(-a21 - a1s*a2s)"
  139. print "a = " + str(a)
  140. print "r = " + str(r)
  141. print "t = " + str(t)
  142. try:
  143. assert t == r
  144. print "PASS"
  145. except AssertionError:
  146. print "FAILED"
  147. exit()
  148. print
  149. a = [(1, 0), [(1, 2), [(0, 2), (0, 1), (1, 2)], (1, 0)],
  150. [(2, 1), (1, 0), (2, 0)]]
  151. r = [(-1, [(1, 0)]), (-1, [(1, 2), (2, 1)]),
  152. (-1, [(1, 2), (1, 0), (2, 0)]),
  153. (1, [(0, 2), (1, 0), (2, 1)]), (1, [(0, 2), (1, 0), (1, 0), (2, 0)]),
  154. (1, [(0, 1), (1, 2), (1, 0), (2, 1)]),
  155. (1, [(0, 1), (1, 2), (1, 0), (1, 0), (2, 0)])]
  156. t = expand(a)
  157. print "test 7:"
  158. print "-a1s - (-a12 - (-as2 - as1*a12)*a1s)*(-a12 - a1s*a2s)"
  159. print "a = " + str(a)
  160. print "r = " + str(r)
  161. print "t = " + str(t)
  162. try:
  163. assert t == r
  164. print "PASS"
  165. except AssertionError:
  166. print "FAILED"
  167. exit()
  168. print
  169. print "test 9:"
  170. a = [(1, 0), [(1, 2), (2, 0), (1, 0)], [(2, 1), [(0, 2), (0, 1), (1, 2)],
  171. (2, 0)]]
  172. r = [(-1, [(1, 0)]),
  173. (-1, [(1, 2), (2, 1)]),
  174. (1, [(1, 2), (0, 2), (2, 0)]),
  175. (1, [(1, 2), (0, 1), (1, 2), (2, 0)]),
  176. (-1, [(2, 0), (1, 0), (2, 1)]),
  177. (1, [(2, 0), (1, 0), (0, 2), (2, 0)]),
  178. (1, [(2, 0), (1, 0), (0, 1), (1, 2), (2, 0)])]
  179. t = expand(a)
  180. print "-a1s - (-a12 - a2s*a1s)(-a21 - (-as2 - as1*a12)*a2s)"
  181. print "a = " + str(a)
  182. print "r = " + str(r)
  183. print "t = " + str(t)
  184. try:
  185. assert t == r
  186. print "PASS"
  187. except AssertionError:
  188. print "FAILED"
  189. exit()
  190. print
  191. test_expand()
  192. a = [[[[(3, 0), (3, 1), (1, 0)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [(2, 0), (2, 1), (1, 0)]], [[(3, 1), [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], (2, 1)], [[[[(3, 4), (3, 1), (1, 4)], (3, 1), (1, 4)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [(4, 1), [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], (2, 1)]], [[(1, 0), [(1, 4), (1, 2), [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(4, 0), (4, 1), (1, 0)], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [(2, 0), (2, 1), (1, 0)]]], [[(1, 3), (1, 2), [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]], [(1, 4), (1, 2), [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[[[(4, 3), (4, 1), (1, 3)], (4, 1), (1, 3)], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]]], [[(3, 0), (3, 1), (1, 0)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [(2, 0), (2, 1), (1, 0)]]]], [[[[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[[[(3, 4), (3, 1), (1, 4)], (3, 1), (1, 4)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)]], [[(3, 1), [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], (2, 1)], [[[[(3, 4), (3, 1), (1, 4)], (3, 1), (1, 4)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [(4, 1), [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], (2, 1)]], [[[[(1, 2), [(1, 4), (1, 2), [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)]], [(1, 4), (1, 2), [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)]], [[(1, 3), (1, 2), [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]], [(1, 4), (1, 2), [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[[[(4, 3), (4, 1), (1, 3)], (4, 1), (1, 3)], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]]], [[[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[[[(3, 4), (3, 1), (1, 4)], (3, 1), (1, 4)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)]]], [[(1, 3), (1, 2), [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]], [(1, 4), (1, 2), [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[[[(4, 3), (4, 1), (1, 3)], (4, 1), (1, 3)], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]]], [[[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[[[(3, 4), (3, 1), (1, 4)], (3, 1), (1, 4)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)]]]], [[[(2, 0), (2, 1), (1, 0)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)], [[(4, 0), (4, 1), (1, 0)], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [(2, 0), (2, 1), (1, 0)]]], [[[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)], [[(2, 4), (2, 1), (1, 4)], (2, 1), (1, 4)], [[[[(4, 3), (4, 1), (1, 3)], (4, 1), (1, 3)], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]], [[(4, 2), (4, 1), (1, 2)], (4, 1), (1, 2)], [[(2, 3), (2, 1), (1, 3)], (2, 1), (1, 3)]]], [[(3, 0), (3, 1), (1, 0)], [[(3, 2), (3, 1), (1, 2)], (3, 1), (1, 2)], [(2, 0), (2, 1), (1, 0)]]]]
  193. print "calling expand on a"
  194. print expand(a)
  195.