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
statevectorsimulatorset 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éthodeqiskit.register()fournit l'équivalent de l'appel précédentqiskit.QuantumProgram.set_api(). Dans le même ordre d'idées, il existe un nouveau siteqiskit.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()etqiskit.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_simulatorest maintenantlocal_qasm_simulator_cpp. Un aperçu des simulateurs actuels :QASMle 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 viaresult.get_counts().Statevectorest d'obtenir le vecteur d'état complet ( amplitudes) après évolution de l'état zéro à travers le circuit, et peut être obtenu viaresult.get_statevector().Unitaryest d'obtenir l'équivalent matriciel unitaire du circuit, renvoyé parresult.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 viaresult.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.QuantumRegisteretqiskit.QuantumCircuitpeuvent 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 queqc = 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()