Notas de la versión de Qiskit SDK 1.4
1.4.6
Preludio
Qiskit v1.4.6 es una versión dedicada exclusivamente a la seguridad y la última de la serie Qiskit v1.x.
Qiskit v1.x ya no recibe mantenimiento de ningún tipo.
problemas de seguridad
-
Los analizadores « OpenQASM » 2 (
qasm2.load()yqasm2.loads()) ahora se cerrarán con unRecursionErroral intentar evaluar una expresión excesivamente profunda.sys.getrecursionlimit()La profundidad máxima permitida se toma de Python en el punto de entrada a los analizadores sintácticos.Anteriormente, los analizadores podían realizar recursiones de forma arbitraria en el espacio de Rust, lo que acababa por superar el límite máximo de la pila y provocaba un error de segmento en el proceso.
1.4.5
Preludio
Qiskit v1.4.5 es la última versión de corrección de errores de la serie 1.4 y marca el final de la vida útil de la serie. El soporte para las correcciones de seguridad de la serie 1.4 continuará hasta el 31 de marzo de 2026.
Corrección de errores
-
Corregido el manejo de bits anónimos en la visualización de circuitos. Antes, los bits que no estaban asociados a un registro se mostraban con la representación por defecto Python, mientras que ahora muestran el índice de forma legible. Corregido #14031.
-
Se ha corregido un problema en el
Optimize1qGatesDecompositioncuando el pase se inicializaba con unTargetque contiene 1q puertas con parámetros de ángulo fijo. Anteriormente, el pase podía dar salida a puertas fuera del objetivo, ya que no comprobaba que la puerta del objetivo admitiera valores de parámetros arbitrarios. Corregido #14743. -
Se ha corregido un comportamiento incorrecto en el
BasisTranslatorpass donde una puerta multi-qubit dentro de unControlFlowOprastreaba la operación soportada con sus índices qubit locales en lugar de utilizar los índices absolutos del circuito exterior. Corregido #13728. -
Se ha corregido un error en
HighLevelSynthesispor el que no se reconocían las calibraciones de compuerta personalizadas si la compuerta aparecía anidada dentro de otros objetos de instrucción. Parcialmente corregido #13728. -
Se ha corregido un fallo en el cajón de texto del circuito, que podía producirse cuando los bloques de circuito dentro de las operaciones de flujo de control se definían en registros diferentes a los del circuito exterior. Esta situación podría darse, por ejemplo, al añadir
ControlFlowOpdirectamente, o en los circuitos tras la transpilación.
1.4.4
Preludio
Qiskit v1.4.4 es una versión de corrección de errores menores para la serie de versiones v1.4.x.
Corrección de errores
-
ApplyLayoutmanejará ahora correctamente el caso de aplicar un qubit ceroLayout. Anteriormente, afirmaba que no se había establecido ningún diseño, incluso si el campo"layout"del archivoPropertySetera igual aLayout(). -
Se ha corregido un error en el método
QuantumCircuit.assign_parameters()que provocaba un error con entradas de cadena y argumentostrict=False. Consulte el nº 13933 para obtener más información. -
Se ha corregido el atributo
namede la claseOrGatede forma que ahora se establezca en"or"para identificar de forma exclusiva esta puerta. Anteriormente estaba configurado incorrectamente en"and", lo que hacía imposible distinguirlo deAndGateo hacer que los plugins de síntesis sintetizaran unOrGate. Corregido #14434 -
Se ha corregido un error en el
ElidePermutationstranspiler pass, por el que la asignación de qubits no se actualizaba correctamente en presencia dePermutationGates, lo que provocaba circuitos y actualizaciones incorrectas del conjunto de propiedades del gestor de pases. -
Se ha corregido un error en la función
PauliEvolutionSynthesisDefaultyPauliEvolutionSynthesisRustiqque modificaban el atributo.synthesisdel circuito original al configurarpreserve_order=False. Se ha restaurado el comportamiento de los plugins y ahora se conserva el circuito original en todo el canal de transpilación. -
Se ha corregido un error de corrección al exportar circuitos con instrucciones de retardo utilizando
'ps'unidades a QASM3. -
Se ha corregido un problema de compatibilidad con la versión mínima compatible de rustworkx, 0.15. Con determinadas entradas los
VF2LayoutyVF2PostLayoututilizaban antes un método de rustworkx que se añadió en rustworkx 0.16.0 y que provocaba un error al utilizar una versión anterior de rustworkx que aparece como soportada. -
SabreLayoutySabreSwapya no entrará en pánico al aplicar el resultado del enrutamiento a un circuito que utilizaexpr.Varen un ámbito de flujo de control anidado. -
La función de la biblioteca de circuitos
quantum_volume()se actualizó para manejar unnumpy.random.Generatorcomo entrada para su argumentoseed. Anteriormente, un argumento generador de este tipo daba como resultadoTypeError. -
Corregido un error en las funciones de la biblioteca de circuitos
evolved_operator_ansatz(),qaoa_ansatz()yhamiltonian_variational_ansatz()donde los parámetros tenían un componente complejo cero. En la mayoría de los casos, esto no suponía ningún problema, a menos que se tradujera a SymPy utilizando el métodoParameterExpression.sympify()en cuyo caso se produciría un error.
1.4.3
Preludio
Qiskit v1.4.3 es una versión de corrección de errores menores para la serie de versiones v1.4.x.
Corrección de errores
-
Se ha corregido un error en
DAGCircuitque provocaba que los nodos de salidaVarse convirtieran en nodos de entrada durantedeepcopyy el decapado. -
Se ha corregido un problema en
BasisTranslatortranspiler pass, por el que la fase global del DAG no se actualizaba correctamente. Corregido #14074. -
Se ha corregido un error en QPY (
qiskit.qpy) por el que los circuitos que contenían puertas de claseMCMTGateno se serializaban. Ver #13965. -
SabreLayoutpropagará ahora correctamente lasnameymetadatade un circuito cuando se ejecuta como una pasada conjunta de trazado y enrutamiento. -
Se ha corregido un problema en el plugin de síntesis unitaria
SolovayKitaevSynthesissíntesis unitaria, por el que la ejecución repetida del plugin con diferentes puertas base reutilizaba incorrectamente las puertas base de la primera ejecución. El problema se debía a que se ignoraban las puertas base al almacenar en caché las aproximaciones básicas, y ya está solucionado. -
Se ha corregido un problema en el
SolovayKitaevpor el que el pase podía bloquearse al encontrarse con una rotación de 180 grados en la recursión interna, que no se gestionaba correctamente. -
Se ha corregido un problema en el
SolovayKitaevpor el que la aproximación generada podía tener una fase que difería en del valor correcto. Esto se debe a la representación interna , que requiere una manipulación adicional para obtener el signo correcto de la matriz de la puerta qubit. Corregido #9552 -
La heurística del error de repliegue en
VF2LayoutyVF2PostLayoututilizada cuando no había tasas de error notificadas, podía asignar errores superiores a uno y tener efectos impredecibles en las puntuaciones de diseño resultantes.
1.4.2
Preludio
Qiskit 1.4.2 es una versión de parche que corrige errores encontrados en la serie de versiones 1.4.
Nuevas funciones
- Se ha añadido un nuevo indicador
trust_payloada la funciónqpy.load()función. Se utiliza para forzar a la función a cargar una carga potencialmente insegura. Si la carga útil contieneScheduleBlock(ya sea de forma independiente o como parte deQuantumCircuit.calibrations) y la codificación simbólica en el archivo QPY está establecida ensympyentonces la carga útil es potencialmente insegura y cargarla podría permitir la ejecución de código arbitrario. Dado que esta bandera es para controlar la deserialización deScheduleBlockinstancias que no existen en Qiskit >= 2.0.0 esta bandera sólo existirá en Qiskit 1.4.x y no existirá en Qiskit >= 2.0.0.
Notas de actualización
- Por defecto,
qpy.loadlanzará unQpyErrorcuando se invoque con una carga útil QPY que contenga un objetoScheduleBlock(ya sea independiente o como parte deQuantumCircuit.calibrations) que utilicesympypara codificar expresiones simbólicas. Esto se debe a que la carga útil es potencialmente vulnerable y sólo debe cargarse si se confía en su contenido. Si está seguro de que la carga útil no es maliciosa, puede establecer el nuevo argumentotrust_payloaddeqpy.loadaTrue, y esto permitirá cargar la carga útil.
problemas de seguridad
- Se ha corregido una vulnerabilidad de seguridad en
qpy.load()al cargar cargas útiles que utilizansympypara serializarParameterExpressionobjetos y otras expresiones simbólicas. Esto incluye potencialmente cualquier carga útil QPY que utilice la versión QPY < 10, y opcionalmente 10, 11 y 12 dependiendo de la codificación simbólica utilizada en el paso de serialización (qpy.dump()).
Corrección de errores
- Corregido un error en la generación de aproximación de bases para
SolovayKitaev. Anteriormente, la generación de aproximaciones de bases discretas utilizandogenerate_basis_approximationspara una base que contenía puertas"sx"o"sxdg"fallaba. Esto ya se ha solucionado.
1.4.1
Preludio
Qiskit 1.4.1 es un pequeño parche que corrige algunos errores encontrados en la serie de soporte extendido 1.4.
Corrección de errores
-
Los circuitos compilados utilizando un gestor de pasadas predefinido construido por
generate_preset_pass_manager()conservarán correctamente su atributonamecomo ocurre contranspile(). -
Se ha corregido un problema con QPY 13 al serializar o deserializar un objeto
ParameterExpressionque se definía llamando aParameterExpression.subs()para sustituir unParameterpor unParameterExpression. Por ejemplo:from qiskit.circuit import Parameter a = Parameter("A") b = Parameter("B") expr = a + b c = Parameter("C") new_expr = c ** 3.14 final_expr.subs({b: new_expr})En versiones anteriores si ibas a serializar un archivo
QuantumCircuitque contenía una expresión como esta conqpy.dump()aparecíaAttributeErrorcon un mensaje de error ‘ParameterExpression’ object has no attribute 'name' cuando se utilizaba QPY 13 (por defecto). Esto se ha corregido para que ya no se produzca la excepción y se pueda serializar y deserializar una carga útil que contenga estos objetos anidadosParameterExpressionanidados. Ver #13879.
1.4.0
Preludio
La versión Qiskit v1.4 es la última versión menor de la serie v1.x. Esta versión contiene características mínimas, y principalmente añade nuevas advertencias de desaprobación para los cambios de API que se producirán en la futura versión principal v2.0. Es totalmente compatible con las versiones de Qiskit v1.3.x. Se recomienda encarecidamente actualizar de v1.3.x a v1.4 para poder ver las advertencias sobre las interfaces que cambiarán con Qiskit v2.0. La serie de versiones v1.4.x seguirá recibiendo soporte y correcciones de errores durante 6 meses y correcciones de seguridad durante 1 año después de esta versión. Las correcciones se realizarán mediante parches. Para más detalles sobre el calendario de lanzamientos y el ciclo de soporte, consulte: qiskit-sdk-version-strategy que documenta el calendario de lanzamientos con más detalle.
Características de los circuitos
- Se ha añadido un nuevo método
QuantumCircuit.estimate_duration()para calcular la duración estimada de la salida de un circuito programado a partir deltranspiler. Debe utilizarse si se necesita una estimación de la duración total del circuito en lugar del atributo obsoletoQuantumCircuit.durationobsoleto.
Circuitos obsoletos
-
Subclasificación
RegisteroBito cualquier subclase de ellos (por ejemplo,QuantumRegisteroQubit) está obsoleta a partir de Qiskit v1.4. La subclasificación de estos tipos nunca fue soportada explícitamente por Qiskit, y su significado nunca fue definido. En Qiskit v2.0, la subclasificación puede resultar imposible debido a limitaciones técnicas, y seguramente no se almacenará en un circuito. Esto se debe al traslado del modelo de datos al espacio Rust para mejorar el rendimiento. -
El parámetro opcional
dagen el constructor de las subclases deDAGNode(concretamenteDAGOpNode), que no se ha utilizado y se ha ignorado desde Qiskit v1.2, está ahora obsoleto a partir de Qiskit v1.4 y se eliminará en Qiskit v2.0. -
La clase Multiple-Control-Multiple-Target (MCMT) en
MCMTestá ahora obsoleta y se sustituye porMCMTGateque es una subclase propia deGatesubclase. El uso de una puerta en lugar de un circuito permite al compilador razonar sobre el objeto a un mayor nivel de abstracción y desbloquea el uso de múltiples plugins de síntesis. -
El módulo
qiskit.circuit.classicalfunctiony con él la claseClassicalFunctiony sus clases relacionadasclassical_function()yBooleanExpressionrelacionados, han quedado obsoletos a partir de Qiskit v1.4 y se eliminarán en Qiskit v2.0.Este cambio se realiza para evitar la dependencia de la biblioteca externa
tweedledum, que ya no es compatible con todas las plataformas y versiones de Python soportadas por Qiskit. Para una funcionalidad similar por favor utilice elPhaseOracleque va a tener una implementación que no utilizatweedledum, y elBitFlipOracleque se añadirá en Qiskit v2.0.Hasta que se añada
BitFlipOracle, un oráculo de cambio de fase puede convertirse en un oráculo de cambio de bit condicionándolo al qubit resultante, y aplicando puertas Hadamard antes y después de la aplicación del oráculo, como en el siguiente ejemplo (donde el oráculo está enqr_xy el resultado está enqr_y):from qiskit import QuantumRegister, QuantumCircuit from qiskit.circuit.library.phase_oracle import PhaseOracle bool_expr = "(x0 & x1 | ~x2) & x4" qr_x = QuantumRegister(4, "x") qr_y = QuantumRegister(1, "y") bit_flip_oracle = QuantumCircuit(qr_x, qr_y) phase_flip_oracle = PhaseOracle(bool_expr) controlled_phase_flip_oracle = phase_flip_oracle.control(1) bit_flip_oracle.h(qr_y) bit_flip_oracle.compose(controlled_phase_flip_oracle, qubits=[*qr_y, *qr_x], inplace=True) bit_flip_oracle.h(qr_y) print(bit_flip_oracle)Lo que se traduce en
┌───────────────┐ x_0: ─────┤0 ├───── │ │ x_1: ─────┤1 ├───── │ Phase Oracle │ x_2: ─────┤2 ├───── │ │ x_3: ─────┤3 ├───── ┌───┐└───────┬───────┘┌───┐ y: ┤ H ├────────■────────┤ H ├ └───┘ └───┘
Primitivas obsoletas
- Proporcionar entradas de tipo
BackendV1al argumentobackenddeBackendSamplerV2yBackendEstimatorV2está obsoleto desde Qiskit 1.4 y será eliminado en Qiskit 2.0. Utilice una instancia deBackendV2en su lugar.
Proveedores obsoletos
-
La clase
BackendV2Convertery las funcionesconvert_to_target()han quedado obsoletas en Qiskit v1.4 tras la desaparición de las funcionesBackendV1. La funciónconvert_to_target()se utiliza para construir unaTargeta partir de una serie de objetos del obsoletoBackendV1flujo de trabajo:BackendConfiguration,BackendPropertiesyPulseDefaults.BackendV2Converterse utiliza para convertirBackendV1aBackendV2y no se puede mantener una vezBackendV1se elimina. -
El método
BasicSimulator.run_experiment()ha quedado obsoleto y se eliminará en Qiskit v2.0. El método toma unQasmQobjExperimentcomo argumento de entrada, que ha quedado obsoleto junto con la claseQobjy otras funciones relacionadas. Puede llamarBasicSimulator.run()con unaQuantumCircuiten su lugar. -
Los tipos de error
BackendPropertyErroryBackendConfigurationErrorhan quedado obsoletos en Qiskit 1.4 y se eliminarán en Qiskit 2.0. Estos errores sólo se utilizan cuando se recuperan elementos de los obsoletos archivosBackendPropertiesyBackendConfigurationobjetos. -
Las clases
GateProperties,BackendStatusyqiskit.providers.models.JobStatusque forman parte del flujo de trabajoBackendV1han quedado obsoletas. Deberían haber quedado obsoletos en Qiskit 1.2 junto con los elementos relacionados enqiskit.providers.models.
Sintesis Obsoletas
-
La firma del argumento
atomic_evolutionen el constructor de las clasesLieTrotter,ProductFormulaySuzukiTrotterfue modificada en Qiskit v1.2 para mejorar la visualización del circuito de salida. La antigua firma ha quedado obsoleta en favor de la nueva alternativa. A partir de Qiskit v2.0, sólo será válida la nueva alternativa.Para migrar, modifique la llamada de
Callable[[Pauli | SparsePauliOp, float], QuantumCircuit]aCallable[[QuantumCircuit, Pauli | SparsePauliOp, float], None].
Deprecaciones del transpilador
-
En
DAGOpNode.sort_key,DAGOutNode.sort_keyyDAGInNode.sort_keyhan quedado obsoletos y se eliminarán en la versión de Qiskit v2.0. Estos atributos se utilizaban originalmente como clave lexicográfica para ordenar topológicamente los nodos de unDAGCircuit. Sin embargo, la clave ya no se utiliza para esto ya que la ordenación se realiza internamente en el código Rust ahora. Si utilizas este atributo, puedes recrear la clave a partir de los demás atributos de un nodo. Por ejemplo, puede utilizar una función como:def get_sort_key(node: DAGNode): if isinstance(node, (DAGInNode, DAGOutNode)): return str(node.wire) return ",".join( f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs) )que generará una cadena como hace la clave de ordenación.
-
Los siguientes usos del objeto
BackendPropertiesen el proceso de transpilación han quedado obsoletos a partir de Qiskit v1.4 y se eliminarán en Qiskit v2.0:backend_propargumento de entrada enDenseLayoutpropertiesargumento de entrada enVF2Layoutpropertiesycoupling_mapargumentos de entrada enVF2PostLayout. Obsérvese quecoupling_mapsólo se utilizó en presencia deproperties.backend_propsargumento de entrada enUnitarySynthesisbackend_propertiesargumento de entrada enPassManagerConfigbackend_propertiesenTarget.from_configuration()backend_propertiesengenerate_routing_passmanager()backend_propertiesengenerate_translation_passmanager()
La clase
BackendPropertiesclase ha quedado obsoleta desde Qiskit v1.2, junto con otros elementos delBackendV1flujo de trabajo, y se eliminará en Qiskit v2.0. La vía alternativa para comunicar la información de hardware al argumento de transpilación es laTargetque puede establecerse mediante el argumento de entradatarget. Las propiedades específicas de las instrucciones, como los errores de puerta o las duraciones, pueden añadirse a unaTargeten el momento de la construcción mediante el métodoTarget.add_instruction()método.En el caso de
generate_routing_passmanager()ygenerate_translation_passmanager()el argumentobackend_propertieses opcional y se sustituye cuando se rellena el argumento obligatoriotarget. El uso del argumento puede eliminarse con seguridad en 1.x siempre y cuando se pase un objetivo, que era el uso recomendado. -
La desaprobación de Pulse en Qiskit v1.3, incluye pases del constructor de calibración como
RXCalibrationBuilder. ElNormalizeRXAnglepass es un requisito deRXCalibrationBuilderpor lo que está obsoleto en Qiskit v1.4. La funciónrzx_templates()del módulo de calibración también queda obsoleta, ya que no se utiliza en nuestra base de código.
Visualización Obsoleto
-
Los parámetros
show_idleyshow_barrieren los cajones de la línea de tiempo están obsoletos a partir de Qiskit v1.4. Las alternativas son, respectivamente, los parámetrosidle_wiresyplot_barriers, introducidos en Qiskit v1.1, que son totalmente equivalentes. Los nombres de los parámetros heredados se eliminarán en Qiskit v2.0. -
En Qiskit v1.4, la función timeline drawer
timeline_drawer()emitirá una advertencia de desaprobación si no se especifica untargetpara obtener la duración de las instrucciones. Desde Qiskit v2.0 en adelante,targetserá necesario ytimeline_drawer()fallará si no se especifica. -
Proporcionar entradas de tipo
BackendV1al argumentobackenddeplot_gate_map(),plot_circuit_layout()yplot_error_map()son obsoletos a partir de Qiskit 1.4 y serán eliminados en Qiskit 2.0. Utilice una instancia deBackendV2en su lugar.
Herramientas Características en desuso
- El uso de argumentos posicionales en el constructor de
Resultestá obsoleto a partir de Qiskit 1.4, y se desactivará en Qiskit 2.0. Por favor, establezca todos los argumentos utilizando la sintaxis kwarg, es decir:Result(backend_name="name", ....). Además, el argumentoqobj_idestá obsoleto y ya no se utilizará en Qiskit 2.0. No obstante, seguirá siendo posible definirqobj_idcomo kwarg genérico, que aparecerá en el campo de metadatos con los demás kwarg genéricos.
Corrección de errores
- Se ha corregido un problema en
Target.has_calibration()yTarget.get_calibration()por el que pasar una puerta parametrizada no funcionaba como se esperaba. Consulte qiskit/#11657 y qiskit/#11658 para más información.
Otras notas
-
Si se pasa
property_setcomo argumento de palabra clave arbitraria al métodorun()de una subclase deBasePassManagercambiará el comportamiento en Qiskit v2.0. Actualmente se reenvía a las funciones de conversión de representación interna del gestor de pases, al igual que cualquier argumento arbitrario de palabra clave a ese método. A partir de Qiskit v2.0, la opción se utilizará en su lugar para establecer la semilla de laPropertySetpara la ejecución de la tubería, y el argumento no se pasará a las funciones de conversión.Esta nota sólo concierne a los implementadores de subclases de
BasePassManagerque hayan elegido que sus implementaciones de_passmanager_frontendy_passmanager_backendacepten un argumento de palabra clave llamadoproperty_set.