Exemplo n.º 1
0
        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;
 }
Exemplo n.º 4
0
 public TracerBorrow(QCTraceSimulatorImpl m) : base(m)
 {
     core = m.tracingCore;
 }
Exemplo n.º 5
0
 public TracerAssertProb(QCTraceSimulatorImpl m) : base(m)
 {
     core = m.tracingCore;
 }