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