Commit 5b7c8094 authored by Murali's avatar Murali
Browse files

Only circuit loading, transpile & run; removed circ generation

parent 5babd843
Loading
Loading
Loading
Loading
+19 −32
Original line number Diff line number Diff line
@@ -4,18 +4,13 @@ Script to perform quantum linear solver for any Ax=b problem. The HHL algorithm
Function `func_matrix_vector.py` is used to define A and b.
Function `func_qc.py` is used to generate, transpile, and run the quantum circuit.
Sample code run script:
python linear_solver.py -case sample-tridiag -casefile input_vars.yaml -s 1000
python solver.py -case sample-tridiag -casefile input_vars.yaml -s 1000
'''

import numpy as np

# Importing standard Qiskit libraries
from qiskit import QuantumCircuit, transpile
from qiskit.execute_function import execute
from qiskit import Aer
from qiskit_aer import AerSimulator
from linear_solvers import NumPyLinearSolver, HHL
# library to generate HHL circuit for given matrix and vector, transpile circuit with given backend, and run shot-based  simulations
# library to load circuit for given matrix and vector, transpile circuit with given backend, and run shot-based  simulations
from func_qc import qc_backend, qc_circ
import func_matrix_vector as matvec

@@ -32,36 +27,28 @@ parser.add_argument("-s", "--SHOTS", type=int, default=1000, required=True, help
parser.add_argument("--gpu", default=False, action='store_true', help="Use GPU backend for Aer simulator.")
parser.add_argument("--gpumultiple", default=False, action='store_true', help="Use multiple GPUs for the backend of Aer simulator.")
parser.add_argument("-backtyp", "--backend_type",  type=str, default='ideal', required=False, help="Type of the backend: 'ideal', 'fake' 'real-ibm'")
parser.add_argument("-backmet", "--backend_method",  type=str, default='statevector', required=False, help="Method/name of the backend. E.g. 'statevector', 'simulator_statevector' 'FakeNairobi' 'ibm_nairobi'")
parser.add_argument("-backmet", "--backend_method",  type=str, default='statevector', required=False, help="Method/name of the backend. E.g. 'statevector' 'fake_sherbrooke' 'ibm_sherbrooke'")
parser.add_argument("--drawcirc", default=False, action='store_true', help="Draw circuit.")
parser.add_argument("--plothist", default=False, action='store_true', help="Draw circuit.")

parser.add_argument("--savedata", default=False, action='store_true', help="Save data at `models/<filename>` with `<filename>` based on parameters.")
parser.add_argument("--loadcirc", default=False, action='store_true', help="Load circuit at `models/<filename>` with `<filename>` based on parameters.")
parser.add_argument("--loadcirctranspile", default=False, action='store_true', help="Load transpiled circuit at `models/<filename>` with `<filename>` based on parameters.")
args = parser.parse_args()

if __name__ == '__main__':
    # Get system matrix and vector
matrix, vector, filename = matvec.get_matrix_vector(args)

# setup HHL solver
backend_init = qc_backend('ideal', 'statevector', args)
hhl = HHL(quantum_instance=backend_init)

# setup quantum backend
backend_type = args.backend_type
backend_method = args.backend_method
print(f'Using \'{backend_type}\' simulator with \'{backend_method}\' backend')
backend = qc_backend(backend_type, backend_method, args)
print(f'Backend: {backend}')
    matrix, vector, input_vars = matvec.get_matrix_vector(args)
    n_qubits_matrix = int(np.log2(matrix.shape[0]))
    
    # Solutions
    # classical soultion
    t = time.time()
classical_solution = NumPyLinearSolver().solve(matrix, vector/np.linalg.norm(vector))
    classical_solution = np.linalg.solve(matrix, vector/np.linalg.norm(vector))
    t_classical = time.time() - t
    print(f'Time elapsed for classical:  {int(t_classical/60)} min {t_classical%60:.2f} sec', flush=True)
    
# quantum circuit solution
qc_circ(matrix, vector, hhl, args, [backend_type, backend_method], backend, classical_solution, filename=filename)
    # quantum solution
    qc_circ(n_qubits_matrix, classical_solution, args, input_vars)