Skip to main content
IBM Quantum Platform

Notes de publication de Qiskit 0.5


0.5

Terra 0.5

Mises en évidence

Cette version apporte un certain nombre d'améliorations à Qiskit, tant au niveau de l'expérience utilisateur que sous le capot. Veuillez vous référer au changelog complet pour une description détaillée des changements - les points forts sont les suivants :

  • de nouveaux sites statevector simulators et des améliorations des fonctionnalités et des performances des sites existants (en particulier le simulateur C++), ainsi qu'une réorganisation de la manière de travailler avec les backends axée sur l'extensibilité et la flexibilité (utilisation d'alias et de fournisseurs de backends)
  • réorganisation des fonctionnalités asynchrones, fournissant une interface plus conviviale pour l'exécution asynchrone de travaux via les instances Job
  • de nombreuses améliorations et corrections dans l'ensemble de Terra, à la fois pour la commodité des utilisateurs (comme l'autorisation des registres anonymes) et pour l'amélioration des fonctionnalités (comme l'amélioration du tracé des circuits)

Compatibility Considerations

Veuillez noter que plusieurs changements rétrocompatibles ont été introduits dans cette version en raison du développement en cours. Bien que certaines de ces fonctionnalités continueront d'être prises en charge pendant un certain temps avant d'être totalement obsolètes, il est recommandé de mettre à jour vos programmes afin de vous préparer aux nouvelles versions et de tirer parti des nouvelles fonctionnalités.

QuantumProgram modifications

Plusieurs méthodes de la classe QuantumProgram sont en passe d'être obsolètes :

  • pour interagir avec les backends et l'API :

    Pour ouvrir une connexion à l'API Q de IBM et utiliser les backends, il est recommandé d'utiliser directement les fonctions de haut niveau plutôt que les méthodes de QuantumProgram . En particulier, la méthode qiskit.register() fournit l'équivalent de l'appel précédent qiskit.QuantumProgram.set_api() . Dans le même ordre d'idées, il existe un nouveau site qiskit.available_backends(), qiskit.get_backend() et des fonctions connexes permettant d'interroger directement les backends disponibles. Par exemple, l'extrait suivant pour la version 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')

    serait équivalent à l'extrait suivant pour la version 0.5:

    from qiskit import register, available_backends, get_backend
    
    register(token, url)
    backends = available_backends()
    backend = get_backend('ibmqx4')
    print(backend.status)
  • les méthodes de compilation et d'exécution des programmes :

    Les fonctions de niveau supérieur fournissent désormais des équivalents pour les méthodes qiskit.QuantumProgram.compile() et qiskit.QuantumProgram.execute() . Par exemple, l'extrait suivant de la version 0.4:

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

    serait équivalent à l'extrait suivant pour la version 0.5:

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

En général, à partir de la version 0.5, nous vous encourageons à essayer d'utiliser directement les objets et les classes individuels au lieu de vous fier à QuantumProgram. Par exemple, un QuantumCircuit peut être instancié et construit en ajoutant directement QuantumRegister, ClassicalRegister, et des portes. Veuillez consulter l'exemple de mise à jour dans la section Démarrage rapide, ou les exemples using_qiskit_core_level_0.py et using_qiskit_core_level_1.py sur le dépôt principal.

Changements de nom du backend

Afin de fournir un cadre plus extensible pour les backends, il y a eu quelques changements de conception en conséquence :

  • les noms des simulateurs locaux

    Les noms des simulateurs locaux ont été homogénéisés afin de suivre le même schéma : PROVIDERNAME_TYPE_simulator_LANGUAGEORPROJECT - par exemple, le simulateur C++ précédemment nommé local_qiskit_simulator est maintenant local_qasm_simulator_cpp. Un aperçu des simulateurs actuels :

    • QASM le simulateur est censé être une sorte d'expérience. Vous appliquez un circuit sur certains qubits et observez les résultats des mesures - et vous répétez l'opération pour de nombreuses prises de vue afin d'obtenir un histogramme des comptages via result.get_counts().
    • Statevector est d'obtenir le vecteur d'état complet ( 2n2^n amplitudes) après évolution de l'état zéro à travers le circuit, et peut être obtenu via result.get_statevector().
    • Unitary est d'obtenir l'équivalent matriciel unitaire du circuit, renvoyé par result.get_unitary().
    • En outre, vous pouvez obtenir des états intermédiaires à partir d'un simulateur en appliquant une instruction snapshot(slot) à différents endroits du circuit. Cela permet d'enregistrer l'état actuel du simulateur dans un emplacement donné, qui peut être récupéré ultérieurement via result.get_snapshot(slot).
  • les alias du backend :

    Le SDK propose désormais un système d'"alias" qui permet d'utiliser automatiquement le simulateur le plus performant d'un type spécifique, s'il est disponible dans votre système. Par exemple, avec l'extrait suivant :

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

    le backend sera le simulateur de vecteur d'état C++ s'il est disponible, et le simulateur de vecteur d'état Python s'il n'est pas présent.

Noms et paramètres plus flexibles

Plusieurs fonctions du SDK ont été rendues plus flexibles et plus conviviales :

  • noms des circuits automatiques et des registres

    qiskit.ClassicalRegister, qiskit.QuantumRegister et qiskit.QuantumCircuit peuvent désormais être instanciés sans qu'un nom leur soit explicitement attribué - une nouvelle fonction d'attribution automatique de noms leur attribuera automatiquement un identifiant :

    q = QuantumRegister(2)

    Veuillez également noter que l'ordre des paramètres a été inversé QuantumRegister(size, name).

  • méthodes acceptant des noms ou des instances

    En combinaison avec les modifications apportées à l'attribution automatique des noms, plusieurs méthodes telles que qiskit.Result.get_data() acceptent désormais à la fois les noms et les instances, pour plus de commodité. Par exemple, lors de l'extraction des résultats d'un travail ayant un seul circuit, tel que

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

    Les appels suivants sont équivalents :

    data = result.get_data('my_circuit')
    data = result.get_data(qc)
    data = result.get_data()
Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.