GateFolding
class GateFolding
Bases: MitigationTask
Calcula los valores esperados de las magnitudes observables mediante la extrapolación sin ruido (ZNE) con el método de mitigación del pliegue de puertas.
Esta clase permite preparar un modelo de « QuantumProgram » con un circuito mitigado mediante ZNE y el método «gate folding», que puede ejecutarse en hardware utilizando el Executor, y procesar posteriormente los resultados para calcular los valores esperados mitigados de determinadas observables. Los parámetros de la tarea deben introducirse como entradas en la función «prepare», y las variables pertinentes necesarias para el posprocesamiento se guardan internamente:
gf_task = GateFolding()
program = gf_task.prepare(circuit=circuit,
observables=observables,
parameters=parameter_values,
noise_factors=noise_factors_array,
extrapolator=extrapolators_list)
job = executor.run(program)
results = job.result()
mitigated_result = gf_task.postprocess(results)Para calcular los valores esperados del resultado de un trabajo cargado, se puede crear una tarea de « GateFolding » a partir de los resultados del trabajo, con todas las variables internas necesarias para el posprocesamiento. Como alternativa, las variables necesarias para el posprocesamiento pueden introducirse directamente en el método estático compute_expectation_value . Ejemplo de cómo ejecutar el posprocesamiento de un resultado cargado:
gf_task = GateFolding()
program = gf_task.prepare(circuit=circuit,
observables=observables,
parameters=parameter_values,
noise_factors=noise_factors_array,
extrapolator=extrapolators_list)
job_id = executor.run(program).job_id
job = service.job(job_id)
results = job.result()
gf_task = load_tasks_from_result(results)[0]
mitigated_result = gf_task.postprocess(results)Crear una instancia de la tarea « GateFolding ».
Atributos
VERSIÓN
Valor predeterminado: '0.1'
Métodos
compute_expectation_value
static compute_expectation_value(item_result, observables, param_shape=None, param_basis_pairs=None, meas_bases=None, broadcast_obs_and_params=False, measure_noise_data=None)
Valores esperados del proceso para el resultado de un único artículo.
Esta función se puede utilizar para calcular los valores esperados de un resultado de un elemento concreto sin mitigar, sin necesidad de crear una nueva instancia de la clase.
Parámetros
- item_result (QuantumProgramItemResult) – El resultado del artículo.
- observables (ObservablesArray |Sequence[SparsePauliOp]) – Las variables observables para las que se van a calcular los valores esperados.
- param_shape (tuple[int, ...] | None) – El formato de los valores de los parámetros.
- param_basis_pairs (list[tuple[tuple[int, ...], str]] | None) – La correspondencia entre los parámetros y los índices para medir la base.
- meas_bases (Sequence[Pauli] | Sequence[str] | PauliList | None) – Una lista de las bases de Pauli medidas. El elemento
iéste es una base de medición que se supone que corresponde a la éstaisección de los datos enitem_result. - broadcast_obs_and_params (bool) – Si se deben transmitir los observables y los valores de los parámetros.
- measure_noise_data (PauliLindbladMap |ndarray | None) – Datos de calibración del ruido de medición para la mitigación de TREX.
Devuelve
Un « PubResult » que contiene y evs std como campos en sus datos, donde evs son valores esperados y std son las desviaciones estándar de los valores esperados. Si broadcast_obs_and_params se establece en «True», los datos contendrán también un campo twirl_stds que representa la desviación estándar entre las diferentes aleatorizaciones.
Subidas
- ValueError – Si no
item_resulttiene ninguna clave'_meas'. - ValueError – Si
item_result['_meas']tiene un número de ejes no válido. - ValueError – Si y
param_shapeobservables.shapeno pueden emitirse simultáneamente.
Tipo de retorno
compute_expectation_value_gate_folding
static compute_expectation_value_gate_folding(item_results, observables, param_shape, param_basis_pairs, noise_factors, extrapolator, extrapolated_noise_factors=None, meas_bases=None, broadcast_obs_and_params=False, measure_noise_data=None, custom_fit=None)
Valores esperados del proceso para el resultado de un único artículo.
Esta función se puede utilizar para calcular los valores esperados de un resultado concreto de un elemento con mitigación de «gate_folding» sin necesidad de crear una nueva instancia de clase.
Parámetros
-
item_results (list[QuantumProgramItemResult]) – Lista de los resultados de los elementos: uno por cada factor de ruido.
-
observables (ObservablesArray |Sequence[SparsePauliOp]) – Las variables observables para las que se van a calcular los valores esperados.
-
param_shape (tuple[int, ...] | None) – El formato de los valores de los parámetros.
-
param_basis_pairs (list[tuple[tuple[int, ...], str]] | None) – La correspondencia entre los parámetros y los índices para medir la base.
-
noise_factors (list[float]) – Los factores de ruido que se utilizaron para amplificar el ruido.
-
extrapolated_noise_factors (float |int |list[float] | None) – Factores de ruido que se deben tener en cuenta para evaluar los ajustes.
-
extrapolator (list[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']]) –
El modelo o modelos de extrapolación que se vayan a utilizar. Los modelos se probarán por orden de prioridad. Modelos compatibles (cada uno de ellos se ajusta a la función indicada del factor de ruido
x):"linear":a + b*x"polynomial_degree_k"(1 ≤ k ≤ 7): un polinomio de grado k"exponential":a*exp(b*x)"double_exponential":a*exp(b*x) + c*exp(d*x)(tasas limitadas a la desintegración)"fallback": no se ajusta; el valor medido con el factor de ruido más bajocustom: La función de extrapolación personalizada especificada en el parámetrocustom_fit
-
meas_bases (Sequence[Pauli] | Sequence[str] | PauliList | None) – Una lista de las bases de Pauli medidas. El elemento -ésimo
ies una base de medición que se supone que se corresponde con el -ésimoisegmento de los datos en cada uno de lositem_results. -
broadcast_obs_and_params (bool) – Si se deben transmitir los observables y los valores de los parámetros.
-
measure_noise_data (PauliLindbladMap |ndarray | None) – Datos de calibración del ruido de medición para la mitigación de TREX. Puede ser, bien un « PauliLindbladMap » de un modelo de ruido aprendido previamente, bien el resultado de un circuito de calibración.
-
custom_fit (tuple[Callable[[...], ndarray], list[float], tuple[float, ...] | tuple[list[float], ...]] | None) – Una función de ajuste personalizado que se utilizará para la extrapolación. Debe incluir una tupla con el siguiente formato:
(function, p_0, bounds). La función debe tomar la variable independiente como primer argumento y los parámetros de ajuste como los demás argumentos, por separado. p_0 es una matriz que contiene los valores iniciales estimados para los parámetros, y «bounds» son los límites de dichos parámetros. Estos parámetros se enviarán como argumentos de la funciónscipy.optimize.curve_fit.
Devuelve
-
evs: valores esperados calculados en el punto de ruido cero. -
std: las desviaciones estándar de los valores esperados extrapolados, evaluados en el punto de ruido cero. -
evs_noise_factors: valores esperados calculados en los puntos de noise_factors. -
stds_noise_factors: desviaciones estándar calculadas en los puntos de noise_factors. -
stds_twirl_noise_factors: desviaciones estándar entre las distintas aleatorizaciones, calculadas en elpuntos de factores de ruido.
-
evs_extrapolated: valores esperados calculados en los puntos extrapolated_noise_factors.Establecer en «None» si es
extrapolated_noise_factors«None». -
stds_extrapolated: desviaciones estándar calculadas en los puntos extrapolados de los factores de ruido.Establecer en «None» si es
extrapolated_noise_factors«None».
El archivo « PubResult » también contendrá un campo selected_extrapolators en los metadatos que recoge los extrapoladores válidos utilizados para extrapolar los datos de cada término observable para el punto de extrapolación sin ruido.
Tipo de retorno
Un objeto « PubResult » que contiene los siguientes campos
Subidas
- ValueError – Si uno de ellos no
item_resultstiene clave'_meas'. - ValueError – Si uno de los
item_resultsdatos'_meas'tiene un número de ejes no válido. - ValueError – Si y
param_shapeobservables.shapeno pueden emitirse simultáneamente. - ValueError – Si no
noise_factorsestá suficientemente especificado para cualquier extrapolador.
create_instance_from_passthrough_data
static create_instance_from_passthrough_data(passthrough, trex=None)
Crear una instancia de GateFolding a partir de un diccionario de paso cargado desde el resultado de la ejecución de un programa cuántico.
Parámetros
- passthrough (dict[str, Any]) – Diccionario «Passthrough_data» cargado a partir del resultado de la ejecución de un programa cuántico.
- trex (TREX | None) – Una instancia de TREX que contiene un circuito de calibración se ejecuta en el mismo programa cuántico. Debe mantenerse
Noneen caso de que no se haya utilizado la mitigación TREX o no se haya ejecutado una calibración TREX como parte del mismo programa cuántico.
Devuelve
Una instancia de « GateFolding ».
Tipo de retorno
find_unique_layers
find_unique_layers(circuit, custom_boxing_options=None)
Devuelve las capas empaquetadas únicas del circuito indicado utilizando las opciones de empaquetado especificadas.
Parámetros
- circuit (QuantumCircuit) – El circuito que da lugar a sus capas únicas.
- custom_boxing_options (dict | None) – Las opciones de encajado personalizadas que utilizará la función
generate_boxing_pass_manager().
Devuelve
Capas únicas en recuadros del circuito dado.
Tipo de retorno
postprocess
postprocess(results, measure_noise_data=None, *, noise_factors=None, extrapolator=None, extrapolated_noise_factors=None, custom_fit=None)
Valores esperados del proceso para el resultado de una única tarea de « GateFolding ».
Parámetros
-
results (list[QuantumProgramItemResult] | QuantumProgramResult) – Los resultados de la ejecución. Puede ser el objeto de resultados completo o los elementos de esta tarea en los que se ha mitigado el efecto «gate folding». Si se añade la tarea de calibración TREX al programa cuántico, sus resultados se utilizarán para calcular los datos de ruido de medición, siempre que se facilite el objeto de resultados completo.
-
noise_factors (Sequence[float] | None) – Los factores de ruido que se utilizaron para amplificar el ruido.
-
extrapolated_noise_factors (list[float] | None) – Factores de ruido que se deben tener en cuenta para evaluar los ajustes.
-
extrapolator (Sequence[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']] | None) –
El modelo o modelos de extrapolación que se vayan a utilizar. Los modelos se probarán por orden de prioridad. Modelos compatibles (cada uno de ellos se ajusta a la función indicada del factor de ruido
x):"linear":a + b*x"polynomial_degree_k"(1 ≤ k ≤ 7): un polinomio de grado k"exponential":a*exp(b*x)"double_exponential":a*exp(b*x) + c*exp(d*x)(tasas limitadas a la desintegración)"fallback": no se ajusta; el valor medido con el factor de ruido más bajocustom: La función de extrapolación personalizada especificada en el parámetrocustom_fit
-
measure_noise_data (PauliLindbladMap |ndarray | None) – Datos de calibración del ruido de medición para la mitigación de TREX. Puede ser, bien un « PauliLindbladMap » de un modelo de ruido aprendido previamente, bien el resultado de un circuito de calibración.
-
custom_fit (tuple[Callable[[...], ndarray], list[float], tuple[float, ...] | tuple[list[float], ...]] | None) – Una función de ajuste personalizado que se utilizará para la extrapolación. Debe incluir una tupla con el siguiente formato:
(function, p_0, bounds). La función debe tomar la variable independiente como primer argumento y los parámetros de ajuste como los demás argumentos, por separado. p_0 es una matriz que contiene los valores iniciales estimados para los parámetros, y «bounds» son los límites de dichos parámetros. Estos parámetros se enviarán como argumentos de la funciónscipy.optimize.curve_fit.
Devuelve
-
evs: valores esperados calculados en el punto de ruido cero. -
std: las desviaciones estándar de los valores esperados extrapolados, evaluados en el punto de ruido cero. -
evs_noise_factors: valores esperados calculados en los puntos de noise_factors. -
stds_noise_factors: desviaciones estándar calculadas en los puntos de noise_factors. -
stds_twirl_noise_factors: desviaciones estándar entre las distintas aleatorizaciones, calculadas en elpuntos de factores de ruido.
-
evs_extrapolated: valores esperados calculados en los puntos extrapolated_noise_factors.Establecer en «None» si es
extrapolated_noise_factors«None». -
stds_extrapolated: desviaciones estándar calculadas en los puntos extrapolados de los factores de ruido.Establecer en «None» si es
extrapolated_noise_factors«None».
El archivo « PubResult » también contendrá un campo selected_extrapolators en los metadatos que recoge los extrapoladores válidos utilizados para extrapolar los datos de cada término observable para el punto de extrapolación sin ruido.
Tipo de retorno
Un objeto « PubResult » que contiene los siguientes campos
Subidas
- ValueError – Si uno de los resultados de la tarea no tiene
'_meas'clave. - ValueError – Si alguno de los datos
'_meas'de los resultados del elemento tiene un número de ejes no válido. - ValueError – Si y
param_shapeobservables.shapeno pueden emitirse simultáneamente.
prepare
prepare(circuit, observables, parameters, custom_boxing_options=None, shots_per_randomization=64, num_randomizations=128, broadcast_obs_and_params=False, trex=None, quantum_program=None, *, folding_method='random', noise_factors=(1, 3, 5), extrapolator=None, extrapolated_noise_factors=None)
Crea un elemento mitigado QuantumProgram con GateFolding para su ejecución mediante Executor.
Crea un elemento para un QuantumProgram, que se puede ejecutar mediante Executor y que se ha sometido a un procesamiento « GateFolding » (amplifica el ruido mediante técnicas de «gate folding» y extrapola hasta el punto de ruido cero). Si quantum_program se especifica un, el nuevo elemento se añadirá al programa existente; de lo contrario, se creará un nuevo programa que contendrá únicamente el elemento creado. Si el valor es broadcast_obs_and_params «True», los observables y los parámetros se distribuirán siguiendo las reglas de distribución de Samplomatic, lo que permite asociar algunos de los parámetros a algunos de los observables. De lo contrario, se ejecutará cada parámetro para cada observable (producto exterior de los parámetros y los observables). Ten en cuenta que el posprocesamiento de un producto exterior suele ser más rápido.
Parámetros
-
circuit (QuantumCircuit) – El circuito cuántico.
-
observables (ObservablesArray |Sequence[SparsePauliOp]) – Las magnitudes observables para calcular sus valores esperados.
-
parameters (ndarray | None) – Los parámetros de un circuito paramétrico.
-
custom_boxing_options (dict | None) – Las opciones de encajado personalizadas que utilizará la función
generate_boxing_pass_manager(). -
shots_per_randomization (int) – El número de inyecciones por aleatorización.
-
num_randomizations (int) – El número de aleatorizaciones.
-
broadcast_obs_and_params (bool) – Si se deben transmitir los observables y los parámetros.
-
trex (TREX | None) – Una instancia de mitigación de TREX que se utilizará para mitigar los errores de lectura.
-
quantum_program (QuantumProgram | None) – El programa de Quantum para añadir un artículo. Si es «None», se creará un nuevo programa.
-
folding_method (Literal['random', 'front', 'back']) –
La técnica que hay que utilizar para combinar las puertas de 2 qubits con el fin de amplificar el ruido. Si el factor de ruido exige amplificar únicamente un subconjunto de las puertas, estas se seleccionan según el siguiente método:
"random"(por defecto): las puertas se eligen al azar."front": las puertas se seleccionan a partir de la parte delantera del circuito DAG ordenado topológicamente."back": las puertas se seleccionan a partir de la parte posterior del circuito DAG ordenado topológicamente.
-
noise_factors (Sequence[float |int]) – Los factores de ruido que hay que utilizar para amplificar el ruido.
-
extrapolator (Sequence[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']] | None) –
El modelo o modelos de extrapolación que se prevé utilizar en el posprocesamiento. Se utiliza en la preparación para comprobar que existen suficientes factores de ruido que permitan un ajuste válido al utilizar estos extrapoladores. Si
None, no se llevará a cabo la validación. Modelos compatibles (cada uno de ellos se ajusta a la función indicada del factor de ruidox):"linear":a + b*x"polynomial_degree_k"(1 ≤ k ≤ 7): un polinomio de grado k"exponential":a*exp(b*x)"double_exponential":a*exp(b*x) + c*exp(d*x)(tasas limitadas a la desintegración)"fallback": no se ajusta; el valor medido con el factor de ruido más bajo
-
extrapolated_noise_factors (list[float] | None) – Está previsto utilizar los factores de ruido para evaluar los ajustes en el posprocesamiento. Se utiliza para guardar los datos y facilitar su posterior procesamiento. Se puede sobrescribir en el posprocesado.
Devuelve
Un elemento mitigado con QuantumProgram « GateFolding » que se puede ejecutar mediante Executor.
Tipo de retorno