Context Classe

Um ambiente de interpretador de Q# isolado.

Um contexto fornece um ambiente de execução de Q# autocontido em que o código é avaliado, compilado e executado isoladamente de outras instâncias de contexto. Cada Contexto mantém seu próprio namespace de código.

Um contexto tem um atributo code que é um módulo Python que contém todas as operações e tipos de Q# definidos nesse contexto. Isso permite que você chame operações de Q# de Python.

Exemplo:


   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

Inicializa um novo contexto de Q# isolado.

Construtor

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)

Parâmetros somente de palavra-chave

Nome Description
target_profile

Definir o perfil de destino permite que o interpretador de Q# gere programas compatíveis com um destino específico. Consulte TargetProfile.

Valor padrão: Unrestricted
target_name

Um nome opcional do computador de destino a ser usado para inferir a configuração de target_profile compatível.

Valor padrão: None
project_root

Um caminho opcional para um diretório raiz com um projeto Q# a ser incluído. Ele deve conter um manifesto qsharp.json projeto.

Valor padrão: None
language_features

Uma lista opcional de sinalizadores de recursos de idioma a serem habilitados. Eles correspondem a recursos experimentais ou de linguagem Q# de visualização. Os valores válidos são:

  • "v2-preview-syntax": habilita a sintaxe de visualização do Q# v2. Isso remove o suporte para

o formulário de bloco de alocação de qubit com escopo (use q = Qubit() { ... }), exigindo o formulário de instrução em vez disso (use q = Qubit();). Ele também remove o requisito de usar a set palavra-chave para atribuições de variáveis mutáveis.

Valor padrão: None
_trace_circuit
Valor padrão: None
_is_global_context
Valor padrão: False

Métodos

circuit

Sintetiza um circuito para um programa Q#. Uma expressão de entrada ou uma operação devem ser fornecidas.

compile

Compila o código-fonte Q# em um programa que pode ser enviado para um destino. Uma expressão de entrada ou uma chamada com argumentos deve ser fornecida.

Exemplo:

dump_machine

Retorna o vetor de estado esparso do simulador como um objeto StateDump.

eval

Avalia o código-fonte Q#.

A saída é impressa no console.

get_target_profile

Retorna o perfil de destino para este Contexto.

import_openqasm

Importa o código-fonte do OpenQASM para o interpretador desse contexto.

logical_counts

Extrai contagens de recursos lógicos do código-fonte Q#. Uma expressão de entrada ou uma chamada com argumentos deve ser fornecida.

run

Executa a expressão de Q# fornecida para o número determinado de capturas. Cada captura usa uma instância independente do simulador.

set_classical_seed

Define a semente do gerador de número aleatório usado para operações de número aleatório clássico da biblioteca padrão. Isso se aplica a todos os códigos Q# executados, compilados ou estimados neste Contexto.

set_quantum_seed

Define a semente do gerador de número aleatório usado para medidas quânticas. Isso se aplica a todos os códigos Q# executados, compilados ou estimados neste Contexto.

circuit

Sintetiza um circuito para um programa Q#. Uma expressão de entrada ou uma operação devem ser fornecidas.

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

Parâmetros

Nome Description
entry_expr

Uma expressão de entrada. Como alternativa, um callable pode ser fornecido, que deve ser um callable Q#.

Valor padrão: None
*args
Obrigatório

Os argumentos a serem passados para o callable, se um for fornecido.

Parâmetros somente de palavra-chave

Nome Description
operation
str

A operação a ser sintetizada. Pode ser um nome de uma operação ou uma expressão lambda. A operação deve usar apenas qubits ou matrizes de qubits como parâmetros.

Valor padrão: None
generation_method

O método a ser usado para geração de circuito. ClassicalEval avalia o fluxo de controle clássico no tempo de geração do circuito. Simulate executa uma simulação completa para rastrear o circuito. Static usa a avaliação parcial e requer um perfil que não seja deUnrestricted destino. Padrão para o None qual seleciona automaticamente o método de geração.

Valor padrão: None
max_operations
int

O número máximo de operações a serem incluídas no circuito. Padrões para None o qual significa nenhum limite.

Valor padrão: None
source_locations

Se True, anota cada portão com sua localização de origem.

Valor padrão: False
group_by_scope

Se True, agrupa as operações por seu escopo de contenção, como declarações de função ou blocos de loop.

Valor padrão: True
prune_classical_qubits

Se True, remove qubits que nunca são usados em um portão quântico (por exemplo, qubits usados apenas como controles clássicos).

Valor padrão: False

Retornos

Tipo Description
<xref:Circuit>

O circuito sintetizado.

Exceções

Tipo Description

Se houver um erro ao sintetizar o circuito.

compile

Compila o código-fonte Q# em um programa que pode ser enviado para um destino. Uma expressão de entrada ou uma chamada com argumentos deve ser fornecida.

Exemplo:

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

Parâmetros

Nome Description
entry_expr
Obrigatório

A expressão Q# que será usada como o ponto de entrada do programa. Como alternativa, um callable pode ser fornecido, que deve ser um callable Q#.

*args
Obrigatório

Os argumentos a serem passados para o callable, se um for fornecido.

Retornos

Tipo Description
<xref:QirInputData>

O programa compilado. Use str() para obter a cadeia de caracteres QIR.

dump_machine

Retorna o vetor de estado esparso do simulador como um objeto StateDump.

dump_machine() -> StateDump

Retornos

Tipo Description

O estado do simulador.

eval

Avalia o código-fonte Q#.

A saída é impressa no console.

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

Parâmetros

Nome Description
source
Obrigatório

O código-fonte Q# a ser avaliado.

Parâmetros somente de palavra-chave

Nome Description
save_events

Se for true, toda a saída será salva e retornada. Se forem falsas, elas serão impressas.

Valor padrão: False

Retornos

Tipo Description
Any

O valor retornado pela última instrução no código-fonte ou a saída salva, se save_events for true.

Exceções

Tipo Description

Se houver um erro ao avaliar o código-fonte.

get_target_profile

Retorna o perfil de destino para este Contexto.

get_target_profile() -> TargetProfile

import_openqasm

Importa o código-fonte do OpenQASM para o interpretador desse contexto.

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

Parâmetros

Nome Description
source
Obrigatório
str

Um programa ou fragmento do OpenQASM.

**kwargs
Obrigatório

Argumentos de palavra-chave adicionais. Opções comuns:

  • name (str): o nome do programa. Isso é usado como o ponto de entrada do programa.

  • search_path (str): o caminho de pesquisa opcional para resolver referências de arquivo.

  • output_semantics (OutputSemantics): a semântica de saída para a compilação.

  • program_type (ProgramType): o tipo de compilação de programa a ser executada:

    • ProgramType.Operation (padrão): a origem se torna uma operação Q# no namespace global com parâmetros para quaisquer entradas e parâmetros clássicos declarados para cada um dos qubits declarados, enquanto quaisquer declarações de saída explícitas ou implícitas se tornam o tipo de retorno da operação.

    • ProgramType.File: tratará a fonte de entrada como um programa autônomo e criará uma operação no qasm_import namespace que usa apenas parâmetros clássicos, alocará os qubits necessários internamente e os liberará no final da operação.

    • ProgramType.Fragments: executa a origem fornecida no interpretador interativo atual, definindo quaisquer variáveis ou operações declaradas no escopo atual e retornando o valor da última instrução na origem.

Retornos

Tipo Description
Any

O valor retornado pela última instrução no código-fonte.

Exceções

Tipo Description

Se houver um erro gerando, analisando ou analisando a origem do OpenQASM.

Se houver um erro ao compilar o programa.

logical_counts

Extrai contagens de recursos lógicos do código-fonte Q#. Uma expressão de entrada ou uma chamada com argumentos deve ser fornecida.

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

Parâmetros

Nome Description
entry_expr
Obrigatório

A expressão de entrada. Como alternativa, um callable pode ser fornecido, que deve ser um callable Q#.

Retornos

Tipo Description

Recursos do programa em termos de contagens de portões lógicas.

run

Executa a expressão de Q# fornecida para o número determinado de capturas. Cada captura usa uma instância independente do simulador.

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]

Parâmetros

Nome Description
entry_expr
Obrigatório

A expressão de entrada. Como alternativa, um callable pode ser fornecido, que deve ser um callable Q#.

shots
Obrigatório

O número de tiros a serem executados.

*args
Obrigatório

Os argumentos a serem passados para o callable, se um for fornecido.

on_result
Obrigatório

Uma função de retorno de chamada que será chamada com cada resultado.

save_events
Obrigatório

Se for true, a saída de cada tiro será salva. Se forem falsas, elas serão impressas.

noise
Obrigatório

O ruído a ser usado na simulação.

qubit_loss
Obrigatório

A probabilidade de perda de qubit na simulação.

seed
Obrigatório

A semente a ser usada para o gerador de número aleatório na simulação, se houver.

type
Obrigatório

O tipo de simulador a ser usado. Se não for especificado, a simulação de vetor de estado esparso padrão será usada.

num_qubits
Obrigatório

O número de qubits a serem usados para o tipo de simulação "clifford". Se não for especificado, o simulador Clifford assumirá um padrão de 1000 qubits.

Parâmetros somente de palavra-chave

Nome Description
on_result
Valor padrão: None
save_events
Valor padrão: False
noise
Valor padrão: None
qubit_loss
Valor padrão: None
seed
Valor padrão: None
type
Valor padrão: None
num_qubits
Valor padrão: None

Retornos

Tipo Description

Uma lista de resultados ou erros de runtime. Se save_events for true, uma lista de ShotResult será retornada.

Exceções

Tipo Description

Se houver um erro ao interpretar a entrada.

Se o número de tiros for menor que 1.

set_classical_seed

Define a semente do gerador de número aleatório usado para operações de número aleatório clássico da biblioteca padrão. Isso se aplica a todos os códigos Q# executados, compilados ou estimados neste Contexto.

set_classical_seed(seed: int | None) -> None

Parâmetros

Nome Description
seed
Obrigatório

A semente a ser usada para o gerador de número aleatório clássico. Se None, a semente será gerada a partir da entropia.

set_quantum_seed

Define a semente do gerador de número aleatório usado para medidas quânticas. Isso se aplica a todos os códigos Q# executados, compilados ou estimados neste Contexto.

set_quantum_seed(seed: int | None) -> None

Parâmetros

Nome Description
seed
Obrigatório

A semente a ser usada para o gerador de número aleatório quântico. Se None, a semente será gerada a partir da entropia.

Atributos

code

code: Any