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.
- qiskit_serverless-0.11.0/PKG-INFO +143 -0
- qiskit_serverless-0.11.0/README.md +125 -0
- qiskit_serverless-0.11.0/pyproject.toml +6 -0
- qiskit_serverless-0.11.0/qiskit_serverless/__init__.py +51 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/__init__.py +89 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/client.py +737 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/constants.py +58 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/decorators.py +453 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/files.py +128 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/function.py +116 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/job.py +804 -0
- qiskit_serverless-0.11.0/qiskit_serverless/core/tracing.py +151 -0
- qiskit_serverless-0.11.0/qiskit_serverless/exception.py +31 -0
- qiskit_serverless-0.11.0/qiskit_serverless/serializers/__init__.py +42 -0
- qiskit_serverless-0.11.0/qiskit_serverless/serializers/program_serializers.py +84 -0
- qiskit_serverless-0.11.0/qiskit_serverless/serializers/serializers.py +106 -0
- qiskit_serverless-0.11.0/qiskit_serverless/utils/__init__.py +34 -0
- qiskit_serverless-0.11.0/qiskit_serverless/utils/errors.py +54 -0
- qiskit_serverless-0.11.0/qiskit_serverless/utils/json.py +124 -0
- qiskit_serverless-0.11.0/qiskit_serverless/utils/storage.py +77 -0
- qiskit_serverless-0.11.0/qiskit_serverless/visualizaiton/__init__.py +29 -0
- qiskit_serverless-0.11.0/qiskit_serverless/visualizaiton/widget.py +329 -0
- qiskit_serverless-0.11.0/qiskit_serverless.egg-info/PKG-INFO +143 -0
- qiskit_serverless-0.11.0/qiskit_serverless.egg-info/SOURCES.txt +36 -0
- qiskit_serverless-0.11.0/qiskit_serverless.egg-info/dependency_links.txt +1 -0
- qiskit_serverless-0.11.0/qiskit_serverless.egg-info/requires.txt +15 -0
- qiskit_serverless-0.11.0/qiskit_serverless.egg-info/top_level.txt +2 -0
- qiskit_serverless-0.11.0/setup.cfg +7 -0
- qiskit_serverless-0.11.0/setup.py +41 -0
- qiskit_serverless-0.11.0/tests/__init__.py +0 -0
- qiskit_serverless-0.11.0/tests/core/__init__.py +0 -0
- qiskit_serverless-0.11.0/tests/core/test_decorator.py +79 -0
- qiskit_serverless-0.11.0/tests/core/test_job.py +57 -0
- qiskit_serverless-0.11.0/tests/core/test_pattern.py +57 -0
- qiskit_serverless-0.11.0/tests/serializers/__init__.py +0 -0
- qiskit_serverless-0.11.0/tests/serializers/test_program_serializers.py +68 -0
- 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
|
+
[](https://github.com/Qiskit-Extensions/qiskit-serverless/releases)
|
|
20
|
+
[](https://github.com/Qiskit-Extensions/qiskit-serverless/actions/workflows/client-verify.yaml)
|
|
21
|
+
[](https://github.com/qiskit-community/quantum-prototype-template/blob/main/LICENSE.txt)
|
|
22
|
+
[](https://github.com/psf/black)
|
|
23
|
+
[](https://www.python.org/)
|
|
24
|
+
[](https://github.com/Qiskit/qiskit)
|
|
25
|
+
|
|
26
|
+
# Qiskit Serverless client
|
|
27
|
+
|
|
28
|
+

|
|
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
|
+
[](https://github.com/Qiskit-Extensions/qiskit-serverless/releases)
|
|
2
|
+
[](https://github.com/Qiskit-Extensions/qiskit-serverless/actions/workflows/client-verify.yaml)
|
|
3
|
+
[](https://github.com/qiskit-community/quantum-prototype-template/blob/main/LICENSE.txt)
|
|
4
|
+
[](https://github.com/psf/black)
|
|
5
|
+
[](https://www.python.org/)
|
|
6
|
+
[](https://github.com/Qiskit/qiskit)
|
|
7
|
+
|
|
8
|
+
# Qiskit Serverless client
|
|
9
|
+
|
|
10
|
+

|
|
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,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
|
+
)
|