Compilation step
Clifford+T transpilation is a very common first compilation step across almost all QEC compilation pipelines. There are a few different methods for this transpilation, often optimizing for different metrics (e.g. T-count, T-depth, 2-qubit gate count, etc.). One also has to consider connectivity constraints and do any necessary routing during this process.
Tool/library to be used
NWQEC is a nice tool for Clifford+T transpilation, and while it is worth considering implementing this as a compiler pass on its own there also already exists a nice ucc integration which does most of the necessary work. As such, for now it makes the most sense to just implement a ucc compilation layer which performs Clifford+T transpilation of an arbitrary input circuit, especially since this allows for the implicit usage of qbraid for translating between different input IRs. Note that NWQEC calls gridsynth as well, yet another tool which will likely end up getting its own compilation layer at some point down the line.
Necessary translation layers
This is intended as a first step in any compilation pipeline, so basically any compilation pipeline which assumes Clifford+T input would need a translation function from this compilation layer. For now this just means PyZX, but given planned future compilation layers this will also mean FTCircuitBench once that is implemented.
Thankfully any translation layers from this node to other nodes should be extremely sparse, likely doing zero or almost zero work due to the nature of this compilation step.
Testing and verification
Good unit tests would be checking circuit equivalence between the input and the transpiled circuit for some small example circuits making use of various gates. Verifying that the resulting circuit respects connectivity constraints for a variety of architectures (both common and intentionally weird) is also a good idea.
Compilation step
Clifford+T transpilation is a very common first compilation step across almost all QEC compilation pipelines. There are a few different methods for this transpilation, often optimizing for different metrics (e.g. T-count, T-depth, 2-qubit gate count, etc.). One also has to consider connectivity constraints and do any necessary routing during this process.
Tool/library to be used
NWQEC is a nice tool for Clifford+T transpilation, and while it is worth considering implementing this as a compiler pass on its own there also already exists a nice ucc integration which does most of the necessary work. As such, for now it makes the most sense to just implement a ucc compilation layer which performs Clifford+T transpilation of an arbitrary input circuit, especially since this allows for the implicit usage of qbraid for translating between different input IRs. Note that NWQEC calls gridsynth as well, yet another tool which will likely end up getting its own compilation layer at some point down the line.
Necessary translation layers
This is intended as a first step in any compilation pipeline, so basically any compilation pipeline which assumes Clifford+T input would need a translation function from this compilation layer. For now this just means PyZX, but given planned future compilation layers this will also mean FTCircuitBench once that is implemented.
Thankfully any translation layers from this node to other nodes should be extremely sparse, likely doing zero or almost zero work due to the nature of this compilation step.
Testing and verification
Good unit tests would be checking circuit equivalence between the input and the transpiled circuit for some small example circuits making use of various gates. Verifying that the resulting circuit respects connectivity constraints for a variety of architectures (both common and intentionally weird) is also a good idea.