Skip to main content
IBM Quantum Platform

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 C3SXGate qui le faisait échouer si Gate.to_matrix() était appelé. La matrice de la porte est maintenant retournée comme prévu.

  • L'attribut QuantumCircuit.parameters sera désormais correctement vide lors de l'utilisation de QuantumCircuit.copy_empty_like() sur un circuit paramétrique. Auparavant, un cache interne était copié sans être invalidé. Correction #12617.

  • Corrige le passage du SolovayKitaev lors du chargement des approximations de base à partir d'un fichier .npy existant. 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 GenericBackendV2 permettait 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ération n-qubit sur un bloc de m qubits, laissant le DAG dans un état invalide. Ce comportement a été corrigé et la tentative soulèvera une erreur de type DAGCircuitError.

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() ou QuantumCircuit.draw() lors de l'utilisation de l'option de sortie mpl où le programme se bloquait si le circuit dessiné avait une opération ControlFlow et que l'option fold était réglée sur -1 (ce qui signifie pas de pli). Correction #12012.

  • La fonction EvolvedOperatorAnsatz gè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, EvolvedOperatorAnsatz n'aura pas de qregs quand il y a zéro qubit, au lieu d'avoir une instance avec zéro qubit QuantumRegister avec zéro qubit. Ce comportement est plus cohérent avec celui de la superclasse QuantumCircuit.

  • La méthode Instruction.repeat() déplace maintenant un ensemble condition vers l'extérieur retourné Instruction et laisse les portes intérieures de sa définition inconditionnelles. Auparavant, la méthode laissait les instances ClassicalRegister dans 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 argument BackendV2 en 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 VF2Layout lèverait une exception si on lui fournissait une instance Target sans 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 init ne soulevait pas correctement une erreur de type TranspilerError lorsqu'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() et qasm2.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 2π2\pi.


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'attribut BackendConfiguration.supported_instructions , qui est l'endroit typique où les instructions de flux de contrôle sont spécifiées dans un objet BackendConfiguration objet. 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 que BasisTranslator continueraient à utiliser les anciennes règles. Correction #11958.

  • BasePassManager.run() ne laissera plus échapper l'ancien PropertySet dans les nouveaux flux de travail lorsqu'elle est appelée plusieurs fois. Auparavant, les mêmes PropertySet que 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 FakeOpenPulse2Q backend. 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ète qiskit.tools) a été mis à jour pour fonctionner comme prévu. La fonction job_monitor() fonctionne désormais avec les Job les instances. Les fonctions backend_overview() et backend_monitor() devraient maintenant fonctionner comme prévu.

  • InstructionDurations.from_backend() renvoie désormais une instance de n'importe quelle sous-classe de InstructionDurations au 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.

Remarque

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_provider a été introduit pour remplacer qiskit.providers.basicaer. Ce module contient des outils de fournisseur qui reflètent ceux du fournisseur BasicAer et offre un simulateur unique, non efficace, basé sur les vecteurs d'état : BasicSimulator. Ce simulateur est basé sur l'interface BackendV2 et est exclusivement destiné aux tests et au prototypage simple. Pour des capacités de simulation plus avancées, veuillez vous référer au paquetage qiskit-aer . Voir la note de dépréciation de BasicAer pour les directives de migration.

  • L'interface Target l'interface et le pipeline de transpilation supportent maintenant les définitions de cibles avec num_qubits=None. Il s'agit de permettre la création de simulateurs basés sur Target-avec un nombre flexible de qubits. Une cible avec num_qubits=None contiendra exclusivement des instructions globales (avec qargs=None) et lorsqu'elle est donnée au transpileur, on s'attend à ce que le transpileur ne redimensionne pas le circuit. Ce changement dans le Target exige que les futurs passages du transpileur prennent en compte le cas où target.num_qubits is None.

  • Une nouvelle classe, GenericBackendV2 a été ajoutée au module qiskit.providers.fake_provider module. Cette classe est configurable, et construit une instance de BackendV2 qui 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 objet Target à 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)
    Remarque

    Les 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 symengine a été portée à >= 0.11. Cela a permis de supprimer les solutions de contournement de ParameterExpression.is_real() pour gérer un bogue dans les versions antérieures de symengine.

Remarques concernant la dépréciation

  • Les ScheduleBlock.scoped_parameters() et ScheduleBlock.search_parameters() ont été supprimées. Ces méthodes produisent des objets Parameter dont 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 échelle Parameter d'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'argument data de la fonction de visualisation est désormais obsolète plot_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 a QuasiDistribution, ProbDistributionou d'un dictionnaire de distribution, vous devez utiliser la fonction plot_distribution() à la place.

  • Le paquet qiskit-terra Python est obsolète et ne recevra plus de mises à jour à partir de Qiskit 1.0.0. Si vous installez qiskit-terra seul, il ne sera plus mis à jour pour Qiskit>=1.0.0. Si vous utilisez qiskit sans le paquetage qiskit , un FutureWarning sera émis à l'importation de qiskit pour indiquer que vous n'utilisez pas le paquet qiskit .

  • L'utilisation de l'objet qiskit.Aer est obsolète et sera supprimée dans Qiskit 1.0. Vous devriez plutôt utiliser le même objet de l'espace de noms qiskit_aer , qui est un remplacement direct.

  • L'importation à partir de qiskit.providers.aer est obsolète et ne fonctionnera plus dans Qiskit 1.0. Vous devriez plutôt importer de qiskit_aer, qui est un remplacement direct.

  • L'exécution de tâches d'impulsion sur des backends à partir de qiskit.providers.fake_provider est 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.synthesis est obsolète et sera supprimé dans Qiskit 1.0. Les objets suivants ont été déplacés :

  • Le module qiskit.tools.jupyter est obsolète et sera supprimé dans Qiskit 1.0.0. Ce module est obsolète car ses fonctionnalités sont liées à l'ancien paquetage qiskit-ibmq-provider qui n'est plus pris en charge et qui ne l'est plus non plus BackendV1. 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.monitor est obsolète et sera supprimé dans Qiskit 1.0.0. Ce module est obsolète car ses fonctionnalités sont liées à l'ancien paquetage qiskit-ibmq-provider qui n'est plus pris en charge et qui ne l'est plus non plus BackendV1.

  • Le module qiskit.tools.visualization est 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é vers qiskit.visualization dans Qiskit 0.8.0. Si vous utilisez toujours ce chemin, vous pouvez simplement mettre à jour vos importations de qiskit.tools.visualization à qiskit.visualization.

  • Le module qiskit.tools.events et l'utilitaire progressbar() 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.tools est 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.events et qiskit.tools.visualization), la fonctionnalité de ce module a été migrée vers qiskit.utils. Si vous utilisez une fonctionnalité de ce module, vous pouvez mettre à jour vos importations de qiskit.tools à qiskit.utils.

  • Le module qiskit.test est 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.synthesis est obsolète et sera supprimé dans Qiskit 1.0.0. Les objets suivants ont été déplacés vers qiskit.synthesis:

    • OneQubitEulerDecomposer a été déplacé vers qiskit.synthesis.one_qubit
    • TwoQubitBasisDecomposer a été déplacé vers qiskit.synthesis.two_qubits
    • XXDecomposer a été déplacé vers qiskit.synthesis.two_qubits
    • two_qubit_cnot_decompose() a été déplacé vers qiskit.synthesis.two_qubits

    La classe Quaternion a été migrée de qiskit.quantum_info.synthesis vers qiskit.quantum_info. Ce changement n'a pas affecté le chemin d'importation habituel de la classe, mais l'accès à la classe via qiskit.quantum_info.synthesis est 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.qasm a été supprimé. Elle sera supprimée dans la version de Qiskit 1.0.0. L'ancien analyseur OpenQASM 2 a été remplacé par le module qiskit.qasm2 qui fournit un analyseur plus rapide et plus correct pour OpenQASM 2.

  • La fonction qiskit.converters.ast_to_dag est 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 module qiskit.qasm qui a été supprimé) et de le convertir directement en un fichier DAGCircuit. 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 fichier QuantumCircuit à l'aide de l'option QuantumCircuit.from_qasm_file() ou QuantumCircuit.from_qasm_str() et convertir ensuite ce QuantumCircuit en DAGCircuit à l'aide de circuit_to_dag().

  • La méthode QuantumCircuit.qasm() utilisée pour générer une représentation OpenQASM 2 de l'objet QuantumCircuit a été dépréciée et sera supprimée dans la version de Qiskit 1.0.0. Les qasm2.dump() ou qasm2.dumps() qui offrent des fonctionnalités similaires doivent être utilisées à la place. Si vous utilisiez la méthode QuantumCircuit.qasm() pour générer une sortie formatée pygments, vous devriez plutôt vous tourner vers le paquetage autonome openqasm-pygments qui fournit cette fonctionnalité (comme qasm2.dump() et qasm2.dumps() ne fournissent pas de sortie colorée pygments).

  • La classe de base ParametricPulse et les pulses sont maintenant obsolètes et seront supprimés dans Qiskit 1.0. Comprend :

    Cette classe a été remplacée par SymbolicPulse et la bibliothèque d'impulsions correspondante. SymbolicPulse offre de meilleures performances, une plus grande flexibilité et une meilleure prise en charge de QPY.

  • La passe NoiseAdaptiveLayout et 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é par VF2Layout et VF2PostLayout qui définira une disposition basée sur les caractéristiques de bruit rapportées d'un backend.

  • La passe CrosstalkAdaptiveSchedule a é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'un BackendProperties d'une BackendV1 instance. Comme aucun backend ne définit ces champs, la passe a été dépréciée.

  • Le module qiskit.visualization.qcstyle est désormais obsolète et sera supprimé dans la version de Qiskit 1.0.0. Vous devriez plutôt utiliser qiskit.visualization.circuit.qcstyle en 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 QuantumCircuit type dans call().

    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, QuantumCircuit peut ê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 à QuantumCircuit via la méthode QuantumCircuit.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_settings
    • default_circuit_scheduler_settings

    Avec les fonctions :

  • Les outils suivants dans qiskit.utils ont é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.algorithms et qiskit.opflow, et seront supprimées à la suite des suppressions de qiskit.algorithms et qiskit.opflow dans Qiskit 1.0.

  • Le module qiskit.providers.fake_provider a été migré vers le paquet qiskit-ibm-runtime Python. Pour cette raison, les éléments suivants de la base de données qiskit.providers.fake_provider ont été dépréciés à partir de Qiskit 0.46 et seront supprimés dans Qiskit 1.0:

    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 GenericBackendV2 et sont également obsolètes à partir de Qiskit 0.46:

    Exemple de migration vers la nouvelle GenericBackendV2 classe :

    # 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.extensions est 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 vers qiskit.circuit.libraryy compris :

    Avec la suppression des objets, les méthodes de circuit suivantes ont également été supprimées :

    • QuantumCircuit.diagonal,
    • QuantumCircuit.hamiltonian,
    • QuantumCircuit.isometry et QuantumCircuit.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 fonction transpile() (avec les options de transposition appropriées) suivie de backend.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 Sampler est sémantiquement équivalente à la fonction dépréciée execute() dépréciée. La classe BackendSampler est 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 un SparsePauliOp dans les arguments observables Estimator est dépréciée depuis Qiskit 0.46 et sera supprimée dans Qiskit 1.0. Vous devez explicitement convertir en SparsePauliOp en utilisant SparsePauliOp.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 :

    Au lieu de cela, utilisez le site SymbolicPulse correspondant, avec get_waveform(). Par exemple, au lieu de pulse.gaussian(100,0.5,10) , utilisez pulse.Gaussian(100,0.5,10).get_waveform().

    Notez que la phase de Sawtooth et Square est définie de telle sorte qu'une phase de 2pi2\\pi 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ôt float, amp et angle .

  • La classe ConfigurableFakeBackend qui 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 classe GenericBackendV2 pour construire un backend similaire à des fins de test.

  • Le chargement d'objets de la bibliothèque ScalableSymbolicPulse avec un paramètre complexe amp à 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 complexe amp sera automatiquement converti en flottant (amp, angle). Le changement s'applique aux impulsions :

    • Constant
    • Drag
    • Gaussian
    • GaussianSquare
  • Le module qiskit.providers.basicaer et toutes ses classes sont obsolètes à partir de Qiskit 0.46. Leur utilisation doit être remplacée par le module qiskit.quantum_info et le nouveau module qiskit.providers.basic_provider module.

    La migration de l'utilisation de qiskit.providers.basicaer vers qiskit.providers.basic_provider peut ê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 faire from 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.

    1. 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)
    2. 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
    3. 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 PauliList comme observable qui est implicitement converti en a SparsePauliOp avec 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 de SparsePauliOp(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 qiskit ou pip install --upgrade qiskit n'est pas pris en charge et ne fonctionnera probablement pas. Pour mettre à jour qiskit , 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>=1

    créera un nouvel environnement virtuel nommé qiskit_1.0 qui contiendra la nouvelle version de Qiskit.

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.