Пример #1
0
	# Remove
	fermop = fermop.fermion_mode_elimination(remove_list)

	# Update variables
	num_spin_orbitals -= len(freeze_list)
	num_particles -= len(freeze_list)
	num_spin_orbitals -= len(remove_list)
	
	# Generate qubit op
	qubitop = fermop.mapping('parity')
	qubitop = Z2Symmetries.two_qubit_reduction(qubitop, num_particles)

	qubit_op_str = qubitop.print_details()
	open("results/old/qubitop1.txt", "w").write(qubit_op_str)
else:  # New
	fermop, energy_shift = FermionicOperator.construct_operator(molecule, freeze_list, remove_list)

	# Update variables
	num_spin_orbitals -= len(freeze_list)
	num_particles -= len(freeze_list)
	num_spin_orbitals -= len(remove_list)

	# Generate qubit op
	#import pdb; pdb.set_trace()
	qubitop = fermop.mapping('parity')
	qubitop = Z2Symmetries.two_qubit_reduction(qubitop, num_particles)
	#import pdb; pdb.set_trace()

	# Save operator
	#qubitop.to_file("results/new/femoco.qubitop")
Пример #2
0
    def run(self):

        print("=======================")
        print("=== Starting run... ===")
        print("=======================")

        print("Start time: " + time.strftime("%b %d, %Y - %X"))
        start_time = time.time()

        print("Loading xyz file...")
        self.g = self.load_xyz(self.geometry_filename)
        self.driver = PySCFDriver(atom=self.convert_g_to_str(self.g),
                                  unit=UnitsType.ANGSTROM,
                                  charge=self.charge,
                                  spin=self.spin,
                                  max_cycle=5000,
                                  max_memory=1024 * 128,
                                  basis=self.basis)

        def load_molecule(filename):
            if os.path.exists(filename):
                print(f"Found {filename}. Loading...")
                molecule = QMolecule(filename)
                molecule.load()
            else:
                # Regenerate
                print(f"Couldn't find {filename}. Regenerating...")
                molecule = self.driver.run()
                molecule.save(filename)
            return molecule

        print("Getting molecule...")
        self.molecule = load_molecule(self.filename)

        # ----- Generate circuit -----

        print("Constructing operator...")
        fermop, energy_shift = FermionicOperator.construct_operator(
            self.molecule, self.freeze_list, self.remove_list)

        # Generate qubit op
        print("Mapping fermion operator to qubit operator...")
        qubitop = fermop.mapping(self.map_type)

        # ----- Compile results -----

        end_time = time.time()

        results_dir = "results/" + time.strftime("%b-%d-%Y-%X")
        print("Saving results to " + results_dir)
        pathlib.Path(results_dir).mkdir(parents=True, exist_ok=True)

        # Write notes file
        with open(os.path.join(results_dir, "notes.txt"), "w") as f:
            f.write("==== RUN NOTES ====\n")
            f.write("Filename: " + str(self.filename) + "\n")
            f.write("Charge: " + str(self.charge) + "\n")
            f.write("Spin: " + str(self.spin) + "\n")
            f.write("Freeze list: " + str(self.freeze_list) + "\n")
            f.write("Remove list: " + str(self.remove_list) + "\n")
            f.write("Map type: " + str(self.map_type) + "\n")
            f.write("G: " + str(self.g) + "\n")
            f.write("Basis: " + str(self.basis) + "\n")
            f.write("\n")
            f.write("==== RUN DETAILS ====\n")
            f.write("Started: " + time.ctime(start_time) + "\n")
            f.write("Ended: " + time.ctime(end_time) + "\n")
            f.write("Run duration (in seconds): " +
                    str(end_time - start_time) + "\n")

        # Save operator
        qubitop.to_file(os.path.join(results_dir, "qubitop.bin"))
        with open(os.path.join(results_dir, "qubitop.txt"), "w") as f:
            f.write(qubitop.print_details())
Пример #3
0
    def run_modified_qiskit(self):

        result = Result()

        # ----- Import libraries and initialize -----

        sys.path.insert(0, os.getcwd())
        sys.path.insert(0, os.path.abspath(os.path.join(os.getcwd(), "lib")))

        from lib.qiskit.chemistry.drivers import PySCFDriver, UnitsType
        from lib.qiskit.chemistry import QMolecule, FermionicOperator
        from lib.qiskit.chemistry.core import Hamiltonian, TransformationType, QubitMappingType
        from lib.qiskit.chemistry.transformations import FermionicTransformation

        # ----- Perform test -----

        self.init()

        self.driver = PySCFDriver(atom=self.convert_g_to_str(self.g),
                                  unit=UnitsType.ANGSTROM,
                                  charge=0,
                                  spin=0,
                                  max_cycle=5000,
                                  max_memory=1024 * 128,
                                  basis='sto3g')

        def load_molecule(filename):
            if os.path.exists(filename):
                print(f"Found {filename}. Loading...")
                molecule = QMolecule(filename)
                molecule.load()
            else:
                # Regenerate
                print(f"Couldn't find {filename}. Regenerating...")
                molecule = self.driver.run()
                molecule.save(filename)
            return molecule

        self.molecule = load_molecule(self.filename)

        # ----- Perform test -----

        fermop, energy_shift = FermionicOperator.construct_operator(
            self.molecule, self.freeze_list, self.remove_list)

        result.h1 = fermop.h1
        result.h2 = fermop.h2
        result.energy_shift = energy_shift

        # Generate qubit op
        qubitop = fermop.mapping('parity')

        # Save operator
        #qubitop.to_file("results/new/femoco.qubitop")

        # Generate results
        qubit_op_str = qubitop.print_details()

        # Write results to file
        results_dir = "results/new"
        output_file = "qubitop1.txt"

        pathlib.Path(results_dir).mkdir(parents=True, exist_ok=True)
        with open(os.path.join(results_dir, output_file), "w") as f:
            f.write(qubit_op_str)

        result.qubitop = qubitop

        return result