CirQuS-UTS / QuanGuru

QuanGuru (pronounced Kangaroo) is a Python library for numerical modelling of quantum systems. It is still under-development, and it consists of tools for numerical simulations of Quantum systems.
BSD 3-Clause "New" or "Revised" License
5 stars 7 forks source link

Compatibility with Pytket #227

Open DanCocking opened 1 year ago

DanCocking commented 1 year ago

What feature should we add?

Cross-compatibility with other libraries such as Qiskit, cirq etc. More specifically the ability to "import" and "export" circuits to and from QuanGuru or use the abilities of QuanGuru on circuits built elsewhere and vice versa. This functionality can be quickly achieved by interfacing with Pytket a package that provides access to many different backends from Qiskit to hardware. It can also build its circuits from other packages circuits as well as OpenQasm so it can provide the ability to transform other packages circuit design API into QuanGuru's circuit desgin API.

Proposed Solution

To users this should appear as a simple quantumSystem.createPytketCircuit(self) call that returns a new pytket Circuit that has the same state as QuanGurus quantum system (plus subsystems). It could also be implemented in an entirely new class that acts as a wrapper to pytkets circuits.

Why/Motivation

There are specific types of simulation that QuanGuru is significantly better at (such as exact simulation for >2 qubit gates), similarly, QuanGuru is lacking features compared to some of the larger projects such as ability to graph and less optimised simulation in many cases.

github-actions[bot] commented 1 year ago

Branch 227-Compatibility_with_other_tools_using_OpenQASM created!

DanCocking commented 1 year ago

First step is to create a wrapper around Pytket circuits so they can be represented as protocols within QuanGuru and contribute to simulations within QuanGuru. It should access properties of the Circuit and provide an interface that QuanGuru can understand.

DanCocking commented 1 year ago

Due to Pytekt Circuits not being from QuanGuru they do not have any Param Bounds — this means that if a pytket circuit is changed we cannot automatically inform the wrapper object. This is an issue since this means that the unitary and systems will not update when the circuit changes and so you will be working with an outdated version of the circuit.

Solution