Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
parameter_mapping = {i: par_evaluate(n.op.p) for i, n in enumerate(G.nodes())}
# CXgate and BSgate are not symmetric wrt to permuting the order of the two
# modes it acts on; i.e., the order of the wires matter
wire_mapping = {}
for i, n in enumerate(G.nodes()):
if n.op.__class__.__name__ == "CXgate":
if np.allclose(n.op.p[0], 0):
# if the CXgate parameter is 0, wire order doesn't matter
wire_mapping[i] = 0
else:
# if the CXgate parameter is not 0, order matters
wire_mapping[i] = [j.ind for j in n.reg]
elif n.op.__class__.__name__ == "BSgate":
if np.allclose([j % np.pi for j in par_evaluate(n.op.p)], [np.pi/4, np.pi/2]):
# if the beamsplitter is *symmetric*, then the order of the
# wires does not matter.
wire_mapping[i] = 0
else:
# beamsplitter is not symmetric, order matters
wire_mapping[i] = [j.ind for j in n.reg]
else:
# not a CXgate or a BSgate, order of wires doesn't matter
wire_mapping[i] = 0
# TODO: at the moment, we do not check for whether an empty
# wire will match an operation with trivial parameters.
# Maybe we can do this in future, but this is a subgraph
# isomorphism problem and much harder.
parameter_mapping = {i: par_evaluate(n.op.p) for i, n in enumerate(G.nodes())}
# CXgate and BSgate are not symmetric wrt to permuting the order of the two
# modes it acts on; i.e., the order of the wires matter
wire_mapping = {}
for i, n in enumerate(G.nodes()):
if n.op.__class__.__name__ == "CXgate":
if np.allclose(n.op.p[0], 0):
# if the CXgate parameter is 0, wire order doesn't matter
wire_mapping[i] = 0
else:
# if the CXgate parameter is not 0, order matters
wire_mapping[i] = [j.ind for j in n.reg]
elif n.op.__class__.__name__ == "BSgate":
if np.allclose([j % np.pi for j in par_evaluate(n.op.p)], [np.pi/4, np.pi/2]):
# if the beamsplitter is *symmetric*, then the order of the
# wires does not matter.
wire_mapping[i] = 0
else:
# beamsplitter is not symmetric, order matters
wire_mapping[i] = [j.ind for j in n.reg]
else:
# not a CXgate or a BSgate, order of wires doesn't matter
wire_mapping[i] = 0
# TODO: at the moment, we do not check for whether an empty
# wire will match an operation with trivial parameters.
# Maybe we can do this in future, but this is a subgraph
# isomorphism problem and much harder.
quantum operation parameter equality
Returns:
bool: returns ``True`` if two quantum programs are equivalent
"""
DAG1 = list_to_DAG(prog1.circuit)
DAG2 = list_to_DAG(prog2.circuit)
circuit = []
for G in [DAG1, DAG2]:
# relabel the DAG nodes to integers
circuit.append(nx.convert_node_labels_to_integers(G))
# add node attributes to store the operation name and parameters
name_mapping = {i: n.op.__class__.__name__ for i, n in enumerate(G.nodes())}
parameter_mapping = {i: par_evaluate(n.op.p) for i, n in enumerate(G.nodes())}
# CXgate and BSgate are not symmetric wrt to permuting the order of the two
# modes it acts on; i.e., the order of the wires matter
wire_mapping = {}
for i, n in enumerate(G.nodes()):
if n.op.__class__.__name__ == "CXgate":
if np.allclose(n.op.p[0], 0):
# if the CXgate parameter is 0, wire order doesn't matter
wire_mapping[i] = 0
else:
# if the CXgate parameter is not 0, order matters
wire_mapping[i] = [j.ind for j in n.reg]
elif n.op.__class__.__name__ == "BSgate":
if np.allclose([j % np.pi for j in par_evaluate(n.op.p)], [np.pi/4, np.pi/2]):
# if the beamsplitter is *symmetric*, then the order of the
def test_parameter_unary_negation(self, p):
"""Test unary negation works as expected."""
pp = FreeParameter('x')
pp.val = p
assert par_evaluate(-p) == pytest.approx(-p)
assert par_evaluate(-pp) == pytest.approx(-p)
quantum operation parameter equality
Returns:
bool: returns ``True`` if two quantum programs are equivalent
"""
DAG1 = list_to_DAG(prog1.circuit)
DAG2 = list_to_DAG(prog2.circuit)
circuit = []
for G in [DAG1, DAG2]:
# relabel the DAG nodes to integers
circuit.append(nx.convert_node_labels_to_integers(G))
# add node attributes to store the operation name and parameters
name_mapping = {i: n.op.__class__.__name__ for i, n in enumerate(G.nodes())}
parameter_mapping = {i: par_evaluate(n.op.p) for i, n in enumerate(G.nodes())}
# CXgate and BSgate are not symmetric wrt to permuting the order of the two
# modes it acts on; i.e., the order of the wires matter
wire_mapping = {}
for i, n in enumerate(G.nodes()):
if n.op.__class__.__name__ == "CXgate":
if np.allclose(n.op.p[0], 0):
# if the CXgate parameter is 0, wire order doesn't matter
wire_mapping[i] = 0
else:
# if the CXgate parameter is not 0, order matters
wire_mapping[i] = [j.ind for j in n.reg]
elif n.op.__class__.__name__ == "BSgate":
if np.allclose([j % np.pi for j in par_evaluate(n.op.p)], [np.pi/4, np.pi/2]):
# if the beamsplitter is *symmetric*, then the order of the
def binary_arithmetic(pp, qq, p, q):
"""Test the correctness of basic binary arithmetic expressions."""
assert par_evaluate(pp + qq) == pytest.approx(p + q)
assert par_evaluate(pp - qq) == pytest.approx(p - q)
assert par_evaluate(pp * qq) == pytest.approx(p * q)
assert par_evaluate(pp / qq) == pytest.approx(p / q)
assert par_evaluate(pp ** qq) == pytest.approx(p ** q)
def _apply(self, reg, backend, **kwargs):
p = par_evaluate(self.p)
backend.kerr_interaction(p[0], *reg)