Notas de la versión de Qiskit 0.34
0.34.2
Terra 0.19.2
Preludio
Qiskit Terra 0.19.2 es predominantemente una versión de corrección de errores, pero ahora también viene con ruedas construidas para Python 3.10 en las principales plataformas.
Nuevas funciones
- Se ha añadido soporte para la ejecución con Python 3.10. Esto incluye la publicación de binarios precompilados en PyPI para Python 3.10 en las plataformas compatibles.
Notas de actualización
- A partir de Python 3.10, Qiskit Terra tendrá soporte reducido para plataformas de 32 bits. Se trata de Linux i686 y Windows de 32 bits. Estas plataformas con Python 3.10 están ahora en el nivel 3 en lugar de en el nivel 2 (según los niveles definidos en: https://qiskit.org/documentation/getting_started.html #platform-support) Esto se debe a que las dependencias Numpy y Scipy han abandonado el soporte para ellas. Qiskit seguirá publicando binarios precompilados para estas plataformas, pero no podemos probar los paquetes antes de publicarlos, y necesitarás un compilador C/C++ para que
pippueda construir sus dependencias desde el código fuente. Si utiliza una de estas plataformas, le recomendamos que utilice Python 3.7, 3.8, o 3.9.
Corrección de errores
-
Se ha corregido un error por el que el
CVaRMeasurementintentaba convertir una matrizPauliSumOpa una matriz densa para comprobar si era diagonal. Para operadores de gran tamaño (> 16 qubits), este cálculo resultaba extremadamente costoso y generaba un error si no se habilitaba explícitamente medianteqiskit.utils.algorithm_globals.massive = True. La comprobación es ahora eficaz incluso para un gran número de qubits. -
DAGCircuit.draw()y la función asociadadag_drawer()mostrarán ahora un mensaje de error más útil cuando el nombre de archivo proporcionado no sea válido. -
QuantumCircuit.add_register()ya no causará referenciasAncillaQubitreferencias duplicadas en un circuitoAncillaRegistercuyos bits ya están presentes. -
Conversión fija de
QuantumCircuits con condiciones clásicas enClbits aInstructions cuando se utiliza la funcióncircuit_to_instruction()o el métodoQuantumCircuit.to_instruction()método. Por ejemplo, ahora funcionará lo siguiente:from qiskit.circuit import QuantumCircuit, Qubit, Clbit qc = QuantumCircuit([Qubit(), Clbit()]) qc.h(0).c_if(qc.clbits[0], 0) qc.to_instruction() -
Ahora los registros rechazarán correctamente los bits duplicados. Corregido #7446.
-
El backend
FakeOpenPulse2Qmock ahora tiene T2 tiempos y errores de lectura almacenados para sus qubits. Se trata de valores arbitrarios, aproximadamente coherentes con los backends reales en el momento de su creación. -
Fijar el orden de los qubits de las evoluciones de 2 qubits en el
PauliEvolutionGatesi se utiliza con una síntesis de fórmula de producto. Por ejemplo, antes, la evolución deIIZ + IZI + IZZfrom qiskit.circuit.library import PauliEvolutionGate from qiskit.opflow import I, Z operator = (I ^ I ^ Z) + (I ^ Z ^ I) + (I ^ Z ^ Z) print(PauliEvolutionGate(operator).definition.decompose())producido
┌───────┐ q_0: ┤ Rz(2) ├──────── ├───────┤ q_1: ┤ Rz(2) ├─■────── └───────┘ │ZZ(2) q_2: ──────────■──────mientras que ahora se obtiene correctamente
┌───────┐ q_0: ┤ Rz(2) ├─■────── ├───────┤ │ZZ(2) q_1: ┤ Rz(2) ├─■────── └───────┘ q_2: ───────────────── -
Se ha solucionado un problema en los cajones de los circuitos
latexymplcuando los nombres de registro con varios guiones bajos en el nombre no se mostraban correctamente. -
Los números negativos en las salidas de matriz de los cajones aparecerán ahora como números decimales en lugar de fracciones con numeradores y denominadores enormes. Al igual que los números positivos, seguirán siendo fracciones si el cociente es entre números pequeños.
-
Se ha corregido un problema con el método
Target.get_non_global_operation_names()cuando se ejecutaba en un objetivo, se producía una excepción incorrecta en objetivos con operaciones globales ideales. Anteriormente, si se llamaba a este método en un objetivo que contenía cualquier operación ideal definida globalmente, donde las propiedades de la instrucción se establecen enNone, este método lanzaba una excepción en lugar de tratar esa instrucción como global. -
Se ha solucionado un problema con la función
transpile()que podía fallar cuando se le pasaba un objetoTargetdirectamente con el kwargtarget. -
Se ha corregido un problema con la función
transpile()que podía fallar cuando el argumentobackendera unBackendV2o unTargeta través del kwargtargetque contenía operaciones ideales definidas globalmente. -
Se ha corregido un problema por el que el trazado de esferas de Bloch podía provocar la aparición de un
AttributeErroren Jupyter o al intentar recortar las figuras para reducir su tamaño con Matplotlib 3.3 o 3.4 (pero no 3.5 ). Por ejemplo, el siguiente código se bloquearía previamente con un mensaje:AttributeError: 'Arrow3D' object has no attribute '_path2d'pero ahora funcionará con todas las versiones actuales compatibles de Matplotlib :
from qiskit.visualization import plot_bloch_vector plot_bloch_vector([0, 1, 0]).savefig("tmp.png", bbox_inches='tight') -
Se ha corregido un error en
PauliSumOp.permute()por el que el objeto sobre el que se llamaba al método se permutaba in situ, en lugar de devolver una copia permutada. Este fallo sólo se producía en permutaciones que no modificaban el número de qubits del operador. -
Corregido el método
PauliEvolutionGate.inverse(), que anteriormente calculaba la inversa invirtiendo el tiempo de evolución. Esto sólo era la inversa correcta si el operador evolucionaba exactamente. En concreto, esto provocó que la inversa de las evoluciones temporales basadas en la trotterización fuera incorrecta. -
El método
QuantumInstance.execute()ya no mutará su entrada si se le da una lista de circuitos. -
Corregida la serialización QPY de instrucciones personalizadas que tenían una definición no-op explícita. Antes se escribían y se leían como si fueran puertas opacas (sin definición). Ahora redondearán correctamente una definición vacía. Por ejemplo, lo siguiente será ahora correcto:
import io from qiskit.circuit import Instruction, QuantumCircuit, qpy_serialization # This instruction is explicitly defined as a one-qubit gate with no # operations. empty = QuantumCircuit(1, name="empty").to_instruction() # This instruction will perform some operations that are only known # by the hardware backend. opaque = Instruction("opaque", 1, 0, []) circuit = QuantumCircuit(2) circuit.append(empty, [0], []) circuit.append(opaque, [1], []) qpy_file = io.BytesIO() qpy_serialization.dump(circuit, qpy_file) qpy_file.seek(0) new_circuit = qpy_serialization.load(qpy_file)[0] # Previously both instructions in `new_circuit` would now be opaque, but # there is now a correct distinction. circuit == new_circuit -
Se ha añadido un atributo
BackendV2.providera las implementaciones de la claseBackendV2clase abstracta. Anteriormente,BackendV2los backends podían inicializarse con un proveedor, pero éste no era accesible a los usuarios. -
Se ha corregido la compatibilidad con la clase
QuantumInstancecuando se ejecuta con unBackendV2backend. Anteriormente, al intentar utilizar unQuantumInstancecon unBackendV2habría dado lugar a un error. -
Se ha corregido un error en
VQEpor el que los parámetros del ansatz seguían estando explícitamente ordenados ASCII por su nombre si se redimensionaba el ansatz. Esto provocaba un desajuste en el orden de los valores optimizados en el atributooptimal_pointdel objeto resultante.En particular, este error se producía si el usuario no establecía ningún ansatz y el VQE elegía un valor por defecto con 11 o más parámetros libres.
-
Detenido el analizador sintáctico en
QuantumCircuit.from_qasm_str()yfrom_qasm_file()de aceptar programas OpenQASM que se identificaban como de una versión del lenguaje distinta de 2.0. Este analizador sintáctico es sólo para OpenQASM 2.0; el soporte para circuitos importados de OpenQASM 3.0 se añadirá en una próxima versión. -
Corregida la serialización QPY de
QuantumCircuitque contenían instrucciones de flujo de control. Anteriormente, si se intentaba serializar un circuito que conteníaIfElseOp,WhileLoopOpoForLoopOpla serialización fallaba. Corregido #7583. -
Corregida la serialización QPY de
QuantumCircuitque contiene subconjuntos de bits de unQuantumRegisteroClassicalRegister. Anteriormente, si se intentaba serializar un circuito como este, se trataba incorrectamente a estos bits como independientesQubitoClbitsin tener un registro establecido. Por ejemplo, si intentas serializar un circuito como:import io from qiskit import QuantumCircuit, QuantumRegister from qiskit.circuit.qpy_serialization import load, dump qr = QuantumRegister(2) qc = QuantumCircuit([qr[0]]) qc.x(0) with open('file.qpy', 'wb') as fd: dump(qc, fd)cuando se cargue ese circuito ahora los registros se rellenarán correctamente por completo aunque el circuito sólo contenga un subconjunto de los bits del registro.
-
QFTahora avisará si se instantiza o construye con parámetros que le hagan perder precisión, en lugar de lanzar un mensajeOverflowError. Esto puede ocurrir si el número de qubits es muy grande (algo más de 1000) sin que el grado de aproximación sea igualmente grande. El circuito se construirá ahora con éxito, pero algunos ángulos podrían ser indistinguibles de cero, debido a las limitaciones de los números de coma flotante de doble precisión.
Aer 0.10.3
Preludio
Qiskit Aer 0.10.3 es principalmente una versión de corrección de errores, la fijación de varios errores que se han descubierto desde la versión 0.10.2. Sin embargo, esta versión también introduce soporte para funcionar con Python 3.10 incluyendo ruedas binarias precompiladas en las principales plataformas. Esta versión también incluye ruedas binarias precompiladas para arm64 en macOS.
Nuevas funciones
-
Se ha añadido soporte para la ejecución con Python 3.10. Esto incluye la publicación de binarios precompilados en PyPI para Python 3.10 en las plataformas compatibles.
-
Se ha añadido compatibilidad con los sistemas M1 macOS. Los binarios precompilados para las versiones compatibles de Python >= 3.8 en arm64 macOS se publicarán ahora en PyPI para ésta y futuras versiones.
Notas de actualización
- Qiskit Aer ya no es totalmente compatible con plataformas de 32 bits en Python >= 3.10. Se trata de Linux i686 y Windows de 32 bits. Estas plataformas con Python 3.10 están ahora en el nivel 3 en lugar de en el nivel 2 (según los niveles definidos en: https://qiskit.org/documentation/getting_started.html #platform-support) Esto se debe a que las dependencias Numpy y Scipy han abandonado el soporte para ellas. Qiskit seguirá publicando binarios precompilados para estas plataformas, pero no podemos probar los paquetes antes de publicarlos, y necesitarás un compilador C/C++ para que
pippueda construir sus dependencias desde el código fuente. Si utiliza una de estas plataformas, le recomendamos que utilice Python 3.7, 3.8, o 3.9.
Corrección de errores
-
Se ha corregido un error en
RelaxationNoisePasspor el que se asumía que la duración de las instrucciones estaba siempre en unidades de tiempo dt, independientemente de la unidad real de la isntrucción. Ahora la conversión de unidades se gestiona correctamente para todas las unidades de duración de instrucción.Véase el nº 1453 para más detalles.
-
Corrige un problema con
LocalNoisePasspara las funciones de ruido que devuelven unQuantumCircuitpara el ruido op. Estos se añadieron al DAG como una instrucción de circuito opaca que debe ser desenrollada para ser simulada. Esta corrección los compone de forma que las instrucciones de circuito se añaden al nuevo DAG y pueden simularse sin desenrollado adicional si el simulador admite todas las instrucciones de circuito.Véase el nº 1447 para más detalles.
-
Las transpilaciones multihilo para generar puertas diagonales funcionarán ahora correctamente si el número de puertas de un circuito supera
fusion_parallelization_threshold. Anteriormente, diferentes subprocesos fusionaban ocasionalmente el mismo elemento en varios bloques, lo que provocaba resultados incorrectos. -
Corrige un error con el truncamiento de circuitos en Qobjs parametrizados. Anteriormente, los parámetros de QObj parametrizados podían resolverse erróneamente si se truncaban los qubits no utilizados de sus circuitos, ya que los índices de los parámetros no se actualizaban después de eliminar las instrucciones de los qubits no medidos.
Véase el nº 1427 para más detalles.
Ignis 0.7.0
No cambia
IBM Proveedor Q 0.18.3
No cambia
0.34.1
Terra 0.19.1
No cambia
Aer 0.10.2
Corrección de errores
-
Corregida la simulación de bucles
foren la que el parámetro de bucle no se utilizaba en el cuerpo del bucle. Por ejemplo, antes este código fallaba, pero ahora tendrá éxito:import qiskit from qiskit.providers.aer import AerSimulator qc = qiskit.QuantumCircuit(2) with qc.for_loop(range(4)) as i: qc.h(0) qc.cx(0, 1) AerSimulator(method="statevector").run(qc) -
Corrige un error en
QuantumError.to_dict()donde las instrucciones de circuito N-qubit donde la instrucción ensamblada siempre se aplicaba a los qubits[0, ..., N-1]en lugar de a los qubits de la instrucción. Este fallo también afectaba a los modelos de ruido del dispositivo y del falso backend.Para más detalles, véase el número 1415.
Ignis 0.7.0
No cambia
IBM Proveedor Q 0.18.3
No cambia
0.34.0
Qiskit 0.34.0 incluye una versión puntual de Qiskit Aer: la versión 0.10.1, que corrige las regresiones de rendimiento de la versión 0.10.0 descubiertas inmediatamente después de su lanzamiento. Consulte a continuación las notas de la versión de Qiskit Aer 0.10.0 y 0.10.1.
Terra 0.19.1
No cambia
Aer 0.10.1
Preludio
El parche Qiskit Aer 0.10.1 corrige las regresiones de rendimiento introducidas en Qiskit Aer 0.10.0.
Corrección de errores
- Corrección de la regresión de rendimiento en simulaciones de ruido debida al gran aumento de la sobrecarga de serialización para cargar modelos de ruido de Python a C++ resultante de llamadas de multiprocesamiento anidadas no intencionadas a Python. Para más detalles, véase el número 1407.
Aer 0.10.0
Preludio
La versión Qiskit Aer 0.10 incluye varias mejoras de rendimiento y de los modelos de ruido. Algunos puntos destacados son:
- Rendimiento mejorado para simulaciones paralelas en GPU y HPC
- Soporte para la simulación de circuitos que contengan instrucciones de flujo de control QASM 3.0
- Soporte para ruido de relajación en circuitos programados en modelos de ruido de fondo
- Soporte de pases de transpilador creados por el usuario para definir errores de puerta y modelos de ruido personalizados, e insertarlos en circuitos.
Nuevas funciones
-
Se ha añadido compatibilidad con las instrucciones de flujo de control QASM 3.0 introducidas en Qiskit-Terra 0.19.0. Las instrucciones admitidas son
ForLoopOp,WhileLoopOp,ContinueLoopOp,BreakLoopOp,IfElseOp. -
Se ha añadido una optimización de simulación por lotes para simulaciones GPU. Esta función opcional utilizará la memoria disponible en 1 o más GPUs para ejecutar múltiples disparos de simulación en paralelo y mejorar considerablemente el rendimiento en simulaciones multidisparo con modelos de ruido y/o mediciones intermedias.
Esta opción está activada por defecto cuando se utiliza
device="GPU"y una simulaciónmethodde"statevector"o"density_matrix"con elAerSimulator. Puede desactivarse configurandobatched_shots_gpu=Falseen las opciones del simulador.Esta optimización es más beneficiosa para números de qubits pequeños o medianos en los que hay suficiente memoria en la GPU para ejecutar varias simulaciones en paralelo. El número máximo de qubits de circuito activos para activar esta optimización puede configurarse mediante la opción del simulador
batch_shots_gpu_max_qubits. El valor por defecto de esta opción es 16. -
Añadida la nueva opción
max_shot_sizea un ejecutor personalizado para ejecutar varias tomas de un circuito ruidoso en paralelo.Por ejemplo, configurando
max_shot_sizecon un ejecutor personalizado:backend = AerSimulator( max_shot_size=1, max_job_size=1, executor=custom_executor) job = backend.run(circuits)dividirá las tomas de un circuito ruidoso en varios circuitos. Una vez finalizada la ejecución de todos los disparos individuales, los resultados del trabajo se combinan automáticamente en un único objeto
Resultque devuelvejob.result(). -
Añadida la opción del simulador
mps_swap_directionque permite al usuario determinar la dirección de los intercambios internos, cuando se insertan para una puerta de 2 qubits. Los valores posibles son"mps_swap_right"y"mps_swap_left". La dirección de los intercambios puede afectar al rendimiento, dependiendo del circuito. -
Implementación de una nueva optimización del muestreo de mediciones para el método de simulación
"matrix_product_state"delAerSimulator. Actualmente, este algoritmo sólo se utiliza cuando se miden todos los qubits y cuando la opción del simuladormps_sample_measure_algorithmsimulator está configurada en"mps_probabilities". -
Mejora del rendimiento de la instrucción de medida para el método de simulación
"matrix_product_state"delAerSimulator. -
Añadida una instrucción
SaveCliffordpara guardar el estado del método de simulación del estabilizador como unCliffordobjeto.Tenga en cuenta que esta instrucción es esencialmente equivalente a la instrucción
SaveStabilizer, sin embargo esa instrucción devolverá el estado guardado como unStabilizerStateen lugar de un objetoCliffordobjeto. -
Añadidos dos pases del transpilador para insertar errores cuánticos dependientes de instrucciones en los circuitos:
qiskit.providers.aer.noise.LocalNoisePassqiskit.providers.aer.noise.RelaxationNoisePass
El paso
LocalNoisePassse puede utilizar para implementar modelos de ruido parametrizados personalizados mediante la definición de una función generadora de ruido de la formadef fn( inst: Instruction, qubits: Optional[List[int]] = None, ) -> InstructionLikeque devuelve una instrucción de ruido (por ejemplo,
QuantumErroru otra instrucción) que puede depender de cualquier propiedad o parámetro de los argumentos de instrucción y qubit.Esta función puede aplicarse a todas las instrucciones de un circuito o a un subconjunto específico (consulte la documentación de
LocalNoisePasspara obtener más detalles)El
RelaxationNoisePasses un caso especial delLocalNoisePassque utiliza una función de ruido predefinida que devuelve un producto tensorial dethermal_relaxation_error()en cada qubit de una instrucción, dependiente de la duración de la instrucción y de los parámetros de constante de tiempo de relajación suministrados del pase. -
El modelo básico de ruido de dispositivo implementado por
NoiseModel.from_backend()yAerSimulator.from_backend()se ha mejorado para permitir añadir errores de relajación dependientes de la duración en puertas de retardo de circuitos utilizando elRelaxationNoisePass.Para habilitar este ruido al ejecutar simulaciones ruidosas, primero debes programar tu circuito para insertar instrucciones de retardo programado de la siguiente manera:
backend = AerSimulator.from_backend(ibmq_backend) scheduled_circuit = qiskit.transpile( circuit, backend=backend, scheduling_method='asap') result = backend.run(scheduled_circuit).result()Si el circuito se transpila sin ser programado (y además no contiene instrucciones de retardo) la simulación ruidosa no incluirá el efecto de los errores de relajación de retardo. En este caso, la simulación será equivalente a la simulación anterior de qiskit-aer 0.9, en la que el ruido de relajación sólo se añade a las instrucciones de compuerta en función de su duración, obtenida a partir de las propiedades del backend.
-
El constructor de
QuantumErroracepta ahora varios tipos nuevos de entrada como argumento denoise_ops, por ejemplo:import numpy as np from qiskit import QuantumCircuit from qiskit.circuit.library import IGate, XGate, Reset from qiskit.quantum_info import Kraus from qiskit.providers.aer.noise import QuantumError # Quantum channels kraus = Kraus([ np.array([[1, 0], [0, np.sqrt(1 - 0.9)]], dtype=complex), np.array([[0, 0], [0, np.sqrt(0.9)]], dtype=complex) ]) print(QuantumError(kraus)) # Construction from a QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) error = QuantumError(qc) # Construction from a tuple of (Instruction, List[int]), where the list of # integers represents the qubits. error = QuantumError((Reset(), [0])) # Construction from an iterable of objects in the same form as above, but # where each also has an associated probability. error = QuantumError([ ((IGate(), [0]), 0.9), ((XGate(), [0]), 0.1), ]) # A short-hand for the iterable form above, where the qubits are implicit, # and each instruction is over all qubits. error = QuantumError([(IGate(), 0.9), (XGate(), 0.1)])Tenga en cuenta que el formato de entrada original basado en JSON está obsoleto.
-
Se ha añadido una función de utilidad
qiskit.providers.aer.utils.transform_noise_model()para construir un modelo de ruido aplicando una función suministrada a todos losQuantumErrors del modelo de ruido. -
Se han añadido dos funciones de utilidad
qiskit.providers.aer.utils.transpile_quantum_error()yqiskit.providers.aer.utils.transpile_noise_model()para transpilar los circuitos contenidos enQuantumError, y todos los errores de unNoiseModel. -
Se ha añadido la posibilidad de añadir objetos
QuantumErrordirectamente a un archivoQuantumCircuitsin convertir a una instrucciónKrausinstrucción.Los circuitos que contienen errores cuánticos pueden ejecutarse ahora en los simuladores
AerSimulatoryQasmSimulatorcomo alternativa a, o además de, la construcción de unNoiseModelpara definir instrucciones de circuitos ruidosos.Ejemplo:
from qiskit import QuantumCircuit from qiskit.providers.aer import AerSimulator from qiskit.providers.aer.noise import pauli_error error_h = pauli_error([('I', 0.95), ('X', 0.05)]) error_cx = pauli_error([('II', 0.9), ('XX', 0.1)]) qc = QuantumCircuit(3) qc.h(0) qc.append(error_h, [0]) qc.cx(0, 1) qc.append(error_cx, [0, 1]) qc.cx(0, 2) qc.append(error_cx, [0, 2]) qc.measure_all() backend = AerSimulator(method='stabilizer') result = backend.run(qc).result() result.get_counts(0)Los circuitos que contienen errores cuánticos también pueden evaluarse utilizando el
quantum_infocanal cuántico yDensityMatrixclases.
Notas de actualización
-
Se ha cambiado el tipo de retorno de varias instrucciones de guardado para que sean las clases Terra de Qiskit correspondientes en lugar de matrices o diccionarios NumPy sin procesar. Los tipos que han cambiado son
save_statevector()ahora se devuelve comoStatevectorsave_density_matrix()ahora se devuelve comoDensityMatrixsave_stabilizer()ahora se devuelve comoStabilizerStatesave_unitary()ahora se devuelve comoOperatorsave_superop()ahora se devuelve comoSuperOpsave_probabilities_dict()ahora se devuelve comoProbDistribution
-
Se ha cambiado el valor por defecto de
standard_gatesaNonepara todas las funciones deqiskit.providers.aer.noise.errors.standard_errors, ya que dichas funciones se han actualizado para que utilicen puertas estándar por defecto. -
Cuando se proporciona un argumento no admitido a
approximate_quantum_error(), ahora generará unNoiseErroren lugar de unRuntimeError.
Notas sobre características en desuso
-
El uso de los métodos y atributos NumPy
ndarrayen el tipo de retorno desave_statevector(),save_density_matrix(),save_unitary(), ysave_superop()ha quedado obsoleto, y dejará de funcionar en una futura versión. Estas instrucciones ahora devuelvenqiskit.quantum_infopara sus tipos de retorno. La compatibilidad parcial hacia atrás con el tratamiento de estos objetos como matrices NumPy se implementa mediante el reenvío de métodos a la matriz interna durante el período de desaprobación. -
Pasar un objeto
BackendPropertiespara el argumentobackenddeNoiseModel.from_backend()ha quedado obsoleto, ya que es incompatible con los ruidos de retardo dependientes de la duración, y se eliminará en una futura versión. Introduce un objeto Qiskit TerraBackendV1en su lugar. -
Se ha obsoleto la opción
number_of_qubitsdel constructorQuantumErroren favor de la determinación automática de la dimensión. -
Se ha dejado obsoleta la opción
standard_gatesdel constructorQuantumErroren favor de la externalización de dicha funcionalidad de cambio de base. En muchos casos, puede transformar cualquier error en un error definido sólo con puertas específicas utilizandoapproximate_quantum_error(). -
Deprecated la opción
standard_gatesde todas las funciones enqiskit.providers.aer.noise.errors.standard_errorsen favor de devolver errores en forma de una mezcla de puertas estándar tanto como sea posible por defecto. -
Desaprobadas todas las funciones en
errorutilsporque son funciones de ayuda destinadas a ser utilizadas sólo para implementar funciones enqiskit.providers.aer.noise.errors.standard_errorsy deberían haber sido proporcionadas como funciones privadas. -
Se ha suprimido la opción
standard_gatesdeNoiseModel.from_backend()en favor de la externalización de dicha funcionalidad de cambio de base. -
Obsoleto
NoiseModel.from_dict()para que el modelo de ruido sea independiente del formato Qobj (JSON). -
Se han eliminado todas las variables, funciones y clases públicas de
qiskit.providers.aer.noise.utils.noise_transformationexceptoapproximate_quantum_error()yapproximate_noise_model(), ya que son funciones de ayuda destinadas a ser utilizadas únicamente para implementar las funciones deapproximate_*y deberían haberse proporcionado como funciones privadas. -
Obsoleto
remap_noise_model()ya que el código C++ ahora trunca y remapea automáticamente los modelos de ruido si trunca los circuitos.
Otras notas
- Los cambios en la implementación de la función
approximate_quantum_error()pueden modificar el error aproximado resultante en comparación con Qiskit Aer 0.9.
Ignis 0.7.0
No cambia
IBM Proveedor Q 0.18.3
Corrección de errores
- Corrección entregada en #1100 para un problema con la codificación y decodificación JSON cuando se utiliza
ParameterExpressions en conjunto con Qiskit Terra 0.19.1 y superiores. Antes, las instancias deParameterreconstruidas a partir de la salida JSON tenían identificadores únicos diferentes, lo que hacía que parecieran desiguales a las de entrada. Ahora tendrán las identidades de respaldo correctas.