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 ZXCalculusFor plotting, please install YaoPlots.jl in addition.
pkg> add YaoPlotsContents
Index
ZXCalculus.PMG.HalfEdgeZXCalculus.PMG.PlanarMultigraphZXCalculus.Utils.ParameterZXCalculus.Utils.ParameterZXCalculus.Utils.PhaseZXCalculus.Utils.ScalarZXCalculus.ZW.ZWDiagramZXCalculus.ZX.GEStepZXCalculus.ZX.MatchZXCalculus.ZX.RuleZXCalculus.ZX.ZXDiagramZXCalculus.ZX.ZXDiagramZXCalculus.ZX.ZXDiagramZXCalculus.ZX.ZXGraphZXCalculus.ZX.ZXGraphZXCalculus.ZX.ZXLayoutBase.matchBase.matchBase.matchBase.replace!Graphs.SimpleGraphs.add_edge!Graphs.SimpleGraphs.rem_edge!Graphs.neGraphs.neGraphs.neGraphs.neighborsGraphs.neighborsGraphs.neighborsGraphs.nvGraphs.nvGraphs.nvZXCalculus.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_boundaryZXCalculus.PMG.join_facet!ZXCalculus.PMG.join_vertex!ZXCalculus.PMG.make_hole!ZXCalculus.PMG.n_conn_compZXCalculus.PMG.new_edgeZXCalculus.PMG.out_half_edgeZXCalculus.PMG.prevZXCalculus.PMG.split_edge!ZXCalculus.PMG.split_facet!ZXCalculus.PMG.split_vertex!ZXCalculus.PMG.surrounding_half_edgeZXCalculus.PMG.trace_faceZXCalculus.PMG.σZXCalculus.PMG.σ_invZXCalculus.PMG.ϕZXCalculus.ZW.add_spider!ZXCalculus.ZW.get_input_idxZXCalculus.ZW.get_inputsZXCalculus.ZW.get_output_idxZXCalculus.ZW.get_outputsZXCalculus.ZW.insert_spider!ZXCalculus.ZW.noutZXCalculus.ZW.nqubitsZXCalculus.ZW.parameterZXCalculus.ZW.print_spiderZXCalculus.ZW.round_phases!ZXCalculus.ZW.set_phase!ZXCalculus.ZW.spider_typeZXCalculus.ZX.add_spider!ZXCalculus.ZX.ancilla_extractionZXCalculus.ZX.biadjacencyZXCalculus.ZX.circuit_extractionZXCalculus.ZX.clifford_simplificationZXCalculus.ZX.column_locZXCalculus.ZX.concat!ZXCalculus.ZX.continued_fractionZXCalculus.ZX.gaussian_eliminationZXCalculus.ZX.get_input_idxZXCalculus.ZX.get_inputsZXCalculus.ZX.get_output_idxZXCalculus.ZX.get_outputsZXCalculus.ZX.import_edges!ZXCalculus.ZX.import_non_in_out!ZXCalculus.ZX.insert_spider!ZXCalculus.ZX.is_interiorZXCalculus.ZX.nqubitsZXCalculus.ZX.phaseZXCalculus.ZX.phase_teleportationZXCalculus.ZX.plotZXCalculus.ZX.push_gate!ZXCalculus.ZX.push_gate!ZXCalculus.ZX.pushfirst_gate!ZXCalculus.ZX.pushfirst_gate!ZXCalculus.ZX.qubit_locZXCalculus.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.scalarZXCalculus.ZX.set_column!ZXCalculus.ZX.set_loc!ZXCalculus.ZX.set_phase!ZXCalculus.ZX.set_qubit!ZXCalculus.ZX.simplify!ZXCalculus.ZX.spider_typeZXCalculus.ZX.spidersZXCalculus.ZX.stype_to_valZXCalculus.ZX.tcountZXCalculus.ZX.update_frontier!ZXCalculus.ZX.verify_equalityZXCalculus.ZXW.add_inout!ZXCalculus.ZXW.add_spider!ZXCalculus.ZXW.concat!ZXCalculus.ZXW.daggerZXCalculus.ZXW.expval_circ!ZXCalculus.ZXW.get_inputsZXCalculus.ZXW.get_outputsZXCalculus.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.noutZXCalculus.ZXW.nqubitsZXCalculus.ZXW.parameterZXCalculus.ZXW.print_spiderZXCalculus.ZXW.round_phases!ZXCalculus.ZXW.set_phase!ZXCalculus.ZXW.spider_typeZXCalculus.ZXW.stack_zxwd!ZXCalculus.ZXW.substitute_variables!ZXCalculus.ZXW.symbol_vertices