QCloudResult
QCloudResult 保存解析后的任务输出,以及云服务可选返回的原始字段。
签名
python
QCloudResult(cloud_job_id: str, result_string: str)实际使用中通常直接消费 QCloudJob.query() 或 QCloudJob.result() 返回的对象。
常规结果接口
| 方法 | 签名 | 说明 |
|---|---|---|
get_probs | get_probs(base: DataBase = DataBase.Binary) -> dict[str, float] | 概率字典。 |
get_counts | get_counts(base: DataBase = DataBase.Binary) -> dict[str, int] | 计数字典。 |
get_probs_list | get_probs_list(base: DataBase = DataBase.Binary) -> list[dict[str, float]] | 批量概率输出。 |
get_counts_list | get_counts_list(base: DataBase = DataBase.Binary) -> list[dict[str, int]] | 批量计数输出。 |
get_amplitudes | get_amplitudes() -> dict[str, complex] | 振幅任务结果。 |
get_state_fidelity | get_state_fidelity() -> float | 量子态层析保真度。 |
get_state_tomography_density | get_state_tomography_density() -> list[list[complex]] | 量子态层析密度矩阵。 |
origin_data | origin_data() -> str | 原始 JSON 结果字符串。 |
job_id | job_id() -> str | 任务 id。 |
job_status | job_status() -> JobStatus | 结果中带回的任务状态。 |
error_message | error_message() -> str | 任务失败时的错误文本。 |
job_status() 返回结果中带回的状态;FAILED 是终态。失败任务不再通过异常表达,error_message() 优先返回 obj.errInfo,其次 message,最后 errCode。服务端报告的任务失败通过 JobStatus.FAILED 与 error_message() 表达;网络、协议或 HTTP 等传输层错误仍可能从底层请求抛出,完整契约见 QCloudJob.result()。
原始字段访问
pyqpanda3 0.4.0 源码绑定中,QCloudResult 既能返回完整原始 JSON,也能读取通过 job.result(keys=...) / job.query(keys=...) 请求到的原始字段。下表展示 QCloud JSON 字段名(用于 keys= 请求和成员检查)与 Python 访问方法的映射关系。
| QCloud JSON 字段 | Python 方法 | 说明 |
|---|---|---|
convertQProg | instructions() | 云端转换后的指令流。 |
qprog | qprog() | 提交到云端的原始 QProg 数据。 |
mappingQprog | mapping_qprog() | 服务端量子比特映射后的 QProg。 |
mappingQubit | mapping_qubit() | 虚拟比特到物理比特的映射关系。 |
srcQubits | src_qubits() | 任务中使用的源量子比特索引。 |
targetCbits | target_cbits() | 目标经典比特索引。 |
measureQubits | measure_qubits() | 执行测量的量子比特索引。 |
probCount | prob_count_raw() | 后端返回的原始概率计数数据。 |
也可以使用字段名或 snake_case 别名做通用访问:
python
"mappingQprog" in result
raw_mapping = result["mappingQprog"]需要完整排障时,继续使用 origin_data() 获取服务端原始 JSON 字符串。
timing_info
python
timing_info() -> dict[str, str]返回服务端结果中与时间相关的字段,例如 startTime、totalTime、pulseTime、qpuRunTime、compileTime、queueTime。
它不是固定结构。不同 QPU、模拟器和任务类型返回的键集合不同。
示例
python
from pyqpanda3.core import H, QProg, measure
from pyqpanda3.qcloud import DataBase, QCloudService
service = QCloudService("your_api_key")
backend = service.backend("full_amplitude")
prog = QProg()
prog << H(0) << measure(0, 0)
job = backend.run(prog, shots=1000)
result = job.result(keys=["mappingQprog", "mappingQubit", "probCount"])
print(result.get_probs(base=DataBase.Binary))
print("mappingQprog" in result)
print(result.mapping_qubit() if "mappingQubit" in result else "")
print(result.timing_info())
print(result.origin_data()[:200])示例输出形态:
text
{'0x0': 0.501, '0x1': 0.499}
True
{"0": 1}
{'totalTime': '...', 'qpuRunTime': '...'}
{"success":true,"code":10000,...说明
- 原始字段只有在服务端实际返回时才可读取。访问缺失字段时会抛出异常;先用
"field" in result判断更稳妥。 timing_info()是动态提取的,不同 QPU、模拟器和层析任务返回的键集合可能不同。