def create_mul_testvectors():
    """Yield pairs of matrices for testing matrix multiplication

    These matrices are instances of class ``QStateMatrix``.
    """
    for i in range(2, 6):
        for j in range(2, 6):
            for r in range(2, 12, 2):
                for n in range(2):
                    m1 = qs_rand_matrix(i, j, r)
                    rand_mul_scalar(m1)
                    m2 = qs_rand_matrix(i, j, r)
                    rand_mul_scalar(m2)
                    yield m1, m2
def large_matmul_testvectors():
    """Yield test data for large matrix multiplication

    yield pairs ``m1``, ``m2`` of 2**12 times 2**12
    and also pairs random slices of about 40 elements
    in range(2**12)
    """
    nn = 12
    for r in range(10, 27):
        m1 = qs_rand_matrix(nn, nn, r)
        rand_mul_scalar(m1)
        m2 = qs_rand_matrix(nn, nn, r)
        rand_mul_scalar(m2)
        r1 = slice(randint(0, 100), 1 << nn, 2 * randint(150, 160) + 1)
        r2 = slice(randint(0, 100), 1 << nn, 2 * randint(150, 160) + 1)
        yield m1, m2, r1, r2
Exemple #3
0
def gate_not_testdata():
    for cols, data, v in gate_not_data:
        yield QStateMatrix(0, cols, data), v
    for cols in list(range(6)):
        for r in range(cols + 3):
            for i in range(3):
                v = randint(0, (1 << cols) - 1)
                yield qs_rand_matrix(0, cols, r), v
Exemple #4
0
def gate_phi_testdata():
    for cols in list(range(6)):
        for r in range(cols + 3):
            for i in range(3):
                v = randint(0, (1 << cols) - 1)
                phi = randint(0, 4)
                m = qs_rand_matrix(0, cols, r)
                yield m, v, phi
Exemple #5
0
def create_display_testvectors():
    """yield instances of class ``QStateMatrix`` for tests """
    for rows, cols, factor, data in qs_matrix_data:
        m = QStateMatrix(rows, cols, data)
        m.mul_scalar(*factor)
        yield m
    yield qs_unit_matrix(4)
    for i in range(20):
        yield qs_rand_matrix(2, 0, 3)
    for i in range(20):
        yield qs_rand_matrix(1, 0, 2)
    for rows in range(6):
        for cols in range(5):
            for nr in [1, 2] + list(range(rows + cols, rows + cols + 3)):
                m = qs_rand_matrix(rows, cols, nr)
                m.mul_scalar(randint(-8, 8), randint(0, 7))
                yield m
def create_testmatrices():
    """yield instances of class ``QStateMatrix`` for tests """
    for m_data in qs_matrix_data:
        m = create_m(*m_data)
        yield m
    yield qs_unit_matrix(4)  
    for i in range(20):
        yield qs_rand_matrix(2, 2, 4)
    for cols in range(0,7):
        for rows in range(0, 7):
            if rows + cols > 9:
                 break
            yield QStateMatrix(rows, cols)
            for data_rows in range(1, rows + cols + 3):
                for n in range(2):
                    m = qs_rand_matrix(rows, cols, data_rows)
                    rand_mul_scalar(m)  
                    yield m   
Exemple #7
0
def gate_ctrl_phi_testdata():
    for cols, data, v1, v2 in gate_ctrl_phi_data:
        yield QStateMatrix(0, cols, data), v1, v2
    for cols in list(range(6)):
        for r in range(cols + 3):
            for i in range(3):
                v1 = randint(0, (1 << cols) - 1)
                v2 = randint(0, (1 << cols) - 1)
                m = qs_rand_matrix(0, cols, r)
                yield m, v1, v1
Exemple #8
0
def restrict_testdata():
    for cols, data, j, nqb in restrict_data:
        yield QStateMatrix(0, cols, data), j, nqb
    for cols in list(range(6)):
        for r in range(cols + 3):
            for i in range(3):
                m = qs_rand_matrix(0, cols, r)
                m.mul_scalar(randint(-8, 8), randint(0, 7))
                j = randint(0, cols)
                nqb = randint(0, cols - j)
                yield m, j, nqb
Exemple #9
0
def gate_ctrl_not_testdata():
    for cols, data, v1, v2 in gate_ctrl_not_data:
        yield QStateMatrix(0, cols, data), v1, v2
    for cols in list(range(6)):
        for r in range(cols + 3):
            for i in range(3):
                vc = randint(0, (1 << cols) - 1)
                v = randint(0, (1 << cols) - 1)
                while bitparity(vc & v):
                    v = randint(0, (1 << cols) - 1)
                m = qs_rand_matrix(0, cols, r)
                yield m, vc, v
def create_product_testvectors():
    """yield instances of class ``QStateMatrix`` for tests """
    for m1_data, m2_data, nqb in qs_matrix_data:
        m1 = create_m(*m1_data)
        m2 = create_m(*m2_data)
        yield m1, m2, nqb
    yield qs_unit_matrix(4), qs_unit_matrix(4), 3
    for i in range(20):
        nqb = randint(0, 2)
        yield qs_rand_matrix(2, 0, 3), qs_rand_matrix(2, 0, 3), nqb
    for cols1 in range(2, 6):
        for cols2 in range(2, 6):
            for nqb in range(min(cols1, cols2)):
                for n in range(2):
                    m1 = qs_rand_matrix(0, cols1, cols1 + 3)
                    rand_mul_scalar(m1)
                    m2 = qs_rand_matrix(0, cols2, cols2 + 3)
                    rand_mul_scalar(m2)
                    yield m1, m2, nqb
    # Sparse states
    for cols1 in range(2, 6):
        for cols2 in range(2, 6):
            for nqb in range(min(cols1, cols2)):
                for r in range(3):
                    for n in range(2):
                        m1 = qs_rand_matrix(0, cols1, r)
                        m1.mul_scalar(randint(-8, 8), randint(0, 7))
                        m2 = qs_rand_matrix(0, cols2, r)
                        m1.mul_scalar(randint(-8, 8), randint(0, 7))
                        yield m1, m2, nqb
Exemple #11
0
def rot_testdata():
    for cols, data, rot, nrot, n0 in rot_data:
        yield QStateMatrix(0, cols, data), rot, nrot, n0
    for cols in list(range(6)):
        for r in range(cols + 3):
            for i in range(3):
                nrot = n0 = cols
                while n0 + nrot > cols:
                    n0, nrot = randint(0, cols), randint(0, cols)
                rot = randint(-nrot, nrot)
                m = qs_rand_matrix(0, cols, r)
                m.mul_scalar(randint(-8, 8), randint(0, 7))
                yield m, rot, nrot, n0
Exemple #12
0
def xch_bits_testdata():
    for cols, data, sh, mask in xch_bits_data:
        yield QStateMatrix(0, cols, data), sh, mask
    for cols in list(range(6)):
        for r in range(cols + 3):
            for i in range(3):
                m = qs_rand_matrix(0, cols, r)
                m.mul_scalar(randint(-8, 8), randint(0, 7))
                if cols == 0:
                    yield m, 0, 0
                else:
                    sh = randint(0, cols - 1)
                    mask = randint(0, (1 << (cols - sh)) - 1)
                    mask &= ~(mask << sh)
                    yield m, sh, mask