Skip to content

QCloudService ​

QCloudService 是连接 OriginQ 云后端的入口。

QCloudService ​

python
QCloudService(api_key: str)
QCloudService(api_key: str, url: str)
  • 单参构造从新格式 API key 中解析服务域名;旧格式 key 不携带域名,使用历史默认云端端点。
  • 两参构造的 url 显式覆盖 key 中编码的域名,用于测试或私有部署;0.5.1 绑定中 url 已无默认值。

方法 ​

方法签名说明
setup_loggingsetup_logging(output: LogOutput = LogOutput.CONSOLE, file_path: str = "") -> None配置客户端日志。
backendsbackends() -> dict[str, bool]列出后端名称及可用性。
best_qubit_blocksbest_qubit_blocks(chip_id: str, qubit_num: int, label: int = 1, qubit_block_num: int = 1) -> BestQubitBlocks查询芯片的最优比特块。
backendbackend(backend_name: str) -> QCloudBackend按名称打开一个后端。

BestQubitBlocks ​

BestQubitBlocks 存储云端最优比特块查询结果。返回的块按质量排序,可直接用于 QCloudOptions.set_specified_block(...)。

属性 / 方法类型说明
chip_idstr查询所用的芯片标识。
qubit_numint每个块请求的量子比特数。
labelint块选择的优化标签。
qubit_block_numint请求的块数量。
qubit_blockslist[list[int]]选出的比特块,每个块是一组物理比特索引。
size()int选中的块数量(等价于 len(blocks))。
empty()bool是否未选出任何块。
block(index: int)list[int]按索引获取一个块。越界抛出 IndexError。

BestQubitBlocks 支持 __getitem__ / __len__ / __repr__。

python
from pyqpanda3.qcloud import QCloudService

service = QCloudService("your_api_key")
blocks = service.best_qubit_blocks("WK_C180_2", qubit_num=2, label=1, qubit_block_num=2)

print(blocks.chip_id)        # "WK_C180_2"
print(blocks.qubit_blocks)   # [[59, 69], [99, 108]]
print(blocks.size())         # 2
print(blocks.block(0))       # [59, 69]
print(blocks[0])             # [59, 69]
print(len(blocks))           # 2

QCloudBackend ​

QCloudBackend 表示一个已选定的云后端。

python
QCloudBackend(backend_name: str)

常用执行重载 ​

python
run(
    prog: QProg,
    shots: int,
    model: QCloudNoiseModel = QCloudNoiseModel(),
    batch_id: str = "",
    task_form: int = 4,
) -> QCloudJob
python
run(
    prog: QProg,
    shots: int,
    options: QCloudOptions,
    enable_binary_encoding: bool = False,
    batch_id: str = "",
    task_form: int = 4,
) -> QCloudJob
python
run(
    progs: list[QProg],
    shots: int,
    options: QCloudOptions,
    enable_binary_encoding: bool = False,
    batch_id: str = "",
    task_form: int = 4,
) -> QCloudJob

源码还支持这些额外形式:

  • run(prog, qubits=[...])
  • run(prog, amplitudes=[...])
  • run(prog, amplitude="0101")
  • run_quantum_state_tomography(prog, shots, options=QCloudOptions())

run_instruction ​

python
run_instruction(
    instruction: str | list[str],
    shots: int,
    options: QCloudOptions,
    batch_id: str = "",
    task_form: int = 4,
) -> QCloudJob

直接提交指令 JSON,而不是发送 QProg。

芯片与布局辅助接口 ​

方法签名说明
chip_infochip_info() -> ChipInfo原始芯片元数据。
chip_backendchip_backend(qubits: list[int] = []) -> ChipBackendchip_info().get_chip_backend() 的便捷包装。
best_qubit_blocksbest_qubit_blocks(qubit_num: int, label: int = 1, qubit_block_num: int = 1) -> BestQubitBlocks查询此后端的最优比特块。
namename() -> str后端名称。

NOTE

真实 QPU 限制

chip_info() 和 chip_backend() 只适用于真实 QPU 后端。对 full_amplitude、partial_amplitude、single_amplitude 等云模拟器调用会抛出 RuntimeError: This function is only for real QPU backend. 自 0.5.0 起 chip_info() 可无参调用(带 options 的重载仍然可用)。

期望值接口 ​

python
expval_hamiltonian(
    prog: QProg,
    hamiltonian: Hamiltonian,
    shots: int = 1000,
    noise_model: QCloudNoiseModel = QCloudNoiseModel(),
) -> float
python
expval_hamiltonian(
    prog: QProg,
    hamiltonian: Hamiltonian,
    options: QCloudOptions,
) -> float

expval_pauli_operator(...) 也有对应的等价重载。

ChipInfo ​

ChipInfo 提供硬件标定数据,并且可以直接物化成 ChipBackend。

方法说明
qubits_num()量子比特总数。
chip_id()芯片标识。
available_qubits()当前可用的物理量子比特。
high_frequency_qubits()高频量子比特列表。
single_qubit_info()单比特读出与相干信息。
double_qubits_info()双比特保真度信息。
get_basic_gates()原生门集。
get_compensate_angle_map()CZ 补偿角映射。
get_double_gate_timing()双比特门时序值。
get_single_gate_timing()单比特门时序值。
get_chip_topology(qubits=[])耦合图。
get_chip_backend(qubits=[])构造带有时序、拓扑和保真度映射的 ChipBackend。

QCloudOptions ​

QCloudOptions 控制云端提交时的编译、映射、纠错与输出选项。

python
QCloudOptions(
    amend_flag: int = 1,
    use_cz_pattern: bool = False,
    mapping: bool = True,
    optimization: bool = True,
    point_label: int = 1,
    is_prob_counts: bool = True,
    specified_block: list[int] = [],
)
方法签名说明
set_amend_flagset_amend_flag(amend_flag: int) -> None0 关闭纠错,1 全局采样纠错,3 局部实时纠错。
amend_flagamend_flag() -> int返回纠错模式。
set_use_cz_patternset_use_cz_pattern(use_cz_pattern: bool) -> None设置串扰噪声抑制。
use_cz_patternuse_cz_pattern() -> bool查询串扰噪声抑制。

原有的 set_amend、set_mapping、set_optimization、set_point_label、set_specified_block、set_is_prob_counts 与 set_custom_option 仍然可用。

QCloudOptions.print() 输出当前设置:

text
is_prob_counts: true
amend_flag: 1
use_cz_pattern: false
mapping: true
optimization: true
point_label: 1

示例 ​

python
import os

from pyqpanda3.core import CZ, H, QProg, measure
from pyqpanda3.qcloud import QCloudOptions, QCloudService
from pyqpanda3.transpilation import Transpiler, decompose
from pyqpanda3.visualization import draw_time_scheduling

service = QCloudService(os.environ["QPANDA_QCLOUD_API_KEY"])
backend = service.backend(os.environ.get("QPANDA_QCLOUD_BACKEND", "WK_C180_2"))

chip_info = backend.chip_info()
chip_backend = backend.chip_backend([0, 10])

prog = QProg()
prog << H(0) << CZ(0, 1) << measure(0, 0) << measure(1, 1)

decomposed = decompose(prog, ["U3", "CZ"])
transpiled = Transpiler().transpile(decomposed, chip_backend, {}, 2, "fidelity")
instruction = transpiled.to_instruction(
    chip_backend,
    offset=1,
    is_scheduling=True,
    compensate_pulse=False,
)
figures = draw_time_scheduling(instruction, backend=chip_backend, output="plotly")

options = QCloudOptions()
options.set_mapping(False)
options.set_optimization(False)
options.set_amend(False)
options.set_specified_block([0, 10])

job = backend.run_instruction([instruction], 1000, options)
print(chip_backend.basic_gates)
print(chip_backend.single_gate_timing, chip_backend.double_gate_timing)
print(type(figures).__name__)
print(job.job_id())

示例输出形态:

text
['RPhi', 'CZ']
25 40
Figure
JOB_ID

说明 ​

另见 ​

Released under the MIT License.