Beispiel #1
0
        public static Gate Add(IEnumerable <Gate> gates)
        {
            IEnumerator <Gate> iterator = gates.GetEnumerator();

            if (!iterator.MoveNext())
            {
                return(null);
            }

            int nbEntriesRef = iterator.Current.NbEntries;

            while (iterator.MoveNext())
            {
                if (iterator.Current.NbEntries != nbEntriesRef)
                {
                    throw new ArgumentException("cannot add gates of different lengths");
                }
            }

            return(new Gate("(" + String.Join("+", FuncTools.Map((Gate gate) => gate.Name, gates)) + ")", nbEntriesRef, LinearAlgebra.Mult(FuncTools.Map((Gate a) => a.Matrix, gates))));
        }
Beispiel #2
0
 public State(IEnumerable <Qubit> trucs) : this(FuncTools.Reduce1(LinearAlgebra.Kronecker, FuncTools.Map((Qubit a) => a.vector, trucs)))
 {
 }
Beispiel #3
0
 public Gate(params Gate[] gates) : this(String.Join("*", FuncTools.Map((Gate gate) => gate.Name, gates)), (IEnumerable <Gate>)gates)
 {
 }
Beispiel #4
0
 public Gate(string name, IEnumerable <Gate> gates) : this(name, FuncTools.Sum(FuncTools.Map((Gate a) => a.NbEntries, gates)), FuncTools.Reduce1(LinearAlgebra.Kronecker, FuncTools.Map((Gate a) => a.Matrix, gates)))
 {
 }
Beispiel #5
0
 /// <summary>
 /// Retourne True si toutes les portes de la ligne spécifiée sont des portes IDENTITY, False sinon.
 /// </summary>
 /// <param name="index"></param>
 /// <returns>bool</returns>
 public bool IsRowEmpty(int index)
 {
     return(FuncTools.AllEquals(Gate.IDENTITY, FuncTools.Map((GateStruct a) => a.gate, rows[index])));
 }
Beispiel #6
0
        /// <summary>
        /// Evalue partiellement le circuit jusquà la ligne de numéro spécifié
        /// </summary>
        /// <param name="till_row"></param>
        /// <returns>State</returns>
        public State Evaluate(int till_row)
        {
            State entry = GetEntryState();

            return(new State(LinearAlgebra.Mult(entry.Vector, Gate.Add(FuncTools.Map(GetRowGate, FuncTools.Take(till_row + 1, rows))).Matrix)));
        }
Beispiel #7
0
 /// <summary>
 /// Retourne l'état d'entrée du circuit.
 /// </summary>
 /// <returns>State</returns>
 public State GetEntryState()
 {
     return(new State(FuncTools.Map((EntryStruct a) => a.qubit, entries)));
 }
Beispiel #8
0
 /// <summary>
 /// Convertit le circuit en porte (produit matriciel des portes représenttant les lignes)
 /// </summary>
 /// <param name="name"></param>
 /// <returns>Gate</returns>
 public Gate GetCircuitGate(string name)
 {
     return(new Gate(name, Gate.Add(FuncTools.Map(GetRowGate, rows))));
 }
Beispiel #9
0
 /// <summary>
 /// Convertit le circuit en porte (produit matriciel des portes représenttant les lignes).
 /// </summary>
 /// <returns>Gate</returns>
 public Gate GetCircuitGate()
 {
     return(Gate.Add(FuncTools.Map(GetRowGate, rows)));
 }
Beispiel #10
0
 /// <summary>
 /// Convertit une ligne en une porte (produit tensoriel des toutes les portes de la ligne).
 /// </summary>
 /// <param name="row"></param>
 /// <returns>Gate</returns>
 public Gate GetRowGate(List <GateStruct> row)
 {
     return(Gate.Kron(FuncTools.Map((GateStruct a) => a.gate, FilterRow(row))));
 }
Beispiel #11
0
 public static Matrix <Complex> Mult(IEnumerable <Matrix <Complex> > t)
 {
     return(FuncTools.Reduce1(Mult, t));
 }
Beispiel #12
0
 public static Matrix <Complex> Kronecker(IEnumerable <Matrix <Complex> > t)
 {
     return(FuncTools.Reduce1(Kronecker, t));
 }