private static void UpdateCache(Qstate old, Qstate @new) { foreach (var bit in cache[old]) { bit.SetState(@new); } cache.Remove(old); }
public static void Combine(Qubit q1, Qubit q2) { var s1 = q1.S; var s2 = q2.S; if (s1 != s2) { var s = Qstate.Combine(s1, s2); UpdateCache(s1, s); UpdateCache(s2, s); } }
public static Qstate Combine(Qstate s1, Qstate s2) { var s = new Qstate(); s.v = AlgebraUtility.TensorProduct(s1.v, s2.v); s.posMap = s2.posMap; var offset = s2.posMap.Count; foreach (var pair in s1.posMap) { s.posMap.Add(pair.Key, pair.Value + offset); } return(s); }
private void SetState(Qstate s) { S = s; AddToCache(); }