TNDecode module
TensorNetworkCodes.TNDecode — ModuleDecoding functions based on contracting a tensor-network associated with a TensorNetworkCode, see tn_decode.
TensorNetworkCodes.TNDecode.basic_contract — Functionbasic_contract(bond_dim=10) -> functionReturn an exact contract function for use with tn_decode that contracts a matrix of ITensor working along row-by-row.
See also: tn_decode.
TensorNetworkCodes.TNDecode.mps_contract — Functionmps_contract(bond_dim=10) -> functionReturn a contract function for use with tn_decode that contracts a matrix of ITensor, treating rows as MPS/MPO and contracting rows element-wise, retaining a maximum bond dimension of bond_dim, before contracting along the final row.
See also: tn_decode.
TensorNetworkCodes.TNDecode.tn_decode — Functiontn_decode(
code::TensorNetworkCode, syndrome::AbstractVector{Int}, error_probability::Real;
contract_fn=basic_contract()
) -> (Vector{Int}, Float64)Return a recovery operator for the code, that is consistent with the syndrome and is from the most-likely logical coset. Additionally, the predicted success probability, defined as the ratio of the probability of the mostly-likely logical coset to the sum of the probabilities of all logical cosets, is returned.
The method of tensor-network contraction defaults to basic_contract, which corresponds to exact contraction. Alternatively, mps_contract may be specified for efficient but approximate contraction.
See also: basic_contract, mps_contract
This function currently assumes a depolarizing noise model and only supports codes that can be laid out on a square lattice.
Examples
julia> using TensorNetworkCodes.TNDecode
julia> code = rotated_surface_code(3);
julia> error = [0, 0, 0, 1, 0, 0, 3, 0, 0]; # IIIXIIZII
julia> syndrome = find_syndrome(code, error);
julia> p = 0.2; # error_probability
julia> recovery, success_prob = tn_decode(code, syndrome, p; contract_fn=mps_contract(8))
([0, 0, 0, 3, 3, 0, 1, 3, 0], 0.8250539267483997)
julia> find_syndrome(code, recovery) == syndrome
true