Skip to main content
IBM Quantum Platform

Notas de la versión de Qiskit 0.34


0.34.2

Terra 0.19.2

Preludio

Qiskit Terra 0.19.2 es predominantemente una versión de corrección de errores, pero ahora también viene con ruedas construidas para Python 3.10 en las principales plataformas.

Nuevas funciones

  • Se ha añadido soporte para la ejecución con Python 3.10. Esto incluye la publicación de binarios precompilados en PyPI para Python 3.10 en las plataformas compatibles.

Notas de actualización

Corrección de errores

  • Se ha corregido un error por el que el CVaRMeasurement intentaba convertir una matriz PauliSumOp a una matriz densa para comprobar si era diagonal. Para operadores de gran tamaño (> 16 qubits), este cálculo resultaba extremadamente costoso y generaba un error si no se habilitaba explícitamente mediante qiskit.utils.algorithm_globals.massive = True. La comprobación es ahora eficaz incluso para un gran número de qubits.

  • DAGCircuit.draw() y la función asociada dag_drawer() mostrarán ahora un mensaje de error más útil cuando el nombre de archivo proporcionado no sea válido.

  • QuantumCircuit.add_register() ya no causará referencias AncillaQubit referencias duplicadas en un circuito AncillaRegister cuyos bits ya están presentes.

  • Conversión fija de QuantumCircuits con condiciones clásicas en Clbit s a Instructions cuando se utiliza la función circuit_to_instruction() o el método QuantumCircuit.to_instruction() método. Por ejemplo, ahora funcionará lo siguiente:

    from qiskit.circuit import QuantumCircuit, Qubit, Clbit
    
    qc = QuantumCircuit([Qubit(), Clbit()])
    qc.h(0).c_if(qc.clbits[0], 0)
    qc.to_instruction()
  • Ahora los registros rechazarán correctamente los bits duplicados. Corregido #7446.

  • El backend FakeOpenPulse2Q mock ahora tiene T2 tiempos y errores de lectura almacenados para sus qubits. Se trata de valores arbitrarios, aproximadamente coherentes con los backends reales en el momento de su creación.

  • Fijar el orden de los qubits de las evoluciones de 2 qubits en el PauliEvolutionGatesi se utiliza con una síntesis de fórmula de producto. Por ejemplo, antes, la evolución de IIZ + IZI + IZZ

    from qiskit.circuit.library import PauliEvolutionGate
    from qiskit.opflow import I, Z
    operator = (I ^ I ^ Z) + (I ^ Z ^ I) + (I ^ Z ^ Z)
    print(PauliEvolutionGate(operator).definition.decompose())

    producido

         ┌───────┐
    q_0:Rz(2) ├────────
         ├───────┤
    q_1:Rz(2) ├─■──────
         └───────┘ │ZZ(2)
    q_2: ──────────■──────

    mientras que ahora se obtiene correctamente

         ┌───────┐
    q_0:Rz(2) ├─■──────
         ├───────┤ │ZZ(2)
    q_1:Rz(2) ├─■──────
         └───────┘
    q_2: ─────────────────
  • Se ha solucionado un problema en los cajones de los circuitos latex y mpl cuando los nombres de registro con varios guiones bajos en el nombre no se mostraban correctamente.

  • Los números negativos en las salidas de matriz de los cajones aparecerán ahora como números decimales en lugar de fracciones con numeradores y denominadores enormes. Al igual que los números positivos, seguirán siendo fracciones si el cociente es entre números pequeños.

  • Se ha corregido un problema con el método Target.get_non_global_operation_names() cuando se ejecutaba en un objetivo, se producía una excepción incorrecta en objetivos con operaciones globales ideales. Anteriormente, si se llamaba a este método en un objetivo que contenía cualquier operación ideal definida globalmente, donde las propiedades de la instrucción se establecen en None, este método lanzaba una excepción en lugar de tratar esa instrucción como global.

  • Se ha solucionado un problema con la función transpile() que podía fallar cuando se le pasaba un objeto Target directamente con el kwarg target .

  • Se ha corregido un problema con la función transpile() que podía fallar cuando el argumento backend era un BackendV2 o un Target a través del kwarg target que contenía operaciones ideales definidas globalmente.

  • Se ha corregido un problema por el que el trazado de esferas de Bloch podía provocar la aparición de un AttributeError en Jupyter o al intentar recortar las figuras para reducir su tamaño con Matplotlib 3.3 o 3.4 (pero no 3.5 ). Por ejemplo, el siguiente código se bloquearía previamente con un mensaje:

    AttributeError: 'Arrow3D' object has no attribute '_path2d'

    pero ahora funcionará con todas las versiones actuales compatibles de Matplotlib :

    from qiskit.visualization import plot_bloch_vector
    plot_bloch_vector([0, 1, 0]).savefig("tmp.png", bbox_inches='tight')
  • Se ha corregido un error en PauliSumOp.permute() por el que el objeto sobre el que se llamaba al método se permutaba in situ, en lugar de devolver una copia permutada. Este fallo sólo se producía en permutaciones que no modificaban el número de qubits del operador.

  • Corregido el método PauliEvolutionGate.inverse() , que anteriormente calculaba la inversa invirtiendo el tiempo de evolución. Esto sólo era la inversa correcta si el operador evolucionaba exactamente. En concreto, esto provocó que la inversa de las evoluciones temporales basadas en la trotterización fuera incorrecta.

  • El método QuantumInstance.execute() ya no mutará su entrada si se le da una lista de circuitos.

  • Corregida la serialización QPY de instrucciones personalizadas que tenían una definición no-op explícita. Antes se escribían y se leían como si fueran puertas opacas (sin definición). Ahora redondearán correctamente una definición vacía. Por ejemplo, lo siguiente será ahora correcto:

    import io
    from qiskit.circuit import Instruction, QuantumCircuit, qpy_serialization
    
    # This instruction is explicitly defined as a one-qubit gate with no
    # operations.
    empty = QuantumCircuit(1, name="empty").to_instruction()
    # This instruction will perform some operations that are only known
    # by the hardware backend.
    opaque = Instruction("opaque", 1, 0, [])
    
    circuit = QuantumCircuit(2)
    circuit.append(empty, [0], [])
    circuit.append(opaque, [1], [])
    
    qpy_file = io.BytesIO()
    qpy_serialization.dump(circuit, qpy_file)
    qpy_file.seek(0)
    new_circuit = qpy_serialization.load(qpy_file)[0]
    
    # Previously both instructions in `new_circuit` would now be opaque, but
    # there is now a correct distinction.
    circuit == new_circuit
  • Se ha añadido un atributo BackendV2.provider a las implementaciones de la clase BackendV2 clase abstracta. Anteriormente, BackendV2 los backends podían inicializarse con un proveedor, pero éste no era accesible a los usuarios.

  • Se ha corregido la compatibilidad con la clase QuantumInstance cuando se ejecuta con un BackendV2 backend. Anteriormente, al intentar utilizar un QuantumInstance con un BackendV2 habría dado lugar a un error.

  • Se ha corregido un error en VQE por el que los parámetros del ansatz seguían estando explícitamente ordenados ASCII por su nombre si se redimensionaba el ansatz. Esto provocaba un desajuste en el orden de los valores optimizados en el atributo optimal_point del objeto resultante.

    En particular, este error se producía si el usuario no establecía ningún ansatz y el VQE elegía un valor por defecto con 11 o más parámetros libres.

  • Detenido el analizador sintáctico en QuantumCircuit.from_qasm_str() y from_qasm_file() de aceptar programas OpenQASM que se identificaban como de una versión del lenguaje distinta de 2.0. Este analizador sintáctico es sólo para OpenQASM 2.0; el soporte para circuitos importados de OpenQASM 3.0 se añadirá en una próxima versión.

  • Corregida la serialización QPY de QuantumCircuit que contenían instrucciones de flujo de control. Anteriormente, si se intentaba serializar un circuito que contenía IfElseOp, WhileLoopOpo ForLoopOp la serialización fallaba. Corregido #7583.

  • Corregida la serialización QPY de QuantumCircuit que contiene subconjuntos de bits de un QuantumRegister o ClassicalRegister. Anteriormente, si se intentaba serializar un circuito como este, se trataba incorrectamente a estos bits como independientes Qubit o Clbit sin tener un registro establecido. Por ejemplo, si intentas serializar un circuito como:

    import io
    from qiskit import QuantumCircuit, QuantumRegister
    from qiskit.circuit.qpy_serialization import load, dump
    
    qr = QuantumRegister(2)
    qc = QuantumCircuit([qr[0]])
    qc.x(0)
    with open('file.qpy', 'wb') as fd:
        dump(qc, fd)

    cuando se cargue ese circuito ahora los registros se rellenarán correctamente por completo aunque el circuito sólo contenga un subconjunto de los bits del registro.

  • QFT ahora avisará si se instantiza o construye con parámetros que le hagan perder precisión, en lugar de lanzar un mensaje OverflowError. Esto puede ocurrir si el número de qubits es muy grande (algo más de 1000) sin que el grado de aproximación sea igualmente grande. El circuito se construirá ahora con éxito, pero algunos ángulos podrían ser indistinguibles de cero, debido a las limitaciones de los números de coma flotante de doble precisión.

Aer 0.10.3

Preludio

Qiskit Aer 0.10.3 es principalmente una versión de corrección de errores, la fijación de varios errores que se han descubierto desde la versión 0.10.2. Sin embargo, esta versión también introduce soporte para funcionar con Python 3.10 incluyendo ruedas binarias precompiladas en las principales plataformas. Esta versión también incluye ruedas binarias precompiladas para arm64 en macOS.

Nuevas funciones

  • Se ha añadido soporte para la ejecución con Python 3.10. Esto incluye la publicación de binarios precompilados en PyPI para Python 3.10 en las plataformas compatibles.

  • Se ha añadido compatibilidad con los sistemas M1 macOS. Los binarios precompilados para las versiones compatibles de Python >= 3.8 en arm64 macOS se publicarán ahora en PyPI para ésta y futuras versiones.

Notas de actualización

Corrección de errores

  • Se ha corregido un error en RelaxationNoisePass por el que se asumía que la duración de las instrucciones estaba siempre en unidades de tiempo dt, independientemente de la unidad real de la isntrucción. Ahora la conversión de unidades se gestiona correctamente para todas las unidades de duración de instrucción.

    Véase el nº 1453 para más detalles.

  • Corrige un problema con LocalNoisePass para las funciones de ruido que devuelven un QuantumCircuit para el ruido op. Estos se añadieron al DAG como una instrucción de circuito opaca que debe ser desenrollada para ser simulada. Esta corrección los compone de forma que las instrucciones de circuito se añaden al nuevo DAG y pueden simularse sin desenrollado adicional si el simulador admite todas las instrucciones de circuito.

    Véase el nº 1447 para más detalles.

  • Las transpilaciones multihilo para generar puertas diagonales funcionarán ahora correctamente si el número de puertas de un circuito supera fusion_parallelization_threshold. Anteriormente, diferentes subprocesos fusionaban ocasionalmente el mismo elemento en varios bloques, lo que provocaba resultados incorrectos.

  • Corrige un error con el truncamiento de circuitos en Qobjs parametrizados. Anteriormente, los parámetros de QObj parametrizados podían resolverse erróneamente si se truncaban los qubits no utilizados de sus circuitos, ya que los índices de los parámetros no se actualizaban después de eliminar las instrucciones de los qubits no medidos.

    Véase el nº 1427 para más detalles.

Ignis 0.7.0

No cambia

IBM Proveedor Q 0.18.3

No cambia


0.34.1

Terra 0.19.1

No cambia

Aer 0.10.2

Corrección de errores

  • Corregida la simulación de bucles for en la que el parámetro de bucle no se utilizaba en el cuerpo del bucle. Por ejemplo, antes este código fallaba, pero ahora tendrá éxito:

    import qiskit
    from qiskit.providers.aer import AerSimulator
    
    qc = qiskit.QuantumCircuit(2)
    with qc.for_loop(range(4)) as i:
        qc.h(0)
        qc.cx(0, 1)
    
    AerSimulator(method="statevector").run(qc)
  • Corrige un error en QuantumError.to_dict() donde las instrucciones de circuito N-qubit donde la instrucción ensamblada siempre se aplicaba a los qubits [0, ..., N-1] en lugar de a los qubits de la instrucción. Este fallo también afectaba a los modelos de ruido del dispositivo y del falso backend.

    Para más detalles, véase el número 1415.

Ignis 0.7.0

No cambia

IBM Proveedor Q 0.18.3

No cambia


0.34.0

Qiskit 0.34.0 incluye una versión puntual de Qiskit Aer: la versión 0.10.1, que corrige las regresiones de rendimiento de la versión 0.10.0 descubiertas inmediatamente después de su lanzamiento. Consulte a continuación las notas de la versión de Qiskit Aer 0.10.0 y 0.10.1.

Terra 0.19.1

No cambia

Aer 0.10.1

Preludio

El parche Qiskit Aer 0.10.1 corrige las regresiones de rendimiento introducidas en Qiskit Aer 0.10.0.

Corrección de errores

  • Corrección de la regresión de rendimiento en simulaciones de ruido debida al gran aumento de la sobrecarga de serialización para cargar modelos de ruido de Python a C++ resultante de llamadas de multiprocesamiento anidadas no intencionadas a Python. Para más detalles, véase el número 1407.

Aer 0.10.0

Preludio

La versión Qiskit Aer 0.10 incluye varias mejoras de rendimiento y de los modelos de ruido. Algunos puntos destacados son:

  • Rendimiento mejorado para simulaciones paralelas en GPU y HPC
  • Soporte para la simulación de circuitos que contengan instrucciones de flujo de control QASM 3.0
  • Soporte para ruido de relajación en circuitos programados en modelos de ruido de fondo
  • Soporte de pases de transpilador creados por el usuario para definir errores de puerta y modelos de ruido personalizados, e insertarlos en circuitos.

Nuevas funciones

  • Se ha añadido compatibilidad con las instrucciones de flujo de control QASM 3.0 introducidas en Qiskit-Terra 0.19.0. Las instrucciones admitidas son ForLoopOp, WhileLoopOp, ContinueLoopOp, BreakLoopOp, IfElseOp.

  • Se ha añadido una optimización de simulación por lotes para simulaciones GPU. Esta función opcional utilizará la memoria disponible en 1 o más GPUs para ejecutar múltiples disparos de simulación en paralelo y mejorar considerablemente el rendimiento en simulaciones multidisparo con modelos de ruido y/o mediciones intermedias.

    Esta opción está activada por defecto cuando se utiliza device="GPU" y una simulación method de "statevector" o "density_matrix" con el AerSimulator. Puede desactivarse configurando batched_shots_gpu=False en las opciones del simulador.

    Esta optimización es más beneficiosa para números de qubits pequeños o medianos en los que hay suficiente memoria en la GPU para ejecutar varias simulaciones en paralelo. El número máximo de qubits de circuito activos para activar esta optimización puede configurarse mediante la opción del simulador batch_shots_gpu_max_qubits . El valor por defecto de esta opción es 16.

  • Añadida la nueva opción max_shot_size a un ejecutor personalizado para ejecutar varias tomas de un circuito ruidoso en paralelo.

    Por ejemplo, configurando max_shot_size con un ejecutor personalizado:

    backend = AerSimulator(
       max_shot_size=1, max_job_size=1, executor=custom_executor)
    job = backend.run(circuits)

    dividirá las tomas de un circuito ruidoso en varios circuitos. Una vez finalizada la ejecución de todos los disparos individuales, los resultados del trabajo se combinan automáticamente en un único objeto Result que devuelve job.result().

  • Añadida la opción del simulador mps_swap_direction que permite al usuario determinar la dirección de los intercambios internos, cuando se insertan para una puerta de 2 qubits. Los valores posibles son "mps_swap_right" y "mps_swap_left". La dirección de los intercambios puede afectar al rendimiento, dependiendo del circuito.

  • Implementación de una nueva optimización del muestreo de mediciones para el método de simulación "matrix_product_state" del AerSimulator. Actualmente, este algoritmo sólo se utiliza cuando se miden todos los qubits y cuando la opción del simulador mps_sample_measure_algorithm simulator está configurada en "mps_probabilities".

  • Mejora del rendimiento de la instrucción de medida para el método de simulación "matrix_product_state" del AerSimulator.

  • Añadida una instrucción SaveClifford para guardar el estado del método de simulación del estabilizador como un Clifford objeto.

    Tenga en cuenta que esta instrucción es esencialmente equivalente a la instrucción SaveStabilizer , sin embargo esa instrucción devolverá el estado guardado como un StabilizerState en lugar de un objeto Clifford objeto.

  • Añadidos dos pases del transpilador para insertar errores cuánticos dependientes de instrucciones en los circuitos:

    • qiskit.providers.aer.noise.LocalNoisePass
    • qiskit.providers.aer.noise.RelaxationNoisePass

    El paso LocalNoisePass se puede utilizar para implementar modelos de ruido parametrizados personalizados mediante la definición de una función generadora de ruido de la forma

    def fn(
        inst: Instruction,
        qubits: Optional[List[int]] = None,
    ) -> InstructionLike

    que devuelve una instrucción de ruido (por ejemplo, QuantumError u otra instrucción) que puede depender de cualquier propiedad o parámetro de los argumentos de instrucción y qubit.

    Esta función puede aplicarse a todas las instrucciones de un circuito o a un subconjunto específico (consulte la documentación de LocalNoisePass para obtener más detalles)

    El RelaxationNoisePass es un caso especial del LocalNoisePass que utiliza una función de ruido predefinida que devuelve un producto tensorial de thermal_relaxation_error() en cada qubit de una instrucción, dependiente de la duración de la instrucción y de los parámetros de constante de tiempo de relajación suministrados del pase.

  • El modelo básico de ruido de dispositivo implementado por NoiseModel.from_backend() y AerSimulator.from_backend() se ha mejorado para permitir añadir errores de relajación dependientes de la duración en puertas de retardo de circuitos utilizando el RelaxationNoisePass.

    Para habilitar este ruido al ejecutar simulaciones ruidosas, primero debes programar tu circuito para insertar instrucciones de retardo programado de la siguiente manera:

    backend = AerSimulator.from_backend(ibmq_backend)
    scheduled_circuit = qiskit.transpile(
        circuit, backend=backend, scheduling_method='asap')
    result = backend.run(scheduled_circuit).result()

    Si el circuito se transpila sin ser programado (y además no contiene instrucciones de retardo) la simulación ruidosa no incluirá el efecto de los errores de relajación de retardo. En este caso, la simulación será equivalente a la simulación anterior de qiskit-aer 0.9, en la que el ruido de relajación sólo se añade a las instrucciones de compuerta en función de su duración, obtenida a partir de las propiedades del backend.

  • El constructor de QuantumError acepta ahora varios tipos nuevos de entrada como argumento de noise_ops , por ejemplo:

    import numpy as np
    
    from qiskit import QuantumCircuit
    from qiskit.circuit.library import IGate, XGate, Reset
    from qiskit.quantum_info import Kraus
    from qiskit.providers.aer.noise import QuantumError
    
    # Quantum channels
    kraus = Kraus([
        np.array([[1, 0], [0, np.sqrt(1 - 0.9)]], dtype=complex),
        np.array([[0, 0], [0, np.sqrt(0.9)]], dtype=complex)
    ])
    print(QuantumError(kraus))
    
    # Construction from a QuantumCircuit
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    error = QuantumError(qc)
    
    # Construction from a tuple of (Instruction, List[int]), where the list of
    # integers represents the qubits.
    error = QuantumError((Reset(), [0]))
    
    # Construction from an iterable of objects in the same form as above, but
    # where each also has an associated probability.
    error = QuantumError([
        ((IGate(), [0]), 0.9),
        ((XGate(), [0]), 0.1),
    ])
    
    # A short-hand for the iterable form above, where the qubits are implicit,
    # and each instruction is over all qubits.
    error = QuantumError([(IGate(), 0.9), (XGate(), 0.1)])

    Tenga en cuenta que el formato de entrada original basado en JSON está obsoleto.

  • Se ha añadido una función de utilidad qiskit.providers.aer.utils.transform_noise_model() para construir un modelo de ruido aplicando una función suministrada a todos los QuantumErrors del modelo de ruido.

  • Se han añadido dos funciones de utilidad qiskit.providers.aer.utils.transpile_quantum_error() y qiskit.providers.aer.utils.transpile_noise_model() para transpilar los circuitos contenidos en QuantumError, y todos los errores de un NoiseModel.

  • Se ha añadido la posibilidad de añadir objetos QuantumError directamente a un archivo QuantumCircuit sin convertir a una instrucción Kraus instrucción.

    Los circuitos que contienen errores cuánticos pueden ejecutarse ahora en los simuladores AerSimulator y QasmSimulator como alternativa a, o además de, la construcción de un NoiseModel para definir instrucciones de circuitos ruidosos.

    Ejemplo:

    from qiskit import QuantumCircuit
    from qiskit.providers.aer import AerSimulator
    from qiskit.providers.aer.noise import pauli_error
    
    error_h = pauli_error([('I', 0.95), ('X', 0.05)])
    error_cx = pauli_error([('II', 0.9), ('XX', 0.1)])
    
    qc = QuantumCircuit(3)
    qc.h(0)
    qc.append(error_h, [0])
    qc.cx(0, 1)
    qc.append(error_cx, [0, 1])
    qc.cx(0, 2)
    qc.append(error_cx, [0, 2])
    qc.measure_all()
    
    backend = AerSimulator(method='stabilizer')
    result = backend.run(qc).result()
    result.get_counts(0)

    Los circuitos que contienen errores cuánticos también pueden evaluarse utilizando el quantum_info canal cuántico y DensityMatrix clases.

Notas de actualización

  • Se ha cambiado el tipo de retorno de varias instrucciones de guardado para que sean las clases Terra de Qiskit correspondientes en lugar de matrices o diccionarios NumPy sin procesar. Los tipos que han cambiado son

  • Se ha cambiado el valor por defecto de standard_gates a None para todas las funciones de qiskit.providers.aer.noise.errors.standard_errors , ya que dichas funciones se han actualizado para que utilicen puertas estándar por defecto.

  • Cuando se proporciona un argumento no admitido a approximate_quantum_error(), ahora generará un NoiseError en lugar de un RuntimeError.

Notas sobre características en desuso

  • El uso de los métodos y atributos NumPy ndarray en el tipo de retorno de save_statevector(), save_density_matrix(), save_unitary(), y save_superop() ha quedado obsoleto, y dejará de funcionar en una futura versión. Estas instrucciones ahora devuelven qiskit.quantum_info para sus tipos de retorno. La compatibilidad parcial hacia atrás con el tratamiento de estos objetos como matrices NumPy se implementa mediante el reenvío de métodos a la matriz interna durante el período de desaprobación.

  • Pasar un objeto BackendProperties para el argumento backend de NoiseModel.from_backend() ha quedado obsoleto, ya que es incompatible con los ruidos de retardo dependientes de la duración, y se eliminará en una futura versión. Introduce un objeto Qiskit Terra BackendV1 en su lugar.

  • Se ha obsoleto la opción number_of_qubits del constructor QuantumError en favor de la determinación automática de la dimensión.

  • Se ha dejado obsoleta la opción standard_gates del constructor QuantumError en favor de la externalización de dicha funcionalidad de cambio de base. En muchos casos, puede transformar cualquier error en un error definido sólo con puertas específicas utilizando approximate_quantum_error().

  • Deprecated la opción standard_gates de todas las funciones en qiskit.providers.aer.noise.errors.standard_errors en favor de devolver errores en forma de una mezcla de puertas estándar tanto como sea posible por defecto.

  • Desaprobadas todas las funciones en errorutils porque son funciones de ayuda destinadas a ser utilizadas sólo para implementar funciones en qiskit.providers.aer.noise.errors.standard_errors y deberían haber sido proporcionadas como funciones privadas.

  • Se ha suprimido la opción standard_gates de NoiseModel.from_backend() en favor de la externalización de dicha funcionalidad de cambio de base.

  • Obsoleto NoiseModel.from_dict() para que el modelo de ruido sea independiente del formato Qobj (JSON).

  • Se han eliminado todas las variables, funciones y clases públicas de qiskit.providers.aer.noise.utils.noise_transformation excepto approximate_quantum_error() y approximate_noise_model(), ya que son funciones de ayuda destinadas a ser utilizadas únicamente para implementar las funciones de approximate_* y deberían haberse proporcionado como funciones privadas.

  • Obsoleto remap_noise_model() ya que el código C++ ahora trunca y remapea automáticamente los modelos de ruido si trunca los circuitos.

Otras notas

  • Los cambios en la implementación de la función approximate_quantum_error() pueden modificar el error aproximado resultante en comparación con Qiskit Aer 0.9.

Ignis 0.7.0

No cambia

IBM Proveedor Q 0.18.3

Corrección de errores

  • Corrección entregada en #1100 para un problema con la codificación y decodificación JSON cuando se utiliza ParameterExpressions en conjunto con Qiskit Terra 0.19.1 y superiores. Antes, las instancias de Parameter reconstruidas a partir de la salida JSON tenían identificadores únicos diferentes, lo que hacía que parecieran desiguales a las de entrada. Ahora tendrán las identidades de respaldo correctas.
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.