Diagram#
- class discopy.quantum.zx.Diagram(inside, dom, cod, _scan=True)[source]#
Bases:
Diagram[complex]
ZX Diagram.
- Parameters:
inside (tuple[Layer, ...]) –
dom (T) –
cod (T) –
- grad(var, **params)[source]#
Gradient with respect to var.
- Parameters:
var (sympy.Symbol) – Differentiated variable.
- Return type:
Examples
>>> from sympy.abc import phi >>> assert Z(1, 1, phi).grad(phi) == scalar(pi) @ Z(1, 1, phi + .5)
- to_pyzx()[source]#
Returns a
pyzx.Graph
.>>> bialgebra = Z(1, 2, .25) @ Z(1, 2, .75)\ ... >> Id(1) @ SWAP @ Id(1) >> X(2, 1, .5) @ X(2, 1, .5) >>> graph = bialgebra.to_pyzx() >>> assert len(graph.vertices()) == 8 >>> assert (graph.inputs(), graph.outputs()) == ((0, 1), (6, 7)) >>> from pyzx import VertexType >>> assert graph.type(2) == graph.type(3) == VertexType.Z >>> assert graph.phase(2) == 2 * .25 and graph.phase(3) == 2 * .75 >>> assert graph.type(4) == graph.type(5) == VertexType.X >>> assert graph.phase(4) == graph.phase(5) == 2 * .5 >>> assert graph.graph == { ... 0: {2: 1}, ... 1: {3: 1}, ... 2: {0: 1, 4: 1, 5: 1}, ... 3: {1: 1, 4: 1, 5: 1}, ... 4: {2: 1, 3: 1, 6: 1}, ... 5: {2: 1, 3: 1, 7: 1}, ... 6: {4: 1}, ... 7: {5: 1}}
- static from_pyzx(graph)[source]#
Takes a
pyzx.Graph
returns azx.Diagram
.Examples
>>> bialgebra = Z(1, 2, .25) @ Z(1, 2, .75)\ ... >> Id(1) @ SWAP @ Id(1) >> X(2, 1, .5) @ X(2, 1, .5) >>> graph = bialgebra.to_pyzx() >>> assert Diagram.from_pyzx(graph) == bialgebra
Note
Raises
ValueError
if either: * a boundary node is not ingraph.inputs() + graph.outputs()
, * orset(graph.inputs()).intersection(graph.outputs())
.
- sum_factory#
alias of
Sum