quapp-pyquil 0.0.4.dev2__tar.gz → 0.0.4.dev3__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.
- {quapp_pyquil-0.0.4.dev2/quapp_pyquil.egg-info → quapp_pyquil-0.0.4.dev3}/PKG-INFO +2 -2
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/pyproject.toml +2 -2
- quapp_pyquil-0.0.4.dev3/qapp_pyquil/async_tasks/pyquil_circuit_export_task.py +25 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/component/backend/pyquil_invocation.py +5 -4
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/component/backend/pyquil_job_fetching.py +1 -2
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/factory/pyquil_device_factory.py +0 -1
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/factory/pyquil_handler_factory.py +4 -4
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/handler/invocation_handler.py +1 -2
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/device/qapp_pyquil_device.py +17 -23
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/device/rigetti_pyquil_device.py +25 -26
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3/quapp_pyquil.egg-info}/PKG-INFO +2 -2
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/quapp_pyquil.egg-info/requires.txt +1 -1
- quapp_pyquil-0.0.4.dev2/qapp_pyquil/async_tasks/pyquil_circuit_export_task.py +0 -62
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/LICENSE +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/README.md +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/async_tasks/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/component/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/component/backend/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/factory/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/factory/pyquil_provider_factory.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/handler/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/handler/job_fetching_handler.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/device/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/provider/__init__.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/provider/qapp_pyquil_provider.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/provider/rigetti_pyquil_provider.py +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/quapp_pyquil.egg-info/SOURCES.txt +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/quapp_pyquil.egg-info/dependency_links.txt +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/quapp_pyquil.egg-info/top_level.txt +0 -0
- {quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quapp-pyquil
|
|
3
|
-
Version: 0.0.4.
|
|
3
|
+
Version: 0.0.4.dev3
|
|
4
4
|
Summary: QApp pyquil library supporting QApp Platform for Quantum Computing
|
|
5
5
|
Author-email: "CITYNOW Co. Ltd. " <corp@citynow.vn>
|
|
6
6
|
License: The MIT License (MIT)
|
|
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
19
19
|
Requires-Python: <3.11,>=3.9
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: quapp-common==0.0.11.
|
|
22
|
+
Requires-Dist: quapp-common==0.0.11.dev6
|
|
23
23
|
Requires-Dist: pyquil==4.15.0
|
|
24
24
|
Provides-Extra: dev
|
|
25
25
|
Requires-Dist: black; extra == "dev"
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "quapp-pyquil"
|
|
7
|
-
version = "0.0.4.
|
|
7
|
+
version = "0.0.4.dev3"
|
|
8
8
|
description = "QApp pyquil library supporting QApp Platform for Quantum Computing"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "CITYNOW Co. Ltd. ", email = "corp@citynow.vn" }]
|
|
@@ -16,7 +16,7 @@ classifiers = [
|
|
|
16
16
|
]
|
|
17
17
|
keywords = ["quapp", "qapp-pyquil", "quantum"]
|
|
18
18
|
dependencies = [
|
|
19
|
-
"quapp-common==0.0.11.
|
|
19
|
+
"quapp-common==0.0.11.dev6",
|
|
20
20
|
"pyquil==4.15.0"
|
|
21
21
|
]
|
|
22
22
|
requires-python = ">=3.9,<3.11"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""
|
|
2
|
+
QApp Platform Project pennylane_circuit_export_task.py Copyright © CITYNOW Co. Ltd. All rights reserved.
|
|
3
|
+
"""
|
|
4
|
+
from quapp_common.async_tasks.export_circuit_task import CircuitExportTask
|
|
5
|
+
from quapp_common.data.async_task.circuit_export.backend_holder import BackendDataHolder
|
|
6
|
+
from quapp_common.data.async_task.circuit_export.circuit_holder import CircuitDataHolder
|
|
7
|
+
from quapp_common.data.response.custom_header import CustomHeader
|
|
8
|
+
|
|
9
|
+
import requests
|
|
10
|
+
|
|
11
|
+
class PyquilCircuitExportTask(CircuitExportTask):
|
|
12
|
+
|
|
13
|
+
def __init__(self, circuit_data_holder: CircuitDataHolder,
|
|
14
|
+
backend_data_holder: BackendDataHolder,
|
|
15
|
+
project_header: CustomHeader, workspace_header: CustomHeader):
|
|
16
|
+
super().__init__(circuit_data_holder, backend_data_holder,
|
|
17
|
+
project_header, workspace_header)
|
|
18
|
+
|
|
19
|
+
def _transpile_circuit(self):
|
|
20
|
+
# no implementation needed for Pyquil
|
|
21
|
+
pass
|
|
22
|
+
|
|
23
|
+
def do(self):
|
|
24
|
+
return
|
|
25
|
+
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
from quapp_common.component.backend.invocation import Invocation
|
|
6
|
-
from quapp_common.config.logging_config import logger
|
|
7
6
|
from quapp_common.config.thread_config import circuit_exporting_pool
|
|
8
7
|
from quapp_common.data.async_task.circuit_export.backend_holder import BackendDataHolder
|
|
9
8
|
from quapp_common.data.async_task.circuit_export.circuit_holder import CircuitDataHolder
|
|
@@ -21,25 +20,27 @@ class PyquilInvocation(Invocation):
|
|
|
21
20
|
self.num_qubits = kwargs.get('num_qubits')
|
|
22
21
|
|
|
23
22
|
def _export_circuit(self, circuit):
|
|
24
|
-
logger.info("[PyquilInvocation] _export_circuit()")
|
|
23
|
+
self.logger.info("[PyquilInvocation] _export_circuit()")
|
|
25
24
|
|
|
26
25
|
circuit_export_task = PyquilCircuitExportTask(
|
|
27
26
|
circuit_data_holder=CircuitDataHolder(circuit, self.circuit_export_url),
|
|
28
27
|
backend_data_holder=BackendDataHolder(
|
|
29
28
|
self.backend_information, self.authentication.user_token
|
|
30
29
|
),
|
|
30
|
+
project_header=self.project_header,
|
|
31
|
+
workspace_header=self.workspace_header
|
|
31
32
|
)
|
|
32
33
|
circuit_exporting_pool.submit(circuit_export_task.do)
|
|
33
34
|
|
|
34
35
|
def _create_provider(self):
|
|
35
|
-
logger.info('[PennylaneInvocation] _create_provider()')
|
|
36
|
+
self.logger.info('[PennylaneInvocation] _create_provider()')
|
|
36
37
|
|
|
37
38
|
return PyquilProviderFactory.create_provider(
|
|
38
39
|
provider_type=self.backend_information.provider_tag, sdk=self.sdk,
|
|
39
40
|
authentication=self.backend_information.authentication)
|
|
40
41
|
|
|
41
42
|
def _create_device(self, provider: Provider):
|
|
42
|
-
logger.info('[PennylaneInvocation] Creating device')
|
|
43
|
+
self.logger.info('[PennylaneInvocation] Creating device')
|
|
43
44
|
return PyquilDeviceFactory.create_device(provider=provider,
|
|
44
45
|
device_specification=self.backend_information.device_name,
|
|
45
46
|
authentication=self.backend_information.authentication,
|
|
@@ -7,7 +7,6 @@ from quapp_common.config.logging_config import logger
|
|
|
7
7
|
from quapp_common.enum.provider_tag import ProviderTag
|
|
8
8
|
from quapp_common.enum.sdk import Sdk
|
|
9
9
|
from quapp_common.enum.status.job_status import JobStatus
|
|
10
|
-
from quapp_common.enum.status.status_code import StatusCode
|
|
11
10
|
from pyquil import get_qc
|
|
12
11
|
import pickle
|
|
13
12
|
import os
|
|
@@ -52,7 +51,7 @@ class PyquilJobFetching(JobFetcher):
|
|
|
52
51
|
|
|
53
52
|
def _get_job_status(self, job):
|
|
54
53
|
|
|
55
|
-
if
|
|
54
|
+
if job.execution_duration_microseconds is not None:
|
|
56
55
|
|
|
57
56
|
if os.path.exists(self.provider_job_id+".pkl"):
|
|
58
57
|
os.remove(self.provider_job_id+".pkl")
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/factory/pyquil_device_factory.py
RENAMED
|
@@ -11,7 +11,6 @@ from quapp_common.model.provider.provider import Provider
|
|
|
11
11
|
from ..model.device.qapp_pyquil_device import QAppPyquilDevice
|
|
12
12
|
from ..model.device.rigetti_pyquil_device import RigettiPyquilDevice
|
|
13
13
|
|
|
14
|
-
|
|
15
14
|
class PyquilDeviceFactory(DeviceFactory):
|
|
16
15
|
|
|
17
16
|
@staticmethod
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/factory/pyquil_handler_factory.py
RENAMED
|
@@ -2,22 +2,22 @@
|
|
|
2
2
|
QApp Platform Project pyquil_handler_factory.py Copyright © CITYNOW Co. Ltd. All rights reserved.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from quapp_common.config.logging_config import logger
|
|
6
5
|
from quapp_common.factory.handler_factory import HandlerFactory
|
|
7
6
|
from quapp_common.handler.handler import Handler
|
|
8
7
|
|
|
9
8
|
from ..handler.invocation_handler import InvocationHandler
|
|
10
|
-
from
|
|
11
|
-
|
|
9
|
+
from quapp_common.config.logging_config import job_logger
|
|
12
10
|
class PyquilHandlerFactory(HandlerFactory):
|
|
13
11
|
|
|
14
12
|
@staticmethod
|
|
15
13
|
def create_handler(event, circuit_preparation_fn, post_processing_fn) -> Handler:
|
|
16
|
-
logger.info("[PyquilHandlerFactory] create_handler()")
|
|
17
14
|
|
|
18
15
|
request_data = event.json()
|
|
19
16
|
provider_job_id = request_data.get("providerJobId")
|
|
20
17
|
|
|
18
|
+
logger = job_logger(request_data.get('jobId'))
|
|
19
|
+
logger.debug('Creating handler')
|
|
20
|
+
|
|
21
21
|
if provider_job_id is None:
|
|
22
22
|
logger.debug("[PyquilHandlerFactory] Create InvocationHandler")
|
|
23
23
|
return InvocationHandler(
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/handler/invocation_handler.py
RENAMED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
"""
|
|
4
4
|
from quapp_common.data.request.invocation_request import InvocationRequest
|
|
5
5
|
from quapp_common.handler.handler import Handler
|
|
6
|
-
from quapp_common.config.logging_config import logger
|
|
7
6
|
|
|
8
7
|
from ..component.backend.pyquil_invocation import PyquilInvocation
|
|
9
8
|
|
|
@@ -17,7 +16,7 @@ class InvocationHandler(Handler):
|
|
|
17
16
|
self.circuit_preparation_fn = circuit_preparation_fn
|
|
18
17
|
|
|
19
18
|
def handle(self):
|
|
20
|
-
logger.info("[InvocationHandler] handle()")
|
|
19
|
+
self.logger.info("[InvocationHandler] handle()")
|
|
21
20
|
|
|
22
21
|
invocation_request = InvocationRequest(self.request_data)
|
|
23
22
|
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/model/device/qapp_pyquil_device.py
RENAMED
|
@@ -4,12 +4,10 @@
|
|
|
4
4
|
Copyright © CITYNOW Co. Ltd. All rights reserved.
|
|
5
5
|
"""
|
|
6
6
|
import time
|
|
7
|
-
import math
|
|
8
7
|
|
|
9
8
|
from quapp_common.data.response.authentication import Authentication
|
|
10
|
-
from quapp_common.data.response.
|
|
9
|
+
from quapp_common.data.response.custom_header import CustomHeader
|
|
11
10
|
from quapp_common.model.device.device import Device
|
|
12
|
-
from quapp_common.config.logging_config import logger
|
|
13
11
|
from quapp_common.data.device.circuit_running_option import CircuitRunningOption
|
|
14
12
|
from quapp_common.model.provider.provider import Provider
|
|
15
13
|
from quapp_common.enum.invocation_step import InvocationStep
|
|
@@ -18,11 +16,11 @@ from quapp_common.enum.invocation_step import InvocationStep
|
|
|
18
16
|
class QAppPyquilDevice(Device):
|
|
19
17
|
def __init__(self, provider: Provider, device_specification: str):
|
|
20
18
|
super().__init__(provider, device_specification)
|
|
21
|
-
logger.debug('[QAppPyquilDevice] Initializing device specification')
|
|
19
|
+
self.logger.debug('[QAppPyquilDevice] Initializing device specification')
|
|
22
20
|
self.device_specification = device_specification
|
|
23
21
|
|
|
24
22
|
def _create_job(self, circuit, options: CircuitRunningOption):
|
|
25
|
-
logger.debug(
|
|
23
|
+
self.logger.debug(
|
|
26
24
|
'[QAppPyquilDevice] Creating job with {0} shots'.format(
|
|
27
25
|
options.shots))
|
|
28
26
|
|
|
@@ -39,41 +37,41 @@ class QAppPyquilDevice(Device):
|
|
|
39
37
|
return data
|
|
40
38
|
|
|
41
39
|
def _is_simulator(self) -> bool:
|
|
42
|
-
logger.debug('[QAppPyquilDevice] Is simulator')
|
|
40
|
+
self.logger.debug('[QAppPyquilDevice] Is simulator')
|
|
43
41
|
return True
|
|
44
42
|
|
|
45
43
|
def _produce_histogram_data(self, job_result) -> dict | None:
|
|
46
|
-
logger.info('[PyquilDevice] Producing histogram data')
|
|
44
|
+
self.logger.info('[PyquilDevice] Producing histogram data')
|
|
47
45
|
|
|
48
46
|
histogram = job_result.get('histogram')
|
|
49
47
|
|
|
50
48
|
if histogram is None:
|
|
51
|
-
logger.debug("[PyquilDevice] Can't produce histogram")
|
|
49
|
+
self.logger.debug("[PyquilDevice] Can't produce histogram")
|
|
52
50
|
|
|
53
51
|
return job_result.get('histogram')
|
|
54
52
|
|
|
55
53
|
def _get_provider_job_id(self, job) -> str:
|
|
56
|
-
logger.debug('[PyquilDevice] Getting job id')
|
|
54
|
+
self.logger.debug('[PyquilDevice] Getting job id')
|
|
57
55
|
|
|
58
56
|
# no job id in local simulator
|
|
59
57
|
return ""
|
|
60
58
|
|
|
61
59
|
def _get_job_status(self, job) -> str:
|
|
62
|
-
logger.debug('[PyquilDevice] Getting job status')
|
|
60
|
+
self.logger.debug('[PyquilDevice] Getting job status')
|
|
63
61
|
|
|
64
62
|
return "DONE"
|
|
65
63
|
|
|
66
64
|
def _get_job_result(self, job) -> dict:
|
|
67
|
-
logger.debug('[PyquilDevice] Getting job result')
|
|
65
|
+
self.logger.debug('[PyquilDevice] Getting job result')
|
|
68
66
|
|
|
69
67
|
return job
|
|
70
68
|
|
|
71
69
|
def _calculate_execution_time(self, job_result):
|
|
72
|
-
logger.debug('[PyquilDevice] Calculating execution time')
|
|
70
|
+
self.logger.debug('[PyquilDevice] Calculating execution time')
|
|
73
71
|
|
|
74
72
|
self.execution_time = job_result.get('time_taken_execute')
|
|
75
73
|
|
|
76
|
-
logger.debug(
|
|
74
|
+
self.logger.debug(
|
|
77
75
|
'[PyquilDevice] Execution time calculation was: {0} seconds'.format(
|
|
78
76
|
self.execution_time))
|
|
79
77
|
|
|
@@ -83,18 +81,13 @@ class QAppPyquilDevice(Device):
|
|
|
83
81
|
options: CircuitRunningOption,
|
|
84
82
|
callback_dict: dict,
|
|
85
83
|
authentication: Authentication,
|
|
86
|
-
project_header:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
@param callback_dict: callback url dictionary
|
|
90
|
-
@param options: Options for run circuit
|
|
91
|
-
@param authentication: Authentication for calling quao server
|
|
92
|
-
@param post_processing_fn: Post-processing function
|
|
93
|
-
@param circuit: Circuit was run
|
|
94
|
-
"""
|
|
84
|
+
project_header: CustomHeader,
|
|
85
|
+
workspace_header: CustomHeader):
|
|
86
|
+
|
|
95
87
|
original_job_result, job_response = self._on_execution(
|
|
96
88
|
authentication=authentication,
|
|
97
89
|
project_header=project_header,
|
|
90
|
+
workspace_header=workspace_header,
|
|
98
91
|
execution_callback=callback_dict.get(InvocationStep.EXECUTION),
|
|
99
92
|
circuit=circuit,
|
|
100
93
|
options=options)
|
|
@@ -115,4 +108,5 @@ class QAppPyquilDevice(Device):
|
|
|
115
108
|
post_processing_fn=post_processing_fn,
|
|
116
109
|
finalization_callback=callback_dict.get(
|
|
117
110
|
InvocationStep.FINALIZATION),
|
|
118
|
-
project_header=project_header
|
|
111
|
+
project_header=project_header,
|
|
112
|
+
workspace_header= workspace_header)
|
|
@@ -8,12 +8,10 @@ import math
|
|
|
8
8
|
import os
|
|
9
9
|
|
|
10
10
|
from quapp_common.data.response.authentication import Authentication
|
|
11
|
-
from quapp_common.data.response.
|
|
11
|
+
from quapp_common.data.response.custom_header import CustomHeader
|
|
12
12
|
from quapp_common.model.device.device import Device
|
|
13
|
-
from quapp_common.config.logging_config import logger
|
|
14
13
|
from quapp_common.data.device.circuit_running_option import CircuitRunningOption
|
|
15
14
|
from quapp_common.model.provider.provider import Provider
|
|
16
|
-
from quapp_common.enum.invocation_step import InvocationStep
|
|
17
15
|
from quapp_common.data.response.job_response import JobResponse
|
|
18
16
|
|
|
19
17
|
from quapp_common.component.callback.update_job_metadata import update_job_metadata
|
|
@@ -28,11 +26,11 @@ import time
|
|
|
28
26
|
class RigettiPyquilDevice(Device):
|
|
29
27
|
def __init__(self, provider: Provider, device_specification: str):
|
|
30
28
|
super().__init__(provider, device_specification)
|
|
31
|
-
logger.debug('[RigettiPyquilDevice] Initializing device specification')
|
|
29
|
+
self.logger.debug('[RigettiPyquilDevice] Initializing device specification')
|
|
32
30
|
self.device_specification = device_specification
|
|
33
31
|
|
|
34
32
|
def _create_job(self, circuit, options: CircuitRunningOption):
|
|
35
|
-
logger.debug(
|
|
33
|
+
self.logger.debug(
|
|
36
34
|
'[RigettiPyquilDevice] Creating job with {0} shots'.format(
|
|
37
35
|
options.shots))
|
|
38
36
|
|
|
@@ -42,21 +40,21 @@ class RigettiPyquilDevice(Device):
|
|
|
42
40
|
return self.device.qam.execute(executable)
|
|
43
41
|
|
|
44
42
|
def _is_simulator(self) -> bool:
|
|
45
|
-
logger.debug('[RigettiPyquilDevice] is quantum machine')
|
|
43
|
+
self.logger.debug('[RigettiPyquilDevice] is quantum machine')
|
|
46
44
|
return False
|
|
47
45
|
|
|
48
46
|
def _get_provider_job_id(self, job) -> str:
|
|
49
|
-
logger.debug('[PyquilDevice] Getting job id')
|
|
47
|
+
self.logger.debug('[PyquilDevice] Getting job id')
|
|
50
48
|
|
|
51
49
|
return job.job_id
|
|
52
50
|
|
|
53
51
|
def _get_job_status(self, job) -> str:
|
|
54
|
-
logger.debug('[PyquilDevice] Getting job status')
|
|
52
|
+
self.logger.debug('[PyquilDevice] Getting job status')
|
|
55
53
|
|
|
56
54
|
return "RUNNING"
|
|
57
55
|
|
|
58
56
|
def _calculate_execution_time(self, job_result):
|
|
59
|
-
logger.debug('[PyquilDevice] Getting execution time {}',job_result)
|
|
57
|
+
self.logger.debug('[PyquilDevice] Getting execution time {}',job_result)
|
|
60
58
|
|
|
61
59
|
# the time unit is miliseconds
|
|
62
60
|
return job_result.execution_duration_microseconds/1000
|
|
@@ -66,15 +64,16 @@ class RigettiPyquilDevice(Device):
|
|
|
66
64
|
return self.device.qam.get_result(job)
|
|
67
65
|
|
|
68
66
|
def _produce_histogram_data(self, job_result) -> dict | None:
|
|
69
|
-
logger.info('[PyquilDevice] Producing histogram data')
|
|
67
|
+
self.logger.info('[PyquilDevice] Producing histogram data')
|
|
70
68
|
|
|
71
69
|
return None
|
|
72
70
|
|
|
73
71
|
def _on_execution(self, authentication: Authentication,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
project_header: CustomHeader,
|
|
73
|
+
workspace_header: CustomHeader,
|
|
74
|
+
execution_callback: CallbackUrl,
|
|
75
|
+
circuit,
|
|
76
|
+
options: CircuitRunningOption):
|
|
78
77
|
"""
|
|
79
78
|
|
|
80
79
|
@param authentication: authentication information
|
|
@@ -84,11 +83,12 @@ class RigettiPyquilDevice(Device):
|
|
|
84
83
|
@param options: options will use for running
|
|
85
84
|
@return: job and job response
|
|
86
85
|
"""
|
|
87
|
-
logger.debug("[Invocation] On execution")
|
|
86
|
+
self.logger.debug("[Invocation] On execution")
|
|
88
87
|
|
|
89
88
|
job_response = JobResponse(authentication=authentication,
|
|
90
89
|
project_header=project_header,
|
|
91
|
-
status_code=StatusCode.DONE
|
|
90
|
+
status_code=StatusCode.DONE,
|
|
91
|
+
workspace_header=workspace_header)
|
|
92
92
|
|
|
93
93
|
update_job_metadata(job_response=job_response,
|
|
94
94
|
callback_url=execution_callback.on_start)
|
|
@@ -100,20 +100,20 @@ class RigettiPyquilDevice(Device):
|
|
|
100
100
|
|
|
101
101
|
while True:
|
|
102
102
|
|
|
103
|
-
logger.debug("fetching job result")
|
|
103
|
+
self.logger.debug("fetching job result")
|
|
104
104
|
|
|
105
105
|
try:
|
|
106
106
|
res = self._get_job_result(job)
|
|
107
|
-
logger.debug("Job result: {}".format(res))
|
|
108
|
-
if
|
|
107
|
+
self.logger.debug("Job result: {}".format(res))
|
|
108
|
+
if res.execution_duration_microseconds is not None:
|
|
109
109
|
job_response.job_status = JobStatus.DONE.value
|
|
110
110
|
original_job_result = res
|
|
111
111
|
break
|
|
112
112
|
except Exception as e:
|
|
113
|
-
logger.debug("Job result not ready yet: {}".format(str(e)))
|
|
113
|
+
self.logger.debug("Job result not ready yet: {}".format(str(e)))
|
|
114
114
|
time.sleep(5)
|
|
115
115
|
|
|
116
|
-
logger.debug("Job result: {}".format(job_response))
|
|
116
|
+
self.logger.debug("Job result: {}".format(job_response))
|
|
117
117
|
|
|
118
118
|
update_job_metadata(job_response=job_response,
|
|
119
119
|
callback_url=execution_callback.on_done)
|
|
@@ -121,7 +121,7 @@ class RigettiPyquilDevice(Device):
|
|
|
121
121
|
return original_job_result, job_response
|
|
122
122
|
|
|
123
123
|
except Exception as exception:
|
|
124
|
-
logger.debug("Execute job failed with error {}".format(str(exception)))
|
|
124
|
+
self.logger.debug("Execute job failed with error {}".format(str(exception)))
|
|
125
125
|
|
|
126
126
|
job_response.status_code = StatusCode.ERROR
|
|
127
127
|
job_response.content_type = MediaType.APPLICATION_JSON
|
|
@@ -142,7 +142,7 @@ class RigettiPyquilDevice(Device):
|
|
|
142
142
|
@param original_job_result:
|
|
143
143
|
@return:
|
|
144
144
|
"""
|
|
145
|
-
logger.debug("[Invocation] On analysis")
|
|
145
|
+
self.logger.debug("[Invocation] On analysis")
|
|
146
146
|
|
|
147
147
|
update_job_metadata(job_response=job_response,
|
|
148
148
|
callback_url=analysis_callback.on_start)
|
|
@@ -150,11 +150,10 @@ class RigettiPyquilDevice(Device):
|
|
|
150
150
|
try:
|
|
151
151
|
job_response.job_histogram = self._produce_histogram_data(original_job_result)
|
|
152
152
|
|
|
153
|
-
# original_job_result_dict = JsonParserUtils.parse(original_job_result)
|
|
154
153
|
self.execution_time = self._calculate_execution_time(original_job_result)
|
|
155
154
|
|
|
156
155
|
job_response.execution_time = self.execution_time
|
|
157
|
-
logger.debug("Execution time: {}".format(job_response.execution_time))
|
|
156
|
+
self.logger.debug("Execution time: {}".format(job_response.execution_time))
|
|
158
157
|
|
|
159
158
|
update_job_metadata(
|
|
160
159
|
job_response=job_response,
|
|
@@ -163,7 +162,7 @@ class RigettiPyquilDevice(Device):
|
|
|
163
162
|
return job_response
|
|
164
163
|
|
|
165
164
|
except Exception as exception:
|
|
166
|
-
logger.error("Invocation - Exception when analyst job result : {0}".format(
|
|
165
|
+
self.logger.error("Invocation - Exception when analyst job result : {0}".format(
|
|
167
166
|
str(exception)))
|
|
168
167
|
|
|
169
168
|
job_response.status_code = StatusCode.ERROR
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quapp-pyquil
|
|
3
|
-
Version: 0.0.4.
|
|
3
|
+
Version: 0.0.4.dev3
|
|
4
4
|
Summary: QApp pyquil library supporting QApp Platform for Quantum Computing
|
|
5
5
|
Author-email: "CITYNOW Co. Ltd. " <corp@citynow.vn>
|
|
6
6
|
License: The MIT License (MIT)
|
|
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
19
19
|
Requires-Python: <3.11,>=3.9
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
|
-
Requires-Dist: quapp-common==0.0.11.
|
|
22
|
+
Requires-Dist: quapp-common==0.0.11.dev6
|
|
23
23
|
Requires-Dist: pyquil==4.15.0
|
|
24
24
|
Provides-Extra: dev
|
|
25
25
|
Requires-Dist: black; extra == "dev"
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
QApp Platform Project pennylane_circuit_export_task.py Copyright © CITYNOW Co. Ltd. All rights reserved.
|
|
3
|
-
"""
|
|
4
|
-
from quapp_common.async_tasks.export_circuit_task import CircuitExportTask
|
|
5
|
-
# from ..quapp_common.config.logging_config import logger
|
|
6
|
-
# from pyquil.latex import to_latex
|
|
7
|
-
# import os
|
|
8
|
-
# import subprocess
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class PyquilCircuitExportTask(CircuitExportTask):
|
|
12
|
-
|
|
13
|
-
def _convert(self):
|
|
14
|
-
|
|
15
|
-
# circuit = self.circuit_data_holder.circuit
|
|
16
|
-
|
|
17
|
-
# latex_code = to_latex(circuit)
|
|
18
|
-
|
|
19
|
-
# latex_filename = "quantikz.tex"
|
|
20
|
-
# pdf_filename = "quantikz.pdf"
|
|
21
|
-
# svg_filename = "quantikz.svg"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
# try:
|
|
25
|
-
|
|
26
|
-
# with open(latex_filename, "w") as latex_file:
|
|
27
|
-
# latex_file.write(latex_code)
|
|
28
|
-
|
|
29
|
-
# subprocess.run(["pdflatex", latex_filename], check=True)
|
|
30
|
-
# subprocess.run(["pdf2svg", pdf_filename, svg_filename], check=True)
|
|
31
|
-
|
|
32
|
-
# with open(svg_filename, "rb") as svg_file:
|
|
33
|
-
# svg_bytes = svg_file.read()
|
|
34
|
-
|
|
35
|
-
# except subprocess.CalledProcessError:
|
|
36
|
-
# logger.error('[PyquilCircuitExportTask] Fail to convert to svg')
|
|
37
|
-
# return None
|
|
38
|
-
|
|
39
|
-
# finally:
|
|
40
|
-
|
|
41
|
-
# logger.info('[PyquilCircuitExportTask] Cleaning up temporary files')
|
|
42
|
-
|
|
43
|
-
# files_to_cleanup = [
|
|
44
|
-
# "quantikz.tex", # LaTeX source file
|
|
45
|
-
# "quantikz.pdf", # Generated PDF file
|
|
46
|
-
# "quantikz.svg", # Generated SVG file
|
|
47
|
-
# "quantikz.aux", # Auxiliary file created during LaTeX compilation
|
|
48
|
-
# "quantikz.log", # Log file created during LaTeX compilation
|
|
49
|
-
# ]
|
|
50
|
-
# # Clean up each file if it exists
|
|
51
|
-
# for file in files_to_cleanup:
|
|
52
|
-
# try:
|
|
53
|
-
# os.remove(file)
|
|
54
|
-
# logger.info(f'[PyquilCircuitExportTask] Successfully removed: {file}')
|
|
55
|
-
# except FileNotFoundError:
|
|
56
|
-
# logger.error(f'[PyquilCircuitExportTask] File not found: {file}')
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
# return svg_bytes
|
|
61
|
-
|
|
62
|
-
return None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/component/backend/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/factory/pyquil_provider_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/qapp_pyquil/handler/job_fetching_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quapp_pyquil-0.0.4.dev2 → quapp_pyquil-0.0.4.dev3}/quapp_pyquil.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|