https://github.com/strilanc/python-chp-stabilizer-simulator
Simple python implementation of Scott Aaronson et al's CHP simulator.
https://github.com/strilanc/python-chp-stabilizer-simulator
Last synced: 3 months ago
JSON representation
Simple python implementation of Scott Aaronson et al's CHP simulator.
- Host: GitHub
- URL: https://github.com/strilanc/python-chp-stabilizer-simulator
- Owner: Strilanc
- License: apache-2.0
- Created: 2019-05-28T04:23:25.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-07-03T22:05:08.000Z (almost 7 years ago)
- Last Synced: 2025-05-22T05:46:40.166Z (about 1 year ago)
- Language: Python
- Size: 19.5 KB
- Stars: 19
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
Python CHP Stabilizer Simulator
-------------------------------
A simple reference python implementation of Scott Aaronson and Daniel Gottesman's CHP simulator
as defined in
`their 2004 paper "Improved Simulation of Stabilizer Circuits" `__.
This simulator is capable of simulating quantum stabilizer circuits in polynomial time and space.
Specifically, it uses ``O(q^2*m + q*c)`` time and ``O(q^2)`` space where
``q`` is the number of qubits,
``m`` is the number of measurements,
and ``c`` is the number of Hadamard/CNOT/Phase gates.
Installation
------------
The ``chp_sim`` package is available on pypi and can be installed using ``pip``:
.. code-block:: bash
python -m pip install chp_sim
Alternatively, you can just copy paste the ``chp_sim`` directory of the github
repository into your project.
The only runtime dependency is ``numpy``.
Usage
-----
Here is an example of simulating
`a circuit `__:
.. code-block:: python
import chp_sim
sim = chp_sim.ChpSimulator(num_qubits=3)
# Desired circuit:
# 0: -------X-------S---H---M---
# |
# 1: -------|---X---S---H---M---
# | |
# 2: ---H---@---@-------H---M---
sim.hadamard(2)
sim.cnot(2, 0)
sim.cnot(2, 1)
sim.phase(0)
sim.phase(1)
sim.hadamard(0)
sim.hadamard(1)
sim.hadamard(2)
# Show internal simulator state.
print(sim, '\n')
# prints:
# -Y..
# -.Y.
# +..X
# ----
# +X.X
# +.XX
# +YYZ
# Perform measurements
v0 = sim.measure(0)
v1 = sim.measure(1)
v2 = sim.measure(2)
print(v0)
print(v1)
print(v2)
# prints [note: one of four possible results for this circuit]:
# True (random)
# False (random)
# False (determined)
# Check pattern the outputs should satisfy.
assert not v0.determined
assert not v1.determined
assert v2.determined
assert bool(v0) ^ bool(v1) ^ bool(v2)
Packaging
---------
(Notes to self on how to release a new version.)
1. Edit the source code as needed and run tests.
.. code-block:: bash
pytest
2. Build the wheel.
.. code-block:: bash
python3 setup.py -q bdist_wheel
ls dist
3. Upload to test pypi.
.. code-block:: bash
twine upload dist/*.whl --repository-url=https://test.pypi.org/legacy/ --username="${TEST_TWINE_USERNAME}" --password="${TEST_TWINE_PASSWORD}"
4. Verify the test package works.
.. code-block:: bash
mkvirtualenv test --python=/usr/bin/python3
pip install numpy
pip install chp_sim --index-url=https://test.pypi.org/simple/
python -c "import chp_sim; print(chp_sim.__version__); print(chp_sim.ChpSimulator(4))"
5. Upload to prod pypi.
.. code-block:: bash
twine upload dist/*.whl --username="${PROD_TWINE_USERNAME}" --password="${PROD_TWINE_PASSWORD}"
6. Verify the prod package works.
.. code-block:: bash
mkvirtualenv test --python=/usr/bin/python3
pip install chp_sim
python -c "import chp_sim; print(chp_sim.__version__); print(chp_sim.ChpSimulator(4))"