Skip to main content
IBM Quantum Platform

SolovayKitaev

class qiskit.transpiler.passes.SolovayKitaev(*args, **kwargs)

GitHub

베이스: TransformationPass

솔로베이-키타에프 알고리즘을 사용하여 1q 게이트를 이산 단위로 대략 분해합니다.

솔로베이-키타에프 정리 [1에] 따르면 모든 단일 큐비트 게이트는 고정된 단일 큐비트 게이트 집합으로 임의의 정밀도로 근사화할 수 있으며, 이 집합이 SU(2)SU(2) 에서 밀집된 하위 집합을 생성하면 됩니다. 이는 모든 단일 큐비트 게이트를 결함 허용적으로 구현하는 방법을 알고 있는 이산적이고 보편적인 게이트 집합으로 표현할 수 있다는 것을 의미하므로 중요한 결과입니다. 따라서 솔로베이-키타에프 알고리즘을 사용하면 내결함성이 없는 회로를 내결함성 방식으로 재구성할 수 있습니다.

이 솔로베이-키타에프 알고리즘 구현은 [2를] 기반으로 합니다.

예를 들어 다음 회로는 다음과 같습니다

     ┌─────────┐
q_0: ┤ RX(0.8) ├
     └─────────┘

는 다음과 같이 분해될 수 있습니다

global phase: 7π/8
     ┌───┐┌───┐┌───┐
q_0: ┤ H ├┤ T ├┤ H ├
     └───┘└───┘└───┘

대략 0.01 의 L2-error.

예제

기본적으로 기본 게이트 세트는 ["t", "tdg", "h"] 입니다:

import numpy as np
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes.synthesis import SolovayKitaev
from qiskit.quantum_info import Operator

circuit = QuantumCircuit(1)
circuit.rx(0.8, 0)

print("Original circuit:")
print(circuit.draw())

skd = SolovayKitaev(recursion_degree=2)

discretized = skd(circuit)

print("Discretized circuit:")
print(discretized.draw())

print("Error:", np.linalg.norm(Operator(circuit).data - Operator(discretized).data))
Original circuit:
   ┌─────────┐
q: ┤ Rx(0.8) ├
   └─────────┘
Discretized circuit:
global phase: 7π/8
   ┌───┐┌───┐┌───┐
q: ┤ H ├┤ T ├┤ H ├
   └───┘└───┘└───┘
Error: 2.828408279166474

개별적인 게이트 세트는 초기화자에서 지정할 수 있습니다.

from qiskit.transpiler.passes import SolovayKitaev

basis = ["s", "sdg", "t", "tdg", "z", "h"]

skd = SolovayKitaev(recursion_degree=2, basis_gates=basis)

서로 다른 인스턴스 사이에서 기본 근사값을 생성하고 저장하기 위해 와 그 save_basic_approximations() SolovayKitaevDecomposition 메서드를 사용할 수 있습니다.

from qiskit.transpiler.passes import SolovayKitaev
from qiskit.synthesis import SolovayKitaevDecomposition

# generate basic approximations
basis = ["s", "sdg", "t", "tdg", "z", "h"]
decomp = SolovayKitaevDecomposition(basis_gates=basis, depth=5)

# store them in a local file
fname = "sk_approx.bin"
decomp.save_basic_approximations(fname)

# load them for running Solovay-Kitaev
skd = SolovayKitaev(recursion_degree=2, basic_approximations=fname)

참조 자료:

[1] 키타예프, A Yu (1997). 양자 계산: 알고리즘과 오류 정정. 러시아 수학 개요. 52 (6): 1191–1249. 온라인.

[2] 도슨, 크리스토퍼 M.; Nielsen, Michael A. (2005) The Solovay-Kitaev Algorithm. arXiv:quant-ph/0505030.

매개변수

  • 재귀_degree - 솔로베이-키타에프 알고리즘의 재귀 깊이입니다. 재귀 깊이가 클수록 분해의 정확도와 길이가 증가합니다.
  • 기본_근사치 - 재귀의 루트에서 최적의 이산 분해를 찾기 위한 기본 근사치입니다. 문자열인 경우 근사값을 로드할 파일을 지정합니다. 사전인 경우 {label: SO(3)-matrix} 쌍을 포함합니다. None 인 경우 HH, TTTT^\dagger 게이트에 기반한 기본값이 최대 깊이 16까지 생성됩니다. basic_approximations 을 전달하면 basis_gatesdepth 을 설정할 수 없습니다.
  • basis_gates - 기본 근사치 그물을 구축하는 데 사용되는 기준 게이트입니다. 기본값은 ["h", "t", "tdg"] 입니다. basic_approximations 을 제공하면 이 인수를 설정할 수 없습니다.
  • 깊이 - 기본 근사값에 사용되는 최대 게이트 깊이입니다. basic_approximations 을 제공하면 이 인수를 설정할 수 없습니다.

속성

is_analysis_pass

패스가 분석 패스인지 확인합니다.

패스가 AnalysisPass, 인 경우 패스가 DAG를 분석하고 해당 분석 결과를 속성 집합에 쓸 수 있음을 의미합니다. 이러한 종류의 패스에서는 DAG에 대한 수정이 허용되지 않습니다.

is_transformation_pass

패스가 변환 패스인지 확인합니다.

패스가 TransformationPass, 인 경우 패스가 DAG를 조작할 수는 있지만 속성 집합을 수정할 수는 없음을 의미합니다(단, 읽을 수는 있음).


메소드

execute

execute(passmanager_ir, state, callback=None)

GitHub

입력된 키스킷 IR에 대한 최적화 작업을 실행합니다.

매개변수

  • passmanager_ir (DAGCircuit) – 최적화할 Qiskit IR.
  • state (DAGCircuit) – 패스 관리자 자체에 의한 워크플로 실행과 관련된 상태.
  • callback (Callable[[Task, DAGCircuit, PropertySet, float, int], None] | None) – 최적화 작업이 실행될 때마다 호출되는 콜백 함수입니다.

리턴

최적화된 키스킷 IR 및 워크플로 상태.

리턴 유형

튜플 [ DAGCircuit, PassManagerState ]

name

name()

GitHub

패스 이름.

리턴 유형

str

run

run(dag)

GitHub

Dag에서 SolovayKitaev 패스를 실행합니다.

매개변수

dag (DAGCircuit) – 입력 기간입니다.

리턴

이산 타겟 기준으로 합성된 1q 게이트가 있는 출력 dag.

레이즈

TranspilerError – 게이트에 _matrix가 필요하지 않은 경우

리턴 유형

DAGCircuit

update_status

update_status(state, run_state)

GitHub

워크플로 상태를 업데이트합니다.

매개변수

  • state (PassManagerState) – 관리자 상태를 전달하여 업데이트합니다.
  • run_state (RunState) – 현재 작업의 완료 상태입니다.

리턴

패스 관리자 상태가 업데이트되었습니다.

리턴 유형

PassManagerState

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.