From c27fc387ebed0a8b743c501aa9946c8a02586809 Mon Sep 17 00:00:00 2001 From: Stefano Carrazza Date: Sun, 12 Sep 2021 21:15:24 +0200 Subject: [PATCH] initial changes --- doc/source/conf.py | 11 +- doc/source/{ => getting-started}/backends.png | Bin doc/source/getting-started/index.rst | 9 ++ .../{ => getting-started}/installation.rst | 124 +----------------- doc/source/{ => getting-started}/overview.png | Bin doc/source/getting-started/overview.rst | 119 +++++++++++++++++ doc/source/index.rst | 83 +++++++++--- doc/source/logo.png | Bin 15782 -> 0 bytes doc/source/logo_black.png | Bin 12426 -> 0 bytes setup.py | 2 +- 10 files changed, 203 insertions(+), 145 deletions(-) rename doc/source/{ => getting-started}/backends.png (100%) create mode 100644 doc/source/getting-started/index.rst rename doc/source/{ => getting-started}/installation.rst (58%) rename doc/source/{ => getting-started}/overview.png (100%) create mode 100644 doc/source/getting-started/overview.rst delete mode 100644 doc/source/logo.png delete mode 100644 doc/source/logo_black.png diff --git a/doc/source/conf.py b/doc/source/conf.py index 781ff04faf..3b3979e412 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -72,7 +72,12 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = "sphinx_rtd_theme" +html_theme = "sphinx_book_theme" +html_theme_options = { + "repository_url": "https://github.com/qiboteam/qibo", + "use_repository_button": True, +} +html_title = f"{release}" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, @@ -100,6 +105,6 @@ def setup(app): app.add_config_value("recommonmark_config", {"enable_eval_rst": True}, True) app.add_transform(AutoStructify) -html_logo = "logo.png" +html_logo = "qibo_logo.svg" -html_show_sourcelink = False +html_show_sourcelink = True diff --git a/doc/source/backends.png b/doc/source/getting-started/backends.png similarity index 100% rename from doc/source/backends.png rename to doc/source/getting-started/backends.png diff --git a/doc/source/getting-started/index.rst b/doc/source/getting-started/index.rst new file mode 100644 index 0000000000..e489009305 --- /dev/null +++ b/doc/source/getting-started/index.rst @@ -0,0 +1,9 @@ +Getting started +=============== + +.. toctree:: + :maxdepth: 1 + + overview + installation + diff --git a/doc/source/installation.rst b/doc/source/getting-started/installation.rst similarity index 58% rename from doc/source/installation.rst rename to doc/source/getting-started/installation.rst index ad9fcc66d2..f5066d6f0f 100644 --- a/doc/source/installation.rst +++ b/doc/source/getting-started/installation.rst @@ -1,127 +1,5 @@ -Overview and installation -========================= - -The Qibo project targets the development of an open-source full stack API for -quantum simulation and quantum hardware control. - -Quantum technologies, such as NISQ devices, are developed by research -institutions and require a high level of knowledge of the physics and electronic -devices used to prepare, execute and retrieve measurements from the experimental -apparatus. - -In this context, Qibo proposes an agnostic approach to quantum simulation and -hardware control, providing the required components and standards to quickly -connect the classical hardware and experimental setup into a software stack -which automates all aspects of a quantum computation. - -In the picture below, we summarize the major components of the Qibo "ecosystem". - -.. image:: overview.png - -The first component is the language API, based on Python 3, which defines the -interface for the development of quantum applications, models and new -algorithms. We also provide a large code-base of models and algorithms, -presented with code examples and step-by-step tutorials. Finally, we provide -several tools for the laboratory management and quantum hardware control. - -Qibo provides a plug and play mechanism of :ref:`backend drivers ` which -specializes the code for quantum simulation on different classical hardware -configurations, such as multi-threading CPU, single GPU and multi-GPU, and -similarly for quantum hardware control, from superconducting to ion trap -technologies including FPGA and AWG devices. - -_______________________ - -.. _backend-drivers: - -Backend drivers ---------------- - -As mentioned above, we provide backends for quantum simulation on classical -hardware and quantum hardware management and control. In the image below we -present a schematic view of the currently supported backends. - -.. image:: backends.png - -Quantum simulation is proposed through dedicated backends for single node -multi-GPU and multi-threading CPU setups. Quantum hardware control is supported -for chips based on superconducting qubits. - -_______________________ - -.. _packages: - -Packages --------- - -Following the overview description above, in this section we present the python -packages for the modules and backends presented. - -Base package -^^^^^^^^^^^^ - -* :ref:`installing-qibo` is the base package for coding and using the API. This package contains all primitives and algorithms for start coding quantum circuits, adiabatic evolution and more (see :ref:`Components`). This package comes with a lightweight quantum simulator which works on multiple CPU architectures such as x86 and arm64. - -.. _simulation-backends: - -Simulation backends -^^^^^^^^^^^^^^^^^^^ - -We provide multiple simulation backends for Qibo, which are automatically loaded -if the corresponding packages are installed, following the hierarchy below: - -* :ref:`installing-qibojit`: an efficient simulation backend for CPU, GPU and multi-GPU based on just-in-time (JIT) compiled custom operators. Install this package if you need to simulate quantum circuits with large number of qubits or complex quantum algorithms which may benefit from computing parallelism. -* :ref:`installing-qibotf`: an efficient simulation backend for CPU, GPU and multi-GPU based on TensorFlow custom operators. Install this package if you need to simulate quantum circuits with large number of qubits or complex quantum algorithms which may benefit from computing parallelism. -* :ref:`installing-tensorflow`: a pure TensorFlow implementation for quantum simulation which provides access to gradient descent optimization and the possibility to implement classical and quantum architectures together. This backend is not optimized for memory and speed, use :ref:`installing-qibotf` instead. -* :ref:`installing-numpy`: a lightweight quantum simulator shipped with the :ref:`installing-qibo` base package. Use this simulator if your CPU architecture is not supported by the other backends. Please note that the simulation performance is quite poor in comparison to other backends. - -The default backend that is used is the first available from the above list. -The user can switch to a different using the ``qibo.set_backend`` method -(see :ref:`Backends ` section for more details). - -The active default backend will be printed as an info message the first time -Qibo is imported in the code. If qibojit and qibotf are not installed, -an additional warning will appear prompting the user to install one of the two -for increased performance and multi-threading and/or GPU capabilities. -The logging level can be controlled using the ``QIBO_LOG_LEVEL`` environment -variable. This can be set to 3 to hide info messages or 4 to hide both info -and warning messages. The default value is 1 allowing all messages to appear. - - -.. _hardware-backends: - -Hardware backends -^^^^^^^^^^^^^^^^^ - -We provide the following hardware control backends for Qibo: - -* :ref:`installing-qiboicarusq` (*experimental*): a module for laboratories, containing the specifics to operate Qibo on chips based on superconducting qubits, designed specifically for the IcarusQ experiment at `CQT `_. - -_______________________ - -Operating systems support -------------------------- - -In the table below we summarize the status of *pre-compiled binaries -distributed with pypi* for the packages listed above. - -+------------------+------+---------+------------------+------------+ -| Operating System | qibo | qibojit | qibotf (cpu/gpu) | tensorflow | -+==================+======+=========+==================+============+ -| Linux x86 | Yes | Yes | Yes/Yes | Yes | -+------------------+------+---------+------------------+------------+ -| MacOS >= 10.15 | Yes | Yes | Yes/No | Yes | -+------------------+------+---------+------------------+------------+ -| Windows | Yes | Yes | No/No | Yes | -+------------------+------+---------+------------------+------------+ - -.. note:: - All packages are supported for Python >= 3.6. - -_______________________ - Installation instructions -------------------------- +========================= .. _installing-qibo: diff --git a/doc/source/overview.png b/doc/source/getting-started/overview.png similarity index 100% rename from doc/source/overview.png rename to doc/source/getting-started/overview.png diff --git a/doc/source/getting-started/overview.rst b/doc/source/getting-started/overview.rst new file mode 100644 index 0000000000..778b881f1c --- /dev/null +++ b/doc/source/getting-started/overview.rst @@ -0,0 +1,119 @@ +Project overview +================ + +The Qibo project targets the development of an open-source full stack API for +quantum simulation and quantum hardware control. + +Quantum technologies, such as NISQ devices, are developed by research +institutions and require a high level of knowledge of the physics and electronic +devices used to prepare, execute and retrieve measurements from the experimental +apparatus. + +In this context, Qibo proposes an agnostic approach to quantum simulation and +hardware control, providing the required components and standards to quickly +connect the classical hardware and experimental setup into a software stack +which automates all aspects of a quantum computation. + +In the picture below, we summarize the major components of the Qibo "ecosystem". + +.. image:: overview.png + +The first component is the language API, based on Python 3, which defines the +interface for the development of quantum applications, models and new +algorithms. We also provide a large code-base of models and algorithms, +presented with code examples and step-by-step tutorials. Finally, we provide +several tools for the laboratory management and quantum hardware control. + +Qibo provides a plug and play mechanism of :ref:`backend drivers ` which +specializes the code for quantum simulation on different classical hardware +configurations, such as multi-threading CPU, single GPU and multi-GPU, and +similarly for quantum hardware control, from superconducting to ion trap +technologies including FPGA and AWG devices. + +_______________________ + +.. _backend-drivers: + +Backend drivers +--------------- + +As mentioned above, we provide backends for quantum simulation on classical +hardware and quantum hardware management and control. In the image below we +present a schematic view of the currently supported backends. + +.. image:: backends.png + +Quantum simulation is proposed through dedicated backends for single node +multi-GPU and multi-threading CPU setups. Quantum hardware control is supported +for chips based on superconducting qubits. + +_______________________ + +.. _packages: + +Packages +-------- + +Following the overview description above, in this section we present the python +packages for the modules and backends presented. + +Base package +^^^^^^^^^^^^ + +* :ref:`installing-qibo` is the base package for coding and using the API. This package contains all primitives and algorithms for start coding quantum circuits, adiabatic evolution and more (see :ref:`Components`). This package comes with a lightweight quantum simulator which works on multiple CPU architectures such as x86 and arm64. + +.. _simulation-backends: + +Simulation backends +^^^^^^^^^^^^^^^^^^^ + +We provide multiple simulation backends for Qibo, which are automatically loaded +if the corresponding packages are installed, following the hierarchy below: + +* :ref:`installing-qibojit`: an efficient simulation backend for CPU, GPU and multi-GPU based on just-in-time (JIT) compiled custom operators. Install this package if you need to simulate quantum circuits with large number of qubits or complex quantum algorithms which may benefit from computing parallelism. +* :ref:`installing-qibotf`: an efficient simulation backend for CPU, GPU and multi-GPU based on TensorFlow custom operators. Install this package if you need to simulate quantum circuits with large number of qubits or complex quantum algorithms which may benefit from computing parallelism. +* :ref:`installing-tensorflow`: a pure TensorFlow implementation for quantum simulation which provides access to gradient descent optimization and the possibility to implement classical and quantum architectures together. This backend is not optimized for memory and speed, use :ref:`installing-qibotf` instead. +* :ref:`installing-numpy`: a lightweight quantum simulator shipped with the :ref:`installing-qibo` base package. Use this simulator if your CPU architecture is not supported by the other backends. Please note that the simulation performance is quite poor in comparison to other backends. + +The default backend that is used is the first available from the above list. +The user can switch to a different using the ``qibo.set_backend`` method +(see :ref:`Backends ` section for more details). + +The active default backend will be printed as an info message the first time +Qibo is imported in the code. If qibojit and qibotf are not installed, +an additional warning will appear prompting the user to install one of the two +for increased performance and multi-threading and/or GPU capabilities. +The logging level can be controlled using the ``QIBO_LOG_LEVEL`` environment +variable. This can be set to 3 to hide info messages or 4 to hide both info +and warning messages. The default value is 1 allowing all messages to appear. + + +.. _hardware-backends: + +Hardware backends +^^^^^^^^^^^^^^^^^ + +We provide the following hardware control backends for Qibo: + +* :ref:`installing-qiboicarusq` (*experimental*): a module for laboratories, containing the specifics to operate Qibo on chips based on superconducting qubits, designed specifically for the IcarusQ experiment at `CQT `_. + +_______________________ + +Operating systems support +------------------------- + +In the table below we summarize the status of *pre-compiled binaries +distributed with pypi* for the packages listed above. + ++------------------+------+---------+------------------+------------+ +| Operating System | qibo | qibojit | qibotf (cpu/gpu) | tensorflow | ++==================+======+=========+==================+============+ +| Linux x86 | Yes | Yes | Yes/Yes | Yes | ++------------------+------+---------+------------------+------------+ +| MacOS >= 10.15 | Yes | Yes | Yes/No | Yes | ++------------------+------+---------+------------------+------------+ +| Windows | Yes | Yes | No/No | Yes | ++------------------+------+---------+------------------+------------+ + +.. note:: + All packages are supported for Python >= 3.6. diff --git a/doc/source/index.rst b/doc/source/index.rst index d47c43e684..49bf742f89 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -1,52 +1,99 @@ .. title:: Qibo -================ -Welcome to Qibo! -================ -Qibo is an open-source full stack API for quantum simulation and quantum hardware control. +What is Qibo? +============= -Qibo key features: - * Definition of a standard language for the construction and execution of quantum circuits with device agnostic approach to simulation and quantum hardware control based on plug and play backend drivers. - * A continuously growing code-base of quantum algorithms applications presented with examples and tutorials. - * Efficient simulation backends with GPU, multi-GPU and CPU with multi-threading support. - * Simple mechanism for the implementation of new simulation and hardware backend drivers. +**Qibo is an open-source full stack API for quantum simulation and quantum hardware control.** -.. image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3997195.svg - :target: https://doi.org/10.5281/zenodo.3997195 +**Qibo** aims to contribute as a community driven quantum middleware software. +The project goals can be enumerated by the following concepts: -This documentation refers to Qibo |release|. +1. *Simplicity:* design agnostic primitives for quantum applications. +2. *Flexibility:* transparent mechanism to execute code on classical and quantum hardware. +3. *Community:* build a collaborative repository where users, developers and laboratories can find solutions to accelerate quantum development. +4. *Documentation:* provide an extensive description of all steps required to support new quantum devices or simulators. +5. *Applications:* maintain a large ecosystem of applications, quantum models and algorithms. + +**Qibo** key features: + +* Definition of a standard language for the construction and execution of quantum circuits with device agnostic approach to simulation and quantum hardware control based on plug and play backend drivers. +* A continuously growing code-base of quantum algorithms applications presented with examples and tutorials. +* Efficient simulation backends with GPU, multi-GPU and CPU with multi-threading support. +* Simple mechanism for the implementation of new simulation and hardware backend drivers. + +Publications +============ + +* *"Qibo: a framework for quantum simulation with hardware acceleration"*, + Stavros Efthymiou, Sergi Ramos-Calderer, Carlos Bravo-Prieto, Adrián + Pérez-Salinas, Diego García-Martín, Artur Garcia-Saez, José Ignacio Latorre, + Stefano Carrazza [`arXiv:2009.01845`_]. + +.. _`arXiv:2009.01845`: https://arxiv.org/abs/2009.01845 + +Contents +======== + +.. toctree:: + :maxdepth: 2 + + getting-started/index .. toctree:: + :hidden: :maxdepth: 2 - :caption: User documentation - installation examples advancedexamples applications .. toctree:: - :maxdepth: 3 + :hidden: + :maxdepth: 2 :glob: - :caption: Features + :caption: Qibo API reference qibo .. toctree:: + :hidden: :maxdepth: 2 - :caption: Developer documentation + :caption: Developer guides general contributing benchmarks -* :ref:`modindex` +.. toctree:: + :hidden: + :maxdepth: 3 + :glob: + :caption: Why use Qibo? + + qibo .. toctree:: + :hidden: + :maxdepth: 3 + :glob: + :caption: Contributing + + qibo + +.. toctree:: + :hidden: :maxdepth: 3 :glob: :caption: Extra hep + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` diff --git a/doc/source/logo.png b/doc/source/logo.png deleted file mode 100644 index 610c71313c55fd9acd047f5228684ac1b84dfd81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15782 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

sb(Zn^Es(ldSUnYXHMF&|E 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 G`TqmPZZ{MF diff --git a/doc/source/logo_black.png b/doc/source/logo_black.png deleted file mode 100644 index 04ca155e9bb14b03d069960d1968764bef8d03b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12426 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 diff --git a/setup.py b/setup.py index 4d5fbfc92a..bce7f6e851 100644 --- a/setup.py +++ b/setup.py @@ -58,7 +58,7 @@ def get_version(): ], install_requires=requirements, extras_require={ - "docs": ["sphinx", "sphinx_rtd_theme", "recommonmark", "sphinxcontrib-bibtex", "sphinx_markdown_tables", "nbsphinx", "IPython"], + "docs": ["sphinx", "sphinx_book_theme", "recommonmark", "sphinxcontrib-bibtex", "sphinx_markdown_tables", "nbsphinx", "IPython"], "tests": ["pytest", "cirq", "ply", "sklearn"], # Backends dependencies "qibotf": ["qibotf"],