Notas de la versión de Qiskit 0.42
0.42.1
Terra 0.23.3
Preludio
Qiskit Terra 0.23.3 es una versión de corrección de errores menores.
Corrección de errores
-
Se corrige un error en el paso de transformación
Optimize1qGatesDecompositionpor el que la puntuación de las sustituciones se calculaba erróneamente cuando los errores de puerta eran cero. -
El método
ECRGate.inverse()devuelve ahora otra instanciaECRGateen lugar de una puerta personalizada, ya que es autoinverso. -
Recorte de probabilidades en los métodos
QuantumState.probabilities()yQuantumState.probabilities_dict()al intervalo[0, 1]. Esto corrige errores de redondeo en los que las probabilidades podían ser, por ejemplo, mayores que 1, lo que provocaba errores en la emulación de disparo del muestreador. Corregido #9761. -
Se ha corregido un error en el
BackendSamplerpor el que las cadenas de bits de probabilidad binaria se truncaban hasta el número mínimo de bits necesario para representar el resultado mayor como entero. Esto significa que si, por ejemplo{"0001": 1.0}se midió, el resultado se truncó en{"1": 1.0}. -
Se ha corregido un problema con el método
PassManagerConfig.from_backend()cuando se utilizaba con un backend de simulador basado enBackendV1basado en un simulador. En algunos simuladores que no rellenaban algunos campos opcionales, el constructor daba error. Corregido #9265 y #8546 -
Fijo el
BackendSampleryBackendEstimatorpara que se ejecuten correctamente con unbound_pass_managerpersonalizado. Anteriormente, la ejecución para circuitos simples con unbound_pass_managerlevantaba unValueErrorporque no se devolvía una lista en uno de los pasos. -
El transpilador
GateDirectionya no rechazará las compuertas a las que se haya asignado una calibración explícita, pero que no existan en el mapa de acoplamiento genérico o en el objetivo. -
Se ha solucionado un problema con la clase
CommutationCheckerque intentaba asignar internamente una matriz para qubits cuando sólo necesitaba una matriz para representar qubits. Por ejemplo, una puerta de 4 qubits necesitaría 32 gigabytes en lugar de 2 kilobytes. Corregido #9197 -
La obtención de una calibración vacía de
InstructionPropertiesplantea AttributeError se ha solucionado. Ahora devuelveNone. -
Corregido
qasm()para que añada;después de la instrucciónreset. -
Los nombres de registro y de parámetro se escaparán ahora durante la exportación de OpenQASM 3 (
qasm3.dumps()) si no son ya identificadores válidos. Corregido #9658. -
QPY (usando
qpy.load()) ahora deserializará correctamente las instruccionesStatePreparationlas instrucciones. Anteriormente, QPY daba error al intentar cargar un archivo que lo contenía. Corregido #8297. -
Se ha corregido un error en
random_circuit()con 64 o más qubits yconditional=True, donde el circuito resultante podía tener un valor escrito incorrectamente en su condición, causando una variedad de fallos durante la transpilación u otras operaciones del circuito. Corregido #9649. -
Se ha corregido un problema con los métodos de la clase
OneQubitEulerDecomposermétodos de la claseangles()yangles_and_phase()daba error si la matriz de entrada era de un dtype distinto decomplex/np.cdouble. En versiones anteriores esto funcionaba bien, pero dejó de funcionar en Qiskit Terra 0.23.0 cuando las partes internas deOneQubitEulerDecomposerse reescribieron en Rust. Corregido #9827 -
Las puertas Qiskit
CCZGate,CSGate,CSdgGateno están definidas enqelib1.incy, por lo tanto, cuando se vuelcan como OpenQASM 2.0, su definición debe insertarse en el archivo. Correcciones #9559, #9721 y #9722.
Aer 0.12.0
No cambia
IBM Proveedor Q 0.20.2
No cambia
0.42.0
Terra 0.23.2
No cambia
Aer 0.12.0
Preludio
Los aspectos más destacados del lanzamiento de Qiskit Aer 0.12.0 son:
- Añadido un nuevo simulador de redes tensoriales para GPU basado en cuTensorNet
- Se ha añadido una nueva clase
AerDensityMatrixalqiskit_aer.quantum_infomódulo- Mejora notablemente el rendimiento en tiempo de ejecución de las clases
AerSimulatory las clases heredadasQasmSimulator,StatevectorSimulator, yUnitarySimulatoral convertir directamente los objetos de entrada a una representación interna de C++ en lugar de serializar primero el circuito a una representación interna de C++QuantumCircuita una representación interna de C++ en lugar de serializar primero el circuito a una representaciónQasmQobj. Esta mejora será más notable en circuitos con un número reducido de qubits o en circuitos parametrizados utilizando el argumento de la palabra claveparameter_binds.
Nuevas funciones
-
Se ha añadido un nuevo método de clase
from_backend_properties()a la páginaNoiseModel. Esto permite construir un nuevoNoiseModela partir de un objetoBackendProperties. Una funcionalidad similar solía estar presente en el constructorNoiseModel.from_backend(), sin embargo se eliminó ya que un objetoBackendPropertiespor sí solo no contiene suficiente información para crear un objetoNoiseModel. -
Añadida una nueva clase,
AerDensityMatrix, al móduloqiskit_aer.quantum_infomódulo. Esta clase se utiliza para proporcionar la misma interfaz que la clase upstreamDensityMatrixde Qiskit pero respaldada por la simulación de Qiskit Aer. -
Se ha añadido un nuevo argumento de palabra clave,
abelian_grouping, al métodoEstimator. Este argumento se utiliza para controlar si elEstimatoragrupará los observables de entrada en observables conmutables entre qubits, lo que reduce el número de ejecuciones del circuito necesarias para calcular el valor de la expectativa y mejora el rendimiento en tiempo de ejecución del métodoEstimator. Por defecto está configurado enTrue. -
AerStatetiene un nuevo métodoinitialize_density_matrix()que establece una matriz de densidad enAER::QV::DensityMatrix. Este método será llamado enq.i.states.DensityMatrixpara inicializar sus datos conndarray.initialize_density_matrix()tiene un argumento booleano que especifica la copia o compartición de los datos dendarray. Si los datos se comparten con C++ y python, los datos no deben recogerse en python mientras C++ accede a ellos. -
La sobrecarga para ejecutar simulaciones con
run()(para todas las clases de backend del simulador) se ha reducido considerablemente. Esto se consiguió dejando de serializar internamente los objetosQuantumCircuiten objetosQasmQobjy en su lugar el objetoQuantumCircuitobjeto directamente a una estructura de circuito interna de C++ utilizada para la simulación. Esta mejora es más notable en simulaciones de circuitos con un pequeño número de qubits o circuitos parametrizados utilizando el argumentoparameter_bindsderun(). Tenga en cuenta que la simulación por pulsos (a través de la ya obsoletaPulseSimulator) y la simulación basada en DASK siguen utilizando la serialización interna y no verán esta mejora de rendimiento. -
Añadido un nuevo método a la
AerJob,circuits(), que devuelve una lista deQuantumCircuitobjetos. Este método devuelveNonesi se utiliza Qobj para la simulación. -
AerStateyAerStatevectoradmiten ahora la aplicación deKrausoperadores. EnAerStatevector, uno de los operadores de Kraus se aplica aleatoriamente al estado cuántico en función de las probabilidades de error. -
Añadido un nuevo método de simulación basado en NVIDIA 's cuTensorNet De cuQuantum SDK. Esto proporciona un simulador general de redes tensoriales acelerado en la GPU que puede simular cualquier circuito cuántico, traduciendo internamente el circuito a una red tensorial para realizar la simulación. Para utilizar este método de simulación, establezca
method="tensor_network"ydevice="GPU"al inicializar un objetoAerSimulator. Por ejemplo:from qiskit_aer import AerSimulator tensor_net_sim = AerSimulator(method="tensor_network", device="GPU")Este método admite simulaciones tanto de vectores de estado como de matrices de densidad. La simulación del ruido también puede realizarse con una simulación de disparo único de matriz de densidad si no hay operaciones
SaveStatevectoren el circuito.Este nuevo método de simulación también admite la paralelización con múltiples GPU y procesos MPI mediante la técnica de troceado de redes tensoriales. Sin embargo, es probable que este tipo de simulación lleve mucho tiempo si los circuitos de entrada son complicados.
-
La variable de entorno
BLA_VENDORahora se puede especificar para utilizar una biblioteca BLAS diferente al construir Qiskit Aer desde el código fuente. Por defecto, si no se especifica OpenBLAS se utilizará por defecto. Si la librería BLAS especificada en BLA_VENDOR` no puede ser encontrada entonces el proceso de construcción de Cmake se detendrá.
Problemas conocidos
- Esta versión de Qiskit Aer no es compatible con la serie de versiones de Conan 2.X. Si estás construyendo Qiskit Aer desde el código fuente manualmente, asegúrate de que estás utilizando una versión de Conan 1.x. La compatibilidad con versiones más recientes de Conan se corregirá en una próxima versión. Puede consultar el número 1730 para obtener más información.
Notas de actualización
-
El comportamiento por defecto de la primitiva
Estimatoragrupará el observable de entrada en observables conmutables qubit-wise. La agrupación reduce el número de circuitos que hay que ejecutar y mejora el rendimiento. Si desea el comportamiento anterior puede inicializar suEstimatorcon la palabra claveabelian_grouping=False. -
Eliminado el uso de primitivas con el gestor de contexto y la inicialización con circuitos, (observables sólo para Estimator), y parámetros que ha sido obsoleto en la versión de Qiskit Terra 0.22.0 en octubre de 2022.
-
El comportamiento del método
run()ha cambiado cuando se pasan objetos inválidos oQuantumCircuitcomo entrada. Anteriormente, en estos casos el métodorun()devolvía unAerJobcuyo métodoresult()devolvía unResultcon elERRORoPARTIAL COMPLETED(dependiendo de si todas las entradas del circuito o sólo algunas eran inválidas o no). A partir de esta versión, en lugar de devolver un objeto de resultado con estos estados, se lanzará una excepción. Este cambio era necesario debido a las mejoras de rendimiento al dejar de serializar internamente los objetosQuantumCircuitobjetos a un Qobj antes de pasarlo a C++, en su lugar la conversión directa deQuantumCircuitahora falla directamente al intentar simular un circuito Qiskit Aer es incapaz de ejecutar. Si desea que el comportamiento anterior se puede construir Qiskit Aer en modo autónomo y manualmente serializar suQuantumCircuita una representación JSON del objetoQasmQobjque luego pasarás al binario autónomo de Aer que mantendrá el comportamiento anterior. -
Se ha eliminado un método obsoleto
add_nonlocal_quantum_error()enNoiseModel. No existe ningún método alternativo. Si quieres añadir errores cuánticos no locales, debes escribir un pase de transpilador que inserte tu propio error cuántico en un circuito, y ejecutar el pase justo antes de ejecutar el circuito en el simulador Aer. -
El
NoiseModel.from_backend()ahora ha cambiado para no aceptarBackendPropertiesobjeto como unbackendargumento. Utilice en su lugar el nuevo métodoNoiseModel.from_backend_properties(). -
Se ha eliminado un argumento obsoleto de
standard_gatesque se utilizaba ampliamente en varios métodos y funciones (enumerados a continuación) en todo el módulonoise.NoiseModel.from_backend()ynoise.device.basic_device_gate_errors()kraus_error(),mixed_unitary_error(),pauli_error()ydepolarizing_error()ennoise.errors.standard_errorsQuantumError.__init__()
No se dispone de medios alternativos porque el usuario debe ser agnóstico sobre cómo el simulador representa internamente los ruidos (errores cuánticos).
-
El constructor de
QuantumErrorya no admite la entrada de tipo json obsoleta para el argumentonoise_ops. Utilice en su lugar la nueva entrada styple para el argumentonoise_ops, por ejemplo,from qiskit.circuit.library import IGate, XGate from qiskit_aer.noise import QuantumError error = QuantumError([ ((IGate(), [1]), 0.9), ((XGate(), [1]), 0.1), ]) # json-like input is no longer accepted (the following code fails) # error = QuantumError([ # ([{"name": "I", "qubits": [1]}], 0.9), # ([{"name": "X", "qubits": [1]}], 0.1), # ])También se han eliminado los argumentos obsoletos:
number_of_qubits: UtiliceQuantumCircuitpara definirnoise_opsen su lugar.atol: Utilice el atributoQuantumError.atolen su lugar.standard_gates: No hay alternativa disponible (los usuarios no deberían preocuparse demasiado por la representación interna de los errores cuánticos).
-
El módulo obsoleto
noise.errors.errorutilsse ha eliminado por completo y no hay alternativas disponibles. Todas las funciones del módulo eran funciones de ayuda destinadas a ser utilizadas únicamente para implementar funciones enstandard_errors(es decir, deberían haberse proporcionado como funciones privadas) y ya no se utilizan en él. -
Se han eliminado por completo las
utils.noise_remapperobsoletas y no hay alternativas disponibles, ya que ahora el código C++ trunca y reasigna automáticamente los modelos de ruido si trunca los circuitos. -
Se han eliminado todas las funciones obsoletas (
pauli_operators()yreset_operators()) y la clase (NoiseTransformer) del móduloutils.noise_transformation, y no hay alternativas disponibles. De hecho, eran funciones/clase privadas utilizadas únicamente para implementarapproximate_quantum_error()y no deberían haber sido públicas. -
Se ha eliminado el nombre del argumento
qobj, anteriormente obsoleto, del métodorun()de las clasesAerSimulatoryPulseSimulator. Este nombre de argumento fue obsoleto como parte de la versión de Qiskit Aer 0.8.0 y ha sido sustituido por los nombres de argumentocircuitsyschedulesrespectivamente. -
Se ha actualizado
setup.pyde Aer para que ya no intente realizar llamadas apippara instalar requisitos de compilación, tanto manualmente como a través de la opciónsetup_requiresensetuptools.setup. La forma preferida de construir Aer es utilizar un constructor compatible con PEP 517 como:pip install .Este cambio significa que una llamada directa a
setup.pyya no funcionará si los requisitos de compilación no están instalados. Esto se ajusta a las modernas directrices de envasado de Python.
Notas sobre características en desuso
-
El soporte para ejecutar Qiskit Aer con Python 3.7 ha sido obsoleto y será eliminado en una futura versión. Esto significa que a partir de una futura versión tendrá que actualizar la versión Python que esté utilizando a Python 3.8 o superior.
-
El backend
PulseSimulatorha quedado obsoleto y se eliminará en una futura versión. Si estás utilizando el backendPulseSimulatorpara realizar la simulación a nivel de pulso, en su lugar debes utilizar la librería Qiskit Dynamics para realizar la simulación. Qiskit Dynamics proporciona un marco de simulación a nivel de impulsos más flexible y robusto que el backendPulseSimulator. -
El método
qobj()de la claseAerJobestá obsoleto y se eliminará en una futura versión. El uso del formato qobj como entrada arun()ha quedado obsoleto desde qiskit-aer 0.9.0 y en la mayoría de los casos este método devolvería ahoraNonede todos modos. Si desea obtener la entrada al métodorun()ahora puede utilizar el métodocircuits()en su lugar, que devolverá losQuantumCircuitobjetos que fueron simulados en el trabajo. -
Un argumento
warningsampliamente utilizado en varios métodos y funciones a través del módulonoiseha sido obsoleto en favor del uso de funciones de filtrado en Python 's standardwarningslibrary.
Corrección de errores
-
Se ha corregido un problema al crear una nueva instancia de
AerStatevectora partir de unnumpy.ndarrayque tenía memoria no contigua. Anteriormente, esto provocaba un comportamiento inesperado (y un posible error), ya queAerStatevectorasumía que la matriz de entrada era contigua. Esto se ha corregido para que se compruebe la disposición de la memoria y lanumpy.ndarrayse copie internamente como una matriz contigua antes de utilizarla. -
Se ha solucionado un problema con la clase
Samplerque fallaba si la entradaQuantumCircuitcontenía múltiples registros clásicos múltiples. Corregido #1679 -
El recuento de bits del registro clásico utilizado en la GPU no se establecía antes de calcular la memoria libre disponible para los trozos, lo que provocaba un bucle infinito. Así que esta corrección establece el recuento de bits antes de asignar chunks si la ejecución de disparos por lotes está activada.
-
Corrección de errores de compilación y de prueba al activar la GPU pero desactivar cuQuantum.
-
Se ha solucionado un problema en el método de simulación del estado del producto matricial (es decir, al establecer el argumento de palabra clave
method="matrix_product_state"al inicializar un objetoAerSimulator) por el que el simulador ordenaba incorrectamente los qubits antes de realizar la medición, lo que podía dar lugar a un bucle infinito. Esto se ha corregido para que la medición de los qubits se produzca en el orden de la estructura MPS actual y la clasificación posterior como un paso de post-procesamiento. Esto también mejorará probablemente el rendimiento del método de simulación y permitirá una representación más precisa de los estados enredados. Corregido #1694 -
El backend
AerSimulatorcon métodos:statevectordensity_matrixmatrix_product_statestabilizer
informan ahora de que admiten las instrucciones
break_loopycontinue_loopcuando se utilizan como backends para la función Terratranspile(). Los simuladores ya los admitían, pero no informaban de ello.
IBM Proveedor Q 0.20.2
Esta versión elimina las restricciones de versión excesivamente restrictivas establecidas en los requisitos para el paquete añadido en 0.20.1. En el caso de 0.20.1, la única dependencia que debía tener un tope de versión era el paquete requests-ntlm , ya que su nueva versión era la única dependencia que presentaba actualmente una incompatibilidad con qiskit-ibmq-provider. Los otros topes de versión que se añadieron como parte de 0.20.1 estaban causando problemas de instalación en varios entornos porque hacían que el paquete qiskit-ibmq-provider fuera incompatible con las versiones de dependencia utilizadas en otros paquetes.