  The manipulation of the quantum states of light in linear optical systems has
multiple applications in quantum optics and quantum computation. The package
QOptCraft gives a collection of methods to solve some of the most usual
problems when designing quantum experiments with linear interferometers. The
methods include functions that compute the quantum evolution matrix for n
photons from the classical description of the system and inverse methods that,
for any desired quantum evolution, will either give the complete description of
the experimental system that realizes that unitary evolution or, when this is
impossible, the complete description of the linear system which approximates
the desired unitary with a locally minimal error. The functions in the package
include implementations of different known decompositions that translate the
classical scattering matrix of a linear system into a list of beam splitters
and phase shifters and methods to compute the effective Hamiltonian that
describes the quantum evolution of states with n photons. The package is
completed with routines for useful tasks like generating random linear optical
systems and computing matrix logarithms. The routines are chosen to avoid usual
numerical problems when dealing with the unitary matrices that appear in the
description of linear systems.
