# 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) –

ty_factory#

alias of `PRO`

Parameters:

var (sympy.Symbol) – Differentiated variable.

Return type:

Sum

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 a `zx.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 in `graph.inputs() + graph.outputs()`, * or `set(graph.inputs()).intersection(graph.outputs())`.

braid_factory#

alias of `Swap`

factory#

alias of `Diagram`

sum_factory#

alias of `Sum`