Skip to main content
IBM Quantum Platform

Notas de la versión de Qiskit 0.46


0.46.3

Preludio

Qiskit 0.46.3 es una versión de corrección de errores menores para la serie 0.46. También es el último lanzamiento de la versión menor 0.46, que marca el final de su vida útil.

Corrección de errores

  • Se ha corregido un decorador que faltaba en C3SXGate que hacía que fallara si Gate.to_matrix() era llamado. La matriz de la puerta ahora se devuelve como se esperaba.

  • El atributo QuantumCircuit.parameters estará vacío cuando se utilice QuantumCircuit.copy_empty_like() en un circuito paramétrico. Anteriormente, una caché interna se copiaba sin invalidarse. Corrección #12617.

  • Arreglar el SolovayKitaev al cargar aproximaciones básicas a partir de un archivo existente en .npy . Anteriormente, cargar una aproximación almacenada que permitía reducciones adicionales (por ejemplo, debido a cancelaciones de puertas) podía provocar un fallo en tiempo de ejecución. Además, la diferencia de fase global del producto de compuerta U(2) y la representación SO(3) se perdió durante un procedimiento de guardar-recargar. Arregla Qiskit/qiskit#12576.

  • El constructor GenericBackendV2 permitía crear backends malformados porque aceptaba puertas base que no podían ser asignadas en el tamaño del backend. Es decir, un backend con un solo qubit no debería aceptar una base con puertas de dos qubits.

  • Anteriormente, DAGCircuit.replace_block_with_op() permitía colocar una operación n-qubit en un bloque de m qubits, dejando el DAG en un estado inválido. Este comportamiento se ha corregido y el intento generará un mensaje DAGCircuitError.

Otras notas

  • Esta versión amplía el archivo constraints.txt con una lista completa de los números de versión fijados de las dependencias de Qiskit 0.46.3. Dado que esta versión marca el final de la vida útil de la versión 0.46, se garantiza un entorno de instalación reproducible para el futuro basado en las especificaciones de la versión en constraints.txt.

0.46.2

Preludio

Qiskit 0.46.2 es una versión de corrección de errores menores y backport para la serie 0.46.

Nuevas funciones

  • Esta versión de Qiskit finaliza la compatibilidad con NumPy 2.0. Qiskit seguirá soportando tanto Numpy 1.x como 2.x en el futuro inmediato.

Corrección de errores

  • Se ha solucionado un problema con circuit_drawer() o QuantumCircuit.draw() cuando se utilizaba la opción de salida mpl , por el que el programa se colgaba si el circuito que se dibujaba tenía una operación ControlFlow y la opción fold se establecía en -1 (lo que significa que no hay pliegue). Corregido #12012.

  • La página EvolvedOperatorAnsatz ahora maneja correctamente el caso en que el argumento del operador es una lista vacía. Antes, esto daba lugar a un error.

  • A partir de ahora EvolvedOperatorAnsatz no tendrá ningún qregs cuando thera son cero qubits, en lugar de tener una QuantumRegister instancia con cero qubits. Este comportamiento es más coherente con su superclase QuantumCircuit.

  • El método Instruction.repeat() ahora mueve un conjunto condition al exterior devuelto Instruction y deja incondicionales las puertas interiores de su definición. Anteriormente, el método dejaba ClassicalRegister instancias dentro de la definición interna, lo cual era un estado no válido, y se manifestaba como errores aparentemente no relacionados más tarde, como durante la transpilación o la exportación. Corregido #11935.

  • Se ha corregido una imprecisión en coma flotante al escalar determinadas unidades de pulso entre segundos y nanosegundos. Si el pulso se definía simbólicamente, podía introducirse un error de coma flotante innecesario por el escalado para ciertas construcciones de symengine, lo que podía manifestarse en resultados inesperados una vez que los símbolos estuvieran completamente ligados. Ver #12392.

  • Se ha corregido un error en qiskit.visualization.pulse_v2.interface.draw() que no dibujaba los programas de pulsos cuando se llamaba a la función dibujar con un BackendV2 argumento. Dado que el backend V2 no informa de las frecuencias de los canales hardware, el dibujo generado mostrará 'no freq' debajo de cada etiqueta de canal.

  • El pase VF2Layout pass lanzaría una excepción cuando se le proporcionara una Target sin restricciones de conectividad. Este sería el caso de los objetivos de Aer 0.13. El problema se ha solucionado.

  • El complemento predeterminado init no generaba correctamente un error TranspilerError cuando se invocaba con un nivel de optimización no válido.

  • PassManager.run() ya no perderá tiempo serializándose cuando se le den múltiples entradas si sólo va a trabajar en serie.

  • El analizador OpenQASM 2.0 (qasm2.load() y qasm2.loads()) puede ahora evaluar expresiones puerta-ángulo que incluyan operandos enteros que desbordarían el tamaño entero del sistema. Se evaluarán en un contexto de coma flotante de doble precisión, como siempre se ha hecho con el resto de la expresión. Cuidado: un número entero arbitrariamente grande no será necesariamente representable con exactitud en coma flotante de doble precisión, por lo que existe la posibilidad de que, independientemente de cómo se haya generado el circuito, ya haya perdido toda la precisión numérica módulo 2π2\pi.


0.46.1

Preludio

Qiskit 0.46.1 es una versión de corrección de errores menores para la serie 0.46.

Corrección de errores

  • Se ha corregido un problema con convert_to_target() por el que el conversor ignoraba incorrectamente las instrucciones de flujo de control si se especificaban en el atributo BackendConfiguration.supported_instructions , que es la ubicación típica en la que se especifican las instrucciones de flujo de control en un objeto BackendConfiguration objeto. Corregido #11872.

  • Al llamar a EquivalenceLibrary.set_entry() actualizará correctamente el objeto gráfico interno de la biblioteca. Antes, los metadatos se actualizaban, pero la estructura del grafo permanecía inalterada, lo que significaba que usuarios como BasisTranslator seguirían utilizando las reglas antiguas. Corregido #11958.

  • BasePassManager.run() ya no filtrará el PropertySet en nuevos flujos de trabajo cuando se llama más de una vez. Anteriormente, se utilizaba el mismo PropertySet que antes se utilizaba para inicializar las ejecuciones sucesivas, lo que podía significar que se estaba dando a las tareas información de propiedades no válida. El comportamiento coincide ahora con el de Qiskit 0.44. Corregido #11784.

  • Actualizadas las propiedades y la información de configuración del FakeOpenPulse2Q backend. Se han añadido propiedades de compuerta que faltaban para algunas compuertas definidas en los valores predeterminados de pulso, de modo que las compuertas definidas en las dos ubicaciones sean coherentes.

  • El módulo de herramientas de supervisión qiskit.tools.monitor (incluido en el módulo ya obsoleto qiskit.tools) se ha actualizado para que funcione como se esperaba. La función job_monitor() funciona ahora con Job instancias. Las funciones backend_overview() y backend_monitor() deberían funcionar ahora como se espera.

  • InstructionDurations.from_backend() devuelve ahora una instancia de cualquier subclase de InstructionDurations en lugar de la clase base.


0.46.0

Preludio

La versión 0.46.0 es la última versión menor de la serie 0.x. Esta versión añade principalmente nuevas advertencias de desaprobación para los cambios de la API que se producirán en la futura versión principal 1.0.0. Es totalmente compatible con las versiones de Qiskit 0.45.x. Se recomienda encarecidamente actualizar de 0.45.x a 0.46.0 para poder ver las advertencias sobre las interfaces que cambiarán con Qiskit 1.0.0.

La serie de versiones 0.46.x seguirá recibiendo asistencia y correcciones de errores y de seguridad a través de parches durante los 6 meses posteriores a esta versión. Para más detalles sobre el calendario de versiones y el ciclo de soporte, consulte: start/install#qiskit-versioning que documenta el calendario de versiones con más detalle.

Nota

Si tu proyecto depende de Qiskit, es posible que dependa de una funcionalidad que ya no será compatible con Qiskit 1.0.0. Por este motivo, le recomendamos que, de forma proactiva, limite su versión compatible a <1.0. El lanzamiento de Qiskit 1.0.0 está previsto aproximadamente dos semanas después de Qiskit 0.46.0, el 2024-02-15, y puede que aún no esté disponible cuando leas este mensaje.

La estructura de empaquetado de Qiskit está cambiando en Qiskit 1.0, y desafortunadamente los requisitos cambiados no se pueden comunicar completamente a pip, especialmente si los comandos pip install --upgrade se ejecutan después de que el entorno se haya configurado inicialmente. Todas las versiones de Qiskit anteriores a 1.0 (incluida ésta) tienen un conflicto de instalación con Qiskit 1.0 que pip no resolverá.

Si import qiskit te lanza un ImportError para ti, tu entorno está en un estado inválido, y las versiones de Qiskit 0.45/0.46 y 1.0 son accesibles, lo que resultará en un código sutilmente roto. Deberá crear un nuevo entorno virtual y asegurarse de que sólo está instalada una de las dos versiones. En particular, si pretende instalar Qiskit 1.0, no debe tener instalados paquetes que dependan de qiskit-terra ; estos paquetes son incompatibles con Qiskit 1.0 y deben actualizarse. Si pretende instalar Qiskit 0.45 o 0.46, debe asegurarse de que no tiene nada que intentar instalar qiskit>=1.0.

Si desarrollas una librería basada en Qiskit y todavía dependes de qiskit-terra, debes liberar urgentemente un nuevo paquete que dependa únicamente de qiskit. Desde la versión 0.44, el paquete qiskit sólo contenía el núcleo del compilador qiskit-terra (el componente que ahora se llama simplemente "Qiskit"), por lo que si su versión mínima es 0.44, puede cambiar con seguridad una dependencia de qiskit-terra>=0.44 a qiskit>=0.44 sin cambios en lo que se instalará. Para más detalles y recomendaciones sobre pruebas y preparación, consulte la sección para desarrolladores de la guía de migración.

Nuevas funciones

  • Se ha añadido una nueva función, qs_decomposition()se ha añadido a qiskit.synthesis. Esta función permite aplicar la descomposición cuántica de Shannon de unitarios arbitrarios.

  • Se ha introducido un nuevo qiskit.providers.basic_provider para sustituir a qiskit.providers.basicaer. Este módulo contiene herramientas de proveedor que reflejan las del proveedor BasicAer y ofrece un simulador único, no eficiente, basado en vectores de estado: BasicSimulator. Este simulador se basa en la interfaz BackendV2 y está pensado exclusivamente para pruebas y creación de prototipos sencillos; para funciones de simulación más avanzadas, consulte el paquete qiskit-aer . Consulte las directrices de migración en la nota de obsoleto de BasicAer .

  • La interfaz Target y el transpilador admiten ahora definiciones de destino con num_qubits=None. El objetivo es permitir la creación de Target-con un número flexible de qubits. Un objetivo con num_qubits=None contendrá exclusivamente instrucciones globales (con qargs=None) y cuando se entregue al transpilador, se espera que éste no redimensione el circuito. Este cambio en el Target requiere futuras pasadas del transpilador para tener en cuenta el caso en que target.num_qubits is None.

  • Se ha añadido una nueva clase GenericBackendV2 se ha añadido al módulo qiskit.providers.fake_provider módulo. Esta clase es configurable, y construye una instancia de BackendV2 que puede ejecutarse localmente (en el espíritu de los falsos backends). Los usuarios pueden configurar el número de qubits, puertas base, mapa de acoplamiento, capacidad de ejecutar circuitos dinámicos (instrucciones de flujo de control), calibraciones de instrucciones y dtm del backend sin tener que ocuparse de la construcción manual de objetivos. Las propiedades de los qubits y las puertas se generan mediante muestreo aleatorio a partir de rangos predeterminados. La semilla para esta generación aleatoria puede fijarse para garantizar la reproducibilidad de la salida del backend. Es importante tener en cuenta que este backend sólo admite puertas en la biblioteca estándar. Si necesitas un backend más flexible, siempre existe la opción de instanciar directamente un objeto Target para utilizarlo en la transpilación.

    Ejemplo de uso 1:

    from qiskit import QuantumCircuit, transpile
    from qiskit.providers.fake_provider import GenericBackendV2
    
    # Create a simple circuit
    circuit = QuantumCircuit(3)
    circuit.h(0)
    circuit.cx(0,1)
    circuit.cx(0,2)
    circuit.measure_all()
    circuit.draw('mpl')
    
    # Define backend with 3 qubits
    backend = GenericBackendV2(num_qubits=3)
    
    # Transpile and run
    transpiled_circuit = transpile(circuit, backend)
    result = backend.run(transpiled_circuit).result()

    Ejemplo de uso 2:

    from qiskit import QuantumCircuit, ClassicalRegister, transpile
    from qiskit.providers.fake_provider import GenericBackendV2
    
    # Create a circuit with classical control
    creg = ClassicalRegister(19)
    qc = QuantumCircuit(25)
    qc.add_register(creg)
    qc.h(0)
    for i in range(18):
        qc.cx(0, i + 1)
    for i in range(18):
        qc.measure(i, creg[i])
    qc.ecr(20, 21).c_if(creg, 0)
    
    # Define backend with custom basis gates
    # and control flow instructions
    backend = GenericBackendV2(
          num_qubits=25,
          basis_gates = ["ecr","id","rz","sx","x"],
          control_flow=True)
    
    #Transpile
    transpiled_qc = transpile(qc, backend)
    Nota

    Las propiedades de ruido generadas por esta clase no imitan ningún dispositivo cuántico concreto, y no deben utilizarse para medir comportamientos backend concretos. Se trata de "valores predeterminados razonables" que pueden utilizarse para probar la funcionalidad general de la interfaz con el backend. Para una simulación más precisa de los dispositivos existentes, puede construir manualmente un modelo de ruido a partir del backend real utilizando la funcionalidad ofrecida en qiskit-aer.

Notas de actualización

  • La versión mínima requerida para symengine ha pasado a ser >= 0.11. Esto permitió eliminar las soluciones de ParameterExpression.is_real() para solucionar un error de versiones anteriores de symengine.

Notas sobre características en desuso

  • En ScheduleBlock.scoped_parameters() y ScheduleBlock.search_parameters() han quedado obsoletos. Estos métodos producen Parameter con nombres modificados para indicar el alcance del pulso. La intención original de los métodos era que estos objetos siguieran enlazados con los objetos originales no Parameter originales. Sin embargo, la modificación del nombre rompe el vínculo, de modo que la asignación mediante la versión de ámbito no funciona. Ver #11654 para más contexto.

  • Pasando a QuasiDistribution, ProbDistributiono un diccionario de distribución en el argumento data de la función de visualización plot_histogram() ha quedado obsoleta. El soporte para hacer esto se eliminará en la versión de Qiskit 1.0. Si desea trazar un histograma a partir de a QuasiDistribution, ProbDistributiono un diccionario de distribución, debe utilizar la función plot_distribution() en su lugar.

  • El paquete qiskit-terra Python está obsoleto y dejará de recibir actualizaciones a partir de Qiskit 1.0.0. Si instala qiskit-terra por sí mismo, ya no se actualizará para Qiskit>=1.0.0. Si estás ejecutando qiskit sin el paquete qiskit se emitirá un FutureWarning en la importación de qiskit para indicar que no estás usando el paquete qiskit .

  • El uso del objeto qiskit.Aer está obsoleto y se eliminará en Qiskit 1.0. En su lugar, debe utilizar el mismo objeto del espacio de nombres qiskit_aer , que es un sustituto directo.

  • La importación desde qiskit.providers.aer está obsoleta y dejará de funcionar en Qiskit 1.0. En su lugar, debe importar desde qiskit_aer, que es un sustituto directo.

  • Ejecutar trabajos pulse en backends de qiskit.providers.fake_provider está obsoleto, y todo el soporte será eliminado en Qiskit 1.0. Esto se debe a que Qiskit Aer ha eliminado su función de simulación para este tipo de trabajos. Para cargas de trabajo de simulación hamiltoniana de bajo nivel, considere el uso de una biblioteca especializada como Qiskit Dynamics.

  • El módulo qiskit.transpiler.synthesis está obsoleto y se eliminará en Qiskit 1.0. Se han movido los siguientes objetos:

  • El módulo qiskit.tools.jupyter ha quedado obsoleto y se eliminará en Qiskit 1.0.0. Este módulo está obsoleto porque la funcionalidad de este módulo está vinculada al paquete heredado qiskit-ibmq-provider que ya no está soportado y además sólo soporta BackendV1. Si está utilizando esta funcionalidad actualmente, existen herramientas jupyter similares en el paquete qiskit-ibm-provider que pueden utilizarse en su lugar.

  • El módulo qiskit.tools.monitor ha quedado obsoleto y se eliminará en Qiskit 1.0.0. Este módulo está obsoleto porque la funcionalidad de este módulo está vinculada al paquete heredado qiskit-ibmq-provider que ya no está soportado y además sólo soporta BackendV1.

  • El módulo qiskit.tools.visualization ha quedado obsoleto y se eliminará en Qiskit 1.0.0. Este módulo era una redirección heredada de la ubicación original del módulo de visualización de Qiskit y se trasladó a qiskit.visualization en Qiskit 0.8.0. Si sigues utilizando esta ruta, puedes actualizar tus importaciones de qiskit.tools.visualization a qiskit.visualization.

  • El módulo qiskit.tools.events y la utilidad progressbar() que exponía han quedado obsoletos y se eliminarán en la versión de Qiskit 1.0.0. La funcionalidad de este módulo no era muy utilizada y estaba mejor cubierta por paquetes dedicados como tqdm.

  • El módulo qiskit.tools ha quedado obsoleto y se eliminará en Qiskit 1.0.0. Excepto como se indica en las notas de la versión anteriores para submódulos específicos (qiskit.tools.jupyter, qiskit.tools.monitor, qiskit.tools.events y qiskit.tools.visualization) la funcionalidad de este módulo se ha migrado a qiskit.utils. Si utiliza alguna funcionalidad de este módulo, puede actualizar sus importaciones de qiskit.tools a qiskit.utils.

  • El módulo qiskit.test está obsoleto. Este módulo contiene herramientas y ayudas para las pruebas internas de Qiskit, y la mayor parte de su funcionalidad ha sido trasladada o ya no se utiliza en Qiskit. En la práctica, el módulo nunca se pensó para un uso externo. Si algo del código del módulo es absolutamente necesario más allá de Qiskit, considera copiar ese código en tu propia infraestructura de pruebas.

  • El módulo qiskit.quantum_info.synthesis está obsoleto y se eliminará en Qiskit 1.0.0. Los siguientes objetos se han trasladado a qiskit.synthesis:

    La clase Quaternion se ha migrado de qiskit.quantum_info.synthesis a qiskit.quantum_info. Este movimiento no ha afectado a la ruta de importación habitual de la clase, pero el acceso a la misma a través de qiskit.quantum_info.synthesis está ahora obsoleto.

    Esta función está obsoleta y se eliminará en Qiskit 1.0.0:

    • cnot_rxx_decompose()
  • El módulo de análisis sintáctico de OpenQASM 2 anteriormente presente en qiskit.qasm ha quedado obsoleto. Se eliminará en la versión de Qiskit 1.0.0. El analizador sintáctico heredado de OpenQASM 2 ha sido sustituido por el módulo qiskit.qasm2 que proporciona un analizador más rápido y correcto para OpenQASM 2.

  • La función qiskit.converters.ast_to_dag ha quedado obsoleta y se eliminará en la versión de Qiskit 1.0.0. Anteriormente se utilizaba para convertir el árbol sintáctico abstracto generado por el analizador sintáctico heredado de OpenQASM 2 (en el módulo qiskit.qasm que ha quedado obsoleto) y convertirlo directamente en un archivo DAGCircuit. Dado que el analizador sintáctico heredado de OpenQASM 2 ha quedado obsoleto, esta función dejará de tener utilidad una vez que se elimine el analizador sintáctico heredado. Si antes utilizaba esta opción, puede convertir sus archivos OpenQASM 2 en un archivo QuantumCircuit con las teclas QuantumCircuit.from_qasm_file() o QuantumCircuit.from_qasm_str() y luego convertir ese QuantumCircuit en un DAGCircuit con circuit_to_dag().

  • El método QuantumCircuit.qasm() utilizado para generar una representación OpenQASM 2 del objeto QuantumCircuit ha quedado obsoleto y se eliminará en la versión de Qiskit 1.0.0. En qasm2.dump() o qasm2.dumps() que proporcionan una funcionalidad similar. Si estaba utilizando el método QuantumCircuit.qasm() para generar una salida con formato pygments, debería utilizar el paquete independiente openqasm-pygments para obtener esta funcionalidad (como qasm2.dump() y qasm2.dumps() no proporcionan salida coloreada pygments).

  • La clase base ParametricPulse clase base y los pulsos están ahora obsoletos, y serán eliminados en Qiskit 1.0. Esto incluye:

    Esta clase ha sido sustituida por SymbolicPulse y la biblioteca de impulsos correspondiente. SymbolicPulse ofrece mayor rendimiento, flexibilidad y compatibilidad con QPY.

  • El NoiseAdaptiveLayout transpiler pass y el correspondiente plugin "noise_adaptive" layout stage han quedado obsoletos y se eliminarán en la versión 1.0.0. Este pase ha sido sustituido en gran medida por VF2Layout y VF2PostLayout que establece un diseño basado en las características de ruido de un backend.

  • El transpilador CrosstalkAdaptiveSchedule transpiler pass ha quedado obsoleto y se eliminará en la versión 1.0.0. Este pase ya no se podía utilizar porque su funcionamiento interno dependía de que se establecieran propiedades personalizadas en el archivo BackendProperties de una instancia BackendV1 instancia. Dado que ningún backend establece estos campos, el pass ha quedado obsoleto.

  • El módulo qiskit.visualization.qcstyle está obsoleto y se eliminará en la versión de Qiskit 1.0.0. En su lugar, debe utilizar qiskit.visualization.circuit.qcstyle como sustituto directo.

  • La inyección de operaciones de puerta de circuito en el contexto del generador de impulsos ha quedado obsoleta. La desaprobación afecta a las siguientes funciones:

    • call_gate(),
    • cx(),
    • u1(),
    • u2(),
    • u3(),
    • x()

    Así como argumentos de entrada de tipo QuantumCircuit de tipo call().

    Si todavía desea inyectar horarios calibrados backend, puede utilizar el siguiente patrón en lugar de llamar a los comandos de puerta.

    from qiskit.providers.fake_provider import GenericBackendV2
    from qiskit import pulse
    
    backend = GenericBackendV2(num_qubits=5)
    sched = backend.target['x'][(qubit,)].calibration
    
    with pulse.build() as only_pulse_scheds:
      pulse.call(sched)

    Del mismo modo, QuantumCircuit puede inyectarse en el contexto del constructor transpilando y programando manualmente el objeto.

    from math import pi
    from qiskit.compiler import schedule, transpile
    qc = QuatumCircuit(2)
    qc.rz(pi/2, 0)
    qc.sx(0)
    qc.rz(pi/2, 0)
    qc.cx(0, 1)
    
    qc_t = transpile(qc, backend)
    sched = schedule(qc_t, backend)
    with pulse.build() as only_pulse_scheds:
        pulse.call(sched)

    En cualquier caso ahora recomendamos escribir un programa de pulso mínimo con el constructor y adjuntarlo a QuantumCircuit mediante el método QuantumCircuit.add_calibration() como microcódigo de una instrucción de puerta, en lugar de escribir todo el programa con el modelo de impulsos.

    Los siguientes argumentos en build() también han quedado obsoletos:

    • default_transpiler_settings
    • default_circuit_scheduler_settings

    Junto con las funciones:

  • Las siguientes herramientas de qiskit.utils han quedado obsoletas:

    • Utilidades en qiskit.utils.arithmetic
    • Utilidades en qiskit.utils.circuit_utils
    • Utilidades en qiskit.utils.entangler_map
    • Utilidades en qiskit.utils.name_unnamed_args

    Estas funciones se utilizaban exclusivamente en el contexto de qiskit.algorithms y qiskit.opflow, y se eliminarán tras las supresiones de qiskit.algorithms y qiskit.opflow en Qiskit 1.0.

  • El módulo qiskit.providers.fake_provider se ha migrado al paquete qiskit-ibm-runtime Python. Por esta razón, los siguientes elementos del qiskit.providers.fake_provider han quedado obsoletos a partir de Qiskit 0.46 y se eliminarán en Qiskit 1.0:

    Ejemplo de migración al nuevo proveedor falso:

    # Legacy path
    from qiskit.providers.fake_provider import FakeProvider, FakeSherbrooke
    backend1 = FakeProvider().get_backend("fake_ourense")
    backend2 = FakeSherbrooke()
    
    # New path
    # run "pip install qiskit-ibm-runtime"
    from qiskit_ibm_runtime.fake_provider import FakeProvider, FakeSherbrooke
    backend1 = FakeProvider().get_backend("fake_ourense")
    backend2 = FakeSherbrooke()

    Además, los siguientes backends falsos diseñados para pruebas especiales han sido sustituidos por la nueva clase GenericBackendV2 y también están obsoletos a partir de Qiskit 0.46:

    Ejemplo de migración a la nueva GenericBackendV2 clase:

    # Legacy path
    from qiskit.providers.fake_provider import FakeBackend5QV2
    backend = FakeBackend5QV2()
    
    # New path
    from qiskit.providers.fake_provider import GenericBackendV2
    backend = GenericBackendV2(num_qubits=5)
    # note that this class will generate 5q backend with generic
    # properties that serves the same purpose as FakeBackend5QV2
    # but will generate different results
  • El módulo qiskit.extensions ha quedado obsoleto. Estaba pendiente de eliminación desde el lanzamiento de Qiskit 0.45. La mayoría de los objetos se han trasladado a qiskit.circuit.libraryincluyendo:

    Con la desaparición de los objetos, también han quedado obsoletos los siguientes métodos de circuito:

    • QuantumCircuit.diagonal,
    • QuantumCircuit.hamiltonian,
    • QuantumCircuit.isometry y QuantumCircuit.iso,
    • QuantumCircuit.uc,
    • QuantumCircuit.ucrx,
    • QuantumCircuit.ucry,
    • QuantumCircuit.ucrz.
  • La función execute() está obsoleta. Esta función servía como una envoltura de alto nivel para transpilar un circuito con algunas opciones de transpilación y ejecutarlo en un backend con algunas opciones de ejecución. Para hacer lo mismo, puede utilizar explícitamente la función transpile() (con las opciones de transpilación adecuadas) seguida de backend.run() (con las opciones de ejecución adecuadas).

    Por ejemplo, en lugar de correr:

    from qiskit import execute
    job = execute(circuit, backend)

    puedes correr:

    from qiskit import transpile
    new_circuit = transpile(circuit, backend)
    job = backend.run(new_circuit)

    Alternativamente, la primitiva Sampler es semánticamente equivalente a la función obsoleta execute() obsoleta. La clase BackendSampler es una envoltura genérica para backends que no soportan primitivas:

    from qiskit.primitives import BackendSampler
    sampler = BackendSampler(backend)
    job = sampler.run(circuit)
  • La conversión implícita de un BaseOperator` denso a un SparsePauliOp en los argumentos observables de Estimator está obsoleta a partir de Qiskit 0.46 y se eliminará en Qiskit 1.0. Debe convertir explícitamente a SparsePauliOp utilizando SparsePauliOp.from_operator() en su lugar.

  • La biblioteca de impulsos discretos ha quedado obsoleta y se eliminará en una próxima versión. Esto incluye:

    En su lugar, utilice el correspondiente SymbolicPulse, con get_waveform(). Por ejemplo, en lugar de pulse.gaussian(100,0.5,10) utilice pulse.Gaussian(100,0.5,10).get_waveform().

    Obsérvese que la fase tanto de Sawtooth como de Square se define de tal manera que una fase de 2pi2\\pi se desplaza un ciclo completo, al contrario que la contrapartida discreta. También tenga en cuenta que el soporte de amplitudes complejas está obsoleto en la biblioteca de pulsos simbólicos - utilice float, amp y angle en su lugar.

  • La clase ConfigurableFakeBackend que se ha utilizado principalmente para pruebas internas, ha quedado obsoleta. Se eliminará en la versión de Qiskit 1.0.0. En su lugar, puede utilizar la clase GenericBackendV2 para construir un backend similar para pruebas.

  • La carga de objetos de la biblioteca ScalableSymbolicPulse con el parámetro complejo amp desde archivos qpy de versión 5 o inferior (Qiskit Terra < 0.23.0 ) está ahora obsoleta. Tras la eliminación en Qiskit 1.0.0, el complejo amp se convertirá automáticamente en float (amp, angle). El cambio se aplica a los pulsos:

    • Constant
    • Drag
    • Gaussian
    • GaussianSquare
  • El módulo qiskit.providers.basicaer y todas sus clases están obsoletas a partir de Qiskit 0.46. Su uso debe sustituirse por el qiskit.quantum_info y el nuevo módulo qiskit.providers.basic_provider módulo.

    La migración del uso de qiskit.providers.basicaer a qiskit.providers.basic_provider puede realizarse del siguiente modo:

    Migrate from                     |   Replace with
    ------------------------------------------------------------------------------
    :mod:`.basicaer`                 |  :mod:`.basic_provider`
    :class:`.BasicAerProvider`       |  :class:`.BasicProvider`
    :class:`.BasicAerJob`            |  :class:`.BasicProviderJob`
    :class:`.QasmSimulatorPy`        |  :class:`.BasicSimulator`
    :class:`.UnitarySimulatorPy`     |  use :class:`~.quantum_info.Operator`
    :class:`.StatevectorSimulatorPy` |  use :class:`~.quantum_info.Statevector`

    Una diferencia notable es que el nuevo proveedor ya no se expone a través de una instancia global (como BasicAer), por lo que no será válido hacer from qiskit import BasicProvider. En su lugar, la clase del proveedor debe importarse desde su submódulo e instanciarse:

    from qiskit.providers.basic_provider import BasicProvider
    provider = BasicProvider()
    backend = provider.get_backend("sim_name")

    Los siguientes ejemplos muestran las rutas de migración de los tres simuladores en basicaer.

    1. Simulador de vector de estado:

      from qiskit import QuantumCircuit
      qc = QuantumCircuit(3)
      qc.h(0)
      qc.h(1)
      qc.cx(1,2)
      qc.measure_all()
      
      # Former path
      from qiskit import BasicAer
      backend = BasicAer.get_backend("statevector_simulator")
      statevector = backend.run(qc).result().get_statevector()
      
      # New path
      qc.remove_final_measurements() # no measurements allowed
      from qiskit.quantum_info import Statevector
      statevector = Statevector(qc)
    2. Simulador unitario:

      from qiskit import QuantumCircuit
      qc = QuantumCircuit(3)
      qc.h(0)
      qc.h(1)
      qc.cx(1,2)
      qc.measure_all()
      
      # Former path
      from qiskit import BasicAer
      backend = BasicAer.get_backend("unitary_simulator")
      result = backend.run(qc).result()
      
      # New path
      qc.remove_final_measurements() # no measurements allowed
      from qiskit.quantum_info import Operator
      result = Operator(qc).data
    3. Simulador Qasm:

      from qiskit import QuantumCircuit
      qc = QuantumCircuit(3)
      qc.h(0)
      qc.h(1)
      qc.cx(1,2)
      qc.measure_all()
      
      # Former path
      from qiskit import BasicAer
      backend = BasicAer.get_backend("qasm_simulator")
      result = backend.run(qc).result()
      
      # New path
      from qiskit.providers.basic_provider import BasicProvider
      backend = BasicProvider().get_backend("basic_simulator")
      result = backend.run(qc).result()
      # or, directly
      from qiskit.providers.basic_provider import BasicSimulator
      backend = BasicSimulator()
      result = backend.run(qc).result()
  • Utilizando un PauliList como un observable que se convierte implícitamente en a SparsePauliOp con coeficientes 1 al llamar a Estimator.run() está obsoleto. En su lugar, debe convertir explícitamente el argumento utilizando SparsePauliOp(pauli_list) en primer lugar.

Problemas críticos

  • Al actualizar Qiskit de 0.46.x a 1.0.0 no podrás actualizar en el sitio. Por ejemplo, pip install -U qiskit o pip install --upgrade qiskit no son compatibles y es probable que no funcionen. Para actualizar qiskit el camino recomendado es crear un nuevo entorno virtual (venv) para crear un nuevo entorno independiente para Qiskit>=1.0.0. Por ejemplo:

    python -m venv qiskit_1.0
    source qiskit_1.0/bin/activate
    pip install qiskit>=1

    creará un nuevo entorno virtual llamado qiskit_1.0 contendrá la nueva versión de Qiskit.

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