protected double GetMetricStatistic( string operationName, string metric, string statistic, string callerName = CallGraphEdge.CallGraphRoot, OperationFunctor functor = OperationFunctor.Body, OperationFunctor callerFunctor = OperationFunctor.Body) { ICallGraphStatistics st = metricNameToListener[metric]; return(st.Results.GetStatistic(new CallGraphEdge((HashedString)operationName, (HashedString)callerName, functor, callerFunctor), metric, statistic)); }
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(); }