Dienstprogramme
qiskit.utils
Einstellung von Unterstützung
add_deprecation_to_docstring
qiskit.utils.add_deprecation_to_docstring(func, msg, *, since, pending)
Fügen Sie die Verwerfungsmeldung dynamisch in den Docstring von funcein.
Parameter
- func (Callable) – Die zu ändernde Funktion.
- msg (str) – Die vollständige Meldung über die Verwerfung.
- since (str | None) – Die Version, mit der die Verwerfung begann.
- pending (bool) – Ist die Verjährung noch nicht eingetreten?
Rückgabetyp
Keine
deprecate_arg
qiskit.utils.deprecate_arg(name, *, since, additional_msg=None, deprecation_description=None, pending=False, package_name='Qiskit', new_alias=None, predicate=None, removal_timeline='no earlier than 3 months after the release date')
Decorator, um anzuzeigen, dass ein Argument in irgendeiner Weise veraltet ist.
Dieser Dekorator kann mehrfach für dieselbe Funktion verwendet werden, einmal pro veraltetem Argument. Sie sollte unter anderen Dekorateuren wie @staticmethod und Immobilien-Dekorateuren angesiedelt sein.
Parameter
- name (str) – Der Name des veralteten Arguments.
- since (str) – Die Version, mit der die Verwerfung begann. Wenn die Verwerfung noch nicht abgeschlossen ist, setzen Sie die Version auf den Zeitpunkt des Beginns der Verwerfung; später, wenn Sie von "nicht abgeschlossen" zu "veraltet" wechseln, aktualisieren Sie auf die neue Version.
- deprecation_description (str | None) – Was wird veraltet sein? E.g. "Das Argument my_arg von my_func() wird auf None gesetzt." Wenn es nicht gesetzt ist, wird als Standardwert " {func_name} 's argument {name} " angezeigt.
- additional_msg (str | None) – Geben Sie hier zusätzliche Informationen an, z. B. was stattdessen verwendet werden soll (wenn new_alias nicht gesetzt ist). Zum Beispiel: "Verwenden Sie stattdessen das Argument new_arg, das ähnlich ist, aber keine Auswirkungen auf den Aufbau der Schaltung hat."
- pending (bool) – Auf True gesetzt, wenn die Verwerfung noch nicht abgeschlossen ist.
- package_name (str) – Der Paketname, der in der Verwerfungsmeldung angezeigt wird (z. B. der Paketname PyPI ).
- new_alias (str | None) – Wurde das Argument lediglich umbenannt, setzen Sie diesen Wert auf den neuen Namen. Der Dekorator wird die kwargs dynamisch aktualisieren, so dass, wenn der Benutzer das alte Argument setzt, es als das neue_alias Argument übergeben wird.
- predicate (Callable[[Any], bool] | None) – Protokollieren Sie die Laufzeitwarnung nur, wenn das Prädikat „True“ zurückgibt. Dies ist nützlich, um bestimmte Werte oder Typen für ein Argument als veraltet zu kennzeichnen, z. B. lambda my_arg: isinstance(my_arg, dict). Unabhängig davon, ob ein Prädikat festgelegt ist, wird die Laufzeitwarnung nur protokolliert, wenn der Benutzer das Argument angibt.
- removal_timeline (str) – Wie schnell kann diese Verwerfung beseitigt werden? Erwartet einen Wert wie "frühestens 6 Monate nach dem letzten Release" oder "in Release 9.99 ".
Rückgabe
Der dekorierte Callable.
Rückgabetyp
Aufrufbar
deprecate_func
qiskit.utils.deprecate_func(*, since, additional_msg=None, pending=False, package_name='Qiskit', removal_timeline='no earlier than 3 months after the release date', is_property=False, stacklevel=2)
Decorator, um anzuzeigen, dass eine Funktion veraltet ist.
Er sollte unter anderen Dekoratoren wie @staticmethod und Eigenschaftsdekoratoren platziert werden.
Wenn Sie eine Klasse verwerfen, setzen Sie diesen Dekorator auf ihre __init__-Funktion.
Parameter
- since (str) – Die Version, mit der die Verwerfung begann. Wenn die Verwerfung noch nicht abgeschlossen ist, setzen Sie die Version auf den Zeitpunkt des Beginns der Verwerfung; wenn Sie jedoch später von "ausstehend" zu "veraltet" wechseln, aktualisieren Sie
sinceauf die neue Version. - additional_msg (str | None) – Geben Sie hier zusätzliche Informationen an, z. B. was Sie stattdessen verwenden sollen. Zum Beispiel: "Verwenden Sie stattdessen die Funktion
new_funcaus dem Modul<my_module>.<my_submodule>, die ähnlich ist, aber GPU-Beschleunigung verwendet." - pending (bool) – Wird auf
Truegesetzt, wenn die Verwerfung noch nicht abgeschlossen ist. - package_name (str) – Der Paketname, der in der Verwerfungsmeldung angezeigt wird (z. B. der Paketname PyPI ).
- removal_timeline (str) – Wie schnell kann diese Verwerfung beseitigt werden? Erwartet einen Wert wie "frühestens 6 Monate nach dem letzten Release" oder "in Release 9.99 ".
- is_property (bool) – Wenn es sich bei der veralteten Funktion um eine @property handelt, setzen Sie diesen Wert auf „True“, damit die generierte Meldung dies korrekt als solche kennzeichnet. (Dies ist für Eigenschaftssetter nicht erforderlich, da deren Docstring von „ Python “ ignoriert wird.)
- stacklevel (int) – Stacklevel übergeben an
warnings.warn().
Rückgabe
Der dekorierte Callable.
Rückgabetyp
Aufrufbar
Umrechnung von SI-Einheiten
apply_prefix
qiskit.utils.apply_prefix(value, unit)
Wenden Sie bei einem Präfix für eine SI-Einheit und einem Wert das Präfix an, um in eine SI-Standardeinheit umzurechnen.
Parameter
- value (float |ParameterExpression) – Die Nummer, auf die das Präfix angewendet werden soll.
- unit (str) – String-Präfix.
Rückgabe
Umgerechneter Wert.
Rückgabetyp
Dies kann aufgrund der internen Darstellung des Float-Objekts zu einem winzigen Wertfehler führen. Siehe https://docs.python.org/3/tutorial/floatingpoint.html für Einzelheiten.
Erhöht
ValueError – Falls das unit nicht erkannt wird.
Parameter
- value (float |ParameterExpression)
- unit (str)
Rückgabetyp
detach_prefix
qiskit.utils.detach_prefix(value, decimal=None)
Finden Sie bei einem SI-Einheitswert das am besten geeignete Präfix zur Skalierung des Wertes.
Zum Beispiel wird value = 1.3e8 in ein Tupel von (130.0, "M") umgewandelt, das einen skalierten Wert und eine Hilfseinheit darstellt, die zur Anzeige des Wertes verwendet werden kann. Im obigen Beispiel könnte dieser Wert als 130 MHz angezeigt werden (die Einheit ist hier frei wählbar).
Beispiel
>>> value, prefix = detach_prefix(1e4)
>>> print(f"{value} {prefix}Hz")
10 kHzParameter
- value (float) – Die Nummer für die Suche nach dem Präfix.
- decimal (int | None) – Optional. Eine beliebige ganzzahlige Zahl, die die Genauigkeit des Wertes angibt. Falls angegeben, wird versucht, die Mantisse zu runden und das Präfix an den gerundeten Wert anzupassen. Zum Beispiel wird 999_999.91 mit
decimal=4zu 999.9999 k, während 1.0 M mitdecimal=3oder weniger wird.
Rückgabe
Ein Tupel aus skaliertem Wert und Präfix.
Rückgabetyp
Dies kann aufgrund der internen Darstellung des Float-Objekts zu einem winzigen Wertfehler führen. Siehe https://docs.python.org/3/tutorial/floatingpoint.html für Einzelheiten.
Erhöht
- ValueError - Wenn die
valueaußerhalb des Bereichs liegt. - ValueError - Wenn die
valuekeine reelle Zahl ist.
Parameter
Rückgabetyp
Klassenwerkzeuge
wrap_method
qiskit.utils.wrap_method(cls, name, *, before=None, after=None)
Umhüllen Sie die Funktionalität der Instanz- oder Klassenmethode cls.name mit zusätzlichem Verhalten before und after.
Dadurch wird cls geändert, wobei das Attribut name durch die neue Funktionalität ersetzt wird. Dies ist nützlich bei der Erstellung von Klassendekoratoren. Die Methode kann stattdessen in jeder übergeordneten Klasse definiert werden.
Wenn entweder before oder after angegeben werden, sollten sie callables mit einer kompatiblen Signatur zu der Methode sein, auf die verwiesen wird. Sie werden je nach Bedarf unmittelbar vor oder nach der Methode aufgerufen, und ein etwaiger Rückgabewert wird ignoriert.
Parameter
- cls (type) – die zu ändernde Klasse.
- name (str) – der Name der Methode der zu umschließenden Klasse.
- before (Callable | None) – eine Funktion, die vor der umschlossenen Methode aufgerufen werden soll.
- after (Callable | None) – eine Funktion, die nach der umschlossenen Methode aufgerufen werden soll.
Erhöht
ValueError - wenn die genannte Methode weder in der Klasse noch in einer übergeordneten Klasse definiert ist.
Multiprocessing
default_num_processes
qiskit.utils.default_num_processes()
Ermittelt die Anzahl der Prozesse, die ein paralleler Aufruf mit mehreren Prozessen standardmäßig verwendet.
Solche Funktionen akzeptieren normalerweise auch ein num_processes Schlüsselwortargument, das den von dieser Funktion zurückgegebenen Wert ersetzt.
In der Reihenfolge der Priorität (von oben nach unten) wird der Rückgabewert sein:
- Die Umgebungsvariable
QISKIT_NUM_PROCS, falls gesetzt. - Der
num_processesSchlüssel der Qiskit-Benutzerkonfigurationsdatei, falls gesetzt. - Die Hälfte der logischen CPUs, die diesem Prozess zur Verfügung stehen, sofern dies ermittelt werden kann. Dies steht stellvertretend für die Anzahl der physischen CPUs, wobei von zweifachem simultanen Multithreading (SMT) ausgegangen wird; empirisch gesehen scheint die Multiprozessing-Leistung von Qiskit schlechter zu sein, wenn versucht wird, SMT-Kerne zu verwenden.
- 1, wenn alles andere versagt.
Wenn ein benutzerkonfigurierter Wert auf eine Zahl kleiner als 1 gesetzt wird, wird er so behandelt, als wäre er 1.
Rückgabetyp
is_main_process
qiskit.utils.is_main_process()
Prüft, ob der aktuelle Prozess der Hauptprozess ist.
Da Python 3.8, ist dies identisch mit der Standardberechnungsmethode Python :
>>> import multiprocessing
>>> multiprocessing.parent_process() is NoneDiese Funktion wird aus Gründen der Abwärtskompatibilität beibehalten, aber es gibt kaum einen Grund, nicht die integrierten Werkzeuge von Python zu verwenden.
Rückgabetyp
local_hardware_info
qiskit.utils.local_hardware_info()
Grundlegende Hardware-Informationen über den lokalen Rechner.
Versucht, die Anzahl der physischen CPUs im Rechner zu schätzen, auch wenn Hyperthreading aktiviert ist. Die CPU-Anzahl ist standardmäßig 1, wenn die tatsächliche Anzahl nicht ermittelt werden kann.
Rückgabe
Die Hardware-Informationen.
Rückgabetyp
should_run_in_parallel
qiskit.utils.should_run_in_parallel(num_processes=None)
Entscheiden Sie, ob eine Multiprozessor-Funktion Unterprozesse zur Parallelisierung erzeugen soll.
Dies ist insbesondere die Art und Weise, wie parallel_map() entscheidet, ob Multiprocessing verwendet werden soll oder nicht. Das Argument num_processes allein erzwingt keine Parallelität; standardmäßig verwendet Qiskit nur dann prozessbasierte Parallelität, wenn eine fork-ähnliche Methode zum Starten von Prozessen in Kraft ist. Sie können diese Entscheidung außer Kraft setzen, indem Sie entweder die multiprocessing startmethode, die Sie verwenden, die Umgebungsvariable QISKIT_PARALLEL auf "TRUE" oder parallel = true in Ihrer Benutzereinstellungsdatei setzen.
Diese Funktion enthält zwei Kontextmanager, die verwendet werden können, um den Rückgabewert dieser Funktion vorübergehend zu ändern:
override
should_run_in_parallel.override(value)
Ein Kontextmanager, in dem should_run_in_parallel() die angegebene value zurückgeben wird.
Dies ist keine vollständige Überschreibung; Qiskit wird nie versuchen zu parallelisieren, wenn nur ein einziger Prozess verfügbar ist, und wird keine prozessbasierte Parallelität mit einer Tiefe von mehr als 1 zulassen.
Parameter
value (bool)
ignore_user_settings
should_run_in_parallel.ignore_user_settings()
Ein Kontextmanager, in dem should_run_in_parallel() umgebungskonfigurationsvariablen ignorieren wird.
Insbesondere die Umgebungsvariable QISKIT_PARALLEL und die Benutzerkonfigurationsdatei werden in diesem Zusammenhang ignoriert.
Parameter
num_processes (int | None) – die maximale Anzahl von Prozessen, die zur Verwendung angefordert werden (None ist der Standard).
Rückgabetyp
Beispiele
Setzen Sie die konfigurierten Einstellungen vorübergehend außer Kraft, um die Parallelität zu deaktivieren:
>>> with should_run_in_parallel.override(True):
... assert should_run_in_parallel(8)
>>> with should_run_in_parallel.override(False):
... assert not should_run_in_parallel(8)Eine Hilfsfunktion für den Aufruf einer benutzerdefinierten Funktion mit Python ProcessPoolExecutor. Mit dieser Funktion können Aufgaben parallel ausgeführt werden.
parallel_map
qiskit.utils.parallel_map(task, values, task_args=(), task_kwargs=None, num_processes=None)
Parallele Ausführung eines Mappings von Werten auf die Funktionsaufgabe. Dies ist funktional äquivalent zu:
result = [task(value, *task_args, **task_kwargs) for value in values]Dies parallelisiert die Ergebnisse, wenn die Anzahl von values größer als eins ist und should_run_in_parallel() gibt True zurück. Andernfalls wird sie in Serie ausgeführt.
Parameter
- task (func) – Funktion, die für jeden Wert in
valuesaufgerufen werden soll. - values (array_like) – Liste oder Array von Werten, für die die Funktion
taskausgewertet werden soll. - task_args (list) – Optionale zusätzliche Argumente für die Funktion
task. - task_kwargs (dict) – Optionales zusätzliches Schlüsselwortargument für die Funktion
task. - num_processes (int) – Anzahl der zu startenden Prozesse. Wenn nicht angegeben, wird der Rückgabewert von
default_num_processes()verwendet.
Rückgabe
Die Ergebnisliste enthält den Wert von task(value, *task_args, **task_kwargs) für jeden Wert in values.
Rückgabetyp
Ergebnis
Beispiele
import time
from qiskit.utils import parallel_map
def func(_):
time.sleep(0.1)
return 0
parallel_map(func, list(range(10)));Optionale Abhängigkeitsprüfer
Qiskit verfügt über mehrere Funktionen, die nur aktiviert werden, wenn bestimmte optionale Abhängigkeiten erfüllt sind. Dieses Modul, qiskit.utils.optionalsenthält eine Sammlung von Objekten, die verwendet werden können, um zu testen, ob eine bestimmte Funktionalität verfügbar ist, und die optional die Meldung MissingOptionalLibraryError auslösen, wenn die Funktionalität nicht verfügbar ist.
Verfügbare Tester
Qiskit-Komponenten
qiskit.utils.optionals.HAS_AER
Qiskit Aer bietet leistungsstarke Simulatoren für die in Qiskit erstellten Quantenschaltungen.
qiskit.utils.optionals.HAS_IBMQ
Die Qiskit IBMQ Provider wird für den Zugriff auf IBM Quantum-Hardware in der IBM Cloud verwendet.
qiskit.utils.optionals.HAS_IGNIS
Qiskit Ignis bietet Werkzeuge für die Überprüfung von Quantenhardware, die Charakterisierung von Rauschen und die Fehlerkorrektur.
qiskit.utils.optionals.HAS_TOQM
Qiskit TOQM bietet Transpiler-Pässe für den zeitoptimalen Qubit-Mapping-Algorithmus.
Externe Bibliotheken für „ Python “
qiskit.utils.optionals.HAS_CONSTRAINT
python-constraint ist ein Löser für Constraint-Satisfaction-Probleme, der im CSPLayout Transpiler-Durchlauf zum Einsatz kommt.
qiskit.utils.optionals.HAS_CPLEX
Der CPLEX-Optimierer von „ IBM “ ist ein leistungsstarker Solver für mathematische Programmierung, der lineare, gemischt-ganzzahlige und quadratische Programmierung unterstützt. Dies wird von Qiskit nicht mehr verwendet, war jedoch früher der Fall, und die Option wurde aus Gründen der Abwärtskompatibilität beibehalten.
qiskit.utils.optionals.HAS_CVXPY
CVXPY ist ein Python Paket zum Lösen konvexer Optimierungsprobleme. Sie ist erforderlich für die Berechnung von Diamantnormen mit quantum_info.diamond_norm().
qiskit.utils.optionals.HAS_DOCPLEX
IBM Decision Optimization CPLEX Modelling ist eine Bibliothek für präskriptive Analysen. Genau wie CPLEX wird dies von Qiskit nicht mehr verwendet, war jedoch früher der Fall, und die Option wurde aus Gründen der Abwärtskompatibilität beibehalten.
qiskit.utils.optionals.HAS_FIXTURES
Die Testsuite verfügt über zusätzliche Funktionen, die verfügbar sind, wenn das optionale Modul fixtures installiert ist. Dies erfordert in der Regel auch HAS_TESTTOOLS auch. Dies ist im Allgemeinen nur für Qiskit-Entwickler erforderlich.
qiskit.utils.optionals.HAS_IPYTHON
Wenn der IPython-Kernel verfügbar ist, werden bestimmte zusätzliche Visualisierungen und Zeilenmagie zur Verfügung gestellt.
qiskit.utils.optionals.HAS_IPYWIDGETS
Überwachungs-Widgets für Aufträge, die auf externen Backends laufen, können bereitgestellt werden, wenn ipywidgets verfügbar ist.
qiskit.utils.optionals.HAS_JAX
Einige Methoden der Gradientenberechnung in opflow.gradients erfordern JAX für die Autodifferenzierung.
qiskit.utils.optionals.HAS_JUPYTER
Einige der Tests erfordern eine vollständige Jupyter-Installation, um die Interaktivitätsfunktionen zu testen.
qiskit.utils.optionals.HAS_MATPLOTLIB
Qiskit bietet mehrere Visualisierungswerkzeuge in dem visualization modul. Fast alle von ihnen werden mit Matplotlib erstellt, die installiert sein müssen, um sie zu nutzen.
qiskit.utils.optionals.HAS_NETWORKX
Wird von Qiskit nicht mehr verwendet. Intern verwendet Qiskit jetzt die leistungsstarke Rustworkx-Bibliothek als Kernabhängigkeit, und während der Umstellungsphase war es manchmal praktisch, Dinge in das Python -only NetworkX format zu konvertieren. Einige Tests von Anwendungsmodulen, wie z. B. Qiskit Nature, verwenden immer noch NetworkX.
qiskit.utils.optionals.HAS_NLOPT
NLopt ist eine Bibliothek für nichtlineare Optimierung, die von den globalen Optimierern im Modul algorithms.optimizers verwendet wird.
qiskit.utils.optionals.HAS_PIL
PIL ist eine Bibliothek zur Bildbearbeitung, die auf dem Prinzip „ Python “ basiert. Qiskit verwendet tatsächlich den „Pillow “-Fork von PIL, sofern dieser bei der Erstellung bestimmter Visualisierungen verfügbar ist, beispielsweise sowohl QuantumCircuit für als auch DAGCircuit für in bestimmten Modi.
qiskit.utils.optionals.HAS_PYDOT
Für einige Graphenvisualisierungen verwendet Qiskit pydot als Schnittstelle zu GraphViz (siehe HAS_GRAPHVIZ).
qiskit.utils.optionals.HAS_PYGMENTS
Pygments ist ein Code-Highlighter und Formatierer, der von vielen Umgebungen verwendet wird, die eine reichhaltige Anzeige von Codeblöcken erfordern, einschließlich Sphinx und Jupyter. Qiskit verwendet dies bei der Erstellung von umfangreichen Ausgaben für diese Umgebungen.
qiskit.utils.optionals.HAS_PYLATEX
Verschiedene Visualisierungen von LaTeX-based, insbesondere die Schaltkreisschubladen, benötigen Zugriff auf das Projekt pylatexenc, um korrekt zu funktionieren.
qiskit.utils.optionals.HAS_QASM3_IMPORT
Die Funktionen qasm3.load() und qasm3.loads() zum Importieren von OpenQASM 3 Programmen in QuantumCircuit instanzen verwenden Sie ein externes Importer-Paket.
qiskit.utils.optionals.HAS_SEABORN
Qiskit bietet mehrere Visualisierungswerkzeuge in dem visualization modul. Einige von ihnen werden mit Seaborn erstellt, das installiert werden muss, um sie nutzen zu können.
qiskit.utils.optionals.HAS_SKLEARN
Einige der Gradientenfunktionen in opflow.gradients verwenden Regularisierungsmethoden aus Scikit Learn.
qiskit.utils.optionals.HAS_SKQUANT
Einige der Optimierer in algorithms.optimizers basieren auf denen in Scikit Quant, das installiert sein muss, um sie zu nutzen.
qiskit.utils.optionals.HAS_SQSNOBFIT
SQSnobFit ist eine Bibliothek für den Algorithmus "stable noisy optimization by branch and fit". Sie wird vom SNOBFIT Optimierer verwendet.
qiskit.utils.optionals.HAS_SYMENGINE
Symengine ist ein schnelles C++-Backend für die Bibliothek Sympy zur symbolischen Berechnung. Diese Abhängigkeit dient zum Laden älterer QPY-Formate, bei denen dieses Paket zur Verarbeitung Parameterdieser Formate verwendet wurde.
qiskit.utils.optionals.HAS_SYMPY
SymPy ist eine „ Python “-Bibliothek für symbolische Mathematik. SymPy wurde früher für die Implementierung der ParameterExpression Klasse verwendet, wird aber mittlerweile nicht mehr verwendet. ParameterExpression.sympify()Es wird jedoch für einige ältere Funktionen benötigt, die. verwenden. Es wird auch in einigen Visualisierungsfunktionen und beim Template-Matching verwendet.
qiskit.utils.optionals.HAS_TESTTOOLS
Die Testsuite von Qiskit verfügt über erweiterte Funktionen, wenn die optionale testtools-Bibliothek installiert ist. Dies ist im Allgemeinen nur für Qiskit-Entwickler erforderlich.
qiskit.utils.optionals.HAS_TWEEDLEDUM
Tweedledum ist eine Erweiterungsbibliothek für die Synthese und Optimierung von Schaltungen, bei der unter Umständen klassische Orakel zum Einsatz kommen. Früher wurde dies von Qiskit PhaseOracle verwendet, wird aber mittlerweile von Qiskit nicht mehr genutzt.
qiskit.utils.optionals.HAS_Z3
Z3 ist ein Theorembeweiser, der in den CrosstalkAdaptiveSchedule Transpiler-Durchläufen und HoareOptimizer verwendet wird.
Externe Befehlszeilentools
qiskit.utils.optionals.HAS_GRAPHVIZ
Für einige Graphenvisualisierungen verwendet Qiskit das GraphViz visualisierungswerkzeug über seine Schnittstelle pydot (siehe HAS_PYDOT).
qiskit.utils.optionals.HAS_PDFLATEX
Für Visualisierungstools, die LaTeX in ihrer Ausgabe verwenden, wie z. B. die Schaltkreiszeichner, muss pdflatex verfügbar sein. Im Allgemeinen müssen Sie sicherstellen, dass Sie eine funktionierende LaTeX Installation und das qcircuit.tex Paket zur Verfügung haben.
qiskit.utils.optionals.HAS_PDFTOCAIRO
Visualisierungswerkzeuge, die LaTeX-generated Dateien in gerasterte Bilder umwandeln, verwenden das Werkzeug pdftocairo . Dies ist ein Teil der Poppler-Suite von PDF-Werkzeugen.
Lazy Checker-Klassen
Jeder der lazy checkers ist eine Instanz von LazyDependencyManager in einer ihrer beiden Unterklassen: LazyImportTester und LazySubprocessTester. Diese sollten von utils direkt importiert werden, wie zum Beispiel:
from qiskit.utils import LazyImportTesterLazyDependencyManager
class qiskit.utils.LazyDependencyManager(*, name=None, callback=None, install=None, msg=None)
Basen: ABC
Ein Manager für einige optionale Funktionen, deren Import oder deren Vorhandensein nur mit hohem Aufwand überprüft werden kann.
Diese Objekte können als Booleans verwendet werden, z. B. if x, und werten True aus, wenn die Abhängigkeit, auf die sie testen, vorhanden ist, und False , wenn nicht. Das Vorhandensein der Abhängigkeit wird nur getestet, wenn der Boolesche Wert ausgewertet wird, so dass er als Laufzeittest in Funktionen und Methoden verwendet werden kann, ohne dass ein Importzeittest erforderlich ist.
Diese Objekte kapseln auch die Fehlerbehandlung, wenn ihre Abhängigkeit nicht vorhanden ist, so dass Sie z. B. Folgendes tun können:
from qiskit.utils import LazyImportManager
HAS_MATPLOTLIB = LazyImportManager("matplotlib")
@HAS_MATPLOTLIB.require_in_call
def my_visualisation():
...
def my_other_visualisation():
# ... some setup ...
HAS_MATPLOTLIB.require_now("my_other_visualisation")
...
def my_third_visualisation():
if HAS_MATPLOTLIB:
from matplotlib import pyplot
else:
...In all diesen Fällen wird matplotlib erst importiert, wenn die Funktionen eingegeben werden. Im Falle des Dekorators wird matplotlib beim ersten Aufruf der Funktion auf Import geprüft. Im zweiten und dritten Fall versucht der Lader, matplotlib zu importieren, wenn die require_now() methode aufgerufen wird, oder wenn der boolesche Kontext ausgewertet wird. Bei den Methoden require wird ein Fehler ausgegeben, wenn die Bibliothek nicht verfügbar ist.
Dies ist die Basisklasse, die die boolesche Kontextprüfung und das Fehlermanagement bereitstellt. Die konkreten Klassen LazyImportTester und LazySubprocessTester bieten bequeme Einstiegspunkte, um zu testen, ob bestimmte Symbole aus Modulen importiert werden können bzw. ob bestimmte Befehlszeilenwerkzeuge verfügbar sind.
Parameter
- name - der Name dieser optionalen Abhängigkeit.
- callback - ein Callback, der sofort aufgerufen wird, nachdem die Verfügbarkeit der Bibliothek mit dem Ergebnis getestet wurde. Diese Funktion wird nur einmal aufgerufen.
- install - wie man diese optionale Abhängigkeit installiert. Übergeben an
MissingOptionalLibraryErrorals Parameterpip_installübergeben. - msg - eine zusätzliche Meldung, die in die Fehlermeldung aufgenommen wird, wenn dies erforderlich ist.
_is_available
abstractmethod _is_available()
Unterklassen von LazyDependencyManager sollten diese Methode außer Kraft setzen, um den eigentlichen Verfügbarkeitstest zu implementieren. Diese Methode sollte einen booleschen Wert zurückgeben, wobei True angibt, dass die Abhängigkeit verfügbar war. Diese Methode wird immer nur einmal aufgerufen.
Rückgabetyp
disable_locally
disable_locally()
Erstellen Sie einen Kontext, in dem der Wert des Abhängigkeitsmanagers False sein wird. Das bedeutet, dass sich innerhalb des Kontexts alle Aufrufe dieses Objekts so verhalten, als ob die Abhängigkeit nicht vorhanden wäre, einschließlich der Auslösung von Fehlern. Der Aufruf dieser Methode ist unabhängig davon gültig, ob die Abhängigkeit bereits ausgewertet wurde oder nicht. Dies ist vor allem bei Tests nützlich.
require_in_call
require_in_call(feature_or_callable: Callable) → Callable
require_in_call(feature_or_callable: str) → Callable[[Callable], Callable]
Erstellen Sie einen Dekorator für Callables, der voraussetzt, dass die Abhängigkeit verfügbar ist, wenn die dekorierte Funktion oder Methode aufgerufen wird.
Parameter
feature_or_callable (str or Callable) – den Namen des Merkmals, das diese Abhängigkeiten erfordert. Wenn diese Funktion direkt als Dekorator aufgerufen wird (z. B. @HAS_X.require_in_call im Gegensatz zu @HAS_X.require_in_call("my feature")), dann wird der Name des Merkmals als Funktionsname bzw. Klassen- und Methodenname angenommen.
Rückgabe
einen Dekorator, dessen Argument diese Abhängigkeit erfordert, bevor es aufgerufen wird.
Rückgabetyp
Aufrufbar
require_in_instance
require_in_instance(feature_or_class: type) → type
require_in_instance(feature_or_class: str) → Callable[[type], type]
Ein Klassendekorator, der die Abhängigkeit erfordert, ist verfügbar, wenn die Klasse initialisiert wird. Dieser Dekorator kann auch verwendet werden, wenn die Klasse keine __init__ Methode definiert.
Parameter
feature_or_class (str orType) – den Namen des Merkmals, das diese Abhängigkeiten erfordert. Wenn diese Funktion direkt als Dekorator aufgerufen wird (z. B. @HAS_X.require_in_instance im Gegensatz zu @HAS_X.require_in_instance("my feature")), dann wird der Name des Merkmals als Name der Klasse verwendet.
Rückgabe
ein Klassendekorator, der sicherstellt, dass das umhüllte Merkmal vorhanden ist, wenn die Klasse initialisiert wird.
Rückgabetyp
Aufrufbar
require_now
require_now(feature)
Versucht eifrig, die Abhängigkeiten in diesem Objekt zu importieren, und löst eine Ausnahme aus, wenn sie nicht importiert werden können.
Parameter
feature (str) – der Name des Merkmals, für das diese Abhängigkeiten erforderlich sind.
Erhöht
MissingOptionalLibraryError - wenn die Abhängigkeiten nicht importiert werden können.
LazyImportTester
class qiskit.utils.LazyImportTester(name_map_or_modules, *, name=None, callback=None, install=None, msg=None)
Basen: LazyDependencyManager
Ein lazy dependency tester für importierbare Python Module. Erforderliche Objekte werden nur zu dem Zeitpunkt importiert, zu dem dieses Objekt auf seinen booleschen Wert getestet wird.
Parameter
- name_map_or_modules (str |dict[str, Iterable[str]] | Iterable[str]) – Wenn es sich um eine Namenskarte handelt, dann ist es ein Wörterbuch, bei dem die Schlüssel Module oder Pakete sind und die Werte iterierbare Listen von Namen, die aus diesem Modul importiert werden sollen. Es sollte zulässig sein, dies zu schreiben
from <module> import <name1>, <name2>, .... Wenn es sich lediglich um eine Zeichenkette oder eine iterierbare Zeichenkette handelt, sollte es zulässig sein, für jedeimport <module>einzelne davon zu schreiben. - name (str | None) – der Name dieser optionalen Abhängigkeit.
- callback (Callable[[bool], None] | None) – ein Callback, der unmittelbar nach der Überprüfung der Verfügbarkeit der Bibliothek mit dem Ergebnis aufgerufen wird. Dies wird nur einmal aufgerufen.
- install (str | None) – So installieren Sie diese optionale Abhängigkeit. Wird als Parameter
pip_installanMissingOptionalLibraryErrorübergeben. - msg (str | None) – eine zusätzliche Meldung, die in die ausgelöste Fehlermeldung aufgenommen werden soll, falls dies erforderlich ist.
Erhöht
ValueError - wenn keine Module angegeben sind.
LazySubprocessTester
class qiskit.utils.LazySubprocessTester(command, *, name=None, callback=None, install=None, msg=None)
Basen: LazyDependencyManager
Eine träge Prüfung, ob ein Befehlszeilentool verfügbar ist. Der Befehl wird nur einmal ausgeführt, und zwar zu dem Zeitpunkt, an dem das Objekt auf seinen booleschen Wert geprüft wird.
Parameter
- command (str |Iterable[str]) – die Zeichenfolgen, aus denen sich der auszuführende Befehl zusammensetzt. Beispiel:
["pdflatex", "-version"]. - name (str | None) – der Name dieser optionalen Abhängigkeit.
- callback (Callable[[bool], None] | None) – ein Callback, der unmittelbar nach der Überprüfung der Verfügbarkeit der Bibliothek mit dem Ergebnis aufgerufen wird. Dies wird nur einmal aufgerufen.
- install (str | None) – So installieren Sie diese optionale Abhängigkeit. Wird als Parameter
pip_installanMissingOptionalLibraryErrorübergeben. - msg (str | None) – eine zusätzliche Meldung, die in die ausgelöste Fehlermeldung aufgenommen werden soll, falls dies erforderlich ist.
Erhöht
ValueError - wenn ein leerer Befehl angegeben wird.