Skip to main content
IBM Quantum Platform

Qiskit SDK 1.4 notes de mise à jour


1.4.6

Prélude

La version Qiskit v1.4.6 est une version dédiée exclusivement à la sécurité, et la dernière de la série Qiskit v1.x.

Le site v1.x n'est plus mis à jour sous aucune forme.

Problèmes de sécurité

  • Les analyseurs syntaxiques de l' OpenQASM 2 (qasm2.load() et qasm2.loads()) s'arrêtent désormais avec un RecursionError lorsqu'ils tentent d'évaluer une expression trop profonde. La profondeur maximale autorisée est extraite de la variable Python sys.getrecursionlimit() au moment de l'entrée dans les analyseurs syntaxiques.

    Auparavant, les analyseurs syntaxiques pouvaient effectuer des récursions illimitées dans l'espace de Rust, ce qui finissait par dépasser la capacité maximale de la pile et provoquait une erreur de segmentation du processus.


1.4.5

Prélude

Qiskit v1.4.5 est la dernière version de correction de bugs de la série 1.4 et marque la fin de vie de la série. La prise en charge des correctifs de sécurité de la série 1.4 se poursuivra jusqu'au 31 mars 2026.

Corrections des erreurs

  • Correction de la gestion des bits anonymes dans la visualisation des circuits. Auparavant, les bits qui n'étaient pas associés à un registre étaient affichés avec la représentation par défaut Python, alors qu'ils affichent désormais l'index de manière lisible. Correction #14031.

  • Correction d'un problème dans la fonction Optimize1qGatesDecomposition lorsque la passe était initialisée avec un Target qui contient des portes 1q avec des paramètres d'angle fixes. Auparavant, la passe pouvait potentiellement produire des portes en dehors de la cible car elle ne vérifiait pas que la porte dans la cible prenait en charge des valeurs de paramètres arbitraires. Correction #14743.

  • Correction d'un comportement incorrect dans la passe BasisTranslator où une porte multi-qubit à l'intérieur d'un bloc ControlFlowOp suivait l'opération supportée avec ses indices de qubits locaux au lieu d'utiliser les indices absolus du circuit extérieur. Correction #13728.

  • Correction d'un bogue dans HighLevelSynthesisoù les calibrages de porte personnalisés n'étaient pas reconnus si la porte apparaissait imbriquée dans d'autres objets d'instruction. Correction partielle de #13728.

  • Correction d'une défaillance dans le tiroir de texte du circuit, qui pouvait se produire lorsque des blocs de circuit à l'intérieur d'opérations de flux de contrôle étaient définis sur des registres différents de ceux du circuit extérieur. Cette situation peut par exemple se produire lors d'opérations d'ajout ControlFlowOp directement, ou pour les circuits après transpilation.


1.4.4

Prélude

Qiskit v1.4.4 est une version mineure de correction de bogues pour la série de versions v1.4.x.

Corrections des erreurs

  • ApplyLayout traitera désormais correctement le cas de l'application d'un qubit zéro Layout. Auparavant, il affirmait qu'aucune disposition n'avait été définie, même si le champ "layout" du fichier PropertySet était égal à Layout().

  • Correction d'un bug dans la méthode QuantumCircuit.assign_parameters() qui entraînait une erreur avec les entrées de chaînes de caractères et l'argument strict=False. Voir #13933 pour plus de détails.

  • Fixe l'attribut name de la classe OrGate pour qu'il soit désormais défini sur "or" afin d'identifier cette porte de manière unique. Il était auparavant incorrectement réglé sur "and" , ce qui rendait impossible de le distinguer de AndGate ou d'avoir des plugins de synthèse pour synthétiser un OrGate. Corrigé #14434

  • Correction d'un bug dans la passe de ElidePermutations où le mappage des qubits n'était pas mis à jour correctement en présence de PermutationGatece qui conduisait à des circuits incorrects et à des mises à jour de l'ensemble des propriétés du gestionnaire de passe.

  • Correction d'un bogue dans les PauliEvolutionSynthesisDefault et PauliEvolutionSynthesisRustiq qui modifiait l'attribut .synthesis du circuit original lors du réglage de preserve_order=False. Le comportement des plugins a été rétabli et le circuit d'origine est désormais préservé tout au long du pipeline de transpilation.

  • Correction d'un problème de correction lors de l'exportation de circuits avec des instructions de retard utilisant les unités 'ps' vers QASM3.

  • Correction d'un problème de compatibilité avec la version minimale supportée de rustworkx, 0.15. Pour certaines entrées, les boutons VF2Layout et VF2PostLayout utilisaient auparavant une méthode rustworkx qui avait été ajoutée dans rustworkx 0.16.0 et qui provoquait une erreur lors de l'utilisation d'une version plus ancienne de rustworkx qui est listée comme étant supportée.

  • SabreLayout et SabreSwap ne panique plus lorsqu'il applique le résultat du routage à un circuit qui utilise des objets dans une portée de flux de contrôle imbriquée expr.Var dans une portée de flux de contrôle imbriquée.

  • La fonction de bibliothèque de circuits quantum_volume() a été mise à jour pour traiter un numpy.random.Generator comme entrée de son argument seed . Auparavant, un tel argument relatif au générateur entraînait l'envoi de TypeError.

  • Correction d'un bug dans les fonctions de la bibliothèque de circuits evolved_operator_ansatz(), qaoa_ansatz() et hamiltonian_variational_ansatz()où les paramètres avaient une composante complexe nulle. Cela ne pose généralement pas de problème, sauf si l'on traduit le texte en SymPy à l'aide de la méthode ParameterExpression.sympify() ce qui provoquait alors une erreur.


1.4.3

Prélude

Qiskit v1.4.3 est une version mineure de correction de bogues pour la série de versions v1.4.x.

Corrections des erreurs

  • Correction d'un bug dans DAGCircuit qui faisait que les nœuds de sortie Var devenaient des nœuds d'entrée pendant deepcopy et le décapage.

  • Correction d'un problème dans la passe de BasisTranslator où la phase globale du DAG n'était pas mise à jour correctement. Correction #14074.

  • Correction d'un bogue dans QPY (qiskit.qpy) où les circuits contenant des portes de classe MCMTGate ne parvenaient pas à se sérialiser. Voir #13965.

  • SabreLayout propage désormais correctement les éléments suivants d'un circuit name et metadata d'un circuit lorsqu'il est exécuté en tant que passe conjointe de mise en page et de routage.

  • Correction d'un problème dans le plugin de synthèse unitaire SolovayKitaevSynthesis où l'exécution répétée du plugin avec différentes portes de base réutilisait incorrectement les portes de base de la première exécution seulement. Le problème était dû au fait que les portes de base étaient ignorées lors de la mise en cache des approximations de base, et il est maintenant corrigé.

  • Correction d'un problème dans la passe SolovayKitaev où la passe pouvait se bloquer en raison d'une rotation de 180 degrés dans la récursion interne, qui n'était pas gérée correctement.

  • Correction d'un problème dans la passe de SolovayKitaev où l'approximation générée pouvait avoir une phase qui différait de π\pi de la valeur correcte. Cela est dû à la représentation interne SO(3)SO(3), qui nécessite une manipulation supplémentaire pour obtenir le signe correct de la matrice de la porte du qubit. Corrigé #9552

  • L'heuristique de l'erreur de repli dans VF2Layout et VF2PostLayoututilisée lorsqu'il n'y avait pas de taux d'erreur signalés, pouvait précédemment attribuer des erreurs supérieures à un et avoir des effets imprévisibles sur les scores de présentation obtenus.


1.4.2

Prélude

Qiskit 1.4.2 est une version corrective qui corrige les bogues trouvés dans la série de versions 1.4.

Nouvelles fonctions

  • Ajout d'un nouvel indicateur trust_payload, à la fonction qpy.load() fonction. Elle est utilisée pour forcer la fonction à charger une charge utile potentiellement non sécurisée. Si la charge utile contient ScheduleBlock (qu'ils soient autonomes ou qu'ils fassent partie de QuantumCircuit.calibrations) et que l'encodage symbolique dans le fichier QPY est défini sur sympy , la charge utile n'est potentiellement pas sûre et son chargement pourrait permettre l'exécution d'un code arbitraire. Puisque cet indicateur est destiné à contrôler la désérialisation des instances qui n'existent pas dans Qiskit >= ScheduleBlock qui n'existent pas dans Qiskit >= 2.0.0, ce drapeau n'existera que dans Qiskit 1.4.x et n'existera pas dans Qiskit >= 2.0.0.

Mise à niveau

  • Par défaut, qpy.load lèvera désormais un QpyError lorsqu'il est appelé avec une charge utile QPY contenant un objet ScheduleBlock (qu'il soit autonome ou qu'il fasse partie d'un objet QuantumCircuit.calibrations) qui utilise sympy pour encoder des expressions symboliques. En effet, la charge utile est potentiellement vulnérable et ne doit être chargée que si vous avez confiance en son contenu. Si vous êtes certain que la charge utile n'est pas malveillante, vous pouvez définir le nouvel argument trust_payload de qpy.load à True, ce qui permettra de charger la charge utile.

Problèmes de sécurité

  • Correction d'une faille de sécurité dans qpy.load() lors du chargement de charges utiles qui utilisent sympy pour sérialiser des objets et autres expressions symboliques ParameterExpression des objets et d'autres expressions symboliques. Cela inclut potentiellement toute charge utile QPY utilisant la version QPY < 10, et éventuellement 10, 11 et 12 en fonction de l'encodage symbolique utilisé dans l'étape de sérialisation (qpy.dump()).

Corrections des erreurs

  • Correction d'un bug dans la génération de l'approximation de la base pour SolovayKitaev. Auparavant, la génération d'approximations de bases discrètes à l'aide de generate_basis_approximations pour une base contenant des portes "sx" ou "sxdg" échouait. Cette anomalie est maintenant corrigée.

1.4.1

Prélude

Qiskit 1.4.1 est un petit patch qui corrige quelques bugs trouvés dans la série de support étendu 1.4.

Corrections des erreurs

  • Les circuits compilés à l'aide d'un gestionnaire de passe prédéfini construit par generate_preset_pass_manager() conserveront désormais correctement leur attribut name comme c'est le cas avec transpile().

  • Correction d'un problème avec QPY 13 lors de la sérialisation ou de la désérialisation d'un objet ParameterExpression qui a été défini en appelant ParameterExpression.subs() pour remplacer un Parameter par un ParameterExpression. Par exemple :

    from qiskit.circuit import Parameter
    
    a = Parameter("A")
    b = Parameter("B")
    expr = a + b
    c = Parameter("C")
    new_expr = c ** 3.14
    final_expr.subs({b: new_expr})

    Dans les versions précédentes, si vous vouliez sérialiser un fichier QuantumCircuit contenant une expression comme celle-ci avec qpy.dump() il y aurait eu un AttributeError avec un message d'erreur ‘ParameterExpression’ object has no attribute 'name' lors de l'utilisation de QPY 13 (par défaut). Cette erreur a été corrigée de sorte que l'exception n'est plus levée et que vous pouvez sérialiser et désérialiser une charge utile contenant ces objets imbriqués ParameterExpression imbriqués. Voir #13879.


1.4.0

Prélude

La version Qiskit v1.4 est la dernière version mineure de la série v1.x. Cette version contient des fonctionnalités minimales et ajoute principalement de nouveaux avertissements de dépréciation pour les changements d'API à venir dans la future version majeure v2.0. Il est entièrement compatible avec les versions de Qiskit v1.3.x. Il est fortement recommandé de mettre à jour v1.3.x vers v1.4 afin de pouvoir voir les avertissements concernant les interfaces qui seront modifiées avec Qiskit v2.0. La série de versions v1.4.x continuera à être prise en charge et à recevoir des corrections de bogues pendant 6 mois et des correctifs de sécurité pendant 1 an après cette version. Les corrections seront apportées par le biais de correctifs. Pour plus de détails sur le calendrier des versions et le cycle de support, voir : qiskit-sdk-version-strategy qui documente le calendrier des versions de manière plus détaillée.

Caractéristiques des circuits

  • Ajout d'une nouvelle méthode, QuantumCircuit.estimate_duration()pour calculer la durée estimée de la sortie d'un circuit programmé à partir de l'indicateur transpiler. Cet attribut doit être utilisé si vous avez besoin d'une estimation de la durée totale du circuit, au lieu de l'attribut obsolète QuantumCircuit.duration qui est obsolète.

Circuits obsolètes

  • Sous-classement Register ou Bitou toute sous-classe de ceux-ci (par exemple, QuantumRegister ou Qubit) est obsolète depuis Qiskit v1.4. La sous-classification de ces types n'a jamais été explicitement prise en charge par Qiskit, et sa signification n'a jamais été définie. Dans Qiskit v2.0, la sous-classification peut devenir impossible en raison de limitations techniques et ne sera certainement pas stockée dans un circuit. Cela est dû au déplacement du modèle de données vers l'espace Rust afin d'améliorer les performances.

  • Le paramètre optionnel dag dans le constructeur des sous-classes de DAGNode (à savoir DAGOpNode), qui a été inutilisé et ignoré depuis Qiskit v1.2, est maintenant déprécié à partir de Qiskit v1.4 et sera supprimé dans Qiskit v2.0.

  • La classe MCMT (Multiple-Control-Multiple-Target) de MCMT est désormais obsolète et remplacée par MCMTGatequi est une sous-classe de Gate qui est une sous-classe correcte. L'utilisation d'une porte au lieu d'un circuit permet au compilateur de raisonner sur l'objet à un niveau d'abstraction plus élevé et débloque l'utilisation de plusieurs plugins de synthèse.

  • Le module qiskit.circuit.classicalfunction et avec lui la classe ClassicalFunction et les classes classical_function() et BooleanExpression ont été dépréciés à partir de Qiskit v1.4 et seront supprimés dans Qiskit v2.0.

    Ce changement est effectué pour éviter une dépendance sur la bibliothèque externe tweedledum, qui n'est plus compatible avec toutes les plateformes supportées par Qiskit et les versions de Python. Pour une fonctionnalité similaire, veuillez utiliser le PhaseOracle qui aura une implémentation qui n'utilise pas tweedledum, et le BitFlipOracle qui sera ajouté dans Qiskit v2.0.

    Jusqu'à l'ajout de BitFlipOracle , un oracle de basculement de phase peut être converti en oracle de basculement de bits en le conditionnant sur le qubit de résultat et en appliquant des portes de Hadamard avant et après l'application de l'oracle, comme dans l'exemple suivant (où l'oracle est sur qr_x et le résultat sur qr_y) :

    from qiskit import QuantumRegister, QuantumCircuit
    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    bool_expr = "(x0 & x1 | ~x2) & x4"
    qr_x = QuantumRegister(4, "x")
    qr_y = QuantumRegister(1, "y")
    
    bit_flip_oracle = QuantumCircuit(qr_x, qr_y)
    phase_flip_oracle = PhaseOracle(bool_expr)
    controlled_phase_flip_oracle = phase_flip_oracle.control(1)
    bit_flip_oracle.h(qr_y)
    bit_flip_oracle.compose(controlled_phase_flip_oracle, qubits=[*qr_y, *qr_x], inplace=True)
    bit_flip_oracle.h(qr_y)
    
    print(bit_flip_oracle)

    Ce qui se traduit par

              ┌───────────────┐     
    x_0: ─────┤0              ├─────
              │               │     
    x_1: ─────┤1              ├─────
              │  Phase Oracle │     
    x_2: ─────┤2              ├─────
              │               │     
    x_3: ─────┤3              ├─────
         ┌───┐└───────┬───────┘┌───┐
      y: ┤ H ├────────■────────┤ H ├
         └───┘                 └───┘

Primitives obsolètes

Avertissements aux fournisseurs

Dépréciations de synthèse

  • La signature de l'argument atomic_evolution dans le constructeur des classes LieTrotter, ProductFormula, et SuzukiTrotter a été modifiée dans Qiskit v1.2 pour améliorer la visualisation du circuit de sortie. L'ancienne signature a été abandonnée au profit de la nouvelle. À partir de Qiskit v2.0, seule la nouvelle alternative sera valable.

    Pour migrer, veuillez modifier le callable de Callable[[Pauli | SparsePauliOp, float], QuantumCircuit] à Callable[[QuantumCircuit, Pauli | SparsePauliOp, float], None].

Dépréciations du transcompilateur

  • Les DAGOpNode.sort_key, DAGOutNode.sort_key, et DAGInNode.sort_key sont obsolètes et seront supprimés dans la version de Qiskit v2.0. Ces attributs étaient à l'origine utilisés comme clé lexicographique pour le tri topologique des nœuds dans un DAGCircuit. Toutefois, la clé n'est plus utilisée à cette fin, car le tri est désormais effectué en interne dans le code Rust. Si vous utilisez cet attribut, vous pouvez recréer la clé à partir des autres attributs d'un nœud. Par exemple, vous pouvez utiliser une fonction comme :

    def get_sort_key(node: DAGNode):
        if isinstance(node, (DAGInNode, DAGOutNode)):
            return str(node.wire)
        return ",".join(
            f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs)
        )

    qui générera une chaîne de caractères comme le fait la clé de tri.

  • Les utilisations suivantes de l'objet BackendProperties dans le pipeline de transpilation ont été dépréciées depuis Qiskit v1.4 et seront supprimées dans Qiskit v2.0:

    La classe BackendProperties est obsolète depuis Qiskit v1.2, de même que d'autres éléments du BackendV1 et sera supprimée dans Qiskit v2.0. L'autre moyen de communiquer des informations sur le matériel à l'argument de transpilation est la classe Target qui peut être définie à l'aide de l'argument d'entrée target . Des propriétés d'instruction spécifiques, telles que les erreurs de porte ou les durées, peuvent être ajoutées à une instruction lors de sa construction Target lors de sa construction grâce à la méthode Target.add_instruction() méthode.

    Dans le cas de generate_routing_passmanager() et generate_translation_passmanager()l'argument backend_properties est facultatif et est remplacé lorsque l'argument target requis est rempli. L'utilisation de l'argument peut être supprimée en toute sécurité dans 1.x tant que vous passez une cible, ce qui était l'utilisation recommandée.

  • La dépréciation de Pulse dans Qiskit v1.3, incluait des passes de construction de calibration telles que RXCalibrationBuilder. La réussite est une condition nécessaire à l'obtention d'un diplôme NormalizeRXAngle est une exigence de RXCalibrationBuilder; par conséquent, il est déprécié dans Qiskit v1.4. La fonction rzx_templates() dans le module de calibration est également obsolète car elle n'est pas utilisée dans notre base de code.

Dépréciations de la visualisation

  • Les paramètres show_idle et show_barrier dans les tiroirs de la ligne de temps sont obsolètes depuis Qiskit v1.4. Les alternatives sont, respectivement, les paramètres idle_wires et plot_barriers , introduits dans Qiskit v1.1, qui sont totalement équivalents. Les anciens noms de paramètres seront supprimés dans Qiskit v2.0.

  • Dans Qiskit v1.4, la fonction timeline drawer timeline_drawer() émettra un avertissement de dépréciation si un target n'est pas spécifié pour obtenir la durée des instructions. A partir de Qiskit v2.0, target sera requis et échouera s'il n'est pas spécifié timeline_drawer() échouera s'il n'est pas spécifié.

  • Fournir des entrées de type BackendV1 à l'argument backend de plot_gate_map(), plot_circuit_layout(), et plot_error_map() sont dépréciés dans Qiskit 1.4 et seront supprimés dans Qiskit 2.0. Utilisez plutôt une instance de BackendV2 à la place.

Divers. Dépréciations

  • L'utilisation d'arguments positionnels dans le constructeur de Result est dépréciée depuis Qiskit 1.4, et sera désactivée dans Qiskit 2.0. Veuillez définir tous les arguments en utilisant la syntaxe kwarg, c'est-à-dire : Result(backend_name="name", ....). En outre, l'argument qobj_id est obsolète et ne sera plus utilisé dans Qiskit 2.0. Il sera toutefois toujours possible de définir qobj_id comme un kwarg générique, qui se retrouvera dans le champ des métadonnées avec les autres kwargs génériques.

Corrections des erreurs

Autres remarques

  • En passant property_set comme argument de mot-clé arbitraire à la méthode de la sous-classe run() d'une sous-classe de BasePassManager changera le comportement de Qiskit v2.0. Il est actuellement transmis aux fonctions internes de conversion de représentation du gestionnaire de passe, comme n'importe quel argument de mot-clé arbitraire à cette méthode. A partir de Qiskit v2.0, l'option sera utilisée à la place pour définir la graine de l'élément PropertySet pour l'exécution du pipeline, et l'argument ne sera pas transmis aux fonctions de conversion.

    Cette note ne concerne que les implémenteurs des sous-classes de BasePassManager qui ont choisi leurs implémentations de _passmanager_frontend et _passmanager_backend pour accepter un argument de mot-clé appelé property_set.

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