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
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
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
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
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
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
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
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
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