def test_available_backends_exist(self):
        """Test if there are available backends.

        If all correct some should exists (even if offline).
        """
        QP_program = QuantumProgram(specs=QPS_SPECS)
        QP_program.set_api(API_TOKEN, URL)
        available_backends = QP_program.available_backends()
        self.assertTrue(available_backends)
    def test_available_backends_exist(self):
        """Test if there are available backends.

        If all correct some should exists (even if offline).
        """
        QP_program = QuantumProgram(specs=QPS_SPECS)
        QP_program.set_api(API_TOKEN, URL)
        available_backends = QP_program.available_backends()
        self.assertTrue(available_backends)
def main():
    # Quantum program setup
    qp = QuantumProgram()
    qp.set_api(Qconfig.APItoken, Qconfig.config["url"])

    # enable logging
    #qp.enable_logs(logging.DEBUG);

    print("Backends=" + str(qp.available_backends()))

    # Create qubits/registers
    size = 2
    q = qp.create_quantum_register('q', size)
    c = qp.create_classical_register('c', size)

    # Quantum circuit
    grover = qp.create_circuit('grover', [q], [c])

    #  loops = sqrt(2^n) * PI/4
    #loops = math.floor(math.sqrt(2**size) * (math.pi/4))

    # 1. put all qubits in superposition
    for i in range(size):
        grover.h(q[i])

    # Set the input
    input_phase(grover, q)

    # 2. Phase inversion
    invert_phase(grover, q)

    input_phase(grover, q)

    # 3. Invert over the mean
    invert_over_the_mean(grover, q)

    # measure
    for i in range(size):
        grover.measure(q[i], c[i])

    circuits = ['grover']

    # Execute the quantum circuits on the simulator
    backend = "local_qasm_simulator"
    #backend = "ibmq_qasm_simulator"
    # the number of shots in the experiment
    shots = 1024

    result = qp.execute(circuits,
                        backend=backend,
                        shots=shots,
                        max_credits=3,
                        timeout=240)
    counts = result.get_counts("grover")
    print("Counts:" + str(counts))
Exemplo n.º 4
0
 def get_available_backends(self):
     if not self._api_set:
         self.set_api()
     return QuantumProgram.available_backends(self)
Exemplo n.º 5
0
try:
    import Qconfig
    Q_program.set_api(Qconfig.APItoken,
                      Qconfig.config["url"],
                      verify=False,
                      hub=Qconfig.config["hub"],
                      group=Qconfig.config["group"],
                      project=Qconfig.config["project"])
except:
    offline = True
    print("""WARNING: There's no connection with IBMQuantumExperience servers.
             cannot test I/O intesive tasks, will only test CPU intensive tasks
             running the jobs in the local simulator""")

print("The backends available for use are:")
pprint(Q_program.available_backends())
print("\n")
backend = 'local_qasm_simulator'
try:
    # Create a Quantum Register called "qr" with 2 qubits.
    qr = Q_program.create_quantum_register("qr", 2)
    # Create a Classical Register called "cr" with 2 bits.
    cr = Q_program.create_classical_register("cr", 2)
    # Create a Quantum Circuit called "qc". involving the Quantum Register "qr"
    # and the Classical Register "cr".
    qc = Q_program.create_circuit("bell", [qr], [cr])

    # Add the H gate in the Qubit 0, putting this qubit in superposition.
    qc.h(qr[0])
    # Add the CX gate on control qubit 0 and target qubit 1, putting
    # the qubits in a Bell state
Exemplo n.º 6
0
class QC():
    '''
    class QC
    '''
    # pylint: disable=too-many-instance-attributes
    def __init__(self, backend='local_qasm_simulator', remote=False, qubits=3):
        # private member
        # __qp
        self.__qp = None

        # calc phase
        self.phase = [
            ['0', 'initialized.']
            ]
        # config
        self.backend = backend
        self.remote = remote
        self.qubits = qubits
        # circuits variable
        self.shots = 2
        # async
        self.wait = False
        self.last = ['init', 'None']

        self.load()

    def load(self, api_info=True):
        '''
        load
        '''
        self.__qp = QuantumProgram()
        if self.remote:
            try:
                import Qconfig
                self.__qp.set_api(Qconfig.APItoken, Qconfig.config["url"],
                                  hub=Qconfig.config["hub"],
                                  group=Qconfig.config["group"],
                                  project=Qconfig.config["project"])

            except ImportError as ex:
                msg = 'Error in loading Qconfig.py!. Error = {}\n'.format(ex)
                sys.stdout.write(msg)
                sys.stdout.flush()
                return False

            if api_info is True:
                api = self.__qp.get_api()
                sys.stdout.write('<IBM Quantum Experience API information>\n')
                sys.stdout.flush()
                sys.stdout.write('Version: {0}\n'.format(api.api_version()))
                sys.stdout.write('User jobs (last 5):\n')
                jobs = api.get_jobs(limit=500)

                def format_date(job_item):
                    '''
                    format
                    '''
                    return datetime.strptime(job_item['creationDate'],
                                             '%Y-%m-%dT%H:%M:%S.%fZ')
                sortedjobs = sorted(jobs,
                                    key=format_date)
                sys.stdout.write('  {0:<32} {1:<24} {2:<9} {3}\n'
                                 .format('id',
                                         'creationDate',
                                         'status',
                                         'backend'))
                sys.stdout.write('{:-^94}\n'.format(""))
                for job in sortedjobs[-5:]:
                    sys.stdout.write('  {0:<32} {1:<24} {2:<9} {3}\n'
                                     .format(job['id'],
                                             job['creationDate'],
                                             job['status'],
                                             job['backend']['name']))
                sys.stdout.write('There are {0} jobs on the server\n'
                                 .format(len(jobs)))
                sys.stdout.write('Credits: {0}\n'
                                 .format(api.get_my_credits()))
                sys.stdout.flush()

        self.backends = self.__qp.available_backends()
        status = self.__qp.get_backend_status(self.backend)

        if 'available' in status:
            if status['available'] is False:
                return False
        return True

    def set_config(self, config=None):
        '''
        set config
        '''
        if config is None:
            config = {}

        if 'backend' in config:
            self.backend = str(config['backend'])
            if 'local_' in self.backend:
                self.remote = False
            else:
                self.remote = True

        if 'remote' in config:
            self.remote = config['remote']

        if 'qubits' in config:
            self.qubits = int(config['qubits'])

        return True

    def _progress(self, phasename, text):
        self.phase.append([str(phasename), str(text)])
        text = "Phase {0}: {1}".format(phasename, text)
        sys.stdout.write("{}\n".format(text))
        sys.stdout.flush()

    def _init_circuit(self):
        self._progress('1', 'Initialize quantum registers and circuit')
        qubits = self.qubits

        quantum_registers = [
            {"name": "cin", "size": 1},
            {"name": "qa", "size": qubits},
            {"name": "qb", "size": qubits},
            {"name": "cout", "size": 1}
            ]

        classical_registers = [
            {"name": "ans", "size": qubits + 1}
            ]

        if 'cin' in self.__qp.get_quantum_register_names():
            self.__qp.destroy_quantum_registers(quantum_registers)
            self.__qp.destroy_classical_registers(classical_registers)

        q_r = self.__qp.create_quantum_registers(quantum_registers)
        c_r = self.__qp.create_classical_registers(classical_registers)

        self.__qp.create_circuit("qcirc", q_r, c_r)

    def _create_circuit_qadd(self):
        # quantum ripple-carry adder from Cuccaro et al, quant-ph/0410184
        def majority(circuit, q_a, q_b, q_c):
            '''
            majority
            '''
            circuit.cx(q_c, q_b)
            circuit.cx(q_c, q_a)
            circuit.ccx(q_a, q_b, q_c)

        def unmaj(circuit, q_a, q_b, q_c):
            '''
            unmajority
            '''
            circuit.ccx(q_a, q_b, q_c)
            circuit.cx(q_c, q_a)
            circuit.cx(q_a, q_b)

        def adder(circuit, c_in, q_a, q_b, c_out, qubits):
            '''
            adder
            '''
            # pylint: disable=too-many-arguments
            majority(circuit, c_in[0], q_b[0], q_a[0])
            for i in range(qubits - 1):
                majority(circuit, q_a[i], q_b[i + 1], q_a[i + 1])

            circuit.cx(q_a[qubits - 1], c_out[0])

            for i in range(qubits - 1)[::-1]:
                unmaj(circuit, q_a[i], q_b[i + 1], q_a[i + 1])
            unmaj(circuit, c_in[0], q_b[0], q_a[0])

        if 'add' not in self.__qp.get_circuit_names():
            [c_in, q_a, q_b, c_out] = map(self.__qp.get_quantum_register,
                                          ["cin", "qa", "qb", "cout"])
            ans = self.__qp.get_classical_register('ans')
            qadder = self.__qp.create_circuit("qadd",
                                              [c_in, q_a, q_b, c_out],
                                              [ans])
            adder(qadder, c_in, q_a, q_b, c_out, self.qubits)

        return 'add' in self.__qp.get_circuit_names()

    def _create_circuit_qsub(self):
        circuit_names = self.__qp.get_circuit_names()
        if 'qsub' not in circuit_names:
            if 'qadd' not in circuit_names:
                self._create_circuit_qadd()

            # subtractor circuit
            self.__qp.add_circuit('qsub', self.__qp.get_circuit('qadd'))
            qsubtractor = self.__qp.get_circuit('qsub')
            qsubtractor.reverse()
        return 'qsub' in self.__qp.get_circuit_names()

    def _qadd(self, input_a, input_b=None, subtract=False, observe=False):
        # pylint: disable=too-many-locals

        def measure(circuit, q_b, c_out, ans):
            '''
            measure
            '''
            circuit.barrier()
            for i in range(self.qubits):
                circuit.measure(q_b[i], ans[i])
            circuit.measure(c_out[0], ans[self.qubits])

        def char2q(circuit, cbit, qbit):
            '''
            char2q
            '''
            if cbit == '1':
                circuit.x(qbit)
            elif cbit == 'H':
                circuit.h(qbit)
                self.shots = 5 * (2**self.qubits)

        def input_state(circuit, input_a, input_b=None):
            '''
            input state
            '''
            input_a = input_a[::-1]
            for i in range(self.qubits):
                char2q(circuit, input_a[i], q_a[i])

            if input_b is not None:
                input_b = input_b[::-1]
                for i in range(self.qubits):
                    char2q(circuit, input_b[i], q_b[i])

        def reset_input(circuit, c_in, q_a, c_out):
            '''
            reset input
            '''
            circuit.reset(c_in)
            circuit.reset(c_out)
            for i in range(self.qubits):
                circuit.reset(q_a[i])

        # get registers
        [c_in, q_a, q_b, c_out] = map(self.__qp.get_quantum_register,
                                      ["cin", "qa", "qb", "cout"])
        ans = self.__qp.get_classical_register('ans')
        qcirc = self.__qp.get_circuit('qcirc')

        self._progress('2',
                       'Define input state ({})'
                       .format('QADD' if subtract is False else 'QSUB'))
        if input_b is not None:
            if subtract is True:
                # subtract
                input_state(qcirc, input_b, input_a)
            else:
                # add
                input_state(qcirc, input_a, input_b)
        else:
            reset_input(qcirc, c_in, q_a, c_out)
            input_state(qcirc, input_a)

        self._progress('3',
                       'Define quantum circuit ({})'
                       .format('QADD' if subtract is False else 'QSUB'))
        if subtract is True:
            self._create_circuit_qsub()
            qcirc.extend(self.__qp.get_circuit('qsub'))
        else:
            self._create_circuit_qadd()
            qcirc.extend(self.__qp.get_circuit('qadd'))

        if observe is True:
            measure(qcirc, q_b, c_out, ans)

    def _qsub(self, input_a, input_b=None, observe=False):
        self._qadd(input_a, input_b, subtract=True, observe=observe)

    def _qope(self, input_a, operator, input_b=None, observe=False):
        if operator == '+':
            return self._qadd(input_a, input_b, observe=observe)
        elif operator == '-':
            return self._qsub(input_a, input_b, observe=observe)
        return None

    def _compile(self, name, cross_backend=None, print_qasm=False):
        self._progress('4', 'Compile quantum circuit')

        coupling_map = None
        if cross_backend is not None:
            backend_conf = self.__qp.get_backend_configuration(cross_backend)
            coupling_map = backend_conf.get('coupling_map', None)
            if coupling_map is None:
                sys.stdout.write('backend: {} coupling_map not found'
                                 .format(cross_backend))

        qobj = self.__qp.compile([name],
                                 backend=self.backend,
                                 shots=self.shots,
                                 seed=1,
                                 coupling_map=coupling_map)

        if print_qasm is True:
            sys.stdout.write(self.__qp.get_compiled_qasm(qobj, 'qcirc'))
            sys.stdout.flush()
        return qobj

    def _run(self, qobj):
        self._progress('5', 'Run quantum circuit (wait for answer)')
        result = self.__qp.run(qobj, wait=5, timeout=100000)
        return result

    def _run_async(self, qobj):
        '''
        _run_async
        '''
        self._progress('5', 'Run quantum circuit')
        self.wait = True

        def async_result(result):
            '''
            async call back
            '''
            self.wait = False
            self.last = self.result_parse(result)

        self.__qp.run_async(qobj,
                            wait=5, timeout=100000, callback=async_result)

    def _is_regular_number(self, numstring, base):
        '''
        returns input binary format string or None.
        '''
        if base == 'bin':
            binstring = numstring
        elif base == 'dec':
            if numstring == 'H':
                binstring = 'H'*self.qubits
            else:
                binstring = format(int(numstring), "0{}b".format(self.qubits))

        if len(binstring) != self.qubits:
            return None

        return binstring

    def get_seq(self, text, base='dec'):
        '''
        convert seq and check it
        if text is invalid, return the list of length 0.
        '''
        operators = u'(\\+|\\-)'
        seq = re.split(operators, text)

        # length check
        if len(seq) % 2 == 0 or len(seq) == 1:
            return []

        # regex
        if base == 'bin':
            regex = re.compile(r'[01H]+')
        else:
            regex = re.compile(r'(^(?!.H)[0-9]+|H)')

        for i in range(0, len(seq), 2):
            match = regex.match(seq[i])
            if match is None:
                return []
            num = match.group(0)
            seq[i] = self._is_regular_number(num, base)

            if seq[i] is None:
                return []

        return seq

    def result_parse(self, result):
        '''
        result_parse
        '''
        data = result.get_data("qcirc")
        sys.stdout.write("job id: {0}\n".format(result.get_job_id()))
        sys.stdout.write("raw result: {0}\n".format(data))
        sys.stdout.write("{:=^40}\n".format("answer"))

        counts = data['counts']
        sortedcounts = sorted(counts.items(),
                              key=lambda x: -x[1])

        sortedans = []
        for count in sortedcounts:
            if count[0][0] == '1':
                ans = 'OR'
            else:
                ans = str(int(count[0][-self.qubits:], 2))
            sortedans.append(ans)
            sys.stdout.write('Dec: {0:>2} Bin: {1} Count: {2} \n'
                             .format(ans, str(count[0]), str(count[1])))

        sys.stdout.write('{0:d} answer{1}\n'
                         .format(len(sortedans),
                                 '' if len(sortedans) == 1 else 's'))
        sys.stdout.write("{:=^40}\n".format(""))
        if 'time' in data:
            sys.stdout.write("time: {0:<3} sec\n".format(data['time']))
        sys.stdout.write("All process done.\n")
        sys.stdout.flush()

        uniqanswer = sorted(set(sortedans), key=sortedans.index)

        ans = ",".join(uniqanswer)

        return [str(result), ans]

    def exec_calc(self, text, base='dec', wait_result=False):
        '''
        exec_calc
        '''
        seq = self.get_seq(text, base)
        print('QC seq:', seq)
        if seq == []:
            return ["Syntax error", None]

        # fail message
        fail_msg = None

        try:
            self._init_circuit()
            numbers = seq[0::2]     # slice even index
            i = 1
            observe = False
            for oper in seq[1::2]:  # slice odd index
                if i == len(numbers) - 1:
                    observe = True
                if i == 1:
                    self._qope(numbers[0], oper, numbers[1], observe=observe)
                else:
                    self._qope(numbers[i], oper, observe=observe)
                i = i + 1

            qobj = self._compile('qcirc')

            if wait_result is True:
                [status, ans] = self.result_parse(self._run(qobj))
            else:
                self._run_async(qobj)
                [status, ans] = [
                    'Wait. Calculating on {0}'.format(self.backend),
                    '...'
                    ]

        except QISKitError as ex:
            fail_msg = ('There was an error in the circuit!. Error = {}\n'
                        .format(ex))
        except RegisterSizeError as ex:
            fail_msg = ('Error in the number of registers!. Error = {}\n'
                        .format(ex))

        if fail_msg is not None:
            sys.stdout.write(fail_msg)
            sys.stdout.flush()
            return ["FAIL", None]

        return [status, ans]
Exemplo n.º 7
0
from qiskit.backends import local_backends
from pprint import pprint
# Import your solution function
from challenge_submission import compiler_function

# Import submission evaluation and scoring functions
from challenge_evaluation import evaluate, score

# Possibly useful other helper function
from challenge_evaluation import qasm_to_dag_circuit, load_coupling, get_layout

# Select the simulation backend to calculate the quantum states resulting from the circuits
# On Windows platform the C++ Simulator is not yet available with pip install
qp = QuantumProgram()
qp.set_api(Qconfig.APItoken, Qconfig.config['url'])
pprint(qp.available_backends())
backend = 'local_qasm_simulator'


ex_nr = 1
test_circuit_filenames = {}


for i in range(ex_nr):
    test_circuit_filenames['circuits/random8_n5_d5.qasm'] = get_layout(5)
for i in range(ex_nr):
    test_circuit_filenames['circuits/random9_n16_d16.qasm'] = get_layout(16)
for i in range(ex_nr):
    test_circuit_filenames['circuits/random9_n20_d20.qasm'] = get_layout(20)

    test_circuits = {}
Exemplo n.º 8
0
# Creating Programs create your first QuantumProgram object instance.
qp = QuantumProgram()

# Creating Registers create your first Quantum Register called 'qr' with 2 qubits
qr = qp.create_quantum_register('qr', 2)
# create your first Classical Register called 'cr' with 2 bits
cr = qp.create_classical_register('cr', 2)
# Creating Circuits create your first Quantum Circuit called 'qc' involving your Quantum Register 'qr'
# and your Classical Register 'cr'
qc = qp.create_circuit('superposition', [qr], [cr])

# add the H gate in the Qubit 0, we put this Qubit in superposition
qc.h(qr[0])

# add measure to see the state
qc.measure(qr, cr)

# Compiled  and execute in the local_qasm_simulator

qp.set_api(config['qx_token'], config['qx_url'])
print('backends: {}'.format(qp.available_backends()))

result = qp.execute(['superposition'],
                    backend='ibmqx_qasm_simulator',
                    shots=1000)

# Show the results
print(result)
print(result.get_data('superposition'))
Exemplo n.º 9
0
from qiskit import QuantumProgram
import Qconfig
from qiskit.backends import local_backends
from pprint import pprint

backend = 'ibmqx2'
shots = 1000
max_credits = 5
qp = QuantumProgram()
qp.set_api(Qconfig.APItoken, Qconfig.config['url'])
pprint(qp.available_backends())
qr = qp.create_quantum_register('qr', 1)
cr = qp.create_classical_register('cr', 1)
qc = qp.create_circuit('Bell', [qr], [cr])

qc.h(qr[0])
for i in range(4):
    qc.iden(qr[0])
qc.h(qr[0])
qc.measure(qr[0], cr[0])

circuits = ['Bell']
qobj = qp.compile(circuits, backend)
#result = qp.run(qobj, wait=2, timeout=240)
#print(result.get_counts('Bell'))

result = qp.execute(circuits,
                    backend=backend,
                    shots=shots,
                    max_credits=max_credits,
                    wait=20,
Exemplo n.º 10
0
    qc.x(x0)
    qc.x(x1)
    qc.h(x1)
    qc.cx(x0, x1)
    qc.h(x1)
    qc.x(x0)
    qc.x(x1)
    qc.h(x0)
    qc.h(x1)
    qc.h(q)


testtiffoli(tiffoli)

b0 = qr[2]
b1 = qr[1]
b2 = qr[0]
qc.x(b2)  #put b2 in state |1>
qc.h(b0)  #put b0 in (|0>+|1>)/sqrt(2)
qc.h(b1)  #put b1 in (|0>+|1>)/sqrt(2)
qc.h(b2)  #put b2 in state (|0>-|1>)/sqrt(2)
for i in range(1):  #apply the oracle/grover operator in a loop
    grover(tiffoli, qc, b0, b1, b2)
qc.measure(qr, cr)
print(Q.get_qasm("andgate"))
print(Q.available_backends())
#result = Q.execute(["andgate"], backend="ibmqx_qasm_simulator", shots=1024)
result = Q.execute(["andgate"], backend="ibmqx4", shots=1024)
print(result)
print(result.get_data("andgate"))
Exemplo n.º 11
0
def main(args):
    print('')
    print('working on: {}'.format(args.graph))
    print('with configuration: {}'.format(args.config))

    graph = common.load_graph(args.graph)
    print('graph ({},{})'.format(len(graph.nodes), len(graph.edges)))

    if args.remap:
        print('')
        print('remapping:')
        graph, mapping = common.remap(graph)
        for k, v in mapping.items():
            print('  {} -> {}'.format(v, k))

    with open(args.config, 'r') as file:
        config = json.load(file)

    print('')
    print('config:')
    print('  rounds: {}'.format(len(config['rounds'])))

    num_bits = graph.max_node

    qp = QuantumProgram()
    qr = qp.create_quantum_register('qr', num_bits)
    cr = qp.create_classical_register('cr', num_bits)
    qc = qp.create_circuit('qaoa', [qr], [cr])

    for i in range(num_bits):
        qc.h(qr[i])

    for r in config['rounds']:
        beta = r['beta']
        gamma = r['gamma']

        for i in range(num_bits):
            qc.u3(2 * beta, -pi / 2, pi / 2, qr[i])

        for e in graph.edges:
            qc.x(qr[e.fr])
            qc.u1(-gamma / 2.0, qr[e.fr])
            qc.x(qr[e.fr])
            qc.u1(-gamma / 2.0, qr[e.fr])
            qc.cx(qr[e.fr], qr[e.to])
            qc.x(qr[e.to])
            qc.u1(gamma / 2.0, qr[e.to])
            qc.x(qr[e.to])
            qc.u1(-gamma / 2.0, qr[e.to])
            qc.cx(qr[e.fr], qr[e.to])

    qc.measure(qr, cr)

    print('')
    print('execute:')
    backend_name = args.backend

    if not 'local' in backend_name:
        with open('_config') as data_file:
            config = json.load(data_file)
        assert ('qx_token' in config)
        assert ('qx_url' in config)

        qp.set_api(config['qx_token'], config['qx_url'])
        backends = qp.available_backends()
        print('  backends found: {}'.format(backends))
        assert (backend_name in backends)
    print('  backend: {}'.format(backend_name))

    print('  shots: {}'.format(args.shots))
    result = qp.execute(['qaoa'], backend=backend_name, shots=args.shots)

    # Show the results
    #print(result)
    data = result.get_data('qaoa')

    print('')
    print('data:')
    for k, v in data.items():
        if k != 'counts':
            print('{}: {}'.format(k, v))

    print('')
    print('result:')
    print('  state dist.:')
    for i, state in enumerate(
            sorted(data['counts'].keys(),
                   key=lambda x: data['counts'][x],
                   reverse=True)):
        assignment = common.str2vals(state)
        cv = common.cut_value(graph, assignment)
        print('  {} - {} - {}'.format(cv, state, data['counts'][state]))
        if i >= 50:
            print('first 50 of {} states'.format(len(data['counts'])))
            break

    print('')
    print('  cut dist.:')
    cut_dist = common.cut_dist(graph, data['counts'])
    for i, cv in enumerate(sorted(cut_dist.keys(), reverse=True)):
        print('  {} - {}'.format(cv, cut_dist[cv]))
        if i >= 20:
            print('first 20 of {} cut values'.format(len(cut_dist)))
            break

    ec = sum([cv * prob for (cv, prob) in cut_dist.items()])
    print('  expected cut value: {}'.format(ec))

    samples = 100000
    print('')
    print('  rand cut dist. ({}):'.format(samples))
    rand_cut_dist = common.rand_cut_dist(graph, samples)
    for i, cv in enumerate(sorted(rand_cut_dist.keys(), reverse=True)):
        print('  {} - {}'.format(cv, rand_cut_dist[cv]))
        if i >= 20:
            print('first 20 of {} cut values'.format(len(rand_cut_dist)))
            break

    if args.show_qasm:
        print('')
        print(result.get_ran_qasm('qaoa'))
Exemplo n.º 12
0
                      Qconfig.config["url"],
                      verify=True,
                      hub=Qconfig.config["hub"],
                      group=Qconfig.config["group"],
                      project=Qconfig.config["project"])

except:
    offline = True
    print("""WARNING: There's no connection with IBMQuantumExperience servers.
             cannot test I/O intesive tasks, will only test CPU intensive tasks
             running the jobs in the local simulator""")
#--------------------------------------------------------------------------------------------------------------
# Backends available/selected via env
#--------------------------------------------------------------------------------------------------------------
print("The backends available for use are:")
available_backends = Q_program.available_backends()
print(available_backends)
print("\n")


# The function to compute GCD using Euclid's method
# Input : Two number to X and Y for which a GCD is to be computed
# Output : GCD of two given numbers
#--------------------------------------------------------------------------------------------------------------
def gcd(x, y):
    while y != 0:
        (x, y) = (y, x % y)
    return x


#--------------------------------------------------------------------------------------------------------------
Exemplo n.º 13
0
def setup_experiment(args):
    if args is None:
        return getParams()
    else:
        programs = QuantumPrograms.PROGRAMS

        apiToken = None
        backend = None
        shots = None
        timeout = None
        program = None

        # get API token
        if args.apitoken is None:
            try:
                apiToken = open("./.qiskit_api_token", "r").read()
            except:
                apiToken = input("Enter your IBM Quantum Experience API token: \n> ")
        else: 
            apiToken = args.apitoken
        
        engine = QuantumProgram()
        engine.set_api(apiToken, 'https://quantumexperience.ng.bluemix.net/api')

        # get backend
        backends = get_backend_dict(engine.available_backends())
        if args.backend is None:
            PrintUtils.printHeader("Available backends:")
            for key, value in backends.items():
                PrintUtils.printInfo(f"  {key}: {value}")
            backend = get_backend(backends[int(input("Run on which backend?\n> "))], backends)
        else:
            if args.backend in backends.values():
                backend = args.backend
            elif int(args.backend) in backends.keys():
                backend = backends[int(args.backend)]
            else: 
                raise ValueError(f"Invalid backend: '{args.backend}'")
        
        # set shots default value
        if args.shots is None:
            shots = 1024
        else:
            shots = int(args.shots)
        
        # set timeout default value
        if args.timeout is None:
            timeout = 120
        else:
            timeout = int(args.timeout)

        # validate program
        if args.program is None:
            print_available_programs(programs)
            program = input("Run which program?\n> ")
            while program not in programs:
                PrintUtils.printErr(f"Invalid program '{program}'")
                print_available_programs(programs)
                program = input("Run which program?\n> ")
        else:
            if args.program not in programs.keys():
                raise ValueError(f"Invalid program '{args.program}'")
            else:
                program = args.program
        
        return QuantumPrograms(engine, QConfig(backend, shots, timeout, program))