optics#

This module is an implementation of linear optical circuits as diagrams built from beam splitters, phases and Mach-Zender interferometers.

One may compute the bosonic statistics of these devices using Diagram.indist_prob() and the statistics for distinguishable or partially distinguishable particles using Diagram.dist_prob() and Diagram.pdist_prob(). Amplitudes for pairs of input and output occupation numbers are computed using Diagram.amp() and the full matrix of amplitudes over occupation numbers is obtained using Diagram.eval().

One may also use the QPath calculus as defined in https://arxiv.org/abs/2204.12985. The functor optics2path() decomposes linear optical circuits into QPath diagrams. The functor zx2path() turns instances of zx.Diagram into QPath diagrams via the dual-rail encoding.

Example

>>> from discopy.quantum.optics import zx2path
>>> from discopy.quantum.zx import Z
>>> from discopy import drawing
>>> drawing.equation(Z(2, 1), zx2path(Z(2, 1)), symbol='->',
...                  draw_type_labels=False, figsize=(6, 4),
...                  path='docs/_static/imgs/optics-fusion.png')
../_images/optics-fusion.png