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
C3SXGateque hacía que fallara siGate.to_matrix()era llamado. La matriz de la puerta ahora se devuelve como se esperaba. -
El atributo
QuantumCircuit.parametersestará vacío cuando se utiliceQuantumCircuit.copy_empty_like()en un circuito paramétrico. Anteriormente, una caché interna se copiaba sin invalidarse. Corrección #12617. -
Arreglar el
SolovayKitaeval 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
GenericBackendV2permití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ónn-qubit en un bloque demqubits, dejando el DAG en un estado inválido. Este comportamiento se ha corregido y el intento generará un mensajeDAGCircuitError.
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()oQuantumCircuit.draw()cuando se utilizaba la opción de salidampl, por el que el programa se colgaba si el circuito que se dibujaba tenía una operación ControlFlow y la opciónfoldse establecía en -1 (lo que significa que no hay pliegue). Corregido #12012. -
La página
EvolvedOperatorAnsatzahora 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
EvolvedOperatorAnsatzno tendrá ningún qregs cuando thera son cero qubits, en lugar de tener unaQuantumRegisterinstancia con cero qubits. Este comportamiento es más coherente con su superclaseQuantumCircuit. -
El método
Instruction.repeat()ahora mueve un conjuntoconditional exterior devueltoInstructiony deja incondicionales las puertas interiores de su definición. Anteriormente, el método dejabaClassicalRegisterinstancias 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 unBackendV2argumento. 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
VF2Layoutpass lanzaría una excepción cuando se le proporcionara unaTargetsin restricciones de conectividad. Este sería el caso de los objetivos de Aer 0.13. El problema se ha solucionado. -
El complemento predeterminado
initno generaba correctamente un errorTranspilerErrorcuando 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()yqasm2.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 .
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 atributoBackendConfiguration.supported_instructions, que es la ubicación típica en la que se especifican las instrucciones de flujo de control en un objetoBackendConfigurationobjeto. 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 comoBasisTranslatorseguirían utilizando las reglas antiguas. Corregido #11958. -
BasePassManager.run()ya no filtrará elPropertySeten nuevos flujos de trabajo cuando se llama más de una vez. Anteriormente, se utilizaba el mismoPropertySetque 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
FakeOpenPulse2Qbackend. 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 obsoletoqiskit.tools) se ha actualizado para que funcione como se esperaba. La funciónjob_monitor()funciona ahora conJobinstancias. Las funcionesbackend_overview()ybackend_monitor()deberían funcionar ahora como se espera. -
InstructionDurations.from_backend()devuelve ahora una instancia de cualquier subclase deInstructionDurationsen 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.
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 aqiskit.synthesis. Esta función permite aplicar la descomposición cuántica de Shannon de unitarios arbitrarios. -
Se ha introducido un nuevo
qiskit.providers.basic_providerpara sustituir aqiskit.providers.basicaer. Este módulo contiene herramientas de proveedor que reflejan las del proveedorBasicAery ofrece un simulador único, no eficiente, basado en vectores de estado:BasicSimulator. Este simulador se basa en la interfazBackendV2y está pensado exclusivamente para pruebas y creación de prototipos sencillos; para funciones de simulación más avanzadas, consulte el paqueteqiskit-aer. Consulte las directrices de migración en la nota de obsoleto deBasicAer. -
La interfaz
Targety el transpilador admiten ahora definiciones de destino connum_qubits=None. El objetivo es permitir la creación deTarget-con un número flexible de qubits. Un objetivo connum_qubits=Nonecontendrá exclusivamente instrucciones globales (conqargs=None) y cuando se entregue al transpilador, se espera que éste no redimensione el circuito. Este cambio en elTargetrequiere futuras pasadas del transpilador para tener en cuenta el caso en quetarget.num_qubits is None. -
Se ha añadido una nueva clase
GenericBackendV2se ha añadido al móduloqiskit.providers.fake_providermódulo. Esta clase es configurable, y construye una instancia deBackendV2que 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 objetoTargetpara 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)NotaLas 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
symengineha pasado a ser >= 0.11. Esto permitió eliminar las soluciones deParameterExpression.is_real()para solucionar un error de versiones anteriores desymengine.
Notas sobre características en desuso
-
En
ScheduleBlock.scoped_parameters()yScheduleBlock.search_parameters()han quedado obsoletos. Estos métodos producenParametercon 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 noParameteroriginales. 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 argumentodatade la función de visualizaciónplot_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 aQuasiDistribution,ProbDistributiono un diccionario de distribución, debe utilizar la funciónplot_distribution()en su lugar. -
El paquete
qiskit-terraPython está obsoleto y dejará de recibir actualizaciones a partir de Qiskit 1.0.0. Si instalaqiskit-terrapor sí mismo, ya no se actualizará para Qiskit>=1.0.0. Si estás ejecutando qiskit sin el paqueteqiskitse emitirá unFutureWarningen la importación deqiskitpara indicar que no estás usando el paqueteqiskit. -
El uso del objeto
qiskit.Aerestá obsoleto y se eliminará en Qiskit 1.0. En su lugar, debe utilizar el mismo objeto del espacio de nombresqiskit_aer, que es un sustituto directo. -
La importación desde
qiskit.providers.aerestá obsoleta y dejará de funcionar en Qiskit 1.0. En su lugar, debe importar desdeqiskit_aer, que es un sustituto directo. -
Ejecutar trabajos pulse en backends de
qiskit.providers.fake_providerestá 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.synthesisestá obsoleto y se eliminará en Qiskit 1.0. Se han movido los siguientes objetos:qiskit.transpiler.synthesis.aqcse ha trasladado aqiskit.synthesis.unitary.aqc(excepto enqiskit.synthesis.unitary.aqc.AQCSynthesisPlugin).qiskit.synthesis.unitary.aqc.AQCSynthesisPluginse ha trasladado aqiskit.transpiler.passes.synthesis.AQCSynthesisPlugin.qiskit.transpiler.synthesis.graysynth()se ha trasladado aqiskit.synthesis.synth_cnot_phase_aam().qiskit.transpiler.synthesis.cnot_synth()se ha trasladado aqiskit.synthesis.synth_cnot_count_full_pmh().
-
El módulo
qiskit.tools.jupyterha 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 heredadoqiskit-ibmq-providerque ya no está soportado y además sólo soportaBackendV1. 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.monitorha 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 heredadoqiskit-ibmq-providerque ya no está soportado y además sólo soportaBackendV1. -
El módulo
qiskit.tools.visualizationha 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ó aqiskit.visualizationen Qiskit 0.8.0. Si sigues utilizando esta ruta, puedes actualizar tus importaciones deqiskit.tools.visualizationaqiskit.visualization. -
El módulo
qiskit.tools.eventsy la utilidadprogressbar()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.toolsha 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.eventsyqiskit.tools.visualization) la funcionalidad de este módulo se ha migrado aqiskit.utils. Si utiliza alguna funcionalidad de este módulo, puede actualizar sus importaciones deqiskit.toolsaqiskit.utils. -
El módulo
qiskit.testestá 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.synthesisestá obsoleto y se eliminará en Qiskit 1.0.0. Los siguientes objetos se han trasladado aqiskit.synthesis:OneQubitEulerDecomposerse ha trasladado aqiskit.synthesis.one_qubitTwoQubitBasisDecomposerse ha trasladado aqiskit.synthesis.two_qubitsXXDecomposerse ha trasladado aqiskit.synthesis.two_qubitstwo_qubit_cnot_decompose()se ha trasladado aqiskit.synthesis.two_qubits
La clase
Quaternionse ha migrado deqiskit.quantum_info.synthesisaqiskit.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 deqiskit.quantum_info.synthesisestá 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.qasmha 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óduloqiskit.qasm2que proporciona un analizador más rápido y correcto para OpenQASM 2. -
La función
qiskit.converters.ast_to_dagha 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óduloqiskit.qasmque ha quedado obsoleto) y convertirlo directamente en un archivoDAGCircuit. 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 archivoQuantumCircuitcon las teclasQuantumCircuit.from_qasm_file()oQuantumCircuit.from_qasm_str()y luego convertir eseQuantumCircuiten unDAGCircuitconcircuit_to_dag(). -
El método
QuantumCircuit.qasm()utilizado para generar una representación OpenQASM 2 del objetoQuantumCircuitha quedado obsoleto y se eliminará en la versión de Qiskit 1.0.0. Enqasm2.dump()oqasm2.dumps()que proporcionan una funcionalidad similar. Si estaba utilizando el métodoQuantumCircuit.qasm()para generar una salida con formato pygments, debería utilizar el paquete independienteopenqasm-pygmentspara obtener esta funcionalidad (comoqasm2.dump()yqasm2.dumps()no proporcionan salida coloreada pygments). -
La clase base
ParametricPulseclase base y los pulsos están ahora obsoletos, y serán eliminados en Qiskit 1.0. Esto incluye:ParametricPulseConstantDragGaussianGaussianSquare
Esta clase ha sido sustituida por
SymbolicPulsey la biblioteca de impulsos correspondiente.SymbolicPulseofrece mayor rendimiento, flexibilidad y compatibilidad con QPY. -
El
NoiseAdaptiveLayouttranspiler 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 porVF2LayoutyVF2PostLayoutque establece un diseño basado en las características de ruido de un backend. -
El transpilador
CrosstalkAdaptiveScheduletranspiler 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 archivoBackendPropertiesde una instanciaBackendV1instancia. Dado que ningún backend establece estos campos, el pass ha quedado obsoleto. -
El módulo
qiskit.visualization.qcstyleestá obsoleto y se eliminará en la versión de Qiskit 1.0.0. En su lugar, debe utilizarqiskit.visualization.circuit.qcstylecomo 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
QuantumCircuitde tipocall().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,
QuantumCircuitpuede 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
QuantumCircuitmediante el métodoQuantumCircuit.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_settingsdefault_circuit_scheduler_settings
Junto con las funciones:
-
Las siguientes herramientas de
qiskit.utilshan 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.algorithmsyqiskit.opflow, y se eliminarán tras las supresiones deqiskit.algorithmsyqiskit.opflowen Qiskit 1.0. - Utilidades en
-
El módulo
qiskit.providers.fake_providerse ha migrado al paqueteqiskit-ibm-runtimePython. Por esta razón, los siguientes elementos delqiskit.providers.fake_providerhan quedado obsoletos a partir de Qiskit 0.46 y se eliminarán en Qiskit 1.0:qiskit.providers.fake_provider.FakeProviderqiskit.providers.fake_provider.FakeProviderForBackendV2qiskit.providers.fake_provider.FakeProviderFactoryqiskit.providers.fake_provider.fake_backends.FakeBackendV2- cualquier backend falso contenido en
qiskit.providers.fake_provider.backends(accesible a través del proveedor) qiskit.providers.fake_provider.FakeQasmSimulatorqiskit.providers.fake_provider.FakeJobqiskit.providers.fake_provider.FakeQobj
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
GenericBackendV2y también están obsoletos a partir de Qiskit 0.46:qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2LegacyQubitPropsqiskit.providers.fake_provider.fake_backend_v2.FakeBackend5QV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendSimple
Ejemplo de migración a la nueva
GenericBackendV2clase:# 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.extensionsha quedado obsoleto. Estaba pendiente de eliminación desde el lanzamiento de Qiskit 0.45. La mayoría de los objetos se han trasladado aqiskit.circuit.libraryincluyendo:DiagonalGate,HamiltonianGateGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
Con la desaparición de los objetos, también han quedado obsoletos los siguientes métodos de circuito:
QuantumCircuit.diagonal,QuantumCircuit.hamiltonian,QuantumCircuit.isometryyQuantumCircuit.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óntranspile()(con las opciones de transpilación adecuadas) seguida debackend.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
Sampleres semánticamente equivalente a la función obsoletaexecute()obsoleta. La claseBackendSampleres 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 unSparsePauliOpen los argumentos observables deEstimatorestá obsoleta a partir de Qiskit 0.46 y se eliminará en Qiskit 1.0. Debe convertir explícitamente aSparsePauliOputilizandoSparsePauliOp.from_operator()en su lugar. -
La biblioteca de impulsos discretos ha quedado obsoleta y se eliminará en una próxima versión. Esto incluye:
constant()zero()square()sawtooth()triangle()cos()sin()gaussian()gaussian_deriv()sech()sech_deriv()gaussian_square()drag()
En su lugar, utilice el correspondiente
SymbolicPulse, conget_waveform(). Por ejemplo, en lugar depulse.gaussian(100,0.5,10)utilicepulse.Gaussian(100,0.5,10).get_waveform().Obsérvese que la fase tanto de
Sawtoothcomo deSquarese define de tal manera que una fase de 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 - utilicefloat,ampyangleen su lugar. -
La clase
ConfigurableFakeBackendque 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 claseGenericBackendV2para construir un backend similar para pruebas. -
La carga de objetos de la biblioteca
ScalableSymbolicPulsecon el parámetro complejoampdesde 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 complejoampse convertirá automáticamente en float (amp,angle). El cambio se aplica a los pulsos:ConstantDragGaussianGaussianSquare
-
El módulo
qiskit.providers.basicaery todas sus clases están obsoletas a partir de Qiskit 0.46. Su uso debe sustituirse por elqiskit.quantum_infoy el nuevo móduloqiskit.providers.basic_providermódulo.La migración del uso de
qiskit.providers.basicaeraqiskit.providers.basic_providerpuede 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 hacerfrom 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.-
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) -
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 -
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
PauliListcomo un observable que se convierte implícitamente en aSparsePauliOpcon coeficientes 1 al llamar aEstimator.run()está obsoleto. En su lugar, debe convertir explícitamente el argumento utilizandoSparsePauliOp(pauli_list)en primer lugar.
Problemas críticos
-
Al actualizar Qiskit de
0.46.xa1.0.0no podrás actualizar en el sitio. Por ejemplo,pip install -U qiskitopip install --upgrade qiskitno son compatibles y es probable que no funcionen. Para actualizarqiskitel 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>=1creará un nuevo entorno virtual llamado
qiskit_1.0contendrá la nueva versión de Qiskit.