pytket¶
pytket
is a python module for interfacing with tket, a quantum computing toolkit and optimising compiler developed by Quantinuum. We currently support circuits and device architectures from
numerous providers, allowing the
tket tools to be used in conjunction with projects on their platforms.
pytket
is available for Python 3.10, 3.11, 3.12 and 3.13, on Linux, MacOS
and Windows. To install, run
pip install pytket
Known issue installing pytket (Added 2nd August 2024)
Due to the removal of the types-pkg_resources package from pypi there will likely be issues when installing old versions of pytket. It is recommend to use pytket >=1.31 where possible.
If you require using a version of pytket older than 1.31 then you can try the following.
pip install types-pkg-resources==0.1.3 pytket==<set version>
If you have issues installing pytket
please visit the installation troubleshooting page.
To use pytket
, you can simply import the appropriate modules into your python code or in an interactive Python notebook. We can build circuits directly using the pytket
interface by creating a blank circuit and adding gates in the order we want to apply them.
See the Getting Started page for a basic tutorial on using
pytket
. To get more in depth on features, see the pytket user guide for an extensive introduction to pytket
functionality and how to use it.
Extensions¶
To use pytket in conjunction with other software libraries you must install a separate python package for the relevant pytket extension.
Each extension adds either some new methods to the pytket
package to convert between the circuit
representations, or some new backends to submit circuits to within pytket
.
Extensions are separate python packages can be installed using pip
. The installation command is pip install pytket-X
where X
is the name of the extension.
To install the pytket-quantinuum
package use the following command.
pip install pytket-quantinuum
The extensions supported by tket are described here.
How to cite¶
If you wish to cite tket in any academic publications, we generally recommend citing our software overview paper for most cases.
If your work is on the topic of specific compilation tasks, it may be more appropriate to cite one of our other papers:
“On the qubit routing problem” for qubit placement (aka allocation, mapping) and routing (aka swap network insertion, connectivity solving).
“Phase Gadget Synthesis for Shallow Circuits” for representing exponentiated Pauli operators in the ZX calculus and their circuit decompositions.
“A Generic Compilation Strategy for the Unitary Coupled Cluster Ansatz” for sequencing of terms in Trotterisation and Pauli diagonalisation.
We are also keen for others to benchmark their compilation techniques against us. We recommend checking our benchmark repository for examples on how to run basic benchmarks with the latest version of pytket
. Please list the release version of pytket
with any benchmarks you give, and feel free to get in touch for any assistance needed in setting up fair and representative tests.
User Support¶
If you have problems with the use of tket or you think that you have found a bug there are several ways to contact us:
You can write an issue on github with details of the problem and we will pick that up. Github issues are the preferred way to report bugs with tket or request features. You can also have a look on that page to see if your problem has already been reported by someone else.
We have a slack channel for community discussion and support. You can join by following this link
Write an email to tket-support@quantinuum.com and ask for help with your problem.
There is also a tag on quantum computing stack exchange for questions relating to pytket.
We are really thankful for all help to fix bugs in tket. Usually you will get an answer from someone in the development team of tket soon.
LICENCE¶
Licensed under the Apache 2 License.
- pytket.backends
- pytket.circuit
- pytket.circuit.Circuit
- pytket.circuit.OpType
- pytket.circuit.logic_exp
- pytket.circuit.display
fresh_symbol()
Op
Command
BasisOrder
CXConfigType
CircBox
Unitary1qBox
Unitary2qBox
Unitary3qBox
ExpBox
PauliExpBox
PauliExpPairBox
PauliExpCommutingSetBox
TermSequenceBox
ToffoliBoxSynthStrat
ToffoliBox
QControlBox
CustomGateDef
CustomGate
Conditional
ClassicalExpBox
ClExprOp
WiredClExpr
ClExpr
ClOp
ClBitVar
ClRegVar
PhasePolyBox
ProjectorAssertionBox
StabiliserAssertionBox
WASMOp
MultiBitOp
SetBitsOp
ClassicalEvalOp
ClassicalOp
CopyBitsOp
RangePredicateOp
MultiplexorBox
MultiplexedRotationBox
MultiplexedU2Box
MultiplexedTensoredU2Box
StatePreparationBox
DiagonalBox
ConjugationBox
ResourceBounds
ResourceData
DummyBox
- pytket.unit_id
- pytket.pauli
- pytket.passes
BasePass
CNotSynthType
RepeatPass
RepeatUntilSatisfiedPass
RepeatWithMetricPass
SafetyMode
SequencePass
AASRouting()
AutoRebase()
AutoSquash()
CXMappingPass()
CliffordPushThroughMeasures()
CliffordResynthesis()
CliffordSimp()
CnXPairwiseDecomposition()
CommuteThroughMultis()
ComposePhasePolyBoxes()
ContextSimp()
CustomPass()
CustomRoutingPass()
DecomposeArbitrarilyControlledGates()
DecomposeBoxes()
DecomposeClassicalExp()
DecomposeMultiQubitsCX()
DecomposeSingleQubitsTK1()
DecomposeSwapsToCXs()
DecomposeSwapsToCircuit()
DecomposeTK2()
DefaultMappingPass()
DelayMeasures()
EulerAngleReduction()
FlattenRegisters()
FlattenRelabelRegistersPass()
FullMappingPass()
FullPeepholeOptimise()
GlobalisePhasedX()
GreedyPauliSimp()
GuidedPauliSimp()
KAKDecomposition()
NaivePlacementPass()
NormaliseTK2()
OptimisePhaseGadgets()
PauliExponentials()
PauliSimp()
PauliSquash()
PeepholeOptimise2Q()
PlacementPass()
RebaseCustom()
RebaseTket()
RemoveBarriers()
RemoveDiscarded()
RemoveImplicitQubitPermutation()
RemoveRedundancies()
RenameQubitsPass()
RoundAngles()
RoutingPass()
SimplifyInitial()
SimplifyMeasured()
SquashCustom()
SquashRzPhasedX()
SquashTK1()
SynthesiseTK()
SynthesiseTket()
SynthesiseUMD()
ThreeQubitSquash()
ZXGraphlikeOptimisation()
ZZPhaseToRz()
PassSelector
- pytket.passes.script
- pytket.passes.auto_rebase
- pytket.predicates
CliffordCircuitPredicate
CommutableMeasuresPredicate
CompilationUnit
ConnectivityPredicate
DefaultRegisterPredicate
DirectednessPredicate
GateSetPredicate
MaxNClRegPredicate
MaxNQubitsPredicate
MaxTwoQubitGatesPredicate
NoBarriersPredicate
NoClassicalBitsPredicate
NoClassicalControlPredicate
NoFastFeedforwardPredicate
NoMidMeasurePredicate
NoSymbolsPredicate
NoWireSwapsPredicate
NormalisedTK2Predicate
PlacementPredicate
Predicate
UserDefinedPredicate
- pytket.partition
- pytket.qasm
- pytket.quipper
- pytket.architecture
- pytket.placement
- pytket.mapping
- pytket.tableau
- pytket.transform
- pytket.tailoring
- pytket.wasm
- pytket.zx
- pytket.utils
append_pauli_measurement()
compare_statevectors()
compare_unitaries()
counts_from_shot_table()
expectation_from_counts()
expectation_from_shots()
gen_term_sequence_circuit()
get_operator_expectation_value()
get_pauli_expectation_value()
permute_basis_indexing()
permute_qubits_in_statevector()
permute_rows_cols_in_unitary()
prepare_circuit()
probs_from_counts()
probs_from_state()
readout_counts()
OutcomeArray
QubitPauliOperator
Graph
- pytket.utils.distribution
- pytket.utils.spam
- pytket.utils.stats
- pytket.utils.symbolic
- pytket.logging
- pytket.config