|
@@ -145,6 +145,41 @@ But these operations will be very slow. Let's have a look at the stabilizer tabl |
|
|
>>> print tab[0, 0] |
|
|
>>> print tab[0, 0] |
|
|
3 |
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
Visualization |
|
|
|
|
|
---------------------- |
|
|
|
|
|
|
|
|
|
|
|
``abp`` comes with a tool to visualize graph states in a WebGL compatible web browser (Chrome, Firefox, Safari etc). It uses a client-server architecture. |
|
|
|
|
|
|
|
|
|
|
|
First, run ``abpserver -v`` in a terminal: |
|
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash |
|
|
|
|
|
|
|
|
|
|
|
$ abpserver -v |
|
|
|
|
|
Listening on port 5000 for clients.. |
|
|
|
|
|
|
|
|
|
|
|
This ought to pop open a browser window at ``http://localhost:5001/``. You can run ``abpserver --help`` for help. Now, in another terminal, use ``abp.fancy.GraphState`` to run a Clifford circuit:: |
|
|
|
|
|
|
|
|
|
|
|
>>> from abp.fancy import GraphState |
|
|
|
|
|
>>> g = GraphState(10) |
|
|
|
|
|
>>> g.act_circuit([(i, "hadamard") for i in range(10)]) |
|
|
|
|
|
>>> g.act_circuit([((i, i+1), "cz") for i in range(9)]) |
|
|
|
|
|
>>> g.update() |
|
|
|
|
|
|
|
|
|
|
|
And you should see a 3D visualization of the state. You can call ``update()`` in a loop to see an animation. |
|
|
|
|
|
|
|
|
|
|
|
By default, the graph is automatically laid out in 3D using the Fruchterman-Reingold force-directed algorithm (i.e. springs). If you want to specify geometry, give each node a position attribute:: |
|
|
|
|
|
|
|
|
|
|
|
>>> g.add_qubit(0, position={"x": 0, "y":0, "z":0}, vop="identity") |
|
|
|
|
|
>>> g.add_qubit(0, position={"x": 1, "y":0, "z":0}, vop="identity") |
|
|
|
|
|
|
|
|
|
|
|
There's a utility function in ``abp.util`` to construct those dictionaries:: |
|
|
|
|
|
|
|
|
|
|
|
>>> from abp.util import xyz |
|
|
|
|
|
>>> g.add_qubit(0, position=xyz(0, 0, 0), vop="identity") |
|
|
|
|
|
>>> g.add_qubit(1, position=xyz(0, 0, 1), vop="identity") |
|
|
|
|
|
|
|
|
|
|
|
Note that if **any** nodes are missing a ``position`` attribute, ``abp`` will revert to automatic layout for **all** qubits. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GraphState API |
|
|
GraphState API |
|
|
------------------------- |
|
|
------------------------- |
|
@@ -169,30 +204,6 @@ The ``clifford`` module provides a few useful functions: |
|
|
.. autofunction:: abp.clifford.use_old_cz |
|
|
.. autofunction:: abp.clifford.use_old_cz |
|
|
:noindex: |
|
|
:noindex: |
|
|
|
|
|
|
|
|
Visualization |
|
|
|
|
|
---------------------- |
|
|
|
|
|
|
|
|
|
|
|
``abp`` comes with a tool to visualize graph states in a WebGL compatible web browser (Chrome, Firefox, Safari etc). It uses a client-server architecture. |
|
|
|
|
|
|
|
|
|
|
|
First, run ``abpserver`` in a terminal: |
|
|
|
|
|
|
|
|
|
|
|
.. code-block:: bash |
|
|
|
|
|
|
|
|
|
|
|
$ abpserver |
|
|
|
|
|
Listening on port 5000 for clients.. |
|
|
|
|
|
|
|
|
|
|
|
Then browse to ``http://localhost:5001/`` (in some circumstances ``abp`` will automatically pop a browser window). |
|
|
|
|
|
|
|
|
|
|
|
Now, in another terminal, use ``abp.fancy.GraphState`` to run a Clifford circuit:: |
|
|
|
|
|
|
|
|
|
|
|
>>> from abp.fancy import GraphState |
|
|
|
|
|
>>> g = GraphState(10) |
|
|
|
|
|
>>> g.act_circuit([(i, "hadamard") for i in range(10)]) |
|
|
|
|
|
>>> g.act_circuit([((i, i+1), "cz") for i in range(9)]) |
|
|
|
|
|
>>> g.update() |
|
|
|
|
|
|
|
|
|
|
|
And you should see a 3D visualization of the state. You can call ``update()`` in a loop to see an animation. |
|
|
|
|
|
|
|
|
|
|
|
Reference |
|
|
Reference |
|
|
---------------------------- |
|
|
---------------------------- |
|
|
|
|
|
|
|
|