Skip to content

Releases: qir-alliance/pyqir

v0.8.0

09 Mar 22:51
0c682ed
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.8.0a1...v0.8.0

v0.8.0a1

27 Dec 16:53
431959b
Compare
Choose a tag to compare
v0.8.0a1 Pre-release
Pre-release

Notable changes from 0.7 to 0.8.0a1

  • LLVM 14 is now the default target.
  • QIR evaluation has been removed. Simulation of QIR is now available via the qir-runner sparse simulator.
  • BasicQisBuilder is now written in Python.
  • All QIS instructions are available in the pyqir.qis submodule
    • barrier, ccx, cx, cz, h, if_result, mz, reset, rx, ry, rz, s, s_adj, swap, t, t_adj, x, y, z
    • Of these,barrier, ccx, and swap are new.
  • PyQIR can generate QIR compatible with the QIR base profile preliminary spec
    • Module flags can now be generated
    • Attributes on functions can now be added and queried.
    • RT instructions are available in the pyqir.rt submodule
      • Output recording functions are now built-in: array_record_output, result_record_output, and tuple_record_output
    • Execution environment call, initialize, is now built-in
    • EntryPoint attribute is now entry_point
    • requiredQubits attribute is now num_required_qubits
    • requiredResults attribute is now num_required_results
    • __quantum__qis__mz__body signature has been updated. Its result parameter is now marked writeonly and the function call now has the irreversible attribute:
      before:
      declare void @__quantum__qis__mz__body(%Qubit*, %Result*) #1
      after:
      declare void @__quantum__qis__mz__body(%Qubit*, %Result* writeonly) #1
      attributes #1 = { "irreversible" }

Technical Changes

  • Inkwell has been removed as a dependency. Qirlib now uses LLVM-SYS and a custom wrapper around the LLVM C++ APIs.

What's Changed

Full Changelog: v0.7.0...v0.8.0a1

v0.7.0

07 Dec 20:16
f91b2d0
Compare
Choose a tag to compare

This release features the unification of pyqir-generator and pyqir-parser. We've made significant changes to the API including many breaking changes. For more information, please read the upgrade guide.

What's Changed

Full Changelog: v0.6.2...v0.7.0

v0.6.2

04 Oct 22:37
Compare
Choose a tag to compare

What's Changed

  • Add requiredQubits and requiredResults attributes by @SamarSha in #166

Full Changelog: v0.6.1...v0.6.2

v0.6.1

28 Sep 22:07
Compare
Choose a tag to compare

What's Changed

Full Changelog: v0.6.0...v0.6.1

v0.6.0

26 Sep 22:09
2173100
Compare
Choose a tag to compare

Generator now supports LLVM instructions for integer arithmetic and branching. Built-in support for dynamic qubit and result allocation has been removed, but the functionality is still possible using the external functions feature (see the dynamic allocation example).

What's Changed

Full Changelog: v0.5.0a1...v0.6.0

v0.5.0a1

14 Jul 00:37
1e11f6e
Compare
Choose a tag to compare
v0.5.0a1 Pre-release
Pre-release

What's Changed

LLVM 13 is now the default target.

New Contributors

Full Changelog: v0.4.2a1...v0.5.0a1

v0.4.2a1

04 Jun 04:39
7c4573e
Compare
Choose a tag to compare
v0.4.2a1 Pre-release
Pre-release

What's Changed

New Contributors

Full Changelog: v0.4.1a1...v0.4.2a1

v0.4.1a1

09 May 23:38
af79595
Compare
Choose a tag to compare
v0.4.1a1 Pre-release
Pre-release

What's Changed

Full Changelog: v0.4.0a1...v0.4.1a1

v0.4.0a1

18 Apr 21:17
4f469b8
Compare
Choose a tag to compare
v0.4.0a1 Pre-release
Pre-release

What's Changed

  • Enable qirlib to exist on its own by @idavis in #73
  • Adding static result allocation. by @idavis in #103
  • Bumping version to 0.4.0 and updating changelog by @idavis in #105
  • Changing default value of use_static_result_alloc to True by @idavis in #106
  • Release 0.4.0a1 by @idavis in #109

Breaking Changes

PR #106 changes the default way Results are emitted in emitted QIR.

The previous approach used call %Result* @__quantum__qis__m__body(%Qubit* null) for measurement saving to a Result variable. Along with this, branching used __quantum__rt__result_equal(%Result*, %Result*) along with __quantum__rt__result_get_zero and __quantum__rt__result_get_one
to perform branching.

The new default usage in 0.4.0a1 uses static Result identifiers instead of dynamic Result values. With that, measurement now uses "call void @__quantum__qis__mz__body(%Qubit*, %Result*) which accepts the static Result identifier. As a result, the pyqir-evaluator can now see which Result is being written to. Branching has also changed to use call i1 @__quantum__qir__read_result(%Result*) which returns the boolean value of the Result.

For the pyqir-generator, the use of static and dynamic Qubit and Result can now be
configured via two new methods on the SimpleModule class:

  • use_static_qubit_alloc(bool)
  • use_static_result_alloc(bool)

Full Changelog: v0.3.2a1...v0.4.0a1