Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if translate:
circ = translate_to_cirq(circ)
qubit_map = {q: to_cirq_qubit(q) for q in circ.qubits}
cqc = cirq.Circuit()
operations = {
I: cirq.I,
X: cirq.X,
Y: cirq.Y,
Z: cirq.Z,
S: cirq.S,
T: cirq.T,
H: cirq.H,
CNOT: cirq.CNOT,
CZ: cirq.CZ,
SWAP: cirq.SWAP,
ISWAP: cirq.ISWAP,
CCZ: cirq.CCZ,
CCNOT: cirq.CCX,
CSWAP: cirq.CSWAP,
}
# TODO: TH -> cirq.ops.HPowGate,
turn_gates = {
TX: cirq.X,
TY: cirq.Y,
TZ: cirq.Z,
XX: cirq.XX,
YY: cirq.YY,
ZZ: cirq.ZZ,
def make_quantum_teleportation_circuit(ranX, ranY):
circuit = cirq.Circuit()
msg, alice, bob = cirq.LineQubit.range(3)
# Creates Bell state to be shared between Alice and Bob
circuit.append([cirq.H(alice), cirq.CNOT(alice, bob)])
# Creates a random state for the Message
circuit.append([cirq.X(msg)**ranX, cirq.Y(msg)**ranY])
# Bell measurement of the Message and Alice's entangled qubit
circuit.append([cirq.CNOT(msg, alice), cirq.H(msg)])
circuit.append(cirq.measure(msg, alice))
# Uses the two classical bits from the Bell measurement to recover the
# original quantum Message on Bob's entangled qubit
circuit.append([cirq.CNOT(alice, bob), cirq.CZ(msg, bob)])
return circuit
def make_quantum_teleportation_circuit(ranX, ranY):
circuit = cirq.Circuit()
msg, alice, bob = cirq.LineQubit.range(3)
# Creates Bell state to be shared between Alice and Bob
circuit.append([cirq.H(alice), cirq.CNOT(alice, bob)])
# Creates a random state for the Message
circuit.append([cirq.X(msg)**ranX, cirq.Y(msg)**ranY])
# Bell measurement of the Message and Alice's entangled qubit
circuit.append([cirq.CNOT(msg, alice), cirq.H(msg)])
circuit.append(cirq.measure(msg, alice))
# Uses the two classical bits from the Bell measurement to recover the
# original quantum Message on Bob's entangled qubit
circuit.append([cirq.CNOT(alice, bob), cirq.CZ(msg, bob)])
return circuit
compiled_circuit = circuit.copy()
# Optionally add some the parity check bits.
parity_map: Dict[cirq.Qid, cirq.Qid] = {} # original -> parity
if add_readout_error_correction:
num_qubits = len(compiled_circuit.all_qubits())
# Sort just to make it deterministic.
for idx, qubit in enumerate(sorted(compiled_circuit.all_qubits())):
# For each qubit, create a new qubit that will serve as its parity
# check. An inverse-controlled-NOT is performed on the qubit and its
# parity bit. Later, these two qubits will be checked for parity -
# if they are equal, there was likely a readout error.
qubit_num = idx + num_qubits
parity_qubit = cirq.LineQubit(qubit_num)
compiled_circuit.append(cirq.X(qubit))
compiled_circuit.append(cirq.CNOT(qubit, parity_qubit))
compiled_circuit.append(cirq.X(qubit))
parity_map[qubit] = parity_qubit
# Swap Mapping (Routing). Ensure the gates can actually operate on the
# target qubits given our topology.
if router is None and routing_algo_name is None:
# TODO: The routing algorithm sometimes does a poor job with the parity
# qubits, adding SWAP gates that are unnecessary. This should be fixed,
# or we can add the parity qubits manually after routing.
routing_algo_name = 'greedy'
swap_networks: List[ccr.SwapNetwork] = []
for _ in range(routing_attempts):
swap_network = ccr.route_circuit(compiled_circuit,
ccr.xmon_device_to_graph(device),
router=router,
# Import the Cirq library
import cirq
# Get three qubits -- two data and one target qubit
q0, q1, q2 = cirq.LineQubit.range(3)
# Oracles for constant functions
constant = ([], [cirq.X(q2)])
# Oracles for balanced functions
balanced = ([cirq.CNOT(q0, q2)],
[cirq.CNOT(q1, q2)],
[cirq.CNOT(q0, q2), cirq.CNOT(q1, q2)],
[cirq.CNOT(q0, q2), cirq.X(q2)],
[cirq.CNOT(q1, q2), cirq.X(q2)],
[cirq.CNOT(q0, q2), cirq.CNOT(q1, q2), cirq.X(q2)])
def your_circuit(oracle):
"""Yields a circuit for the Deutsch-Jozsa algorithm on three qubits."""
# phase kickback trick
yield cirq.X(q2), cirq.H(q2)
# equal superposition over input bits
yield cirq.H(q0), cirq.H(q1)
# query the function
yield oracle
# interference to get result, put last qubit into |1>
yield cirq.H(q0), cirq.H(q1), cirq.H(q2)
# a final OR gate to put result in final qubit
"""Script for preparing the Bell state |\Phi^{+}> in Cirq."""
# Import the Cirq library
import cirq
# Get qubits and circuit
qreg = [cirq.LineQubit(x) for x in range(2)]
circ = cirq.Circuit()
# Add the Bell state preparation circuit
circ.append([cirq.H(qreg[0]),
cirq.CNOT(qreg[0], qreg[1])])
# Display the circuit
print("Circuit")
print(circ)
# Add measurements
circ.append(cirq.measure(*qreg, key="z"))
# Simulate the circuit
sim = cirq.Simulator()
res = sim.run(circ, repetitions=100)
# Display the outcomes
print("\nMeasurements:")
print(res.histogram(key="z"))
def make_oracle(input_qubits,
output_qubit,
secret_factor_bits,
secret_bias_bit):
"""Gates implementing the function f(a) = a*factors + bias (mod 2)."""
if secret_bias_bit:
yield cirq.X(output_qubit)
for qubit, bit in zip(input_qubits, secret_factor_bits):
if bit:
yield cirq.CNOT(qubit, output_qubit)
# Initialize qubits.
c.append([
cirq.X(output_qubit),
cirq.H(output_qubit),
cirq.H.on_each(*input_qubits),
])
# Query oracle.
c.append(oracle)
# Construct Grover operator.
c.append(cirq.H.on_each(*input_qubits))
c.append(cirq.X.on_each(*input_qubits))
c.append(cirq.H.on(input_qubits[1]))
c.append(cirq.CNOT(input_qubits[0], input_qubits[1]))
c.append(cirq.H.on(input_qubits[1]))
c.append(cirq.X.on_each(*input_qubits))
c.append(cirq.H.on_each(*input_qubits))
# Measure the result.
c.append(cirq.measure(*input_qubits, key='result'))
return c
def carry_sum(self, *qubits):
c0, a, b = qubits
yield cirq.CNOT(a, b)
yield cirq.CNOT(c0, b)