Closed swernli closed 3 years ago
@swernli Can this issue be closed or is there still work in progress?
@samarsha You beat me by one minute :). The new PR I opened (#476) is the last one needed to finally resolve this issue. It's the big merge of the feature branch into main, and will likely take a while, but should auto-close this once it is done.
Q# defines the set of basic gate operations in the Microsoft.Quantum.Intrinsic namespace, where the fundamental operations are implemented as
body intrinsic
and other operations are expressed as decompositions onto these body-intrinsic operations. These effectively represent a specific quantum gate set that the current version of the simulator implements. To facilitate experimentation, testing, and eventually targeting of simulators and hardware with a different quantum gate set, the runtime should have infrastructure and examples of alternate implementations of operations in the Microsoft.Quantum.Intrinsic namespace as decompositions on top of the body-intrinsic operations for that alternate gate set.Introducing this functionality will require several tasks.
[x] Refactor Qsharp.Core into the foundational elements shared by all decompositions and the replaceable elements that are override by alternate decompositions. (Resolved by #254)
[x] Introduce the first new decomposition package on top of a different quantum gate set with alternate implementations for Microsoft.Quantum.Intrinsic operations. (Resolved by #363)
[x] Allow alternate decompositions to be tested against the default QuantumSimulator to verify behavior. (Resolved by #363)
[x]
Refactor the EntryPointDriver to allow for target specific simulators.(Moved out to issue #388)[x] Fix e2e build to allow integration of refactored QsharpCore into main (#397, #414)
[x] Add decomposition packages for other common quantum gate sets. (Resolved by #367)
[x] Add documentation on individual decomposition packages and general guidance on authoring new packages.
[x]
Rework use of(Moved out to issue #389)internal
in defining callabes that can be implemented outside of their original binary (see discussion in #367).