public QCTraceSimulatorImpl(QCTraceSimulatorConfiguration config) { configuration = Utils.DeepClone(config); Utils.FillDictionaryForEnumNames <PrimitiveOperationsGroups, int>(primitiveOperationsIdToNames); gateTimes = new double[primitiveOperationsIdToNames.Keys.Count]; for (int i = 0; i < primitiveOperationsIdToNames.Keys.Count; ++i) { if (!config.TraceGateTimes.ContainsKey((PrimitiveOperationsGroups)i)) { throw new Exception($"Gate time for {primitiveOperationsIdToNames[i]} must be specified."); } gateTimes[i] = config.TraceGateTimes[(PrimitiveOperationsGroups)i]; } tCoreConfig = new QCTraceSimulatorCoreConfiguration { ThrowOnUnconstrainedMeasurement = configuration.ThrowOnUnconstrainedMeasurement }; tCoreConfig.CallStackDepthLimit = config.CallStackDepthLimit; InitializeQCTracerCoreListeners(tCoreConfig.Listeners); metricNameToListener = new Dictionary <string, ICallGraphStatistics>(); foreach (IQCTraceSimulatorListener l in tCoreConfig.Listeners) { ICallGraphStatistics li = l as ICallGraphStatistics; if (li != null) { string[] variableNames = li.Results.GetVariablesNamesCopy(); foreach (string metric in variableNames) { metricNameToListener.Add(metric, li); } } } tracingCore = new QCTraceSimulatorCore(tCoreConfig); OnOperationStart += tracingCore.OnOperationStart; OnOperationEnd += tracingCore.OnOperationEnd; RegisterPrimitiveOperationsGivenAsCircuits(); }
public TracerAllocate(QCTraceSimulatorImpl m) : base(m) { core = m.tracingCore; }
public TracerReturn(QCTraceSimulatorImpl m) : base(m) { core = m.tracingCore; }
public TracerBorrow(QCTraceSimulatorImpl m) : base(m) { core = m.tracingCore; }
public TracerAssertProb(QCTraceSimulatorImpl m) : base(m) { core = m.tracingCore; }