def test_chc_vscf(self): """ chc vscf test """ co2_2modes_2modals_2body = [ [[[[0, 0, 0]], 320.8467332810141], [[[0, 1, 1]], 1760.878530705873], [[[1, 0, 0]], 342.8218290247543], [[[1, 1, 1]], 1032.396323618631]], [[[[0, 0, 0], [1, 0, 0]], -57.34003649795117], [[[0, 0, 1], [1, 0, 0]], -56.33205925807966], [[[0, 1, 0], [1, 0, 0]], -56.33205925807966], [[[0, 1, 1], [1, 0, 0]], -60.13032761856809], [[[0, 0, 0], [1, 0, 1]], -65.09576309934431], [[[0, 0, 1], [1, 0, 1]], -62.2363839133389], [[[0, 1, 0], [1, 0, 1]], -62.2363839133389], [[[0, 1, 1], [1, 0, 1]], -121.5533969109279], [[[0, 0, 0], [1, 1, 0]], -65.09576309934431], [[[0, 0, 1], [1, 1, 0]], -62.2363839133389], [[[0, 1, 0], [1, 1, 0]], -62.2363839133389], [[[0, 1, 1], [1, 1, 0]], -121.5533969109279], [[[0, 0, 0], [1, 1, 1]], -170.744837386338], [[[0, 0, 1], [1, 1, 1]], -167.7433236025723], [[[0, 1, 0], [1, 1, 1]], -167.7433236025723], [[[0, 1, 1], [1, 1, 1]], -179.0536532281924]] ] num_modes = 2 num_modals = [2, 2] vibrational_op_labels = _create_labels(co2_2modes_2modals_2body) vibr_op = VibrationalOp(vibrational_op_labels, num_modes, num_modals) converter = QubitConverter(DirectMapper()) qubit_op = converter.convert_match(vibr_op) init_state = VSCF(num_modals) num_qubits = sum(num_modals) excitations = [] excitations += generate_vibration_excitations(num_excitations=1, num_modals=num_modals) excitations += generate_vibration_excitations(num_excitations=2, num_modals=num_modals) chc_ansatz = CHC(num_qubits, ladder=False, excitations=excitations, initial_state=init_state) backend = QuantumInstance( BasicAer.get_backend('statevector_simulator'), seed_transpiler=2, seed_simulator=2) optimizer = COBYLA(maxiter=1000) algo = VQE(chc_ansatz, optimizer=optimizer, quantum_instance=backend) vqe_result = algo.compute_minimum_eigenvalue(qubit_op) energy = vqe_result.optimal_value self.assertAlmostEqual(energy, self.reference_energy, places=4)
def test_create_labels(self): """Tests that correct labels are built.""" logfile = self.get_resource_path( 'CO2_freq_B3LYP_ccpVDZ.log', 'problems/second_quantization/vibrational/resources') driver = GaussianForcesDriver(logfile=logfile) watson_hamiltonian = driver.run() num_modals = 2 truncation_order = 3 num_modes = watson_hamiltonian.num_modes num_modals = [num_modals] * num_modes boson_hamilt_harm_basis = HarmonicBasis(watson_hamiltonian, num_modals, truncation_order).convert() labels, coeffs = zip(*_create_labels(boson_hamilt_harm_basis)) self.assertSetEqual(frozenset(labels), frozenset(expected_labels)) self.assertSetEqual(frozenset(coeffs), frozenset(expected_coeffs))
def build_vibrational_op_from_ints(h_mat: List[List[Tuple[List[List[int]], complex]]], num_modes: int, num_modals: List[int], ) -> VibrationalOp: """ Builds a :class:`VibrationalOp` based on an integral list as produced by :meth:`HarmonicBasis.convert()`. Args: h_mat: integral list. num_modes: the number of modes. num_modals: the number of modals. Returns: The constructed VibrationalOp. """ all_labels = _create_labels(h_mat) return VibrationalOp(all_labels, num_modes, num_modals)