public static string Print(this IQuantumState state, params Register[] registers) { var test = state.ToArray().Where(b => b.Magnitude > ComplexExt.Precision); StringBuilder sb = new StringBuilder(); for (long i = 0; i < state.Dimension; i++) { var basis = new ComputationalBasis(i, state.NumQubits()); var amp = state.GetAmplitude(basis); if (amp.Magnitude < ComplexExt.Precision) { continue; } sb.Append($"+{(amp.Imaginary == 0 ? amp.Real.ToString("F2") : amp.ToString("F2"))}"); var labels = basis.GetLabels(); foreach (var register in registers) { var registerLabels = new List <bool>(); foreach (var index in register.QubitIndexes) { registerLabels.Add(labels[index]); } long regValue = ComputationalBasis.FromLabels(registerLabels.ToArray()).AmpIndex; sb.Append($"|{regValue}>"); } } return(sb.ToString()); }
public IQuantumState Transform(IQuantumState input) { if (input.Dimension != Dimension) { throw new ArgumentException(nameof(input.Dimension)); } DenseVector inVec = DenseVector.OfArray(input.ToArray()); var res = matrix * inVec; return(new MultiQubit(res.ToArray())); }