합성 플러그인
qiskit.transpiler.passes.synthesis.plugin
이 모듈은 키스킷에서 합성 트랜스파일러 패스를 위한 플러그인 인터페이스를 정의합니다. 이는 외부 파이썬 패키지가 자체 합성 기술을 구현하고 실행 시 사용자에게 옵트인 옵션으로 원활하게 노출되도록 하는 훅 포인트를 제공합니다 transpile().
플러그인 인터페이스는 설정도구 진입점을 사용하여 구축되며, 이를 통해 키스킷 외부의 패키지가 합성 플러그인을 포함하고 있음을 알릴 수 있습니다.
참조 qiskit.transpiler.preset_passmanagers.plugin 트랜스파일러 스테이지용 플러그인을 작성하는 방법에 대한 자세한 내용은 를 참조하세요.
합성 플러그인 API
단일 합성 플러그인 API
UnitarySynthesisPlugin() | 추상 단일 합성 플러그인 클래스 |
UnitarySynthesisPluginManager() | 유니티 합성 플러그인 관리자 클래스 |
unitary_synthesis_plugin_names() | 설치된 단일 합성 플러그인 이름 목록을 반환합니다 |
고수준 합성 플러그인 API
HighLevelSynthesisPlugin() | 추상적인 하이레벨 합성 플러그인 클래스입니다. |
HighLevelSynthesisPluginManager() | 설치된 하이레벨 합성 플러그인을 추적하는 클래스입니다. |
high_level_synthesis_plugin_names(op_name) | 주어진 상위 객체 이름에 설치된 플러그인 이름 목록을 반환합니다 |
플러그인 작성
단일 합성 플러그인
유니터리 합성 플러그인을 작성하려면 크게 두 단계가 있습니다. 첫 번째 단계는 추상 플러그인 클래스의 서브클래스를 생성하는 것입니다: UnitarySynthesisPlugin. 이 플러그인 클래스는 단일 합성 플러그인을 위한 인터페이스와 계약 사항을 정의합니다. 주요 메서드는 단일 위치 매개변수와 numpy 배열 형태의 유니터리 행렬을 입력으로 받아, 해당 유니터리 행렬로부터 합성된 회로를 나타내는 객체를 DAGCircuit 반환하도록 설계되어 있습니다 run() . 그런 다음, 해당 패스에 필요한 정보가 무엇인지 Qiskit 트랜스파일러에 알리기 위해, 플러그인이 합성을 수행하는 데 해당 입력을 지원하거나 요구하는지에 따라 및 supports_coupling_map 과 supports_basis_gates 같은 몇 가지 필수 속성 메서드를 구현해야 합니다. 자세한 내용은 모든 필수 입력 항목에 대한 설명서를 UnitarySynthesisPlugin 참조하십시오. 플러그인 클래스의 예시는 대략 다음과 같을 것입니다:
from qiskit.transpiler.passes.synthesis import plugin
from qiskit_plugin_pkg.synthesis import generate_dag_circuit_from_matrix
class SpecialUnitarySynthesis(plugin.UnitarySynthesisPlugin):
@property
def supports_basis_gates(self):
return True
@property
def supports_coupling_map(self):
return False
@property
def supports_natural_direction(self):
return False
@property
def supports_pulse_optimize(self):
return False
@property
def supports_gate_lengths(self):
return False
@property
def supports_gate_errors(self):
return False
@property
def supports_gate_lengths_by_qubit(self):
return False
@property
def supports_gate_errors_by_qubit(self):
return False
@property
def min_qubits(self):
return None
@property
def max_qubits(self):
return None
@property
def supported_bases(self):
return None
def run(self, unitary, **options):
basis_gates = options['basis_gates']
dag_circuit = generate_dag_circuit_from_matrix(unitary, basis_gates)
return dag_circuit어떤 이유로든 해당 run() 메서드에 사용할 수 있는 입력값이 부족하다면 이슈를 등록해 주시기 바랍니다. 그러면 향후 릴리스에서 하위 호환성을 유지하며 추가할 수 있는 새로운 선택적 입력값을 통해 플러그인 인터페이스를 확장하는 방안을 논의할 수 있습니다. 다만, 이 플러그인 인터페이스는 안정화된 것으로 간주되며, 호환성을 깨는 방식으로 변경되지 않을 것임을 보장합니다. 변경이 필요한 경우(예를 들어, 사용 가능한 선택적 입력 옵션을 확장하는 등), 기존 플러그인에 대한 수정 없이도 적용될 수 있도록 처리될 것입니다.
supports_ 접두사가 붙은 모든 메서드는 인터페이스의 일부에 대해 UnitarySynthesisPlugin 파생 클래스에 예약되어 있습니다. 추상 클래스에 정의되지 않은 사용자 정의 supports_* 메서드를 하위 클래스에 정의해서는 안 됩니다.
두 번째 단계는 패키지 메타데이터에서 를 UnitarySynthesisPlugin setuptools 진입점으로 지정하는 것입니다. 이를 위해서는 플러그인 패키지를 위한 테이블을 entry-points 에 pyproject.toml 추가하고, 네임스페이스 qiskit.unitary_synthesis 아래에 필요한 진입점을 포함시키기만 하면 됩니다. 예를 들어,
[project.entry-points."qiskit.unitary_synthesis"]
"special" = "qiskit_plugin_pkg.module.plugin:SpecialUnitarySynthesis"각 플러그인에 고유한 이름이 있는 한 단일 패키지에 포함할 수 있는 플러그인 수에는 제한이 없습니다. 따라서 필요한 경우 단일 패키지로 여러 플러그인을 노출할 수 있습니다. default 이름은 키스킷 자체에서 사용하며 플러그인에서는 사용할 수 없습니다.
단일 합성 플러그인 구성
여러 옵션과 튜너블을 노출하는 일부 단일 합성 플러그인의 경우 플러그인 인터페이스에 사용자가 자유 형식 구성 사전을 제공할 수 있는 옵션이 있습니다. 이는 run() 메소드를 통해 options kwarg로 전달됩니다. 플러그인에 이러한 구성 옵션이 있는 경우 자유 형식 필드이므로 사용자가 이러한 구성 옵션을 지정하는 방법과 사용 방법을 명확하게 문서화해야 합니다.
고수준 합성 플러그인
고수준 합성 플러그인을 작성하는 것은 개념적으로 단일 합성 플러그인을 작성하는 것과 유사합니다. 첫 번째 단계는 추상 플러그인 클래스의 서브클래스를 생성하는 것입니다. HighLevelSynthesisPlugin 이 클래스는 고수준 합성 플러그인을 위한 인터페이스와 계약 사항을 정의합니다. 가장 주요한 방법은 run(). Clifford위치 인수는 high_level_object 합성될 “상위 수준 객체”를 지정하며, 이는 유형의 Operation 모든 객체(예를 들어, LinearFunction 또는 등)를 포함합니다. 키워드 인수는 target 대상 백엔드를 지정하며, 이를 통해 플러그인은 커플링 맵, 지원되는 게이트 세트 등과 같은 대상별 모든 정보에 접근할 수 있습니다. 키워드 인수는 결합 coupling_map 맵만 지정하며, 이 인수가 지정되지 않은 경우에만 target 사용됩니다. 키워드 인수는 qubits 물리적 회로에서 합성이 수행되는 경우, 상위 수준 객체가 정의되는 큐비트 목록을 지정합니다. 의 None 값은 레이아웃이 아직 선택되지 않았으며, 이 연산이 적용되는 대상 또는 결합 맵 내의 물리적 큐비트가 아직 결정되지 않았음을 나타냅니다. options또한, 플러그인별 옵션과 조정 가능한 항목은 자유 형식의 구성 사전인 를 통해 지정할 수 있습니다. 플러그인에 이러한 구성 옵션이 있다면, 자유 형식 입력란이므로 사용자가 해당 구성 옵션을 어떻게 지정해야 하는지, 그리고 어떻게 사용되는지에 대해 명확하게 설명해야 합니다. 이 메서드는 run() 해당 상위 레벨 객체로부터 합성된 회로를 나타내는 객체를 QuantumCircuit 반환할 것으로 예상됩니다. 또한, 주어진 상위 수준 객체를 합성 방법이 합성할 수 없음을 나타내는 값을 반환하는 None 것도 허용됩니다. 고수준 객체의 실제 합성은 트랜스파일러 패스에서 HighLevelSynthesis 수행됩니다. 자세한 내용은 모든 필수 입력 항목에 대한 문서를 HighLevelSynthesisPlugin 참조하십시오. 플러그인 클래스의 예시는 대략 다음과 같을 것입니다:
from qiskit.transpiler.passes.synthesis.plugin import HighLevelSynthesisPlugin
from qiskit.synthesis.clifford import synth_clifford_bm
class SpecialSynthesisClifford(HighLevelSynthesisPlugin):
def run(self, high_level_object, coupling_map=None, target=None, qubits=None, **options):
if higher_level_object.num_qubits <= 3:
return synth_clifford_bm(high_level_object)
else:
return Nonesynth_clifford_bm위의 예제는 메서드 를 사용하여, 최대 3개의 큐비트를 가진 유형의 Clifford 객체를 합성하는 플러그인을 생성합니다.
두 번째 단계는 패키지 메타데이터에서 를 HighLevelSynthesisPlugin setuptools 진입점으로 지정하는 것입니다. 이를 위해 플러그인 패키지를 위한 테이블을 entry-points 에 pyproject.toml 추가하고, 해당 qiskit.synthesis 네임스페이스 아래에 필요한 진입점을 포함시킵니다. 예를 들어,
[project.entry-points."qiskit.synthesis"]
"clifford.special" = "qiskit_plugin_pkg.module.plugin:SpecialSynthesisClifford"는 name 점 “.”으로 구분된 두 부분으로 구성됩니다: 합성 플러그인이 적용되는 유형의 Operation 이름(clifford)과 플러그인의 이름(special)입니다. 각 플러그인의 이름이 고유하기만 하다면, 단일 패키지에 포함할 수 있는 플러그인의 수에는 제한이 없습니다.
플러그인 사용
단일 합성 플러그인
플러그인을 사용하려면 합성 플러그인이 포함된 패키지를 설치하기만 하면 됩니다. 그러면 키스킷이 설치된 플러그인을 자동으로 검색하여 적절한 플러그인에 대한 유효한 옵션으로 노출하고 transpile() 콰그와 패스 생성자에 대한 유효한 옵션으로 노출합니다. 로드/가져올 수 없는 설치된 플러그인이 있는 경우 Python 로깅에 기록됩니다.
설치된 단일 합성 플러그인의 목록을 확인하려면 함수를 qiskit.transpiler.passes.synthesis.plugin.unitary_synthesis_plugin_names() 사용할 수 있습니다.
고수준 합성 플러그인
고수준 합성 플러그인을 사용하려면, 먼저 다양한 고수준 객체에 사용할 플러그인의 이름을 저장하기 위해 를 HLSConfig 인스턴스화해야 합니다. 예를 들어,
HLSConfig(permutation=["acg"], clifford=["layers"], linear_function=["pmh"])... 플러그인을 acg 사용하여 객체를 합성하고 PermutationGate ,... layers 플러그인을 사용하여 객체를 합성하며 Clifford ,... 플러그인을 pmh 사용하여 객체를 합성하는 LinearFunction 고수준 합성 구성을 생성합니다. 키워드 인수는 관련 객체의 필드입니다 Operation.name . clifford예를 들어, 모든 Clifford 연산에는 가 name 있으므로, 이것이 키워드 인수로 사용됩니다. 여기에서는 설치된 플러그인이 처리할 수 있는 모든 키워드 인수를 지정할 수 있으며, 해당 사용자 정의 객체를 처리하는 플러그인이 설치되어 있다면 그 객체도 포함됩니다. 각 인자 내에서 플러그인을 구성하는 대체 형식에 대한 자세한 내용은 를 참조하십시오 HLSConfig .
각 상위 레벨 객체에 대해 주어진 플러그인 목록은 그 중 하나가 성공할 때까지 순차적으로 시도됩니다(위의 예에서는 각 목록에 하나의 플러그인만 포함되어 있습니다). 이름으로 플러그인을 지정하는 대신 (name, options) 튜플을 전달할 수 있으며, 튜플의 두 번째 요소는 플러그인 옵션이 포함된 딕셔너리입니다.
생성된 후에는 이 HLSConfig 객체를 또는 generate_preset_pass_manager() 의 transpile() 인수로 hls_config 전달하면, 더 큰 컴파일 워크플로우의 일환으로 지정된 플러그인이 사용됩니다.
Operation.name주어진 대상에 대해 설치된 고수준 합성 플러그인 목록을 확인하려면, 원하는 name 대상을 인수로 전달하여 함수를 high_level_synthesis_plugin_names() 사용할 수 있습니다:
high_level_synthesis_plugin_names("clifford")는 설치된 모든 클리포드 신디사이저 플러그인 목록을 반환합니다.
사용 가능한 플러그인
다음은 키스킷에서 사용할 수 있는 합성 플러그인 클래스입니다. 이러한 클래스는 직접 사용해서는 안 되며, 위에 설명된 플러그인 인터페이스를 통해 사용해야 합니다. 여기에는 포함된 각 플러그인에 대한 설명서를 쉽게 찾고 특정 객체에 대한 서로 다른 합성 방법을 쉽게 비교할 수 있도록 클래스가 나열되어 있습니다.
단일 합성 플러그인
AQC 합성 플러그인
AQCSynthesisPlugin() | AQC 기반 키스킷 단일 합성 플러그인입니다. |
솔로베이-키타예프 합성 플러그인
SolovayKitaevSynthesis() | 솔로베이-키타에프 키스킷 단일 합성 플러그인. |
로스-셀링거 합성 플러그인
RossSelingerSynthesis() | Ross-Selinger Qiskit 단위 합성 플러그인. |
클리포드 단일 합성 플러그인
CliffordUnitarySynthesis() | 클리포드 단일 합성 플러그인. |
기본 단일 합성 플러그인
기본 유니터리 합성 플러그인은 트랜스파일러 패스가 UnitarySynthesis 회로 내의 유니터리 게이트를 합성하는 데 사용하는 기본 알고리즘을 정의합니다. 그 동작은 대상 유니터리의 큐비트 수와 대상 기저에 따라 달라집니다.
연속적인 기저 집합
대상 기반이 연속적일 때(즉, Clifford+T가 아닐 때), 플러그인은 다음과 같은 분해를 사용합니다:
OneQubitEulerDecomposer1-큐비트 게이트: 오일러 각 분해 (참조).- 2-큐비트 게이트: KAK/카르탕 분해 (참조:
TwoQubitBasisDecomposerTwoQubitControlledUDecomposer,,XXDecomposer). - 3개 이상의 큐비트 게이트: 양자 섀넌 분해, 참조
qs_decomposition().
1큐비트 및 2큐비트 게이트의 경우, 플러그인은 대상의 기준 오류 정보를 활용하여 기대 충실도를 극대화하는 분해를 선택합니다.
클리포드+T 기저 집합
SolovayKitaevDecomposition대상 기저가 Clifford+T일 때, 이 플러그인은 Solovay-Kitaev 알고리즘(참조)을 사용하여 1-큐비트 유니터리를 근사합니다. recursion_degree=5``basis_gates=["h", "t", "tdg"]기본 근사치를 생성하는 데 사용되는 설정은, depth=12 및 이며, 이는 근사 품질과 계산 비용 간의 균형을 맞추기 위해 경험적으로 선정되었습니다. 사용자 정의 매개변수를 사용하여 Solovay-Kitaev 알고리즘을 적용하거나, 여러 회로에 대해 근사값을 재계산하는 것을 피하려면, 이 기본 플러그인 대신 유니터리 합성 플러그인을 호출할 SolovayKitaevSynthesis 수 있습니다.
현재 Qiskit은 클리포드+T 기저 집합에서 2개 이상의 큐비트 유니터리를 직접 근사하는 알고리즘을 포함하지 않습니다. 따라서 사전 설정된 패스 관리자는 먼저 이러한 게이트들을 ["cx", "u"] 기저로 분해한 후, 결과적으로 얻어진 1-큐비트 단위성 게이트들에 솔로베이-키타예프 기법을 적용한다.
DefaultUnitarySynthesis() | 기본 단일 합성 플러그인. |
고수준 합성
Qiskit에서 바로 사용할 수 있는 고수준 합성 플러그인에는 객체, LinearFunction 객체 및 PermutationGate 객체를 합성하는 Clifford 플러그인이 포함되어 있습니다. 이러한 플러그인 중 일부는 암묵적으로 모든 노드 간 연결을 목표로 합니다. 이는 실질적인 제약 사항이 아닙니다. HighLevelSynthesis 일반적으로 레이아웃 및 라우팅 단계 이전에 수행되기 때문에, 추가적인 SWAP 게이트를 삽입함으로써 최종 회로가 디바이스의 연결성을 준수하도록 보장할 수 있기 때문입니다. 좋은 예로, SWAP 게이트를 최대 2층까지 사용하여 어떤 순열이든 합성할 수 있는 순열 합성 플러그인이 ACGSynthesisPermutation 있습니다. 반면, 일부 플러그인은 암묵적으로 선형 연결성을 목표로 합니다. 일반적으로 합성 회로는 회로 깊이와 게이트 수가 더 많지만, 다음 레이아웃 단계에서 디바이스 토폴로지 내의 연속된 큐비트 행을 선택하면 추가적인 SWAP 게이트가 삽입되지 않습니다. n이에 대한 좋은 예로, 깊이 내에서 큐비트의 n 모든 순열을 합성할 수 있는 순열 합성 플러그인이 KMSSynthesisPermutation 있습니다. 일반적으로 ‘모든 노드 간 연결을 위한 회로를 합성하고 SWAP 게이트를 삽입하는 방식’과 ‘선형 연결을 위한 회로를 합성하고 SWAP 게이트를 적게 삽입하거나 아예 삽입하지 않는 방식’ 중 어느 쪽이 더 나은 최종 회로를 만들어내는지 미리 알기 어렵기 때문에, 두 가지 방법을 모두 시도해 보고 어느 쪽이 더 좋은 결과를 내는지 확인하는 것이 합리적일 것입니다. 마지막으로, 일부 플러그인은 특정 연결 상태를 대상으로 하므로 레이아웃이 설정된 후에 실행해야 합니다. 이 경우, 합성된 회로는 해당 소자의 토폴로지를 자동으로 따릅니다. 이에 대한 좋은 예로, 임의의 결합 매핑에 대해 임의의 순열을 합성할 수 있는 순열 합성 플러그인이 TokenSwapperSynthesisPermutation 있습니다. 자세한 내용은 각 플러그인의 설명을 참조해 주십시오.
각 상위 레벨 객체에 대해, Qiskit에서 직접 사용할 수 있는 모든 플러그인을 나열한 표를 제공합니다. 여기에는 플러그인 이름, 플러그인 클래스, 대상 연결 맵 및 선택적으로 추가 정보를 포함합니다. HLSConfig플러그인은 앞서 설명한 방식을 통해 사용해야 한다는 점을 기억하십시오. 예를 들어:
HLSConfig(permutation=["kms"])name = "permutation"객체(즉,.을 가진 객체)를 합성하기 PermutationGate 위해 플러그인을 kms 사용하는 고수준 합성 구성을 생성합니다. KMSSynthesisPermutation이 경우 플러그인 이름은 “kms”이며, 플러그인 클래스는.입니다. 이 특정 합성 알고리즘은 선형 최인접 연결성을 따르는 회로를 생성했다.
고수준 합성 플러그인
클리포드 합성
플러그인 이름 | 플러그인 클래스 | 타겟 연결 | 설명 |
|---|---|---|---|
"ag" | AGSynthesisClifford | 올투올 | 탐욕스럽게 CX 수 최적화 |
"bm" | BMSynthesisClifford | 올투올 | 의 최적 개수; "default" 에서 사용됨 |
"greedy" | GreedySynthesisClifford | 올투올 | CX 카운트를 무분별하게 최적화합니다. 에서 "default" 사용됩니다 |
"layers" | LayerSynthesisClifford | 올투올 | |
"lnn" | LayerLnnSynthesisClifford | 선형 | CX 게이트는 많지만, CX 깊이는 최대 까지 보장됩니다 |
"default" | DefaultSynthesisClifford | 올투올 | 일반적으로 CX 개수를 최적화하는 데 가장 적합하며( 의 경우 최적의 CX 개수) |
AGSynthesisClifford() | 아론슨-고트스만 방식에 기반한 클리포드 합성 플러그인입니다. |
BMSynthesisClifford() | 브라비-마슬로프 방식에 기반한 클리포드 합성 플러그인입니다. |
GreedySynthesisClifford() | 탐욕스러운 합성 브라비-후-마슬로프-샤이둘린 방식을 기반으로 한 클리포드 합성 플러그인입니다. |
LayerSynthesisClifford() | 클리포드를 레이어로 합성하는 Bravyi-Maslov 방식에 기반한 클리포드 합성 플러그인입니다. |
LayerLnnSynthesisClifford() | 브라비-마슬로프 방식에 기반한 클리포드 합성 플러그인으로 클리포드를 레이어로 합성하며, 합성된 각 레이어는 LNN 연결성을 준수합니다. |
DefaultSynthesisClifford() | 기본 클리포드 합성 플러그인입니다. |
선형 함수 합성
플러그인 이름 | 플러그인 클래스 | 타겟 연결 | 설명 |
|---|---|---|---|
"kms" | KMSSynthesisLinearFunction | 선형 | CX 게이트는 많지만, CX 깊이는 최대 까지 보장됩니다 |
"pmh" | PMHSynthesisLinearFunction | 올투올 | 탐욕스럽게 CX 수를 최적화합니다 "default" |
"default" | DefaultSynthesisLinearFunction | 올투올 | cX 수 최적화에 가장 적합 |
KMSSynthesisLinearFunction() | 쿠틴-몰튼-스미스라인 방식에 기반한 선형 함수 합성 플러그인입니다. |
PMHSynthesisLinearFunction() | 파텔-마코프-헤이즈 방식에 기반한 선형 함수 합성 플러그인입니다. |
DefaultSynthesisLinearFunction() | 기본 선형 함수 합성 플러그인입니다. |
순열 합성
플러그인 이름 | 플러그인 클래스 | 타겟 연결 | 설명 |
|---|---|---|---|
"basic" | BasicSynthesisPermutation | 올투올 | 최적의 스왑 횟수; 다음에서 사용 "default" |
"acg" | ACGSynthesisPermutation | 올투올 | 이하의 SWAP 깊이를 보장합니다 |
"kms" | KMSSynthesisPermutation | 선형 | SWAP 게이트가 많지만, SWAP 깊이는 최대 까지 보장합니다 |
"token_swapper" | TokenSwapperSynthesisPermutation | 임의 | 임의의 연결을 위해 탐욕스럽게 SWAP 수를 최적화합니다 |
"default" | BasicSynthesisPermutation | 올투올 | 스왑 횟수 최적화에 가장 적합 |
BasicSynthesisPermutation() | 정렬을 기반으로 하는 순열 합성 플러그인입니다. |
ACGSynthesisPermutation() | 알론, 정, 그레이엄 방식에 기반한 순열 합성 플러그인입니다. |
KMSSynthesisPermutation() | 쿠틴, 몰튼, 스미스라인 방식에 기반한 순열 합성 플러그인입니다. |
TokenSwapperSynthesisPermutation() | 토큰 스와퍼 알고리즘을 기반으로 하는 순열 합성 플러그인입니다. |
양자장 이론 합성
플러그인 이름 | 플러그인 클래스 | 타겟 연결 |
|---|---|---|
"full" | QFTSynthesisFull | 올투올 |
"line" | QFTSynthesisLine | 선형 |
"default" | QFTSynthesisFull | 올투올 |
QFTSynthesisFull() | 올투올 연결을 사용하는 QFT 게이트용 합성 플러그인입니다. |
QFTSynthesisLine() | 선형 연결을 사용하는 QFT 게이트용 합성 플러그인입니다. |
MCX 합성
다음 표에는 k개의 제어 큐비트를 가진 게이트에 MCXGate 사용할 수 있는 합성 플러그인이 나열되어 있습니다. 사용 가능한 깨끗한/오염된 보조 큐비트의 수가 충분하지 않은 경우, 해당 합성 방법은 None을 반환합니다.
플러그인 이름 | 플러그인 클래스 | 깨끗한 안실라 수 | 더티 앤실라 수 | 설명 |
|---|---|---|---|---|
"gray_code" | MCXSynthesisGrayCode | 0 | 0 | 기하급수적으로 많은 CX 게이트가 필요하므로, 값이 작은 경우에만 사용하십시오 |
"noaux_v24" | MCXSynthesisNoAuxV24 | cX 게이트의 이차 수 | ||
"noaux_hp24" | MCXSynthesisNoAuxHP24 | CX 게이트의 선형 개수; 에 대해 "gray_code" "noaux_v24" 또는 대신 사용 | ||
"n_clean_m15" | MCXSynthesisNCleanM15 | 최대 개의 CX 게이트 | ||
"n_dirty_i15" | MCXSynthesisNDirtyI15 | 최대 개의 CX 게이트 | ||
"2_clean_kg24" | MCXSynthesis2CleanKG24 | 최대 개의 CX 게이트 | ||
"2_dirty_kg24" | MCXSynthesis2DirtyKG24 | 0 | 2 | 최대 개의 CX 게이트 |
"1_clean_kg24" | MCXSynthesis1CleanKG24 | 1 | 0 | 최대 개의 CX 게이트 |
"1_dirty_kg24" | MCXSynthesis1DirtyKG24 | 최대 개의 CX 게이트 | ||
"1_clean_b95" | MCXSynthesis1CleanB95 | 최대 개의 CX 게이트 | ||
"default" | MCXSynthesisDefault | 임의 | 임의 | 사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다 |
MCXSynthesisGrayCode() | 그레이 코드 기반의 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesisNoAuxV24() | MCPhaseGate, 에 대한 구현을 기반으로 하는 다중 제어 X 게이트용 합성 플러그인으로, Vale 외(2024)의 논문을 기반으로 합니다. |
MCXSynthesisNoAuxHP24() | 황과 팔스버그의 논문을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesisNCleanM15() | Maslov(2016)의 논문을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesisNDirtyI15() | Iten 외(2016)의 논문을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesis2CleanKG24() | 카타르와 기드니의 논문(2024)을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesis2DirtyKG24() | 카타르와 기드니의 논문(2024)을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesis1CleanKG24() | 카타르와 기드니의 논문(2024)을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesis1DirtyKG24() | 카타르와 기드니의 논문(2024)을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesis1CleanB95() | Barenco 외(1995)의 논문을 기반으로 한 다중 제어 X 게이트용 합성 플러그인입니다. |
MCXSynthesisDefault() | 다중 제어 X 게이트를 위한 기본 합성 플러그인입니다. |
MCMT 합성
플러그인 이름 | 플러그인 클래스 | 깨끗한 안실라 수 | 더티 앤실라 수 | 설명 |
|---|---|---|---|---|
"vchain" | MCMTSynthesisVChain | 는 선형 수의 토폴리 게이트를 사용합니다 | ||
"noaux" | MCMTSynthesisNoAux | 키스킷의 표준 제어 메커니즘을 사용합니다 | ||
"xgate" | MCMTSynthesisXGate | 는 선형 수의 토폴리 게이트를 사용합니다 | ||
"default" | MCMTSynthesisDefault | 임의 | 임의 | 사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다 |
MCMTSynthesisVChain() | MCMTGate 에 대한 V-체인 기반 합성입니다. |
MCMTSynthesisNoAux() | MCMTGate 에 대한 V-체인 기반 합성입니다. |
MCMTSynthesisXGate() | X 게이트를 기본 게이트로 하는 MCMTGate 의 합성입니다. |
MCMTSynthesisDefault() | MCMT 게이트에 대한 기본 분해입니다. |
정수 비교기
플러그인 이름 | 플러그인 클래스 | 설명 | 보조 큐비트 |
|---|---|---|---|
"twos" | IntComparatorSynthesis2s | 덧셈을 2의 보수로 사용 | 깨끗한 |
"noaux" | IntComparatorSynthesisNoAux | 모든 허용된 정수 값에서 제어되는 대상을 뒤집습니다 | 없음 |
"default" | IntComparatorSynthesisDefault | 사용 가능한 보조 큐비트에 따라 최적의 알고리즘을 사용합니다 | 임의 |
IntComparatorSynthesis2s() | 2s 보수를 기반으로 한 정수 비교입니다. |
IntComparatorSynthesisNoAux() | 보조 큐비트가 없는 경우와 비교하면 기하급수적으로 비용이 많이 들 수 있습니다. |
IntComparatorSynthesisDefault() | IntegerComparatorGate 에 대한 기본 합성입니다. |
합계
플러그인 이름 | 플러그인 클래스 | 설명 | 보조 큐비트 |
|---|---|---|---|
"default" | WeightedSumSynthesisDefault | v-체인 기반 합성 사용 | 개의 큐비트를 입력으로 받아, 개의 깨끗한 보조 큐비트를 사용했다 |
WeightedSumSynthesisDefault() | 기본 합성 알고리즘을 사용하여 를 WeightedSumGate 합성합니다. |
파울리 진화 합성
플러그인 이름 | 플러그인 클래스 | 설명 | 타겟 연결 |
|---|---|---|---|
"rustiq" | PauliEvolutionSynthesisRustiq | rustiq 회로 합성 라이브러리의 합성 방법 사용 | 올투올 |
"default" | PauliEvolutionSynthesisDefault | 폴리 용어당 대각선 클리포드 사용 | 올투올 |
PauliEvolutionSynthesisDefault() | 기본 합성 알고리즘을 사용하여 를 PauliEvolutionGate 합성합니다. |
PauliEvolutionSynthesisRustiq() | Rustiq를 사용하여 를 PauliEvolutionGate 합성하세요. |
모듈형 가산기 합성
플러그인 이름 | 플러그인 클래스 | 깨끗한 안실라 수 | 설명 |
|---|---|---|---|
"modular_v17" | ModularAdderSynthesisV17 | 보조 큐비트가 없는 모듈식 가산기 | |
"ripple_cdkm" | ModularAdderSynthesisC04 | 리플 캐리 가산기 | |
"ripple_vbe" | ModularAdderSynthesisV95 | -비트 번호의 경우 | 리플 캐리 가산기 |
"qft" | ModularAdderSynthesisD00 | qFT 기반 가산기 | |
"default" | ModularAdderSynthesisDefault | 임의 | 사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다 |
ModularAdderSynthesisV17() | 보조 큐비트가 없는 모듈식 가산기(모듈로 )입니다. |
ModularAdderSynthesisC04() | 리플 캐리 가산기, 모듈로 . |
ModularAdderSynthesisD00() | QFT 기반 가산기, 모듈로 . |
ModularAdderSynthesisV95() | 리플 캐리 가산기, 모듈로 . |
ModularAdderSynthesisDefault() | 기본 모듈형 가산기(노 캐리 인, 노 캐리 아웃 쿼비트) 합성입니다. |
반가산기 합성
플러그인 이름 | 플러그인 클래스 | 깨끗한 안실라 수 | 설명 |
|---|---|---|---|
"ripple_cdkm" | HalfAdderSynthesisC04 | 리플 캐리 가산기 | |
"ripple_r25" | HalfAdderSynthesisR25 | 부수가 없는 리플 캐리 가산기 | |
"ripple_vbe" | HalfAdderSynthesisV95 | -비트 번호의 경우 | 리플 캐리 가산기 |
"qft" | HalfAdderSynthesisD00 | qFT 기반 가산기 | |
"default" | HalfAdderSynthesisDefault | 임의 | 사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다 |
HalfAdderSynthesisC04() | 캐리 아웃 비트가 있는 리플 캐리 가산기입니다. |
HalfAdderSynthesisD00() | 캐리 인과 캐리 아웃 비트가 있는 QFT 기반 가산기입니다. |
HalfAdderSynthesisV95() | 캐리 아웃 비트가 있는 리플 캐리 가산기입니다. |
HalfAdderSynthesisR25() | 보조 큐비트가 없는 캐리 아웃 비트가 있는 리플 캐리 가산기입니다. |
HalfAdderSynthesisDefault() | 기본 하프 가산(캐리 인은 없지만 캐리 아웃 큐비트) 합성입니다. |
풀 애더 합성
플러그인 이름 | 플러그인 클래스 | 깨끗한 안실라 수 | 설명 |
|---|---|---|---|
"ripple_cdkm" | FullAdderSynthesisC04 | 리플 캐리 가산기 | |
"ripple_vbe" | FullAdderSynthesisV95 | -비트 번호의 경우 | 리플 캐리 가산기 |
"default" | FullAdderSynthesisDefault | 임의 | 사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다 |
FullAdderSynthesisC04() | 캐리 인과 캐리 아웃 비트가 있는 리플 캐리 가산기입니다. |
FullAdderSynthesisV95() | 캐리 인과 캐리 아웃 비트가 있는 리플 캐리 가산기입니다. |
FullAdderSynthesisDefault() | 캐리 인과 캐리 아웃 비트가 있는 리플 캐리 가산기입니다. |
승수 합성
플러그인 이름 | 플러그인 클래스 | 깨끗한 안실라 수 | 설명 |
|---|---|---|---|
"cumulative" | MultiplierSynthesisH18 | 에 따라 AdderGate | 제어된 가산기를 기반으로 하는 누적 가산기 |
"qft" | MultiplierSynthesisR17 | qFT 기반 승수 | |
"default" | MultiplierSynthesisDefault | 임의 | 사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다 |
MultiplierSynthesisH18() | 제어된 가산기를 기반으로 한 누적 승수입니다. |
MultiplierSynthesisR17() | QFT 기반 승수입니다. |
MultiplierSynthesisDefault() | 기본 승수 플러그인입니다. |