Skip to main content
IBM Quantum Platform

합성 플러그인

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_mapsupports_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-pointspyproject.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 None

synth_clifford_bm위의 예제는 메서드 를 사용하여, 최대 3개의 큐비트를 가진 유형의 Clifford 객체를 합성하는 플러그인을 생성합니다.

두 번째 단계는 패키지 메타데이터에서 를 HighLevelSynthesisPlugin setuptools 진입점으로 지정하는 것입니다. 이를 위해 플러그인 패키지를 위한 테이블을 entry-pointspyproject.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가 아닐 때), 플러그인은 다음과 같은 분해를 사용합니다:

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올투올n{2,3}n \in \{2,3\} 의 최적 개수; n{2,3}n \in \{2,3\}"default" 에서 사용됨
"greedy"GreedySynthesisClifford올투올CX 카운트를 무분별하게 최적화합니다. n4n\geq 4 에서 "default" 사용됩니다
"layers"LayerSynthesisClifford올투올
"lnn"LayerLnnSynthesisClifford선형CX 게이트는 많지만, CX 깊이는 최대 7n+27n+2 까지 보장됩니다
"default"DefaultSynthesisClifford올투올일반적으로 CX 개수를 최적화하는 데 가장 적합하며( n{2,3}n \in \{2,3\} 의 경우 최적의 CX 개수)
AGSynthesisClifford()아론슨-고트스만 방식에 기반한 클리포드 합성 플러그인입니다.
BMSynthesisClifford()브라비-마슬로프 방식에 기반한 클리포드 합성 플러그인입니다.
GreedySynthesisClifford()탐욕스러운 합성 브라비-후-마슬로프-샤이둘린 방식을 기반으로 한 클리포드 합성 플러그인입니다.
LayerSynthesisClifford()클리포드를 레이어로 합성하는 Bravyi-Maslov 방식에 기반한 클리포드 합성 플러그인입니다.
LayerLnnSynthesisClifford()브라비-마슬로프 방식에 기반한 클리포드 합성 플러그인으로 클리포드를 레이어로 합성하며, 합성된 각 레이어는 LNN 연결성을 준수합니다.
DefaultSynthesisClifford()기본 클리포드 합성 플러그인입니다.
선형 함수 합성
플러그인 이름
플러그인 클래스
타겟 연결
설명
"kms"KMSSynthesisLinearFunction선형CX 게이트는 많지만, CX 깊이는 최대 5n5n 까지 보장됩니다
"pmh"PMHSynthesisLinearFunction올투올탐욕스럽게 CX 수를 최적화합니다 "default"
"default"DefaultSynthesisLinearFunction올투올cX 수 최적화에 가장 적합
KMSSynthesisLinearFunction()쿠틴-몰튼-스미스라인 방식에 기반한 선형 함수 합성 플러그인입니다.
PMHSynthesisLinearFunction()파텔-마코프-헤이즈 방식에 기반한 선형 함수 합성 플러그인입니다.
DefaultSynthesisLinearFunction()기본 선형 함수 합성 플러그인입니다.
순열 합성
플러그인 이름
플러그인 클래스
타겟 연결
설명
"basic"BasicSynthesisPermutation올투올최적의 스왑 횟수; 다음에서 사용 "default"
"acg"ACGSynthesisPermutation올투올22 이하의 SWAP 깊이를 보장합니다
"kms"KMSSynthesisPermutation선형SWAP 게이트가 많지만, SWAP 깊이는 최대 nn 까지 보장합니다
"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"MCXSynthesisGrayCode00기하급수적으로 많은 CX 게이트가 필요하므로, kk 값이 작은 경우에만 사용하십시오
"noaux_v24"MCXSynthesisNoAuxV240000cX 게이트의 이차 수
"noaux_hp24"MCXSynthesisNoAuxHP240000CX 게이트의 선형 개수; k>5k>5 에 대해 "gray_code" "noaux_v24" 또는 대신 사용
"n_clean_m15"MCXSynthesisNCleanM15k2k-200최대 6k66k-6 개의 CX 게이트
"n_dirty_i15"MCXSynthesisNDirtyI1500k2k-2최대 8k68k-6 개의 CX 게이트
"2_clean_kg24"MCXSynthesis2CleanKG242200최대 6k66k-6 개의 CX 게이트
"2_dirty_kg24"MCXSynthesis2DirtyKG2402최대 12k1812k-18 개의 CX 게이트
"1_clean_kg24"MCXSynthesis1CleanKG2410최대 6k66k-6 개의 CX 게이트
"1_dirty_kg24"MCXSynthesis1DirtyKG240011최대 12k1812k-18 개의 CX 게이트
"1_clean_b95"MCXSynthesis1CleanB951100최대 16k816k-8 개의 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"MCMTSynthesisVChaink1k-100는 선형 수의 토폴리 게이트를 사용합니다
"noaux"MCMTSynthesisNoAux0000키스킷의 표준 제어 메커니즘을 사용합니다
"xgate"MCMTSynthesisXGate0000는 선형 수의 토폴리 게이트를 사용합니다
"default"MCMTSynthesisDefault임의임의사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다
MCMTSynthesisVChain()MCMTGate 에 대한 V-체인 기반 합성입니다.
MCMTSynthesisNoAux()MCMTGate 에 대한 V-체인 기반 합성입니다.
MCMTSynthesisXGate()X 게이트를 기본 게이트로 하는 MCMTGate 의 합성입니다.
MCMTSynthesisDefault()MCMT 게이트에 대한 기본 분해입니다.
정수 비교기
플러그인 이름
플러그인 클래스
설명
보조 큐비트
"twos"IntComparatorSynthesis2s덧셈을 2의 보수로 사용n1n - 1 깨끗한
"noaux"IntComparatorSynthesisNoAux모든 O(2l)O(2^l) 허용된 정수 값에서 제어되는 대상을 뒤집습니다없음
"default"IntComparatorSynthesisDefault사용 가능한 보조 큐비트에 따라 최적의 알고리즘을 사용합니다임의
IntComparatorSynthesis2s()2s 보수를 기반으로 한 정수 비교입니다.
IntComparatorSynthesisNoAux()보조 큐비트가 없는 경우와 비교하면 기하급수적으로 비용이 많이 들 수 있습니다.
IntComparatorSynthesisDefault()IntegerComparatorGate 에 대한 기본 합성입니다.
합계
플러그인 이름
플러그인 클래스
설명
보조 큐비트
"default"WeightedSumSynthesisDefaultv-체인 기반 합성 사용ss 개의 큐비트를 입력으로 받아, s1s2s - 1_{s \leq 2} 개의 깨끗한 보조 큐비트를 사용했다
WeightedSumSynthesisDefault()기본 합성 알고리즘을 사용하여 를 WeightedSumGate 합성합니다.
파울리 진화 합성
플러그인 이름
플러그인 클래스
설명
타겟 연결
"rustiq"PauliEvolutionSynthesisRustiqrustiq 회로 합성 라이브러리의 합성 방법 사용올투올
"default"PauliEvolutionSynthesisDefault폴리 용어당 대각선 클리포드 사용올투올
PauliEvolutionSynthesisDefault()기본 합성 알고리즘을 사용하여 를 PauliEvolutionGate 합성합니다.
PauliEvolutionSynthesisRustiq()Rustiq를 사용하여 를 PauliEvolutionGate 합성하세요.
모듈형 가산기 합성
플러그인 이름
플러그인 클래스
깨끗한 안실라 수
설명
"modular_v17"ModularAdderSynthesisV1700보조 큐비트가 없는 모듈식 가산기
"ripple_cdkm"ModularAdderSynthesisC0411리플 캐리 가산기
"ripple_vbe"ModularAdderSynthesisV95n1n-1 nn -비트 번호의 경우리플 캐리 가산기
"qft"ModularAdderSynthesisD0000qFT 기반 가산기
"default"ModularAdderSynthesisDefault임의사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다
ModularAdderSynthesisV17()보조 큐비트가 없는 모듈식 가산기(모듈로 2n2^n )입니다.
ModularAdderSynthesisC04()리플 캐리 가산기, 모듈로 2n2^n.
ModularAdderSynthesisD00()QFT 기반 가산기, 모듈로 2n2^n.
ModularAdderSynthesisV95()리플 캐리 가산기, 모듈로 2n2^n.
ModularAdderSynthesisDefault()기본 모듈형 가산기(노 캐리 인, 노 캐리 아웃 쿼비트) 합성입니다.
반가산기 합성
플러그인 이름
플러그인 클래스
깨끗한 안실라 수
설명
"ripple_cdkm"HalfAdderSynthesisC0411리플 캐리 가산기
"ripple_r25"HalfAdderSynthesisR2500부수가 없는 리플 캐리 가산기
"ripple_vbe"HalfAdderSynthesisV95n1n-1 nn -비트 번호의 경우리플 캐리 가산기
"qft"HalfAdderSynthesisD0000qFT 기반 가산기
"default"HalfAdderSynthesisDefault임의사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다
HalfAdderSynthesisC04()캐리 아웃 비트가 있는 리플 캐리 가산기입니다.
HalfAdderSynthesisD00()캐리 인과 캐리 아웃 비트가 있는 QFT 기반 가산기입니다.
HalfAdderSynthesisV95()캐리 아웃 비트가 있는 리플 캐리 가산기입니다.
HalfAdderSynthesisR25()보조 큐비트가 없는 캐리 아웃 비트가 있는 리플 캐리 가산기입니다.
HalfAdderSynthesisDefault()기본 하프 가산(캐리 인은 없지만 캐리 아웃 큐비트) 합성입니다.
풀 애더 합성
플러그인 이름
플러그인 클래스
깨끗한 안실라 수
설명
"ripple_cdkm"FullAdderSynthesisC0400리플 캐리 가산기
"ripple_vbe"FullAdderSynthesisV95n1n-1 nn -비트 번호의 경우리플 캐리 가산기
"default"FullAdderSynthesisDefault임의사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다
FullAdderSynthesisC04()캐리 인과 캐리 아웃 비트가 있는 리플 캐리 가산기입니다.
FullAdderSynthesisV95()캐리 인과 캐리 아웃 비트가 있는 리플 캐리 가산기입니다.
FullAdderSynthesisDefault()캐리 인과 캐리 아웃 비트가 있는 리플 캐리 가산기입니다.
승수 합성
플러그인 이름
플러그인 클래스
깨끗한 안실라 수
설명
"cumulative"MultiplierSynthesisH18에 따라 AdderGate제어된 가산기를 기반으로 하는 누적 가산기
"qft"MultiplierSynthesisR1700qFT 기반 승수
"default"MultiplierSynthesisDefault임의사용 가능한 보조 알고리즘을 기반으로 최상의 알고리즘을 선택합니다
MultiplierSynthesisH18()제어된 가산기를 기반으로 한 누적 승수입니다.
MultiplierSynthesisR17()QFT 기반 승수입니다.
MultiplierSynthesisDefault()기본 승수 플러그인입니다.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.