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)
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 para todos los términos de error, , donde es el objetivo observable que se va a medir en circuit.
Los términos de error, , 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.
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_simplifyen suatol_eigenvaluelugar! - 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)
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
- bounds (dict[str, PauliLindbladMap]) – los límites del conmutador de tiempos desiguales, calculados previamente mediante evolución hacia adelante.
- 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.
Devuelve
Una versión más estricta de los límites del conmutador de tiempo desigual.
Subidas
- NotImplementedError – cuando la contiene
observablemá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)
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 (utilizando la norma 1 de Schatten, también conocida como norma nuclear) para todos los términos de error, , donde se supone que es el estado «todo a cero», , en todos los qubits activos de circuit.
Los términos de error, , 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.
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)
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
- circuit (QuantumCircuit) – el circuito de destino.
- forward_bounds (dict[str, PauliLindbladMap] | None) – los límites superiores (véase también
compute_forward_bounds()). - backward_bounds (dict[str, PauliLindbladMap] | None) – los límites inferiores (véase también
compute_backward_bounds()). - noise_rates (dict[str, PauliLindbladMap | None] | None) – los índices de ruido aprendidos en el backend de destino.
- is_clifford_circuit (bool) – si el circuito de destino es totalmente de Clifford.
Devuelve
Los límites fusionados.
Subidas
- ValueError – cuando ambos límites proporcionados son
None. - KeyError – cuando contienen
boundsuna claveInjectNoise.modifier_refque no aparece en el destino ocircuitcuyo valor noInjectNoise.refse 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_refcoinciden entre yforward_boundsbackward_bounds. - NotImplementedError – cuando es
is_clifford_circuitTrue.
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)
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.
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_scalesdiccionario que se proporcionará como entrada directa alsamplomatic.samplex.Samplex.inputs(). - los gastos generales de muestreo ( ) 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_budgety elbias_tolerance. - KeyError – si
noise_ratesfalta una entrada para cualquier identificador de modelo de ruido (InjectNoise.ref) que aparezca encircuit.
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)
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
LightConeinicializado 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
circuiten 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 .
- 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)
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
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()
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
truncation_bias
Tipo: float
El sesgo en el límite debido al truncamiento del conmutador.