Пример #1
0
 def get_tapered_qubit_op(self, v_qubit_op, uni_transf, X_list,
                          tapper_coeffs):
     tapered_qubit_op = Operator.qubit_tapering(v_qubit_op, uni_transf,
                                                X_list, tapper_coeffs)
     return tapered_qubit_op
Пример #2
0
            ind = [i for i, a in enumerate(sym_la) if a == 'Z']
            print(ind)
            print("symm is {} commuted.".format("" if is_commuted else "NOT"))

        # Get the unitary operators (cliffords) corresponding the single qubit string.
        [cliffords, single_qubit_list,
         X_pauli_list] = x.get_cliffords(r_mat_evals, sym_list)
        print('Following are the qubits which are tappered off.')
        print(single_qubit_list)

        print("Trying to tapering")
        correct_sector = None
        for taper_coeff in itertools.product([1, -1],
                                             repeat=len(single_qubit_list)):
            tapered_qubit_op = Operator.qubit_tapering(v_qubit_op, cliffords,
                                                       single_qubit_list,
                                                       list(taper_coeff))
            ee = ExactEigensolver(tapered_qubit_op, k=1)
            ee_result = ee.run()
            temp_min_eigvals = ee_result['eigvals'][0]
            if np.isclose(temp_min_eigvals, ref_min_eigvals, rtol=1e-8):
                correct_sector = list(taper_coeff)
            print("at sector {}: eig value: {}; reference: {}".format(
                list(taper_coeff), temp_min_eigvals, ref_min_eigvals.real))

        # correct_sector=[1.,1.,1.,-1.,-1.]

        # Get the tappered qubit operator
        tapered_qubit_op = x.get_tapered_qubit_op(v_qubit_op, cliffords,
                                                  single_qubit_list,
                                                  correct_sector)