Skip to content
This repository has been archived by the owner on Jan 12, 2024. It is now read-only.

Trace throws exception on controlled operation #1089

Open
adrianleh opened this issue Aug 16, 2022 · 1 comment
Open

Trace throws exception on controlled operation #1089

adrianleh opened this issue Aug 16, 2022 · 1 comment
Labels
bug Something isn't working

Comments

@adrianleh
Copy link

adrianleh commented Aug 16, 2022

Describe the bug
Trace Simulator throws an exception on a controlled operation

To Reproduce
Create an iqsharp python notebook with the following cells:

import os
os.environ["IQSHARP_LOG_LEVEL"] = "Debug"
import iqsharp
%%qsharp
operation Test(n : Int) : Unit {
    use ctls = Qubit[n - 1];
    use target = Qubit();
    for i in 0..Length(ctls) - 1 {
        Controlled (Ry(3.14 / 2.0, _)) ([ctls[i]], target);
    } 
}
Test.trace(n = 2)

Run the notebook cells in order from the browser as trace only works from the browser.

Trace will fail with the error shown under screenshots. The following exception will be printed to console:

System.AggregateException: One or more errors occurred. (Unable to cast object of type 'System.ValueTuple`2[System.Double,Microsoft.Quantum.Simulation.Core.Qubit]' to type 'Microsoft.Quantum.Simulation.Core.Qubit'.)
       ---> System.InvalidCastException: Unable to cast object of type 'System.ValueTuple`2[System.Double,Microsoft.Quantum.Simulation.Core.Qubit]' to type 'Microsoft.Quantum.Simulation.Core.Qubit'.
         at Microsoft.Quantum.Simulation.Core.ControlledOperation`2.In.get_Value() in D:\a\1\s\submodules\qsharp-runtime\src\Simulation\Core\Operations\Controlled.cs:line 58
         at Microsoft.Quantum.Simulation.Core.ControlledOperation`2.GetRuntimeMetadata(IApplyData args) in D:\a\1\s\submodules\qsharp-runtime\src\Simulation\Core\Operations\Controlled.cs:line 121
         at Microsoft.Quantum.IQSharp.ExecutionPathTracer.ExecutionPathTracer.OnOperationStartHandler(ICallable operation, IApplyData arguments) in D:\a\1\s\submodules\iqsharp\src\ExecutionPathTracer\ExecutionPathTracer.cs:line 51
         at Microsoft.Quantum.Simulation.Core.Operation`2.Apply(I a)
         at Microsoft.Quantum.Simulation.Core.Operation`2.Microsoft.Quantum.Simulation.Core.ICallable<I,O>.Apply(I args)
         at Microsoft.Quantum.Simulation.Core.Operation`2.Apply(I a)
         at Microsoft.Quantum.Simulation.Core.Operation`2.Microsoft.Quantum.Simulation.Core.ICallable<I,O>.Apply(I args)
         at SNIPPET.Test.<get___Body__>b__39_0(ValueTuple`2 __in__)
         at Microsoft.Quantum.Simulation.Core.Operation`2.Apply(I a)
         at Microsoft.Quantum.Simulation.Core.Operation`2.Apply[GenO](Object args)
         at Microsoft.Quantum.Simulation.Common.SimulatorBase.Execute[T,I,O](I args) in D:\a\1\s\submodules\qsharp-runtime\src\Simulation\Simulators\CommonNativeSimulator\SimulatorBase.cs:line 170
         at Microsoft.Quantum.Simulation.Common.SimulatorBase.<>c__DisplayClass68_0`3.<Run>b__0() in D:\a\1\s\submodules\qsharp-runtime\src\Simulation\Simulators\CommonNativeSimulator\SimulatorBase.cs:line 188
         at System.Threading.Tasks.Task`1.InnerInvoke()
         at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
      --- End of stack trace from previous location ---
         at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
      --- End of stack trace from previous location ---
         at CallSite.Target(Closure , CallSite , Object )
         at Microsoft.Quantum.IQSharp.OperationInfoExtensions.RunAsync(OperationInfo op, IOperationFactory qsim, IDictionary`2 arguments) in D:\a\1\s\submodules\iqsharp\src\Core\OperationInfo.cs:line 84
         at Microsoft.Quantum.IQSharp.Kernel.TraceMagic.RunAsync(String input, IChannel channel) in D:\a\1\s\submodules\iqsharp\src\Kernel\Magic\TraceMagic.cs:line 186
         --- End of inner exception stack trace ---
         at System.Threading.Tasks.Task`1.get_Result()
         at Microsoft.Quantum.IQSharp.Kernel.TraceMagic.Run(String input, IChannel channel) in D:\a\1\s\submodules\iqsharp\src\Kernel\Magic\TraceMagic.cs:line 147
         at Microsoft.Quantum.IQSharp.Jupyter.AbstractMagic.RunCancellable(String input, IChannel channel, CancellationToken cancellationToken) in D:\a\1\s\submodules\iqsharp\src\Jupyter\Magic\AbstractMagic.cs:line 197
         at Microsoft.Quantum.IQSharp.Jupyter.AbstractMagic.<>c__DisplayClass2_1.<SafeExecute>b__1() in D:\a\1\s\submodules\iqsharp\src\Jupyter\Magic\AbstractMagic.cs:line 56
         at System.Threading.Tasks.Task`1.InnerInvoke()
         at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
      --- End of stack trace from previous location ---
         at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
      --- End of stack trace from previous location ---
         at Microsoft.Quantum.IQSharp.Jupyter.AbstractMagic.<>c__DisplayClass2_0.<<SafeExecute>b__0>d.MoveNext() in D:\a\1\s\submodules\iqsharp\src\Jupyter\Magic\AbstractMagic.cs:line 56

Expected behavior
The circuit created by test would be visualized

Screenshots

image

System information

  • OS: Windows 10
  • Browser: Edge
  • Version: 0.25.222597
@adrianleh adrianleh added the bug Something isn't working label Aug 16, 2022
@cgranade
Copy link
Contributor

Thanks for reporting this! I'll go on and transfer this to the qsharp-runtime repo, as this looks to be a bug with the simulator itself.

@cgranade cgranade transferred this issue from microsoft/iqsharp Sep 16, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants