Skip to main content
IBM Quantum Platform

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 Optimize1qGatesDecomposition por 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 instancia ECRGate en lugar de una puerta personalizada, ya que es autoinverso.

  • Recorte de probabilidades en los métodos QuantumState.probabilities() y QuantumState.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 BackendSampler por 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 en BackendV1 basado en un simulador. En algunos simuladores que no rellenaban algunos campos opcionales, el constructor daba error. Corregido #9265 y #8546

  • Fijo el BackendSampler y BackendEstimator para que se ejecuten correctamente con un bound_pass_manager personalizado. Anteriormente, la ejecución para circuitos simples con un bound_pass_manager levantaba un ValueError porque no se devolvía una lista en uno de los pasos.

  • El transpilador GateDirection ya 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 CommutationChecker que intentaba asignar internamente una matriz para 2n2^{n} qubits cuando sólo necesitaba una matriz para representar nn 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 InstructionProperties plantea AttributeError se ha solucionado. Ahora devuelve None.

  • Corregido qasm() para que añada ; después de la instrucción reset .

  • 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 instrucciones StatePreparation las 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 y conditional=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 OneQubitEulerDecomposer métodos de la clase angles() y angles_and_phase() daba error si la matriz de entrada era de un dtype distinto de complex/np.cdouble. En versiones anteriores esto funcionaba bien, pero dejó de funcionar en Qiskit Terra 0.23.0 cuando las partes internas de OneQubitEulerDecomposer se reescribieron en Rust. Corregido #9827

  • Las puertas Qiskit CCZGate, CSGate, CSdgGate no están definidas en qelib1.inc y, 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 AerDensityMatrix al qiskit_aer.quantum_info módulo
  • Mejora notablemente el rendimiento en tiempo de ejecución de las clases AerSimulator y las clases heredadas QasmSimulator, StatevectorSimulator, y UnitarySimulator al 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++ QuantumCircuit a una representación interna de C++ en lugar de serializar primero el circuito a una representación QasmQobj. 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 clave parameter_binds .

Nuevas funciones

  • Se ha añadido un nuevo método de clase from_backend_properties() a la página NoiseModel. Esto permite construir un nuevo NoiseModel a partir de un objeto BackendProperties . Una funcionalidad similar solía estar presente en el constructor NoiseModel.from_backend() , sin embargo se eliminó ya que un objeto BackendProperties por sí solo no contiene suficiente información para crear un objeto NoiseModel .

  • Añadida una nueva clase, AerDensityMatrix, al módulo qiskit_aer.quantum_info módulo. Esta clase se utiliza para proporcionar la misma interfaz que la clase upstream DensityMatrix de Qiskit pero respaldada por la simulación de Qiskit Aer.

  • Se ha añadido un nuevo argumento de palabra clave, abelian_grouping, al método Estimator. Este argumento se utiliza para controlar si el Estimator agrupará 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étodo Estimator. Por defecto está configurado en True.

  • AerState tiene un nuevo método initialize_density_matrix() que establece una matriz de densidad en AER::QV::DensityMatrix. Este método será llamado en q.i.states.DensityMatrix para inicializar sus datos con ndarray. initialize_density_matrix() tiene un argumento booleano que especifica la copia o compartición de los datos de ndarray . 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 objetos QuantumCircuit en objetos QasmQobj y en su lugar el objeto QuantumCircuit objeto 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 argumento parameter_binds de run(). Tenga en cuenta que la simulación por pulsos (a través de la ya obsoleta PulseSimulator) 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 de QuantumCircuit objetos. Este método devuelve None si se utiliza Qobj para la simulación.

  • AerState y AerStatevector admiten ahora la aplicación de Kraus operadores. En AerStatevector, 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" y device="GPU" al inicializar un objeto AerSimulator . 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 SaveStatevector en 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_VENDOR ahora 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 Estimator agrupará 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 su Estimator con la palabra clave abelian_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 o QuantumCircuit como entrada. Anteriormente, en estos casos el método run() devolvía un AerJob cuyo método result() devolvía un Result con el ERROR o PARTIAL 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 objetos QuantumCircuit objetos a un Qobj antes de pasarlo a C++, en su lugar la conversión directa de QuantumCircuit ahora 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 su QuantumCircuit a una representación JSON del objeto QasmQobj que 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() en NoiseModel . 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 aceptar BackendProperties objeto como un backend argumento. Utilice en su lugar el nuevo método NoiseModel.from_backend_properties() .

  • Se ha eliminado un argumento obsoleto de standard_gates que se utilizaba ampliamente en varios métodos y funciones (enumerados a continuación) en todo el módulo noise .

    • NoiseModel.from_backend() y noise.device.basic_device_gate_errors()
    • kraus_error(), mixed_unitary_error(), pauli_error() y depolarizing_error() en noise.errors.standard_errors
    • QuantumError.__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 QuantumError ya no admite la entrada de tipo json obsoleta para el argumento noise_ops . Utilice en su lugar la nueva entrada styple para el argumento noise_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: Utilice QuantumCircuit para definir noise_ops en su lugar.
    • atol: Utilice el atributo QuantumError.atol en 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.errorutils se 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 en standard_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_remapper obsoletas 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() y reset_operators()) y la clase (NoiseTransformer) del módulo utils.noise_transformation , y no hay alternativas disponibles. De hecho, eran funciones/clase privadas utilizadas únicamente para implementar approximate_quantum_error() y no deberían haber sido públicas.

  • Se ha eliminado el nombre del argumento qobj , anteriormente obsoleto, del método run() de las clases AerSimulator y PulseSimulator . 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 argumento circuits y schedules respectivamente.

  • Se ha actualizado setup.py de Aer para que ya no intente realizar llamadas a pip para instalar requisitos de compilación, tanto manualmente como a través de la opción setup_requires en setuptools.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.py ya 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 PulseSimulator ha quedado obsoleto y se eliminará en una futura versión. Si estás utilizando el backend PulseSimulator para 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 backend PulseSimulator .

  • El método qobj() de la clase AerJob está obsoleto y se eliminará en una futura versión. El uso del formato qobj como entrada a run() ha quedado obsoleto desde qiskit-aer 0.9.0 y en la mayoría de los casos este método devolvería ahora None de todos modos. Si desea obtener la entrada al método run() ahora puede utilizar el método circuits() en su lugar, que devolverá los QuantumCircuit objetos que fueron simulados en el trabajo.

  • Un argumento warnings ampliamente utilizado en varios métodos y funciones a través del módulo noise ha sido obsoleto en favor del uso de funciones de filtrado en Python 's standard warnings library.

Corrección de errores

  • Se ha corregido un problema al crear una nueva instancia de AerStatevector a partir de un numpy.ndarray que tenía memoria no contigua. Anteriormente, esto provocaba un comportamiento inesperado (y un posible error), ya que AerStatevector asumía que la matriz de entrada era contigua. Esto se ha corregido para que se compruebe la disposición de la memoria y la numpy.ndarray se copie internamente como una matriz contigua antes de utilizarla.

  • Se ha solucionado un problema con la clase Sampler que fallaba si la entrada QuantumCircuit contení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 objeto AerSimulator ) 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 AerSimulator con métodos:

    • statevector
    • density_matrix
    • matrix_product_state
    • stabilizer

    informan ahora de que admiten las instrucciones break_loop y continue_loop cuando se utilizan como backends para la función Terra transpile() . 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.

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