/// <summary> /// Constructor for CallGraphEdge objects. /// Strips position info from the given type parameter resolutions. /// </summary> internal CallGraphEdge(TypeParameterResolutions paramResolutions, Range referenceRange) : base(referenceRange) { // Remove position info from type parameter resolutions this.ParamResolutions = paramResolutions.ToImmutableDictionary( kvp => kvp.Key, kvp => StripPositionInfo.Apply(kvp.Value)); }
/// <summary> /// Given the body of an operation, auto-generates the (content of the) adjoint specialization, /// under the assumption that operation calls may only ever occur within expression statements, /// and while-loops cannot occur within operations. /// Throws an ArgumentNullException if the given scope is null. /// </summary> public static QsScope GenerateAdjoint(this QsScope scope) { // Since we are pulling purely classical statements up, we are potentially changing the order of declarations. // We therefore need to generate unique variable names before reordering the statements. scope = new UniqueVariableNames().Transform(scope); scope = ApplyFunctorToOperationCalls.ApplyAdjoint(scope); scope = new ReverseOrderOfOperationCalls().Transform(scope); return(StripPositionInfo.Apply(scope)); }
/// <summary> /// Constructor for ConcreteCallGraphNode objects. /// Strips position info from the given type parameter resolutions. /// </summary> public ConcreteCallGraphNode(QsQualifiedName callableName, QsSpecializationKind kind, TypeParameterResolutions paramResolutions) : base(callableName) { this.Kind = kind; // Remove position info from type parameter resolutions this.ParamResolutions = paramResolutions.ToImmutableDictionary( kvp => kvp.Key, kvp => StripPositionInfo.Apply(kvp.Value)); }
/// <summary> /// Given the body of an operation, auto-generates the (content of the) controlled specialization /// using the default name for control qubits. /// Throws an ArgumentNullException if the given scope is null. /// </summary> public static QsScope GenerateControlled(this QsScope scope) { scope = ApplyFunctorToOperationCalls.ApplyControlled(scope); return(StripPositionInfo.Apply(scope)); }