State space analysis of the boson sampling problem.
The repository is organized as follows:
Source code files.
- /interferometer
- Scheme.cpp (.h): A class that describes a circuit capable of importing and exporting interferometer matrices.
- /network
- ConnectivityComponent.cpp (.h): Describes each connectivity component of the constructed network.
- Network.cpp (.h): A class that constructs a Wave Function Network (WFN) on a given sample space with a given metric and activation distance.
- /samplers
- BFbosonSampler.cpp (.h): A simple brute-force sampler that constructs the entire space of possible outcomes with its probabilities.
- CoherentSampler.cpp (.h): A sampler that uses the coherent state of light at the input of the interferometer.
- DistinguishableSampler.cpp (.h): A sampler that uses distinguishable particles.
- MISampler.cpp (.h): Metropolis Independence Sampler, as discussed in the Supplementary Information to Neville et al. (2017).
- MeanFieldSampler.cpp (.h): Mean-field sampler, the multi-mode Fock state at the input semi-classically approximated by the macroscopically populated single-particle states with random phases.
- UniformSampler.cpp (.h): A sampler from a uniform distribution constructed over a given space of possible outcomes.
- Sampler.cpp (.h): Abstract parent class for all samplers under consideration.
- /space
- FockState.cpp (.h):A class describing a multimode Fock state of light.
- StateSpace.cpp (.h): A class describing the sample space.
- file_lib.cpp (.h): Some additional functions for exporting data in a specific format.
- math_lib.cpp (.h): Several necessary special mathematical functions.
Resources collected during the research.
- /samples
- /neville_12_*_batch900
- *.txt: samples divided into batches of size 900 from Neville et al. (2017), generated by a specific sampler (indicated in the folder name) for a system of 12 photons injected into a 144-mode interferometer. The first digit corresponds to the sampling iteration (0-3) and the last digits correspond to the batch number.
- /neville_20_*_batch900
- *.txt: samples divided into batches of size 900 from Neville et al. (2017), generated by a specific sampler (indicated in the folder name) for a system of 20 photons injected into a 400-mode interferometer. The first digit corresponds to the sampling iteration (0-3) and the last digits correspond to the batch number.
- /neville_7_*_batch900
- *.txt : samples divided into batches of size 900 from Neville et al. (2017), generated by a specific sampler (indicated in the folder name) for a system of 7 photons injected into a 49-mode interferometer. The first digit corresponds to the sampling iteration (0-3) and the last digits correspond to the batch number.
- /neville_12_*_batch900
- /scheme
- /diff_u_5 (6)
- scheme_unitary_5(6)_*.txt: Haar-random unitary interferometer matrices used for averaging over different interferometer matrices (5 and 6 photons injected into 25- and 36-mode interferometers, respectively).
-
scheme_unitary_*.txt: Haar-random unitaries with a given (
$"*"$ ) number of photons and quadratically scaled number of modes ($*^2$ ).
- /diff_u_5 (6)
Source files that use this library to perform calculations for the article.
- CloudPositionN.cpp: Dependence of the cloud position on the collected number of samples, averaged over several sampling iterations on the same given scheme.
- Neville_test.cpp: The validation protocol tests utilizing data from Neville et. al. (2017)
- diff_unitary.cpp: Dependence of the cloud position on the collected number of samples, averaged over several sampling iterations with different interferometer matrices.
- mis_test.cpp: Test for the MISampler class.
VisualStudio files.
bs-StateSpace.h: Header file of this library.
bs-StateSpace.lib: File of the described static library.
The described project is adapted for compilation on Linux systems.
- makefile: a general makefile; before running the compiled program, paste the "/resources" folder from this repository into the project.
- use
make main_maketo make a main.cpp file corresponding to CloudPositionN.cpp from "/tests" - use
make neville_test_maketo make Neville_test.cpp (see "/tests") - use
make diff_u_test_maketo make diff_unitary.cpp (see "/tests") - use
make mis_test_maketo make mis_test.cpp (see "/tests")
- use