BosonSampling.classical_sampler
— Methodclassical_sampler(U, n, m)
classical_sampler(;input::Input, interf::Interferometer)
Sample photons according to the Distinguishable
case.
BosonSampling.classical_sampler
— Methodclassical_sampler(ev::Event{TIn, TOut}; occupancy_vector = true) where {TIn<:InputType, TOut <: FockSample}
Sampler for an Event
. Note the difference of behaviour if occupancy_vector = true
.
BosonSampling.cliffords_sampler
— Methodcliffords_sampler(;input::Input, interf::Interferometer, nthreads=1)
Sample photons according to the Bosonic
case following Clifford & Clifford algorithm performed (at most) in $O(n2^m + Poly(n,m))$ time and $O(m)$ space. The optional parameter nthreads
is used to deploy the algorithm on several threads.
BosonSampling.cliffords_sampler
— Methodcliffords_sampler(ev::Event{TIn, TOut}; occupancy_vector = true) where {TIn<:InputType, TOut <: FockSample}
Sampler for an Event
. Note the difference of behaviour if occupancy_vector = true
.
BosonSampling.gaussian_sampler_PNRD
— Methodgaussian_sampler(;input::GaussianInput{T}, nsamples=Int(1e3), burn_in=200, thinning_rate=100, mean_n=nothing) where {T<:Gaussian}
Simulate noiseless Gaussian Boson Sampling with photon number resolving detectors via a MIS sampler. Post-select the proposed states by fixing the mean photon number mean_n
.
BosonSampling.metropolis_sampler
— Methodmetropolis_sampler(;target_pdf, known_pdf, known_sampler, starting_state, n_iter, n_burn = 100, n_thinning = 100)
Implement a metropolis independent sampler for standard boson sampling following. The burn in period n_burn
and the thinning interval n_thinning
both have default value of 100.
https://arxiv.org/abs/1705.00686: As the paper is limited to collinionless events, we keep track of this thanks to iterate_until_collisionless
.
Burn in perdiod and thinning interval must have the same value.
BosonSampling.noisy_sampler
— Methodnoisy_sampler(;input::Input, loss::Real, interf::Interferometer)
Sample partially-distinguishable photons through a lossy interferometer, which runs (at most) in $O(n2^m + Poly(n,m))$ time.
BosonSampling.noisy_sampler
— Methodnoisy_sampler(ev::Event{TIn,TOut}, loss::Real; occupancy_vector=true) where {TIn<:InputType, TOut<:FockSample}
Noisy sampler for en Event
.