Beispiel #1
0
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
Beispiel #2
0
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)