public void StartTest() { if (Circuit.Amplitudes != null && Circuit.Amplitudes.Length > 0) { Circuit.AmplitudeLength = Circuit.Amplitudes.Length; } Amplitudes = simulator.Simulate(Circuit); Probabilities = simulator.GetProbabilities(Amplitudes); QiskitString = Circuit.GetQiskitString(); FloatCircuit = new QuantumCircuitFloat(Circuit); MicroQiskitSimulatorFloat floatSimulator = new MicroQiskitSimulatorFloat(); FloatProbabilities = floatSimulator.GetProbabilities(FloatCircuit); ProbabilitieDifference = new double[Probabilities.Length]; for (int i = 0; i < Probabilities.Length; i++) { ProbabilitieDifference[i] = Probabilities[i] - FloatProbabilities[i]; } }
public static Texture2D CalculateColorTexture(QuantumCircuitFloat redCircuit, QuantumCircuitFloat greenCircuit, QuantumCircuitFloat blueCircuit, int width, int height, bool renormalize = false) { Texture2D texture = new Texture2D(width, height, TextureFormat.RGBA32, false); int widthLog = Mathf.CeilToInt(Mathf.Log(width) / Mathf.Log(2)); int heightLog = widthLog; int[] widthLines = MakeLinesInt(widthLog); int[] heightLines = widthLines; if (height != width) { heightLog = Mathf.CeilToInt(Mathf.Log(height) / Mathf.Log(2)); heightLines = MakeLinesInt(heightLog); } MicroQiskitSimulatorFloat simulator = new MicroQiskitSimulatorFloat(); float[] redProbs = simulator.GetProbabilities(redCircuit); float[] greenProbs = simulator.GetProbabilities(greenCircuit); float[] blueProbs = simulator.GetProbabilities(blueCircuit); float normalizationRed = 0; float normalizationGreen = 0; float normalizationBlue = 0; if (!renormalize && redCircuit.OriginalSum > 0 && greenCircuit.OriginalSum > 0 && blueCircuit.OriginalSum > 0) { normalizationRed = redCircuit.OriginalSum; normalizationGreen = greenCircuit.OriginalSum; normalizationBlue = blueCircuit.OriginalSum; } else { for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { int pos = widthLines[i] * height + heightLines[j]; if (redProbs[pos] > normalizationRed) { normalizationRed = redProbs[pos]; } if (greenProbs[pos] > normalizationGreen) { normalizationGreen = greenProbs[pos]; } if (blueProbs[pos] > normalizationBlue) { normalizationBlue = blueProbs[pos]; } } } normalizationRed = 1.0f / normalizationRed; normalizationGreen = 1.0f / normalizationGreen; normalizationBlue = 1.0f / normalizationBlue; } Unity.Collections.NativeArray <Color32> data = texture.GetRawTextureData <Color32>(); //TODO set blocks of color float redValue; float greenValue; float blueValue; //Color color = new Color(); int posX = 0; for (int x = 0; x < width; x++) { posX = widthLines[x] * height; for (int y = 0; y < height; y++) { int index = posX + heightLines[y]; redValue = (redProbs[index] * normalizationRed); greenValue = (greenProbs[index] * normalizationGreen); blueValue = (blueProbs[index] * normalizationBlue); //color.r = redValue; //color.g = greenValue; //color.b = blueValue; texture.SetPixel(x, y, new Color(redValue, greenValue, blueValue)); } } texture.Apply(); return(texture); }