def test_freezing_core(self):
        cfg_mgr = ConfigurationManager()
        pyscf_cfg = OrderedDict([('atom', 'H .0 .0 -1.160518; Li .0 .0 0.386839'),
                                 ('unit', 'Angstrom'), ('charge', 0),
                                 ('spin', 0), ('basis', 'sto3g')])
        section = {}
        section['properties'] = pyscf_cfg
        driver = cfg_mgr.get_driver_instance('PYSCF')
        molecule = driver.run(section)
        fer_op = FermionicOperator(h1=molecule._one_body_integrals,
                                   h2=molecule._two_body_integrals)
        fer_op, energy_shift = fer_op.fermion_mode_freezing([0, 6])
        gt = -7.8187092970493755
        diff = abs(energy_shift - gt)
        self.assertLess(diff, 1e-6)

        cfg_mgr = ConfigurationManager()
        pyscf_cfg = OrderedDict([('atom', 'H .0 .0 .0; Na .0 .0 1.888'), ('unit', 'Angstrom'),
                                 ('charge', 0), ('spin', 0), ('basis', 'sto3g')])
        section = {}
        section['properties'] = pyscf_cfg
        driver = cfg_mgr.get_driver_instance('PYSCF')
        molecule = driver.run(section)
        fer_op = FermionicOperator(h1=molecule._one_body_integrals,
                                   h2=molecule._two_body_integrals)
        fer_op, energy_shift = fer_op.fermion_mode_freezing([0, 1, 2, 3, 4, 10, 11, 12, 13, 14])
        gt = -162.58414559586748
        diff = abs(energy_shift - gt)
        self.assertLess(diff, 1e-6)
    def _update_driver_input_schemas(self):
        driver_name = self.get_section_property(InputParser.DRIVER,
                                                JSONSchema.NAME)
        if driver_name is not None:
            driver_name = driver_name.strip().lower()

        mgr = ConfigurationManager()
        configs = mgr.configurations
        for (name, config) in configs.items():
            name = name.lower()
            if driver_name is not None and driver_name == name:
                input_schema = copy.deepcopy(
                    config['input_schema']) if 'input_schema' in config else {
                        'type': 'object'
                    }
                if '$schema' in input_schema:
                    del input_schema['$schema']
                if 'id' in input_schema:
                    del input_schema['id']

                self._json_schema.schema['properties'][
                    driver_name] = input_schema
            else:
                if name in self._json_schema.schema['properties']:
                    del self._json_schema.schema['properties'][name]
    def _update_driver_sections(self):
        driver_name = self.get_section_property(InputParser.DRIVER,
                                                JSONSchema.NAME)
        if driver_name is not None:
            driver_name = driver_name.strip().lower()

        mgr = ConfigurationManager()
        configs = mgr.configurations
        for (name, config) in configs.items():
            name = name.lower()
            if driver_name is not None and driver_name == name:
                continue

            if name in self._sections:
                del self._sections[name]

        if driver_name is not None and driver_name not in self._sections:
            self.set_section(driver_name)
            value = self.get_section_default_properties(driver_name)
            if isinstance(value, dict):
                for property_name, property_value in value.items():
                    self.set_section_property(driver_name, property_name,
                                              property_value)
            else:
                if value is None:
                    types = self.get_section_types(driver_name)
                    if 'null' not in types:
                        if 'string' in types:
                            value = ''
                        elif 'object' in types:
                            value = {}
                        elif 'array' in types:
                            value = []

                self.set_section_data(driver_name, value)
Example #4
0
 def __init__(self,view):
     self._view = view
     self._model = Model()
     self._filemenu = None
     self._title = tk.StringVar()
     self._sectionsView = None
     self._emptyView = None
     self._sectionView_title = tk.StringVar()
     self._propertiesView = None
     self._textView = None
     self._outputView = None
     self._progress = None
     self._button_text = None
     self._start_button = None
     self._save_algo_json = tk.IntVar()
     self._save_algo_json.set(0)
     self._thread_queue = queue.Queue()
     self._thread = None
     self._command = Controller._START
     self._driver_names = []
     config_mgr = ConfigurationManager()
     for name in config_mgr.module_names:
         try:
             config_mgr.get_driver_instance(name)
             self._driver_names.append(name)
         except:
             pass
         
     self._process_stop = False
     self._validate_integer_command = self._view.register(Controller._validate_integer)
     self._validate_float_command = self._view.register(Controller._validate_float)
     self._available_backends = []
     self._backendsthread = None
     self.get_available_backends()
    def test_bksf_mapping(self):
        """Test bksf mapping

        The spectrum of bksf mapping should be half of jordan wigner mapping.
        """
        cfg_mgr = ConfigurationManager()
        pyscf_cfg = OrderedDict([('atom', 'H .0 .0 0.7414; H .0 .0 .0'), ('unit', 'Angstrom'),
                                 ('charge', 0), ('spin', 0), ('basis', 'sto3g')])
        section = {}
        section['properties'] = pyscf_cfg
        driver = cfg_mgr.get_driver_instance('PYSCF')
        molecule = driver.run(section)
        fer_op = FermionicOperator(h1=molecule._one_body_integrals,
                                   h2=molecule._two_body_integrals)
        jw_op = fer_op.mapping('jordan_wigner')
        bksf_op = fer_op.mapping('bravyi_kitaev_sf')
        jw_op.to_matrix()
        bksf_op.to_matrix()
        jw_eigs = np.linalg.eigvals(jw_op.matrix.toarray())
        bksf_eigs = np.linalg.eigvals(bksf_op.matrix.toarray())

        jw_eigs = np.sort(np.around(jw_eigs.real, 6))
        bksf_eigs = np.sort(np.around(bksf_eigs.real, 6))
        overlapped_spectrum = np.sum(np.isin(jw_eigs, bksf_eigs))

        self.assertEqual(overlapped_spectrum, jw_eigs.size // 2)
 def setUp(self):
     cfg_mgr = ConfigurationManager()
     hdf5_cfg = OrderedDict([
         ('hdf5_input', self._get_resource_path('test_driver_hdf5.hdf5'))
     ])
     section = {'properties': hdf5_cfg}
     driver = cfg_mgr.get_driver_instance('HDF5')
     self.qmolecule = driver.run(section)
 def setUp(self):
     cfg_mgr = ConfigurationManager()
     pyscf_cfg = OrderedDict([('atom', 'Li .0 .0 .0; H .0 .0 1.595'), ('unit', 'Angstrom'),
                              ('charge', 0), ('spin', 0), ('basis', 'sto3g')])
     section = {}
     section['properties'] = pyscf_cfg
     driver = cfg_mgr.get_driver_instance('PYSCF')
     molecule = driver.run(section)
     self.fer_op = FermionicOperator(h1=molecule._one_body_integrals,
                                     h2=molecule._two_body_integrals)
Example #8
0
def procesar_molecula(configuracionmolecula, distancia=None):
    """Esta función analiza que tipo de procesado necesita una molécula para pedir su construcción"""
    gestorconfiguracion = ConfigurationManager()
    if configuracionmolecula["driver"] == "PYSCF":
        molecula = __procesar_molecula_pyscf(configuracionmolecula, distancia)
    else:
        driver = gestorconfiguracion.get_driver_instance(
            configuracionmolecula["driver"])
        molecula = driver.run(configuracionmolecula["configuracion"])
    return molecula
Example #9
0
 def setUp(self):
     cfg_mgr = ConfigurationManager()
     pyscf_cfg = OrderedDict([('atom', 'H .0 .0 .0; H .0 .0 0.735'),
                              ('unit', 'Angstrom'), ('charge', 0),
                              ('spin', 0), ('basis', 'sto3g')])
     section = {'properties': pyscf_cfg}
     try:
         driver = cfg_mgr.get_driver_instance('PYSCF')
     except ModuleNotFoundError:
         self.skipTest('PYSCF driver does not appear to be installed')
     self.qmolecule = driver.run(section)
Example #10
0
    def driver_names(self):
        from qiskit_aqua_chemistry.drivers import ConfigurationManager
        if self._driver_names is None:
            self._driver_names = []
            config_mgr = ConfigurationManager()
            for name in config_mgr.module_names:
                try:
                    config_mgr.get_driver_instance(name)
                    self._driver_names.append(name)
                except:
                    pass

        return self._driver_names
Example #11
0
    def setUp(self):
        cfg_mgr = ConfigurationManager()
        gaussian_cfg = """
# rhf/sto-3g scf(conventional) geom=nocrowd

h2 molecule

0 1
H   0.0  0.0    0.0
H   0.0  0.0    0.735

"""
        section = {'data': gaussian_cfg}
        try:
            driver = cfg_mgr.get_driver_instance('GAUSSIAN')
        except AquaChemistryError:
            self.skipTest('GAUSSIAN driver does not appear to be installed')
        self.qmolecule = driver.run(section)
Example #12
0
    def setUp(self):
        cfg_mgr = ConfigurationManager()
        hdf5_cfg = OrderedDict([
            ('hdf5_input', self._get_resource_path('test_driver_hdf5.hdf5'))
        ])
        section = {'properties': hdf5_cfg}
        driver = cfg_mgr.get_driver_instance('HDF5')
        self.qmolecule = driver.run(section)

        core = Hamiltonian(transformation='full',
                           qubit_mapping='parity',
                           two_qubit_reduction=True,
                           freeze_core=False,
                           orbital_reduction=[],
                           max_workers=4)

        self.algo_input = core.run(self.qmolecule)
        self.reference_energy = -1.857275027031588
Example #13
0
    def setUp(self):
        cfg_mgr = ConfigurationManager()
        psi4_cfg = """
molecule h2 {
  0 1
  H  0.0 0.0 0.0
  H  0.0 0.0 0.735
}
 
set {
  basis sto-3g
  scf_type pk
}
"""
        section = {'data': psi4_cfg}
        try:
            driver = cfg_mgr.get_driver_instance('PSI4')
        except AquaChemistryError:
            self.skipTest('PSI4 driver does not appear to be installed')
        self.qmolecule = driver.run(section)
    def apply(self, preferences):
        changed = False
        packages = self._preferences.get_packages(
            Preferences.PACKAGE_TYPE_DRIVERS, [])
        if packages != preferences.get_packages(
                Preferences.PACKAGE_TYPE_DRIVERS, []):
            preferences.set_packages(Preferences.PACKAGE_TYPE_DRIVERS,
                                     packages)
            changed = True

        packages = self._preferences.get_packages(
            Preferences.PACKAGE_TYPE_CHEMISTRY, [])
        if packages != preferences.get_packages(
                Preferences.PACKAGE_TYPE_CHEMISTRY, []):
            preferences.set_packages(Preferences.PACKAGE_TYPE_CHEMISTRY,
                                     packages)
            changed = True

        if changed:
            preferences.save()
            refresh_operators()
            configuration_mgr = ConfigurationManager()
            configuration_mgr.refresh_drivers()
 def __init__(self):
     """Create an AquaChemistry object."""
     self._configuration_mgr = ConfigurationManager()
     self._parser = None
     self._core = None
Example #16
0
 def __init__(self):
     """Create Model object."""
     self._configuration_mgr = ConfigurationManager()
     self._parser = InputParser()
Example #17
0
    def test_qpe(self, distance):
        self.algorithm = 'QPE'
        self.log.debug(
            'Testing End-to-End with QPE on H2 with inter-atomic distance {}.'.
            format(distance))
        cfg_mgr = ConfigurationManager()
        pyscf_cfg = OrderedDict([('atom',
                                  'H .0 .0 .0; H .0 .0 {}'.format(distance)),
                                 ('unit', 'Angstrom'), ('charge', 0),
                                 ('spin', 0), ('basis', 'sto3g')])
        section = {}
        section['properties'] = pyscf_cfg
        try:
            driver = cfg_mgr.get_driver_instance('PYSCF')
        except ModuleNotFoundError:
            self.skipTest('PYSCF driver does not appear to be installed')

        self.molecule = driver.run(section)

        ferOp = FermionicOperator(h1=self.molecule._one_body_integrals,
                                  h2=self.molecule._two_body_integrals)
        self.qubitOp = ferOp.mapping(
            map_type='PARITY', threshold=1e-10).two_qubit_reduced_operator(2)

        exact_eigensolver = get_algorithm_instance('ExactEigensolver')
        exact_eigensolver.init_args(self.qubitOp, k=1)
        results = exact_eigensolver.run()
        self.reference_energy = results['energy']
        self.log.debug('The exact ground state energy is: {}'.format(
            results['energy']))

        num_particles = self.molecule._num_alpha + self.molecule._num_beta
        two_qubit_reduction = True
        num_orbitals = self.qubitOp.num_qubits + (2 if two_qubit_reduction else
                                                  0)
        qubit_mapping = 'parity'

        num_time_slices = 50
        n_ancillae = 9

        qpe = get_algorithm_instance('QPE')
        qpe.setup_quantum_backend(backend='local_qasm_simulator',
                                  shots=100,
                                  skip_transpiler=True)

        state_in = get_initial_state_instance('HartreeFock')
        state_in.init_args(self.qubitOp.num_qubits, num_orbitals,
                           qubit_mapping, two_qubit_reduction, num_particles)

        iqft = get_iqft_instance('STANDARD')
        iqft.init_args(n_ancillae)

        qpe.init_args(self.qubitOp,
                      state_in,
                      iqft,
                      num_time_slices,
                      n_ancillae,
                      paulis_grouping='random',
                      expansion_mode='suzuki',
                      expansion_order=2)

        result = qpe.run()

        self.log.debug('measurement results:      {}'.format(
            result['measurements']))
        self.log.debug('top result str label:     {}'.format(
            result['top_measurement_label']))
        self.log.debug('top result in decimal:    {}'.format(
            result['top_measurement_decimal']))
        self.log.debug('stretch:                  {}'.format(
            result['stretch']))
        self.log.debug('translation:              {}'.format(
            result['translation']))
        self.log.debug('final energy from QPE:    {}'.format(result['energy']))
        self.log.debug('reference energy:         {}'.format(
            self.reference_energy))
        self.log.debug('ref energy (transformed): {}'.format(
            (self.reference_energy + result['translation']) *
            result['stretch']))
        self.log.debug('ref binary str label:     {}'.format(
            decimal_to_binary((self.reference_energy + result['translation']) *
                              result['stretch'],
                              max_num_digits=n_ancillae + 3,
                              fractional_part_only=True)))

        np.testing.assert_approx_equal(result['energy'],
                                       self.reference_energy,
                                       significant=2)
 def _load_driver_names():
     if InputParser._DRIVER_NAMES is None:
         mgr = ConfigurationManager()
         InputParser._DRIVER_NAMES = [
             name.lower() for name in mgr.module_names
         ]