Skip to main content
IBM Quantum Platform

Notas de la versión de Qiskit 0.5


0.5

Terra 0.5

Punto destacado

Esta versión aporta una serie de mejoras a Qiskit, tanto en la experiencia del usuario como en su funcionamiento. Consulte el registro de cambios completo para obtener una descripción detallada de los cambios:

  • nuevo statevector simulators y mejoras en las funciones y el rendimiento de los existentes (en particular, del simulador C++), junto con una reorganización de la forma de trabajar con los backends centrada en la extensibilidad y la flexibilidad (mediante alias y proveedores de backends)
  • reorganización de las funciones asíncronas, proporcionando una interfaz más amigable para ejecutar trabajos de forma asíncrona a través de instancias Job
  • numerosas mejoras y correcciones en el conjunto de Terra, tanto para mayor comodidad de los usuarios (como permitir registros anónimos) como para mejorar la funcionalidad (como el trazado mejorado de circuitos)

Consideraciones acerca de la compatibilidad

Tenga en cuenta que en esta versión se han introducido varios cambios incompatibles con versiones anteriores como resultado del desarrollo en curso. Aunque algunas de estas funciones seguirán siendo compatibles durante un periodo de tiempo antes de quedar totalmente obsoletas, se recomienda actualizar los programas para prepararse para las nuevas versiones y aprovechar las nuevas funcionalidades.

QuantumProgram cambios

Varios métodos de la clase QuantumProgram están a punto de quedar obsoletos:

  • para interactuar con los backends y la API :

    La forma recomendada para abrir una conexión a la API IBM Q y para utilizar los backends es a través de las funciones de nivel superior directamente en lugar de los métodos QuantumProgram . En concreto, el método qiskit.register() proporciona el equivalente de la llamada anterior qiskit.QuantumProgram.set_api() . En una línea similar, hay un nuevo qiskit.available_backends(), qiskit.get_backend() y funciones relacionadas para consultar directamente los backends disponibles. Por ejemplo, el siguiente fragmento para la versión 0.4:

    from qiskit import QuantumProgram
    
    quantum_program = QuantumProgram()
    quantum_program.set_api(token, url)
    backends = quantum_program.available_backends()
    print(quantum_program.get_backend_status('ibmqx4')

    sería equivalente al siguiente fragmento para la versión 0.5:

    from qiskit import register, available_backends, get_backend
    
    register(token, url)
    backends = available_backends()
    backend = get_backend('ibmqx4')
    print(backend.status)
  • métodos de compilación y ejecución de programas :

    Las funciones de nivel superior ahora también proporcionan equivalentes para los métodos qiskit.QuantumProgram.compile() y qiskit.QuantumProgram.execute() . Por ejemplo, el siguiente fragmento de la versión 0.4:

    quantum_program.execute(circuit, args, ...)

    sería equivalente al siguiente fragmento para la versión 0.5:

    from qiskit import execute
    
    execute(circuit, args, ...)

En general, a partir de la versión 0.5 animamos a intentar hacer uso de los objetos y clases individuales directamente en lugar de depender de QuantumProgram. Por ejemplo, un QuantumCircuit puede instanciarse y construirse anexando directamente QuantumRegister, ClassicalRegister, y puertas. Consulte el ejemplo de actualización en la sección Inicio rápido, o los ejemplos using_qiskit_core_level_0.py y using_qiskit_core_level_1.py en el repositorio principal.

Cambios en el nombre del backend

Con el fin de proporcionar un marco más extensible para los backends, se han producido algunos cambios de diseño en consecuencia:

  • nombres de simuladores locales

    Los nombres de los simuladores locales se han homogeneizado para seguir el mismo patrón: PROVIDERNAME_TYPE_simulator_LANGUAGEORPROJECT - por ejemplo, el simulador de C++ que antes se llamaba local_qiskit_simulator es ahora local_qasm_simulator_cpp. Una visión general de los simuladores actuales:

    • QASM se supone que el simulador es como un experimento. Se aplica un circuito a algunos qubits y se observan los resultados de las mediciones, que se repiten durante muchos disparos para obtener un histograma de recuentos a través de result.get_counts().
    • Statevector es obtener el vector de estado completo ( 2n2^n amplitudes) después de evolucionar el estado cero a través del circuito, y puede obtenerse a través de result.get_statevector().
    • Unitary simulador es obtener la matriz unitaria equivalente del circuito, devuelta a través de result.get_unitary().
    • Además, puedes obtener estados intermedios de un simulador aplicando una instrucción snapshot(slot) en varios puntos del circuito. Esto guardará el estado actual del simulador en una ranura determinada, que podrá recuperarse posteriormente a través de result.get_snapshot(slot).
  • alias de backend :

    El SDK proporciona ahora un sistema de "alias" que permite utilizar automáticamente el simulador de mayor rendimiento de un tipo específico, si está disponible en su sistema. Por ejemplo, con el siguiente fragmento:

    from qiskit import get_backend
    
    backend = get_backend('local_statevector_simulator')

    el backend será el simulador de vectores de estado C++ si está disponible, recurriendo al simulador de vectores de estado Python si no está presente.

Nombres y parámetros más flexibles

Varias funciones del SDK se han hecho más flexibles y fáciles de usar:

  • circuito automático y nombres de registro

    qiskit.ClassicalRegister qiskit.QuantumRegister y pueden instanciarse sin necesidad de asignarles un nombre explícitamente: una nueva función de asignación automática de nombres les asigna un identificador: qiskit.QuantumCircuit

    q = QuantumRegister(2)

    Observe también que el orden de los parámetros se ha intercambiado QuantumRegister(size, name).

  • métodos que aceptan nombres o instancias

    En combinación con los cambios en los nombres automáticos, varios métodos como qiskit.Result.get_data() ahora aceptan tanto nombres como instancias para mayor comodidad. Por ejemplo, cuando se recuperan los resultados de un trabajo que tiene un solo circuito como:

    qc = QuantumCircuit(..., name='my_circuit')
    job = execute(qc, ...)
    result = job.result()

    Las siguientes llamadas son equivalentes:

    data = result.get_data('my_circuit')
    data = result.get_data(qc)
    data = result.get_data()
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.