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()etqasm2.loads()) s'arrêtent désormais avec unRecursionErrorlorsqu'ils tentent d'évaluer une expression trop profonde. La profondeur maximale autorisée est extraite de la variablePythonsys.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
Optimize1qGatesDecompositionlorsque la passe était initialisée avec unTargetqui 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
BasisTranslatoroù une porte multi-qubit à l'intérieur d'un blocControlFlowOpsuivait 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
ControlFlowOpdirectement, 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
-
ApplyLayouttraitera désormais correctement le cas de l'application d'un qubit zéroLayout. Auparavant, il affirmait qu'aucune disposition n'avait été définie, même si le champ"layout"du fichierPropertySeté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'argumentstrict=False. Voir #13933 pour plus de détails. -
Fixe l'attribut
namede la classeOrGatepour 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 deAndGateou d'avoir des plugins de synthèse pour synthétiser unOrGate. Corrigé #14434 -
Correction d'un bug dans la passe de
ElidePermutationsoù le mappage des qubits n'était pas mis à jour correctement en présence dePermutationGatece 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
PauliEvolutionSynthesisDefaultetPauliEvolutionSynthesisRustiqqui modifiait l'attribut.synthesisdu circuit original lors du réglage depreserve_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
VF2LayoutetVF2PostLayoututilisaient 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. -
SabreLayoutetSabreSwapne 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éeexpr.Vardans 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 unnumpy.random.Generatorcomme entrée de son argumentseed. Auparavant, un tel argument relatif au générateur entraînait l'envoi deTypeError. -
Correction d'un bug dans les fonctions de la bibliothèque de circuits
evolved_operator_ansatz(),qaoa_ansatz()ethamiltonian_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éthodeParameterExpression.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
DAGCircuitqui faisait que les nœuds de sortieVardevenaient des nœuds d'entrée pendantdeepcopyet le décapage. -
Correction d'un problème dans la passe de
BasisTranslatoroù 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 classeMCMTGatene parvenaient pas à se sérialiser. Voir #13965. -
SabreLayoutpropage désormais correctement les éléments suivants d'un circuitnameetmetadatad'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
SolovayKitaevSynthesisoù 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
SolovayKitaevoù 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
SolovayKitaevoù l'approximation générée pouvait avoir une phase qui différait de de la valeur correcte. Cela est dû à la représentation interne , 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
VF2LayoutetVF2PostLayoututilisé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 fonctionqpy.load()fonction. Elle est utilisée pour forcer la fonction à charger une charge utile potentiellement non sécurisée. Si la charge utile contientScheduleBlock(qu'ils soient autonomes ou qu'ils fassent partie deQuantumCircuit.calibrations) et que l'encodage symbolique dans le fichier QPY est défini sursympy, 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 >=ScheduleBlockqui 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.loadlèvera désormais unQpyErrorlorsqu'il est appelé avec une charge utile QPY contenant un objetScheduleBlock(qu'il soit autonome ou qu'il fasse partie d'un objetQuantumCircuit.calibrations) qui utilisesympypour 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 argumenttrust_payloaddeqpy.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 utilisentsympypour sérialiser des objets et autres expressions symboliquesParameterExpressiondes 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 degenerate_basis_approximationspour 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 attributnamecomme c'est le cas avectranspile(). -
Correction d'un problème avec QPY 13 lors de la sérialisation ou de la désérialisation d'un objet
ParameterExpressionqui a été défini en appelantParameterExpression.subs()pour remplacer unParameterpar unParameterExpression. 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
QuantumCircuitcontenant une expression comme celle-ci avecqpy.dump()il y aurait eu unAttributeErroravec 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ésParameterExpressionimbriqué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'indicateurtranspiler. 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èteQuantumCircuit.durationqui est obsolète.
Circuits obsolètes
-
Sous-classement
RegisterouBitou toute sous-classe de ceux-ci (par exemple,QuantumRegisterouQubit) 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
dagdans le constructeur des sous-classes deDAGNode(à savoirDAGOpNode), 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
MCMTest désormais obsolète et remplacée parMCMTGatequi est une sous-classe deGatequi 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.classicalfunctionet avec lui la classeClassicalFunctionet les classesclassical_function()etBooleanExpressionont é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 lePhaseOraclequi aura une implémentation qui n'utilise pastweedledum, et leBitFlipOraclequi 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 surqr_xet le résultat surqr_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
- Fournir des entrées de type
BackendV1à l'argumentbackenddeBackendSamplerV2etBackendEstimatorV2est déprécié depuis Qiskit 1.4 et sera supprimé dans Qiskit 2.0. Utilisez plutôt une instance deBackendV2à la place.
Avertissements aux fournisseurs
-
La
BackendV2Converteret les fonctionsconvert_to_target()ont été dépréciées dans Qiskit v1.4 suite à la dépréciation deBackendV1. La fonctionconvert_to_target()est utilisée pour construire une instanceTargetà partir d'une série d'objets provenant duBackendV1flux de travail :BackendConfiguration,BackendPropertiesetPulseDefaults.BackendV2Converterest utilisé pour convertirBackendV1enBackendV2et ne peut être maintenu une fois queBackendV1est supprimé. -
La méthode
BasicSimulator.run_experiment()a été dépréciée et sera supprimée dans Qiskit v2.0. La méthode prend unQasmQobjExperimentcomme argument d'entrée, qui a été supprimée en même temps que la classeQobjet d'autres fonctionnalités connexes. Vous pouvez appelerBasicSimulator.run()avec une entréeQuantumCircuità la place. -
Les types d'erreur
BackendPropertyErroretBackendConfigurationErroront été dépréciés dans Qiskit 1.4 et seront supprimés dans Qiskit 2.0. Ces erreurs ne sont utilisées que lors de la récupération d'éléments dans les anciennes bases de donnéesBackendPropertiesetBackendConfigurationobjets. -
Les classes
GateProperties,BackendStatusetqiskit.providers.models.JobStatusqui font partie de l'ancien flux de travailBackendV1sont désormais obsolètes. Ces éléments auraient dû être supprimés dans Qiskit 1.2, de même que les éléments connexes dans le fichierqiskit.providers.models.
Dépréciations de synthèse
-
La signature de l'argument
atomic_evolutiondans le constructeur des classesLieTrotter,ProductFormula, etSuzukiTrottera é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, etDAGInNode.sort_keysont 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 unDAGCircuit. 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
BackendPropertiesdans le pipeline de transpilation ont été dépréciées depuis Qiskit v1.4 et seront supprimées dans Qiskit v2.0:backend_propl'argument d'entrée dansDenseLayoutpropertiesl'argument d'entrée dansVF2Layoutpropertiesetcoupling_maples arguments d'entrée dansVF2PostLayout. Notez quecoupling_mapn'a été utilisé qu'en présence deproperties.backend_propsl'argument d'entrée dansUnitarySynthesisbackend_propertiesl'argument d'entrée dansPassManagerConfigbackend_propertiesenTarget.from_configuration()backend_propertiesengenerate_routing_passmanager()backend_propertiesengenerate_translation_passmanager()
La classe
BackendPropertiesest obsolète depuis Qiskit v1.2, de même que d'autres éléments duBackendV1et sera supprimée dans Qiskit v2.0. L'autre moyen de communiquer des informations sur le matériel à l'argument de transpilation est la classeTargetqui peut être définie à l'aide de l'argument d'entréetarget. 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 constructionTargetlors de sa construction grâce à la méthodeTarget.add_instruction()méthode.Dans le cas de
generate_routing_passmanager()etgenerate_translation_passmanager()l'argumentbackend_propertiesest facultatif et est remplacé lorsque l'argumenttargetrequis 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ômeNormalizeRXAngleest une exigence deRXCalibrationBuilder; par conséquent, il est déprécié dans Qiskit v1.4. La fonctionrzx_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_idleetshow_barrierdans les tiroirs de la ligne de temps sont obsolètes depuis Qiskit v1.4. Les alternatives sont, respectivement, les paramètresidle_wiresetplot_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 untargetn'est pas spécifié pour obtenir la durée des instructions. A partir de Qiskit v2.0,targetsera 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'argumentbackenddeplot_gate_map(),plot_circuit_layout(), etplot_error_map()sont dépréciés dans Qiskit 1.4 et seront supprimés dans Qiskit 2.0. Utilisez plutôt une instance deBackendV2à la place.
Divers. Dépréciations
- L'utilisation d'arguments positionnels dans le constructeur de
Resultest 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'argumentqobj_idest obsolète et ne sera plus utilisé dans Qiskit 2.0. Il sera toutefois toujours possible de définirqobj_idcomme 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
- Correction d'un problème dans
Target.has_calibration()etTarget.get_calibration()où le passage d'une porte paramétrée ne fonctionnait pas comme prévu. Se référer à qiskit/#11657 et qiskit/#11658 pour plus d'informations.
Autres remarques
-
En passant
property_setcomme argument de mot-clé arbitraire à la méthode de la sous-classerun()d'une sous-classe deBasePassManagerchangera 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émentPropertySetpour 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
BasePassManagerqui ont choisi leurs implémentations de_passmanager_frontendet_passmanager_backendpour accepter un argument de mot-clé appeléproperty_set.