Skip to content

Releases: BQSKit/bqskit

1.2.0

13 Sep 18:51
5fadf75
Compare
Choose a tag to compare

Notable Changes

Improved BQSKit Runtime

The BQSKit Runtime has been improved for greater robustness, ease of use, and new features. Object and path imports are now managed between the system, allowing users to write one file with custom gate and pass definitions and compilations. Previously, definitions had to be separated.

For more info see #237.

Initial Distributed Quantum Support

You can now describe remote edges in the CouplingGraph object to accommodate distributed quantum computing (DQC) machine models. It allows custom edge weights on the graph to signify remote connections. Additionally, several DQC utility functions are provided for the CouplingGraph.

Mid-Circuit Measurement and Reset Support

Support for mid-circuit measurements and reset operations have been added to BQSKit. QASM files containing these operations can now be read and written. Partitioning workflows will intelligently work around these non-unitary operations.

Autogenerated: What's Changed

New Contributors

Full Changelog: 1.1.2...1.2.0

1.1.2

15 Apr 14:40
Compare
Choose a tag to compare

Patch release fixing qiskit breaking changes.

Full Changelog: 1.1.1...1.1.2

1.1.1

11 Dec 17:56
1ee59f1
Compare
Choose a tag to compare

Pam Verification and Improvements

  • Compiling with optimization level four and an upper bound error check now works
  • Added build_seqpam_mapping_optimization_workflow for easy construction of pam workflows
  • Fixed PAM not working with arbitrary gatesets

Added

  • Official Python 3.12 Support
  • Added pre-built model example usage to MachineModel documentations
  • Added documentation for the bqskit.ext package
  • Added pass_down_block_specific_key_prefix to ForEachBlockPass, allowing passes to pass down data to each block individually
  • Added support to convert unitaries to special unitaries
  • Added documentation to EmbeddedGate to warn users about local phases
  • Added log messages during optimization_level=4 and PAM

Changed

  • Circuit append methods now return cycle of new operation
  • EmbeddedGate can now take None for level_maps
  • EmbeddedGate now has a default for level_maps (None)
  • Updated EmbeddedGate's print out name to include more information
  • Increased number of exponential back-off retries when establishing a connection to an attached server to better support a supercomputer environment

Fixed

  • Fixed tagged gate hashing with dict data
  • Fixed documentation bugs with some gates
  • Fixed broken documentation link in MachineModel
  • Fixed ScanPartitioner bug with small circuits
  • Fixed issue with PAM and barriers
  • Fixed performance issue due to unnecessary is_unitary checks
  • Fixed EmbeddedGate hashing issue
  • Fixed high-error issue from search frontier emptying during 2-qubit synthesis
  • Fixed high-error issue from search frontier emptying when retargeting 3-qudit gatesets to 2-qudit gatesets
  • Fixed attached server shutdown failure sequence: when an interrupt doesn't work, the kill signal is properly sent now, and a warning to the user is printed in the rare case that a zombie process is possible

Full Changelog: 1.1.0...1.1.1

1.1.0

15 Sep 11:48
7ce7713
Compare
Choose a tag to compare

Changelog

Notable Changes

Replaced Dask with the new BQSKit Runtime

Previously, we used the Dask library to parallelize and distribute our
compilation pipeline across a multi-core system or a cluster of computers.
However, we had many problems and complaints with this, specifically, with
the robustness of it. Long-running compilation tasks would occasionally
crash with a CancelledError for one of many reasons. We ended up building
our runtime for our compile time. For most users, this change will
happen in the background, leading to slightly faster compile times and
confidence in long-running or distributed jobs. The documentation is updated
with a guide for launching a runtime on a cluster of nodes if you decide
to parallelize your workload over a compute cluster or supercomputer.

Greatly improved Qudit Support

With the help of algorithm and hardware scientists, we greatly expanded
support for qudit simulation, compilation, and information science within
the BQSKit framework. Most notably, we added several new gates and support
for qudit compilation in the off-the-shelf compile function.

State and Multi-State Synthesis Support

Added support for StateVector and StateSystem inputs to the
bqskit.compile` function now allows state preparation circuit synthesis
and state mapping synthesis. See the paper
for more info on multi-state synthesis.

Optimization level 4 with Permutation-Aware Synthesis and Mapping

Added permutation-aware synthesis and mapping passes, which serve as the
base for the optimization level 4 workflow. See the
paper for more info.

New Features

  • Added Barrier Support
  • Added with_mappingflag to the compile function to optionally return the
    initial and final logical-to-physical qudit mapping
  • Added the Workflow class
  • Added the PassData class
  • Added the GateSet class
  • Added the StateSystem class
  • Added Sequence support for inputs the compile function. Now you can pass
    a list of circuits (or any input) to be compiled, which will all be compiled in
    parallel.
  • Qfactor support for qudits
  • disable_logging function
  • Implemented the compute_su_generators math function

New Circuit/IR Methods

  • Implemented Circuit.is_empty
  • Implemented Circuit.gate_set_no_blocks
  • Implemented Circuit.last_on
  • Implemented Circuit.first_on
  • Implemented Circuit.get_statevector
  • Implemented Circuit.perform
  • Implemented Operation.get_inverse
  • Implemented Gate.get_inverse
  • Implemented Gate.get_inverse_params

New Gates

  • Implemented BGate
  • Implemented ClockGate
  • Implemented PDGate
  • Implemented MargolusGate
  • Implemented RC3XGate
  • Implemented RCCXGate
  • Implemented ShiftGate
  • Implemented SubSwapGate
  • Implemented CCPGate
  • Implemented CKMGate
  • Implemented CKMdgGate
  • Implemented ArbitraryCPhaseGate
  • Implemented CUGate
  • Implemented RSU3Gate
  • Implemented EmbeddedGate
  • Implemented BarrierPlaceholder
  • Implemented QuditGate
  • Implemented GeneralGate

New Passes and PassPredicates

  • Implemented AutoRebase2QuditGatePass
  • Implemented GeneralSQDecomposition
  • Implemented StructureAnalysisPass
  • Implemented SubTopologySelectionPass
  • Implemented PAMLayoutPass
  • Implemented PAMRoutingPass
  • Implemented EmbedAllPermutationPass
  • Implemented ToVariablePass
  • Implemented OrPredicate
  • Implemented ManyQuditGatesPredicate
  • Implemented NoSingleQuditGatesInModel
  • Implemented HasGeneralSingleQuditGate
  • Implemented ZXGatePredicate
  • Implemented AllConstantSingleQuditGates

Changed

  • Layer Generators now intelligently place gates to avoid unnecessary gates
  • Circuit.get_inverse now works differently to avoid DaggerGates when not necessary
  • Many passes and layer generators where given "smart defaults" picked from the PassData.model
  • Improved performance of active_qudit calculation
  • ForEachBlockPass replace filter option can now be a string that describes the filter
  • Layer generator selection in QSearch and LEAP now reacts to seeds in PassData
  • SeedLayerGenerator has been significantly improved
  • MachineModel.is_compatible now takes an optional placement parameter
  • ControlledGate is now significantly more general and can handle qudit and even mixed qudit controls and targets.
  • Many gates now take an optional radix parameter that can be set to generalize them to higher dimensions
  • FillSingleQuditGatesPass no longer uses unnecessary instantiation

Fixed

  • Fixed a performance bug in CouplingGraph
  • Fixed an issue with seeds and reproducible circuits (#107)
  • Fixed bug when popping an idle qudit

Deprecated

  • Honeywell QPU gate sets and Models (replaced with Quantinuum)
  • enable_dashboard and disable_dashboard (dask no longer works)
  • enable_parallelism and disable_parallelism (use Compiler(num_workers=x) to control parallelism)
  • BasePass.get_model, BassPass.get_placement, BassPass.get_connectivity, BassPass.get_target have
    all been replaced with the PassData version.
  • BassPass.in_parallel and BassPass.execute (in_parallel is no longer necessary and execute has been replaced with await get_runtime().map(...))
  • The direct use of a CompilationTask has been deprecated and is no longer needed.
    Instead, you can pass the circuit and workflow directly into Compiler.compile and similar functions.
  • multistart_gen in Circuit.instantiate (been moved directly to the Instantiater.instantiate)
  • batch_size in ForEachBlockSize
  • GreedyPartitioner
  • Rebase2QuditGatePass has moved from bqskit.passes.processing to bqskit.passes.retarget

Full Changelog: 1.0.4...1.1.0

1.0.4

23 Jan 17:03
5d46cda
Compare
Choose a tag to compare
  • Native Apple Silicon support (M1 and M2 chips)
  • Python 3.11 support
  • Qudit support in instantiation
  • Performance improvements
  • Bugfixes

1.0.3

28 Oct 21:53
8ae1e9a
Compare
Choose a tag to compare

Fixes several bugs

1.0.2

30 Sep 18:58
4e62a6c
Compare
Choose a tag to compare

Fixes #98 and #100
QuickParitioner cleanup, bug fixes, and performance improvements
New CouplingGraph features
Fixed wrong AspenM2Model links

1.0.1

22 Sep 14:01
cdb5fdf
Compare
Choose a tag to compare

Bugfixes

1.0.0

20 Sep 04:09
98b519c
Compare
Choose a tag to compare

BQSKit 1.0 Release

  • Implemented standard compile function
  • Added DAG features in IR
  • Extended QASM support
  • Implemented mapping capabilities
  • Added extension package to support many popular frameworks
  • Many performance and quality of life improvements

0.5.2

28 Apr 03:10
Compare
Choose a tag to compare

Minor fixes