Context 类

独立的 Q# 解释器环境。

上下文提供自包含的 Q# 执行环境,可在其中独立于其他上下文实例评估、编译和执行代码。 每个上下文都维护自己的代码命名空间。

上下文具有 code 属性,该属性是一个Python模块,其中包含在此上下文中定义的所有 Q# 操作和类型。 这允许从Python调用 Q# 操作。

Example:


   ctx = qdk.Context()
   ctx.eval("operation Main() : Result { use q = Qubit(); X(q); MResetZ(q) }")
   assert ctx.run("Main()", 2) == [qdk.Result.One, qdk.Result.One]
   assert ctx.code.Main() == qdk.Result.One

初始化新的独立 Q# 上下文。

构造函数

Context(*, target_profile: TargetProfile = TargetProfile.Unrestricted, target_name: str | None = None, project_root: str | None = None, language_features: List[str] | None = None, _trace_circuit: bool | None = None, _is_global_context: bool = False)

仅限关键字的参数

名称 说明
target_profile

设置目标配置文件允许 Q# 解释器生成与特定目标兼容的程序。 请参阅 TargetProfile

默认值: Unrestricted
target_name

用于推断兼容target_profile设置的目标计算机的可选名称。

默认值: None
project_root

包含 Q# 项目的根目录的可选路径。 它必须包含 qsharp.json 项目清单。

默认值: None
language_features

要启用的语言功能标志的可选列表。 它们对应于实验性或预览版 Q# 语言功能。 有效值为:

  • "v2-preview-syntax":启用 Q# v2 预览语法。 这将删除对 的支持

作用域内量子比特分配块形式(use q = Qubit() { ... }),需要语句形式(use q = Qubit();)。 它还消除了将 set 关键字用于可变变量赋值的要求。

默认值: None
_trace_circuit
默认值: None
_is_global_context
默认值: False

方法

circuit

合成 Q# 程序的线路。 必须提供条目表达式或操作。

compile

将 Q# 源代码编译为可提交到目标的程序。 必须提供条目表达式或具有参数的可调用项。

Example:

dump_machine

以 StateDump 对象的形式返回模拟器的稀疏状态向量。

eval

评估 Q# 源代码。

输出打印到控制台。

get_target_profile

返回此上下文的目标配置文件。

import_openqasm

将 OpenQASM 源代码导入到此上下文的解释器中。

logical_counts

从 Q# 源代码中提取逻辑资源计数。 必须提供条目表达式或具有参数的可调用项。

run

为给定的镜头数运行给定的 Q# 表达式。 每个镜头使用模拟器的独立实例。

set_classical_seed

设置用于标准库经典随机数运算的随机数生成器的种子。 这适用于在此上下文中执行、编译或估计的所有 Q# 代码。

set_quantum_seed

设置用于量子度量的随机数生成器的种子。 这适用于在此上下文中执行、编译或估计的所有 Q# 代码。

circuit

合成 Q# 程序的线路。 必须提供条目表达式或操作。

circuit(entry_expr: str | Callable | GlobalCallable | Closure | None = None, *args, operation: str | None = None, generation_method: CircuitGenerationMethod | None = None, max_operations: int | None = None, source_locations: bool = False, group_by_scope: bool = True, prune_classical_qubits: bool = False) -> Circuit

参数

名称 说明
entry_expr

条目表达式。 或者,可以提供可调用方,这必须是 Q# 可调用的。

默认值: None
*args
必需

要传递给可调用项的参数(如果提供)。

仅限关键字的参数

名称 说明
operation
str

要合成的操作。 这可以是操作的名称或 lambda 表达式。 该操作必须仅采用量子比特或量子比特数组作为参数。

默认值: None
generation_method

用于生成线路的方法。 ClassicalEval 评估线路生成时的传统控制流。 Simulate 运行完整的模拟来跟踪线路。 Static 使用部分评估,需要非Unrestricted 目标配置文件。 None默认为自动选择生成方法。

默认值: None
max_operations
int

要包括在线路中的最大操作数。 None默认值表示没有限制。

默认值: None
source_locations

如果 True为每个门指定其源位置。

默认值: False
group_by_scope

如果 True按其包含的范围(如函数声明或循环块)对操作进行分组。

默认值: True
prune_classical_qubits

如果 True,则删除从未在量子门中使用的量子比特(例如仅用作经典控件的量子比特)。

默认值: False

返回

类型 说明
<xref:Circuit>

合成线路。

例外

类型 说明

如果合成线路时出错。

compile

将 Q# 源代码编译为可提交到目标的程序。 必须提供条目表达式或具有参数的可调用项。

Example:

compile(entry_expr: str | Callable | GlobalCallable | Closure, *args) -> QirInputData

参数

名称 说明
entry_expr
必需

将用作程序的入口点的 Q# 表达式。 或者,可以提供可调用方,这必须是 Q# 可调用的。

*args
必需

要传递给可调用项的参数(如果提供)。

返回

类型 说明
<xref:QirInputData>

已编译的程序。 用于 str() 获取 QIR 字符串。

dump_machine

以 StateDump 对象的形式返回模拟器的稀疏状态向量。

dump_machine() -> StateDump

返回

类型 说明

模拟器的状态。

eval

评估 Q# 源代码。

输出打印到控制台。

eval(source: str, *, save_events: bool = False) -> Any

参数

名称 说明
source
必需

要评估的 Q# 源代码。

仅限关键字的参数

名称 说明
save_events

如果为 true,将保存并返回所有输出。 如果为 false,则会打印它们。

默认值: False

返回

类型 说明
Any

源代码中最后一个语句返回的值,或保存的输出(如果 save_events 为 true)。

例外

类型 说明

如果评估源代码时出错。

get_target_profile

返回此上下文的目标配置文件。

get_target_profile() -> TargetProfile

import_openqasm

将 OpenQASM 源代码导入到此上下文的解释器中。

import_openqasm(source: str, **kwargs: Any) -> Any

参数

名称 说明
source
必需
str

OpenQASM 程序或片段。

**kwargs
必需

其他关键字参数。 常见选项:

  • name (str):程序的名称。 这用作程序的入口点。

  • search_path (str):用于解析文件引用的可选搜索路径。

  • output_semantics (OutputSemantics):编译的输出语义。

  • program_type (ProgramType):要执行的程序编译的类型:

    • ProgramType.Operation (默认值):源将成为全局命名空间中的 Q# 操作,其中包含每个声明量子比特的声明经典输入和参数的参数,而任何显式或隐式输出声明都将成为操作的返回类型。

    • ProgramType.File:将输入源视为独立程序,并在命名空间中创建 qasm_import 仅采用经典参数的操作,在内部分配所需的量子位并在操作结束时释放它们。

    • ProgramType.Fragments:在当前交互式解释器中执行提供的源,在当前范围内定义任何声明的变量或操作,并返回源中最后一个语句的值。

返回

类型 说明
Any

源代码中最后一个语句返回的值。

例外

类型 说明

如果生成、分析和分析 OpenQASM 源时出错。

如果编译程序时出错。

logical_counts

从 Q# 源代码中提取逻辑资源计数。 必须提供条目表达式或具有参数的可调用项。

logical_counts(entry_expr: str | Callable | GlobalCallable | Closure, *args) -> LogicalCounts

参数

名称 说明
entry_expr
必需

条目表达式。 或者,可以提供可调用方,这必须是 Q# 可调用的。

返回

类型 说明

按逻辑门计数对资源进行编程。

run

为给定的镜头数运行给定的 Q# 表达式。 每个镜头使用模拟器的独立实例。

run(entry_expr: str | Callable | GlobalCallable | Closure, shots: int, *args, on_result: Callable[[ShotResult], None] | None = None, save_events: bool = False, noise: Tuple[float, float, float] | PauliNoise | BitFlipNoise | PhaseFlipNoise | DepolarizingNoise | NoiseConfig | None = None, qubit_loss: float | None = None, seed: int | None = None, type: Literal['sparse', 'clifford'] | None = None, num_qubits: int | None = None) -> List[Any]

参数

名称 说明
entry_expr
必需

条目表达式。 或者,可以提供可调用方,这必须是 Q# 可调用的。

shots
必需

要运行的镜头数。

*args
必需

要传递给可调用项的参数(如果提供)。

on_result
必需

将随每个结果一起调用的回调函数。

save_events
必需

如果为 true,将保存每个镜头的输出。 如果为 false,则会打印它们。

noise
必需

模拟中使用的噪音。

qubit_loss
必需

模拟中量子比特损失的概率。

seed
必需

模拟中用于随机数生成器的种子(如果有)。

type
必需

要使用的模拟器类型。 如果未指定,将使用默认稀疏状态矢量模拟。

num_qubits
必需

要用于模拟类型“clifford”的量子比特数。 如果未指定,则 Clifford 模拟器假定默认为 1000 个量子比特。

仅限关键字的参数

名称 说明
on_result
默认值: None
save_events
默认值: False
noise
默认值: None
qubit_loss
默认值: None
seed
默认值: None
type
默认值: None
num_qubits
默认值: None

返回

类型 说明

结果或运行时错误的列表。 如果 save_events 为 true,则返回列表 ShotResult

例外

类型 说明

如果解释输入时出错。

如果拍摄次数小于 1。

set_classical_seed

设置用于标准库经典随机数运算的随机数生成器的种子。 这适用于在此上下文中执行、编译或估计的所有 Q# 代码。

set_classical_seed(seed: int | None) -> None

参数

名称 说明
seed
必需

用于经典随机数生成器的种子。 如果为 None,则种子将从 entropy 生成。

set_quantum_seed

设置用于量子度量的随机数生成器的种子。 这适用于在此上下文中执行、编译或估计的所有 Q# 代码。

set_quantum_seed(seed: int | None) -> None

参数

名称 说明
seed
必需

要用于量子随机数生成器的种子。 如果为 None,则种子将从 entropy 生成。

属性

code

code: Any