`BellPolytopes.bell_frank_wolfe`

— MethodCalls the lazy pairwise blended conditional gradient algorithm from Frank-Wolfe package.

Arguments:

`p`

: a correlation tensor of order`N`

.

Returns:

`x`

: a correlation tensor of order`N`

, the output of the Frank-Wolfe algorithm,`ds`

: a deterministic strategy, the atom returned by the last LMO,`primal`

:`½|x-v₀*p|²`

`dual_gap`

:`⟨x-v₀*p, x-ds⟩`

`traj_data`

: trajectory of the algorithm,`active_set`

: all deterministic strategies used for the decomposition of the last iterate`x`

, contains fields`weights`

,`atoms`

, and`x`

,`M`

: a Bell inequality, meaningful only if the dual gap is small enough`β`

: the local bound of the inequality parametrised by`M`

, reliable only if the last LMO is exact.

Optional arguments:

`marg`

: a boolean, indicates if`p`

contains marginals`v0`

: the visibility used to make a nonlocal`p`

closer to the local polytope,`epsilon`

: the tolerance, used as a stopping criterion (when the primal value or the dual gap go below its value), by default 1e-7,`verbose`

: an integer, indicates the level of verbosity from 0 to 3,`shr2`

: the potential underlying shrinking factor, used to display the lower bound in the callback,`TD`

: type of the computations, by default the one of ̀`p`

,`mode`

: an integer, 0 is for the heuristic LMO, 1 for the enumeration LMO,`nb`

: an integer, number of random tries in the LMO, if heuristic, by default 10^2,`TL`

: type of the last call of the LMO,`mode_last`

: an integer, mode of the last call of the LMO, -1 for no last call`nb_last`

: an integer, number of random tries in the last LMO, if heuristic, by default 10^5,`sym`

: a boolean, indicates if the symmetry of the input should be used, by default automatic choice,`use_array`

: a boolean, indicates to store the full deterministic strategies to trade memory for speed in multipartite scenarios,`callback_interval`

: an integer, print interval if`verbose`

= 3,`seed`

: an integer, the initial random seed.

`BellPolytopes.local_bound`

— MethodCompute the local bound of a Bell inequality parametrised by `M`

. No symmetry detection is implemented yet, used mostly for pedagogy and tests.

`BellPolytopes.nonlocality_threshold`

— MethodCompute the nonlocality threshold of the qubit measurements encoded by the Bloch vectors `vec`

in a Bell scenario with `N`

parties.

Arguments:

`vec`

: an`m × 3`

matrix with Bloch vectors coordinates,`N`

: the number of parties.

Returns:

`lower_bound_infinite`

: a lower bound on the nonlocality threshold under all projective measurements (in the subspace spanned by`vec`

in the Bloch sphere),`lower_bound`

: a lower bound on the nonlocality threshold under the measurements provided in input,`upper_bound`

: a (heuristic) upper bound on the nonlocality threshold under the measurements provided in input, also valid for all projective measurements`local_model`

: a decomposition of the correlation tensor obtained by applying the measurements encoded by the Bloch vectors`vec`

on all`N`

subsystems of the shared state`rho`

with visibility`lower_bound`

,`bell_inequality`

: a (heuristic) Bell inequality corresponding to`upper_bound`

.

Optional arguments:

`rho`

: the shared state, by default the singlet state in the bipartite case and the GHZ state otherwise,`v0`

: the initial visibility, which should be an upper bound on the nonlocality threshold, 1.0 by default,`precision`

: number of digits of`lower_bound`

, 4 by default,- for the other optional arguments, see
`bell_frank_wolfe`

.

`BellPolytopes.pythagorean_approximation`

— MethodCompute a rational approximation of a `m × 3`

Bloch matrix.

`BellPolytopes.shrinking_squared`

— MethodCompute the shrinking factor of a `m × 3`

Bloch matrix, symmetrising it to account for antipodal vectors.