# 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")
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())
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