项目开发规范

本章节介绍了项目开发规范。

编码规范

遵循Python3代码规范,包括: PEP8标准、并可使用ruff检查与修复命令:

  • 命名规范(模块名小写 + 下划线 / 类名大驼峰 / 函数名小写 + 下划线 / 常量全大写):

    • 模块名:driver_utils.py(正确)、DriverUtils.py(错误)

    • 类名:BaseDriver(正确)、base_driver(错误)

    • 函数名:parse_qasm_code()(正确)、ParseQasmCode()(错误)

    • 常量:MAX_RETRY_COUNT = 3(正确)、max_retry_count = 3(错误)

  • 注释规范(函数需写Google风格的docstring、复杂逻辑加行注释、驱动类需标注适配设备型号)

  • 文件版权声明:使用Mulan PSL v2许可的文件头,可参考同类文件的文件头

文档规范

  • 部署、设计等文档放在docs/sphinx/source/下的对应目录中,以reStructuredText(rst)格式书写

  • 文档中涉及到的流程图、时序图、架构图等UML图片,尽量以PlantUML语法书写

接口开发规范

  • 北向API规范:基于JSON-RPC 2.0格式、请求/响应字段要求、错误码定义

驱动开发规范

  • 驱动文件需要放在drviers/目录下;通常可以在drivers目录下创建一个新目录来放驱动,建议为:drivers/厂商名英文缩写/,

  • 驱动文件名可命名为:driver_量子设备型号.py

  • 南向驱动接口规范:新增驱动必须实现run()等方法,参考drivers/dummy/driver_dummy.py

  • 项目默认提供了丰富的驱动基类,如DriverBase,DriverQuboBase,DriverWuyueBase和DriverPulseBase等。用户可以从中选择一个基类继承

  • __init__() 函数开发规范:__init__()函数用于初始化驱动类的成员变量

参数:
    version # 版本号
    transpiler # 驱动默认使用的转译器
    supported_transpilers # 驱动支持的转译器
    tech_type # 量子计算机的技术路线
    supported_basis_gates # 基础门列表,用于转译器模块的门分解
    supported_code_types # 支持的代码类型,如QASM2.0,QASM3.0等
    enable_circuit_aggregation # 是否支持电路聚合
    max_qubits # 驱动支持的最大比特数
    enable_device_mgr # 是否开启设备管理器,用于动态下发设备配置
    enable_device_monitor # 是否开启设备监控进程,获取设备动态运行信息
返回值:
    None
  • init_driver() 函数用于初始化驱动,并设置驱动状态为online

  • validate_driver_configs() 函数用于校验驱动配置文件是否合理。如果校验失败则不会加载此驱动

参数:
    configs # 配置数据
返回值:
    success # 校验是否成功
    err_msg # 错误信息
  • run() 函数用于提交量子任务到量子计算机,并获取量子任务结果。

参数:
    job_id # 量子任务的ID
    num_qubits # 量子线路使用单比特数目
    data # 量子线路数据
    data_type # 量子线路数据类型
    shots # 量子线路执行次数
返回值:
    None
  • dry_run() 函数用于模拟提交量子任务的执行,并获取量子任务结果。

参数:
    job_id # 量子任务的ID
    num_qubits # 量子线路使用单比特数目
    data # 量子线路数据
    data_type # 量子线路数据类型
    shots # 量子线路执行次数
返回值:
    None
  • fetch_running_info(): 如果使能enable_device_mgr或者enable_device_monitor,驱动类需要实现此函数。此函数的作用是获取设备运行信息。

参数:
    None
返回值:
    device_running_info # 设备运行信息字典
  • close_driver(): 关闭驱动,清理资源。【可选】

  • fetch_configs(): 用于执行作业前,先主动从设备处获取配置信息)【可选】

  • cancel(): 用于主动对设备下发取消请求)【可选】

  • set_results(): 设置量子任务结果

参数:
    job_id: # 量子任务的ID
    data_index: # 量子线路index
    results # 量子任务结果
返回值:
    None
  • set_machine_time_info(): 设置量子计算机执行耗时数据结果

参数:
    job_id: # 量子任务的ID
    data_index: # 量子线路index
    machine_time_info # 量子计算机执行耗时数据信息
返回值:
    None

设备配置文件规范

  • 驱动内可以选择读取该设备的专属独立配置,qcos容器启动时,会自动读取/etc/qcos/conf.d/目录下的设备配置文件;

  • 相关示例代码可放在源代码目录的etc/qcos/conf.d/目录下

  • QCOS容器启动时,entrypoint.sh会自动把源代码目录的etc/qcos/conf.d/目录下复制到/etc/qcos/conf.d/中,如果配置文件已存在则不会复制;

  • 设备配置文件为toml格式,格式可参考dummy.toml

  • 【必选】配置文件必须声明设备名称,别名,设备对应的驱动名称和设备描述

[dummy] # 设备名称 (建议设备名为小写字母、数字、下划线组成,不允许空格)
alias_name = "空载测试设备" # 别名
driver = "DriverDummy" # 驱动名称,需要和代码中驱动类名一致
description = "空载测试设备(dummy)" # 设备描述
  • 【可选】配置文件中可以配置debug字段,debug字段是设备是日志控制开关, 用于控制设备日志的开关

  • 【可选】配置文件中可以配置日志文件保存路径

device_log_file # 设备日志
monitor_log_file # 设备监控日志,需要使能驱动类中的enable_device_monitor字段
mgr_log_file # 设备管理日志,需要使能驱动类中的enable_device_mgrr字段
  • 【可选】配置文件中可以配置日志相关字段

log_format # 日志格式
log_rotate_max_size_mb # 日志文件单文件最大大小
log_rotate_backup_count # 日志保留备份文件数量
log_rotate_compression # 是否压缩历史日志
  • 【可选】设备配置中涉及到密码加密的,可以使用encrypt-password.py获取加密后的密文,填入配置文件相关密码字段中:

# 密码加密命令
cd bin
./encrypt-password.py -e my_password
  • 【可选】配置文件中可以配置 device_max_qubits

  • 【可选】配置文件中可以配置 max_queued_jobs。-1 表示不现在排队的任务数量

  • 用户可以根据自己的设备特性添加字段,如用户名,密码,ip地址,端口号,token和coupler_map等。

  • 添加配置文件后,需要在/etc/qcos/qcos.toml将设备名字写入DEVICE_LIST