[0.8.0] - 2024-02-14
This release includes breaking changes!
Major new features are support for W-spiders and Z-boxes, which are generators used in certain extensions of the ZX-calculus, such as in this paper which served as the motivation.
It also adds more formal support for symbolic phases through the addition of a Poly
class that can represented polynomial expressions containing Boolean and continuous variables.
These features were implemented to support the development of ZXLive, a new graphical proof assistant for ZX-diagrams.
This release includes some changes that are not backwards compatible. The most important of which is changing how inputs and outputs are stored in the json format. This means that json files produced by Graph.to_json()
are not parsible by older versions, and older versions are no longer parsible by this newer version.
In addition, the gate CX
has been renamed to XCX
to make it more clear that it is in fact not an alternative name for the CNOT
gate. Finally, the FSim
gate now takes as first arguments the control and target, and only then the angles, in order to be consistent with the other gate definitions.
Added
- Support for W nodes and Z boxes (courtesy of @RazinShaikh).
- Support for symbolic phases that can either be Boolean or continuous variables. This is implemented through the new
Poly
class (standing for Polynomial) (courtesy of @RazinShaikh). - Support for Jupyter notebooks in documentation using nbsphinx (courtesy of @dlyongemallo).
- Jupyter notebook documenting all supported gates (courtesy of @dlyongemallo).
- Support for OpenQASM 3.0 (courtesy of @dlyongemallo).
- A function
is_well_formed
to check that a graph is a well-formed ZX-diagram (courtesy of @RazinShaikh). - A function
is_pauli
to check whether a phase is Pauli (courtesy of @y-richie-y). - A function
GraphDiff
that calculates what actions are needed to bring one graph to another (used in ZXLive). - Functions
simplify.to_clifford_normal_form_graph
andextract.extract_clifford_normal_form
. - Lazy import of some dependencies to improve start-up time.
Changed
- Class
CX
, which refers to an X-controlled X gate, renamed toXCX
for clarity. - Parameters for
FSim
changed to put control and target before angles, for consistency with other gates. - json format correctly remembers input/output ordering (older json no longer parsible).
Fixed
- A bunch of mypy issues.
- json export and import supports Poly phases.
- Grounds being dropped during composition and other operations (#177 courtesy of @ABorgna).
- The
tensorfy
function used the visual ordering of inputs and outputs, instead of the correct ordering (#168). - Several qasmparser bugs (courtesy of @dlyongemallo).
- Incorrect gate name when optimization combines phases into single gate (#134 courtesy of @bichselb).
- The gflow function returned a gflow when it shouldn't (#114 courtesy of @mafaldaramoa).
- Error in qasmparser when importing a gate with a negative phase (#112).
Automated changelog from Github
- Fix gflow by @mafaldaramoa in #115
- Fix mypy complaining about incompatible type for Z2 = Literal[0,1]. by @dlyongemallo in #118
- Remove a number of unnecessary "# type: ignores". by @dlyongemallo in #119
- serialize and deserialize GraphDiff by @RazinShaikh in #126
- is_pauli: zxlive symbol support by @y-richie-y in #127
- W node support by @RazinShaikh in #128
- W fusion bug fix by @RazinShaikh in #129
- Match symbolic phase gadgets by @y-richie-y in #132
- Add iterators for
full_reduce
,interior_clifford_simp
andpivot_gadget_simp
by @y-richie-y in #130 - Fix #134: incorrect optimization for qiskit circuit by @bichselb in #135
- Minor improvements to
print_phase
class var ingates.py
. by @dlyongemallo in #136 - Remove some "# type: ignore"s. by @dlyongemallo in #137
- Make
quipper_name
a class var inGate
with a default value ofundefined
. by @dlyongemallo in #141 - Add .venv to .gitignore. by @dlyongemallo in #142
- Rename CX class to XCX to reduce confusion. by @dlyongemallo in #140
- Fix graph diff not serializing phases properly by @RazinShaikh in #144
- Fix a wrong variable used in error message. by @dlyongemallo in #149
- In qasmparser.py, reset the parser state between calls to
parse
. by @dlyongemallo in #150 - Add basic support for OpenQASM 3. by @dlyongemallo in #151
- Change
FSim
by puttingcontrol
andtarget
parameters first. by @dlyongemallo in #154 - Minor cosmetic changes to make codebase more consistent. by @dlyongemallo in #155
- Fix direction of qasm
ry
rotation and addy
gate. by @dlyongemallo in #157 - method to check if the graph is well-formed by @RazinShaikh in #162
- Add notebook support in doc using nbsphinx. by @dlyongemallo in #152
- Add support for most OpenQASM 2 and 3 standard gates. by @dlyongemallo in #156
- Z box by @RazinShaikh in #164
- Use
VertexType
constants in tensor.py. by @dlyongemallo in #170 - Fix a bug where gates with multiple phases did not output the phases … by @dlyongemallo in #172
- Support output to OpenQASM 3 format. by @dlyongemallo in #174
- Make
RZZ
a subclass ofParityPhase
. by @dlyongemallo in #173 - Make the docstring for
graph_to_swaps
a bit clearer. by @dlyongemallo in #175 - Add a script to output PDF in Windows. by @dlyongemallo in #176
- Fix grounds being dropped during composition and other operations by @ABorgna in #178
- More symbolic features for custom rewrites by @RazinShaikh in #181
- typo for pi in jsonparser string_to_phase by @RazinShaikh in #184
- remove redundant tests for
ry
by @dlyongemallo in #183 - Add a Jupyter notebook documenting the supported qasm gates. by @dlyongemallo in #185
- In error message converting parametrized diagram to tensor, display the poly. by @dlyongemallo in #186
- Catch up CHANGELOG. by @dlyongemallo in #188
- Update
Measurement
gate qasm comment and link. by @dlyongemallo in #190 - Document all supported gates in the notebook. by @dlyongemallo in #191
- Fix bug in drawing.py by @BenWillemsen in #194
New Contributors
- @mafaldaramoa made their first contribution in #115
- @dlyongemallo made their first contribution in #118
- @RazinShaikh made their first contribution in #126
- @bichselb made their first contribution in #135
- @BenWillemsen made their first contribution in #194
Full Changelog: v0.7.3...v0.8.0