Changelog¶
2.10.2 (October 2025)¶
Fixes:
Fix
circuit_dict_from_pytket1_dict()when circuit containsCustomGate.
General:
Restore support for MacOS on x86 architecture.
2.10.1 (October 2025)¶
Fixes:
Update
Decompose_TK2to not check decomposition with wire swaps when theTK2gate only has a single angle.Make
optypeinfo()thread-safe.
General:
Drop support for MacOS on x86 architecture.
2.9.3 (August 2025)¶
Fixes:
Update
CHdecomposition to use a singleCXgate.Fix QASM conversion of circuits containing multiple RNG calls writing to the same register.
Update Conditional Block merging in
GreedyPauliSimp.
2.9.1 (July 2025)¶
Features:
Detect more Clifford
PhasedXgates.Add support for
TK1gates toGreedyPauliSimp.
Fixes:
Update phase folding for Clifford angles in
GreedyPauliSimp.
2.8.0 (July 2025)¶
Features:
Add the optional
replace_tk2_equivalentsargument toreplace_SWAPs. Also, add handling of TK2 gates that are equivalent to SWAPs inCliffordSimp.Add Clifford testing for
PhasePolyBoxandUnitaryTableauBox.
2.7.0 (July 2025)¶
Features:
Add RNG and shot-number operations with conversion to extended QASM.
Fixes:
Add Python bindings for all
OpTypes.
2.6.0 (June 2025)¶
Features:
Add new pass
RxFromSXto convertSXandSXdggates toRx.
Fixes:
Fix assertion error in
MultiplexedTensoredU2Box.get_circuit().
2.5.0 (June 2025)¶
Features:
Enable pickling of more pytket objects (
MeasurementBitMap,MeasurementSetup,Node,WiredClExpr, and all types ofPredicateexceptUserDefinedPredicate).Canonicalize gate angles when serializing to JSON.
Add boolean return value to
Circuit.replace_SWAPs().Add
TK1_to_PhasedXmethod and use inAutoRebasepasses.
Fixes:
Add additional type check step to
get_default_to_linear_boundary_unit_map.Ensure transforms and passes return
truewhen they replace swaps.
2.4.1 (May 2025)¶
Fixes:
Revert renaming of
has_reg_outputto_has_reg_output.
2.4.0 (May 2025)¶
API changes:
A number of utility methods and classes pertaining to classical expressions, pass scripting, QASM and Quipper parsing, SPAM mitigation, and symbolic evaluation of circuits have been renamed to indicate they are not intended for external usage.
Features:
Allow length-1 bit registers to be interpreted as bits in extended-QASM expressions.
Additional
circuit_from_qasm_str_wasmandcircuit_from_qasm_str_wasmmhfor parsing qasm with wasm.
Fixes:
Ensure downcasting of
UnitIDtoQubitin initial and final maps.Fix performance issue in
TK2toZZPhaseconversion.
2.3.2 (April 2025)¶
Features:
Add option to
Circuit.remove_blank_wiresto force removal of all blank classical wires.
Fixes:
Apply special handling of multi-controlled gates with 0 or 1 controls when adding operations using
UnitIDarguments.
2.3.1 (April 2025)¶
Fixes:
Fix C++/Python binding of fidelities information passed to
DecomposeTK2constructor.
2.3.0 (April 2025)¶
API changes:
Gate construction methods (e.g.
X()) have a streamlined API by acceptingUniontypes in place of overloaded methods, giving better error messages when mixingUnitID/Qubit/Bitandintfor gate arguments.
Features:
Enabling pickling of
Architectureobjects.Added optional inclusive filters to the
DecomposeBoxes()pass to only decompose boxes of given types or opgroups.New utility function
circuit_dict_from_pytket1_dictto convert serializations of pytket 1 circuits containingClassicalExpBoxes to serializations of equivalent pytket 2 circuits containingClExprOps.
Performance:
Reduced the wall-clock time of
GreedyPauliSimpby approximately 40% for large circuits.Improved performance of Python/C++ bindings.
2.2.0 (April 2025)¶
Features:
Add methods in
circuit_libraryto convertCXandTK2to and fromISWAPMax, and support forAutoRebasetargetingISWAPMax.
Fixes:
Make
ZXGraphlikeOptimisationpass preserve the circuit’s name.Fix handling of bitwise inequality conditions when parsing QASM.
Define transform used in
scratch_reg_resize_passas as separate function.Enable deserialization of
NormaliseTK2pass.Don’t remove classical wires in
FlattenRelabelRegistersPass.
2.1.0 (March 2025)¶
Features:
Add
target_2qb_gateparameter toCliffordSimppass andOptimiseCliffordstransform.Add
tk2_to_cxparameter toRebaseToCliffordSinglestransform.Reduce depth of circuits resulting from
FullPeepholeOptimisein some cases.Add
MultiBitOp.multiplierproperty.Add
bidirectionalargument toArchitecture.valid_operation.Add
CustomPassMap.
Fixes:
Fix error in
separate_classicalwhen quantum operations come after final measurements.
2.0.1 (March 2025)¶
Features:
Add optional
allow_swapsargument toZXGraphlikeOptimisation().Allow GreedyPauliSimp to accept circuits containing Phase gates.
2.0.0 (February 2025)¶
API changes:
Remove
GlobalisePhasedXtransform and pass.Remove
SynthesiseUMDpass.Remove
NoiseAwarePlacement.modify_configandGraphPlacement.modify_configmethods.Remove
ClassicalExpBoxand related methods.
Fixes:
Fix segfault listing registers of circuit containing unindexed units.
1.41.0 (February 2025)¶
Features:
Add
has_implicit_wireswapsproperty.Make
PauliSimp()accept circuits with SX and SXdg gates.
1.40.0 (February 2025)¶
Features:
Add Python 3.13 support to the ZX module.
Add
get_dict()method.Add
add_circuit_with_map()method.
Fixes:
Make
CliffordCircuitPredicateaccept circuits containing measurements.Make
DecomposeBoxespass recurse into conditional boxes.Fix conversion of
ClOp.BitEqandClOp.BitNeqto QASM.Fix conversion of
OpType.CnXto QASM.Make
ThreeQubitSquashwork with subcircuits containing boxes for which we can compute the unitary.
1.39.0 (January 2025)¶
Features:
Add
RemovePhaseOpspass.
Fixes:
Fix issue with custom gates in qasm to circuit conversion.
Ignore boxes when applying
KAKDecomposition.
1.38.0 (January 2025)¶
Features:
Squash sequences of conditional gates in
SquashRzPhasedXpass.
Fixes:
Fix issue with
Circuit.commands_of_type(OpType.Conditional).
1.37.0 (December 2024)¶
Features:
Rebase to TK2 using fewer two-qubit gates, improving compilation results in some scenarios.
Fixes:
Fix circuit iteration giving invalid slices in some cases.
Use built-in int type for get_counts() instead of numpy int types.
Add check for validity of resultant graph before pushing conditional gates through other vertices in squashing passes.
Performance:
Update
GreedyPauliSimpthread_timeoutto hit timeout when constructing Pauli Graph.
1.36.0 (November 2024)¶
Features:
Add
BasePass.get_preconditions()andBasePass.get_postconditions().
API changes:
Remove the deprecated methods
auto_rebase_pass()andauto_squash_pass().
Features:
Add
Circuit.wasm_uidproperty to get the wasm UID from the circuit
Performance:
Optimization in Clifford simplification, reducing compilation times for
FullPeeopholeOptimiseby an order of magnitude on x86_64.
Fixes:
Fix
Circuit.appendfor circuits containing wasmFix issue with wrong parameters at
add_wasm
1.35.0 (November 2024)¶
Features:
Add
clexpr.check_register_alignments()method to check register alignments inClExprOp.Use
ClExprOpinstead ofClassicalExpBoxwhen deconstructing complex conditions.Add
custom_deserialisationargument toBasePassandSequencePassfrom_dictmethod to support construction ofCustomPassfrom json.Add
thread_timeout,only_reduce, andtrialsarguments toGreedyPauliSimp.Add option to not relabel
ClassicalExpBoxwhen callingrename_unitsandflatten_registersImplement
dagger()andtranspose()forCustomGate.Use
ClExprOpby default when converting from QASM.Extend
DecomposeClassicalExpto handleClExprOpas well asClassicalExpBox.Add convenience method
Circuit.add_clecpr_from_logicexp().Remove
OpType::Collapsefrom theGateSetPredicateofgen_auto_rebase_pass.
Deprecations:
Deprecate
ClassicalExpBoxand related methods, in favour ofClExprOp.Deprecate
GlobalisePhasedXpass and transform.
Fixes:
Fix
symbol_substitutionnot preserving opgroups.Remove hardware inefficient circuit construction in
_tk1_to_rzsxSupport converting conditional
RangePredicates to QASM.Fix
maxwidthparameter ofcircuit_from_qasm_strAdd
scratch_reg_resize_passtocircuit_from_qasm_strReject incomplete classical registers in pytket to qasm conversion
Add parameter
include_conditionalton_gates_of_typeto include conditional gates in the count
1.34.0 (October 2024)¶
Features:
Add new
ClExprOpoperation type as an alternative toClassicalExpBox; add option to use this when converting from QASM.Several updates to
GreedyPauliSimp:Support for mid-circuit measurements, resets, conditionals, and classical gates.
New parameters
max_lookaheadandmax_tqe_candidatesare added to limit the search space.New parameter
seedis added to support random sampling and tie breaking.New parameter
allow_zzphaseallows the algorithm to implement 2-qubit rotations using ZZPhase gates when deemed optimal.
Fixes:
Fix small default display screen for circuit renderer.
General:
Support Python 3.13.
Drop support for MacOS 12.
1.33.1 (October 2024)¶
Fixes:
Fix
GuidedPauliSimpfor circuits containingCircBoxwith classical wires.
1.33.0 (October 2024)¶
Features:
DecomposeTK2 pass and transform can now accept a float for ZZPhase_fidelity.
DecomposeTK2 pass now has a json representation when it contains no functions.
Add support for rendering multiple circuits at once.
Add option to save circuit renderer options to pytket config.
Make
CXMappingPassinto aStandardPass(with round-trip serialization and deserialization).
Fixes:
Fix QASM conversion of non-register-aligned
MultiBitOp.Fix
DecomposeClassicalExp()when target occurs in expression.Allow barriers and wire swaps in
DecomposeSwapsToCXs().
1.32.0 (September 2024)¶
Fix symbol substitution for classical operations.
Fix incorrect QASM conversion of conditional multi-line ops.
Fix incorrect order of
lowerandupperproperties ofRangePredicateOp.
1.31.1 (August 2024)¶
Fix issue with css styles in pytket-circuit-renderer 0.9.
1.31.0 (August 2024)¶
Remove unnecessary types-pkg_resources dependency due to package being yanked from pypi
add scratch_reg_resize_pass for decomposing temp bit register
Update to pytket-circuit-renderer 0.9.
Fixes: * Fix MultiplexedTensoredU2Box passing MultiplexedRotationBox an empty argument
1.30.0 (July 2024)¶
Support classical transforms and predicates, and QASM registers, with up to 64 bits. Add an attribute to the pytket module to assert this.
Add
PauliSynthStrat.Greedystrategy toTermSequenceBox.Update version requirements on dependencies, removing all upper bounds (in particular allowing compatibility with numpy 2.0).
Fix bug in
CliffordResynthesis()pass.Update
FlattenRelabelRegistersPassandremove_blank_wiresto only remove unused classical bits at the end of a registerRemove deprecated
SynthesiseOQCpass.Deprecate
SynthesiseUMDpass.Remove deprecated
ConstPredicate.
1.29.2 (June 2024)¶
Feature:
Revert keeping of blank classical wires when running
FlattenRelabelRegistersPass.
1.29.1 (June 2024)¶
Features:
Improve depth of circuit produced by
MultiplexedTensoredU2Box.Revert support of classical transforms and predicates, and QASM registers, with up to 64 bits. (Revert maximum width to 32.)
1.29.0 (June 2024)¶
Features:
Add
OpType.CnRxandOpType.CnRz.Add
AutoRebaseandAutoSquashpasses. Deprecateauto_rebase_passandauto_squash_pass.Add new parameter to
remove_blank_wiresto allow to keep empty classical bitsSupport classical transforms and predicates, and QASM registers, with up to 64 bits.
Fixes:
Allow barriers when dagger or transpose a circuit.
Keep blank classical wires when running
FlattenRelabelRegistersPassHandle Clifford-angle
NPhasedXgates in Clifford resynthesis.
1.28.0 (May 2024)¶
Features:
Update to pytket-circuit-renderer 0.8.
Add two new status values for circuits on backends: “CANCELLING” and “RETRYING”.
Use
larkpackage instead of deprecatedlark-parser.Add
GreedyPauliSimpoptimisation pass.Add
BitWiseOp.ZEROandBitWiseOp.ONEto allow construction of constant conditional expressions.Add target gateset
(GPI, GPI2, AAMS)toauto_rebase_pass.Add
RebaseToIonQtransform.
Fixes:
Escape underscores in qubit and bit names when converting to latex.
1.27.0 (April 2024)¶
General:
Remove deprecated
SynthesiseHQSpass.
Features:
Add
circuit_nameproperty toCircBox.Enable pickling of
Bitobjects.New optimisation
Transform.PushCliffordsThroughMeasures()and passCliffordPushThroughMeasuresthat optimises Clifford subcircuits before end of circuit measurement gates.Add
OpType.GPI,OpType.GPI2andOpType.AAMS.Allow construction of
SequencePasswithout predicate checks, by means of newstrictargument to the constructor (defaulting toTrue).
Fixes:
Correct handling of
CustomGatewhen converting from pytket to QASM.Ensure that ECR, CS and CSdg operations have gate definitions in QASM conversion.
Correct position of custom gate definitions needed for conditional operations in QASM conversion.
Fix
DelayMeasures()pass for circuits where bits are reused as measurement targets.When adding operations to a circuit, check for invalid wires before adding a vertex to the circuit.
Make
RemoveRedundanciespass removeOpType.Phasegates.Remove support for wasm functions with multiple return values.
Deprecations:
Deprecate
SynthesiseOQCpass.
1.26.0 (March 2024)¶
Features:
Allow
CircBoxcontaining non-default registers.Add new methods
Circuit.add_circbox_regwise()andCircuit.add_circbox_with_regmap()for adding aCircBoxto a circuit providing either an ordered sequence of registers or a mapping of registers from the box to the containing circuit.Add
CliffordResynthesispass to apply Clifford resynthesis (optionally with a user-defined resynthesis method) on all Clifford subcircuits.Add optional
min_pargument toBackendResult.get_probability_distribution()and to the constructor of aProbabilityDistribution, defaulting to zero. (Previously probabilities below 1e-10 were by default treated as zero.)Add python binding for
UnitaryRevTableau.Add
TermSequenceBox, for circuit synthesis of a series of Pauli Exponentials, where the ordering of terms can be changed.
Fixes:
Add missing op types to methods for converting Clifford circuits to unitary tableaux.
Require scipy >= 1.13 and quimb >= 1.8 for ZX module.
1.25.0 (February 2024)¶
Features:
Add
WasmFileHandler.bytecode()method to retrieve the WASM as bytecode.
Fixes:
Fix bug in
PauliExponentials()pass affecting circuits containingPhasedXgates containing Clifford angles.
1.24.0 (January 2024)¶
General:
Python 3.12 support added; 3.9 dropped.
Features:
Accept
OpType.Phasein circuits passed toZXGraphlikeOptimisation.
Fixes:
Handle a missing edge case in decomposition of single-qubit rotations.
Add missing
OpType.ConjugationBox.
1.23.0 (January 2024)¶
API changes:
Make the
architecturefield inBackendInfooptional.
Deprecations:
Deprecate
SynthesiseHQSpass.
Fixes:
Ensure that squashing long sequences of gates via unitary multiplication does not produce non-unitary results due to rounding errors.
Fix
PauliFrameRandomisation.sample_circuits.For
Circuitwith no 2-qubit gates,NoiseAwarePlacementnow assignsQubittoNodeinArchitecturewith lowest reported error rates.Fix invalid registers returned by
Circuit.q_registersandCircuit.c_registers.Fix regression (introduced in 1.22.0) in compilation performance with certain sequences of passes.
1.22.0 (November 2023)¶
Minor new features:
Add optional parameter to QASM conversion methods to set the maximum allowed width of classical registers (default 32).
New
OpType.CSandOpType.CSdg.New classes
ResourceBounds,ResourceDataandDummyBox, and methodCircuit.get_resources(), allowing reasoning about resource requirements on circuit templates.
Fixes:
When converting QASM expressions to
ClassicalExpBox, preserve the ordering of the bits in the expression in the resultingcmd.argsFix incorrect serialisation of
PauliExpPairBoxwhen the Pauli strings are of length 2.Fix incorrect controlled
ConjugationBoxhandling.
General:
Drop support for MacOS 11.
1.21.0 (October 2023)¶
Minor new features:
Add optional
strict_checkparameter toRepeatPassto force stopping when the circuit is unchanged.Add optional parameters
excluded_typesandexcluded_opgroupstoDecomposeBoxes.More efficient decomposition for quantum controlled
ConjugationBoxes.New
PassSelectorfor automatically compiling with the best pass from a listPauliExpBox,PauliExpPairBox, andPauliExpCommutingSetBoxare now decomposed into a singleConjugationBox.Make
SquashRzPhasedXpass always squash symbols.Add in-place symbol_substitution method for
CircBoxAdd rendering support for 0-valued control-type gates.
Typing improvements
Make
BitRegisterandQubitRegisteriterable
Fixes:
Handle symbolic angles in
ZZPhaseToRzpass.Bind
sympy.exp().Ensure determinate command order for circuits containing Phase operations.
1.20.1 (September 2023)¶
Fixes:
Fix
Op.get_unitary()runtime error for non gateOps.Fix
CliffordSimpslow runtime issue.Correct implementation of
free_symbols()andsymbol_substitution()forConjugationBox.Fix pytket-to-QASM conversion when individual bits of registers used in range predicates are later set.
1.20.0 (September 2023)¶
Fixes:
Mixed up function index in wasm file check
Fix handling of scratch bits in pytket-to-QASM conversion when the source bit for the scratch is overwritten before the scratch bit is used in a conditional.
Minor new features:
Circuit.add_conditional_barrierAdd
apply_clifford_basis_change_tensormethod
API changes:
barrier changed from MetaOp to be a BarrierOp
1.19.1 (September 2023)¶
Fixes:
Fix
RebaseCustom()rebasing ofTK2gates.Correct implementation of
symbol_substitution()for box types that cannot contain symbols.
1.19.0 (September 2023)¶
Major new features:
Add
ConjugationBoxto express circuits that follow the compute-action-uncompute pattern.Added typing support for compiled modules
Minor new features:
Implement equality checking for all boxes.
Add
Op.is_cliffordto python binding.Single-qubit squashing ignores chains of symbolic gates if squashing them would increase the overall complexity of the expressions. This behaviour can be overridden using the
always_squash_symbolsparameter toSquashCustom.Add
control_stateargument toQControlBox.Add
QubitPauliTensor(combiningQubitPauliStringwith a complex coefficient) to python binding. This is incorporated intoUnitaryTableaurow inspection for phase tracking.
Fixes:
Allow
BackendResultobjects containing no results.
1.18.0 (August 2023)¶
Minor new features:
Add circuit method
depth_2q.Add
allow_swapsparameter toauto_rebase_pass.
Fixes:
Fix slow
Circuit.get_statevector().
1.17.1 (July 2023)¶
General:
Fix issue with installing recent pytket versions on macos x86_64 in conda environments.
Minor new features:
New constructor for
ToffoliBoxthat allows switching between two decomposition strategies:ToffoliBoxSynthStrat.MatchingandToffoliBoxSynthStrat.Cycle.Prefer
ZZPhasetoCXorZZMaxwhen usingauto_rebase_pass().
1.17.0 (July 2023)¶
Minor new features:
Circuit.get_unitary()andCircuit.get_statevector()now work for circuits containing boxes.New Box type
PauliExpPairBox.New Box type
PauliExpCommutingSetBox.New pass
PauliExponentialsthat rewrites a circuit to a sequence ofPauliExpBox,PauliExpPairBox,PauliExpCommutingSetBoxand a Clifford circuit.
1.16.0 (June 2023)¶
Minor new features:
Support
allow_swapsparameter forPeepholeOptimise2Q.Add missing add box methods that accept qubit indices as arguments.
Add
with_initial_resetparameter toStatePreparationBoxto permit state preparation starting from unknown state.New method
utils.stats.gate_countsto count gates of all types.
Fixes:
Fix
FlattenRegistersnot updatingClassicalExpBox.Fix missing default argument value to
FlattenRelabelRegistersPass.Fix
auto_rebase_passrebasing via TK2 even if CX is the only target 2q gate.Fix
QControlBoxnot identifying SU(2) unitaries.
1.15.0 (May 2023)¶
Major new features:
Add new
MultiplexedTensoredU2Boxthat synthesises multiplexed tensor product of U2 gates.
Minor new features:
Add new
MaxNClRegPredicatethat checks that there are at most n classical registers in the circuit.Allow barriers in
QControlBoxes. Barriers are left in place.Add
Circuit.TK1andCircuit.TK2methods that takeQubitarguments.Expose
CircuitRendererinstance so users can set their own default options.QASM to circuit converters now recognise
RxxyyzzasOpType.TK2. Circuit to QASM converters with the “hqslib1” header now mapOpType.TK2toRxxyyzz.Add new transform
round_anglesand passRoundAnglesto remove angles below a threshold and/or round angles to a dyadic fraction of pi throughout a circuit.
Fixes:
Fix bug in
get_operator_expectation_value()computation when operator includesPauli.Iterms.Fix bug in routing code occurring in
Circuitswith qubit wires with no operations and some (other or same) qubits pre-labelled as “Node” from theArchitecturebeing routed to.
1.14.0 (April 2023)¶
Major new features:
Support for ARM Linux platforms.
Updated implementation of
ToffoliBoxutilising multiplexors for improved decomposition.Add new
DiagonalBoxthat synthesises a diagonal unitary matrix into a sequence of multiplexed-Rz gates.
1.13.2 (March 2023)¶
Minor new features:
Update to networkx 3.
Add “label” argument to
SquareGrid,RingArchandFullyConnectedArchitectureclasses to give custom name to constructedNode.Add
FlattenRelabelRegistersPassto remove empty quantum wires and relabel all qubits to a default register named after a passed label.
Fixes:
Multiply symbolic parameters in auto-generated gate definitions by “/pi” in
circuit_to_qasm_io
1.13.1 (March 2023)¶
Fixes:
Throw error rather than abort when trying to add qubit or bit with existing name.
1.13.0 (March 2023)¶
Major new features:
New
StatePreparationBoxto prepare arbitrary quantum states.New WasmWire interface to keep all wasm operation in the initial order
New
ZXGraphlikeOptimisationcompilation pass for optimising the circuit by simplifying in ZX calculus and extracting back out
Minor new features:
New
CommutableMeasuresPredicatepredicate, added as precondition to theDelayMeasurespass.Added an
allow_partialparameter to theDelayMeasurespass to delay the measurements as much as possible when they cannot be fully delayed to the end.Update to
pytket-circuit-renderer0.5.Support
allow_swapsparameter forFullPeepholeOptimiseeven when targetingOpType.TK2.
Fixes:
DelayMeasurespass now correctly handles circuits withCircBoxes.get_op_mapin multiplexor boxes return unhashable python dictionaries.
1.11.1 (January 2023)¶
General:
Support for MacOS >= 11.0 on both x86_64 and arm64.
1.11.0 (January 2023)¶
Major new features:
New boxes to implement multiplexor gates (i.e. uniformly controlled operations):
MultiplexorBox,MultiplexedRotationBoxandMultiplexedU2Box.
General:
Python 3.11 support added; 3.8 dropped.
Minor new features:
Circuit methods
qubit_readoutandqubit_to_bit_mapnow ignore barriers.New pass
RemoveImplicitQubitPermutation.PauliSimppass accepts circuits containing implicit wire swaps.
Fixes:
MultiGateReorderRoutingMethodraising unknown edge missing error.LexiRouteLabellingMethodhitting assertion during dynamic qubit allocation.PauliSimppass preserves circuit name.
1.10.0 (December 2022)¶
Minor new features:
Add support for PhasedX gates in Pauli graph synthesis.
Fixes:
Handle 0-qubit operations in connectivity check.
Fix handling of Tdg, CY, ZZMax and Clifford-angle YYPhase gates in Pauli graph synthesis.
Disallow conversion to QASM of operations conditioned on strict subregisters larger than one bit, or reordered registers.
1.9.1 (December 2022)¶
Minor new features:
New
view_browserfunction for opening a browser with circuit render.
Fixes:
Warn rather than abort when significant rounding errors are detected in TK2-to-CX rebase.
Fix incorrect QASM output for
OpType.CopyBits.Fix incorrect QASM read in
OpType.ZZPhase.
1.9.0 (November 2022)¶
Fixes:
Rebase and synthesis passes now respect conditional phase, by adding conditional
OpType.Phaseoperations to the rebased circuit. Any code that relies on the circuit having gates only in the specified gate set should be updated to handleOpType.Phaseas well when conditional operations are present.A bug where the sequence of
RoutingMethodused inDefaultMappingPasscould add a cycle to theCircuitDAG has been fixed.Fix support for ECR gate in QASM converters.
API changes:
The default value of
optimisation_levelinBackendmethods that have this parameter (such asget_compiled_circuit()) has been changed from 1 to 2.
Minor new features:
Added shortcuts for adding
U1,U2,U3,TK1,TK2,CU1,CU3,ISWAP,PhasedISWAP,ESWAP,PhasedX,FSim,SycamoreandISWAPMaxgates to apytketCircuit.New
Circuitmethodsn_1qb_gates,n_2qb_gates,n_nqb_gates.New
EmpriricalDistributionandProbabilityDistributionutility classes for manipulating distributions, and methods to extract them fromBackendResultobjects.
1.8.1 (November 2022)¶
Fixes:
Incorrect qasm filtering.
Make graph placement work with multi-qubit barriers.
1.8.0 (November 2022)¶
Minor new features:
New
OpType::Phase0-qubit gate affecting global phase.New
CnXPairwiseDecompositionpass.Allow
QControlBoxwith implicit wire swaps to be decomposed.New
Circuitmethodsreplace_SWAPsandreplace_implicit_wire_swaps.
Fixes:
Remove unused
tk_SCRATCH_BITregisters from qasm output.Update the
LogicExpin everyClassicalExpBoxwhen callingCircuit.rename_units.Fix the json schema for
LinePlacementFix issue with
QControlBoxthrowing error during decomposition if the controlled circuit contains identity gates.Fix issue with
KAKDecompositionraising exception if the circuit containsClassicalExpBox.
1.7.3 (October 2022)¶
Minor new features:
New
Circuitpropertiescreated_qubitsanddiscarded_qubits.Barrier operations inside QASM custom gates are now accepted.
Added wasm functions will be checked if the signatures are supported
Fixes:
Circuit equality check now takes into account qubit creations and qubit discards.
Created qubits and discarded qubits are now shown in
Circuit.__repr__andCircuit.to_dict.Allow symbolic operations in initial simplification.
Fix the json schema for compiler passes.
Fix
SquashRzPhasedXso it now preserves phase.
1.6.1 (September 2022)¶
Minor new features:
New
OpType.CnYandOpType.CnZ.Update
DecomposeArbitrarilyControlledGatespass to decomposeCnX,CnY, andCnZgates.
Fixes:
Circuit.get_unitary()andCircuit.get_statevector()now throw an error when the circuit contains measurements.Fix critical issue with compilation of circuits containing conditional gates.
1.6.0 (September 2022)¶
New
ToffoliBoxfor constructing circuits that implement permutations of basis states.
1.5.2 (August 2022)¶
Minor new features:
Prefer
ZZPhaseinDecomposeTK2if it results in the same fidelity but fewer two-qubit gates.Add
SquashRzPhasedXpass to squash single qubit gates intoRzandPhasedXgates while trying to commuteRzs to the back.
1.5.1 (August 2022)¶
Minor new features:
Improve
FullPeepholeOptimiseperformance.
Fixes:
Squash two-qubit circuits properly in
FullPeepholeOptimisefor parametertarget_2qb_gate=OpType.TK2.Floating point inaccuracies in
NormalisedTK2Predicate.
1.5.0 (August 2022)¶
Minor new features:
Add support for TK2 gate in
KAKDecomposition.Transform.ThreeQubitSquash()can now use TK2 gates as an alternative to CX gates.Unitary3qBox.get_circuit()decomposes the circuit using (at most 15) TK2 gates.New
CustomPass()accepting a user-supplied circuit transformation function.measure_registernow allows using an existing classical registerProvide an additional
RebaseCustomconstructor that takes a TK2-replacement instead of a CX-replacement function.New
int_dist_from_statefunction inpytket.utils.resultsto convert a statevector to the probability distribution over its indices.The precondition for
CliffordSimpandKAKDecompositionhas been relaxed to accept classical controlled operations.ThreeQubitSquashandFullPeepholeOptimisenow accept classical operations.Improve
QControlBoxdecomposition.New
allow_swapsflag inKAKDecompositionandDecomposeTK2to decompose two-qubit operations up to implicit wire swaps.Add support for TK2 gate in
FullPeepholeOptimise.
Fixes:
FullPeepholeOptimisefailure on conditional circuits.
1.4.3 (July 2022)¶
Fixes:
Further relax assertion in
replace_TK2_2CX.
1.4.2 (July 2022)¶
Fixes:
Relax assertion in replace_TK2_2CX to avoid crash due to rounding errors.
1.4.1 (July 2022)¶
Minor new features:
New
NormalisedTK2Predicatepredicate andNormaliseTK2pass.New
ZZPhaseToRzpass.Circuit to QASM converters with the “hqslib1” header now fix ZZPhase angles to be between -1 and 1 half-turns.
Fixes:
Ensure TK2 angles are normalised before decomposing TK2 gates in passes.
1.3.0 (June 2022)¶
Minor new features:
New
circuit_to_zxfunction to convertCircuittoZXDiagram, andto_circuitto extract from a unitary diagram.New
to_graphviz_strmethod forZXDiagramto generate a source string that can be rendered by thegraphvizpackage.New pass and transform
DecomposeTK2to decompose TK2 gates using the approximate KAK decomposition.Pass and transform
GlobalisePhasedXuse fewer Rz rotations.Improved decomposition for CnX gates.
Fixes:
Fix serialization of
BackendInfoforRingArchandFullyConnectedarchitectures.
1.2.2 (May 2022)¶
Minor new features:
The
GlobalisePhasedXtransform and homonymous pass take a new optionalsquashparameter.squash=true(default) implements a new algorithm that significantly reduces the number ofNPhasedXgates synthesised.New
DecomposeNPhasedXtransform and pass replaces allNPhasedXgates with single-qubitPhasedXgates.Extend range of Clifford operations recognized by
CliffordCircuitPredicate.New
circuit_from_qasm_wasmfunction to parse QASM files containing external WASM calls.Faster QASM parsing, capable of parsing extended grammar.
1.2.1 (May 2022)¶
Minor new features:
Added explicit constructors for various Python classes.
New
measure_registermethod for measuring registers.Added
OpType.TK2, a three-parameter two-qubit gate.New pass
SynthesiseTKand transformOptimiseStandardto synthesize TK2 gates.Add
Optype.WASM, adding a classical wasm function call to the circuitAdd optype for existing PhasePolyBox
OpType.PhasePolyBox
1.1.0 (April 2022)¶
Minor new features:
new additional constructor for
PhasePolyBoxfrom a givenCircuitNew compilation pass
ComposePhasePolyBoxesfor generating PhasePolyBoxes in a given circuitAdd JSON serialization methods for
Predicate,MeasurementSetupandMeasurementBitMap.Add
NoBarriersPredicate.
Fixes:
Fix qubit order in
QubitPauliOperator.to_sparse_matrix().Fix issue with “nan” values appearing after symbolic substitution following compilation of some symbolic circuits.
PhasePolyBoxconstructor is not accepting invalid boxes anymore
1.0.1 (March 2022)¶
Fixes:
Fix problem with unassigned ancilla qubits during mapping.
1.0.0 (March 2022)¶
API changes:
Rebase<Target>andSquashHQSmethods are removed. Specifically:RebaseHQSRebaseProjectQRebasePyZXRebaseQuilRebaseUMDRebaseUFRRebaseOQC
The deprecated
QubitPauliString.to_dictmethod is removed. (Use themapproperty instead.)The deprecated
Backend.compile_circuitmethod is removed. (Useget_compiled_circuitinstead.)The
routingmodule is removed.Placement,LinePlacement,GraphPlacementandNoiseAwarePlacementare now imported from theplacementmodule.Architecture,SquareGrid,RingArchandFullyConnectedare now imported from thearchitecturemodule.Methods for mapping logical to physical circuits are now available in the
mappingmodule, with a new API and new functionality.The keyword parameter and property
defis now calleddefinitioninCircuit.add_custom_gateandCustomGateDef.RebaseCustomtakes one allowed gateset parameter rather than separate single qubit and multiqubit gatesets.The
Backend.characterisationproperty is removed. (UseBackend.backend_infoinstead.)The
QubitPauliOperator.from_OpenFermionandQubitPauliOperator.to_OpenFermionmethods are removed.The
pytket.programmodule is removed.The
pytket.telemetrymodule is removed.
Major new features:
New methods for mapping logical to physical circuits for some
Architecture. The new method will use a list of user-given methods, each of them suitable only for a specific set of subcircuits. Users can add their own methods if they want to. All compiler passes in pytket are updated to use the new methods. The methods already given by pytket areLexiRouteRoutingMethod,LexiLabellingMethod,MultiGateReorderRoutingMethod,AASRouteRoutingMethod,BoxDecompositionRoutingMethod, andAASLabellingMethod.
Minor new features:
Add
delay_measuresoption toDefaultMappingPass.New
pytket.passes.auto_rebase_passandpytket.passes.auto_squash_passwhich attempt to construct rebase and squash passess given a target gate set from known decompositions.Add
get_c_register,get_q_register,c_registersandq_registersmethods toCircuit.New
pytket.passes.NaivePlacementPasswhich completes a basic relabelling of all Circuit Qubit not labelled as some Architecture Node to any available Architecture NodeAdd
opgroupsproperty toCircuit.Architecturehas newvalid_operationmethod which returns true if passed UnitIDs that respect architecture constraints.CircuitStatushas several new optional properties such as time-stamps associated with status changes, queue position or detailed error information.
Fixes:
ConnectivityPredicate.implies()checks for existence of isolated nodes as well as edges in second architecture.
0.19.2 (February 2022)¶
Fixes:
Fix issue with jinja2 by updating dependency.
0.19.1 (February 2022)¶
Fixes:
Fix regression in
Circuit.symbol_substitutioncausing incorrect values to be substituted in some cases.
0.19.0 (February 2022)¶
Major new features:
New box types for Clifford tableaux.
Minor new features:
Improve
CnXgate decomposition for n=5,6,7.Add
rebase_passmethod toBackend.Add
is_clifford_typemethod toOp.
General:
Python 3.10 support added; 3.7 dropped.
0.18.0 (January 2022)¶
Minor new features:
Add
NodeGraphas abstract base class for device connectivity graphs.Improved
CnXgate decomposition.Squashing of adjacent
PhasedXoperations.Add pytket
__version__attribute.
Fixes:
Fix wire-swap handling in
PhasePolyBoxcreation.
0.17.0 (November 2021)¶
Major new features:
New
pytket.zxmodule for manipulating ZX diagrams.
Minor new features:
New properties: :py:meth:
~.Op.daggerand :py:meth:~.Op.transpose.New methods: :py:meth:
~.Placement.to_dictand :py:meth:~.Placement.from_dict.New
NPhasedXOpType.New
GlobalPhasedXPredicateandGlobalisePhasedX(transform and pass).
Fixes:
Fixed incorrect decomposition of
QControlBoxwith more than one control acting on operation with global phase.
0.16.0 (October 2021)¶
Minor new features:
New :py:meth:
~.Backend.run_circuitand :py:meth:~.Backend.run_circuitsmethods.New
allow_swapsparameter toFullPeepholeOptimisepass controlling whether to allow introduction of implicit wire swaps (defaulting toTrueto match existing behaviour).New
Backend.available_devicesmethod to retrieve available devices as a list ofBackendInfoobjects.
Fixes:
Fixed bug in daggering of TK1 gates.
API changes:
The deprecated
get_shots,get_countsandget_statemethods of theBackendclass are removed. Userun_circuitsand the homonym methods of theBackendResultclass instead.
0.15.0 (September 2021)¶
Minor new features:
Passes
PauliSimp,PauliSquashandGuidedPauliSimpcan now decompose to three-qubitXXPhase3gates using the newCXConfigType.MultiQGateconfig type.New method
compilation_pass_from_scriptto construct a compilation pass from a simple textual specification.New transform
RebaseToTketand new passSquashToTK1.
API changes:
The deprecated transform
RebaseToQiskitand the deprecated passesDecomposeMultiQubitsIBM,RebaseIBM,SynthesiseIBMandUSquashIBMare removed.The transform
OptimisePostRoutingtransforms to TK1 instead of U gates.
0.14.0 (September 2021)¶
Major new features:
New
Circuit.add_assertionmethod for applying quantum assertions to circuits.Two new box types
StabiliserAssertionBoxandProjectorAssertionBox.New
BackendResult.get_debug_infomethod for summarising assertion results.New
PauliStabiliserclass.Native support for MacOS running on M1 (arm64) architecture (Python 3.8 and 3.9 only).
New compilerpass for architecture aware synthesis of phase polynomials
AASRouting.
Minor new features:
Update circuit display to include extra gate information and use ZX-style colours.
BackendInfo,ArchitectureandNodeare now JSON-serializable.QubitPauliOperatorandQubitPauliStringare now JSON-serializable.Equality checks on
Architectureonly consider node IDs and coupling.New pass
DecomposeMultiQubitsCX, equivalent toDecomposeMultiQubitsIBM(which is deprecated).New pass
DecomposeSingleQubitsTK1.New pass
SynthesiseTket.New
XXPhase3OpType.
API changes:
The transforms
ReduceSingles,OptimisePauliGadgetsandOptimisePhaseGadgets, and the passesCliffordSimp,PeepholeOptimise2Q,FullPeepholeOptimiseandOptimisePhaseGadgets, produce TK1 instead of U gates.The passes
O2Pass,O1PassandDecomposeSingleQubitsIBMare removed (useFullPeepholeOptimiseandSynthesiseTketinstead for the first two).QubitPauliOperator.to_dict()(deprecated) is replaced by the propertyQubitPauliOperator.map.
Deprecations:
The passes`DecomposeMultiQubitsIBM` (equivalent to
DecomposeMultiQubitsCX),DecomposeSingleQubitsIBM,RebaseToQiskit,SynthesiseIBM,RebaseIBMandUSquashIBMare deprecated.
0.13.0 (July 2021)¶
Major new features:
New circuit functions, e.g.
get_unitary, calculate numerical unitaries and statevectors from non-symbolic circuits.New serialization methods for compilation passes.
Minor new features:
Additions to
BackendInfo.More reliable handling of timeouts for placement.
User-configurable placement timeout.
Fixes:
Fixed occasional segfault in placement pass.
Daggering or transposing circuits with CnX fixed to have valid operation arguments.
API changes:
Backend.compile_circuitis deprecated,get_compiled_circuit()andget_compiled_circuits()(for a sequence of circuits) replace it, do not act in place, returning the compiled circuit(s). In place compilation can still be achieved withbackend.default_compilation_pass().apply(circ)
0.12.0 (June 2021)¶
Major new features:
New
ThreeQubitSquashcompilation pass to simplify long three-qubit subcircuits.Three-qubit squash included in
FullPeepholeOptimisepass; newPeepholeOptimise2Qpass corresponds to formerFullPeepholeOptimise.
Minor new features:
add_phase now returns the circuit
Option for
process_circuitsto take a list ofn_shots.Deviceclass removed, replaced withBackendInfo.QubitErrorContainerremoved.RoutingMethodremoved.
Bugfixes and improvements:
Barriers no longer count towards circuit depth.
Squashing of rotations with symbolic angles now performs more simplification, leading to much shorter expressions, and works around a bug in symengine that caused invalid simplification of some expressions.
0.11.0 (May 2021)¶
Major new features:
New
pytket.utils.symbolicmodule to generate symbolic unitaries and statevectors from symbolic circuits.New box type
Unitary3qBoximplementing arbitrary 3-qubit unitaries.
Minor new features:
New
ECROpType.New
SynthesiseOQCpass.New
RebaseOQCpass.
0.10.1 (May 2021)¶
Minor new features:
New
PauliSquashpass combiningPauliSimpwithFullPeepholeOptimise.New options for
SimplifyInitial.
0.10.0 (April 2021)¶
Major new features:
HTML rendering of Circuit in Jupyter notebooks,
pytket.circuit.display.render_circuit_jupyter.
Minor new features:
EulerAngleReduction pass uses multi-qubit commutativity to reduce rotation triplets to pairs
EulerAngleReduction takes additional strictness parameter
RemoveBarriers pass added.
API changes:
Remove architecture classes
TriangularGrid,HexagonalGridandCyclicButterfly
Fixes:
Several small bugfixes.
0.9.0 (March 2021)¶
Major new features:
Contextual optimizations based on knowledge of state.
Minor new features:
New box type
PhasePolyBox.Refactored PytketConfig.
pytket-qiskit,pytket-honeywell,pytket-aqt,pytket-ionq,pytket-qsharpandpytket-braketnow all have authentication or workspace parameters that can be set in config files.
Fixes:
Several small bugfixes.
0.8.0 (March 2021)¶
API changes:
All extension modules moved to
pytket.extensionsnamespace.
Compatible extension versions:
pytket-aqt: 0.5.0pytket-braket: 0.4.0pytket-cirq: 0.8.0pytket-honeywell: 0.7.0pytket-ionq: 0.3.0pytket-projectq: 0.7.0pytket-pyquil: 0.8.0pytket-pyzx: 0.7.0pytket-qiskit: 0.8.0pytket-qsharp: 0.9.0pytket-qulacs: 0.5.0
0.7.2 (February 2021)¶
Major new features:
Support for Python 3.9, dropping 3.6.
Fixes:
Fix memory corruption with symbolic circuits on Windows.
0.7.1 (February 2021)¶
Minor new features:
Option to store encrypted Honeywell password (not recommended).
Automatic retries for Honeywell result retrieval.
Fixes:
Drop dependency on OpenFermion (conversions work with separate installation).
Fix reset breaking
AerBackend_process_model.Fix
IBMQEmulatorBackendnot being initialised with noise model.
Compatible extension versions:
pytket-aqt: 0.4.0pytket-braket: 0.3.0pytket-cirq: 0.7.0pytket-honeywell: 0.6.1pytket-ionq: 0.2.0pytket-projectq: 0.6.0pytket-pyquil: 0.7.0pytket-pyzx: 0.6.0pytket-qiskit: 0.7.1pytket-qsharp: 0.8.2pytket-qulacs: 0.4.0
0.7.0 (February 2021)¶
Major new features:
Substitution of named operations with other operations, boxes or circuits.
New ability to condition operations on compound (AND, OR, XOR) operations on
BitandBitRegister, which can be compiled withDecomposeClassicalExpand executed withHoneywellBackend.
Minor new features:
Direct creation of operator from gate type and parameters (
Op.create).New methods
Circuit.ops_of_typeandCircuit.commands_of_type.KAKDecompositionnow accepts the estimated CX gate fidelity as parameter and performs an approximate decomposition in that case.Significant optimisation of SPAM correction methods.
New GraphColourMethod.Exhaustive added to gen_term_sequence_circuit for partitioning Pauli tensors.
New OpTypes
CRxandCRy.New OpTypes
SX,SXdg,CSX,CSXdg,CVandCVdg.New
BasePass.get_config()method, which returns the name and parameters for a pass.New
SequencePass.get_sequence()method, which returns the sequence of passes.New
get_pass()method forRepeatPass,RepeatWithMetricPass,RepeatUntilSatisfiedPass.New
get_predicate()method forRepeatUntilSatisfiedPass.New
get_metric()method forRepeatWithMetricPass.New
backendparameter toSpamCorrecterconstructor.
New supported backends:
Support for Azure Quantum backends in the
pytket-qsharpextension.
New features in extensions:
Conversion of
Resetand custom gates inpytket-qiskit.Support for mid-circuit measurements on IBMQ premium devices via
pytket-qiskit.
API changes:
Removal of “minimise” method for SPAM correction
Compatible extension versions:
pytket-aqt: 0.4.0pytket-braket: 0.3.0pytket-cirq: 0.7.0pytket-honeywell: 0.6.0pytket-ionq: 0.2.0pytket-projectq: 0.6.0pytket-pyquil: 0.7.0pytket-pyzx: 0.6.0pytket-qiskit: 0.7.0pytket-qsharp: 0.8.0pytket-qulacs: 0.4.0
0.6.1 (October 2020)¶
Minor New Features:
New pass generator
RenameQubitsPass
New Supported Backends:
Devices from IonQ (via separate
pytket-ionqmodule)
0.6.0 (September 2020)¶
Major New Features:
Windows support
Phase-aware circuits
New box type for applying quantum controls to arbitrary quantum operations
New
tailoringmodule containing tools for noise tailoringCircuit transpose method
Optimization levels for default backend compilation passes
New serialization methods for circuits and results
New online user manual
Minor New Features:
New gate type
OpType.PhasedISWAPExpectations of non-Hermitian operators (when supported by backend)
Greater control over graph-colouring algorithms
Improved Clifford simplification
Retrieval of gate set from
GateSetPredicateNew
Backend.cancelmethodNew
nameattribute for circuits.Backends can be wrapped as Qiskit backends for use in Qiskit software.
IBMQEmulatorBackend added to emulate IBMQBackend behaviour, with simulator execution.
New supported backends:
Devices and simulators from Amazon Braket (via separate
pytket-braketmodule)Qulacs simulator (via separate
pytket-qulacsmodule)
API changes:
Retrieval of shots, counts, state and unitary directly from
ResultHandleis no longer supported: either useBackend.get_shots(Circuit)orBackend.get_result(ResultHandle).get_shots()(etc).Backend.default_compilation_passis no longer a property but a method.QubitMapis replaced by a Python dictionary.Bit ordering of
condition_valuefor conditionals now follows QASM convention (opposite to before, now[0, 1]corresponds to value 2).
Bugfixes:
Various small bug fixes
Known issues:
There is an issue with the use of symbolic circuits on Windows, causing memory access violations in some circumstances.
Compatible extension versions:
pytket-aqt: 0.3.0pytket-braket: 0.2.0pytket-cirq: 0.5.0pytket-honeywell: 0.4.0pytket-projectq: 0.5.0pytket-pyquil: 0.6.0pytket-pyzx: 0.5.0pytket-qiskit: 0.6.0pytket-qsharp: 0.6.0pytket-qulacs: 0.3.0
0.5.7 (August 2020)¶
Number of bugs fixed including:
OpType.Resetadded to QASM conversionBugfix for
CnXwith n=4, n=5Correct Node IDS for
FullyConnectedArchitecture.
0.5.5 (June 2020)¶
Major New Features:
Redesigned algorithm for
CliffordSimp, improving speed and identifying more cases for optimisation
Minor New Features:
New gates added:
OpType.SycamoreandOpType.ISWAPMaxNew class
Graphfor visualising circuit structure
Updates:
First parameter of
OpType.FSimgate corrected to have range \([0, 2\pi)\)New
QubitPauliOperatorand related classes replace use of OpenFermion’sQubitOperatorSignificant optimisation of
pauli_tensor_matrixandoperator_matrix
0.5.4 (May 2020)¶
Minor New Features:
Method to generate a circuit from a sequence of
QubitOperatorterms
Updates:
Rename
measurementmodule topartition
Bugfixes:
Fix invalid cancellation of certain controlled rotations
0.5.2 (April 2020)¶
Major New Features:
Routing, gate decomposition, and basic optimisations can work around conditional gates and mid-circuit measurements
New high-level optimisation routine for Trotterised Hamiltonians
Measurement reduction via Pauli term diagonalisation
Inspection of the status of circuit execution on asynchronous backends
Error mitigation facilities via the SPAM method
Introduction of the
Programclass for specifying routines with classical control flow
Minor New Features:
Improved error messages when circuits cannot be run on a backend
Generalised
depth_by_type()to allow sets of gate typesA selection of optimisation passes are parameterised by pattern for decomposing into CXs
New
Architecturesubclass,FullyConnected, addedNew gates added:
OpType.ESWAPandOpType.FSimAdditional utility methods for permuting qubits of statevectors
Inspection of any implicit permutations within the
Circuitdag structureInspection of free symbols in a circuit
Inspection of detailed gate errors from a
DeviceAdditional methods for parsing/producing QASM through strings and streams
Ability to enable internal logs
Updates:
Cleaner addition of conditions to gates via kwargs
UnitIDobjects are specialised into eitherQubitorBitobjects, with more natural constructorsRenamed many passes to give a uniform naming convention
Getters on
Architecture,Device,GateError, andQubitErrorContainermade into readonly propertiesBackend-specific runtime arguments (e.g. simulator seeds) are now passed in via kwargs
Stability improvements and bug fixes
Updated documentation and additional examples
Stricter namespacing (most classes must be imported from submodules rather than top level)
Python 3.8 support
Deprecations:
Calling
get_counts,get_shotsorget_stateon aBackendobject with aCircuitargument is deprecated in favour ofResultHandle.
New supported backends:
AQT devices and simulators (via separate
pytket_aqtmodule)Honeywell devices (via separate
pytket_honeywellmodule)Q# simulators and resource estimator (via separate
pytket_qsharpmodule)
0.4.1 (December 2019)¶
New Features:
New classes for placement of logical qubits from
Circuitto physical qubits fromDeviceorArchitectureData from backends can be returned in either increasing lexicographical order of (qu)bit identifiers (the familiar ordering used in most textbooks) or decreasing order (popular with other quantum software platforms) using the
BasisOrderenum
Updates:
Updated documentation and additional examples
OptimiseCliffordsZX pass removed, FullPeepholeOptimise pass added
New architectures added, including
SquareGrid,HexagonalGrid,RingArch,TriangularGridandCyclicButterflyDevice information from
Devicecan now be returnedStability improvements and bug fixes
0.4.0 (November 2019)¶
New Features:
Contractural compilation passes with guarantees on how they transform circuits that satisfy their preconditions. This provides a uniform interface for optimisations, routing, and other stages of compilation
New “Box” gate types for encapsulating high-level structures (arbitrary subcircuits, parameterised composite gate definitions, unitaries, Pauli operators)
Simpler and more flexible structure for registers and names of qubits/bits, allowing for non-contiguous and multi-dimensional indices (referring to individual units, linear registers, grids, etc.)
Latex diagram output using Quantikz
The
Deviceclass to build on top ofArchitecturewith error and timing informationInitial and final maps tracked throughout the entire compilation procedure using the
CompilationUnitwrapperImport circuits from Quipper source files
Utility methods for processing data from Backends
Updates:
All Backends refactored for more consistent interfaces, separation of data processing, and introducing batch circuit processing when possible
Routing improved to use distributed CX (BRIDGE) gates in addition to SWAP insertion
Cost function for noise-aware allocation of qubits improved to consider more sources of noise
Architectureobjects can be specified with arbitrary node names, using the sameUnitIDobjects and qubits/bitsRemoved the
PhysicalCircuitclass in preference of just usingCircuitobjectsGeneralised and sped up the gate commutation pass
Optimisation for redundant gate removal now removes diagonal gates before measurements
Support for custom gate definitions in QASM input
Support for a greater fragment of sympy expressions in gate parameters
Stability improvements and bug fixes
Updated documentation and additional examples
0.3.0 (August 2019)¶
New Features:
More options for circuit routing, including noise-aware allocation of qubits
Basic support for generating circuits with classical conditions and multiple registers
ForestBackend for running circuits on Rigett’s QVM simulators and QCS
AerUnitaryBackend for inspecting the full unitary of a circuit
Chaining gate commands
Primitive QASM<->Circuit (import and export)
Updates:
Simplified conversions for pytket_qiskit, going straight to/from QuantumCircuit rather than DAGCircuit
CSWAP gate added
0.2.3 (July 2019)¶
New Features:
Decomposition
Transformfor controlled gates
Updates:
Exposed additional gate types into Pytket
Fixed bug in
add_circuitFixed routing bug
Made
runbehaviour more sensible for backends
0.2.2 (June 2019)¶
Updates:
Minor bug fixes, examples and documentation
0.2.1 (June 2019)¶
Updates:
Extra support for appending Circuits from Matrices and Exponents
More docs and examples
Fixed bugs in backends
0.2.0 (June 2019)¶
New Features:
Support for circuits and simulation using ProjectQ (0.4.2)
Support for conversion to and from PyZX (https://github.com/Quantomatic/pyzx)
Interface to many new optimisation passes, allowing for custom passes
Circuit compilation using symbolic parameters
New interface to routing
Enabled noise modeling in the AerBackend module
Updates:
Qiskit support updated for Qiskit 0.10.1 and Qiskit Chemistry 0.5
Pytket Chemistry module has been removed, to be part of the separate Eumen package
Bug fixes and performance improvements to routing
0.1.6 (April 2019)¶
Updates:
Routing can return SWAP gates rather than decomposing to CNOTs
Decomposition and routing bug fixes
0.1.5 (April 2019)¶
New Features:
Enabled conversions from 4x4 unitary matrices to 2 qubit circuit
0.1.4 (April 2019)¶
Updates:
Bug fix patch for routing and performance improvements
0.1.3 (March 2019)¶
Updates:
Qiskit support updated for Terra 0.7.3, Aqua 0.4.1, and Chemistry 0.4.2
Bug fixes in routing
0.1.2 (February 2019)¶
New Features:
Support for circuits from Rigetti pyQuil (2.3)
New interface for constructing and analysing circuits in pytket directly
Named classical registers for measurements
Updates:
Documentation and tutorial improvements
Bug fixes in routing and optimisations
Minor API changes for notational consistency
0.1.0 (December 2018)¶
New Features:
Support for circuits and architectures from IBM Qiskit (0.7)
pytket.qiskit.TketPassallows pytket to be plugged in to the Qiskit compilation stack to take advantage of tket’s routing and optimisationsNew Chemistry package featuring an implementation of the Quantum Subspace Expansion to work within or alongside Qiskit Aqua (0.4)
Optimisation passes introduced for powerful circuit rewriting before routing, and safe rewriting after routing
Updates:
Cirq functionality supports Cirq 0.4
Refactoring into modules