/** * ###################################################################################################### * ############################################## QUBIT ################################################# * ###################################################################################################### */ /// <summary> /// Transforme un qubit de la libraire QCS en un qubit du module SerializableClass, permettant ça serialisation /// </summary> private static Qubit ToQubitSerialisable(QCS.Qubit qubit) { Qubit qubitSerialisable = new Qubit(); qubitSerialisable.vector = ToMatrixSerialisable(qubit.vector); return(qubitSerialisable); }
/// <summary> /// Transforme un circuit du module SerialisableClass en un circuit de la librairie QCS afin de pouvoir l'utiliser correctement. /// Celui-ci a besoin, pour être transformer, de la liste des portes par défauts, et des portes customs représenté sous la forme d'un dictionnaire. /// </summary> public static QCS.Circuit ToUsableCircuit(Circuit circuitSerialised, Dictionary <string, QCS.Gate> defaultGates, Dictionary <string, QCS.Gate> customGates) { QCS.Circuit circuitUsuable = new QCS.Circuit(); int nbCols = circuitSerialised.entries.Count; int nbRows = circuitSerialised.rows.Count; for (int indexEntry = 0; indexEntry < nbCols; indexEntry++) { QCS.Qubit usuableQubit = ToUsableQubit(circuitSerialised.entries [indexEntry]); QCS.Circuit.EntryStruct entryStruct = new QCS.Circuit.EntryStruct(indexEntry, usuableQubit); circuitUsuable.entries.Add(entryStruct); } for (int indexRow = 0; indexRow < nbRows; indexRow++) { circuitUsuable.rows.Add(new List <QCS.Circuit.GateStruct> ()); QCS.Gate gateUsuable; for (int indexCol = 0; indexCol < nbCols; indexCol += gateUsuable.NbEntries) { string nameGate = circuitSerialised.rows [indexRow].cols [indexCol]; if (defaultGates.ContainsKey(nameGate)) { gateUsuable = defaultGates [nameGate]; } else if (customGates.ContainsKey(nameGate)) { gateUsuable = customGates [nameGate]; } else { gateUsuable = QCS.Gate.IDENTITY; } QCS.Circuit.GateStruct gateStruct = new QCS.Circuit.GateStruct(indexRow, indexCol, gateUsuable); for (int indexEntry = 0; indexEntry < gateUsuable.NbEntries; indexEntry++) { circuitUsuable.rows [indexRow].Add(gateStruct); } } } return(circuitUsuable); }