ZXCalculus.jl
A implementation of ZX-calculus in Julia.
ZX-calculus is a graphical language for quantum computing. One can represent quantum states and operators as ZX-diagrams, and manipulate them with ZX-calculus rules. As an application of ZX-calculus, one can simplify quantum circuits with it. For more details about ZX-calculus, one can check this website.
GSoC
This package is a Google Summer of Code 2020 project.
Package Features
As an implementation of ZX-calculus, these following features are available similar to the Python implementation PyZX
.
- Building up and manipulating ZX-diagrams
- Simplifying ZX-diagrams with specific rules
- Simplifying quantum circuits with ZX-calculus based algorithms including Clifford simplification and phase teleportation.
- Visualization for ZX-diagrams.
ZXCalculus.jl
can be integrated into the quantum compiler YaoLang.jl
. This makes the following features.
- Reading or outputting quantum circuits in various forms (for example, QASM, YaoBlock instructions, and so on).
- A compiler level circuit simplification engine.
Installation
To install ZXCalculus.jl
, please open Julia's interactive session (known as REPL) and press ]
key in the REPL to use the package mode, then type the following command
pkg> add ZXCalculus
For plotting, please install YaoPlots.jl
in addition.
pkg> add YaoPlots
Contents
Index
ZXCalculus.PMG.HalfEdge
ZXCalculus.PMG.PlanarMultigraph
ZXCalculus.Utils.Parameter
ZXCalculus.Utils.Parameter
ZXCalculus.Utils.Phase
ZXCalculus.Utils.Scalar
ZXCalculus.ZW.ZWDiagram
ZXCalculus.ZX.GEStep
ZXCalculus.ZX.Match
ZXCalculus.ZX.Rule
ZXCalculus.ZX.ZXDiagram
ZXCalculus.ZX.ZXDiagram
ZXCalculus.ZX.ZXDiagram
ZXCalculus.ZX.ZXGraph
ZXCalculus.ZX.ZXGraph
ZXCalculus.ZX.ZXLayout
Base.match
Base.match
Base.match
Base.replace!
Graphs.SimpleGraphs.add_edge!
Graphs.SimpleGraphs.rem_edge!
Graphs.ne
Graphs.ne
Graphs.ne
Graphs.neighbors
Graphs.neighbors
Graphs.neighbors
Graphs.nv
Graphs.nv
Graphs.nv
ZXCalculus.PMG.add_facet_to_boarder!
ZXCalculus.PMG.add_vertex_and_facet_to_boarder!
ZXCalculus.PMG.create_edge!
ZXCalculus.PMG.create_face!
ZXCalculus.PMG.create_vertex!
ZXCalculus.PMG.erase_facet!
ZXCalculus.PMG.gc_vertex!
ZXCalculus.PMG.is_boundary
ZXCalculus.PMG.join_facet!
ZXCalculus.PMG.join_vertex!
ZXCalculus.PMG.make_hole!
ZXCalculus.PMG.n_conn_comp
ZXCalculus.PMG.new_edge
ZXCalculus.PMG.out_half_edge
ZXCalculus.PMG.prev
ZXCalculus.PMG.split_edge!
ZXCalculus.PMG.split_facet!
ZXCalculus.PMG.split_vertex!
ZXCalculus.PMG.surrounding_half_edge
ZXCalculus.PMG.trace_face
ZXCalculus.PMG.σ
ZXCalculus.PMG.σ_inv
ZXCalculus.PMG.ϕ
ZXCalculus.ZW.add_spider!
ZXCalculus.ZW.get_input_idx
ZXCalculus.ZW.get_inputs
ZXCalculus.ZW.get_output_idx
ZXCalculus.ZW.get_outputs
ZXCalculus.ZW.insert_spider!
ZXCalculus.ZW.nout
ZXCalculus.ZW.nqubits
ZXCalculus.ZW.parameter
ZXCalculus.ZW.print_spider
ZXCalculus.ZW.round_phases!
ZXCalculus.ZW.set_phase!
ZXCalculus.ZW.spider_type
ZXCalculus.ZX.add_spider!
ZXCalculus.ZX.ancilla_extraction
ZXCalculus.ZX.biadjacency
ZXCalculus.ZX.circuit_extraction
ZXCalculus.ZX.clifford_simplification
ZXCalculus.ZX.column_loc
ZXCalculus.ZX.concat!
ZXCalculus.ZX.continued_fraction
ZXCalculus.ZX.gaussian_elimination
ZXCalculus.ZX.get_input_idx
ZXCalculus.ZX.get_inputs
ZXCalculus.ZX.get_output_idx
ZXCalculus.ZX.get_outputs
ZXCalculus.ZX.import_edges!
ZXCalculus.ZX.import_non_in_out!
ZXCalculus.ZX.insert_spider!
ZXCalculus.ZX.is_interior
ZXCalculus.ZX.nqubits
ZXCalculus.ZX.phase
ZXCalculus.ZX.phase_teleportation
ZXCalculus.ZX.plot
ZXCalculus.ZX.push_gate!
ZXCalculus.ZX.push_gate!
ZXCalculus.ZX.pushfirst_gate!
ZXCalculus.ZX.pushfirst_gate!
ZXCalculus.ZX.qubit_loc
ZXCalculus.ZX.rem_spider!
ZXCalculus.ZX.rem_spider!
ZXCalculus.ZX.rem_spiders!
ZXCalculus.ZX.rem_spiders!
ZXCalculus.ZX.rewrite!
ZXCalculus.ZX.rewrite!
ZXCalculus.ZX.round_phases!
ZXCalculus.ZX.scalar
ZXCalculus.ZX.set_column!
ZXCalculus.ZX.set_loc!
ZXCalculus.ZX.set_phase!
ZXCalculus.ZX.set_qubit!
ZXCalculus.ZX.simplify!
ZXCalculus.ZX.spider_type
ZXCalculus.ZX.spiders
ZXCalculus.ZX.stype_to_val
ZXCalculus.ZX.tcount
ZXCalculus.ZX.update_frontier!
ZXCalculus.ZX.verify_equality
ZXCalculus.ZXW.add_inout!
ZXCalculus.ZXW.add_spider!
ZXCalculus.ZXW.concat!
ZXCalculus.ZXW.dagger
ZXCalculus.ZXW.expval_circ!
ZXCalculus.ZXW.get_inputs
ZXCalculus.ZXW.get_outputs
ZXCalculus.ZXW.import_edges!
ZXCalculus.ZXW.import_non_in_out!
ZXCalculus.ZXW.insert_spider!
ZXCalculus.ZXW.insert_wtrig!
ZXCalculus.ZXW.int_prep!
ZXCalculus.ZXW.integrate!
ZXCalculus.ZXW.nout
ZXCalculus.ZXW.nqubits
ZXCalculus.ZXW.parameter
ZXCalculus.ZXW.print_spider
ZXCalculus.ZXW.round_phases!
ZXCalculus.ZXW.set_phase!
ZXCalculus.ZXW.spider_type
ZXCalculus.ZXW.stack_zxwd!
ZXCalculus.ZXW.substitute_variables!
ZXCalculus.ZXW.symbol_vertices