Releases: unitaryfund/qrack
Static stabilizer, CUDA bug fix, and style improvements
Statically linked QStabilizerHybrid
code now benefits from additional caching when querying multiple expectation values at the same point in unitary circuit evolution. As of this release, environment variables always preempt user code methods for near-Clifford rounding threshold.
An ENABLE_CUDA
macro was misspelled in code, affecting (CUDA) stabilizer simulation.
For readability, Qrack adopts a style convention that functions and methods with multiple return-or-throw statement points put extra line breaks before and after every return statement unless either instance coincides with the beginning or end of scope, and any inner-scope returns (except top-level lambda function scope) have extra line breaks above and below the containing scope (as necessary). (Pardon the unreadable diff on Qrack, for this change in particular.)
Full Changelog: vm6502q.v9.13.37...vm6502q.v9.14.0
sha1sum results:
3c7a2fa47b6f7fc85546d2e2c1e164ebae745207 libqrack-macosx_14_0_arm64.zip
6f6c35aa6651eb1daaa64252135e0a79fd68960c libqrack-macosx_15_0_arm64.zip
ef5d6b83c1597d52d1cffde3cc5fba038b2222a2 libqrack-manylinux2014_x86_64.zip
a1292a5b8b20c0bdcf73fa933dc853b90adf8516 libqrack-manylinux_2_35_x86_64.zip
9569026a686f756e78997c8bbc0bd45e5356ac1b libqrack-manylinux_2_39_x86_64.zip
4f4b992749718239a03a3d390b31429ab8a1bbe2 libqrack-win-amd64.zip
Style fixes (nullptr)
Previously, Qrack relied on NULL
when necessary for pointers. In this release, all instances of NULL
have been replaced with nullptr
(since this was added in C++11, as far back as Qrack supports for a C++ standard). This surfaced exactly one instance of NULL
where nullptr
was not immediately appropriate, because NULL
was assigned to a variable for an instance of a class rather than a pointer to the class. Deeming this a "code smell" (even though it's very unlikely there could have been any bad access, use-after-free, or other memory safety error, here) the code was refactored to achieve its same original intent while using nullptr
instead. Also, for
loops have been brought up to standard for use of the "foreach" pattern (for (auto& x : container)
).
Full Changelog: vm6502q.v9.13.33...vm6502q.v9.13.37
sha1sum results:
41f83401b38385ed523a17d397aaae200ad93f7b libqrack-macosx_14_0_arm64.zip
4a33ab54b167fe4efd5dd9de17787dcadecc323b libqrack-macosx_15_0_arm64.zip
9f2d1fbf712136223dbe158d88dd643b0390c2de libqrack-manylinux2014_x86_64.zip
cb2ed1a9740477b7efc7b2926b916df557841a5a libqrack-manylinux_2_35_x86_64.zip
8fc673d3d14e28a6930b2dfb4a7fbf1cca1b4848 libqrack-manylinux_2_39_x86_64.zip
5d6cc4b8f7509ef90446d355d97a5e30ac9ee603 libqrack-win-amd64.zip
QUnit micro-optimization (and fix Windows builds)
This release adds micro-optimizations to for
loops in QUnit
. We also have a pull request to fix Windows debug builds. (We also work around the fact that Microsoft is once again either "lawyering" or attempting to redefine the C++ standard, for std::chrono::system_clock
, in their latest compiler release, which, if the latter, will fail.)
What's Changed
- Castorena/msvc build by @crcastore in #1019
- Various micro-optimizations by @WrathfulSpatula
New Contributors
- @crcastore made their first contribution in #1019
Full Changelog: vm6502q.v9.13.29...vm6502q.v9.13.33
sha1sum results:
854a692a4366bed125c8fd33eaf0f3deb2850c32 libqrack-macosx_14_0_arm64.zip
abf36b4d610818e0733ef802654bc3cc716ab9fa libqrack-macosx_15_0_arm64.zip
183f4297c498689c7c9e0205f312167028cbeef3 libqrack-manylinux2014_x86_64.zip
822602bc2e3ac304f4efacaf7d35740f1caf5375 libqrack-manylinux_2_35_x86_64.zip
c8962d6060ff730ba34acdfcac6437886529a2ba libqrack-manylinux_2_39_x86_64.zip
a04627bf59e70345f36bf80812735b29b2cb9fbb libqrack-win-amd64.zip
"Detailing"
This patch release enforces Qrack idiomatic style. Specifically, a "foreach
" pattern (for(const auto& x : container)
) should be preferred when sequence or index do not matter; a loop over index should be preferred when index or sequence matters. (In practice, "foreach
" over the elements of a std::vector
, for example, will probably always proceed in stable order according to index, but Qrack style demands that this should be reflected explicitly in the code idiom.) Catch2
for unit tests and benchmarks has also been upgraded to the last official major v2
release.
Full Changelog: vm6502q.v9.13.25...vm6502q.v9.13.29
sha1sum results:
5e466db033bb36640d1aa3ac39d14d3388a8dda7 libqrack-macosx_14_0_arm64.zip
52814bdaa09687573f779d47aa1dcd900984ea60 libqrack-macosx_15_0_arm64.zip
ce5b662e2ca986dbc37c5548a4a8c9b2f8bf17be libqrack-manylinux2014_x86_64.zip
0c84ba8ea1136bb400ad8e13da8491d929d9b7d5 libqrack-manylinux_2_35_x86_64.zip
8ed9d1ef9a0eabbe4ca42ad43ffa6ac28ac3e08c libqrack-manylinux_2_39_x86_64.zip
72dcd247200483eb453066a56b9e1c74eff6028a libqrack-win-amd64.zip
Fix uniformly controlled signatures; stabilizer micro-optimizations
What motivates this release is a problem fixed in the signatures of "uniformly controlled" gates (such as QNeuron
relies upon). Historically, I had confused const type*
for type const*
in cases. This was meant to be totally fixed in a previous release, but editing documentation surfaced the remaining inconsistency in uniformly controlled gate signatures. The change does not break anything in the library, so there was no bad access, despite the erroneous types. Besides that, this release includes (likely insignificant) optimizations for stabilizer simulation.
Expect Ubuntu releases, since it's important that they have the right C++ signatures.
Full Changelog: vm6502q.v9.13.24...vm6502q.v9.13.25
sha1sum results:
c61d606a05355cd9c9c7a1da9917d0ee83924ec0 libqrack-macosx_14_0_arm64.zip
182f044c67d583087072caadbcb1dc51daf0c2d7 libqrack-macosx_15_0_arm64.zip
3aa3f76369f2287407d572b0297bc19f4cb200cb libqrack-manylinux2014_x86_64.zip
b97e0a8ba773637767b8655d5979b2dff7663f21 libqrack-manylinux_2_35_x86_64.zip
83791547110e287f7dad166699d675fceff0ea43 libqrack-manylinux_2_39_x86_64.zip
e7571aa0a4ef2eb58212b81b3f8e9d63d71d8056 libqrack-win-amd64.zip
Semantic version bump for downstream projects
Almost the only point of this release is to clarify Qrack's semantic versioning as tracked in downstream projects (like pyqrack
). Since last release, minor style improvements were made in stabilizer simulation that might give a (probably very tiny) performance increase. The README was also comprehensively reorganized and improved. Windows builds might see an improvement from fixing a problem with use of /O3
compiler flag in CMake. (It is unlikely that Ubuntu packages will be updated for now, for this semantic release, before meaningfully substantive improvements are made in Qrack functionality at a later time.)
Full Changelog: vm6502q.v9.13.16...vm6502q.v9.13.24
sha1sum results:
8f134387d809b1ace091688c1eaf11e59ca987b6 libqrack-macosx_14_0_arm64.zip
3b69d8b9a97dad6f03036643f7a7d7efddb99072 libqrack-macosx_15_0_arm64.zip
3a284801d8293cbdb0648b68b3312d7b4bab516e libqrack-manylinux2014_x86_64.zip
d8f77bf2a8403de6ce76d47ef6dbb28ac12759be libqrack-manylinux_2_35_x86_64.zip
47822542bf2e8a032bd82eb420ed4351aab69547 libqrack-manylinux_2_39_x86_64.zip
2415a8e543329d4814f47231291b02d247cfdc09 libqrack-win-amd64.zip
QCircuit commutation
In this release, QCircuit
checks, when a gate commutes, whether it had any qubits in common with the other gate. If it does, commutation is deemed "productive," and circuit optimization continues. If commutation only occurs without any qubits in common between commuting gates, and if the gate ultimately fails to commute at the last step, then commutation is deemed "non-productive," and the corresponding qubits are removed from the circuit optimization light cone.
Full Changelog: vm6502q.v9.13.9...vm6502q.v9.13.16
sha1sum results:
36ea69309bdada8dcf7a585139b4a5763f5aabb8 libqrack-macosx_14_0_arm64.zip
d75f5fe860bf0ea43aca7411422d2d5937771f7d libqrack-macosx_15_0_arm64.zip
32d3b0287cebbde73929c10699ec4aedeb2ddad6 libqrack-manylinux2014_x86_64.zip
2c003055386621ca2e69d4a5e6672551258769c6 libqrack-manylinux_2_35_x86_64.zip
d5ab197ea72092109623493a6072ea79c37a9d82 libqrack-manylinux_2_39_x86_64.zip
fc30d93a45f5e4bab617a40c71391f5b114e5636 libqrack-win-amd64.zip
QCircuit light cone
QCircuit
has been improved with further light-cone optimizations. Now, when gates are combined to produce identity operator somewhere mid-circuit, only gates in the light cone are checked for further composability past the identity gate, and, as gates in the light cone fail to produce any further improvements past a certain depth, the blocked wires are removed from the light cone for further optimization checks. (These improvements are inspired by consideration of "directed acyclic graph," "DAG" data structures.)
Full Changelog: vm6502q.v9.13.8...vm6502q.v9.13.9
sha1sum results:
b17d9a3437ecebbc9fb3802e56a53a068be51152 libqrack-macosx_14_0_arm64.zip
b9fa424e04cc203948f155eca2dd5ee774c9e8ac libqrack-macosx_15_0_arm64.zip
291dddde77799af993fcc0687695bd4f86a4a28f libqrack-manylinux2014_x86_64.zip
a69658a77a6fdd1e29c9f8533227c709c515d416 libqrack-manylinux_2_35_x86_64.zip
bde0b43c397d4d0b272e8030150fc7f44ba2aeef libqrack-manylinux_2_39_x86_64.zip
fc6ec66a81819c6b18d8d910406472660a58d7ea libqrack-win-amd64.zip
PSTRIDEPOW default; QCircuit improvement
(With apologies for two release iterations in a day...) Environment/build option PSTRIDEPOW
default value has been re-tuned based on local benchmarks. In QCircuit
, we noticed that Swap
gate could be decomposed as either 3 CNOT
or 3 AntiCNOT
gates, which can improve performance.
Full Changelog: vm6502q.9.13.7...vm6502q.v9.13.8
sha1sum results:
eeb489e7c6d71e2e5e78537d9273fee6018110a5 libqrack-macosx_14_0_arm64.zip
8cbe0548fc8bd2b25067b30ed8eb7ca83a0dc1e2 libqrack-macosx_15_0_arm64.zip
f5cf3a69f27b03f8ce25b22fa3286d0fe1e9ec78 libqrack-manylinux2014_x86_64.zip
511c0f7db8edba4317d0dc5193b10442cde371bc libqrack-manylinux_2_35_x86_64.zip
70457a156d83e71b8d4bf47f10472fdb72e58887 libqrack-manylinux_2_39_x86_64.zip
d12774e34c689439cb173a90ba15e90bf3c1d975 libqrack-win-amd64.zip
Improve QCircuit
This release reverts the fixed-precision reporting of IO streams and improves the performance of QCircuit
.
Full Changelog: vm6502q.v9.13.6...vm6502q.9.13.7
sha1sum results:
a456a5d8cbffda153cee32c0bf683028b978726f libqrack-macosx_14_0_arm64.zip
dd270a04fb9f4caf42fd25a362a465d8eaccd383 libqrack-macosx_15_0_arm64.zip
1d00c88da06e31eca0f480ca2b8acd3f7968329a libqrack-manylinux2014_x86_64.zip
039e7fe5d49cb07de494c5181c94c5c6adb32a3c libqrack-manylinux_2_35_x86_64.zip
e1151e54605577f8a3fd150a032403a62f788930 libqrack-manylinux_2_39_x86_64.zip
765733e3c0114338bae86b22ad537b4b9c47b65b libqrack-win-amd64.zip