Décomposition quasi-probabiliste (QPD)
qiskit_addon_cutting.qpd
Principale fonctionnalité de décomposition de la quasi-robabilité.
QPDBasis | Base dans laquelle décomposer une opération. |
BaseQPDGate | Classe de base pour une porte à décomposer à l'aide de la décomposition par quasiprobabilité. |
SingleQubitQPDGate | Porte à qubit unique à décomposer en utilisant la décomposition de quasiprobabilité. |
TwoQubitQPDGate | Porte à deux qubits à décomposer à l'aide de la décomposition par quasiprobabilité. |
WeightType
class WeightType(value)
Bases : Enum
Type de poids associé à un échantillon QPD.
Exact
Valeur par défaut: 1
Un poids donné en proportion de son poids exact
données échantillonnées
Valeur par défaut: 2
Un poids déterminé par une procédure d'échantillonnage
generate_qpd_weights
generate_qpd_weights(qpd_bases, num_samples=1000)
Générer des poids à partir de la distribution commune de quasiprobabilité.
Chaque poids dont la valeur absolue est supérieure à un seuil de 1 / num_samples sera évalué exactement. Les poids restants - ceux qui se trouvent dans la queue de la distribution - seront ensuite échantillonnés, ce qui permettra d'obtenir au maximum num_samples poids uniques.
Paramètres
- qpd_bases (
Sequence[QPDBasis]) – LesQPDBasisobjets à partir desquels générer des poids - num_samples (
float) – Contrôle le nombre de poids à générer
Type de retour
dict[tuple[int, ...], tuple[float, WeightType]]
Retours
Une correspondance entre une décomposition donnée et son poids. Les clés sont des tuples d'indices - un indice par entrée QPDBasis. Les indices correspondent à une carte de décomposition spécifique dans la base.
Les valeurs sont des tuples. Le premier élément est un nombre correspondant au poids de la contribution. Le deuxième élément est le WeightTypesoit EXACT ou SAMPLED.
decompose_qpd_instructions
decompose_qpd_instructions(circuit, instruction_ids, map_ids=None, *, inplace=False)
Remplacer toutes les instructions QPD du circuit par des opérations et des mesures Qiskit locales.
Paramètres
- circuit (QuantumCircuit) – Le circuit contenant les instructions QPD
- instruction_ids (Sequence[Sequence[int]]) – Une séquence 2D, telle que chaque séquence intérieure correspond à des indices d'instructions comprenant une décomposition dans le circuit. Les éléments d'une séquence commune appartiennent à une décomposition commune et doivent être échantillonnés ensemble.
- map_ids (Sequence[int] | None) – Indices d'une cartographie linéaire spécifique à appliquer aux décompositions du circuit. Si aucun ID de carte n'est fourni, le circuit sera décomposé de manière aléatoire selon la distribution de probabilité conjointe des décompositions.
- inplace (bool) – Si
True, lecircuitsera modifié à sa place.
Type de retour
QuantumCircuit
Retours
Circuit dont toutes les instances ont été BaseQPDGate instances décomposées en opérations locales.
Le circuit contiendra un nouveau registre classique final qui contiendra les résultats de la mesure QPD (accessible à l'adresse retval.cregs[-1]).
Augmentations
- ValueError - Un index dans
instruction_idscorrespond à une porte qui n'est pas une instanceBaseQPDGateexemple. - ValueError - Une liste d'instructions n'est pas de longueur 1 ou 2.
- ValueError - Le nombre total d'indices dans
instruction_idsn'est pas égal au nombre d'instances dans le circuitBaseQPDGateinstances dans le circuit. - ValueError - Les portes d'une même décomposition ont des bases QPD différentes.
- ValueError - La longueur de
map_idsn'est pas égale au nombre de décompositions dans le circuit.
qpdbasis_from_instruction
qpdbasis_from_instruction(gate, /)
Générer un objet QPDBasis à partir d'une opération prise en charge.
Toutes les portes à deux qubits qui mettent en œuvre la méthode to_matrix() sont prises en charge. Cela devrait inclure la grande majorité des portes sans paramètres non liés, mais il y a quelques cas particuliers (voir, par exemple, qiskit issue #10396 ).
L'opération Move qui peut être utilisée pour spécifier une coupure de fil, est également prise en charge.
Type de retour
Retours
L'objet nouvellement créé QPDBasis nouvellement
Augmentations
- ValueError - Instruction non prise en charge.
- ValueError - Impossible de décomposer l'instruction avec des paramètres non liés.
- ValueError -
to_matrixLa conversion d'une porte à deux qubits a échoué.
Paramètres
gate (Instruction)