def cube_face_bases(k, n, dtype=np.float32): A, B = 'A', 'B' is_a, is_b = predicates.eq_(A), predicates.eq_(B) for path in combinatorics.lexicographic_permutations((n-k)*[A] + (k)*[B]): a = vectors.units(iterables.indices(path, is_a), n=n, dtype=dtype) b = vectors.units(iterables.indices(path, is_b), n=n, dtype=dtype) yield a, b
def cube_faces(k, n): A, B = 'A', 'B' isA, isB = predicates.eq_(A), predicates.eq_(B) def _cube_faces(path, o): #ia, ib = where(isA, path), where(isB, path) p0 = path r0 = [] for i, p1 in enumerate(replace_all_with_binary_numbers(isB, p0, n)): r1 = [] for j, p2 in enumerate(replace_all_with_binary_numbers(isA, p1, n)): ''' if ia is not None: #p2[ia] *= (-1)**i * (-1)**o # Alternate Orientation p2[ia] ^= (1 + i + o) % 2 # Alternate Orientation ''' r1.append(p2) r0.append(r1) return r0 if k > n: return elif k == 0: for i in range(2**n): yield [i] return elif k == n: yield [i for i in range(2**n)] return for i, path in enumerate(combinatorics.lexicographic_permutations((k)*[A] + (n-k)*[B])): for face in _cube_faces(path, i): yield map(mathematics.decode_binary, face)