From 91b31ebcd04c753b4a0f386e6d7007380251dc8f Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Thu, 13 Jun 2019 11:08:21 +1000 Subject: [PATCH 01/18] Use Poetry and specify Python 3.7 required --- .gitignore | 3 + README.rst | 107 +++++ matplotlibrc | 1 + poetry.lock | 1067 +++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 69 +++ setup-poetry.sh | 42 ++ setup.py | 113 ++--- 7 files changed, 1328 insertions(+), 74 deletions(-) create mode 100644 README.rst create mode 100644 matplotlibrc create mode 100644 poetry.lock create mode 100644 pyproject.toml create mode 100755 setup-poetry.sh diff --git a/.gitignore b/.gitignore index 23e84f85..5547e439 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Example controls +*.csv + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/README.rst b/README.rst new file mode 100644 index 00000000..722e3d05 --- /dev/null +++ b/README.rst @@ -0,0 +1,107 @@ + +Q-CTRL Open Controls +==================== + +Q-CTRL Open Controls is an open-source Python package that makes it easy to create and deploy established error-robust quantum control protocols from the open literature. The aim of the package is to be the most comprehensive library of published and tested quantum control techniques developed by the community, with easy to use export functions allowing users to deploy these controls on: + + +* Custom quantum hardware +* Publicly available cloud quantum computers +* The `Q-CTRL product suite `_ + +Anyone interested in quantum control is welcome to contribute to this project. + +Table of Contents +----------------- + + +* `Installation <#installation>`_ +* `Usage <#usage>`_ +* `Contributing <#contributing>`_ +* `Credits <#credits>`_ +* `License <#license>`_ + +Installation +------------ + +Q-CTRL Open Controls can be install through ``pip`` or from source. We recommend the ``pip`` distribution to get the most recent stable release. If you want the latest features then install from source. + +Requirements +^^^^^^^^^^^^ + +To use Q-CTRL Open Controls you will need an installation of Python. We recommend using the `Anaconda `_ distribution of Python. Anaconda includes standard numerical and scientific Python packages which are optimally compiled for your machine. Follow the `Anaconda Installation `_ instructions and consult the `Anaconda User guide `_ to get started. + +We use interactive jupyter notebooks for our usage examples. The Anaconda python distribution comes with editors for these files, or you can `install the jupyter notebook editor `_ on its own. + +Using PyPi +^^^^^^^^^^ + +Use ``pip`` to install the latest version of Q-CTRL Open Controls. + +.. code-block:: shell + + $ pip install qctrl-open-controls + +From Source +^^^^^^^^^^^ + +The source code is hosted on `Github `_. The repository can be cloned using + +.. code-block:: shell + + $ git clone git@github.com:qctrl/python-open-controls.git + +Once the clone is complete, you can run the install script. + +.. code-block:: shell + + $ cd python-open-controls + $ python setup.py develop + +**Note:** We recommend installing using ``develop`` to point your installation at the source code in the directory where you cloned the repository. + +To test your installation run ``pytest`` in the ``python-open-controls`` directory. + +.. code-block:: shell + + $ pytest + +Usage +----- + +Usage depends on the application. We've provided a set of `example Jupyter notebooks `_ addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. + +Dynamical Decoupling Sequences (DDS) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Q-CTRL Open Controls can create a large library of standard DDS which can be exported in a variety of formats. + +Create a DDS +~~~~~~~~~~~~ + +`\ ``examples/creating_a_dds.ipynb`` `_ demonstrates how to use Q-CTRL Open Controls to create a DDS from a large library of published dynamical decoupling protocols. It also shows how to make Custom DDS with timings, offsets and unitaries defined by the user. The notebook shows how to export a DDS for deployment in the `Q-CTRL products `_ or your quantum hardware. + +Export a DDS to Qiskit +~~~~~~~~~~~~~~~~~~~~~~ + +`\ ``examples/export_a_dds_to_qiskit.ipynb`` `_ demonstrates how to take a DDS and convert it to a Qiskit circuit so it can be run on IBM's quantum computers. It also demonstrates using a DDS to improve the performance of a quantum circuit execution by extending the coherence time of a qubit. + +Export a DDS to Cirq +~~~~~~~~~~~~~~~~~~~~ + +`\ ``examples/export_a_dds_to_cirq.ipynb`` `_ demonstrates how to take a DDS and convert it to a Cirq circuit or schdule. It also shows how to run a circuit or schedule in a Cirq simulator. + +Contributing +------------ + +See `Contributing `_. + +Credits +------- + +See `Contributors `_. + +License +------- + +See `LICENSE `_. diff --git a/matplotlibrc b/matplotlibrc new file mode 100644 index 00000000..ee3279e2 --- /dev/null +++ b/matplotlibrc @@ -0,0 +1 @@ +backend: agg \ No newline at end of file diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..818354be --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1067 @@ +[[package]] +category = "main" +description = "Disable App Nap on OS X 10.9" +marker = "sys_platform == \"darwin\"" +name = "appnope" +optional = false +python-versions = "*" +version = "0.1.0" + +[[package]] +category = "main" +description = "Fast ASN.1 parser and serializer with definitions for private keys, public keys, certificates, CRL, OCSP, CMS, PKCS#3, PKCS#7, PKCS#8, PKCS#12, PKCS#5, X.509 and TSP" +name = "asn1crypto" +optional = false +python-versions = "*" +version = "0.24.0" + +[[package]] +category = "dev" +description = "An abstract syntax tree for Python with inference support." +name = "astroid" +optional = false +python-versions = ">=3.4.*" +version = "2.2.5" + +[package.dependencies] +lazy-object-proxy = "*" +six = "*" +typed-ast = ">=1.3.0" +wrapt = "*" + +[[package]] +category = "main" +description = "Atomic file writes." +name = "atomicwrites" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.3.0" + +[[package]] +category = "main" +description = "Classes Without Boilerplate" +name = "attrs" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "19.1.0" + +[[package]] +category = "main" +description = "Specifications for callback functions passed in to an API" +name = "backcall" +optional = false +python-versions = "*" +version = "0.1.0" + +[[package]] +category = "main" +description = "Extensible memoizing collections and decorators" +name = "cachetools" +optional = false +python-versions = "*" +version = "3.1.1" + +[[package]] +category = "main" +description = "Python package for providing Mozilla's CA Bundle." +name = "certifi" +optional = false +python-versions = "*" +version = "2019.3.9" + +[[package]] +category = "main" +description = "Foreign Function Interface for Python calling C code." +name = "cffi" +optional = false +python-versions = "*" +version = "1.12.3" + +[package.dependencies] +pycparser = "*" + +[[package]] +category = "main" +description = "Universal encoding detector for Python 2 and 3" +name = "chardet" +optional = false +python-versions = "*" +version = "3.0.4" + +[[package]] +category = "main" +description = "A framework for creating, editing, and invoking Noisy Intermediate Scale Quantum (NISQ) circuits." +name = "cirq" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*, !=3.5.0, !=3.5.1" +version = "0.5.0" + +[package.dependencies] +enum34 = "*" +google-api-python-client = ">=1.6,<2.0" +matplotlib = ">=2.1,<3.0" +networkx = ">=2.1,<3.0" +numpy = ">=1.12,<2.0" +protobuf = ">=3.5,<4.0" +scipy = ">=1.1,<2.0" +sortedcontainers = ">=1.5,<2.0" +sympy = "*" +typing = ">=3.6,<4.0" +typing-extensions = "*" + +[[package]] +category = "main" +description = "Cross-platform colored terminal text." +name = "colorama" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.4.1" + +[[package]] +category = "main" +description = "Code coverage measurement for Python" +name = "coverage" +optional = false +python-versions = "*" +version = "4.4.2" + +[[package]] +category = "main" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +name = "cryptography" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "2.7" + +[package.dependencies] +asn1crypto = ">=0.21.0" +cffi = ">=1.8,<1.11.3 || >1.11.3" +six = ">=1.4.1" + +[[package]] +category = "main" +description = "Composable style cycles" +name = "cycler" +optional = false +python-versions = "*" +version = "0.10.0" + +[package.dependencies] +six = "*" + +[[package]] +category = "main" +description = "Better living through Python with decorators" +name = "decorator" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*" +version = "4.4.0" + +[[package]] +category = "main" +description = "Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4" +name = "enum34" +optional = false +python-versions = "*" +version = "1.1.6" + +[[package]] +category = "main" +description = "Google API Client Library for Python" +name = "google-api-python-client" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "1.7.9" + +[package.dependencies] +google-auth = ">=1.4.1" +google-auth-httplib2 = ">=0.0.3" +httplib2 = ">=0.9.2,<1dev" +six = ">=1.6.1,<2dev" +uritemplate = ">=3.0.0,<4dev" + +[[package]] +category = "main" +description = "Google Authentication Library" +name = "google-auth" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "1.6.3" + +[package.dependencies] +cachetools = ">=2.0.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4" +six = ">=1.9.0" + +[[package]] +category = "main" +description = "Google Authentication Library: httplib2 transport" +name = "google-auth-httplib2" +optional = false +python-versions = "*" +version = "0.0.3" + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.9.1" + +[[package]] +category = "main" +description = "A comprehensive HTTP client library." +name = "httplib2" +optional = false +python-versions = "*" +version = "0.13.0" + +[[package]] +category = "main" +description = "Internationalized Domain Names in Applications (IDNA)" +name = "idna" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.8" + +[[package]] +category = "main" +description = "Read metadata from Python packages" +name = "importlib-metadata" +optional = false +python-versions = ">=2.7,!=3.0,!=3.1,!=3.2,!=3.3" +version = "0.18" + +[package.dependencies] +zipp = ">=0.5" + +[[package]] +category = "main" +description = "IPython Kernel for Jupyter" +name = "ipykernel" +optional = false +python-versions = ">=3.4" +version = "5.1.1" + +[package.dependencies] +ipython = ">=5.0.0" +jupyter-client = "*" +tornado = ">=4.2" +traitlets = ">=4.1.0" + +[[package]] +category = "main" +description = "IPython: Productive Interactive Computing" +name = "ipython" +optional = false +python-versions = ">=3.5" +version = "7.5.0" + +[package.dependencies] +appnope = "*" +backcall = "*" +colorama = "*" +decorator = "*" +jedi = ">=0.10" +pexpect = "*" +pickleshare = "*" +prompt-toolkit = ">=2.0.0,<2.1.0" +pygments = "*" +setuptools = ">=18.5" +traitlets = ">=4.2" + +[[package]] +category = "main" +description = "Vestigial utilities from IPython" +name = "ipython-genutils" +optional = false +python-versions = "*" +version = "0.2.0" + +[[package]] +category = "dev" +description = "A Python utility / library to sort Python imports." +name = "isort" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "4.3.20" + +[[package]] +category = "main" +description = "An autocompletion tool for Python that can be used for text editors." +name = "jedi" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.13.3" + +[package.dependencies] +parso = ">=0.3.0" + +[[package]] +category = "main" +description = "An implementation of JSON Schema validation for Python" +name = "jsonschema" +optional = false +python-versions = "*" +version = "2.6.0" + +[[package]] +category = "main" +description = "Jupyter protocol implementation and client libraries" +name = "jupyter-client" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "5.2.4" + +[package.dependencies] +jupyter-core = "*" +python-dateutil = ">=2.1" +pyzmq = ">=13" +tornado = ">=4.1" +traitlets = "*" + +[[package]] +category = "main" +description = "Jupyter core package. A base package on which Jupyter projects rely." +name = "jupyter-core" +optional = false +python-versions = "*" +version = "4.4.0" + +[package.dependencies] +traitlets = "*" + +[[package]] +category = "main" +description = "A fast implementation of the Cassowary constraint solver" +name = "kiwisolver" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.1.0" + +[package.dependencies] +setuptools = "*" + +[[package]] +category = "dev" +description = "A fast and thorough lazy object proxy." +name = "lazy-object-proxy" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.4.1" + +[[package]] +category = "main" +description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +name = "marshmallow" +optional = false +python-versions = "*" +version = "2.19.2" + +[[package]] +category = "main" +description = "An unofficial extension to Marshmallow to allow for polymorphic fields" +name = "marshmallow-polyfield" +optional = false +python-versions = "*" +version = "3.2" + +[package.dependencies] +marshmallow = ">=2.0.0" + +[[package]] +category = "main" +description = "Python plotting package" +name = "matplotlib" +optional = false +python-versions = "*" +version = "2.2.4" + +[package.dependencies] +cycler = ">=0.10" +kiwisolver = ">=1.0.1" +numpy = ">=1.7.1" +pyparsing = ">=2.0.1,<2.0.4 || >2.0.4,<2.1.2 || >2.1.2,<2.1.6 || >2.1.6" +python-dateutil = ">=2.1" +pytz = "*" +six = ">=1.10" + +[[package]] +category = "dev" +description = "McCabe checker, plugin for flake8" +name = "mccabe" +optional = false +python-versions = "*" +version = "0.6.1" + +[[package]] +category = "main" +description = "More routines for operating on iterables, beyond itertools" +marker = "python_version > \"2.7\"" +name = "more-itertools" +optional = false +python-versions = ">=3.4" +version = "7.0.0" + +[[package]] +category = "main" +description = "Python library for arbitrary-precision floating-point arithmetic" +name = "mpmath" +optional = false +python-versions = "*" +version = "1.1.0" + +[[package]] +category = "main" +description = "The Jupyter Notebook format" +name = "nbformat" +optional = false +python-versions = "*" +version = "4.4.0" + +[package.dependencies] +ipython-genutils = "*" +jsonschema = ">=2.4,<2.5.0 || >2.5.0" +jupyter-core = "*" +traitlets = ">=4.1" + +[[package]] +category = "main" +description = "A py.test plugin to validate Jupyter notebooks" +name = "nbval" +optional = false +python-versions = "*" +version = "0.9.1" + +[package.dependencies] +coverage = "*" +ipykernel = "*" +jupyter-client = "*" +nbformat = "*" +pytest = ">=2.8" +six = "*" + +[[package]] +category = "main" +description = "Python package for creating and manipulating graphs and networks" +name = "networkx" +optional = false +python-versions = ">=3.5" +version = "2.3" + +[package.dependencies] +decorator = ">=4.3.0" + +[[package]] +category = "main" +description = "Creates NTLM authentication structures" +name = "ntlm-auth" +optional = false +python-versions = ">=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "1.3.0" + +[[package]] +category = "main" +description = "NumPy is the fundamental package for array computing with Python." +name = "numpy" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "1.16.4" + +[[package]] +category = "main" +description = "Core utilities for Python packages" +name = "packaging" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "19.0" + +[package.dependencies] +pyparsing = ">=2.0.2" +six = "*" + +[[package]] +category = "main" +description = "A Python Parser" +name = "parso" +optional = false +python-versions = "*" +version = "0.4.0" + +[[package]] +category = "main" +description = "Pexpect allows easy control of interactive console applications." +marker = "sys_platform != \"win32\"" +name = "pexpect" +optional = false +python-versions = "*" +version = "4.7.0" + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +category = "main" +description = "Tiny 'shelve'-like database with concurrency support" +name = "pickleshare" +optional = false +python-versions = "*" +version = "0.7.5" + +[[package]] +category = "main" +description = "Python Imaging Library (Fork)" +name = "pillow" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "6.0.0" + +[[package]] +category = "main" +description = "plugin and hook calling mechanisms for python" +name = "pluggy" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "0.12.0" + +[package.dependencies] +importlib-metadata = ">=0.12" + +[[package]] +category = "main" +description = "Python Lex & Yacc" +name = "ply" +optional = false +python-versions = "*" +version = "3.11" + +[[package]] +category = "main" +description = "Library for building powerful interactive command lines in Python" +name = "prompt-toolkit" +optional = false +python-versions = "*" +version = "2.0.9" + +[package.dependencies] +six = ">=1.9.0" +wcwidth = "*" + +[[package]] +category = "main" +description = "Protocol Buffers" +name = "protobuf" +optional = false +python-versions = "*" +version = "3.8.0" + +[package.dependencies] +setuptools = "*" +six = ">=1.9" + +[[package]] +category = "main" +description = "Cross-platform lib for process and system monitoring in Python." +name = "psutil" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "5.6.3" + +[[package]] +category = "main" +description = "Run a subprocess in a pseudo terminal" +marker = "sys_platform != \"win32\"" +name = "ptyprocess" +optional = false +python-versions = "*" +version = "0.6.0" + +[[package]] +category = "main" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +name = "py" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.8.0" + +[[package]] +category = "main" +description = "ASN.1 types and codecs" +name = "pyasn1" +optional = false +python-versions = "*" +version = "0.4.5" + +[[package]] +category = "main" +description = "A collection of ASN.1-based protocols modules." +name = "pyasn1-modules" +optional = false +python-versions = "*" +version = "0.2.5" + +[package.dependencies] +pyasn1 = ">=0.4.1,<0.5.0" + +[[package]] +category = "dev" +description = "Python style guide checker" +name = "pycodestyle" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.5.0" + +[[package]] +category = "main" +description = "C parser in Python" +name = "pycparser" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.19" + +[[package]] +category = "dev" +description = "Python docstring style checker" +name = "pydocstyle" +optional = false +python-versions = "*" +version = "3.0.0" + +[package.dependencies] +six = "*" +snowballstemmer = "*" + +[[package]] +category = "dev" +description = "passive checker of Python programs" +name = "pyflakes" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.1.1" + +[[package]] +category = "main" +description = "Pygments is a syntax highlighting package written in Python." +name = "pygments" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.4.2" + +[[package]] +category = "dev" +description = "pylama -- Code audit tool for python" +name = "pylama" +optional = false +python-versions = "*" +version = "7.7.1" + +[package.dependencies] +mccabe = ">=0.5.2" +pycodestyle = ">=2.3.1" +pydocstyle = ">=2.0.0" +pyflakes = ">=1.5.0" + +[[package]] +category = "main" +description = "Python library for encoding unicode to latex and for parsing LaTeX to generate unicode text" +name = "pylatexenc" +optional = false +python-versions = "*" +version = "1.5" + +[[package]] +category = "dev" +description = "python code static checker" +name = "pylint" +optional = false +python-versions = ">=3.4.*" +version = "2.3.1" + +[package.dependencies] +astroid = ">=2.2.0,<3" +colorama = "*" +isort = ">=4.2.5,<5" +mccabe = ">=0.6,<0.7" + +[[package]] +category = "dev" +description = "Run pylint recursively on all py files in current and sub directories" +name = "pylint-runner" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "0.5.4" + +[package.dependencies] +colorama = "*" +pylint = "*" + +[[package]] +category = "main" +description = "Python parsing module" +name = "pyparsing" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.4.0" + +[[package]] +category = "main" +description = "pytest: simple powerful testing with Python" +name = "pytest" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "4.6.3" + +[package.dependencies] +atomicwrites = ">=1.0" +attrs = ">=17.4.0" +colorama = "*" +importlib-metadata = ">=0.12" +packaging = "*" +pluggy = ">=0.12,<1.0" +py = ">=1.5.0" +six = ">=1.10.0" +wcwidth = "*" + +[package.dependencies.more-itertools] +python = ">=2.8" +version = ">=4.0.0" + +[[package]] +category = "main" +description = "Extensions to the standard Python datetime module" +name = "python-dateutil" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.8.0" + +[package.dependencies] +six = ">=1.5" + +[[package]] +category = "main" +description = "World timezone definitions, modern and historical" +name = "pytz" +optional = false +python-versions = "*" +version = "2019.1" + +[[package]] +category = "main" +description = "Python bindings for 0MQ" +name = "pyzmq" +optional = false +python-versions = ">=2.7,!=3.0*,!=3.1*,!=3.2*" +version = "18.0.1" + +[[package]] +category = "main" +description = "Qiskit provider for accessing the quantum devices and simulators at IBMQ" +name = "qiskit-ibmq-provider" +optional = false +python-versions = ">=3.5" +version = "0.2.2" + +[package.dependencies] +qiskit-terra = ">=0.8" +requests = ">=2.19" +requests-ntlm = ">=1.1.0" +websockets = ">=7,<8" + +[[package]] +category = "main" +description = "Software for developing quantum computing programs" +name = "qiskit-terra" +optional = false +python-versions = ">=3.5" +version = "0.8.1" + +[package.dependencies] +jsonschema = ">=2.6,<2.7" +marshmallow = ">=2.17.0,<3" +marshmallow-polyfield = ">=3.2,<4" +networkx = ">=2.2" +numpy = ">=1.13" +pillow = ">=4.2.1" +ply = ">=3.10" +psutil = ">=5" +pylatexenc = ">=1.4" +scipy = ">=1.0" +sympy = ">=1.3" + +[[package]] +category = "main" +description = "Python HTTP for Humans." +name = "requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "2.22.0" + +[package.dependencies] +certifi = ">=2017.4.17" +chardet = ">=3.0.2,<3.1.0" +idna = ">=2.5,<2.9" +urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" + +[[package]] +category = "main" +description = "This package allows for HTTP NTLM authentication using the requests library." +name = "requests-ntlm" +optional = false +python-versions = "*" +version = "1.1.0" + +[package.dependencies] +cryptography = ">=1.3" +ntlm-auth = ">=1.0.2" +requests = ">=2.0.0" + +[[package]] +category = "main" +description = "Pure-Python RSA implementation" +name = "rsa" +optional = false +python-versions = "*" +version = "4.0" + +[package.dependencies] +pyasn1 = ">=0.1.3" + +[[package]] +category = "main" +description = "SciPy: Scientific Library for Python" +name = "scipy" +optional = false +python-versions = ">=3.5" +version = "1.3.0" + +[package.dependencies] +numpy = ">=1.13.3" + +[[package]] +category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*" +version = "1.12.0" + +[[package]] +category = "dev" +description = "This package provides 16 stemmer algorithms (15 + Poerter English stemmer) generated from Snowball algorithms." +name = "snowballstemmer" +optional = false +python-versions = "*" +version = "1.2.1" + +[[package]] +category = "main" +description = "Python Sorted Container Types: SortedList, SortedDict, and SortedSet" +name = "sortedcontainers" +optional = false +python-versions = "*" +version = "1.5.10" + +[[package]] +category = "main" +description = "Computer algebra system (CAS) in Python" +name = "sympy" +optional = false +python-versions = "*" +version = "1.4" + +[package.dependencies] +mpmath = ">=0.19" + +[[package]] +category = "main" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +name = "tornado" +optional = false +python-versions = ">= 3.5" +version = "6.0.2" + +[[package]] +category = "main" +description = "Traitlets Python config system" +name = "traitlets" +optional = false +python-versions = "*" +version = "4.3.2" + +[package.dependencies] +decorator = "*" +ipython-genutils = "*" +six = "*" + +[[package]] +category = "dev" +description = "a fork of Python 2 and 3 ast modules with type comment support" +marker = "implementation_name == \"cpython\"" +name = "typed-ast" +optional = false +python-versions = "*" +version = "1.4.0" + +[[package]] +category = "main" +description = "Type Hints for Python" +name = "typing" +optional = false +python-versions = "*" +version = "3.6.6" + +[[package]] +category = "main" +description = "Backported and Experimental Type Hints for Python 3.5+" +name = "typing-extensions" +optional = false +python-versions = "*" +version = "3.7.2" + +[package.dependencies] +typing = ">=3.6.2" + +[[package]] +category = "main" +description = "URI templates" +name = "uritemplate" +optional = false +python-versions = "*" +version = "3.0.0" + +[[package]] +category = "main" +description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "urllib3" +optional = false +python-versions = "*" +version = "1.22" + +[[package]] +category = "main" +description = "Measures number of Terminal column cells of wide-character codes" +name = "wcwidth" +optional = false +python-versions = "*" +version = "0.1.7" + +[[package]] +category = "main" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +name = "websockets" +optional = false +python-versions = ">=3.4" +version = "7.0" + +[[package]] +category = "dev" +description = "Module for decorators, wrappers and monkey patching." +name = "wrapt" +optional = false +python-versions = "*" +version = "1.11.1" + +[[package]] +category = "main" +description = "Backport of pathlib-compatible object wrapper for zip files" +name = "zipp" +optional = false +python-versions = ">=2.7" +version = "0.5.1" + +[metadata] +content-hash = "5ca21bcf76acaf727d9ccd70766d085923a945cb100ea95dcf61d57fdf42da5b" +python-versions = ">=3.7.3" + +[metadata.hashes] +appnope = ["5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0", "8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71"] +asn1crypto = ["2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87", "9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"] +astroid = ["6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", "b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4"] +atomicwrites = ["03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4", "75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"] +attrs = ["69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", "f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"] +backcall = ["38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", "bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2"] +cachetools = ["428266a1c0d36dc5aca63a2d7c5942e88c2c898d72139fca0e97fdd2380517ae", "8ea2d3ce97850f31e4a08b0e2b5e6c34997d7216a9d2c98e0f3978630d4da69a"] +certifi = ["59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", "b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae"] +cffi = ["041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774", "046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d", "066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90", "066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b", "2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63", "300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45", "34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25", "46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3", "4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b", "4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647", "4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016", "50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4", "55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb", "5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753", "59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7", "73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9", "a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f", "a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8", "a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f", "a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc", "ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42", "b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3", "d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909", "d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45", "dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d", "e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512", "e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff", "ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201"] +chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"] +cirq = ["2b0d366285bdafd9f6713a67a327aab97628683448d73c13c5c09fc35043f088", "e235d758146bec6bb74f0f5783d735a1953e6dfe39c2569aee295f977a1485c4"] +colorama = ["05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", "f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"] +coverage = ["007eeef7e23f9473622f7d94a3e029a45d55a92a1f083f0f3512f5ab9a669b05", "0388c12539372bb92d6dde68b4627f0300d948965bbb7fc104924d715fdc0965", "079248312838c4c8f3494934ab7382a42d42d5f365f0cf7516f938dbb3f53f3f", "17307429935f96c986a1b1674f78079528833410750321d22b5fb35d1883828e", "1afccd7e27cac1b9617be8c769f6d8a6d363699c9b86820f40c74cfb3328921c", "2ad357d12971e77360034c1596011a03f50c0f9e1ecd12e081342b8d1aee2236", "2b4d7f03a8a6632598cbc5df15bbca9f778c43db7cf1a838f4fa2c8599a8691a", "2e1a5c6adebb93c3b175103c2f855eda957283c10cf937d791d81bef8872d6ca", "309d91bd7a35063ec7a0e4d75645488bfab3f0b66373e7722f23da7f5b0f34cc", "358d635b1fc22a425444d52f26287ae5aea9e96e254ff3c59c407426f44574f4", "3f4d0b3403d3e110d2588c275540649b1841725f5a11a7162620224155d00ba2", "43a155eb76025c61fc20c3d03b89ca28efa6f5be572ab6110b2fb68eda96bfea", "493082f104b5ca920e97a485913de254cbe351900deed72d4264571c73464cd0", "4c4f368ffe1c2e7602359c2c50233269f3abe1c48ca6b288dcd0fb1d1c679733", "5ff16548492e8a12e65ff3d55857ccd818584ed587a6c2898a9ebbe09a880674", "66f393e10dd866be267deb3feca39babba08ae13763e0fc7a1063cbe1f8e49f6", "700d7579995044dc724847560b78ac786f0ca292867447afda7727a6fbaa082e", "81912cfe276e0069dca99e1e4e6be7b06b5fc8342641c6b472cb2fed7de7ae18", "82cbd3317320aa63c65555aa4894bf33a13fb3a77f079059eb5935eea415938d", "845fddf89dca1e94abe168760a38271abfc2e31863fbb4ada7f9a99337d7c3dc", "87d942863fe74b1c3be83a045996addf1639218c2cb89c5da18c06c0fe3917ea", "9721f1b7275d3112dc7ccf63f0553c769f09b5c25a26ee45872c7f5c09edf6c1", "a4497faa4f1c0fc365ba05eaecfb6b5d24e3c8c72e95938f9524e29dadb15e76", "a7cfaebd8f24c2b537fa6a271229b051cdac9c1734bb6f939ccfc7c055689baa", "ab3508df9a92c1d3362343d235420d08e2662969b83134f8a97dc1451cbe5e84", "b0059630ca5c6b297690a6bf57bf2fdac1395c24b7935fd73ee64190276b743b", "b6cebae1502ce5b87d7c6f532fa90ab345cfbda62b95aeea4e431e164d498a3d", "bd4800e32b4c8d99c3a2c943f1ac430cbf80658d884123d19639bcde90dad44a", "cdd92dd9471e624cd1d8c1a2703d25f114b59b736b0f1f659a98414e535ffb3d", "d00e29b78ff610d300b2c37049a41234d48ea4f2d2581759ebcf67caaf731c31", "d1ee76f560c3c3e8faada866a07a32485445e16ed2206ac8378bd90dadffb9f0", "dd707a21332615108b736ef0b8513d3edaf12d2a7d5fc26cd04a169a8ae9b526", "e3ba9b14607c23623cf38f90b23f5bed4a3be87cbfa96e2e9f4eabb975d1e98b", "e9a0e1caed2a52f15c96507ab78a48f346c05681a49c5b003172f8073da6aa6b", "eea9135432428d3ca7ee9be86af27cb8e56243f73764a9b6c3e0bda1394916be", "f29841e865590af72c4b90d7b5b8e93fd560f5dea436c1d5ee8053788f9285de", "f3a5c6d054c531536a83521c00e5d4004f1e126e2e2556ce399bef4180fbe540", "f87f522bde5540d8a4b11df80058281ac38c44b13ce29ced1e294963dd51a8f8", "f8c55dd0f56d3d618dfacf129e010cbe5d5f94b6951c1b2f13ab1a2f79c284da", "f98b461cb59f117887aa634a66022c0bd394278245ed51189f63a036516e32de"] +cryptography = ["24b61e5fcb506424d3ec4e18bca995833839bf13c59fc43e530e488f28d46b8c", "25dd1581a183e9e7a806fe0543f485103232f940fcfc301db65e630512cce643", "3452bba7c21c69f2df772762be0066c7ed5dc65df494a1d53a58b683a83e1216", "41a0be220dd1ed9e998f5891948306eb8c812b512dc398e5a01846d855050799", "5751d8a11b956fbfa314f6553d186b94aa70fdb03d8a4d4f1c82dcacf0cbe28a", "5f61c7d749048fa6e3322258b4263463bfccefecb0dd731b6561cb617a1d9bb9", "72e24c521fa2106f19623a3851e9f89ddfdeb9ac63871c7643790f872a305dfc", "7b97ae6ef5cba2e3bb14256625423413d5ce8d1abb91d4f29b6d1a081da765f8", "961e886d8a3590fd2c723cf07be14e2a91cf53c25f02435c04d39e90780e3b53", "96d8473848e984184b6728e2c9d391482008646276c3ff084a1bd89e15ff53a1", "ae536da50c7ad1e002c3eee101871d93abdc90d9c5f651818450a0d3af718609", "b0db0cecf396033abb4a93c95d1602f268b3a68bb0a9cc06a7cff587bb9a7292", "cfee9164954c186b191b91d4193989ca994703b2fff406f71cf454a2d3c7327e", "e6347742ac8f35ded4a46ff835c60e68c22a536a8ae5c4422966d06946b6d4c6", "f27d93f0139a3c056172ebb5d4f9056e770fdf0206c2f422ff2ebbad142e09ed", "f57b76e46a58b63d1c6375017f4564a28f19a5ca912691fd2e4261b3414b618d"] +cycler = ["1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", "cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"] +decorator = ["86156361c50488b84a3f148056ea716ca587df2f0de1d34750d35c21312725de", "f069f3a01830ca754ba5258fde2278454a0b5b79e0d7f5c13b3b97e57d4acff6"] +enum34 = ["2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850", "644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a", "6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79", "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"] +google-api-python-client = ["048da0d68564380ee23b449e5a67d4666af1b3b536d2fb0a02cee1ad540fa5ec", "5def5a485b1cbc998b8f869456c7bde0c0e6d3d0a5ea1f300b5ef57cb4b1ce8f"] +google-auth = ["0f7c6a64927d34c1a474da92cfc59e552a5d3b940d3266606c6a28b72888b9e4", "20705f6803fd2c4d1cc2dcb0df09d4dfcb9a7d51fd59e94a3a28231fd93119ed"] +google-auth-httplib2 = ["098fade613c25b4527b2c08fa42d11f3c2037dda8995d86de0745228e965d445", "f1c437842155680cf9918df9bc51c1182fda41feef88c34004bd1978c8157e08"] +httplib2 = ["158fbd0ffbba536829d664bf3f32c4f45df41f8f791663665162dfaf21ffd075", "d1146939d270f1f1eb8cbf8f5aa72ff37d897faccca448582bb1e180aeb4c6b2"] +idna = ["c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"] +importlib-metadata = ["6dfd58dfe281e8d240937776065dd3624ad5469c835248219bd16cf2e12dbeb7", "cb6ee23b46173539939964df59d3d72c3e0c1b5d54b84f1d8a7e912fe43612db"] +ipykernel = ["346189536b88859937b5f4848a6fd85d1ad0729f01724a411de5cae9b618819c", "f0e962052718068ad3b1d8bcc703794660858f58803c3798628817f492a8769c"] +ipython = ["54c5a8aa1eadd269ac210b96923688ccf01ebb2d0f21c18c3c717909583579a8", "e840810029224b56cd0d9e7719dc3b39cf84d577f8ac686547c8ba7a06eeab26"] +ipython-genutils = ["72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", "eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"] +isort = ["c40744b6bc5162bbb39c1257fe298b7a393861d50978b565f3ccd9cb9de0182a", "f57abacd059dc3bd666258d1efb0377510a89777fda3e3274e3c01f7c03ae22d"] +jedi = ["2bb0603e3506f708e792c7f4ad8fc2a7a9d9c2d292a358fbbd58da531695595b", "2c6bcd9545c7d6440951b12b44d373479bf18123a401a52025cf98563fbd826c"] +jsonschema = ["000e68abd33c972a5248544925a0cae7d1125f9bf6c58280d37546b946769a08", "6ff5f3180870836cae40f06fa10419f557208175f13ad7bc26caa77beb1f6e02"] +jupyter-client = ["b5f9cb06105c1d2d30719db5ffb3ea67da60919fb68deaefa583deccd8813551", "c44411eb1463ed77548bc2d5ec0d744c9b81c4a542d9637c7a52824e2121b987"] +jupyter-core = ["927d713ffa616ea11972534411544589976b2493fc7e09ad946e010aa7eb9970", "ba70754aa680300306c699790128f6fbd8c306ee5927976cbe48adacf240c0b7"] +kiwisolver = ["05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", "26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", "3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", "400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", "47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", "53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", "58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", "5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", "5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", "682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", "79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", "7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", "8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", "8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", "939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", "9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", "a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", "a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", "acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", "b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", "d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", "d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", "db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", "e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", "e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", "f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", "f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", "f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f"] +lazy-object-proxy = ["159a745e61422217881c4de71f9eafd9d703b93af95618635849fe469a283661", "23f63c0821cc96a23332e45dfaa83266feff8adc72b9bcaef86c202af765244f", "3b11be575475db2e8a6e11215f5aa95b9ec14de658628776e10d96fa0b4dac13", "3f447aff8bc61ca8b42b73304f6a44fa0d915487de144652816f950a3f1ab821", "4ba73f6089cd9b9478bc0a4fa807b47dbdb8fad1d8f31a0f0a5dbf26a4527a71", "4f53eadd9932055eac465bd3ca1bd610e4d7141e1278012bd1f28646aebc1d0e", "64483bd7154580158ea90de5b8e5e6fc29a16a9b4db24f10193f0c1ae3f9d1ea", "6f72d42b0d04bfee2397aa1862262654b56922c20a9bb66bb76b6f0e5e4f9229", "7c7f1ec07b227bdc561299fa2328e85000f90179a2f44ea30579d38e037cb3d4", "7c8b1ba1e15c10b13cad4171cfa77f5bb5ec2580abc5a353907780805ebe158e", "8559b94b823f85342e10d3d9ca4ba5478168e1ac5658a8a2f18c991ba9c52c20", "a262c7dfb046f00e12a2bdd1bafaed2408114a89ac414b0af8755c696eb3fc16", "acce4e3267610c4fdb6632b3886fe3f2f7dd641158a843cf6b6a68e4ce81477b", "be089bb6b83fac7f29d357b2dc4cf2b8eb8d98fe9d9ff89f9ea6012970a853c7", "bfab710d859c779f273cc48fb86af38d6e9210f38287df0069a63e40b45a2f5c", "c10d29019927301d524a22ced72706380de7cfc50f767217485a912b4c8bd82a", "dd6e2b598849b3d7aee2295ac765a578879830fb8966f70be8cd472e6069932e", "e408f1eacc0a68fed0c08da45f31d0ebb38079f043328dce69ff133b95c29dc1"] +marshmallow = ["0e497a6447ffaad55578138ca512752de7a48d12f444996ededc3d6bf8a09ca2", "e21a4dea20deb167c723e0ffb13f4cf33bcbbeb8a334e92406a3308cedea2826"] +marshmallow-polyfield = ["72980cb9a43a7c750580b4b08e9d01a8cbd583e1f59360f1924a1ed60f065a4c", "8d85301eb0f46ec184bac534a78472966f9cc3cbfab7fae58ddf8c0a954081cd", "cc57436b6fb65f33912c8f110d710933aa5a3082409cd5f9f0d8df6ec24d4280"] +matplotlib = ["029620799e581802961ac1dcff5cb5d3ee2f602e0db9c0f202a90495b37d2126", "2308f67e085735ed580fcace652339cb517f059cdc9ee8a418c1b55746dbffcb", "280aebaec25575e35bf7d1b3ebb2d8ae7e839edb5a403f1a121b7271744b1ef9", "295099acb5a8a1148d1b4693ad1a93479a20836cd8b7eb38183a98c84cdcb2f1", "75d44c55eb87af653afc3d0a37ab62ab4784c752be0e7c96622713d88ed57e64", "95d9d7c2d7f0c7a4317acbcf1a81efa0a2ce5cb5ddfad606ae4c25a783431f0a", "9703ffc3e7e369f3ab31d0032719710876cb341eb618e1a8a54447e1946a9f0a", "9ff80541d5676207c6e829632b28e22d9875ecaae54eab7a7f8fd82a6552e5e9", "a6a04ebd81b3183e7882c9047a9514b7f547b2bae5e4f61a02eaaa6b446bde54", "b22b0d3b8d8f769c6ac559f6761878d660bd23d67b36430f07161caf1505c29c", "b464d598e36e13f7d798443805f2ba6b4af3d26fc1652c51c77a7847cf665813", "c0fa162920185d5d74e6fdf52c1f8cca0fbf897025a9dd81e030cf08a915865a", "c452b7aff0a9e4612670a4590e6efc30929dad620a121d423c8f3d0bd93715e2", "c90fc796e97815ea3bbbdea63c1e4edf75336361a49b945fdbc2aff1c76008c6", "cc1d376963ea9c97338582f3f9d64757c51e71cf2655efe363a3f2414d84aac2", "d3f5dfaa345539599308bd83826db242e424e3f4e9657952f8738ce1b5b90e8a", "d9e80ba0ffdb0daacaf49e561474d5c5c153d6db853478cf90c8cba5ed8b72b1", "daac44fc77cf36ff01953e2acc57a843fb1f6572eb5bf0af10a2930fa7407715", "de43c85335d71094a254e8538719752e30db3305005dae8dcb3097b72587ed07", "e4621af28a2444f93b5b6d3d60f54767df8ac6daa510a98f68c34377cb474869", "f3755a52aae7fb640f5f57b7b63eb5d65688c84931d7833dbc7d03959cd4f8ce", "f99c43df8ed2b9d1c95a042f3cacf017f9690092feba0b4292eaa6713f92de97"] +mccabe = ["ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", "dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"] +more-itertools = ["2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", "c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a"] +mpmath = ["fc17abe05fbab3382b61a123c398508183406fa132e0223874578e20946499f6"] +nbformat = ["b9a0dbdbd45bb034f4f8893cafd6f652ea08c8c1674ba83f2dc55d3955743b0b", "f7494ef0df60766b7cabe0a3651556345a963b74dbc16bc7c18479041170d402"] +nbval = ["3f18b87af4e94ccd073263dd58cd3eebabe9f5e4d6ab535b39d3af64811c7eda", "74ff5e2c90a50b1ddf7edd02978c4e43221b1ee252dc14fcaa4230aae4492eda"] +networkx = ["8311ddef63cf5c5c5e7c1d0212dd141d9a1fe3f474915281b73597ed5f1d4e3d"] +ntlm-auth = ["bb2fd03c665f0f62c5f65695b62dcdb07fb7a45df6ebc86c770be2054d6902dd", "ce5b4483ed761f341a538a426a71a52e5a9cf5fd834ebef1d2090f9eef14b3f8"] +numpy = ["0778076e764e146d3078b17c24c4d89e0ecd4ac5401beff8e1c87879043a0633", "141c7102f20abe6cf0d54c4ced8d565b86df4d3077ba2343b61a6db996cefec7", "14270a1ee8917d11e7753fb54fc7ffd1934f4d529235beec0b275e2ccf00333b", "27e11c7a8ec9d5838bc59f809bfa86efc8a4fd02e58960fa9c49d998e14332d5", "2a04dda79606f3d2f760384c38ccd3d5b9bb79d4c8126b67aff5eb09a253763e", "3c26010c1b51e1224a3ca6b8df807de6e95128b0908c7e34f190e7775455b0ca", "52c40f1a4262c896420c6ea1c6fda62cf67070e3947e3307f5562bd783a90336", "6e4f8d9e8aa79321657079b9ac03f3cf3fd067bf31c1cca4f56d49543f4356a5", "7242be12a58fec245ee9734e625964b97cf7e3f2f7d016603f9e56660ce479c7", "7dc253b542bfd4b4eb88d9dbae4ca079e7bf2e2afd819ee18891a43db66c60c7", "94f5bd885f67bbb25c82d80184abbf7ce4f6c3c3a41fbaa4182f034bba803e69", "a89e188daa119ffa0d03ce5123dee3f8ffd5115c896c2a9d4f0dbb3d8b95bfa3", "ad3399da9b0ca36e2f24de72f67ab2854a62e623274607e37e0ce5f5d5fa9166", "b0348be89275fd1d4c44ffa39530c41a21062f52299b1e3ee7d1c61f060044b8", "b5554368e4ede1856121b0dfa35ce71768102e4aa55e526cb8de7f374ff78722", "cbddc56b2502d3f87fda4f98d948eb5b11f36ff3902e17cb6cc44727f2200525", "d79f18f41751725c56eceab2a886f021d70fd70a6188fd386e29a045945ffc10", "dc2ca26a19ab32dc475dbad9dfe723d3a64c835f4c23f625c2b6566ca32b9f29", "dd9bcd4f294eb0633bb33d1a74febdd2b9018b8b8ed325f861fffcd2c7660bb8", "e8baab1bc7c9152715844f1faca6744f2416929de10d7639ed49555a85549f52", "ec31fe12668af687b99acf1567399632a7c47b0e17cfb9ae47c098644ef36797", "f12b4f7e2d8f9da3141564e6737d79016fe5336cc92de6814eba579744f65b0a", "f58ac38d5ca045a377b3b377c84df8175ab992c970a53332fa8ac2373df44ff7"] +packaging = ["0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", "9e1cbf8c12b1f1ce0bb5344b8d7ecf66a6f8a6e91bcb0c84593ed6d3ab5c4ab3"] +parso = ["17cc2d7a945eb42c3569d4564cdf49bde221bc2b552af3eca9c1aad517dcdd33", "2e9574cb12e7112a87253e14e2c380ce312060269d04bd018478a3c92ea9a376"] +pexpect = ["2094eefdfcf37a1fdbfb9aa090862c1a4878e5c7e0e7e7088bdb511c558e5cd1", "9e2c1fd0e6ee3a49b28f95d4b33bc389c89b20af6a1255906e90ff1262ce62eb"] +pickleshare = ["87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", "9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"] +pillow = ["0683e80d81e840d401b687ebc00a02bbb23d0793c34d0852a5af64cfa1589540", "09c4e81c3277199898e8dc2d85d94febad87c41251ecbd447ba7d64d94765bd8", "0ee74a23022af9baf997e3016b4e090e4ff08688d37a6f49010338ab46cfe101", "10860baedfe5da7c43cd17835b091494dcc59dda5ad176a011713fe398ea6ac2", "15c056bfa284c30a7f265a41ac4cbbc93bdbfc0dfe0613b9cb8a8581b51a9e55", "1a4e06ba4f74494ea0c58c24de2bb752818e9d504474ec95b0aa94f6b0a7e479", "1c3c707c76be43c9e99cb7e3d5f1bee1c8e5be8b8a2a5eeee665efbf8ddde91a", "1fd0b290203e3b0882d9605d807b03c0f47e3440f97824586c173eca0aadd99d", "24114e4a6e1870c5a24b1da8f60d0ba77a0b4027907860188ea82bd3508c80eb", "258d886a49b6b058cd7abb0ab4b2b85ce78669a857398e83e8b8e28b317b5abb", "2734c55f7d054b0ad889c971136cbb0a5b35a921e27beaa44fdc2436af529c6e", "2ac36ec56727a95bd5a04dfca6abce1db8042c31ee73b65796a42f31fd52d009", "2bc1002b573d107c0b172a5da0f34b4900b2ddc6c3296b82d601e966d5ac1959", "33c79b6dd6bc7f65079ab9ca5bebffb5f5d1141c689c9c6a7855776d1b09b7e8", "367385fc797b2c31564c427430c7a8630db1a00bd040555dfc1d5c52e39fcd72", "3c1884ff078fb8bf5f63d7d86921838b82ed4a7d0c027add773c2f38b3168754", "44e5240e8f4f8861d748f2a58b3f04daadab5e22bfec896bf5434745f788f33f", "46aa988e15f3ea72dddd81afe3839437b755fffddb5e173886f11460be909dce", "492e1e4df823b57f9334f591c78a1e0e65a361e92594534e0568eeeeea56bbba", "50fb9e25d25cfcb50b2e6842c4e104e4f0b424be4624e1724532bf005c67589a", "5ceadd60dbd1e56ab7faffbfee1df5ecb83c3f0420e47f652cd5306d70eb0296", "74d90d499c9c736d52dd6d9b7221af5665b9c04f1767e35f5dd8694324bd4601", "7eeac51fc37e6b19631a4b8e38b8261a074efcf7cc27fc16a6bee4697af7aaa5", "809c0a2ce9032cbcd7b5313f71af4bdc5c8c771cb86eb7559afd954cab82ebb5", "85d1ef2cdafd5507c4221d201aaf62fc9276f8b0f71bd3933363e62a33abc734", "8c3889c7681af77ecfa4431cd42a2885d093ecb811e81fbe5e203abc07e0995b", "9218d81b9fca98d2c47d35d688a0cea0c42fd473159dfd5612dcb0483c63e40b", "9319215530e236822169cbe92426cdc18d16b88c943fdf365a6309a89876e335", "96ec275c83bf839972d6a7dd7d685fdfb6a3233c3c382ecff839d04e7d53955d", "9aa4f3827992288edd37c9df345783a69ef58bd20cc02e64b36e44bcd157bbf1", "9d80f44137a70b6f84c750d11019a3419f409c944526a95219bea0ac31f4dd91", "b7ebd36128a2fe93991293f997e44be9286503c7530ace6a55b938b20be288d8", "c30857e1fbf7d4a4b79d7d376eefaf293ea4307b8293d00a62e6f517f51bfe9b", "c4c78e2c71c257c136cdd43869fd3d5e34fc2162dc22e4a5406b0ebe86958239", "c5472ea3945e8f9eb0659f37fc1f592fd06f4f725f0f03774a8999ad8c130334", "c6a842537f887be1fe115d8abb5daa9bc8cc124e455ff995830cc785624a97af", "cf0a2e040fdf5a6d95f4c286c6ef1df6b36c218b528c8a9158ec2452a804b9b8", "cfd28aad6fc61f7a5d4ee556a997dc6e5555d9381d1390c00ecaf984d57e4232", "d0fd1ec2e7c3e0aeaae999efe83f5d0f42c1160a1f8be5120d40857d20baa452", "dca5660e25932771460d4688ccbb515677caaf8595f3f3240ec16c117deff89a", "de7aedc85918c2f887886442e50f52c1b93545606317956d65f342bd81cb4fc3", "e6c0bbf8e277b74196e3140c35f9a1ae3eafd818f7f2d3a15819c49135d6c062"] +pluggy = ["0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc", "b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c"] +ply = ["00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", "096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"] +prompt-toolkit = ["11adf3389a996a6d45cc277580d0d53e8a5afd281d0c9ec71b28e6f121463780", "2519ad1d8038fd5fc8e770362237ad0364d16a7650fb5724af6997ed5515e3c1", "977c6583ae813a37dc1c2e1b715892461fcbdaa57f6fc62f33a528c4886c8f55"] +protobuf = ["03f43eac9d5b651f976e91cf46a25b75e5779d98f0f4114b0abfed83376d75f8", "0c94b21e6de01362f91a86b372555d22a60b59708599ca9d5032ae9fdf8e3538", "2d2a9f30f61f4063fadd7fb68a2510a6939b43c0d6ceeec5c4704f22225da28e", "34a0b05fca061e4abb77dd180209f68d8637115ff319f51e28a6a9382d69853a", "358710fd0db25372edcf1150fa691f48376a134a6c69ce29f38f185eea7699e6", "3761ab21883f1d3add8643413b326a0026776879b13ecf904e1e05fe18532c03", "41e47198b94c27ba05a08b4a95160656105745c462af574e4bcb0807164065c0", "8c61cc8a76e9d381c665aecc5105fa0f1878cf7db8b5cd17202603bcb386d0fc", "a6eebc4db759e58fdac02efcd3028b811effac881d8a5bad1996e4e8ee6acb47", "a9c12f7c98093da0a46ba76ec40ace725daa1ac4038c41e4b1466afb5c45bb01", "cb95068492ba0859b8c9e61fa8ba206a83c64e5d0916fb4543700b2e2b214115", "cd98476ce7bb4dcd6a7b101f5eecdc073dafea19f311e36eb8fba1a349346277", "ce64cfbea18c535176bdaa10ba740c0fc4c6d998a3f511c17bedb0ae4b3b167c", "dcbb59eac73fd454e8f2c5fba9e3d3320fd4707ed6a9d3ea3717924a6f0903ea", "dd67f34458ae716029e2a71ede998e9092493b62a519236ca52e3c5202096c87", "e3c96056eb5b7284a20e256cb0bf783c8f36ad82a4ae5434a7b7cd02384144a7", "f612d584d7a27e2f39e7b17878430a959c1bc09a74ba09db096b468558e5e126", "f6de8a7d6122297b81566e5bd4df37fd5d62bec14f8f90ebff8ede1c9726cd0a", "fa529d9261682b24c2aaa683667253175c9acebe0a31105394b221090da75832"] +psutil = ["028a1ec3c6197eadd11e7b46e8cc2f0720dc18ac6d7aabdb8e8c0d6c9704f000", "503e4b20fa9d3342bcf58191bbc20a4a5ef79ca7df8972e6197cc14c5513e73d", "863a85c1c0a5103a12c05a35e59d336e1d665747e531256e061213e2e90f63f3", "954f782608bfef9ae9f78e660e065bd8ffcfaea780f9f2c8a133bb7cb9e826d7", "b6e08f965a305cd84c2d07409bc16fbef4417d67b70c53b299116c5b895e3f45", "bc96d437dfbb8865fc8828cf363450001cb04056bbdcdd6fc152c436c8a74c61", "cf49178021075d47c61c03c0229ac0c60d5e2830f8cab19e2d88e579b18cdb76", "d5350cb66690915d60f8b233180f1e49938756fb2d501c93c44f8fb5b970cc63", "eba238cf1989dfff7d483c029acb0ac4fcbfc15de295d682901f0e2497e6781a"] +ptyprocess = ["923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0", "d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f"] +py = ["64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", "dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"] +pyasn1 = ["061442c60842f6d11051d4fdae9bc197b64bd41573a12234a753a0cb80b4f30b", "0ee2449bf4c4e535823acc25624c45a8b454f328d59d3f3eeb82d3567100b9bd", "5f9fb05c33e53b9a6ee3b1ed1d292043f83df465852bec876e93b47fd2df7eed", "65201d28e081f690a32401e6253cca4449ccacc8f3988e811fae66bd822910ee", "79b336b073a52fa3c3d8728e78fa56b7d03138ef59f44084de5f39650265b5ff", "8ec20f61483764de281e0b4aba7d12716189700debcfa9e7935780850bf527f3", "9458d0273f95d035de4c0d5e0643f25daba330582cc71bb554fe6969c015042a", "98d97a1833a29ca61cd04a60414def8f02f406d732f9f0bcb49f769faff1b699", "b00d7bfb6603517e189d1ad76967c7e805139f63e43096e5f871d1277f50aea5", "b06c0cfd708b806ea025426aace45551f91ea7f557e0c2d4fbd9a4b346873ce0", "d14d05984581770333731690f5453efd4b82e1e5d824a1d7976b868a2e5c38e8", "da2420fe13a9452d8ae97a0e478adde1dee153b11ba832a95b223a2ba01c10f7", "da6b43a8c9ae93bc80e2739efb38cc776ba74a886e3e9318d65fe81a8b8a2c6e"] +pyasn1-modules = ["230730c6e63d283df75459b1b791d73648f801fd46ffcc9eb1abd16c67dfa3a6", "27f09b212203f820bc982937bd41952e856610dbd7c48d9366e8e63a551824c8", "490ed2974883c6e3d0ee53f53b32427f29ea030345c11d690788d1ed31ed666b", "49663b587853cd8783427d2fd115c862916bdd3c01656a8110ecd1950699e28f", "4df864e4dd01e600ffe280191a6630bb5b86d46382c1bcec4d03a700cb35c8b9", "6eeef742c31e285c23ebef32d8e0fee5e4ee1a563bb5171684621165b7e65627", "d1c66c80615ee74b1f3867d31b14e81f5f961a0e1afe5429838f21b5065d0161", "d7aa971a8cd79482ec5ae98705b54fdfaf834c24ed93ebc83f422c7700412b47", "e573fcf31e72c2ede48a58c8559fe9083cd007623c99a3eaf0c8f5719c09a2f8", "e980f089e3ec8116d6a5154c80f002ca941ad3446b5048a5b6d225f24ded85bb", "ef721f68f7951fab9b0404d42590f479e30d9005daccb1699b0a51bb4177db96", "f01c6899938f635b2ff4d158e760625416e20f03c612cfc9da7e97798c84e916", "f309b6c94724aeaf7ca583feb1cc70430e10d7551de5e36edfc1ae6909bcfb3c"] +pycodestyle = ["95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", "e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"] +pycparser = ["a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3"] +pydocstyle = ["2258f9b0df68b97bf3a6c29003edc5238ff8879f1efb6f1999988d934e432bd8", "5741c85e408f9e0ddf873611085e819b809fca90b619f5fd7f34bd4959da3dd4", "ed79d4ec5e92655eccc21eb0c6cf512e69512b4a97d215ace46d17e4990f2039"] +pyflakes = ["17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", "d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"] +pygments = ["71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", "881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"] +pylama = ["9bae53ef9c1a431371d6a8dca406816a60d547147b60a4934721898f553b7d8f", "fd61c11872d6256b019ef1235be37b77c922ef37ac9797df6bd489996dddeb15"] +pylatexenc = ["ef2d5260c38e2cb4d2829e8b918914a558557820d4f57cb6588a81e827de2bb3"] +pylint = ["5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", "723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1"] +pylint-runner = ["9e04d72471a9225db6734334ec578ac37b47130625553df149ca6a20ecd565a9", "bc44a39ad93ffa865f282dff26632ac78b60ce53c417d4b1de82b52842d1e6e8"] +pyparsing = ["1873c03321fc118f4e9746baf201ff990ceb915f433f23b395f5580d1840cb2a", "9b6323ef4ab914af344ba97510e966d64ba91055d6b9afa6b30799340e89cc03"] +pytest = ["4a784f1d4f2ef198fe9b7aef793e9fa1a3b2f84e822d9b3a64a181293a572d45", "926855726d8ae8371803f7b2e6ec0a69953d9c6311fa7c3b6c1b929ff92d27da"] +python-dateutil = ["7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", "c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"] +pytz = ["303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", "d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141"] +pyzmq = ["1651e52ed91f0736afd6d94ef9f3259b5534ce8beddb054f3d5ca989c4ef7c4f", "5ccb9b3d4cd20c000a9b75689d5add8cd3bce67fcbd0f8ae1b59345247d803af", "5e120c4cd3872e332fb35d255ad5998ebcee32ace4387b1b337416b6b90436c7", "5e2a3707c69a7281a9957f83718815fd74698cba31f6d69f9ed359921f662221", "63d51add9af8d0442dc90f916baf98fdc04e3b0a32afec4bfc83f8d85e72959f", "65c5a0bdc49e20f7d6b03a661f71e2fda7a99c51270cafe71598146d09810d0d", "66828fabe911aa545d919028441a585edb7c9c77969a5fea6722ef6e6ece38ab", "7d79427e82d9dad6e9b47c0b3e7ae5f9d489b1601e3a36ea629bb49501a4daf3", "824ee5d3078c4eae737ffc500fbf32f2b14e6ec89b26b435b7834febd70120cf", "89dc0a83cccec19ff3c62c091e43e66e0183d1e6b4658c16ee4e659518131494", "8b319805f6f7c907b101c864c3ca6cefc9db8ce0791356f180b1b644c7347e4c", "90facfb379ab47f94b19519c1ecc8ec8d10813b69d9c163117944948bdec5d15", "a0a178c7420021fc0730180a914a4b4b3092ce9696ceb8e72d0f60f8ce1655dd", "a7a89591ae315baccb8072f216614b3e59aed7385aef4393a6c741783d6ee9cf", "ba2578f0ae582452c02ed9fac2dc477b08e80ce05d2c0885becf5fff6651ccb0", "c69b0055c55702f5b0b6b354133e8325b9a56dbc80e1be2d240bead253fb9825", "ca434e1858fe222380221ddeb81e86f45522773344c9da63c311d17161df5e06", "d4b8ecfc3d92f114f04d5c40f60a65e5196198b827503341521dda12d8b14939", "d706025c47b09a54f005953ebe206f6d07a22516776faa4f509aaff681cc5468", "d8f27e958f8a2c0c8ffd4d8855c3ce8ac3fa1e105f0491ce31729aa2b3229740", "dbd264298f76b9060ce537008eb989317ca787c857e23cbd1b3ddf89f190a9b1", "e926d66f0df8fdbf03ba20583af0f215e475c667fb033d45fd031c66c63e34c9", "efc3bd48237f973a749f7312f68062f1b4ca5c2032a0673ca3ea8e46aa77187b", "f59bc782228777cbfe04555707a9c56d269c787ed25d6d28ed9d0fbb41cb1ad2", "f8da5322f4ff5f667a0d5a27e871b560c6637153c81e318b35cb012b2a98835c"] +qiskit-ibmq-provider = ["5fc05803ead012ed38601ae7fab5846ee23806929b1056a243c53ef615f92986"] +qiskit-terra = ["00ec6540c6bd67bc9fbd0cfa96fe7e78b0ba880d2fbc4d9a0dd96e57e22cff5e", "1433898f50c50fcaf8479abf0fee5ddaf58600e7039b74dc2e5cd2b4c0d91cc0", "1bb07d9c9ae27c7cefca991b973489b3c25b0d1a3ee641f9112bd76b7a9742b2", "278ed6f44fb4d7602cfa99f23c8e64c44c05e3231179d457b5be69c599d8882c", "5e6a20bafb8da900edee07834530be92fdb5c3117ddab2094861a7959d81299a", "7901b111c2b699bac20a66d036e043915099a463576cda4808e6198bb61de95a", "839a58ec5a9847d0670cec54883bfefffa0b90e749ab2c26afdd640bbcd4b83e", "948dd75c6ea78356ea8e6e6cd55ed7d7c7c77f8b9c658b49c93009f2d8e27edb", "9ba5111fdd0c417f5257c703b6c64f3f1873c6538792e527ceb3f1cfbc558031", "abf2c59d4a3a5fab2f1d6c7a67118a178a55178c1e4d893ecca5b3dbb6271a76", "b1fc4c3b82ef72b53d37dfaf25489ffaa7601220e7e86d9a3a8563ca0d60f8dd", "b5334e8c8b4b8c5f26aba2f7a289d74e82add1ec8fdcda4d6600e25019c6cb53", "ba87d8e1f8b0a7f1152878f738d4279d5839cca8d51b9a6a512f4df34b7b8c52", "e4259ebda66dc753315b428be528002caf34ed6d01062de9794873c81763b286", "e51ef8b187006a81ad2eb677cade958cff6788b643f901e4f23c9e4319b6a5e3", "ffa218f1b14c736aae025c99aed58f9d38cf287766c00e7d78024c037e012fa0"] +requests = ["11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"] +requests-ntlm = ["1eb43d1026b64d431a8e0f1e8a8c8119ac698e72e9b95102018214411a8463ea", "9189c92e8c61ae91402a64b972c4802b2457ce6a799d658256ebf084d5c7eb71"] +rsa = ["14ba45700ff1ec9eeb206a2ce76b32814958a98e372006c8fb76ba820211be66", "1a836406405730121ae9823e19c6e806c62bbad73f890574fff50efa4122c487"] +scipy = ["03b1e0775edbe6a4c64effb05fff2ce1429b76d29d754aa5ee2d848b60033351", "09d008237baabf52a5d4f5a6fcf9b3c03408f3f61a69c404472a16861a73917e", "10325f0ffac2400b1ec09537b7e403419dcd25d9fee602a44e8a32119af9079e", "1db9f964ed9c52dc5bd6127f0dd90ac89791daa690a5665cc01eae185912e1ba", "409846be9d6bdcbd78b9e5afe2f64b2da5a923dd7c1cd0615ce589489533fdbb", "4907040f62b91c2e170359c3d36c000af783f0fa1516a83d6c1517cde0af5340", "6c0543f2fdd38dee631fb023c0f31c284a532d205590b393d72009c14847f5b1", "826b9f5fbb7f908a13aa1efd4b7321e36992f5868d5d8311c7b40cf9b11ca0e7", "a7695a378c2ce402405ea37b12c7a338a8755e081869bd6b95858893ceb617ae", "a84c31e8409b420c3ca57fd30c7589378d6fdc8d155d866a7f8e6e80dec6fd06", "adadeeae5500de0da2b9e8dd478520d0a9945b577b2198f2462555e68f58e7ef", "b283a76a83fe463c9587a2c88003f800e08c3929dfbeba833b78260f9c209785", "c19a7389ab3cd712058a8c3c9ffd8d27a57f3d84b9c91a931f542682bb3d269d", "c3bb4bd2aca82fb498247deeac12265921fe231502a6bc6edea3ee7fe6c40a7a", "c5ea60ece0c0c1c849025bfc541b60a6751b491b6f11dd9ef37ab5b8c9041921", "db61a640ca20f237317d27bc658c1fc54c7581ff7f6502d112922dc285bdabee"] +six = ["3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"] +snowballstemmer = ["919f26a68b2c17a7634da993d91339e288964f93c274f1343e3bbbe2096e1128", "9f3bcd3c401c3e862ec0ebe6d2c069ebc012ce142cce209c098ccb5b09136e89"] +sortedcontainers = ["566cf5f8dbada3aed99737a19d98f03d15d76bf2a6c27e4fb0f4a718a99be761", "fa96e9920a37bde76bfdcaca919a125c1d2e581af1137e25de54ee0da7835282"] +sympy = ["71a11e5686ae7ab6cb8feb5bd2651ef4482f8fd43a7c27e645a165e4353b23e1", "f9b00ec76151c98470e84f1da2d7d03633180b71fb318428ddccce1c867d3eaa"] +tornado = ["1174dcb84d08887b55defb2cda1986faeeea715fff189ef3dc44cce99f5fca6b", "2613fab506bd2aedb3722c8c64c17f8f74f4070afed6eea17f20b2115e445aec", "44b82bc1146a24e5b9853d04c142576b4e8fa7a92f2e30bc364a85d1f75c4de2", "457fcbee4df737d2defc181b9073758d73f54a6cfc1f280533ff48831b39f4a8", "49603e1a6e24104961497ad0c07c799aec1caac7400a6762b687e74c8206677d", "8c2f40b99a8153893793559919a355d7b74649a11e59f411b0b0a1793e160bc0", "e1d897889c3b5a829426b7d52828fb37b28bc181cd598624e65c8be40ee3f7fa"] +traitlets = ["9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", "c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9"] +typed-ast = ["18511a0b3e7922276346bcb47e2ef9f38fb90fd31cb9223eed42c85d1312344e", "262c247a82d005e43b5b7f69aff746370538e176131c32dda9cb0f324d27141e", "2b907eb046d049bcd9892e3076c7a6456c93a25bebfe554e931620c90e6a25b0", "354c16e5babd09f5cb0ee000d54cfa38401d8b8891eefa878ac772f827181a3c", "4e0b70c6fc4d010f8107726af5fd37921b666f5b31d9331f0bd24ad9a088e631", "630968c5cdee51a11c05a30453f8cd65e0cc1d2ad0d9192819df9978984529f4", "66480f95b8167c9c5c5c87f32cf437d585937970f3fc24386f313a4c97b44e34", "71211d26ffd12d63a83e079ff258ac9d56a1376a25bc80b1cdcdf601b855b90b", "95bd11af7eafc16e829af2d3df510cecfd4387f6453355188342c3e79a2ec87a", "bc6c7d3fa1325a0c6613512a093bc2a2a15aeec350451cbdf9e1d4bffe3e3233", "cc34a6f5b426748a507dd5d1de4c1978f2eb5626d51326e43280941206c209e1", "d755f03c1e4a51e9b24d899561fec4ccaf51f210d52abdf8c07ee2849b212a36", "d7c45933b1bdfaf9f36c579671fec15d25b06c8398f113dab64c18ed1adda01d", "d896919306dd0aa22d0132f62a1b78d11aaf4c9fc5b3410d3c666b818191630a", "ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"] +typing = ["4027c5f6127a6267a435201981ba156de91ad0d1d98e9ddc2aa173453453492d", "57dcf675a99b74d64dacf6fba08fb17cf7e3d5fdff53d4a30ea2a5e7e52543d4", "a4c8473ce11a65999c8f59cb093e70686b6c84c98df58c1dae9b3b196089858a"] +typing-extensions = ["07b2c978670896022a43c4b915df8958bec4a6b84add7f2c87b2b728bda3ba64", "f3f0e67e1d42de47b5c67c32c9b26641642e9170fe7e292991793705cd5fef7c", "fb2cd053238d33a8ec939190f30cfd736c00653a85a2919415cecf7dc3d9da71"] +uritemplate = ["01c69f4fe8ed503b2951bef85d996a9d22434d2431584b5b107b2981ff416fbd", "1b9c467a940ce9fb9f50df819e8ddd14696f89b9a8cc87ac77952ba416e0a8fd", "c02643cebe23fc8adb5e6becffe201185bf06c40bda5c0b4028a93f1527d011d"] +urllib3 = ["06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b", "cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"] +wcwidth = ["3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", "f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"] +websockets = ["04b42a1b57096ffa5627d6a78ea1ff7fad3bc2c0331ffc17bc32a4024da7fea0", "08e3c3e0535befa4f0c4443824496c03ecc25062debbcf895874f8a0b4c97c9f", "10d89d4326045bf5e15e83e9867c85d686b612822e4d8f149cf4840aab5f46e0", "232fac8a1978fc1dead4b1c2fa27c7756750fb393eb4ac52f6bc87ba7242b2fa", "4bf4c8097440eff22bc78ec76fe2a865a6e658b6977a504679aaf08f02c121da", "51642ea3a00772d1e48fb0c492f0d3ae3b6474f34d20eca005a83f8c9c06c561", "55d86102282a636e195dad68aaaf85b81d0bef449d7e2ef2ff79ac450bb25d53", "564d2675682bd497b59907d2205031acbf7d3fadf8c763b689b9ede20300b215", "5d13bf5197a92149dc0badcc2b699267ff65a867029f465accfca8abab95f412", "5eda665f6789edb9b57b57a159b9c55482cbe5b046d7db458948370554b16439", "5edb2524d4032be4564c65dc4f9d01e79fe8fad5f966e5b552f4e5164fef0885", "79691794288bc51e2a3b8de2bc0272ca8355d0b8503077ea57c0716e840ebaef", "7fcc8681e9981b9b511cdee7c580d5b005f3bb86b65bde2188e04a29f1d63317", "8e447e05ec88b1b408a4c9cde85aa6f4b04f06aa874b9f0b8e8319faf51b1fee", "90ea6b3e7787620bb295a4ae050d2811c807d65b1486749414f78cfd6fb61489", "9e13239952694b8b831088431d15f771beace10edfcf9ef230cefea14f18508f", "d40f081187f7b54d7a99d8a5c782eaa4edc335a057aa54c85059272ed826dc09", "e1df1a58ed2468c7b7ce9a2f9752a32ad08eac2bcd56318625c3647c2cd2da6f", "e98d0cec437097f09c7834a11c69d79fe6241729b23f656cfc227e93294fc242", "f8d59627702d2ff27cb495ca1abdea8bd8d581de425c56e93bff6517134e0a9b", "fc30cdf2e949a2225b012a7911d1d031df3d23e99b7eda7dfc982dc4a860dae9"] +wrapt = ["4aea003270831cceb8a90ff27c4031da6ead7ec1886023b80ce0dfe0adf61533"] +zipp = ["8c1019c6aad13642199fbe458275ad6a84907634cc9f0989877ccc4a2840139d", "ca943a7e809cc12257001ccfb99e3563da9af99d52f261725e96dfe0f9275bc3"] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..381d19af --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,69 @@ +[tool.poetry] +name = "qctrl-open-controls" +version = "1.2.1" +description = "Q-CTRL Open Controls" +license = "Apache-2.0" +authors = ["Q-CTRL "] +readme = "README.md" +keywords = [ + "quantum", + "computing", + "open source", + "engineering" +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Natural Language :: English", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.6", + "Topic :: Scientific/Engineering :: Physics", + "Topic :: Scientific/Engineering :: Visualization", + "Topic :: Software Development :: Embedded Systems", + "Topic :: System :: Distributed Computing" + ] +repository = "https://github.com/qctrl/python-open-controls" +packages = [ + { include = "qctrlopencontrols" }, +] + +[tool.poetry.dependencies] # https://poetry.eustace.io/docs/versions +python = ">=3.7.3" +numpy = "^1.16" +scipy = "^1.3" +pytest = "^4.6" +nbval = "^0.9.1" +qiskit-terra = "^0.8.1" +qiskit-ibmq-provider = "^0.2.2" +cirq = "^0.5.0" + +[tool.poetry.dev-dependencies] +pytest = "^4.5" +pylama = "*" +pylint = "*" +pylint_runner = "*" + +[tool.dephell.main] +from = {format = "poetry", path = "pyproject.toml"} +to = {format = "setuppy", path = "setup.py"} +versioning = "pep" +prereleases = true + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" + +# _______________________________________ +# / If you update this file, please run \ +# \ poetry update && dephell deps convert / +# --------------------------------------- +# \ ^__^ +# \ (oo)\_______ +# (__)\ )\/\ +# ||----w | +# || || + diff --git a/setup-poetry.sh b/setup-poetry.sh new file mode 100755 index 00000000..19ab3b9e --- /dev/null +++ b/setup-poetry.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +echo "--- Checking appropriate prerequisites are installed." + +# Check correct version of Python +python -V | grep 3.7 +if [ $? -ne 0 ] +then + echo "Please ensure you have Python 3.7 activated. Pyenv is recommended." + exit 1 +fi + +# Check Poetry installed +poetry --version | grep 0.12 +if [ $? -ne 0 ] +then + echo "--- Poetry not detected, installing..." + curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python +fi + +# Do dry run to create virtual environment +echo "--- Using Poetry to create virtual environment" +poetry install --dry-run -q + +# Activate created virtual environment +echo "--- Activating virtual environment" +VIRTUAL_ENV=$(poetry run python -c "import os; print(os.environ['VIRTUAL_ENV'])") +echo "Virtual environment path is $VIRTUAL_ENV" +source $VIRTUAL_ENV/bin/activate +if [ $? -ne 0 ] +then + echo "Could not activate the virtual environment!" + exit 2 +fi + +echo "--- Updating pip and setuptools" +pip install -q --upgrade pip setuptools +deactivate + +# Do the final install +echo "--- Installing dependencies" +poetry update \ No newline at end of file diff --git a/setup.py b/setup.py index ee781d59..1629fc28 100644 --- a/setup.py +++ b/setup.py @@ -1,75 +1,40 @@ -# Copyright 2019 Q-CTRL Pty Ltd & Q-CTRL Inc -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -""" -Setup script for Q-CTRL Open Controls -""" -from __future__ import absolute_import, division, print_function, unicode_literals - -from setuptools import setup, find_packages - - -def read_version(): - """Reads the version - """ - version={} - with open('qctrlopencontrols/version.py') as version_file: - exec(version_file.read(), version) - return version - - -def read_license(): - """ - Reads the LICENSE file. - """ - with open('LICENSE') as license_file: - return license_file.read() - - -def main(): - version = read_version() - setup( - name='qctrl-open-controls', - version=version['__version__'], - packages=find_packages(), - setup_requires=['pytest-runner'], - tests_require=['pytest'], - install_requires=['numpy', 'scipy', 'pytest', 'nbval', - 'qiskit-terra', 'qiskit-ibmq-provider', - 'cirq'], - author='Q-CTRL', - author_email='support@q-ctrl.com', - description='Q-CTRL Open Controls', - license='Apache-2.0', - keywords='quantum, computing, open source, engineering', - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'Intended Audience :: Education', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: Apache Software License', - 'Natural Language :: English', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3.6', - 'Topic :: Scientific/Engineering :: Physics', - 'Topic :: Scientific/Engineering :: Visualization', - 'Topic :: Software Development :: Embedded Systems', - 'Topic :: System :: Distributed Computing' - ], - ) - - -if __name__ == '__main__': - main() +# -*- coding: utf-8 -*- + +# DO NOT EDIT THIS FILE! +# This file has been autogenerated by dephell <3 +# https://github.com/dephell/dephell + +try: + from setuptools import setup +except ImportError: + from distutils.core import setup + + +import os.path + +readme = '' +here = os.path.abspath(os.path.dirname(__file__)) +readme_path = os.path.join(here, 'README.rst') +if os.path.exists(readme_path): + with open(readme_path, 'rb') as stream: + readme = stream.read().decode('utf8') + + +setup( + long_description=readme, + name='qctrl-open-controls', + version='1.2.1', + description='Q-CTRL Open Controls', + python_requires='>=3.7.3', + project_urls={'repository': 'https://github.com/qctrl/python-open-controls'}, + author='Q-CTRL', + author_email='support@q-ctrl.com', + license='Apache-2.0', + keywords='quantum computing open source engineering', + classifiers=['Development Status :: 5 - Production/Stable', 'Environment :: Console', 'Intended Audience :: Developers', 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: Apache Software License', 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python :: 3.6', 'Topic :: Scientific/Engineering :: Physics', 'Topic :: Scientific/Engineering :: Visualization', 'Topic :: Software Development :: Embedded Systems', 'Topic :: System :: Distributed Computing'], + packages=['qctrlopencontrols', 'qctrlopencontrols.base', 'qctrlopencontrols.cirq', 'qctrlopencontrols.driven_controls', 'qctrlopencontrols.dynamic_decoupling_sequences', 'qctrlopencontrols.exceptions', 'qctrlopencontrols.globals', 'qctrlopencontrols.qiskit'], + package_data={}, + install_requires=['cirq==0.*,>=0.5.0', 'nbval==0.*,>=0.9.1', 'numpy==1.*,>=1.16.0', 'pytest==4.*,>=4.5.0,>=4.6.0', 'qiskit-ibmq-provider==0.*,>=0.2.2', 'qiskit-terra==0.*,>=0.8.1', 'scipy==1.*,>=1.3.0'], + extras_require={'dev': ['pylama', 'pylint', 'pylint-runner']}, +) From d680520a63fce071945bd06e8f38c9dcc88ea9b3 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Thu, 13 Jun 2019 11:29:11 +1000 Subject: [PATCH 02/18] Update readme with Poetry alternative --- README.md | 71 +++++++++++++++++++++++++++++++++--------------------- README.rst | 34 ++++++++++++++++++++------ 2 files changed, 69 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 1dae9d6f..eb1d463d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Q-CTRL Open Controls +# Q-CTRL Open Controls # Q-CTRL Open Controls is an open-source Python package that makes it easy to create and deploy established error-robust quantum control protocols from the open literature. The aim of the package is to be the most comprehensive library of published and tested quantum control techniques developed by the community, with easy to use export functions allowing users to deploy these controls on: @@ -8,84 +8,99 @@ Q-CTRL Open Controls is an open-source Python package that makes it easy to crea Anyone interested in quantum control is welcome to contribute to this project. -## Table of Contents +## Table of Contents ## -- [Installation](#installation) -- [Usage](#usage) -- [Contributing](#contributing) -- [Credits](#credits) -- [License](#license) +* [Installation](#installation) +* [Usage](#usage) +* [Contributing](#contributing) +* [Credits](#credits) +* [License](#license) -## Installation +## Installation ## Q-CTRL Open Controls can be install through `pip` or from source. We recommend the `pip` distribution to get the most recent stable release. If you want the latest features then install from source. -### Requirements +### Requirements ### To use Q-CTRL Open Controls you will need an installation of Python. We recommend using the [Anaconda](https://www.anaconda.com/) distribution of Python. Anaconda includes standard numerical and scientific Python packages which are optimally compiled for your machine. Follow the [Anaconda Installation](https://docs.anaconda.com/anaconda/install/) instructions and consult the [Anaconda User guide](https://docs.anaconda.com/anaconda/user-guide/) to get started. We use interactive jupyter notebooks for our usage examples. The Anaconda python distribution comes with editors for these files, or you can [install the jupyter notebook editor](https://jupyter.org/install) on its own. -### Using PyPi +### Using PyPi ### Use `pip` to install the latest version of Q-CTRL Open Controls. ```shell -$ pip install qctrl-open-controls +pip install qctrl-open-controls ``` -### From Source +### From Source ### The source code is hosted on [Github](https://github.com/qctrl/python-open-controls). The repository can be cloned using ```shell -$ git clone git@github.com:qctrl/python-open-controls.git +git clone git@github.com:qctrl/python-open-controls.git ``` -Once the clone is complete, you can run the install script. +Once the clone is complete, you have two options: + +1. Using setup.py ```shell -$ cd python-open-controls -$ python setup.py develop +cd python-open-controls +python setup.py develop ``` **Note:** We recommend installing using `develop` to point your installation at the source code in the directory where you cloned the repository. -To test your installation run `pytest` in the `python-open-controls` directory. +2. Using Poetry ```shell -$ pytest +cd python-open-controls +./setup-poetry.sh ``` -## Usage +**Note:** if you are on Windows, you'll need to install [Poetry](https://poetry.eustace.io) manually, and use: + +```cmd +cd python-open-controls +poetry install +``` -Usage depends on the application. We've provided a set of [example Jupyter notebooks](examples) addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. +Once installed via one of the above methods, test your installation by running `pytest` in the `python-open-controls` directory. -### Dynamical Decoupling Sequences (DDS) +```shell +pytest +``` + +## Usage ### + +Usage depends on the application. We've provided a set of [example Jupyter notebooks](examples) addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. + +### Dynamical Decoupling Sequences (DDS) ### Q-CTRL Open Controls can create a large library of standard DDS which can be exported in a variety of formats. -#### Create a DDS +#### Create a DDS #### [`examples/creating_a_dds.ipynb`](examples/creating_a_dds.ipynb) demonstrates how to use Q-CTRL Open Controls to create a DDS from a large library of published dynamical decoupling protocols. It also shows how to make Custom DDS with timings, offsets and unitaries defined by the user. The notebook shows how to export a DDS for deployment in the [Q-CTRL products](https://q-ctrl.com/products/) or your quantum hardware. -#### Export a DDS to Qiskit +#### Export a DDS to Qiskit #### [`examples/export_a_dds_to_qiskit.ipynb`](examples/export_a_dds_to_qiskit.ipynb) demonstrates how to take a DDS and convert it to a Qiskit circuit so it can be run on IBM's quantum computers. It also demonstrates using a DDS to improve the performance of a quantum circuit execution by extending the coherence time of a qubit. -#### Export a DDS to Cirq +#### Export a DDS to Cirq #### [`examples/export_a_dds_to_cirq.ipynb`](examples/export_a_dds_to_cirq.ipynb) demonstrates how to take a DDS and convert it to a Cirq circuit or schdule. It also shows how to run a circuit or schedule in a Cirq simulator. - -## Contributing +## Contributing ## See [Contributing](https://github.com/qctrl/.github/blob/master/CONTRIBUTING.md). -## Credits +## Credits ## See [Contributors](https://github.com/qctrl/python-open-controls/graphs/contributors). -## License +## License ## See [LICENSE](LICENSE). diff --git a/README.rst b/README.rst index 722e3d05..537ad8a2 100644 --- a/README.rst +++ b/README.rst @@ -40,7 +40,7 @@ Use ``pip`` to install the latest version of Q-CTRL Open Controls. .. code-block:: shell - $ pip install qctrl-open-controls + pip install qctrl-open-controls From Source ^^^^^^^^^^^ @@ -49,27 +49,45 @@ The source code is hosted on `Github `_ manually, and use: + +.. code-block:: cmd + + cd python-open-controls + poetry install + +Once installed via one of the above methods, test your installation by running ``pytest`` in the ``python-open-controls`` directory. .. code-block:: shell - $ pytest + pytest Usage ----- -Usage depends on the application. We've provided a set of `example Jupyter notebooks `_ addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. +Usage depends on the application. We've provided a set of `example Jupyter notebooks `_ addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. Dynamical Decoupling Sequences (DDS) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 89e2454ae22df8f7affba6bed73eaa04fd2bbca9 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Thu, 13 Jun 2019 13:57:35 +1000 Subject: [PATCH 03/18] Dependency update --- poetry.lock | 64 +++++++++++++++++++++++++------------------------- pyproject.toml | 5 ++-- setup.py | 4 ++-- 3 files changed, 36 insertions(+), 37 deletions(-) diff --git a/poetry.lock b/poetry.lock index 818354be..56c11beb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,5 @@ [[package]] -category = "main" +category = "dev" description = "Disable App Nap on OS X 10.9" marker = "sys_platform == \"darwin\"" name = "appnope" @@ -30,7 +30,7 @@ typed-ast = ">=1.3.0" wrapt = "*" [[package]] -category = "main" +category = "dev" description = "Atomic file writes." name = "atomicwrites" optional = false @@ -38,7 +38,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "1.3.0" [[package]] -category = "main" +category = "dev" description = "Classes Without Boilerplate" name = "attrs" optional = false @@ -46,7 +46,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "19.1.0" [[package]] -category = "main" +category = "dev" description = "Specifications for callback functions passed in to an API" name = "backcall" optional = false @@ -110,7 +110,7 @@ typing = ">=3.6,<4.0" typing-extensions = "*" [[package]] -category = "main" +category = "dev" description = "Cross-platform colored terminal text." name = "colorama" optional = false @@ -118,7 +118,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "0.4.1" [[package]] -category = "main" +category = "dev" description = "Code coverage measurement for Python" name = "coverage" optional = false @@ -223,7 +223,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.8" [[package]] -category = "main" +category = "dev" description = "Read metadata from Python packages" name = "importlib-metadata" optional = false @@ -234,7 +234,7 @@ version = "0.18" zipp = ">=0.5" [[package]] -category = "main" +category = "dev" description = "IPython Kernel for Jupyter" name = "ipykernel" optional = false @@ -248,7 +248,7 @@ tornado = ">=4.2" traitlets = ">=4.1.0" [[package]] -category = "main" +category = "dev" description = "IPython: Productive Interactive Computing" name = "ipython" optional = false @@ -269,7 +269,7 @@ setuptools = ">=18.5" traitlets = ">=4.2" [[package]] -category = "main" +category = "dev" description = "Vestigial utilities from IPython" name = "ipython-genutils" optional = false @@ -285,7 +285,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "4.3.20" [[package]] -category = "main" +category = "dev" description = "An autocompletion tool for Python that can be used for text editors." name = "jedi" optional = false @@ -304,7 +304,7 @@ python-versions = "*" version = "2.6.0" [[package]] -category = "main" +category = "dev" description = "Jupyter protocol implementation and client libraries" name = "jupyter-client" optional = false @@ -319,7 +319,7 @@ tornado = ">=4.1" traitlets = "*" [[package]] -category = "main" +category = "dev" description = "Jupyter core package. A base package on which Jupyter projects rely." name = "jupyter-core" optional = false @@ -393,7 +393,7 @@ python-versions = "*" version = "0.6.1" [[package]] -category = "main" +category = "dev" description = "More routines for operating on iterables, beyond itertools" marker = "python_version > \"2.7\"" name = "more-itertools" @@ -410,7 +410,7 @@ python-versions = "*" version = "1.1.0" [[package]] -category = "main" +category = "dev" description = "The Jupyter Notebook format" name = "nbformat" optional = false @@ -424,7 +424,7 @@ jupyter-core = "*" traitlets = ">=4.1" [[package]] -category = "main" +category = "dev" description = "A py.test plugin to validate Jupyter notebooks" name = "nbval" optional = false @@ -467,7 +467,7 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" version = "1.16.4" [[package]] -category = "main" +category = "dev" description = "Core utilities for Python packages" name = "packaging" optional = false @@ -479,7 +479,7 @@ pyparsing = ">=2.0.2" six = "*" [[package]] -category = "main" +category = "dev" description = "A Python Parser" name = "parso" optional = false @@ -487,7 +487,7 @@ python-versions = "*" version = "0.4.0" [[package]] -category = "main" +category = "dev" description = "Pexpect allows easy control of interactive console applications." marker = "sys_platform != \"win32\"" name = "pexpect" @@ -499,7 +499,7 @@ version = "4.7.0" ptyprocess = ">=0.5" [[package]] -category = "main" +category = "dev" description = "Tiny 'shelve'-like database with concurrency support" name = "pickleshare" optional = false @@ -515,7 +515,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" version = "6.0.0" [[package]] -category = "main" +category = "dev" description = "plugin and hook calling mechanisms for python" name = "pluggy" optional = false @@ -534,7 +534,7 @@ python-versions = "*" version = "3.11" [[package]] -category = "main" +category = "dev" description = "Library for building powerful interactive command lines in Python" name = "prompt-toolkit" optional = false @@ -566,7 +566,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "5.6.3" [[package]] -category = "main" +category = "dev" description = "Run a subprocess in a pseudo terminal" marker = "sys_platform != \"win32\"" name = "ptyprocess" @@ -575,7 +575,7 @@ python-versions = "*" version = "0.6.0" [[package]] -category = "main" +category = "dev" description = "library with cross-python path, ini-parsing, io, code, log facilities" name = "py" optional = false @@ -638,7 +638,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.1.1" [[package]] -category = "main" +category = "dev" description = "Pygments is a syntax highlighting package written in Python." name = "pygments" optional = false @@ -702,7 +702,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" version = "2.4.0" [[package]] -category = "main" +category = "dev" description = "pytest: simple powerful testing with Python" name = "pytest" optional = false @@ -744,7 +744,7 @@ python-versions = "*" version = "2019.1" [[package]] -category = "main" +category = "dev" description = "Python bindings for 0MQ" name = "pyzmq" optional = false @@ -871,7 +871,7 @@ version = "1.4" mpmath = ">=0.19" [[package]] -category = "main" +category = "dev" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." name = "tornado" optional = false @@ -879,7 +879,7 @@ python-versions = ">= 3.5" version = "6.0.2" [[package]] -category = "main" +category = "dev" description = "Traitlets Python config system" name = "traitlets" optional = false @@ -936,7 +936,7 @@ python-versions = "*" version = "1.22" [[package]] -category = "main" +category = "dev" description = "Measures number of Terminal column cells of wide-character codes" name = "wcwidth" optional = false @@ -960,7 +960,7 @@ python-versions = "*" version = "1.11.1" [[package]] -category = "main" +category = "dev" description = "Backport of pathlib-compatible object wrapper for zip files" name = "zipp" optional = false @@ -968,7 +968,7 @@ python-versions = ">=2.7" version = "0.5.1" [metadata] -content-hash = "5ca21bcf76acaf727d9ccd70766d085923a945cb100ea95dcf61d57fdf42da5b" +content-hash = "ef2d6c5f5983834f5985bc7121c4e3a14fa1143aac0340566bddcaaaad955667" python-versions = ">=3.7.3" [metadata.hashes] diff --git a/pyproject.toml b/pyproject.toml index 381d19af..1aa9fe0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,14 +35,13 @@ packages = [ python = ">=3.7.3" numpy = "^1.16" scipy = "^1.3" -pytest = "^4.6" -nbval = "^0.9.1" qiskit-terra = "^0.8.1" qiskit-ibmq-provider = "^0.2.2" cirq = "^0.5.0" [tool.poetry.dev-dependencies] -pytest = "^4.5" +pytest = "*" +nbval = "*" pylama = "*" pylint = "*" pylint_runner = "*" diff --git a/setup.py b/setup.py index 1629fc28..973b2bc4 100644 --- a/setup.py +++ b/setup.py @@ -35,6 +35,6 @@ classifiers=['Development Status :: 5 - Production/Stable', 'Environment :: Console', 'Intended Audience :: Developers', 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: Apache Software License', 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python :: 3.6', 'Topic :: Scientific/Engineering :: Physics', 'Topic :: Scientific/Engineering :: Visualization', 'Topic :: Software Development :: Embedded Systems', 'Topic :: System :: Distributed Computing'], packages=['qctrlopencontrols', 'qctrlopencontrols.base', 'qctrlopencontrols.cirq', 'qctrlopencontrols.driven_controls', 'qctrlopencontrols.dynamic_decoupling_sequences', 'qctrlopencontrols.exceptions', 'qctrlopencontrols.globals', 'qctrlopencontrols.qiskit'], package_data={}, - install_requires=['cirq==0.*,>=0.5.0', 'nbval==0.*,>=0.9.1', 'numpy==1.*,>=1.16.0', 'pytest==4.*,>=4.5.0,>=4.6.0', 'qiskit-ibmq-provider==0.*,>=0.2.2', 'qiskit-terra==0.*,>=0.8.1', 'scipy==1.*,>=1.3.0'], - extras_require={'dev': ['pylama', 'pylint', 'pylint-runner']}, + install_requires=['cirq==0.*,>=0.5.0', 'numpy==1.*,>=1.16.0', 'qiskit-ibmq-provider==0.*,>=0.2.2', 'qiskit-terra==0.*,>=0.8.1', 'scipy==1.*,>=1.3.0'], + extras_require={'dev': ['nbval', 'pylama', 'pylint', 'pylint-runner', 'pytest']}, ) From c342b55179fcbd92028aebdf39a08c1a03bd31ce Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Thu, 13 Jun 2019 15:02:39 +1000 Subject: [PATCH 04/18] Use standard workflows --- .circleci/config.yml | 47 ++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index aa955f37..f6bbca35 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,14 +1,35 @@ -version: 2 +version: 2.1 -jobs: - build: - working_directory: ~/open-controls - docker: - - image: continuumio/anaconda3 - steps: - - checkout - - run: python3 setup.py install - - run: pytest - - run: pytest --nbval-lax examples/*.ipynb --sanitize-with examples/notebook-sanitize.cfg - - run: pylint qctrlopencontrols --rcfile=.pylintrc - - run: pylint tests --rcfile=.pylintrc \ No newline at end of file +orbs: + q-ctrl: q-ctrl/python@dev:0.0.42 + +workflows: + version: 2 + + "PyPi Project": + jobs: + - q-ctrl/test_python37: + filters: + tags: # Tag filter required because the release job has a tag filter + only: /.*/ + - q-ctrl/build: + context: q-ctrl-api-development + filters: + branches: + only: + - master + - development + tags: # Tag filter required because the release job has a tag filter + only: /.*/ + - q-ctrl/pypi_publish: + context: q-ctrl-api-production + requires: + - q-ctrl/test_python37 + - q-ctrl/build + filters: + branches: + only: + - master + - development + tags: + only: /^v?\d+(\.\d+){1,2}(rc\d+)?$/ From f4f1f76409df5da7d86dfbae2c7226a5a0c76175 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Thu, 13 Jun 2019 17:26:08 +1000 Subject: [PATCH 05/18] Orb bump --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f6bbca35..283edc63 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.42 + q-ctrl: q-ctrl/python@dev:0.0.43 workflows: version: 2 From b89894b4d71e6885d0d28667c3977af83f909188 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Fri, 14 Jun 2019 14:52:18 +1000 Subject: [PATCH 06/18] Newer build workflow --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 283edc63..d77e186e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,14 +1,14 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.43 + q-ctrl: q-ctrl/python@dev:0.0.45 workflows: version: 2 "PyPi Project": jobs: - - q-ctrl/test_python37: + - q-ctrl/open_test: filters: tags: # Tag filter required because the release job has a tag filter only: /.*/ @@ -24,7 +24,7 @@ workflows: - q-ctrl/pypi_publish: context: q-ctrl-api-production requires: - - q-ctrl/test_python37 + - q-ctrl/open_test - q-ctrl/build filters: branches: From 58fda63b7a514152e1a6f90323b28338267a0c17 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Fri, 14 Jun 2019 14:52:30 +1000 Subject: [PATCH 07/18] Ignore junit.xml --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 5547e439..5fc11071 100644 --- a/.gitignore +++ b/.gitignore @@ -105,6 +105,7 @@ ENV/ # pytest .pytest_cache/* +junit.xml #Mac related files *.DS_Store @@ -115,3 +116,4 @@ qctrl_library.code-workspace # docs docs-source docs + From 5b3bc8dce88f643c1df5f2a2bf58652c5abeb41d Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Fri, 14 Jun 2019 15:51:47 +1000 Subject: [PATCH 08/18] Orb bump --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d77e186e..5a7a544b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.45 + q-ctrl: q-ctrl/python@dev:0.0.47 workflows: version: 2 From fd5def18cdf94aa8e6b3b2bbfaa50e3c5c4efb07 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Fri, 14 Jun 2019 15:52:25 +1000 Subject: [PATCH 09/18] Add context --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 5a7a544b..0d56cb6b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,6 +9,7 @@ workflows: "PyPi Project": jobs: - q-ctrl/open_test: + context: q-ctrl-api-development filters: tags: # Tag filter required because the release job has a tag filter only: /.*/ From a04dd0f1acdfcf1128866958e5e7359253be0c86 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Thu, 13 Jun 2019 11:29:11 +1000 Subject: [PATCH 10/18] Use standard workflows --- .circleci/config.yml | 48 ++++++++++++++++++++++-------- .gitignore | 2 ++ README.md | 71 +++++++++++++++++++++++++++----------------- README.rst | 34 ++++++++++++++++----- poetry.lock | 64 +++++++++++++++++++-------------------- pyproject.toml | 5 ++-- setup.py | 4 +-- 7 files changed, 142 insertions(+), 86 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index aa955f37..0d56cb6b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,14 +1,36 @@ -version: 2 +version: 2.1 -jobs: - build: - working_directory: ~/open-controls - docker: - - image: continuumio/anaconda3 - steps: - - checkout - - run: python3 setup.py install - - run: pytest - - run: pytest --nbval-lax examples/*.ipynb --sanitize-with examples/notebook-sanitize.cfg - - run: pylint qctrlopencontrols --rcfile=.pylintrc - - run: pylint tests --rcfile=.pylintrc \ No newline at end of file +orbs: + q-ctrl: q-ctrl/python@dev:0.0.47 + +workflows: + version: 2 + + "PyPi Project": + jobs: + - q-ctrl/open_test: + context: q-ctrl-api-development + filters: + tags: # Tag filter required because the release job has a tag filter + only: /.*/ + - q-ctrl/build: + context: q-ctrl-api-development + filters: + branches: + only: + - master + - development + tags: # Tag filter required because the release job has a tag filter + only: /.*/ + - q-ctrl/pypi_publish: + context: q-ctrl-api-production + requires: + - q-ctrl/open_test + - q-ctrl/build + filters: + branches: + only: + - master + - development + tags: + only: /^v?\d+(\.\d+){1,2}(rc\d+)?$/ diff --git a/.gitignore b/.gitignore index 5547e439..5fc11071 100644 --- a/.gitignore +++ b/.gitignore @@ -105,6 +105,7 @@ ENV/ # pytest .pytest_cache/* +junit.xml #Mac related files *.DS_Store @@ -115,3 +116,4 @@ qctrl_library.code-workspace # docs docs-source docs + diff --git a/README.md b/README.md index 1dae9d6f..eb1d463d 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Q-CTRL Open Controls +# Q-CTRL Open Controls # Q-CTRL Open Controls is an open-source Python package that makes it easy to create and deploy established error-robust quantum control protocols from the open literature. The aim of the package is to be the most comprehensive library of published and tested quantum control techniques developed by the community, with easy to use export functions allowing users to deploy these controls on: @@ -8,84 +8,99 @@ Q-CTRL Open Controls is an open-source Python package that makes it easy to crea Anyone interested in quantum control is welcome to contribute to this project. -## Table of Contents +## Table of Contents ## -- [Installation](#installation) -- [Usage](#usage) -- [Contributing](#contributing) -- [Credits](#credits) -- [License](#license) +* [Installation](#installation) +* [Usage](#usage) +* [Contributing](#contributing) +* [Credits](#credits) +* [License](#license) -## Installation +## Installation ## Q-CTRL Open Controls can be install through `pip` or from source. We recommend the `pip` distribution to get the most recent stable release. If you want the latest features then install from source. -### Requirements +### Requirements ### To use Q-CTRL Open Controls you will need an installation of Python. We recommend using the [Anaconda](https://www.anaconda.com/) distribution of Python. Anaconda includes standard numerical and scientific Python packages which are optimally compiled for your machine. Follow the [Anaconda Installation](https://docs.anaconda.com/anaconda/install/) instructions and consult the [Anaconda User guide](https://docs.anaconda.com/anaconda/user-guide/) to get started. We use interactive jupyter notebooks for our usage examples. The Anaconda python distribution comes with editors for these files, or you can [install the jupyter notebook editor](https://jupyter.org/install) on its own. -### Using PyPi +### Using PyPi ### Use `pip` to install the latest version of Q-CTRL Open Controls. ```shell -$ pip install qctrl-open-controls +pip install qctrl-open-controls ``` -### From Source +### From Source ### The source code is hosted on [Github](https://github.com/qctrl/python-open-controls). The repository can be cloned using ```shell -$ git clone git@github.com:qctrl/python-open-controls.git +git clone git@github.com:qctrl/python-open-controls.git ``` -Once the clone is complete, you can run the install script. +Once the clone is complete, you have two options: + +1. Using setup.py ```shell -$ cd python-open-controls -$ python setup.py develop +cd python-open-controls +python setup.py develop ``` **Note:** We recommend installing using `develop` to point your installation at the source code in the directory where you cloned the repository. -To test your installation run `pytest` in the `python-open-controls` directory. +2. Using Poetry ```shell -$ pytest +cd python-open-controls +./setup-poetry.sh ``` -## Usage +**Note:** if you are on Windows, you'll need to install [Poetry](https://poetry.eustace.io) manually, and use: + +```cmd +cd python-open-controls +poetry install +``` -Usage depends on the application. We've provided a set of [example Jupyter notebooks](examples) addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. +Once installed via one of the above methods, test your installation by running `pytest` in the `python-open-controls` directory. -### Dynamical Decoupling Sequences (DDS) +```shell +pytest +``` + +## Usage ### + +Usage depends on the application. We've provided a set of [example Jupyter notebooks](examples) addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. + +### Dynamical Decoupling Sequences (DDS) ### Q-CTRL Open Controls can create a large library of standard DDS which can be exported in a variety of formats. -#### Create a DDS +#### Create a DDS #### [`examples/creating_a_dds.ipynb`](examples/creating_a_dds.ipynb) demonstrates how to use Q-CTRL Open Controls to create a DDS from a large library of published dynamical decoupling protocols. It also shows how to make Custom DDS with timings, offsets and unitaries defined by the user. The notebook shows how to export a DDS for deployment in the [Q-CTRL products](https://q-ctrl.com/products/) or your quantum hardware. -#### Export a DDS to Qiskit +#### Export a DDS to Qiskit #### [`examples/export_a_dds_to_qiskit.ipynb`](examples/export_a_dds_to_qiskit.ipynb) demonstrates how to take a DDS and convert it to a Qiskit circuit so it can be run on IBM's quantum computers. It also demonstrates using a DDS to improve the performance of a quantum circuit execution by extending the coherence time of a qubit. -#### Export a DDS to Cirq +#### Export a DDS to Cirq #### [`examples/export_a_dds_to_cirq.ipynb`](examples/export_a_dds_to_cirq.ipynb) demonstrates how to take a DDS and convert it to a Cirq circuit or schdule. It also shows how to run a circuit or schedule in a Cirq simulator. - -## Contributing +## Contributing ## See [Contributing](https://github.com/qctrl/.github/blob/master/CONTRIBUTING.md). -## Credits +## Credits ## See [Contributors](https://github.com/qctrl/python-open-controls/graphs/contributors). -## License +## License ## See [LICENSE](LICENSE). diff --git a/README.rst b/README.rst index 722e3d05..537ad8a2 100644 --- a/README.rst +++ b/README.rst @@ -40,7 +40,7 @@ Use ``pip`` to install the latest version of Q-CTRL Open Controls. .. code-block:: shell - $ pip install qctrl-open-controls + pip install qctrl-open-controls From Source ^^^^^^^^^^^ @@ -49,27 +49,45 @@ The source code is hosted on `Github `_ manually, and use: + +.. code-block:: cmd + + cd python-open-controls + poetry install + +Once installed via one of the above methods, test your installation by running ``pytest`` in the ``python-open-controls`` directory. .. code-block:: shell - $ pytest + pytest Usage ----- -Usage depends on the application. We've provided a set of `example Jupyter notebooks `_ addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. +Usage depends on the application. We've provided a set of `example Jupyter notebooks `_ addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. Dynamical Decoupling Sequences (DDS) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/poetry.lock b/poetry.lock index 818354be..56c11beb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,5 @@ [[package]] -category = "main" +category = "dev" description = "Disable App Nap on OS X 10.9" marker = "sys_platform == \"darwin\"" name = "appnope" @@ -30,7 +30,7 @@ typed-ast = ">=1.3.0" wrapt = "*" [[package]] -category = "main" +category = "dev" description = "Atomic file writes." name = "atomicwrites" optional = false @@ -38,7 +38,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "1.3.0" [[package]] -category = "main" +category = "dev" description = "Classes Without Boilerplate" name = "attrs" optional = false @@ -46,7 +46,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "19.1.0" [[package]] -category = "main" +category = "dev" description = "Specifications for callback functions passed in to an API" name = "backcall" optional = false @@ -110,7 +110,7 @@ typing = ">=3.6,<4.0" typing-extensions = "*" [[package]] -category = "main" +category = "dev" description = "Cross-platform colored terminal text." name = "colorama" optional = false @@ -118,7 +118,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "0.4.1" [[package]] -category = "main" +category = "dev" description = "Code coverage measurement for Python" name = "coverage" optional = false @@ -223,7 +223,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.8" [[package]] -category = "main" +category = "dev" description = "Read metadata from Python packages" name = "importlib-metadata" optional = false @@ -234,7 +234,7 @@ version = "0.18" zipp = ">=0.5" [[package]] -category = "main" +category = "dev" description = "IPython Kernel for Jupyter" name = "ipykernel" optional = false @@ -248,7 +248,7 @@ tornado = ">=4.2" traitlets = ">=4.1.0" [[package]] -category = "main" +category = "dev" description = "IPython: Productive Interactive Computing" name = "ipython" optional = false @@ -269,7 +269,7 @@ setuptools = ">=18.5" traitlets = ">=4.2" [[package]] -category = "main" +category = "dev" description = "Vestigial utilities from IPython" name = "ipython-genutils" optional = false @@ -285,7 +285,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "4.3.20" [[package]] -category = "main" +category = "dev" description = "An autocompletion tool for Python that can be used for text editors." name = "jedi" optional = false @@ -304,7 +304,7 @@ python-versions = "*" version = "2.6.0" [[package]] -category = "main" +category = "dev" description = "Jupyter protocol implementation and client libraries" name = "jupyter-client" optional = false @@ -319,7 +319,7 @@ tornado = ">=4.1" traitlets = "*" [[package]] -category = "main" +category = "dev" description = "Jupyter core package. A base package on which Jupyter projects rely." name = "jupyter-core" optional = false @@ -393,7 +393,7 @@ python-versions = "*" version = "0.6.1" [[package]] -category = "main" +category = "dev" description = "More routines for operating on iterables, beyond itertools" marker = "python_version > \"2.7\"" name = "more-itertools" @@ -410,7 +410,7 @@ python-versions = "*" version = "1.1.0" [[package]] -category = "main" +category = "dev" description = "The Jupyter Notebook format" name = "nbformat" optional = false @@ -424,7 +424,7 @@ jupyter-core = "*" traitlets = ">=4.1" [[package]] -category = "main" +category = "dev" description = "A py.test plugin to validate Jupyter notebooks" name = "nbval" optional = false @@ -467,7 +467,7 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" version = "1.16.4" [[package]] -category = "main" +category = "dev" description = "Core utilities for Python packages" name = "packaging" optional = false @@ -479,7 +479,7 @@ pyparsing = ">=2.0.2" six = "*" [[package]] -category = "main" +category = "dev" description = "A Python Parser" name = "parso" optional = false @@ -487,7 +487,7 @@ python-versions = "*" version = "0.4.0" [[package]] -category = "main" +category = "dev" description = "Pexpect allows easy control of interactive console applications." marker = "sys_platform != \"win32\"" name = "pexpect" @@ -499,7 +499,7 @@ version = "4.7.0" ptyprocess = ">=0.5" [[package]] -category = "main" +category = "dev" description = "Tiny 'shelve'-like database with concurrency support" name = "pickleshare" optional = false @@ -515,7 +515,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" version = "6.0.0" [[package]] -category = "main" +category = "dev" description = "plugin and hook calling mechanisms for python" name = "pluggy" optional = false @@ -534,7 +534,7 @@ python-versions = "*" version = "3.11" [[package]] -category = "main" +category = "dev" description = "Library for building powerful interactive command lines in Python" name = "prompt-toolkit" optional = false @@ -566,7 +566,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "5.6.3" [[package]] -category = "main" +category = "dev" description = "Run a subprocess in a pseudo terminal" marker = "sys_platform != \"win32\"" name = "ptyprocess" @@ -575,7 +575,7 @@ python-versions = "*" version = "0.6.0" [[package]] -category = "main" +category = "dev" description = "library with cross-python path, ini-parsing, io, code, log facilities" name = "py" optional = false @@ -638,7 +638,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.1.1" [[package]] -category = "main" +category = "dev" description = "Pygments is a syntax highlighting package written in Python." name = "pygments" optional = false @@ -702,7 +702,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" version = "2.4.0" [[package]] -category = "main" +category = "dev" description = "pytest: simple powerful testing with Python" name = "pytest" optional = false @@ -744,7 +744,7 @@ python-versions = "*" version = "2019.1" [[package]] -category = "main" +category = "dev" description = "Python bindings for 0MQ" name = "pyzmq" optional = false @@ -871,7 +871,7 @@ version = "1.4" mpmath = ">=0.19" [[package]] -category = "main" +category = "dev" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." name = "tornado" optional = false @@ -879,7 +879,7 @@ python-versions = ">= 3.5" version = "6.0.2" [[package]] -category = "main" +category = "dev" description = "Traitlets Python config system" name = "traitlets" optional = false @@ -936,7 +936,7 @@ python-versions = "*" version = "1.22" [[package]] -category = "main" +category = "dev" description = "Measures number of Terminal column cells of wide-character codes" name = "wcwidth" optional = false @@ -960,7 +960,7 @@ python-versions = "*" version = "1.11.1" [[package]] -category = "main" +category = "dev" description = "Backport of pathlib-compatible object wrapper for zip files" name = "zipp" optional = false @@ -968,7 +968,7 @@ python-versions = ">=2.7" version = "0.5.1" [metadata] -content-hash = "5ca21bcf76acaf727d9ccd70766d085923a945cb100ea95dcf61d57fdf42da5b" +content-hash = "ef2d6c5f5983834f5985bc7121c4e3a14fa1143aac0340566bddcaaaad955667" python-versions = ">=3.7.3" [metadata.hashes] diff --git a/pyproject.toml b/pyproject.toml index 381d19af..1aa9fe0f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,14 +35,13 @@ packages = [ python = ">=3.7.3" numpy = "^1.16" scipy = "^1.3" -pytest = "^4.6" -nbval = "^0.9.1" qiskit-terra = "^0.8.1" qiskit-ibmq-provider = "^0.2.2" cirq = "^0.5.0" [tool.poetry.dev-dependencies] -pytest = "^4.5" +pytest = "*" +nbval = "*" pylama = "*" pylint = "*" pylint_runner = "*" diff --git a/setup.py b/setup.py index 1629fc28..973b2bc4 100644 --- a/setup.py +++ b/setup.py @@ -35,6 +35,6 @@ classifiers=['Development Status :: 5 - Production/Stable', 'Environment :: Console', 'Intended Audience :: Developers', 'Intended Audience :: Education', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: Apache Software License', 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Python :: 3.6', 'Topic :: Scientific/Engineering :: Physics', 'Topic :: Scientific/Engineering :: Visualization', 'Topic :: Software Development :: Embedded Systems', 'Topic :: System :: Distributed Computing'], packages=['qctrlopencontrols', 'qctrlopencontrols.base', 'qctrlopencontrols.cirq', 'qctrlopencontrols.driven_controls', 'qctrlopencontrols.dynamic_decoupling_sequences', 'qctrlopencontrols.exceptions', 'qctrlopencontrols.globals', 'qctrlopencontrols.qiskit'], package_data={}, - install_requires=['cirq==0.*,>=0.5.0', 'nbval==0.*,>=0.9.1', 'numpy==1.*,>=1.16.0', 'pytest==4.*,>=4.5.0,>=4.6.0', 'qiskit-ibmq-provider==0.*,>=0.2.2', 'qiskit-terra==0.*,>=0.8.1', 'scipy==1.*,>=1.3.0'], - extras_require={'dev': ['pylama', 'pylint', 'pylint-runner']}, + install_requires=['cirq==0.*,>=0.5.0', 'numpy==1.*,>=1.16.0', 'qiskit-ibmq-provider==0.*,>=0.2.2', 'qiskit-terra==0.*,>=0.8.1', 'scipy==1.*,>=1.3.0'], + extras_require={'dev': ['nbval', 'pylama', 'pylint', 'pylint-runner', 'pytest']}, ) From cf6cb4616b2a92b9e36286e39b929b49f82f849c Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Fri, 14 Jun 2019 16:22:39 +1000 Subject: [PATCH 11/18] Orb bump --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0d56cb6b..b4701b13 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.47 + q-ctrl: q-ctrl/python@dev:0.0.48 workflows: version: 2 From f945c51478c50e3f34afc129a170d4051a669944 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Mon, 17 Jun 2019 10:06:01 +1000 Subject: [PATCH 12/18] Split out dev and prod pypi_publish --- .circleci/config.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b4701b13..796169e5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,15 +22,25 @@ workflows: - development tags: # Tag filter required because the release job has a tag filter only: /.*/ - - q-ctrl/pypi_publish: + - q-ctrl/pypi_publish_dev: + context: q-ctrl-api-development + requires: + - q-ctrl/test + - q-ctrl/build + filters: + branches: + only: + - development + tags: + only: /^v?\d+(\.\d+){1,2}rc\d+$/ # RC version required for publish from development + - q-ctrl/pypi_publish_prod: context: q-ctrl-api-production requires: - - q-ctrl/open_test + - q-ctrl/test - q-ctrl/build filters: branches: only: - master - - development tags: - only: /^v?\d+(\.\d+){1,2}(rc\d+)?$/ + only: /^v?\d+(\.\d+){1,2}$/ From a56d8fd939673ba6742c708dbdd4fce368e946a7 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Mon, 17 Jun 2019 10:10:55 +1000 Subject: [PATCH 13/18] Orb bump --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 796169e5..fd80450f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.48 + q-ctrl: q-ctrl/python@dev:0.0.49 workflows: version: 2 From fca143572c2fd632f2c7f47d4bcf233662e06e58 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Mon, 17 Jun 2019 10:48:36 +1000 Subject: [PATCH 14/18] Use newer build container --- .circleci/config.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fd80450f..b0061d4b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.49 + q-ctrl: q-ctrl/python@dev:0.0.51 workflows: version: 2 @@ -13,7 +13,7 @@ workflows: filters: tags: # Tag filter required because the release job has a tag filter only: /.*/ - - q-ctrl/build: + - q-ctrl/open_build: context: q-ctrl-api-development filters: branches: @@ -22,22 +22,22 @@ workflows: - development tags: # Tag filter required because the release job has a tag filter only: /.*/ - - q-ctrl/pypi_publish_dev: + - q-ctrl/pypi_publish: context: q-ctrl-api-development requires: - - q-ctrl/test - - q-ctrl/build + - q-ctrl/open_test + - q-ctrl/open_build filters: branches: only: - development tags: only: /^v?\d+(\.\d+){1,2}rc\d+$/ # RC version required for publish from development - - q-ctrl/pypi_publish_prod: + - q-ctrl/pypi_publish: context: q-ctrl-api-production requires: - - q-ctrl/test - - q-ctrl/build + - q-ctrl/open_test + - q-ctrl/open_build filters: branches: only: From 86e8a7def774f9e3a455f93d69bbc50cb6877af6 Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Tue, 18 Jun 2019 17:22:43 +1000 Subject: [PATCH 15/18] Newer orb --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b0061d4b..e9a8cfa1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.51 + q-ctrl: q-ctrl/python@dev:0.0.71 workflows: version: 2 From 2f8fa12ec8b7190c4c0821424cb734b37dd44535 Mon Sep 17 00:00:00 2001 From: CircleCI workflow Date: Tue, 18 Jun 2019 07:24:11 +0000 Subject: [PATCH 16/18] Update setup.py to match pyproject.toml [ci skip] --- README.rst | 125 ----------------------------------------------------- setup.py | 2 +- 2 files changed, 1 insertion(+), 126 deletions(-) delete mode 100644 README.rst diff --git a/README.rst b/README.rst deleted file mode 100644 index 537ad8a2..00000000 --- a/README.rst +++ /dev/null @@ -1,125 +0,0 @@ - -Q-CTRL Open Controls -==================== - -Q-CTRL Open Controls is an open-source Python package that makes it easy to create and deploy established error-robust quantum control protocols from the open literature. The aim of the package is to be the most comprehensive library of published and tested quantum control techniques developed by the community, with easy to use export functions allowing users to deploy these controls on: - - -* Custom quantum hardware -* Publicly available cloud quantum computers -* The `Q-CTRL product suite `_ - -Anyone interested in quantum control is welcome to contribute to this project. - -Table of Contents ------------------ - - -* `Installation <#installation>`_ -* `Usage <#usage>`_ -* `Contributing <#contributing>`_ -* `Credits <#credits>`_ -* `License <#license>`_ - -Installation ------------- - -Q-CTRL Open Controls can be install through ``pip`` or from source. We recommend the ``pip`` distribution to get the most recent stable release. If you want the latest features then install from source. - -Requirements -^^^^^^^^^^^^ - -To use Q-CTRL Open Controls you will need an installation of Python. We recommend using the `Anaconda `_ distribution of Python. Anaconda includes standard numerical and scientific Python packages which are optimally compiled for your machine. Follow the `Anaconda Installation `_ instructions and consult the `Anaconda User guide `_ to get started. - -We use interactive jupyter notebooks for our usage examples. The Anaconda python distribution comes with editors for these files, or you can `install the jupyter notebook editor `_ on its own. - -Using PyPi -^^^^^^^^^^ - -Use ``pip`` to install the latest version of Q-CTRL Open Controls. - -.. code-block:: shell - - pip install qctrl-open-controls - -From Source -^^^^^^^^^^^ - -The source code is hosted on `Github `_. The repository can be cloned using - -.. code-block:: shell - - git clone git@github.com:qctrl/python-open-controls.git - -Once the clone is complete, you have two options: - - -#. Using setup.py - -.. code-block:: shell - - cd python-open-controls - python setup.py develop - -**Note:** We recommend installing using ``develop`` to point your installation at the source code in the directory where you cloned the repository. - - -#. Using Poetry - -.. code-block:: shell - - cd python-open-controls - ./setup-poetry.sh - -**Note:** if you are on Windows, you'll need to install `Poetry `_ manually, and use: - -.. code-block:: cmd - - cd python-open-controls - poetry install - -Once installed via one of the above methods, test your installation by running ``pytest`` in the ``python-open-controls`` directory. - -.. code-block:: shell - - pytest - -Usage ------ - -Usage depends on the application. We've provided a set of `example Jupyter notebooks `_ addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. - -Dynamical Decoupling Sequences (DDS) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Q-CTRL Open Controls can create a large library of standard DDS which can be exported in a variety of formats. - -Create a DDS -~~~~~~~~~~~~ - -`\ ``examples/creating_a_dds.ipynb`` `_ demonstrates how to use Q-CTRL Open Controls to create a DDS from a large library of published dynamical decoupling protocols. It also shows how to make Custom DDS with timings, offsets and unitaries defined by the user. The notebook shows how to export a DDS for deployment in the `Q-CTRL products `_ or your quantum hardware. - -Export a DDS to Qiskit -~~~~~~~~~~~~~~~~~~~~~~ - -`\ ``examples/export_a_dds_to_qiskit.ipynb`` `_ demonstrates how to take a DDS and convert it to a Qiskit circuit so it can be run on IBM's quantum computers. It also demonstrates using a DDS to improve the performance of a quantum circuit execution by extending the coherence time of a qubit. - -Export a DDS to Cirq -~~~~~~~~~~~~~~~~~~~~ - -`\ ``examples/export_a_dds_to_cirq.ipynb`` `_ demonstrates how to take a DDS and convert it to a Cirq circuit or schdule. It also shows how to run a circuit or schedule in a Cirq simulator. - -Contributing ------------- - -See `Contributing `_. - -Credits -------- - -See `Contributors `_. - -License -------- - -See `LICENSE `_. diff --git a/setup.py b/setup.py index 973b2bc4..d02ba70a 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ readme = '' here = os.path.abspath(os.path.dirname(__file__)) -readme_path = os.path.join(here, 'README.rst') +readme_path = os.path.join(here, 'README.md') if os.path.exists(readme_path): with open(readme_path, 'rb') as stream: readme = stream.read().decode('utf8') From a3e187bdb914c9496a4a03d3c3dd6e2b6aa9a9da Mon Sep 17 00:00:00 2001 From: Steve Gore Date: Tue, 18 Jun 2019 17:25:36 +1000 Subject: [PATCH 17/18] Newer orb --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e9a8cfa1..b23f12fe 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: - q-ctrl: q-ctrl/python@dev:0.0.71 + q-ctrl: q-ctrl/python@dev:0.0.72 workflows: version: 2 From 71d9c7e6f2aef83863fad711b40984c2db953fe4 Mon Sep 17 00:00:00 2001 From: CircleCI workflow Date: Tue, 18 Jun 2019 07:27:08 +0000 Subject: [PATCH 18/18] Update setup.py to match pyproject.toml [ci skip] --- README.rst | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 2 +- 2 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 README.rst diff --git a/README.rst b/README.rst new file mode 100644 index 00000000..537ad8a2 --- /dev/null +++ b/README.rst @@ -0,0 +1,125 @@ + +Q-CTRL Open Controls +==================== + +Q-CTRL Open Controls is an open-source Python package that makes it easy to create and deploy established error-robust quantum control protocols from the open literature. The aim of the package is to be the most comprehensive library of published and tested quantum control techniques developed by the community, with easy to use export functions allowing users to deploy these controls on: + + +* Custom quantum hardware +* Publicly available cloud quantum computers +* The `Q-CTRL product suite `_ + +Anyone interested in quantum control is welcome to contribute to this project. + +Table of Contents +----------------- + + +* `Installation <#installation>`_ +* `Usage <#usage>`_ +* `Contributing <#contributing>`_ +* `Credits <#credits>`_ +* `License <#license>`_ + +Installation +------------ + +Q-CTRL Open Controls can be install through ``pip`` or from source. We recommend the ``pip`` distribution to get the most recent stable release. If you want the latest features then install from source. + +Requirements +^^^^^^^^^^^^ + +To use Q-CTRL Open Controls you will need an installation of Python. We recommend using the `Anaconda `_ distribution of Python. Anaconda includes standard numerical and scientific Python packages which are optimally compiled for your machine. Follow the `Anaconda Installation `_ instructions and consult the `Anaconda User guide `_ to get started. + +We use interactive jupyter notebooks for our usage examples. The Anaconda python distribution comes with editors for these files, or you can `install the jupyter notebook editor `_ on its own. + +Using PyPi +^^^^^^^^^^ + +Use ``pip`` to install the latest version of Q-CTRL Open Controls. + +.. code-block:: shell + + pip install qctrl-open-controls + +From Source +^^^^^^^^^^^ + +The source code is hosted on `Github `_. The repository can be cloned using + +.. code-block:: shell + + git clone git@github.com:qctrl/python-open-controls.git + +Once the clone is complete, you have two options: + + +#. Using setup.py + +.. code-block:: shell + + cd python-open-controls + python setup.py develop + +**Note:** We recommend installing using ``develop`` to point your installation at the source code in the directory where you cloned the repository. + + +#. Using Poetry + +.. code-block:: shell + + cd python-open-controls + ./setup-poetry.sh + +**Note:** if you are on Windows, you'll need to install `Poetry `_ manually, and use: + +.. code-block:: cmd + + cd python-open-controls + poetry install + +Once installed via one of the above methods, test your installation by running ``pytest`` in the ``python-open-controls`` directory. + +.. code-block:: shell + + pytest + +Usage +----- + +Usage depends on the application. We've provided a set of `example Jupyter notebooks `_ addressing a variety of quantum control problems. Below is a short description of each notebook grouped by application. For further details on usage, use the inline documentation in the source code. + +Dynamical Decoupling Sequences (DDS) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Q-CTRL Open Controls can create a large library of standard DDS which can be exported in a variety of formats. + +Create a DDS +~~~~~~~~~~~~ + +`\ ``examples/creating_a_dds.ipynb`` `_ demonstrates how to use Q-CTRL Open Controls to create a DDS from a large library of published dynamical decoupling protocols. It also shows how to make Custom DDS with timings, offsets and unitaries defined by the user. The notebook shows how to export a DDS for deployment in the `Q-CTRL products `_ or your quantum hardware. + +Export a DDS to Qiskit +~~~~~~~~~~~~~~~~~~~~~~ + +`\ ``examples/export_a_dds_to_qiskit.ipynb`` `_ demonstrates how to take a DDS and convert it to a Qiskit circuit so it can be run on IBM's quantum computers. It also demonstrates using a DDS to improve the performance of a quantum circuit execution by extending the coherence time of a qubit. + +Export a DDS to Cirq +~~~~~~~~~~~~~~~~~~~~ + +`\ ``examples/export_a_dds_to_cirq.ipynb`` `_ demonstrates how to take a DDS and convert it to a Cirq circuit or schdule. It also shows how to run a circuit or schedule in a Cirq simulator. + +Contributing +------------ + +See `Contributing `_. + +Credits +------- + +See `Contributors `_. + +License +------- + +See `LICENSE `_. diff --git a/setup.py b/setup.py index d02ba70a..973b2bc4 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ readme = '' here = os.path.abspath(os.path.dirname(__file__)) -readme_path = os.path.join(here, 'README.md') +readme_path = os.path.join(here, 'README.rst') if os.path.exists(readme_path): with open(readme_path, 'rb') as stream: readme = stream.read().decode('utf8')