Skip to content

Remove references to depreciated QasmSimulator #7417

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Oct 19, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
* [Hamiltonian Cycle](backtracking/hamiltonian_cycle.py)
* [Knight Tour](backtracking/knight_tour.py)
* [Minimax](backtracking/minimax.py)
* [Minmax](backtracking/minmax.py)
* [N Queens](backtracking/n_queens.py)
* [N Queens Math](backtracking/n_queens_math.py)
* [Rat In Maze](backtracking/rat_in_maze.py)
Expand Down Expand Up @@ -157,6 +158,7 @@
* [Binary Tree Mirror](data_structures/binary_tree/binary_tree_mirror.py)
* [Binary Tree Node Sum](data_structures/binary_tree/binary_tree_node_sum.py)
* [Binary Tree Traversals](data_structures/binary_tree/binary_tree_traversals.py)
* [Diff Views Of Binary Tree](data_structures/binary_tree/diff_views_of_binary_tree.py)
* [Fenwick Tree](data_structures/binary_tree/fenwick_tree.py)
* [Inorder Tree Traversal 2022](data_structures/binary_tree/inorder_tree_traversal_2022.py)
* [Lazy Segment Tree](data_structures/binary_tree/lazy_segment_tree.py)
Expand Down Expand Up @@ -513,6 +515,7 @@
* [Gamma](maths/gamma.py)
* [Gamma Recursive](maths/gamma_recursive.py)
* [Gaussian](maths/gaussian.py)
* [Gaussian Error Linear Unit](maths/gaussian_error_linear_unit.py)
* [Greatest Common Divisor](maths/greatest_common_divisor.py)
* [Greedy Coin Change](maths/greedy_coin_change.py)
* [Hamming Numbers](maths/hamming_numbers.py)
Expand Down Expand Up @@ -601,6 +604,7 @@
* [Inverse Of Matrix](matrix/inverse_of_matrix.py)
* [Matrix Class](matrix/matrix_class.py)
* [Matrix Operation](matrix/matrix_operation.py)
* [Max Area Of Island](matrix/max_area_of_island.py)
* [Nth Fibonacci Using Matrix Exponentiation](matrix/nth_fibonacci_using_matrix_exponentiation.py)
* [Rotate Matrix](matrix/rotate_matrix.py)
* [Searching In Sorted Matrix](matrix/searching_in_sorted_matrix.py)
Expand Down
28 changes: 15 additions & 13 deletions quantum/deutsch_jozsa.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
"""
Deutsch-Josza Algorithm is one of the first examples of a quantum
Deutsch-Jozsa Algorithm is one of the first examples of a quantum
algorithm that is exponentially faster than any possible deterministic
classical algorithm

Expand All @@ -22,18 +22,18 @@
"""

import numpy as np
import qiskit as q
import qiskit


def dj_oracle(case: str, num_qubits: int) -> q.QuantumCircuit:
def dj_oracle(case: str, num_qubits: int) -> qiskit.QuantumCircuit:
"""
Returns a Quantum Circuit for the Oracle function.
The circuit returned can represent balanced or constant function,
according to the arguments passed
"""
# This circuit has num_qubits+1 qubits: the size of the input,
# plus one output qubit
oracle_qc = q.QuantumCircuit(num_qubits + 1)
oracle_qc = qiskit.QuantumCircuit(num_qubits + 1)

# First, let's deal with the case in which oracle is balanced
if case == "balanced":
Expand All @@ -43,7 +43,7 @@ def dj_oracle(case: str, num_qubits: int) -> q.QuantumCircuit:
# Next, format 'b' as a binary string of length 'n', padded with zeros:
b_str = format(b, f"0{num_qubits}b")
# Next, we place the first X-gates. Each digit in our binary string
# correspopnds to a qubit, if the digit is 0, we do nothing, if it's 1
# corresponds to a qubit, if the digit is 0, we do nothing, if it's 1
# we apply an X-gate to that qubit:
for index, bit in enumerate(b_str):
if bit == "1":
Expand All @@ -70,13 +70,15 @@ def dj_oracle(case: str, num_qubits: int) -> q.QuantumCircuit:
return oracle_gate


def dj_algorithm(oracle: q.QuantumCircuit, num_qubits: int) -> q.QuantumCircuit:
def dj_algorithm(
oracle: qiskit.QuantumCircuit, num_qubits: int
) -> qiskit.QuantumCircuit:
"""
Returns the complete Deustch-Jozsa Quantum Circuit,
Returns the complete Deutsch-Jozsa Quantum Circuit,
adding Input & Output registers and Hadamard & Measurement Gates,
to the Oracle Circuit passed in arguments
"""
dj_circuit = q.QuantumCircuit(num_qubits + 1, num_qubits)
dj_circuit = qiskit.QuantumCircuit(num_qubits + 1, num_qubits)
# Set up the output qubit:
dj_circuit.x(num_qubits)
dj_circuit.h(num_qubits)
Expand All @@ -95,7 +97,7 @@ def dj_algorithm(oracle: q.QuantumCircuit, num_qubits: int) -> q.QuantumCircuit:
return dj_circuit


def deutsch_jozsa(case: str, num_qubits: int) -> q.result.counts.Counts:
def deutsch_jozsa(case: str, num_qubits: int) -> qiskit.result.counts.Counts:
"""
Main function that builds the circuit using other helper functions,
runs the experiment 1000 times & returns the resultant qubit counts
Expand All @@ -104,14 +106,14 @@ def deutsch_jozsa(case: str, num_qubits: int) -> q.result.counts.Counts:
>>> deutsch_jozsa("balanced", 3)
{'111': 1000}
"""
# Use Aer's qasm_simulator
simulator = q.Aer.get_backend("qasm_simulator")
# Use Aer's simulator
simulator = qiskit.Aer.get_backend("aer_simulator")

oracle_gate = dj_oracle(case, num_qubits)
dj_circuit = dj_algorithm(oracle_gate, num_qubits)

# Execute the circuit on the qasm simulator
job = q.execute(dj_circuit, simulator, shots=1000)
# Execute the circuit on the simulator
job = qiskit.execute(dj_circuit, simulator, shots=1000)

# Return the histogram data of the results of the experiment.
return job.result().get_counts(dj_circuit)
Expand Down
14 changes: 7 additions & 7 deletions quantum/half_adder.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
https://qiskit.org/textbook/ch-states/atoms-computation.html#4.2-Remembering-how-to-add-
"""

import qiskit as q
import qiskit


def half_adder(bit0: int, bit1: int) -> q.result.counts.Counts:
def half_adder(bit0: int, bit1: int) -> qiskit.result.counts.Counts:
"""
>>> half_adder(0, 0)
{'00': 1000}
Expand All @@ -24,10 +24,10 @@ def half_adder(bit0: int, bit1: int) -> q.result.counts.Counts:
>>> half_adder(1, 1)
{'10': 1000}
"""
# Use Aer's qasm_simulator
simulator = q.Aer.get_backend("qasm_simulator")
# Use Aer's simulator
simulator = qiskit.Aer.get_backend("aer_simulator")

qc_ha = q.QuantumCircuit(4, 2)
qc_ha = qiskit.QuantumCircuit(4, 2)
# encode inputs in qubits 0 and 1
if bit0 == 1:
qc_ha.x(0)
Expand All @@ -48,9 +48,9 @@ def half_adder(bit0: int, bit1: int) -> q.result.counts.Counts:
qc_ha.measure(3, 1) # extract AND value

# Execute the circuit on the qasm simulator
job = q.execute(qc_ha, simulator, shots=1000)
job = qiskit.execute(qc_ha, simulator, shots=1000)

# Return the histogram data of the results of the experiment.
# Return the histogram data of the results of the experiment
return job.result().get_counts(qc_ha)


Expand Down
14 changes: 8 additions & 6 deletions quantum/not_gate.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,23 @@
Qiskit Docs: https://qiskit.org/documentation/getting_started.html
"""

import qiskit as q
import qiskit


def single_qubit_measure(qubits: int, classical_bits: int) -> q.result.counts.Counts:
def single_qubit_measure(
qubits: int, classical_bits: int
) -> qiskit.result.counts.Counts:
"""
>>> single_qubit_measure(2, 2)
{'11': 1000}
>>> single_qubit_measure(4, 4)
{'0011': 1000}
"""
# Use Aer's qasm_simulator
simulator = q.Aer.get_backend("qasm_simulator")
# Use Aer's simulator
simulator = qiskit.Aer.get_backend("aer_simulator")

# Create a Quantum Circuit acting on the q register
circuit = q.QuantumCircuit(qubits, classical_bits)
circuit = qiskit.QuantumCircuit(qubits, classical_bits)

# Apply X (NOT) Gate to Qubits 0 & 1
circuit.x(0)
Expand All @@ -30,7 +32,7 @@ def single_qubit_measure(qubits: int, classical_bits: int) -> q.result.counts.Co
circuit.measure([0, 1], [0, 1])

# Execute the circuit on the qasm simulator
job = q.execute(circuit, simulator, shots=1000)
job = qiskit.execute(circuit, simulator, shots=1000)

# Return the histogram data of the results of the experiment.
return job.result().get_counts(circuit)
Expand Down
27 changes: 13 additions & 14 deletions quantum/q_full_adder.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import math

import qiskit
from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute


def quantum_full_adder(
Expand All @@ -38,25 +37,25 @@ def quantum_full_adder(
carry_in: carry in for the circuit.
Returns:
qiskit.result.counts.Counts: sum result counts.
>>> quantum_full_adder(1,1,1)
>>> quantum_full_adder(1, 1, 1)
{'11': 1000}
>>> quantum_full_adder(0,0,1)
>>> quantum_full_adder(0, 0, 1)
{'01': 1000}
>>> quantum_full_adder(1,0,1)
>>> quantum_full_adder(1, 0, 1)
{'10': 1000}
>>> quantum_full_adder(1,-4,1)
>>> quantum_full_adder(1, -4, 1)
Traceback (most recent call last):
...
ValueError: inputs must be positive.
>>> quantum_full_adder('q',0,1)
>>> quantum_full_adder('q', 0, 1)
Traceback (most recent call last):
...
TypeError: inputs must be integers.
>>> quantum_full_adder(0.5,0,1)
>>> quantum_full_adder(0.5, 0, 1)
Traceback (most recent call last):
...
ValueError: inputs must be exact integers.
>>> quantum_full_adder(0,1,3)
>>> quantum_full_adder(0, 1, 3)
Traceback (most recent call last):
...
ValueError: inputs must be less or equal to 2.
Expand All @@ -78,12 +77,12 @@ def quantum_full_adder(
raise ValueError("inputs must be less or equal to 2.")

# build registers
qr = QuantumRegister(4, "qr")
cr = ClassicalRegister(2, "cr")
qr = qiskit.QuantumRegister(4, "qr")
cr = qiskit.ClassicalRegister(2, "cr")
# list the entries
entry = [input_1, input_2, carry_in]

quantum_circuit = QuantumCircuit(qr, cr)
quantum_circuit = qiskit.QuantumCircuit(qr, cr)

for i in range(0, 3):
if entry[i] == 2:
Expand All @@ -102,11 +101,11 @@ def quantum_full_adder(

quantum_circuit.measure([2, 3], cr) # measure the last two qbits

backend = Aer.get_backend("qasm_simulator")
job = execute(quantum_circuit, backend, shots=1000)
backend = qiskit.Aer.get_backend("aer_simulator")
job = qiskit.execute(quantum_circuit, backend, shots=1000)

return job.result().get_counts(quantum_circuit)


if __name__ == "__main__":
print(f"Total sum count for state is: {quantum_full_adder(1,1,1)}")
print(f"Total sum count for state is: {quantum_full_adder(1, 1, 1)}")
6 changes: 3 additions & 3 deletions quantum/quantum_entanglement.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ def quantum_entanglement(qubits: int = 2) -> qiskit.result.counts.Counts:
"""
classical_bits = qubits

# Using Aer's qasm_simulator
simulator = qiskit.Aer.get_backend("qasm_simulator")
# Using Aer's simulator
simulator = qiskit.Aer.get_backend("aer_simulator")

# Creating a Quantum Circuit acting on the q register
circuit = qiskit.QuantumCircuit(qubits, classical_bits)
Expand All @@ -48,7 +48,7 @@ def quantum_entanglement(qubits: int = 2) -> qiskit.result.counts.Counts:
# Now measuring any one qubit would affect other qubits to collapse
# their super position and have same state as the measured one.

# Executing the circuit on the qasm simulator
# Executing the circuit on the simulator
job = qiskit.execute(circuit, simulator, shots=1000)

return job.result().get_counts(circuit)
Expand Down
16 changes: 8 additions & 8 deletions quantum/ripple_adder_classic.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
# https://en.wikipedia.org/wiki/Adder_(electronics)#Full_adder
# https://en.wikipedia.org/wiki/Controlled_NOT_gate

from qiskit import Aer, QuantumCircuit, execute
import qiskit
from qiskit.providers import Backend


def store_two_classics(val1: int, val2: int) -> tuple[QuantumCircuit, str, str]:
def store_two_classics(val1: int, val2: int) -> tuple[qiskit.QuantumCircuit, str, str]:
"""
Generates a Quantum Circuit which stores two classical integers
Returns the circuit and binary representation of the integers
Expand All @@ -21,10 +21,10 @@ def store_two_classics(val1: int, val2: int) -> tuple[QuantumCircuit, str, str]:

# We need (3 * number of bits in the larger number)+1 qBits
# The second parameter is the number of classical registers, to measure the result
circuit = QuantumCircuit((len(x) * 3) + 1, len(x) + 1)
circuit = qiskit.QuantumCircuit((len(x) * 3) + 1, len(x) + 1)

# We are essentially "not-ing" the bits that are 1
# Reversed because its easier to perform ops on more significant bits
# Reversed because it's easier to perform ops on more significant bits
for i in range(len(x)):
if x[::-1][i] == "1":
circuit.x(i)
Expand All @@ -36,7 +36,7 @@ def store_two_classics(val1: int, val2: int) -> tuple[QuantumCircuit, str, str]:


def full_adder(
circuit: QuantumCircuit,
circuit: qiskit.QuantumCircuit,
input1_loc: int,
input2_loc: int,
carry_in: int,
Expand All @@ -55,14 +55,14 @@ def full_adder(

# The default value for **backend** is the result of a function call which is not
# normally recommended and causes flake8-bugbear to raise a B008 error. However,
# in this case, this is accptable because `Aer.get_backend()` is called when the
# in this case, this is acceptable because `Aer.get_backend()` is called when the
# function is defined and that same backend is then reused for all function calls.


def ripple_adder(
val1: int,
val2: int,
backend: Backend = Aer.get_backend("qasm_simulator"), # noqa: B008
backend: Backend = qiskit.Aer.get_backend("aer_simulator"), # noqa: B008
) -> int:
"""
Quantum Equivalent of a Ripple Adder Circuit
Expand Down Expand Up @@ -104,7 +104,7 @@ def ripple_adder(
for i in range(len(x) + 1):
circuit.measure([(len(x) * 2) + i], [i])

res = execute(circuit, backend, shots=1).result()
res = qiskit.execute(circuit, backend, shots=1).result()

# The result is in binary. Convert it back to int
return int(list(res.get_counts())[0], 2)
Expand Down
16 changes: 9 additions & 7 deletions quantum/single_qubit_measure.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,27 @@
Qiskit Docs: https://qiskit.org/documentation/getting_started.html
"""

import qiskit as q
import qiskit


def single_qubit_measure(qubits: int, classical_bits: int) -> q.result.counts.Counts:
def single_qubit_measure(
qubits: int, classical_bits: int
) -> qiskit.result.counts.Counts:
"""
>>> single_qubit_measure(1, 1)
{'0': 1000}
"""
# Use Aer's qasm_simulator
simulator = q.Aer.get_backend("qasm_simulator")
# Use Aer's simulator
simulator = qiskit.Aer.get_backend("aer_simulator")

# Create a Quantum Circuit acting on the q register
circuit = q.QuantumCircuit(qubits, classical_bits)
circuit = qiskit.QuantumCircuit(qubits, classical_bits)

# Map the quantum measurement to the classical bits
circuit.measure([0], [0])

# Execute the circuit on the qasm simulator
job = q.execute(circuit, simulator, shots=1000)
# Execute the circuit on the simulator
job = qiskit.execute(circuit, simulator, shots=1000)

# Return the histogram data of the results of the experiment.
return job.result().get_counts(circuit)
Expand Down