Context Clase

Un entorno de intérprete de Q# aislado.

Un contexto proporciona un entorno de ejecución de Q# autocontenido donde el código se evalúa, compila y se ejecuta de forma aislada de otras instancias de Context. Cada contexto mantiene su propio espacio de nombres de código.

Un contexto tiene un atributo code que es un módulo Python que contiene todas las operaciones y tipos de Q# definidos en este contexto. Esto le permite llamar a operaciones de Q# desde Python.

Ejemplo:


   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 un nuevo contexto de Q# aislado.

Constructor

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 de palabra clave únicamente

Nombre Description
target_profile

Establecer el perfil de destino permite al intérprete de Q# generar programas compatibles con un destino específico. Consulte TargetProfile.

Valor predeterminado: Unrestricted
target_name

Nombre opcional de la máquina de destino que se va a usar para deducir la configuración de target_profile compatible.

Valor predeterminado: None
project_root

Ruta de acceso opcional a un directorio raíz con un proyecto de Q# que se va a incluir. Debe contener un manifiesto de proyecto qsharp.json.

Valor predeterminado: None
language_features

Lista opcional de marcas de características de idioma que se van a habilitar. Se corresponden con las características del lenguaje Q# experimentales o en versión preliminar. Los valores válidos son:

  • "v2-preview-syntax": habilita la sintaxis de vista previa de Q# v2. Esto quita la compatibilidad con

formulario de bloque de asignación de cúbits con ámbito (use q = Qubit() { ... }), que requiere el formulario de instrucción en su lugar (use q = Qubit();). También quita el requisito de usar la set palabra clave para las asignaciones de variables mutables.

Valor predeterminado: None
_trace_circuit
Valor predeterminado: None
_is_global_context
Valor predeterminado: False

Métodos

circuit

Sintetiza un circuito para un programa de Q#. Se debe proporcionar una expresión de entrada o una operación.

compile

Compila el código fuente de Q# en un programa que se puede enviar a un destino. Se debe proporcionar una expresión de entrada o un invocable con argumentos.

Ejemplo:

dump_machine

Devuelve el vector de estado disperso del simulador como un objeto StateDump.

eval

Evalúa el código fuente de Q#.

La salida se imprime en la consola.

get_target_profile

Devuelve el perfil de destino de este contexto.

import_openqasm

Importa el código fuente de OpenQASM en el intérprete de este contexto.

logical_counts

Extrae los recuentos de recursos lógicos del código fuente de Q#. Se debe proporcionar una expresión de entrada o un invocable con argumentos.

run

Ejecuta la expresión Q# dada para el número determinado de capturas. Cada captura usa una instancia independiente del simulador.

set_classical_seed

Establece el valor de inicialización del generador de números aleatorios usado para las operaciones de números aleatorios clásicos de la biblioteca estándar. Esto se aplica a todo el código de Q# ejecutado, compilado o estimado en este contexto.

set_quantum_seed

Establece el valor de inicialización del generador de números aleatorios que se usa para las medidas cuánticas. Esto se aplica a todo el código de Q# ejecutado, compilado o estimado en este contexto.

circuit

Sintetiza un circuito para un programa de Q#. Se debe proporcionar una expresión de entrada o una operación.

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

Nombre Description
entry_expr

Expresión de entrada. Como alternativa, se puede proporcionar un invocable, que debe ser un Q# al que se puede llamar.

Valor predeterminado: None
*args
Requerido

Argumentos que se van a pasar al invocable, si se proporciona uno.

Parámetros de palabra clave únicamente

Nombre Description
operation
str

Operación que se va a sintetizar. Puede ser un nombre de una operación o una expresión lambda. La operación solo debe tomar cúbits o matrices de cúbits como parámetros.

Valor predeterminado: None
generation_method

Método que se va a usar para la generación de circuitos. ClassicalEval evalúa el flujo de control clásico en el tiempo de generación del circuito. Simulate ejecuta una simulación completa para realizar un seguimiento del circuito. Static usa la evaluación parcial y requiere un perfil que noUnrestricted sea de destino. El valor predeterminado es None el que selecciona automáticamente el método de generación.

Valor predeterminado: None
max_operations
int

Número máximo de operaciones que se van a incluir en el circuito. El valor predeterminado es None que no hay límite.

Valor predeterminado: None
source_locations

Si Truees , anota cada puerta con su ubicación de origen.

Valor predeterminado: False
group_by_scope

Si Truees , agrupa las operaciones por su ámbito contenedor, como declaraciones de función o bloques de bucle.

Valor predeterminado: True
prune_classical_qubits

Si Truees , quita los cúbits que nunca se usan en una puerta cuántica (por ejemplo, los cúbits solo se usan como controles clásicos).

Valor predeterminado: False

Devoluciones

Tipo Description
<xref:Circuit>

Circuito sintetizado.

Excepciones

Tipo Description

Si hay un error al sintetizar el circuito.

compile

Compila el código fuente de Q# en un programa que se puede enviar a un destino. Se debe proporcionar una expresión de entrada o un invocable con argumentos.

Ejemplo:

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

Parámetros

Nombre Description
entry_expr
Requerido

Expresión de Q# que se usará como punto de entrada para el programa. Como alternativa, se puede proporcionar un invocable, que debe ser un Q# al que se puede llamar.

*args
Requerido

Argumentos que se van a pasar al invocable, si se proporciona uno.

Devoluciones

Tipo Description
<xref:QirInputData>

Programa compilado. Use str() para obtener la cadena QIR.

dump_machine

Devuelve el vector de estado disperso del simulador como un objeto StateDump.

dump_machine() -> StateDump

Devoluciones

Tipo Description

Estado del simulador.

eval

Evalúa el código fuente de Q#.

La salida se imprime en la consola.

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

Parámetros

Nombre Description
source
Requerido

Código fuente de Q# que se va a evaluar.

Parámetros de palabra clave únicamente

Nombre Description
save_events

Si es true, se guardarán y devolverán todas las salidas. Si es false, se imprimirán.

Valor predeterminado: False

Devoluciones

Tipo Description
Any

Valor devuelto por la última instrucción del código fuente o la salida guardada si save_events es true.

Excepciones

Tipo Description

Si se produce un error al evaluar el código fuente.

get_target_profile

Devuelve el perfil de destino de este contexto.

get_target_profile() -> TargetProfile

import_openqasm

Importa el código fuente de OpenQASM en el intérprete de este contexto.

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

Parámetros

Nombre Description
source
Requerido
str

Un programa o fragmento de OpenQASM.

**kwargs
Requerido

Argumentos de palabra clave adicionales. Opciones comunes:

  • name (str): nombre del programa. Se usa como punto de entrada para el programa.

  • search_path (str): ruta de búsqueda opcional para resolver referencias de archivo.

  • output_semantics (OutputSemantics): semántica de salida para la compilación.

  • program_type (ProgramType): tipo de compilación de programas que se va a realizar:

    • ProgramType.Operation (valor predeterminado): el origen se convierte en una operación de Q# en el espacio de nombres global con parámetros para las entradas y parámetros clásicos declarados para cada uno de los cúbits declarados, mientras que las declaraciones de salida explícitas o implícitas se convierten en el tipo de valor devuelto de la operación.

    • ProgramType.File: tratará el origen de entrada como un programa independiente y creará una operación en el qasm_import espacio de nombres que solo toma parámetros clásicos, asigna los cúbits necesarios internamente y los libera al final de la operación.

    • ProgramType.Fragments: ejecuta el origen proporcionado en el intérprete interactivo actual, definiendo las variables o operaciones declaradas en el ámbito actual y devolviendo el valor de la última instrucción del origen.

Devoluciones

Tipo Description
Any

Valor devuelto por la última instrucción del código fuente.

Excepciones

Tipo Description

Si se produce un error al generar, analizar o analizar el origen de OpenQASM.

Si hay un error al compilar el programa.

logical_counts

Extrae los recuentos de recursos lógicos del código fuente de Q#. Se debe proporcionar una expresión de entrada o un invocable con argumentos.

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

Parámetros

Nombre Description
entry_expr
Requerido

Expresión de entrada. Como alternativa, se puede proporcionar un invocable, que debe ser un Q# al que se puede llamar.

Devoluciones

Tipo Description

Recursos de programa en términos de recuentos de puertas lógicas.

run

Ejecuta la expresión Q# dada para el número determinado de capturas. Cada captura usa una instancia independiente del 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

Nombre Description
entry_expr
Requerido

Expresión de entrada. Como alternativa, se puede proporcionar un invocable, que debe ser un Q# al que se puede llamar.

shots
Requerido

Número de tomas que se van a ejecutar.

*args
Requerido

Argumentos que se van a pasar al invocable, si se proporciona uno.

on_result
Requerido

Función de devolución de llamada a la que se llamará con cada resultado.

save_events
Requerido

Si es true, se guardará la salida de cada captura. Si es false, se imprimirán.

noise
Requerido

Ruido que se va a usar en la simulación.

qubit_loss
Requerido

Probabilidad de pérdida de cúbits en la simulación.

seed
Requerido

Inicialización que se va a usar para el generador de números aleatorios en la simulación, si existe.

type
Requerido

Tipo de simulador que se va a usar. Si no se especifica, se usará la simulación de vector de estado dispersa predeterminada.

num_qubits
Requerido

Número de cúbits que se van a usar para el tipo de simulación "clifford". Si no se especifica, el simulador de Clifford supone un valor predeterminado de 1000 cúbits.

Parámetros de palabra clave únicamente

Nombre Description
on_result
Valor predeterminado: None
save_events
Valor predeterminado: False
noise
Valor predeterminado: None
qubit_loss
Valor predeterminado: None
seed
Valor predeterminado: None
type
Valor predeterminado: None
num_qubits
Valor predeterminado: None

Devoluciones

Tipo Description

Una lista de resultados o errores en tiempo de ejecución. Si save_events es true, se devuelve una lista de ShotResult .

Excepciones

Tipo Description

Si hay un error al interpretar la entrada.

Si el número de tomas es menor que 1.

set_classical_seed

Establece el valor de inicialización del generador de números aleatorios usado para las operaciones de números aleatorios clásicos de la biblioteca estándar. Esto se aplica a todo el código de Q# ejecutado, compilado o estimado en este contexto.

set_classical_seed(seed: int | None) -> None

Parámetros

Nombre Description
seed
Requerido

Inicialización que se va a usar para el generador de números aleatorios clásico. Si No, la inicialización se generará a partir de la entropía.

set_quantum_seed

Establece el valor de inicialización del generador de números aleatorios que se usa para las medidas cuánticas. Esto se aplica a todo el código de Q# ejecutado, compilado o estimado en este contexto.

set_quantum_seed(seed: int | None) -> None

Parámetros

Nombre Description
seed
Requerido

Inicialización que se va a usar para el generador de números aleatorios cuánticos. Si No, la inicialización se generará a partir de la entropía.

Atributos

code

code: Any