# QOptCraft: A Python package for the design and study of linear optical quantum systems

## Description

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, computing matrix logarithms, and quantum state entanglement measurement via metrics such as the Schmidt rank. The routines are chosen to avoid usual numerical problems when dealing with the unitary matrices that appear in the description of linear systems.