Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove quantomatic features #282

Merged
merged 4 commits into from
Jan 30, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 40 additions & 38 deletions demos/AllFeatures.ipynb
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@
"\n",
"## Contents:\n",
"* [Loading and saving circuits](#circuits)\n",
"* [Interacting with Quantomatic](#quantomatic)\n",
"* [Importing, exporting and editing diagrams](#diagram-io)\n",
"* [Optimizing ZX-diagrams](#optimization-zx)\n",
"* [Extracting and optimizing circuits](#optimization-circuits)\n",
"* [Phase Teleportation](#phase-teleportation)"
@@ -172,11 +172,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"<a id=\"quantomatic\"></a>\n",
"# Interacting with Quantomatic\n",
"PyZX allows easy integration with quantomatic.\n",
"\n",
"First of all, Quantomatic graph files can be imported into PyZX:"
"<a id=\"diagram-io\"></a>\n",
"# Importing, exporting and editing diagrams\n",
"PyZX also has its own json format for exporting graphs and interacts with [ZXLive](https://github.com/zxcalc/zxlive) to make manually modifying diagrams easy. First, let's see that we can indeed load diagrams:"
]
},
{
@@ -195,24 +193,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"PyZX saves the names of the vertices:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(g.vdata(12,'name'))\n",
"print(g.vdata(1,'name'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Because this graph was originally exported from PyZX, it has automatically remembered what its inputs and outputs are:"
"Because this graph was originally exported from PyZX starting as a circuit, it has automatically remembered what its inputs and outputs are:"
]
},
{
@@ -228,7 +209,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"For a graph that originated from Quantomatic we need to tell it what its inputs and outputs are.\n",
"For a graph that was built manually, we might need to tell it what its inputs and outputs are.\n",
"\n",
"This can be done either manually:\n",
"\n",
@@ -243,17 +224,17 @@
"metadata": {},
"outputs": [],
"source": [
"g.set_inputs(())\n",
"g.set_inputs(()) # Reset the inputs and outputs, so we can let PyZX auto-detect them\n",
"g.set_outputs(())\n",
"g.auto_detect_io()\n",
"print(g.inputs(), g.outputs())"
]
},
{
"cell_type": "markdown",
"cell_type": "raw",
"metadata": {},
"source": [
"We can also call Quantomatic from PyZX. To do this we first need to tell PyZX where the Quantomatic executable can be found:"
"we can export a diagram to a JSON format that can be loaded back into PyZX (or ZXLive):"
]
},
{
@@ -262,14 +243,14 @@
"metadata": {},
"outputs": [],
"source": [
"zx.quantomatic.quantomatic_location = os.path.join('path', 'to', 'Quantomatic.jar')"
"print(g.to_json())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can load a PyZX graph into Quantomatic using the following line:"
"We can call ZXLive from within a Jupyter notebook, in order to modify diagrams on the fly:"
]
},
{
@@ -278,18 +259,39 @@
"metadata": {},
"outputs": [],
"source": [
"result = zx.quantomatic.edit_graph(g)"
"%gui qt6\n",
"\n",
"# First make sure zxlive is installed by `pip install zxlive`\n",
"from zxlive import app\n",
"\n",
"g = zx.Graph()\n",
"g.add_vertex(zx.VertexType.Z, 0, 0)\n",
"g.add_vertex(zx.VertexType.X, 0, 1)\n",
"g.add_edge((0, 1))\n",
"zx.draw(g)\n",
"\n",
"zxl = app.get_embedded_app()\n",
"zxl.edit_graph(g, 'g1')\n",
"zxl.edit_graph(g, 'g2')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This starts Quantomatic with the graph ``g`` loaded. When you are done editing the graph, you simply save the file in Quantomatic, and close it. The result is then loaded and returned.\n",
"\n",
"NOTE1: The Notebook will be blocked until the Quantomatic executable is closed.\n",
"\n",
"NOTE2: Currently this only works with a recent build of Quantomatic that is as of yet only available via the repository, so make sure you are working with an up-to-date branch of Quantomatic."
"After making some edits within ZXLive, we can get the diagram back into this window so we can continue to do further work with them:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"zx.draw(zxl.get_copy_of_graph('g1'))\n",
"zx.draw(zxl.get_copy_of_graph('g2'))\n",
"#Note that ZXLive only works with MultiGraph's, and hence zxl.get_copy_of_graph() always returns an instance of MultiGraph, \n",
"#and not of the default graph backend."
]
},
{
@@ -689,7 +691,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -703,7 +705,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
"version": "3.11.2"
}
},
"nbformat": 4,
10 changes: 1 addition & 9 deletions doc/api.rst
Original file line number Diff line number Diff line change
@@ -150,7 +150,7 @@ Below is listed the content of ``drawing.py``.
:undoc-members:


Tikz and Quantomatic functionality
Tikz functionality
----------------------------------

.. _tikz:
@@ -165,11 +165,3 @@ Below is listed the content of ``tikz.py``.

.. _quanto:

Below is listed the content of ``quantomatic.py``.

.. module:: quantomatic

.. automodule:: pyzx.quantomatic
:members:
:undoc-members:

1 change: 0 additions & 1 deletion pyzx/__init__.py
Original file line number Diff line number Diff line change
@@ -31,7 +31,6 @@
from .local_search.genetic import GeneticOptimizer
from .circuit.qasmparser import qasm
from .circuit.sqasm import sqasm
from . import quantomatic
from . import generate
from . import todd
from . import linalg
19 changes: 0 additions & 19 deletions pyzx/graph/jsonparser.py
Original file line number Diff line number Diff line change
@@ -431,22 +431,3 @@ def to_graphml(g: BaseGraph[VT,ET]) -> str:
return gml


# class ComplexEncoder(json.JSONEncoder):
# def default(self, obj):
# if isinstance(obj, complex):
# return str(obj)
# return super().default(obj)

# class ComplexDecoder(json.JSONDecoder):
# def __init__(self, *args, **kwargs):
# json.JSONDecoder.__init__(self, object_hook=self.object_hook, *args, **kwargs)

# def object_hook(self, dct):
# for k, v in dct.items():
# if isinstance(v, str):
# try:
# dct[k] = complex(v)
# except ValueError:
# pass
# return dct

Loading
Loading