qiskit-serverless 0.11.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. qiskit_serverless-0.11.0/PKG-INFO +143 -0
  2. qiskit_serverless-0.11.0/README.md +125 -0
  3. qiskit_serverless-0.11.0/pyproject.toml +6 -0
  4. qiskit_serverless-0.11.0/qiskit_serverless/__init__.py +51 -0
  5. qiskit_serverless-0.11.0/qiskit_serverless/core/__init__.py +89 -0
  6. qiskit_serverless-0.11.0/qiskit_serverless/core/client.py +737 -0
  7. qiskit_serverless-0.11.0/qiskit_serverless/core/constants.py +58 -0
  8. qiskit_serverless-0.11.0/qiskit_serverless/core/decorators.py +453 -0
  9. qiskit_serverless-0.11.0/qiskit_serverless/core/files.py +128 -0
  10. qiskit_serverless-0.11.0/qiskit_serverless/core/function.py +116 -0
  11. qiskit_serverless-0.11.0/qiskit_serverless/core/job.py +804 -0
  12. qiskit_serverless-0.11.0/qiskit_serverless/core/tracing.py +151 -0
  13. qiskit_serverless-0.11.0/qiskit_serverless/exception.py +31 -0
  14. qiskit_serverless-0.11.0/qiskit_serverless/serializers/__init__.py +42 -0
  15. qiskit_serverless-0.11.0/qiskit_serverless/serializers/program_serializers.py +84 -0
  16. qiskit_serverless-0.11.0/qiskit_serverless/serializers/serializers.py +106 -0
  17. qiskit_serverless-0.11.0/qiskit_serverless/utils/__init__.py +34 -0
  18. qiskit_serverless-0.11.0/qiskit_serverless/utils/errors.py +54 -0
  19. qiskit_serverless-0.11.0/qiskit_serverless/utils/json.py +124 -0
  20. qiskit_serverless-0.11.0/qiskit_serverless/utils/storage.py +77 -0
  21. qiskit_serverless-0.11.0/qiskit_serverless/visualizaiton/__init__.py +29 -0
  22. qiskit_serverless-0.11.0/qiskit_serverless/visualizaiton/widget.py +329 -0
  23. qiskit_serverless-0.11.0/qiskit_serverless.egg-info/PKG-INFO +143 -0
  24. qiskit_serverless-0.11.0/qiskit_serverless.egg-info/SOURCES.txt +36 -0
  25. qiskit_serverless-0.11.0/qiskit_serverless.egg-info/dependency_links.txt +1 -0
  26. qiskit_serverless-0.11.0/qiskit_serverless.egg-info/requires.txt +15 -0
  27. qiskit_serverless-0.11.0/qiskit_serverless.egg-info/top_level.txt +2 -0
  28. qiskit_serverless-0.11.0/setup.cfg +7 -0
  29. qiskit_serverless-0.11.0/setup.py +41 -0
  30. qiskit_serverless-0.11.0/tests/__init__.py +0 -0
  31. qiskit_serverless-0.11.0/tests/core/__init__.py +0 -0
  32. qiskit_serverless-0.11.0/tests/core/test_decorator.py +79 -0
  33. qiskit_serverless-0.11.0/tests/core/test_job.py +57 -0
  34. qiskit_serverless-0.11.0/tests/core/test_pattern.py +57 -0
  35. qiskit_serverless-0.11.0/tests/serializers/__init__.py +0 -0
  36. qiskit_serverless-0.11.0/tests/serializers/test_program_serializers.py +68 -0
  37. qiskit_serverless-0.11.0/tests/utils.py +23 -0
@@ -0,0 +1,143 @@
1
+ Metadata-Version: 2.1
2
+ Name: qiskit_serverless
3
+ Version: 0.11.0
4
+ Keywords: qiskit serverless quantum computing
5
+ Classifier: Development Status :: 3 - Alpha
6
+ Classifier: Intended Audience :: Developers
7
+ Classifier: Intended Audience :: Science/Research
8
+ Classifier: License :: OSI Approved :: Apache Software License
9
+ Classifier: Natural Language :: English
10
+ Classifier: Operating System :: MacOS
11
+ Classifier: Operating System :: POSIX :: Linux
12
+ Classifier: Operating System :: Microsoft :: Windows
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Topic :: Scientific/Engineering :: Physics
16
+ Requires-Python: >=3.9
17
+ Description-Content-Type: text/markdown
18
+
19
+ [![Stability](https://img.shields.io/badge/stability-alpha-f4d03f.svg)](https://github.com/Qiskit-Extensions/qiskit-serverless/releases)
20
+ [![Client verify process](https://github.com/Qiskit-Extensions/qiskit-serverless/actions/workflows/client-verify.yaml/badge.svg)](https://github.com/Qiskit-Extensions/qiskit-serverless/actions/workflows/client-verify.yaml)
21
+ [![License](https://img.shields.io/github/license/qiskit-community/quantum-prototype-template?label=License)](https://github.com/qiskit-community/quantum-prototype-template/blob/main/LICENSE.txt)
22
+ [![Code style: Black](https://img.shields.io/badge/Code%20style-Black-000.svg)](https://github.com/psf/black)
23
+ [![Python](https://img.shields.io/badge/Python-3.8%20%7C%203.9%20%7C%203.10-informational)](https://www.python.org/)
24
+ [![Qiskit](https://img.shields.io/badge/Qiskit-%E2%89%A5%200.39.0-6133BD)](https://github.com/Qiskit/qiskit)
25
+
26
+ # Qiskit Serverless client
27
+
28
+ ![diagram](https://raw.githubusercontent.com/Qiskit-Extensions/qiskit-serverless/main/docs/images/qs_diagram.png)
29
+
30
+ # Installation
31
+
32
+ ```shell
33
+ pip install qiskit_serverless
34
+ ```
35
+
36
+ ## Documentation
37
+
38
+ Full docs can be found at https://qiskit-extensions.github.io/qiskit-serverless/
39
+
40
+ ## Usage
41
+
42
+ ### Step 1: write pattern
43
+
44
+ ```python
45
+ from qiskit_serverless import distribute_task, get, get_arguments, save_result
46
+
47
+ from qiskit import QuantumCircuit
48
+ from qiskit.circuit.random import random_circuit
49
+ from qiskit.primitives import Sampler
50
+ from qiskit.quantum_info import SparsePauliOp
51
+
52
+ # 1. let's annotate out function to convert it
53
+ # to distributed async function
54
+ # using `distribute_task` decorator
55
+ @distribute_task()
56
+ def distributed_sample(circuit: QuantumCircuit):
57
+ """Calculates quasi dists as a distributed function."""
58
+ return Sampler().run(circuit).result().quasi_dists[0]
59
+
60
+
61
+ # 2. our program will have one arguments
62
+ # `circuits` which will store list of circuits
63
+ # we want to sample in parallel.
64
+ # Let's use `get_arguments` funciton
65
+ # to access all program arguments
66
+ arguments = get_arguments()
67
+ circuits = arguments.get("circuits", [])
68
+
69
+ # 3. run our functions in a loop
70
+ # and get execution references back
71
+ function_references = [
72
+ distributed_sample(circuit)
73
+ for circuit in circuits
74
+ ]
75
+
76
+ # 4. `get` function will collect all
77
+ # results from distributed functions
78
+ collected_results = get(function_references)
79
+
80
+ # 5. `save_result` will save results of program execution
81
+ # so we can access it later
82
+ save_result({
83
+ "quasi_dists": collected_results
84
+ })
85
+ ```
86
+
87
+
88
+ ### Step 2: run pattern
89
+
90
+ ```python
91
+ from qiskit_serverless import ServerlessProvider, QiskitPattern
92
+ from qiskit.circuit.random import random_circuit
93
+
94
+ serverless = ServerlessProvider(
95
+ username="<USERNAME>",
96
+ password="<PASSWORD>",
97
+ host="<GATEWAY_ADDRESS>",
98
+ )
99
+
100
+ # create program
101
+ program = QiskitPattern(
102
+ title="Quickstart",
103
+ entrypoint="pattern.py",
104
+ working_dir="./src"
105
+ )
106
+
107
+ # create inputs to our program
108
+ circuits = []
109
+ for _ in range(3):
110
+ circuit = random_circuit(3, 2)
111
+ circuit.measure_all()
112
+ circuits.append(circuit)
113
+
114
+ # run program
115
+ job = serverless.run(
116
+ program=program,
117
+ arguments={
118
+ "circuits": circuits
119
+ }
120
+ )
121
+ ```
122
+
123
+ ### Step 3: monitor job status
124
+
125
+ ```python
126
+ job.status()
127
+ # 'DONE'
128
+
129
+ # or get logs
130
+ job.logs()
131
+ ```
132
+
133
+
134
+ ### Step 4: get results
135
+
136
+ ```python
137
+ job.result()
138
+ # {"quasi_dists": [
139
+ # {"0": 0.25, "1": 0.25, "2": 0.2499999999999999, "3": 0.2499999999999999},
140
+ # {"0": 0.1512273969460124, "1": 0.0400459556274728, "6": 0.1693190975212014, "7": 0.6394075499053132},
141
+ # {"0": 0.25, "1": 0.25, "4": 0.2499999999999999, "5": 0.2499999999999999}
142
+ # ]}
143
+ ```
@@ -0,0 +1,125 @@
1
+ [![Stability](https://img.shields.io/badge/stability-alpha-f4d03f.svg)](https://github.com/Qiskit-Extensions/qiskit-serverless/releases)
2
+ [![Client verify process](https://github.com/Qiskit-Extensions/qiskit-serverless/actions/workflows/client-verify.yaml/badge.svg)](https://github.com/Qiskit-Extensions/qiskit-serverless/actions/workflows/client-verify.yaml)
3
+ [![License](https://img.shields.io/github/license/qiskit-community/quantum-prototype-template?label=License)](https://github.com/qiskit-community/quantum-prototype-template/blob/main/LICENSE.txt)
4
+ [![Code style: Black](https://img.shields.io/badge/Code%20style-Black-000.svg)](https://github.com/psf/black)
5
+ [![Python](https://img.shields.io/badge/Python-3.8%20%7C%203.9%20%7C%203.10-informational)](https://www.python.org/)
6
+ [![Qiskit](https://img.shields.io/badge/Qiskit-%E2%89%A5%200.39.0-6133BD)](https://github.com/Qiskit/qiskit)
7
+
8
+ # Qiskit Serverless client
9
+
10
+ ![diagram](https://raw.githubusercontent.com/Qiskit-Extensions/qiskit-serverless/main/docs/images/qs_diagram.png)
11
+
12
+ # Installation
13
+
14
+ ```shell
15
+ pip install qiskit_serverless
16
+ ```
17
+
18
+ ## Documentation
19
+
20
+ Full docs can be found at https://qiskit-extensions.github.io/qiskit-serverless/
21
+
22
+ ## Usage
23
+
24
+ ### Step 1: write pattern
25
+
26
+ ```python
27
+ from qiskit_serverless import distribute_task, get, get_arguments, save_result
28
+
29
+ from qiskit import QuantumCircuit
30
+ from qiskit.circuit.random import random_circuit
31
+ from qiskit.primitives import Sampler
32
+ from qiskit.quantum_info import SparsePauliOp
33
+
34
+ # 1. let's annotate out function to convert it
35
+ # to distributed async function
36
+ # using `distribute_task` decorator
37
+ @distribute_task()
38
+ def distributed_sample(circuit: QuantumCircuit):
39
+ """Calculates quasi dists as a distributed function."""
40
+ return Sampler().run(circuit).result().quasi_dists[0]
41
+
42
+
43
+ # 2. our program will have one arguments
44
+ # `circuits` which will store list of circuits
45
+ # we want to sample in parallel.
46
+ # Let's use `get_arguments` funciton
47
+ # to access all program arguments
48
+ arguments = get_arguments()
49
+ circuits = arguments.get("circuits", [])
50
+
51
+ # 3. run our functions in a loop
52
+ # and get execution references back
53
+ function_references = [
54
+ distributed_sample(circuit)
55
+ for circuit in circuits
56
+ ]
57
+
58
+ # 4. `get` function will collect all
59
+ # results from distributed functions
60
+ collected_results = get(function_references)
61
+
62
+ # 5. `save_result` will save results of program execution
63
+ # so we can access it later
64
+ save_result({
65
+ "quasi_dists": collected_results
66
+ })
67
+ ```
68
+
69
+
70
+ ### Step 2: run pattern
71
+
72
+ ```python
73
+ from qiskit_serverless import ServerlessProvider, QiskitPattern
74
+ from qiskit.circuit.random import random_circuit
75
+
76
+ serverless = ServerlessProvider(
77
+ username="<USERNAME>",
78
+ password="<PASSWORD>",
79
+ host="<GATEWAY_ADDRESS>",
80
+ )
81
+
82
+ # create program
83
+ program = QiskitPattern(
84
+ title="Quickstart",
85
+ entrypoint="pattern.py",
86
+ working_dir="./src"
87
+ )
88
+
89
+ # create inputs to our program
90
+ circuits = []
91
+ for _ in range(3):
92
+ circuit = random_circuit(3, 2)
93
+ circuit.measure_all()
94
+ circuits.append(circuit)
95
+
96
+ # run program
97
+ job = serverless.run(
98
+ program=program,
99
+ arguments={
100
+ "circuits": circuits
101
+ }
102
+ )
103
+ ```
104
+
105
+ ### Step 3: monitor job status
106
+
107
+ ```python
108
+ job.status()
109
+ # 'DONE'
110
+
111
+ # or get logs
112
+ job.logs()
113
+ ```
114
+
115
+
116
+ ### Step 4: get results
117
+
118
+ ```python
119
+ job.result()
120
+ # {"quasi_dists": [
121
+ # {"0": 0.25, "1": 0.25, "2": 0.2499999999999999, "3": 0.2499999999999999},
122
+ # {"0": 0.1512273969460124, "1": 0.0400459556274728, "6": 0.1693190975212014, "7": 0.6394075499053132},
123
+ # {"0": 0.25, "1": 0.25, "4": 0.2499999999999999, "5": 0.2499999999999999}
124
+ # ]}
125
+ ```
@@ -0,0 +1,6 @@
1
+ [build-system]
2
+ requires = ["setuptools>=69.2.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [tool.pytest.ini_options]
6
+ filterwarnings = ["ignore:::.*qiskit.opflow.*", "ignore:::.*qiskit.primitives.*"]
@@ -0,0 +1,51 @@
1
+ # This code is a Qiskit project.
2
+ #
3
+ # (C) Copyright IBM 2022.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """
14
+ .. currentmodule:: qiskit_serverless
15
+
16
+ .. autosummary::
17
+ :toctree: ../stubs/
18
+
19
+ QiskitServerlessException
20
+ """
21
+ # pylint: disable=W0404
22
+ from importlib_metadata import version as metadata_version, PackageNotFoundError
23
+
24
+ from .core import (
25
+ BaseProvider,
26
+ BaseClient,
27
+ distribute_task,
28
+ distribute_qiskit_function,
29
+ get,
30
+ put,
31
+ get_refs_by_status,
32
+ ServerlessProvider,
33
+ ServerlessClient,
34
+ IBMServerlessProvider,
35
+ IBMServerlessClient,
36
+ RayProvider,
37
+ RayClient,
38
+ LocalProvider,
39
+ LocalClient,
40
+ save_result,
41
+ Configuration,
42
+ )
43
+ from .exception import QiskitServerlessException
44
+ from .core.function import QiskitPattern, QiskitFunction
45
+ from .serializers import get_arguments
46
+
47
+ try:
48
+ __version__ = metadata_version("qiskit_serverless")
49
+ except PackageNotFoundError: # pragma: no cover
50
+ # package is not installed
51
+ pass
@@ -0,0 +1,89 @@
1
+ # This code is a Qiskit project.
2
+ #
3
+ # (C) Copyright IBM 2022.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """
14
+ ============================================
15
+ Core module (:mod:`qiskit_serverless.core`)
16
+ ============================================
17
+
18
+ .. currentmodule:: qiskit_serverless.core
19
+
20
+ Qiskit Serverless core module classes and functions
21
+ ====================================================
22
+
23
+ Core abstractions
24
+ -----------------
25
+
26
+ .. autosummary::
27
+ :toctree: ../stubs/
28
+
29
+ ServerlessClient
30
+ IBMServerlessClient
31
+ BaseClient
32
+ RayClient
33
+ LocalClient
34
+ ComputeResource
35
+ Job
36
+ GatewayJobClient
37
+ BaseJobClient
38
+ RayJobClient
39
+ save_result
40
+ QiskitPattern
41
+ QiskitFunction
42
+ Target
43
+ CircuitMeta
44
+ fetch_execution_meta
45
+ distribute_task
46
+ distribute_program
47
+ distribute_qiskit_function
48
+ get
49
+ put
50
+ get_refs_by_status
51
+
52
+ """
53
+
54
+ from .client import (
55
+ BaseProvider,
56
+ BaseClient,
57
+ ComputeResource,
58
+ ServerlessProvider,
59
+ ServerlessClient,
60
+ IBMServerlessProvider,
61
+ IBMServerlessClient,
62
+ LocalProvider,
63
+ LocalClient,
64
+ RayProvider,
65
+ RayClient,
66
+ )
67
+
68
+ from .job import (
69
+ BaseJobClient,
70
+ RayJobClient,
71
+ GatewayJobClient,
72
+ LocalJobClient,
73
+ Job,
74
+ save_result,
75
+ Configuration,
76
+ )
77
+ from .function import QiskitPattern, QiskitFunction
78
+ from .decorators import (
79
+ remote,
80
+ get,
81
+ put,
82
+ get_refs_by_status,
83
+ fetch_execution_meta,
84
+ distribute_task,
85
+ distribute_qiskit_function,
86
+ distribute_program,
87
+ Target,
88
+ CircuitMeta,
89
+ )