Skip to main content
IBM Quantum Platform

Límites

qiskit_addon_slc.bounds

Funciones de cálculo vinculadas.

Este módulo ofrece diversas funciones para calcular los límites de error que conforman un cono de luz sombreado.

compute_forward_bounds

compute_forward_bounds(circuit, noise_model_paulis, /, observable, *, evolution_max_terms=1000000, eigval_max_qubits=14, atol=1e-08, atol_simplify=1e-08, atol_eigenvalue=1e-08, **kwargs)

GitHub

Calcular los límites del conmutador en tiempos desiguales tras la evolución hacia adelante.

Partiendo del final del circuito, calcula los límites del conmutador de tiempo desigual evolucionados hacia adelante para todos los términos de error de Pauli de cada capa con ruido del circuito objetivo.

Es decir, calcular [EF,AF]2\| \left[ E_F, A_F \right] \|_2 para todos los términos de error, EFE_F, donde AFA_F es el objetivo observable que se va a medir en circuit.

Los términos de error, EIE_I, vienen determinados por noise_model_paulis. Este diccionario asocia los identificadores de los modelos de ruido (samplomatic.InjectNoise.ref) a una lista de términos de error de Pauli. Se utilizarán los términos correspondientes cada vez que se encuentre un BoxOp con una anotación InjectNoise coincidente durante la iteración sobre circuit.

En desuso desde la versión 0.2.0

El argumento qiskit_addon_slc.bounds.forward.compute_forward_bounds()de atol ha quedado obsoleto a partir de la versión qiskit-addon-slc 0.2.0. Se eliminará como muy pronto tres meses después de la fecha de lanzamiento. Utiliza en su lugar atol_simplify y atol_eigenvalue.

Parámetros

  • circuit (QuantumCircuit) – el circuito de destino.
  • noise_model_paulis (dict[str, QubitSparsePauliList]) – los términos de error de Pauli que hay que tener en cuenta para cada modelo de ruido.
  • observable (Pauli |PauliList |SparseObservable |SparsePauliOp) – la magnitud observable objetivo que se va a medir al final del circuito.
  • evolution_max_terms (int) – el número máximo de términos del operador que hay que tener en cuenta durante la evolución.
  • eigval_max_qubits (int) – el número máximo de qubits de un conmutador para el que aún se intentará calcular el valor propio. Cuando se supera este valor, el límite se aproxima mediante una desigualdad triangular más sencilla y menos estricta.
  • atol (float) – ¡Uso OBSOLETO: utiliza y atol_simplify en su atol_eigenvalue lugar!
  • atol_simplify (float) – la tolerancia absoluta utilizada para ajustar los términos del conmutador. Si se relaja esta tolerancia, se producirá un mayor truncamiento de los términos del conmutador, lo que hará que el cálculo de su valor propio sea más rápido, pero menos preciso.
  • atol_eigenvalue (float) – la tolerancia absoluta utilizada para detectar la convergencia del valor propio del conmutador. Si se relaja esta tolerancia, el valor propio calculado por el solucionador iterativo de Davidson será menos preciso.
  • kwargs : cualquier argumento de palabra clave adicional se reenviará a compute_bounds().

Devuelve

El límite del conmutador de tiempos desiguales.

Subidas

NotImplementedError – cuando la contiene observable más de un término de Pauli. Si te encuentras con esto, tendrás que llamar a esta función para cada objetivo Pauli por separado.

Tipo de retorno

dict [ str, PauliLindbladMap ]

tighten_with_speed_limit

tighten_with_speed_limit(bounds, circuit, noise_model_paulis, /, observable)

GitHub

Restringe los límites establecidos mediante restricciones a la velocidad de propagación de la información.

Inspirada en las ideas que subyacen a los límites de Lieb-Robinson, esta función aprovecha los límites de la velocidad de propagación de la información para refinar los límites del conmutador en tiempos desiguales calculados previamente mediante evolución hacia adelante (véase también compute_forward_bounds()).

Parámetros

Devuelve

Una versión más estricta de los límites del conmutador de tiempo desigual.

Subidas

  • NotImplementedError – cuando la contiene observable más de un término de Pauli. Si te encuentras con esto, tendrás que llamar a esta función para cada objetivo Pauli por separado.
  • ValueError – cuando se encuentra una puerta que actúa sobre más de dos qubits.

Tipo de retorno

dict [ str, PauliLindbladMap ]

compute_backward_bounds

compute_backward_bounds(circuit, noise_model_paulis, /, *, evolution_max_terms=1000000, **kwargs)

GitHub

Calcular los límites del conmutador de tiempos desiguales obtenidos mediante evolución hacia atrás.

Partiendo del inicio del circuito, calcula los límites del conmutador de tiempo desigual, obtenidos mediante evolución hacia atrás, para todos los términos de error de Pauli de cada capa con ruido del circuito objetivo.

Es decir, calcular [EI,ρI]1\| \left[ E_I, \rho_I \right] \|_1 (utilizando la norma 1 de Schatten, también conocida como norma nuclear) para todos los términos de error, EIE_I, donde se supone que ρI\rho_I es el estado «todo a cero», 00\ket{0 \ldots 0}, en todos los qubits activos de circuit.

Los términos de error, EIE_I, vienen determinados por noise_model_paulis. Este diccionario asocia los identificadores de los modelos de ruido (samplomatic.InjectNoise.ref) a una lista de términos de error de Pauli. Se utilizarán los términos correspondientes cada vez que se encuentre un BoxOp con una anotación InjectNoise coincidente durante la iteración sobre circuit.

Precaución

Antes de calcular los límites, esta función elimina todas las operaciones Measure de circuit. Esto es necesario porque el circuito se invierte antes de procesarse en orden inverso, lo que permite tratar la evolución hacia atrás como si fuera una evolución hacia adelante (en el circuito invertido).

Parámetros

  • circuit (QuantumCircuit) – el circuito de destino.
  • noise_model_paulis (dict[str, QubitSparsePauliList]) – los términos de error de Pauli que hay que tener en cuenta para cada modelo de ruido.
  • evolution_max_terms (int) – el número máximo de términos del operador que hay que tener en cuenta durante la evolución. (Si el operador supera este tamaño, se truncan los términos más pequeños).
  • kwargs : cualquier argumento de palabra clave adicional se reenviará a compute_bounds().

Devuelve

Los límites del conmutador de tiempo desigual en evolución hacia atrás.

Tipo de retorno

dict [ str, PauliLindbladMap ]

merge_bounds

merge_bounds(circuit, forward_bounds, backward_bounds, /, noise_rates=None, *, is_clifford_circuit=False)

GitHub

Combinar los límites delantero y trasero.

El nivel en el que se produce el cambio del uso de límites hacia atrás al uso de límites hacia adelante será el mismo para todos los qubits. Se determina teniendo en cuenta los datos de aprendizaje facilitados noise_rates. Si no se facilitan estos datos, se asumen índices de ruido uniformes. Aunque se trata de una hipótesis poco realista, puede resultar útil obtener una vista previa de los límites fusionados.

Parámetros

Devuelve

Los límites fusionados.

Subidas

  • ValueError – cuando ambos límites proporcionados son None.
  • KeyError – cuando contienen bounds una clave InjectNoise.modifier_ref que no aparece en el destino o circuit cuyo valor no InjectNoise.ref se encuentra.
  • ValueError – si los términos de Pauli del modelo de ruido, cuyos límites se calculan para un valor dado de, no InjectNoise.modifier_ref coinciden entre y forward_bounds backward_bounds.
  • NotImplementedError – cuando es is_clifford_circuit True.

Tipo de retorno

dict [ str, PauliLindbladMap ] | None

compute_local_scales

compute_local_scales(circuit, bounds, /, noise_rates, *, sampling_cost_budget=inf, bias_tolerance=0.0)

GitHub

Calcula el argumento local_scales de un Samplex.

Este argumento local_scales se utiliza para especificar qué términos de error concretos se deben mitigar.

Se debe bias_tolerance especificar o bien sampling_cost_budget o bien. El primero establece un límite máximo para el coste de muestreo, mientras que el segundo establece un límite máximo para el sesgo residual que se puede tolerar.

Nota

Si el orden de los términos de Pauli en y bounds noise_rates no coincide, el resultado de esta función adoptará el orden establecido por noise_rates con el fin de garantizar que las escalas sean compatibles con las tasas que también se proporcionarán a QuantumProgram.

Parámetros

  • circuit (QuantumCircuit) – el circuito de destino.
  • bounds (dict[str, PauliLindbladMap]) – los límites del cono de luz sombreado.
  • noise_rates (dict[str, PauliLindbladMap | None]) – las tasas del modelo de ruido aprendido.
  • sampling_cost_budget (float) – el coste máximo de muestreo que se puede permitir.
  • bias_tolerance (float) – el sesgo máximo que se puede tolerar.

Devuelve

  • el local_scales diccionario que se proporcionará como entrada directa al samplomatic.samplex.Samplex.inputs().
  • los gastos generales de muestreo ( γ2\gamma^2 ) necesarios para llevar a cabo el muestreo de local_scales.
  • el sesgo residual en los valores esperados calculados con estos límites.

Tipo de retorno

Una tupla de longitud 3, cuyos elementos son

Subidas

  • ValueError – si se especifican valores distintos de los predeterminados para ambos, el sampling_cost_budget y el bias_tolerance.
  • KeyError – si noise_rates falta una entrada para cualquier identificador de modelo de ruido (InjectNoise.ref) que aparezca en circuit.

Este módulo también contiene algunas funciones de nivel inferior a las que, por lo general, el usuario final no accede directamente, pero que pueden resultar útiles para realizar desarrollos adicionales basados en este paquete.

compute_bounds

compute_bounds(circuit, noise_model_paulis, light_cone, norm_fn, *, backwards, max_num_boxes=None, num_processes=1, timeout=None)

GitHub

Calcula los límites del conmutador de tiempo desigual.

Dado un circuito con BoxOp instrucciones con InjectNoise anotaciones y una correspondencia entre los identificadores del modelo de ruido (InjectNoise.ref) y una lista de términos de error de Pauli (noise_model_paulis), esta función calcula los límites del conmutador de tiempo desigual (cuyos detalles se implementan mediante norm_fn). Al hacerlo, solo tiene en cuenta las puertas que se encuentran dentro del cono de luz del observable (inicializado por light_cone). Estos límites calculados constituyen la base del cono de luz sombreado.

Dado que esta función realiza un cálculo de larga duración, gestiona las excepciones KeyboardInterrupt de forma adecuada, lo que permite al usuario interrumpir el cálculo en cualquier momento y obtener, aun así, los resultados calculados hasta ese momento.

Parámetros

  • circuit (QuantumCircuit) – el circuito de destino.
  • noise_model_paulis (dict[str, QubitSparsePauliList]) – los términos de error de Pauli que hay que tener en cuenta para cada modelo de ruido.
  • light_cone (LightCone) – el rastreador LightCone inicializado y con estado.
  • norm_fn (Callable[[Pauli, RotationGates], CommutatorBounds]) – la función que implementa el conmutador de tiempo desigual específico.
  • backwards (bool) – si se debe recorrer el circuit en orden inverso.
  • max_num_boxes (int | None) – el número máximo de casillas para las que se deben calcular los límites. A los límites de cualquier cuadro adicional se les asignará el valor límite superior trivial de 2.02.0.
  • num_processes (int) – el número de procesos paralelos que se van a utilizar.
  • timeout (float | None) – un tiempo de espera opcional (en segundos), tras el cual todas las capas restantes se rellenan con límites numéricos triviales de 2.0. Ten en cuenta que no se trata de un tiempo de espera estricto y que la capa que se esté procesando en el momento de alcanzarse dicho tiempo de espera se completará con normalidad.

Devuelve

Los límites calculados del conmutador de tiempo desigual.

Tipo de retorno

dict [ str, PauliLindbladMap ]

CommutatorBounds

class CommutatorBounds(commutator_bound, truncation_bias, fallback_to_tri_ineq)

GitHub

Bases: NamedTuple

Una clase de datos para almacenar metadatos sobre los límites del conmutador calculados.

Crear una nueva instancia de CommutatorBounds(commutator\_bound, truncation\_bias, fallback\_to\_tri\_ineq)

Parámetros

  • commutator_bound (float)
  • truncation_bias (float)
  • fallback_to_tri_ineq (bool)

commutator_bound

Tipo: float

El límite del conmutador.

Este límite se calculará de diferentes maneras en función de la aplicación. Por ejemplo, los límites hacia atrás se calculan mediante la norma nuclear (norma de Schatten 1), mientras que los límites hacia adelante suelen calcularse utilizando la norma espectral (norma de Schatten infinito).

Si el cálculo de la norma supera los límites de dificultad especificados, se descartará en favor de un límite más sencillo basado en la desigualdad triangular, lo cual se indica fallback_to_tri_ineq estableciendo en True.

Este valor puede corresponder al momento en NaN que se interrumpió el cálculo del límite de conmutación. Esto puede ocurrir cuando ya truncation_bias supera el límite teórico de 2.0.

fallback_to_tri_ineq

Tipo: bool

commutator_bound Se calculó «aproximadamente» utilizando una sencilla desigualdad triangular.

min

min()

GitHub

Devuelve el límite mínimo codificado por estos metadatos.

El límite mínimo es el menor de la suma de y commutator_bound o truncation_bias el límite teórico de 2.0.

Se 2.0 utiliza el valor de porque una observable de Pauli acotada en el rango [-1, +1] no puede presentar un sesgo superior a 2.0.

Tipo de retorno

Float

truncation_bias

Tipo: float

El sesgo en el límite debido al truncamiento del conmutador.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.