Notes de publication de Qiskit 0.46
0.46.3
Prélude
Qiskit 0.46.3 est une version mineure de correction de bogues et de backport pour la série 0.46. Il s'agit également de la dernière version de la version mineure 0.46, qui marque la fin de sa durée de vie.
Corrections des erreurs
-
Correction d'un décorateur manquant dans
C3SXGatequi le faisait échouer siGate.to_matrix()était appelé. La matrice de la porte est maintenant retournée comme prévu. -
L'attribut
QuantumCircuit.parameterssera désormais correctement vide lors de l'utilisation deQuantumCircuit.copy_empty_like()sur un circuit paramétrique. Auparavant, un cache interne était copié sans être invalidé. Correction #12617. -
Corrige le passage du
SolovayKitaevlors du chargement des approximations de base à partir d'un fichier.npyexistant. Auparavant, le chargement d'une approximation stockée qui permettait des réductions supplémentaires (par exemple, en raison d'annulations de portes) pouvait entraîner un échec de l'exécution. En outre, la différence de phase globale du produit de porte U(2) et de la représentation SO(3) a été perdue au cours d'une procédure de sauvegarde et de rechargement. Corrections Qiskit/qiskit#12576. -
Le constructeur
GenericBackendV2permettait de créer des backends malformés car il acceptait des portes de base qui ne pouvaient pas être allouées dans la taille du backend. En d'autres termes, un backend avec un seul qubit ne doit pas accepter une base avec des portes à deux qubits. -
Précédemment,
DAGCircuit.replace_block_with_op()permettait de placer une opérationn-qubit sur un bloc demqubits, laissant le DAG dans un état invalide. Ce comportement a été corrigé et la tentative soulèvera une erreur de typeDAGCircuitError.
Autres remarques
- Cette version étend le fichier constraints.txt avec une liste complète des numéros de version épinglés des dépendances de Qiskit 0.46.3. Comme cette version marque la fin de vie de la version 0.46, elle garantit un environnement d'installation reproductible basé sur les spécifications de la version constraints.txt.
0.46.2
Prélude
Qiskit 0.46.2 est une version mineure de correction de bogues et de portage pour la série 0.46.
Nouvelles fonctions
- Cette version de Qiskit finalise la prise en charge de NumPy 2.0. Qiskit continuera à prendre en charge Numpy 1.x et 2.x dans un avenir proche.
Corrections des erreurs
-
Correction d'un problème avec
circuit_drawer()ouQuantumCircuit.draw()lors de l'utilisation de l'option de sortiemploù le programme se bloquait si le circuit dessiné avait une opération ControlFlow et que l'optionfoldétait réglée sur -1 (ce qui signifie pas de pli). Correction #12012. -
La fonction
EvolvedOperatorAnsatzgère désormais correctement le cas où l'argument des opérateurs est une liste vide. Auparavant, cela entraînait une erreur. -
A partir de maintenant,
EvolvedOperatorAnsatzn'aura pas de qregs quand il y a zéro qubit, au lieu d'avoir une instance avec zéro qubitQuantumRegisteravec zéro qubit. Ce comportement est plus cohérent avec celui de la superclasseQuantumCircuit. -
La méthode
Instruction.repeat()déplace maintenant un ensembleconditionvers l'extérieur retournéInstructionet laisse les portes intérieures de sa définition inconditionnelles. Auparavant, la méthode laissait les instancesClassicalRegisterdans la définition interne, ce qui était un état invalide et se manifestait par des bogues apparemment sans rapport par la suite, par exemple lors de la transpilation ou de l'exportation. Correction #11935. -
Correction d'une imprécision en virgule flottante lors de la mise à l'échelle de certaines unités d'impulsion entre les secondes et les nanosecondes. Si l'impulsion était définie symboliquement, une erreur inutile en virgule flottante pourrait être introduite par la mise à l'échelle pour certaines constructions de
symengine, ce qui pourrait se traduire par des résultats inattendus une fois que les symboles sont entièrement liés. Voir #12392. -
Correction d'un bogue dans
qiskit.visualization.pulse_v2.interface.draw()qui ne dessinait pas les horaires de pouls lorsque la fonction de dessin était appelée avec un argumentBackendV2en argument. Comme le backend V2 ne signale pas les fréquences des canaux matériels, le dessin généré indiquera "no freq" (pas de fréquence) sous l'étiquette de chaque canal. -
La passe
VF2Layoutlèverait une exception si on lui fournissait une instanceTargetsans contraintes de connectivité. Ce serait le cas pour les cibles d'Aer 0.13. Le problème est maintenant corrigé. -
Le plugin par défaut
initne soulevait pas correctement une erreur de typeTranspilerErrorlorsqu'il était appelé avec un niveau d'optimisation invalide. -
PassManager.run()ne perdra plus de temps à se sérialiser lorsqu'il recevra plusieurs entrées s'il ne doit travailler qu'en série. -
L'analyseur OpenQASM 2.0 (
qasm2.load()etqasm2.loads()) peut maintenant évaluer les expressions gate-angle comprenant des opérandes entiers qui déborderaient de l'entier de taille système. Ceux-ci seront évalués dans un contexte de virgule flottante en double précision, comme le reste de l'expression l'a toujours été. Attention : un nombre entier arbitrairement grand ne sera pas nécessairement représentable de manière exacte en virgule flottante double précision, de sorte qu'il est possible que, quelle que soit la manière dont le circuit a été généré, il ait déjà perdu toute précision numérique modulo .
0.46.1
Prélude
Qiskit 0.46.1 est une version mineure de correction de bugs pour la série 0.46.
Corrections des erreurs
-
Correction d'un problème avec
convert_to_target()où le convertisseur ignorait à tort les instructions de flux de contrôle si elles étaient spécifiées dans l'attributBackendConfiguration.supported_instructions, qui est l'endroit typique où les instructions de flux de contrôle sont spécifiées dans un objetBackendConfigurationobjet. Correction #11872. -
L'appel à
EquivalenceLibrary.set_entry()mettra désormais correctement à jour l'objet graphique interne de la bibliothèque. Auparavant, les métadonnées étaient mises à jour, mais la structure du graphe restait inchangée, ce qui signifiait que des utilisateurs tels queBasisTranslatorcontinueraient à utiliser les anciennes règles. Correction #11958. -
BasePassManager.run()ne laissera plus échapper l'ancienPropertySetdans les nouveaux flux de travail lorsqu'elle est appelée plusieurs fois. Auparavant, les mêmesPropertySetque précédemment était utilisée pour initialiser les exécutions suivantes, ce qui pouvait signifier que des informations non valides sur les propriétés étaient communiquées aux tâches. Le comportement correspond désormais à celui de Qiskit 0.44. Correction #11784. -
Mise à jour des propriétés et des informations de configuration du
FakeOpenPulse2Qbackend. Des propriétés manquantes ont été ajoutées pour certaines portes définies dans les valeurs par défaut des impulsions afin que les portes définies dans les deux emplacements soient cohérentes. -
Le module d'outils de surveillance
qiskit.tools.monitor(inclus dans le module désormais obsolèteqiskit.tools) a été mis à jour pour fonctionner comme prévu. La fonctionjob_monitor()fonctionne désormais avec lesJobles instances. Les fonctionsbackend_overview()etbackend_monitor()devraient maintenant fonctionner comme prévu. -
InstructionDurations.from_backend()renvoie désormais une instance de n'importe quelle sous-classe deInstructionDurationsau lieu de la classe de base.
0.46.0
Prélude
La version 0.46.0 est la dernière version mineure de la série 0.x. Cette version ajoute principalement de nouveaux avertissements de dépréciation pour les changements d'API à venir dans la future version majeure 1.0.0. Il est entièrement compatible avec les versions de Qiskit 0.45.x. Il est fortement recommandé de mettre à jour 0.45.x vers 0.46.0 afin de pouvoir voir les avertissements concernant les interfaces qui seront modifiées avec Qiskit 1.0.0.
La série de versions 0.46.x continuera à être prise en charge et à recevoir des corrections de bogues et de sécurité par le biais de correctifs pendant 6 mois après cette version. Pour plus de détails sur le calendrier des versions et le cycle de support, voir : start/install#qiskit-versioning qui documente le calendrier des versions de manière plus détaillée.
Si votre projet dépend de Qiskit, il peut s'appuyer sur des fonctionnalités qui ne seront plus prises en charge dans Qiskit 1.0.0. Pour cette raison, nous vous recommandons de plafonner de manière proactive votre version prise en charge à <1.0. La sortie de Qiskit 1.0.0 est prévue environ deux semaines après celle de Qiskit 0.46.0, le 2024-02-15, et pourrait ne pas être encore disponible au moment où vous lisez ce message.
La structure d'emballage de Qiskit est en train de changer dans Qiskit 1.0, et malheureusement les nouvelles exigences ne peuvent pas être entièrement communiquées à pip, surtout si les commandes pip install --upgrade sont exécutées après que l'environnement a été initialement configuré. Toutes les versions de Qiskit antérieures à 1.0 (y compris celle-ci) ont un conflit d'installation avec Qiskit 1.0 que pip ne résoudra pas.
Si import qiskit soulève un ImportError pour vous, votre environnement est dans un état invalide, et les versions de Qiskit 0.45/0.46 et 1.0 sont toutes deux accessibles, ce qui se traduira par un code subtilement cassé. Vous devrez créer un nouvel environnement virtuel et vous assurer qu'une seule des deux versions est installée. En particulier, si vous avez l'intention d'installer Qiskit 1.0, aucun paquet dépendant de qiskit-terra ne doit être installé; ces paquets sont incompatibles avec Qiskit 1.0 et doivent être mis à jour. Si vous avez l'intention d'installer Qiskit 0.45 ou 0.46, vous devez vous assurer que vous n'avez pas essayé d'installer qiskit>=1.0.
Si vous développez une bibliothèque basée sur Qiskit et que vous avez encore une dépendance sur qiskit-terra, vous devez publier d'urgence un nouveau paquetage qui ne dépend que de qiskit. Depuis la version 0.44, le paquet qiskit ne contient que le noyau du compilateur qiskit-terra (le composant qui est maintenant simplement appelé "Qiskit"), donc si votre version minimale est 0.44, vous pouvez en toute sécurité passer d'une dépendance qiskit-terra>=0.44 à qiskit>=0.44 sans changement dans ce qui sera installé. Pour plus de détails et de recommandations sur les tests et la préparation, voir la section du guide de migration destinée aux développeurs.
Nouvelles fonctions
-
Une nouvelle fonction,
qs_decomposition()a été ajoutée àqiskit.synthesis. Cette fonction permet d'appliquer la décomposition quantique de Shannon à des unitaires arbitraires. -
Un nouveau module
qiskit.providers.basic_providera été introduit pour remplacerqiskit.providers.basicaer. Ce module contient des outils de fournisseur qui reflètent ceux du fournisseurBasicAeret offre un simulateur unique, non efficace, basé sur les vecteurs d'état :BasicSimulator. Ce simulateur est basé sur l'interfaceBackendV2et est exclusivement destiné aux tests et au prototypage simple. Pour des capacités de simulation plus avancées, veuillez vous référer au paquetageqiskit-aer. Voir la note de dépréciation deBasicAerpour les directives de migration. -
L'interface
Targetl'interface et le pipeline de transpilation supportent maintenant les définitions de cibles avecnum_qubits=None. Il s'agit de permettre la création de simulateurs basés surTarget-avec un nombre flexible de qubits. Une cible avecnum_qubits=Nonecontiendra exclusivement des instructions globales (avecqargs=None) et lorsqu'elle est donnée au transpileur, on s'attend à ce que le transpileur ne redimensionne pas le circuit. Ce changement dans leTargetexige que les futurs passages du transpileur prennent en compte le cas oùtarget.num_qubits is None. -
Une nouvelle classe,
GenericBackendV2a été ajoutée au moduleqiskit.providers.fake_providermodule. Cette classe est configurable, et construit une instance deBackendV2qui peut s'exécuter localement (dans l'esprit des faux backends). Les utilisateurs peuvent configurer le nombre de qubits, les portes de base, la carte de couplage, la capacité à exécuter des circuits dynamiques (instructions de flux de contrôle), les calibrations d'instructions et le dtm du backend sans avoir à s'occuper de la construction manuelle de la cible. Les propriétés des Qubits et des portes sont générées par échantillonnage aléatoire à partir des plages par défaut. La graine de cette génération aléatoire peut être fixée pour garantir la reproductibilité de la sortie du backend. Il est important de noter que ce backend ne prend en charge que les portes de la bibliothèque standard. Si vous avez besoin d'un backend plus flexible, vous avez toujours la possibilité d'instancier directement un objetTargetà utiliser pour la transpilation.Exemple d'utilisation 1 :
from qiskit import QuantumCircuit, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a simple circuit circuit = QuantumCircuit(3) circuit.h(0) circuit.cx(0,1) circuit.cx(0,2) circuit.measure_all() circuit.draw('mpl') # Define backend with 3 qubits backend = GenericBackendV2(num_qubits=3) # Transpile and run transpiled_circuit = transpile(circuit, backend) result = backend.run(transpiled_circuit).result()Exemple d'utilisation 2 :
from qiskit import QuantumCircuit, ClassicalRegister, transpile from qiskit.providers.fake_provider import GenericBackendV2 # Create a circuit with classical control creg = ClassicalRegister(19) qc = QuantumCircuit(25) qc.add_register(creg) qc.h(0) for i in range(18): qc.cx(0, i + 1) for i in range(18): qc.measure(i, creg[i]) qc.ecr(20, 21).c_if(creg, 0) # Define backend with custom basis gates # and control flow instructions backend = GenericBackendV2( num_qubits=25, basis_gates = ["ecr","id","rz","sx","x"], control_flow=True) #Transpile transpiled_qc = transpile(qc, backend)RemarqueLes propriétés du bruit généré par cette classe n'imitent aucun dispositif quantique concret et ne doivent pas être utilisées pour mesurer des comportements concrets du backend. Il s'agit de "valeurs par défaut raisonnables" qui peuvent être utilisées pour tester la fonctionnalité générale de l'interface backend. Pour une simulation plus précise des dispositifs existants, vous pouvez construire manuellement un modèle de bruit à partir du backend réel en utilisant la fonctionnalité offerte sur
qiskit-aer.
Mise à niveau
- La version minimale requise pour
symenginea été portée à >= 0.11. Cela a permis de supprimer les solutions de contournement deParameterExpression.is_real()pour gérer un bogue dans les versions antérieures desymengine.
Remarques concernant la dépréciation
-
Les
ScheduleBlock.scoped_parameters()etScheduleBlock.search_parameters()ont été supprimées. Ces méthodes produisent des objetsParameterdont les noms ont été modifiés pour indiquer la portée de l'impulsion. L'intention initiale de ces méthodes était que ces objets soient toujours liés aux objets originaux sans échelleParameterd'origine. Toutefois, la modification du nom rompt le lien, de sorte que l'attribution à l'aide de la version délimitée ne fonctionne pas. Voir #11654 pour plus de détails. -
Passant a
QuasiDistribution,ProbDistributionou un dictionnaire de distribution à l'argumentdatade la fonction de visualisation est désormais obsolèteplot_histogram()est désormais obsolète. La prise en charge de cette procédure sera supprimée dans la version de Qiskit 1.0. Si vous souhaitez tracer un histogramme à partir de aQuasiDistribution,ProbDistributionou d'un dictionnaire de distribution, vous devez utiliser la fonctionplot_distribution()à la place. -
Le paquet
qiskit-terraPython est obsolète et ne recevra plus de mises à jour à partir de Qiskit 1.0.0. Si vous installezqiskit-terraseul, il ne sera plus mis à jour pour Qiskit>=1.0.0. Si vous utilisez qiskit sans le paquetageqiskit, unFutureWarningsera émis à l'importation deqiskitpour indiquer que vous n'utilisez pas le paquetqiskit. -
L'utilisation de l'objet
qiskit.Aerest obsolète et sera supprimée dans Qiskit 1.0. Vous devriez plutôt utiliser le même objet de l'espace de nomsqiskit_aer, qui est un remplacement direct. -
L'importation à partir de
qiskit.providers.aerest obsolète et ne fonctionnera plus dans Qiskit 1.0. Vous devriez plutôt importer deqiskit_aer, qui est un remplacement direct. -
L'exécution de tâches d'impulsion sur des backends à partir de
qiskit.providers.fake_providerest obsolète, et tout support sera supprimé dans Qiskit 1.0. Cela est dû au fait que Qiskit Aer a supprimé sa fonctionnalité de simulation pour ces travaux. Pour les charges de travail de simulation hamiltonienne de bas niveau, envisagez d'utiliser une bibliothèque spécialisée telle que Qiskit Dynamics. -
Le module
qiskit.transpiler.synthesisest obsolète et sera supprimé dans Qiskit 1.0. Les objets suivants ont été déplacés :qiskit.transpiler.synthesis.aqca été déplacé versqiskit.synthesis.unitary.aqc(à l'exception deqiskit.synthesis.unitary.aqc.AQCSynthesisPlugin).qiskit.synthesis.unitary.aqc.AQCSynthesisPlugina été déplacé surqiskit.transpiler.passes.synthesis.AQCSynthesisPlugin.qiskit.transpiler.synthesis.graysynth()a été déplacé versqiskit.synthesis.synth_cnot_phase_aam().qiskit.transpiler.synthesis.cnot_synth()a été déplacé versqiskit.synthesis.synth_cnot_count_full_pmh().
-
Le module
qiskit.tools.jupyterest obsolète et sera supprimé dans Qiskit 1.0.0. Ce module est obsolète car ses fonctionnalités sont liées à l'ancien paquetageqiskit-ibmq-providerqui n'est plus pris en charge et qui ne l'est plus non plusBackendV1. Si vous utilisez cette fonctionnalité actuellement, des outils jupyter similaires existent dans le paquet qiskit-ibm-provider qui peut être utilisé à la place. -
Le module
qiskit.tools.monitorest obsolète et sera supprimé dans Qiskit 1.0.0. Ce module est obsolète car ses fonctionnalités sont liées à l'ancien paquetageqiskit-ibmq-providerqui n'est plus pris en charge et qui ne l'est plus non plusBackendV1. -
Le module
qiskit.tools.visualizationest obsolète et sera supprimé dans Qiskit 1.0.0. Ce module était une redirection héritée de l'emplacement original du module de visualisation de Qiskit et a été déplacé versqiskit.visualizationdans Qiskit 0.8.0. Si vous utilisez toujours ce chemin, vous pouvez simplement mettre à jour vos importations deqiskit.tools.visualizationàqiskit.visualization. -
Le module
qiskit.tools.eventset l'utilitaireprogressbar()qu'il exposait sont obsolètes et seront supprimés dans la version 1.0.0 de Qiskit. Les fonctionnalités de ce module n'ont pas été largement utilisées et ont été mieux couvertes par des logiciels spécialisés tels que tqdm. -
Le module
qiskit.toolsest obsolète et sera supprimé dans Qiskit 1.0.0. A l'exception des sous-modules spécifiques (qiskit.tools.jupyter,qiskit.tools.monitor,qiskit.tools.eventsetqiskit.tools.visualization), la fonctionnalité de ce module a été migrée versqiskit.utils. Si vous utilisez une fonctionnalité de ce module, vous pouvez mettre à jour vos importations deqiskit.toolsàqiskit.utils. -
Le module
qiskit.testest obsolète. Ce module contient des outils et des aides pour les tests internes de Qiskit, et la plupart de ses fonctionnalités ont été déplacées ou ne sont plus utilisées dans Qiskit. En pratique, le module n'a jamais été conçu pour être utilisé à l'extérieur. Si une partie du code du module est absolument nécessaire au-delà de Qiskit, envisagez de copier ce code dans votre propre infrastructure de test. -
Le module
qiskit.quantum_info.synthesisest obsolète et sera supprimé dans Qiskit 1.0.0. Les objets suivants ont été déplacés versqiskit.synthesis:OneQubitEulerDecomposera été déplacé versqiskit.synthesis.one_qubitTwoQubitBasisDecomposera été déplacé versqiskit.synthesis.two_qubitsXXDecomposera été déplacé versqiskit.synthesis.two_qubitstwo_qubit_cnot_decompose()a été déplacé versqiskit.synthesis.two_qubits
La classe
Quaterniona été migrée deqiskit.quantum_info.synthesisversqiskit.quantum_info. Ce changement n'a pas affecté le chemin d'importation habituel de la classe, mais l'accès à la classe viaqiskit.quantum_info.synthesisest désormais obsolète.Cette fonction est obsolète et sera supprimée dans Qiskit 1.0.0:
cnot_rxx_decompose()
-
L'ancien module d'analyseur OpenQASM 2, présent auparavant dans
qiskit.qasma été supprimé. Elle sera supprimée dans la version de Qiskit 1.0.0. L'ancien analyseur OpenQASM 2 a été remplacé par le moduleqiskit.qasm2qui fournit un analyseur plus rapide et plus correct pour OpenQASM 2. -
La fonction
qiskit.converters.ast_to_dagest obsolète et sera supprimée dans la version de Qiskit 1.0.0. Il était auparavant utilisé pour convertir l'arbre syntaxique abstrait généré par l'ancien analyseur OpenQASM 2 (dans le moduleqiskit.qasmqui a été supprimé) et de le convertir directement en un fichierDAGCircuit. Comme l'ancien analyseur OpenQASM 2 a été mis au rancart, cette fonction n'aura plus de raison d'être après la suppression de l'ancien analyseur. Si vous l'utilisiez auparavant, vous pouvez à la place analyser vos fichiers OpenQASM 2 dans un fichierQuantumCircuità l'aide de l'optionQuantumCircuit.from_qasm_file()ouQuantumCircuit.from_qasm_str()et convertir ensuite ceQuantumCircuitenDAGCircuità l'aide decircuit_to_dag(). -
La méthode
QuantumCircuit.qasm()utilisée pour générer une représentation OpenQASM 2 de l'objetQuantumCircuita été dépréciée et sera supprimée dans la version de Qiskit 1.0.0. Lesqasm2.dump()ouqasm2.dumps()qui offrent des fonctionnalités similaires doivent être utilisées à la place. Si vous utilisiez la méthodeQuantumCircuit.qasm()pour générer une sortie formatée pygments, vous devriez plutôt vous tourner vers le paquetage autonomeopenqasm-pygmentsqui fournit cette fonctionnalité (commeqasm2.dump()etqasm2.dumps()ne fournissent pas de sortie colorée pygments). -
La classe de base
ParametricPulseet les pulses sont maintenant obsolètes et seront supprimés dans Qiskit 1.0. Comprend :ParametricPulseConstantDragGaussianGaussianSquare
Cette classe a été remplacée par
SymbolicPulseet la bibliothèque d'impulsions correspondante.SymbolicPulseoffre de meilleures performances, une plus grande flexibilité et une meilleure prise en charge de QPY. -
La passe
NoiseAdaptiveLayoutet le plugin correspondant"noise_adaptive"layout stage sont obsolètes et seront supprimés dans la version 1.0.0. Ce laissez-passer a été largement remplacé parVF2LayoutetVF2PostLayoutqui définira une disposition basée sur les caractéristiques de bruit rapportées d'un backend. -
La passe
CrosstalkAdaptiveSchedulea été dépréciée et sera supprimée dans la version 1.0.0. Cette passe n'était plus utilisable car son fonctionnement interne dépendait de la définition de propriétés personnalisées dans la charge utile d'unBackendPropertiesd'uneBackendV1instance. Comme aucun backend ne définit ces champs, la passe a été dépréciée. -
Le module
qiskit.visualization.qcstyleest désormais obsolète et sera supprimé dans la version de Qiskit 1.0.0. Vous devriez plutôt utiliserqiskit.visualization.circuit.qcstyleen remplacement direct. -
L'injection d'opérations sur les portes de circuit dans le contexte du constructeur d'impulsions est désormais obsolète. Cette dépréciation concerne les fonctions suivantes :
call_gate(),cx(),u1(),u2(),u3(),x()
De même que les arguments d'entrée de type
QuantumCircuittype danscall().Si vous souhaitez toujours injecter des programmes calibrés par le backend, vous pouvez utiliser le modèle suivant au lieu d'appeler les commandes de la porte.
from qiskit.providers.fake_provider import GenericBackendV2 from qiskit import pulse backend = GenericBackendV2(num_qubits=5) sched = backend.target['x'][(qubit,)].calibration with pulse.build() as only_pulse_scheds: pulse.call(sched)De même,
QuantumCircuitpeut être injecté dans le contexte du constructeur en transpilant et en ordonnançant manuellement l'objet.from math import pi from qiskit.compiler import schedule, transpile qc = QuatumCircuit(2) qc.rz(pi/2, 0) qc.sx(0) qc.rz(pi/2, 0) qc.cx(0, 1) qc_t = transpile(qc, backend) sched = schedule(qc_t, backend) with pulse.build() as only_pulse_scheds: pulse.call(sched)Dans tous les cas, nous recommandons maintenant d'écrire un programme d'impulsion minimum avec le constructeur et de l'attacher à
QuantumCircuitvia la méthodeQuantumCircuit.add_calibration()en tant que microcode d'une instruction de porte, plutôt que d'écrire le programme complet avec le modèle d'impulsion.Les arguments suivants dans
build()ont également été dépréciés :default_transpiler_settingsdefault_circuit_scheduler_settings
Avec les fonctions :
-
Les outils suivants dans
qiskit.utilsont été supprimés :- Utils en
qiskit.utils.arithmetic - Utils en
qiskit.utils.circuit_utils - Utils en
qiskit.utils.entangler_map - Utils en
qiskit.utils.name_unnamed_args
Ces fonctions étaient utilisées exclusivement dans le contexte de
qiskit.algorithmsetqiskit.opflow, et seront supprimées à la suite des suppressions deqiskit.algorithmsetqiskit.opflowdans Qiskit 1.0. - Utils en
-
Le module
qiskit.providers.fake_providera été migré vers le paquetqiskit-ibm-runtimePython. Pour cette raison, les éléments suivants de la base de donnéesqiskit.providers.fake_provideront été dépréciés à partir de Qiskit 0.46 et seront supprimés dans Qiskit 1.0:qiskit.providers.fake_provider.FakeProviderqiskit.providers.fake_provider.FakeProviderForBackendV2qiskit.providers.fake_provider.FakeProviderFactoryqiskit.providers.fake_provider.fake_backends.FakeBackendV2- tout faux backend contenu dans
qiskit.providers.fake_provider.backends(accessible via le fournisseur) qiskit.providers.fake_provider.FakeQasmSimulatorqiskit.providers.fake_provider.FakeJobqiskit.providers.fake_provider.FakeQobj
Exemple de migration vers le nouveau faux fournisseur :
# Legacy path from qiskit.providers.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke() # New path # run "pip install qiskit-ibm-runtime" from qiskit_ibm_runtime.fake_provider import FakeProvider, FakeSherbrooke backend1 = FakeProvider().get_backend("fake_ourense") backend2 = FakeSherbrooke()En outre, les faux backends suivants, conçus à des fins de test spéciales, ont été remplacés par la nouvelle classe
GenericBackendV2et sont également obsolètes à partir de Qiskit 0.46:qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2LegacyQubitPropsqiskit.providers.fake_provider.fake_backend_v2.FakeBackend5QV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendSimple
Exemple de migration vers la nouvelle
GenericBackendV2classe :# Legacy path from qiskit.providers.fake_provider import FakeBackend5QV2 backend = FakeBackend5QV2() # New path from qiskit.providers.fake_provider import GenericBackendV2 backend = GenericBackendV2(num_qubits=5) # note that this class will generate 5q backend with generic # properties that serves the same purpose as FakeBackend5QV2 # but will generate different results -
Le module
qiskit.extensionsest désormais obsolète. Il était en attente de dépréciation depuis la publication de Qiskit 0.45. La plupart des objets ont été déplacés versqiskit.circuit.libraryy compris :DiagonalGate,HamiltonianGateGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
Avec la suppression des objets, les méthodes de circuit suivantes ont également été supprimées :
QuantumCircuit.diagonal,QuantumCircuit.hamiltonian,QuantumCircuit.isometryetQuantumCircuit.iso,QuantumCircuit.uc,QuantumCircuit.ucrx,QuantumCircuit.ucry,QuantumCircuit.ucrz.
-
La fonction
execute()est obsolète. Cette fonction sert d'enveloppe de haut niveau pour transposer un circuit à l'aide de certaines options de transpile et l'exécuter sur un backend à l'aide de certaines options d'exécution. Pour faire la même chose, vous pouvez utiliser explicitement la fonctiontranspile()(avec les options de transposition appropriées) suivie debackend.run()(avec les options d'exécution appropriées).Par exemple, au lieu de courir :
from qiskit import execute job = execute(circuit, backend)vous pouvez courir :
from qiskit import transpile new_circuit = transpile(circuit, backend) job = backend.run(new_circuit)Alternativement, la primitive
Samplerest sémantiquement équivalente à la fonction dépréciéeexecute()dépréciée. La classeBackendSamplerest une enveloppe générique pour les backends qui ne supportent pas les primitives :from qiskit.primitives import BackendSampler sampler = BackendSampler(backend) job = sampler.run(circuit) -
La conversion implicite d'un
BaseOperator`dense en unSparsePauliOpdans les arguments observablesEstimatorest dépréciée depuis Qiskit 0.46 et sera supprimée dans Qiskit 1.0. Vous devez explicitement convertir enSparsePauliOpen utilisantSparsePauliOp.from_operator()à la place. -
La bibliothèque des impulsions discrètes est désormais obsolète et sera supprimée dans une prochaine version. Comprend :
constant()zero()square()sawtooth()triangle()cos()sin()gaussian()gaussian_deriv()sech()sech_deriv()gaussian_square()drag()
Au lieu de cela, utilisez le site
SymbolicPulsecorrespondant, avecget_waveform(). Par exemple, au lieu depulse.gaussian(100,0.5,10), utilisezpulse.Gaussian(100,0.5,10).get_waveform().Notez que la phase de
SawtoothetSquareest définie de telle sorte qu'une phase de se décale d'un cycle complet, contrairement à la contrepartie discrète. Notez également que la prise en charge des amplitudes complexes est obsolète dans la bibliothèque des impulsions symboliques - utilisez plutôtfloat,ampetangle. -
La classe
ConfigurableFakeBackendqui a été principalement utilisée pour les tests internes, est désormais obsolète. Elle sera supprimée dans la version de Qiskit 1.0.0. À la place, vous pouvez utiliser la classeGenericBackendV2pour construire un backend similaire à des fins de test. -
Le chargement d'objets de la bibliothèque
ScalableSymbolicPulseavec un paramètre complexeampà partir de fichiers qpy de la version 5 ou inférieure (Qiskit Terra < 0.23.0 ) est désormais obsolète. Suite à la suppression dans Qiskit de 1.0.0, le complexeampsera automatiquement converti en flottant (amp,angle). Le changement s'applique aux impulsions :ConstantDragGaussianGaussianSquare
-
Le module
qiskit.providers.basicaeret toutes ses classes sont obsolètes à partir de Qiskit 0.46. Leur utilisation doit être remplacée par le moduleqiskit.quantum_infoet le nouveau moduleqiskit.providers.basic_providermodule.La migration de l'utilisation de
qiskit.providers.basicaerversqiskit.providers.basic_providerpeut être effectuée comme suit :Migrate from | Replace with ------------------------------------------------------------------------------ :mod:`.basicaer` | :mod:`.basic_provider` :class:`.BasicAerProvider` | :class:`.BasicProvider` :class:`.BasicAerJob` | :class:`.BasicProviderJob` :class:`.QasmSimulatorPy` | :class:`.BasicSimulator` :class:`.UnitarySimulatorPy` | use :class:`~.quantum_info.Operator` :class:`.StatevectorSimulatorPy` | use :class:`~.quantum_info.Statevector`Une différence notable est que le nouveau fournisseur n'est plus exposé par le biais d'une instance globale (comme
BasicAer), de sorte qu'il ne sera pas possible de fairefrom qiskit import BasicProvider. Au lieu de cela, la classe du fournisseur doit être importée de son sous-module et instanciée :from qiskit.providers.basic_provider import BasicProvider provider = BasicProvider() backend = provider.get_backend("sim_name")Les exemples suivants montrent les chemins de migration des trois simulateurs en
basicaer.-
Simulateur de vecteur d'état :
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("statevector_simulator") statevector = backend.run(qc).result().get_statevector() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Statevector statevector = Statevector(qc) -
Simulateur unitaire :
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("unitary_simulator") result = backend.run(qc).result() # New path qc.remove_final_measurements() # no measurements allowed from qiskit.quantum_info import Operator result = Operator(qc).data -
Simulateur Qasm :
from qiskit import QuantumCircuit qc = QuantumCircuit(3) qc.h(0) qc.h(1) qc.cx(1,2) qc.measure_all() # Former path from qiskit import BasicAer backend = BasicAer.get_backend("qasm_simulator") result = backend.run(qc).result() # New path from qiskit.providers.basic_provider import BasicProvider backend = BasicProvider().get_backend("basic_simulator") result = backend.run(qc).result() # or, directly from qiskit.providers.basic_provider import BasicSimulator backend = BasicSimulator() result = backend.run(qc).result()
-
-
L'utilisation d'un
PauliListcomme observable qui est implicitement converti en aSparsePauliOpavec des coefficients 1 lors de l'appel àEstimator.run()est dépréciée. Au lieu de cela, vous devez d'abord convertir explicitement l'argument à l'aide deSparsePauliOp(pauli_list).
Problèmes critiques
-
Lors de la mise à jour de Qiskit de
0.46.xà1.0.0, vous ne pourrez pas effectuer la mise à jour en place. Par exemple,pip install -U qiskitoupip install --upgrade qiskitn'est pas pris en charge et ne fonctionnera probablement pas. Pour mettre à jourqiskit, il est recommandé de créer un nouvel environnement virtuel (venv) afin de créer un nouvel environnement distinct pour Qiskit>=1.0.0. Par exemple :python -m venv qiskit_1.0 source qiskit_1.0/bin/activate pip install qiskit>=1créera un nouvel environnement virtuel nommé
qiskit_1.0qui contiendra la nouvelle version de Qiskit.