회로 합성
qiskit.synthesis
진화 합성
칼럼 1 | 칼럼 2 |
|---|---|
EvolutionSynthesis() | 진화 합성 알고리즘을 위한 인터페이스입니다. |
ProductFormula(순서[, 반복 횟수,...] ) | 비통근 연산자 지수의 분해를 위한 제품 공식 베이스 클래스입니다. |
LieTrotter( [반복 횟수, 삽입 장벽,...] ) | 거짓말 트로터 제품 공식. |
SuzukiTrotter( [순서, 반복 횟수,...] ) | (상위) 스즈키 트로터 제품 공식. |
MatrixExponential() | 행렬 지수화 및 단일 합성을 통한 정확한 연산자 진화. |
QDrift( [반복 횟수, 삽입 장벽,...] ) | Q드리프트 트로터화 방법은 트로터화에서 각 용어를 가중치에 비례하는 확률로 무작위로 선택합니다. |
선형 함수 합성
synth_cnot_count_full_pmh
qiskit.synthesis.synth_cnot_count_full_pmh(state, section_size=None)
파텔, 마르코프, 헤이즈 방법을 사용하여 올투올 아키텍처를 위한 선형 리버시블 회로를 합성합니다.
이 함수는 행렬에 지정된 대로 모든 대 모든 아키텍처에 대한 선형 가역 회로를 최적으로 합성하기 위해 [1의] Patel, Markov 및 Hayes 알고리즘을 구현한 것입니다.
매개변수
- state (list[list[bool]] | ndarray[bool]) – 입력 회로의 상태를 나타내는 부울 가역 행렬.
- section_size (int | None) – 파텔-마르코프-헤이즈 알고리즘에서 각 섹션의 크기 [1]. 와 로
None설정할 경우, 이는 식 ( [1] Eq.)에 제시된 행 연산 횟수의 상한을 대략적으로 최소화합니다. (3).
리턴
선형 변환을 구현하는 CX 전용 회로입니다.
레이즈
ValueError – 가 열 수보다 클 때 발생합니다 section_size .
리턴 유형
참조
- 파텔, 케탄 N., 이고르 L. 마르코프, 존 P. 헤이즈, 선형 가역 회로의 최적 합성, 양자 정보 및 계산 8.3 (2008): 282-294. arXiv:quant-ph/0302002 [quant-ph]
synth_cnot_depth_line_kms
qiskit.synthesis.synth_cnot_depth_line_kms(mat)
쿠틴, 몰튼, 스미스라인 방법을 사용하여 선형 최인접 아키텍처를 위한 선형 가역 회로를 합성합니다.
[1], 섹션 7의 선형 가역 회로를 위한 합성 알고리즘. 이 알고리즘은 최대 깊이 의 CX 게이트를 사용하여 선형 최인접 이웃 아키텍처를 통해 큐비트의 선형 가역 회로를 합성합니다.
매개변수
mat (ndarray[bool]) – 부울 반전 가능한 행렬.
리턴
합성된 양자 회로.
레이즈
QiskitError - mat 가 반전되지 않는 경우.
리턴 유형
참조
- Kutin, S., Moulton, D. P., 스미스라인, L., 원거리에서의 계산, Chicago J. Theor. Comput. Sci.., vol. 2007, (2007), arXiv:quant-ph/0701194
선형 위상 합성
synth_cz_depth_line_mr
qiskit.synthesis.synth_cz_depth_line_mr(mat)
마슬로프와 로텔러를 기반으로 한 선형 최인접 이웃(LNN) 연결을 위한 CZ 회로를 합성합니다.
CXGate이 방법은 회로 내 큐비트의 순서를 반대로 바꾸며, s와 위상 게이트(SGate, SdgGate 또는 ZGate)를 포함하는 회로를 반환한다는 점에 유의하십시오.
매개변수
mat (ndarray) – CZ 회로를 나타내는 부울 값으로 구성된 정사각형 상대각 행렬. mat[i][j]=1 for i<j 게이트를 cz(i,j) 나타냅니다. 위쪽 삼각형만 읽혀지며, 대각선과 아래쪽 삼각형은 아무런 영향을 미치지 않습니다.
리턴
LNN 연결을 위한 깊이 의 CZ 회로를 구현한 회로입니다.
리턴 유형
참조
- 드미트리 마슬로프, 마틴 로텔러, 브루하트 분해 및 양자 회로 변환을 통한 더 짧은 안정기 회로, arXiv:1705.09176.
synth_cx_cz_depth_line_my
qiskit.synthesis.synth_cx_cz_depth_line_my(mat_x, mat_z)
최대 2쿼비트 깊이의 선형 최인접 이웃(LNN) 연결을 위한 -CZ-CX- 회로의 공동 합성 5n, Maslov와 Yang에 기반합니다. 이 방법은 위상 게이트 삽입을 통해 CX 회로 내부의 CZ 회로를 계산합니다.
매개변수
- mat_z (ndarray) – cZ 회로를 나타내는 부울 대칭 행렬입니다.
mat_z[i][j]=1cz(i,j)게이트를 나타냅니다 - mat_x (ndarray) – cX 회로를 나타내는 부울 반전 행렬입니다.
리턴
최대 2큐비트 깊이( 5n)의 CZ 회로를 따르는 CX 회로 구현(-CZ-CX- 회로로 표시)으로, LNN 연결을 위한 회로입니다.
리턴 유형
참조
- Kutin, S., Moulton, D. P., 스미스라인, L., 원거리에서의 계산, Chicago J. Theor. Comput. Sci.., vol. 2007, (2007), arXiv:quant-ph/0701194
- 드미트리 마슬로프, 윌러스 양, CNOT 회로가 생성하는 임의의 하다마드 없는 클리포드 변환을 구현하는 데는 거의 도움이 필요하지 않습니다, arXiv:2210.16195.
synth_cnot_phase_aam
qiskit.synthesis.synth_cnot_phase_aam(cnots, angles, section_size=2)
이 기능은 에이미, 아지마데, 모스카의 GraySynth 알고리즘을 구현한 것입니다.
GraySynth [는] 1에서 제시된, 소규모 패리티 네트워크를 합성하기 위한 휴리스틱 알고리즘이다. 이는 그레이 코드에서 영감을 받았습니다. 이진 문자열 집합 (이하 ‘’이라 cnots 함)이 주어지면, 이 알고리즘은 에 대한 패리티 네트워크를 합성한다. 이를 위해 확장할 인덱스 를 반복적으로 선택한 다음, 문자열 로 구성된 보조 인자 및 에 대해 각각 또는 를 사용하여 효과적으로 재귀 연산을 수행한다. 의 부분 집합이 재귀적으로 확장될 때, 지정된 대상 비트가 (부분) 패리티 cx 를 갖도록 게이트가 적용되는데, 여기서 는 모든 에 대해 일 경우에만 성립한다. 만약 에 의 단일 요소가 포함되어 있다면, 이며, 대상 비트는 원하는 대로 값을 갖게 된다.
특히, 이 알고리즘은 하위 집합 합성이 완료되면 이 cx (CNOT) 게이트 시퀀스를 계산하지 않고 계산할 나머지 패리티를 현재 비트 상태에 대해 표현한다는 불변성을 유지합니다. 이를 통해 알고리즘은 비연산 기반 방식에 내재된 '역추적'을 피할 수 있습니다.
알고리즘은 섹션 4의 [1절에] 자세히 설명되어 있습니다.
매개변수
-
열이 합성할 패리티인 행렬 e. g.:
[[0, 1, 1, 1, 1, 1], [1, 0, 0, 1, 1, 1], [1, 0, 0, 1, 0, 0], [0, 0, 1, 0, 1, 0]]해당사항:
x1^x2 + x0 + x0^x3 + x0^x1^x2 + x0^x1^x3 + x0^x1 -
angles (list[str]) – 적용될 모든 위상 변환 게이트를 포함하는 목록으로, 의 순서와 동일합니다
cnots. 숫자는 의 각도로 해석되며, 그렇지 않은 경우 요소는't','tdg','s','sdg'또는 이어야 합니다'z'. -
section_size (int | None) – 파텔–마르코프–헤이즈 알고리즘에서 각 섹션의 크기.
section_size큐비트 수의 약수여야 한다.
리턴
분해된 양자 회로.
레이즈
QiskitError – 와 cnots 의 차원이 일치하지 angles 않거나, 각도가 부동소수점 값이 아니거나, 지원되는 게이트인 ‘t’, ‘tdg’, ‘s’, ‘sdg’ 또는 ‘z’ 중 하나에 해당하지 않을 때 발생합니다.
리턴 유형
참조
- 매튜 에이미, 파시아드 아짐자데, 미셸 모스카. 제어되지 않은 위상 회로의 제어되지 않은 복잡성에 대해.., 양자 과학 및 기술 4.1 (2018): 015002. arXiv:1712.01859
순열 합성
synth_permutation_depth_lnn_kms
qiskit.synthesis.synth_permutation_depth_lnn_kms(pattern)
쿠틴, 몰튼, 스미스라인 방법을 사용하여 선형 최접근 이웃 아키텍처의 순열 회로를 합성합니다.
이것은 [1], 섹션 6의 순열 합성 알고리즘입니다. 최대 깊이 및 최대 크기 (여기서 깊이와 크기는 모두 SWAP과 관련하여 측정됨)의 SWAP 게이트를 사용하여 선형 최인접 이웃 아키텍처를 통해 n 큐비트의 임의의 순열을 합성합니다.
매개변수
pattern (list[int] | ndarray[int]) – 순열 패턴으로, 순열을 적용한 후 어떤 큐비트가 위치 0, 1, 2 등에 배치되는지를 나타냅니다. 즉, 순열이 큐비트를 위치 로 m 매핑할 pattern[k] = m 때입니다 k. 예를 들어, 패턴 는 큐비트 가 위치 로 2 이동하고 0, 큐비트 가 위치 로 4 이동하는 1등을 의미합니다 [2, 4, 3, 0, 1] .
리턴
합성된 양자 회로.
리턴 유형
참조
- 사무엘 A. 쿠틴, 데이비드 페트리 몰튼, 로렌 M. 스미스라인. 원거리에서의 계산.., arXiv:quant-ph/0701194v1
synth_permutation_basic
qiskit.synthesis.synth_permutation_basic(pattern)
정렬을 사용하여 완전히 연결된 아키텍처에 대한 순열 회로를 합성합니다.
더 정확히 말하면, 입력 순열이 길이가 m 인 사이클인 경우 m-1 스왑(그리고 깊이 m-1)이 있는 양자 회로가 생성되고, 입력 순열이 여러 개의 분리된 사이클로 구성된 경우 각 사이클은 본질적으로 독립적으로 처리됩니다.
매개변수
pattern (list[int] | ndarray[int]) – 순열 패턴으로, 순열을 적용한 후 어떤 큐비트가 위치 0, 1, 2 등에 배치되는지를 나타냅니다. 즉, 순열이 큐비트를 위치 로 m 매핑할 pattern[k] = m 때입니다 k. 예를 들어, 패턴 는 큐비트 가 위치 로 2 이동하고 0, 큐비트 가 위치 로 4 이동하는 1등을 의미합니다 [2, 4, 3, 0, 1] .
리턴
합성된 양자 회로.
리턴 유형
synth_permutation_acg
qiskit.synthesis.synth_permutation_acg(pattern)
알론, 정, 그레이엄 방법을 사용하여 완전히 연결된 아키텍처에 대한 순열 회로를 합성합니다.
이렇게 하면 깊이 2의 양자 회로가 생성됩니다(스왑 수로 측정).
이 구현은 참조 [1의] 명제 4.1 를 기반으로 하며, 자세한 증명은 참조 [2의] 정리 2에 나와 있습니다
매개변수
pattern (list[int] | ndarray[int]) – 순열 패턴으로, 순열을 적용한 후 어떤 큐비트가 위치 0, 1, 2 등에 배치되는지를 나타냅니다. 즉, 순열이 큐비트를 위치 로 m 매핑할 pattern[k] = m 때입니다 k. 예를 들어, 패턴 는 큐비트 가 위치 로 2 이동하고 0, 큐비트 가 위치 로 4 이동하는 1등을 의미합니다 [2, 4, 3, 0, 1] .
리턴
합성된 양자 회로.
리턴 유형
참조
- N. Alon, F. R. K. Chung, 및 R. L. Graham. 매칭을 통한 그래프의 라우팅 순열.., 제25회 연례 ACM 컴퓨팅 이론 심포지엄(1993) 논문집. 583-591페이지. (확장된 초록) 10.1145/167088.167239
- N. Alon, F. R. K. Chung, 및 R. L. Graham. 매칭을 통한 그래프의 라우팅 순열.., (전체 문서)
synth_permutation_reverse_lnn_kms
qiskit.synthesis.synth_permutation_reverse_lnn_kms(num_qubits)
쿠틴, 몰튼, 스미스라인 방법을 사용하여 선형 최접근 이웃 아키텍처의 역순열을 합성합니다.
[1의] 역순열을 위한 합성 알고리즘, 섹션 5. 이 알고리즘은 깊이가 있는 CX 게이트를 사용하여 선형 최인접 이웃 아키텍처를 통해 큐비트에 대한 역순열을 합성합니다( ).
매개변수
num_qubits (int) – 큐비트의 개수.
리턴
합성된 양자 회로.
리턴 유형
참조
- Kutin, S., Moulton, D. P., 스미스라인, L., 원거리에서의 계산, Chicago J. Theor. Comput. Sci.., vol. 2007, (2007), arXiv:quant-ph/0701194
클리포드 합성
synth_clifford_full
qiskit.synthesis.synth_clifford_full(clifford, method=None)
QuantumCircuit연산자 를 Clifford 로 분해하십시오.
큐비트의 경우 이는 참조 [1의] 최적 CX 비용 분해를 기반으로 합니다. 큐비트의 경우 참조 [3의] 일반적인 비최적 욕심 컴파일 루틴을 사용하여 수행되며, 일반적으로 [2의] AG 방식에 비해 더 나은 CX 비용을 산출합니다.
매개변수
- clifford (Clifford) – 클리포드 연산자.
- method (str | None) – 합성 방법 (
'AG'또는'greedy'). 이 옵션을 설정하면 큐비트에 대한 최적 분해 방식이 무시됩니다.
리턴
클리포드의 회로 구현입니다.
리턴 유형
참조
- S. 브라비, D. 마슬로프, 하다마드가 없는 회로가 클리포드 그룹의 구조를 드러내다, arXiv:2003.09412 [quant-ph]
- S. 아론슨, D. 고트스만, 안정기 회로의 향상된 시뮬레이션, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
- 세르게이 브라비, 샤오한 후, 드미트리 마슬로프, 루슬란 샤이둘린, 템플릿과 심볼릭 폴리 게이츠를 이용한 클리포드 회로 최적화, arXiv:2105.02291 [quant-ph]
synth_clifford_ag
qiskit.synthesis.synth_clifford_ag(clifford)
QuantumCircuit Aaronson-Gottesman 방법 [1] 에 따라 연산자 를 Clifford 로 분해한다.
매개변수
clifford (Clifford) – 클리포드 연산자.
리턴
클리포드의 회로 구현입니다.
리턴 유형
참조
- S. 아론슨, D. 고트스만, 안정기 회로의 향상된 시뮬레이션, Phys. Rev. A 70, 052328 (2004). arXiv:quant-ph/0406196
synth_clifford_bm
qiskit.synthesis.synth_clifford_bm(clifford)
Bravyi-Maslov 방법을 기반으로 한 QuantumCircuit 2 큐비트 또는 3 큐비트 연산자의 Clifford 최적 CX-비용 분해 [1].
매개변수
clifford (Clifford) – 클리포드 연산자.
리턴
클리포드의 회로 구현입니다.
레이즈
QiskitError - 클리퍼드가 3큐비트를 초과하는 경우.
리턴 유형
참조
- S. 브라비, D. 마슬로프, 하다마드가 없는 회로가 클리포드 그룹의 구조를 드러내다, arXiv:2003.09412 [quant-ph]
synth_clifford_greedy
qiskit.synthesis.synth_clifford_greedy(clifford)
Bravyi, Hu, Maslov 및 [Sh] aydulin 1의 부록 A에 설명된 탐욕적 클리포드 컴파일러를 바탕으로 QuantumCircuit 연산자를 Clifford 로 분해하라.
이 방법은 일반적으로 아론슨-고트스만 방법에 비해 더 나은 CX 비용을 산출합니다.
이 함수는 부록 [1의] 욕심 많은 클리포드 컴파일러만 구현하며, 같은 논문에서 언급된 템플릿과 심볼릭 폴리 게이트 최적화는 구현하지 않습니다.
매개변수
clifford (Clifford) – 클리포드 연산자.
리턴
클리포드의 회로 구현입니다.
레이즈
QiskitError - 심플렉틱 가우시안 제거에 실패한 경우.
리턴 유형
참조
- 세르게이 브라비, 샤오한 후, 드미트리 마슬로프, 루슬란 샤이둘린, 템플릿과 심볼릭 폴리 게이츠를 이용한 클리포드 회로 최적화, arXiv:2105.02291 [quant-ph]
synth_clifford_layers
qiskit.synthesis.synth_clifford_layers(cliff, cx_synth_func=<function _default_cx_synth_func>, cz_synth_func=<function _default_cz_synth_func>, cx_cz_synth_func=None, cz_func_reverse_qubits=False, validate=False)
a를 Clifford 층으로 합성함으로써, 이는 Bravyi와 [Mas] lov 1의 보조정리 8에 설명된 합성과 유사한 분해를 제공한다.
예를 들어, 5큐비트 클리포드 회로는 다음과 같은 계층으로 분해됩니다:
┌─────┐┌─────┐┌────────┐┌─────┐┌─────┐┌─────┐┌─────┐┌────────┐
q_0: ┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_1: ┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_2: ┤2 S2 ├┤2 CZ ├┤2 CX_dg ├┤2 H2 ├┤2 S1 ├┤2 CZ ├┤2 H1 ├┤2 Pauli ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_3: ┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├
│ ││ ││ ││ ││ ││ ││ ││ │
q_4: ┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├
└─────┘└─────┘└────────┘└─────┘└─────┘└─────┘└─────┘└────────┘이 분해는 기본 cz_synth_func 및 cx_synth_func 함수에 대한 것이며, 다른 함수에서는 약간 다른 분해가 표시될 수 있습니다.
매개변수
- cliff (Clifford) – 클리포드 연산자.
- cx_synth_func (Callable[[ndarray], QuantumCircuit]) – CX 하위 회로를 분해하는 함수. 입력으로 부울 역행렬을 받아, 출력으로.
QuantumCircuit를 반환합니다. - cz_synth_func (Callable[[ndarray], QuantumCircuit]) – CZ 하위 회로를 분해하는 함수입니다. 이 함수는 입력으로 부울 대칭 행렬을 받고, 출력은
QuantumCircuit. - cx_cz_synth_func (Callable) – 선택 사항으로, 하위 회로 CZ와 CX를 모두 분해하는 함수입니다.
- validate (Boolean) – true이면 합성 프로세스의 유효성을 검사합니다.
- cz_func_reverse_qubits (Boolean) –
cz_synth_func가synth_cz_depth_line_mr()인 경우에만 참입니다. 이 함수는 큐비트의 순서를 되돌릴 수 있는 회로를 반환하기 때문입니다.
리턴
클리포드의 회로 구현입니다.
리턴 유형
참조
- S. 브라비, D. 마슬로프, 하다마드가 없는 회로가 클리포드 그룹의 구조를 드러내다, arXiv:2003.09412 [quant-ph]
synth_clifford_depth_lnn
qiskit.synthesis.synth_clifford_depth_lnn(cliff)
선형 최인접 이웃 연결성을 위해 a를 Clifford 층으로 합성한다.
합성된 n-큐비트 회로의 깊이는 에 의해 제한되며, 이는 최적이 아닙니다. [3으로] 제한되는 깊이를 제공하는 더 나은 알고리즘으로 대체해야 합니다.
매개변수
cliff (Clifford) – 클리포드 연산자.
리턴
클리포드의 회로 구현입니다.
리턴 유형
참조
- S. 브라비, D. 마슬로프, 하다마드가 없는 회로가 클리포드 그룹의 구조를 드러내다, arXiv:2003.09412 [quant-ph]
- 드미트리 마슬로프, 마틴 로텔러, 브루하트 분해 및 양자 회로 변환을 통한 더 짧은 안정기 회로, arXiv:1705.09176.
- 드미트리 마슬로프, 윌러스 양, CNOT 회로가 생성하는 임의의 하다마드 없는 클리포드 변환을 구현하는 데는 거의 도움이 필요하지 않습니다, arXiv:2210.16195.
CNOT 이면체 합성
synth_cnotdihedral_full
qiskit.synthesis.synth_cnotdihedral_full(elem)
QuantumCircuit요소를 CNOTDihedral 로 분해하십시오.
큐비트의 경우 이는 참조 [1의] 최적 CX 비용 분해를 기반으로 합니다. 큐비트의 경우 참조 [2의] 일반적인 비최적 컴파일 루틴을 사용하여 수행됩니다.
매개변수
elem (CNOTDihedral) – A CNOTDihedral 요소.
리턴
해당 CNOTDihedral 요소의 회로 구현.
리턴 유형
참조
- 셸리 가리온과 앤드류 W. 크로스, 최적의 두 큐비트 게이트 수를 가진 CNOT-이차원 회로의 합성, 양자 4(369), 2020
- 앤드류 크로스, 이스와르 마게산, 레프 비숍, 존 스몰린, 제이 엠 감베타, 비클리포드 게이트의 확장 가능한 무작위 벤치마킹, npj Quantum Inf 2, 16012 (2016).
synth_cnotdihedral_two_qubits
qiskit.synthesis.synth_cnotdihedral_two_qubits(elem)
QuantumCircuit단일 큐비트와 두 개의 큐비트에 대한 요소를 CNOTDihedral 로 분해하십시오. 이 분해에서 CXGates의 개수는 최적값을 가집니다.
매개변수
elem (CNOTDihedral) – A CNOTDihedral 요소.
리턴
해당 CNOTDihedral 요소의 회로 구현.
레이즈
CNOTDihedralQiskitError – 해당 요소가 1-큐비트나 2-큐비트가 아닌 경우.
리턴 유형
참조
- 셸리 가리온과 앤드류 W. 크로스, CNOT-이원체 그룹의 구조에 관하여, arXiv:2006.12042 [quant-ph]
synth_cnotdihedral_general
qiskit.synthesis.synth_cnotdihedral_general(elem)
QuantumCircuit요소를 CNOTDihedral 로 분해하십시오.
일반적인 CNOTDihedral 요소를 분해하십시오. CX 게이트의 수가 반드시 최적의 수는 아닙니다. synth_cnotdihedral_two_qubits()1-큐비트 또는 2-큐비트 요소의 분해를 보려면 를 호출하십시오.
매개변수
elem (CNOTDihedral) – A CNOTDihedral 요소.
리턴
해당 CNOTDihedral 요소의 회로 구현.
레이즈
QiskitError - 요소를 회로로 분해할 수 없는 경우.
리턴 유형
참조
- 앤드류 크로스, 이스와르 마게산, 레프 비숍, 존 스몰린, 제이 엠 감베타, 비클리포드 게이트의 확장 가능한 무작위 벤치마킹, npj Quantum Inf 2, 16012 (2016).
안정화 상태 합성
synth_stabilizer_layers
qiskit.synthesis.synth_stabilizer_layers(stab, cz_synth_func=<function _default_cz_synth_func>, cz_func_reverse_qubits=False, validate=False)
안정제 상태를 레이어로 합성합니다.
이는 [참고] 문헌 1의 정리 8에 설명된 합성 방식과 유사한 분해를 제공하며, 안정화기 상태에 영향을 미치지 않는 초기 하다마르(Hadamard)가 없는 하위 회로 단계를 제외한다.
예를 들어 5큐비트 스태빌라이저 상태는 다음과 같은 레이어로 분해됩니다:
┌─────┐┌─────┐┌─────┐┌─────┐┌────────┐
q_0: ┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├
│ ││ ││ ││ ││ │
q_1: ┤1 ├┤1 ├┤1 ├┤1 ├┤1 ├
│ ││ ││ ││ ││ │
q_2: ┤2 H2 ├┤2 S1 ├┤2 CZ ├┤2 H1 ├┤2 Pauli ├
│ ││ ││ ││ ││ │
q_3: ┤3 ├┤3 ├┤3 ├┤3 ├┤3 ├
│ ││ ││ ││ ││ │
q_4: ┤4 ├┤4 ├┤4 ├┤4 ├┤4 ├
└─────┘└─────┘└─────┘└─────┘└────────┘매개변수
- stab (StabilizerState) – 안정화된 상태.
- cz_synth_func (Callable[[ndarray], QuantumCircuit]) – CZ 하위 회로를 분해하는 함수입니다. 이 함수는 입력으로 부울 대칭 행렬을 받고, 출력은
QuantumCircuit. - cz_func_reverse_qubits (bool) –
True는cz_synth_func일 때에만 성립합니다synth_cz_depth_line_mr(). 이 함수는 큐비트의 순서를 뒤바꾸는 회로를 반환하기 때문입니다. - validate (bool) – 만약
True, 이면 합성 과정을 검증한다.
리턴
안정화 상태의 회로 구현입니다.
레이즈
StabilizerStateQiskitError – 입력이.이 아닌 경우
리턴 유형
참조
- S. 브라비, D. 마슬로프, 하다마드가 없는 회로가 클리포드 그룹의 구조를 드러내다, arXiv:2003.09412 [quant-ph]
synth_stabilizer_depth_lnn
qiskit.synthesis.synth_stabilizer_depth_lnn(stab)
CXGates 게이트와 위상 게이트(SGate, SdgGate 또는 ZGate)를 사용하여, 2-큐비트 깊이 와 두 개의 서로 다른 CX 층에서 선형 최인접 연결을 위한 n-큐비트 안정화 상태의 합성.
매개변수
stab (StabilizerState) – 안정화된 상태.
리턴
안정화 상태의 회로 구현입니다.
리턴 유형
참조
- S. 브라비, D. 마슬로프, 하다마드가 없는 회로가 클리포드 그룹의 구조를 드러내다, arXiv:2003.09412 [quant-ph]
- 드미트리 마슬로프, 마틴 로텔러, 브루하트 분해 및 양자 회로 변환을 통한 더 짧은 안정기 회로, arXiv:1705.09176.
synth_circuit_from_stabilizers
qiskit.synthesis.synth_circuit_from_stabilizers(stabilizers, allow_redundant=False, allow_underconstrained=False, invert=False)
클리포드 게이트로 가우시안 제거를 사용하여 안정기에 의해 안정화된 상태를 생성하는 회로를 합성합니다. 안정기가 제약 조건에 미달하고 allow_underconstrained 이 True 인 경우 회로는 안정기에 의해 안정화된 상태 중 하나를 출력합니다. 자극 구현을 기준으로 합니다.
매개변수
- stabilizers (Collection[str]) – 안정화 문자열 목록
- allow_redundant (bool) – 중복된 안정화자를 허용한다(즉, 일부 안정화자는 다른 안정화자들의 곱일 수 있다)
- allow_underconstrained (bool) – 제약 조건이 부족한 안정화자 집합을 허용한다(즉, 안정화자가 유일한 상태를 지정하지 않는다)
- invert (bool) – 역회로 반환
리턴
stabilizers 에 의해 안정화된 상태를 생성하는 회로입니다.
레이즈
QiskitError - 안정제가 유효하지 않거나, 통용되지 않거나, 서로 모순되는 경우, 목록이 제한되지 않고 allow_underconstrained 이 False 이거나, 목록이 중복되고 allow_redundant 이 False 인 경우.
리턴 유형
참조
이산 기저 합성
칼럼 1 | 칼럼 2 |
|---|---|
SolovayKitaevDecomposition([...]) | 솔로베이 키타에프 이산 분해 알고리즘. |
gridsynth_rz
qiskit.synthesis.gridsynth_rz(angle, epsilon=1e-10)
Ross-Selinger 알고리즘을 이용한 근사 RZ 회전
알고리즘은 [1절] 에서 설명한다. 소스 코드(Rust)는 에서 확인할 수 https://github.com/qiskit-community/rsgridsynth 있습니다.
매개변수
리턴
하나의 큐비트를 근사하는 RZ(angle)회로.
리턴 유형
참조 자료:
[1] 닐 J. 로스, 피터 셀린저, z-회전에 대한 최적의 보조변수 없는 클리포드+T 근사법,
gridsynth_unitary
qiskit.synthesis.gridsynth_unitary(matrix, epsilon=1e-10)
로스-셀링거 알고리즘을 사용하여 1-큐비트 유니터리 행렬을 근사화하십시오.
알고리즘은 [1절] 에서 설명한다. 소스 코드(Rust)는 에서 확인할 수 https://github.com/qiskit-community/rsgridsynth 있습니다.
매개변수
리턴
하나의 큐비트를 근사하는 matrix회로.
리턴 유형
참조 자료:
[1] 닐 J. 로스, 피터 셀린저, z-회전에 대한 최적의 보조변수 없는 클리포드+T 근사법,
generate_basic_approximations
qiskit.synthesis.generate_basic_approximations(basis_gates, depth, filename=None)
basis_gates 에 게이트가 있는 GateSequence의 목록을 생성합니다.
해당 함수는 Qiskit 2.3qiskit.synthesis.discrete_basis.generate_basis_approximations.generate_basic_approximations() 부터 사용 중단되었습니다. 출시일로부터 3개월이 지나지 않으면 제거되지 않습니다. SolovayKitaevDecomposition 클래스를 직접 사용하여 기본 근사값을 생성, 저장 및 로드하십시오.
매개변수
- basis_gates (list[str |Gate]) – 게이트 시퀀스를 생성할 게이트들.
- depth (int) – 근사치의 최대 깊이.
- filename (str | None) – 제공된 경우, 기본 근사값이 이 파일에 저장됩니다.
리턴
basis_gates 에서 게이트를 사용하는 GateSequence의 목록.
레이즈
ValueError – 에 유효하지 않은 게이트 식별자가 포함된 basis_gates 경우.
리턴 유형
목록[GateSequence]
기초 변경 합성
synth_qft_line
qiskit.synthesis.synth_qft_line(num_qubits, do_swaps=True, approximation_degree=0)
선형 이웃 연결을 사용하여 양자 푸리에 변환을 위한 회로를 구축합니다.
구성은 Fowler 외 [1의] 그림 2.b 을 기반으로 합니다.
기본값이 do_swaps = True 인 이 합성 알고리즘은 QFT 연산을 충실히 구현하는 회로를 생성합니다. do_swaps = False, 이 합성 알고리즘은 QFT를 적용하고 출력 큐비트의 순서를 반전하는 "QFT-with-reversal"에 해당하는 회로를 생성합니다.
매개변수
- num_qubits (int) – 양자 푸리에 변환이 적용되는 큐비트의 개수.
- approximation_degree (int) – 근사 정도 (근사가 없는 경우 0). 임계값 미만의 각도를 갖는 제어 위상 회전을 무시함으로써 양자장론(QFT)을 근사적으로 구현할 수 있다. 이에 대한 자세한 내용은 https://arxiv.org/abs/quant-ph/9601018 또는 https://arxiv.org/abs/quant-ph/0403071 에서 다루고 있습니다.
- do_swaps (bool) – “QFT” 연산과 “역전된 QFT” 연산 중 어느 것을 합성할지 여부.
리턴
QFT 연산을 구현하는 회로입니다.
리턴 유형
참조
- A. G. 파울러, S. J. 데빗, L. C. L. 홀렌버그, 선형 최인접 큐비트 배열에서 쇼의 알고리즘 구현, Quantum Info. Comput. 4, 4 (7월 2004), 237-251. arXiv:quant-ph/0402196 [quant-ph]
synth_qft_full
qiskit.synthesis.synth_qft_full(num_qubits, do_swaps=True, approximation_degree=0, insert_barriers=False, inverse=False, name=None)
올투올 연결을 사용하여 양자 푸리에 변환을 위한 회로를 구축합니다.
do_swaps = True기본값이 인 이 합성 알고리즘은 QFT 연산을 충실히 구현하는 회로를 생성합니다. 이 회로의 끝부분에는 출력 큐비트의 순서를 반전시키는 일련의 스왑 게이트가 포함되어 있습니다. 일부 응용 분야에서는 이러한 역순 배열을 피할 수 있습니다. 이 설정을 do_swaps = False 적용하면 이러한 역순 배열이 없는 회로가 생성되지만, 그 대가로 이 회로는 QFT 대신 “역순이 포함된 QFT”를 구현하게 됩니다. 또는 트랜스파일러 단계에서 ElidePermutations 이러한 스왑 게이트를 제거할 수 있습니다.
매개변수
- num_qubits (int) – 양자 푸리에 변환이 적용되는 큐비트의 개수.
- do_swaps (bool) – “QFT” 연산과 “역전된 QFT” 연산 중 어느 것을 합성할지 여부.
- approximation_degree (int) – 근사 정도 (근사가 없는 경우 0). 임계값 미만의 각도를 갖는 제어 위상 회전을 무시함으로써 양자장론(QFT)을 근사적으로 구현할 수 있다. 이에 대한 자세한 내용은 https://arxiv.org/abs/quant-ph/9601018 또는 https://arxiv.org/abs/quant-ph/0403071 에서 다루고 있습니다.
- insert_barriers (bool) – 만약
True, 시각적 이해를 돕기 위해 경계선이 삽입됩니다. - inverse (bool) – 인 경우
True, 역 양자 푸리에 변환이 구성된다. - name (str | None) – 회로의 이름.
리턴
QFT 연산을 구현하는 회로입니다.
리턴 유형
단일 합성
임의의 수의 큐비트에 대한 일반 유니타리 행렬의 분해.
qs_decomposition
qiskit.synthesis.qs_decomposition(mat, opt_a1=None, opt_a2=None, decomposer_1q=None, decomposer_2q=None, *, _depth=0)
블록 ZXZ-분해에 기반한 양자 섀넌 분해를 사용하여 단일 행렬을 1 큐비트 게이트와 2 큐비트 게이트로 분해합니다.
이 분해는 크롤과 알-아르스 [2에] 설명되어 있으며 쉔데 외 [1의] 방법을 개선한 것입니다.
┌───┐ ┌───┐ ┌───┐
─┤ ├─ ────□──┤ H ├──□──┤ H ├──□──
│ │ ≃ ┌─┴─┐└───┘┌─┴─┐└───┘┌─┴─┐
/─┤ ├─ ──┤ C ├─────┤ B ├─────┤ A ├
└───┘ └───┘ └───┘ └───┘최적화가 없으면 숫자는 다음과 같습니다. CXGate 분해를 통해 생성된 s는 [1] 의 최적화되지 않은 방법과 동일합니다.
[1을] 개선하고 자동으로 적용되는 최적화 A.1 는 재귀의 각 단계에서 1초 대신 CXGate2초를 절약하여 CX 카운트를 다음과 같이 줄여줍니다:
최적화 A.2 는 [1] 에서와 같이 2큐비트 유니터리를 대각선 게이트와 2-CX 유니터리로 분해하여 CX 개수를 추가로 줄입니다.
이 최적화는 원래의 유니터리가 제어되는 경우 수행되어서는 안 되므로, 입력 행렬이 제어되는 (블록 대각) 유니터리와 동등하지 않은 한 자동으로 적용됩니다.
따라서, 두 가지 최적화 기법을 모두 적용하여 분해했을 때 생성되는 CXGates의 개수는 다음과 같습니다:
`` 또는 decomposer_1q decomposer_2q 인자로 임의의 호출 가능 객체를 전달하는 것은 더 이상 권장되지 않습니다. Qiskit 3.0 에서는 각각 TwoQubitBasisDecomposer과 OneQubitEulerDecomposer 의 인스턴스만 허용됩니다.
의 opt_a1 인수는 Qiskit 2.5.0 부터 더 이상 권장되지 않습니다 qs_decomposition() . 출시일로부터 3개월이 지나기 전에는 삭제되지 않습니다. 이제 적절한 경우 최적화가 자동으로 적용됩니다.
의 opt_a2 인수는 Qiskit 2.5.0 부터 더 이상 권장되지 않습니다 qs_decomposition() . 출시일로부터 3개월이 지나기 전에는 삭제되지 않습니다. 이제 적절한 경우 최적화가 자동으로 적용됩니다.
매개변수
- mat (ndarray) – 분해할 단일 행렬
- opt_a1 (bool | None) – 이 인수는 더 이상 사용되지 않습니다. (
None기본값인) 경우 최적화가 자동으로 적용됩니다. - opt_a2 (bool | None) – 이 인수는 더 이상 사용되지 않습니다. (
None기본값인) 경우 최적화가 자동으로 적용됩니다. - decomposer_1q (Callable[[ndarray], QuantumCircuit] | None) – 선택 사항인 1Q 분해기, 의 인스턴스
OneQubitEulerDecomposer. 인 경우None, 기본 1-큐비트 분해가 사용됩니다. - decomposer_2q (Callable[[ndarray], QuantumCircuit] | None) – 선택 사항인 2Q 분해기, 의 인스턴스
TwoQubitBasisDecomposer. 인 경우None, 기본 2-큐비트 분해가 사용됩니다.
리턴
분해된 양자 회로.
리턴 유형
참조
- 쉔데, 불록, 마르코프, 양자 논리 회로의 합성, arXiv:0406176 [quant-ph]
- 크롤, 알-아스, 퀀텀 섀넌을 넘어서: 블록 ZXZ-분해에 기반한 일반 n큐비트 게이트를 위한 회로 구성, arXiv:2403.13692
근사치 양자 컴파일러는 모듈로 사용할 수 있습니다 qiskit.synthesis.unitary.aqc.
1큐비트 합성
칼럼 1 | 칼럼 2 |
|---|---|
OneQubitEulerDecomposer( [basis, use_dag] ) | 1-큐비트 단항식을 오일러 각도 회전으로 분해하는 클래스입니다. |
2큐비트 합성
칼럼 1 | 칼럼 2 |
|---|---|
TwoQubitBasisDecomposer(게이트[,...] ) | 2쿼비트 단위 게이트를 최소한의 사용 횟수로 분해하는 클래스입니다. |
XXDecomposer( [basis_fidelity, euler_basis,...] ) | 2-큐비트 유니터리를 (즉, 가 변할 수 있는 경우 와 국소적으로 동등한) 유형의 XX 2-큐비트 기저 게이트로 최적으로 분해하는 클래스. |
TwoQubitWeylDecomposition(단일 행렬[,...] ) | 2큐비트 웨일 분해. |
TwoQubitControlledUDecomposer(...[, euler_basis] ) | RXXGate일반적인 2-큐비트 유니터리 연산을, 와 국소적으로 동등한 대상 2-큐비트 게이트를 사용하여 분해한다. |
two_qubit_cnot_decompose
qiskit.synthesis.two_qubit_cnot_decompose(*args, **kwargs)
이것은 기저 분해 시 항상 를 TwoQubitBasisDecomposer KAK 게이트로 사용하는 cx 사례입니다. cx이 함수를 사용하면 -기반 2-큐비트 분해에 빠르게 접근할 수 있습니다.
매개변수
- unitary (Operator or np.ndarray) – 4x4 는 합성하기 쉬운 단위입니다.
- basis_fidelity (float or None) –.의 적용에 대해 가정된 정확도가 주어졌을 때
CXGate, - approximate (bool) –
basis_fidelity가 1.0 보다 작을 경우True근사값입니다.
리턴
입력 유니티의 합성 회로입니다.
리턴 유형
다중 제어 합성
synth_mcmt_vchain
qiskit.synthesis.synth_mcmt_vchain(gate, num_ctrl_qubits, num_target_qubits, ctrl_state=None)
V-체인을 사용하여 MCMT를 합성합니다.
이는 num_ctrl_qubits - 1 보조 큐비트를 사용하는 CCX 게이트 체인을 사용합니다.
예를 들어, 3-컨트롤 및 2-타겟 H 게이트는 다음과 같이 합성됩니다:
q_0: ──■────────────────────────■──
│ │
q_1: ──■────────────────────────■──
│ │
q_2: ──┼────■──────────────■────┼──
│ │ ┌───┐ │ │
q_3: ──┼────┼──┤ H ├───────┼────┼──
│ │ └─┬─┘┌───┐ │ │
q_4: ──┼────┼────┼──┤ H ├──┼────┼──
┌─┴─┐ │ │ └─┬─┘ │ ┌─┴─┐
q_5: ┤ X ├──■────┼────┼────■──┤ X ├
└───┘┌─┴─┐ │ │ ┌─┴─┐└───┘
q_6: ─────┤ X ├──■────■──┤ X ├─────
└───┘ └───┘매개변수
- gate (Gate) – 타깃에 적용될 베이스 게이트.
- num_ctrl_qubits (int) – 제어 큐비트의 개수.
- num_target_qubits (int) – 대상 큐비트의 개수.
- ctrl_state (int | None) – 정수형으로 표시되는 선택적 제어 상태.
리턴
MCMT 게이트용 합성 회로입니다.
리턴 유형
synth_mcmt_xgate
qiskit.synthesis.synth_mcmt_xgate(num_ctrl_qubits, num_target_qubits, ctrl_state=None)
MCMT X 게이트를 합성합니다.
여기에는 MCMT X 게이트에 효율적인 특수 회로 구조가 사용됩니다. 부수적인 큐비트가 필요하지 않으며 효율적인 MCX 분해의 이점을 누릴 수 있습니다.
E.g. 로 설정하면 3 컨트롤, 3 타겟 X 게이트가 합성됩니다:
q_0: ─────────────■────────────
|
q_1: ─────────────■────────────
|
q_2: ─────────────■────────────
┌─┴─┐
q_3: ────────■──┤ X ├──■───────
┌─┴─┐└───┘┌─┴─┐
q_4: ───■──┤ X ├─────┤ X ├──■──
┌─┴─┐└───┘ └───┘┌─┴─┐
q_5: ─┤ X ├───────────────┤ X ├
└───┘ └───┘매개변수
- num_ctrl_qubits (int) – 제어 큐비트의 개수.
- num_target_qubits (int) – 대상 큐비트의 개수.
- ctrl_state (int | None) – 정수형으로 표시되는 선택적 제어 상태.
리턴
MCMT X 게이트용 합성 회로입니다.
리턴 유형
synth_mcx_1_clean_kg24
qiskit.synthesis.synth_mcx_1_clean_kg24(num_ctrl_qubits)
해당 절에서 설명된 바와 같이, 클린 보조 큐비트와 깊이 를 사용하여 제어 신호를 갖는 다중 제어 X 게이트를 합성하십시오. .의 5.1[1]. 이 회로는 개의 토폴리 게이트(주로 비용이 더 저렴한 상대 위상 토폴리 게이트인 RCCX와 하나의 닫힘 CCX)와 동등합니다. 반환된 회로에는 이미 기본 단일 큐비트 및 2-큐비트 게이트로 분해된 형태가 포함되어 있으며, 총 개의 CX 게이트로 구성됩니다. 의 경우, 반환된 회로는 보조 큐비트를 전혀 사용하지 않습니다. 의 경우 단일 X 게이트, 의 경우 단일 CX 게이트, 의 경우 CCX 게이트의 기본 게이트 분해로 구성됩니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
1. 카타르와 기드니, 양자 회로 최적화를 위한 조건부 청정 부속물의 등장 arXiv:2407.17966
synth_mcx_1_dirty_kg24
qiskit.synthesis.synth_mcx_1_dirty_kg24(num_ctrl_qubits)
해당 절에서 설명한 바와 같이, 더티 보조 큐비트와 깊이 를 사용하여 제어 신호를 갖는 다중 제어 X 게이트를 합성하십시오. .의 5.3[1]. 이 회로는 개의 토폴리 게이트(대부분 RCCX 게이트와 닫힘 CCX 게이트)와 동등합니다. 반환된 회로에는 이미 기본 단일 큐비트 및 2-큐비트 게이트로 분해된 형태가 포함되어 있으며, 총 개의 CX 게이트로 구성됩니다. 의 경우, 반환된 회로는 보조 큐비트를 전혀 사용하지 않습니다. 의 경우 단일 X 게이트, 의 경우 단일 CX 게이트, 의 경우 CCX 게이트의 기본 게이트 분해로 구성됩니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
1. 카타르와 기드니, 양자 회로 최적화를 위한 조건부 청정 부속물의 등장 arXiv:2407.17966
synth_mcx_2_clean_kg24
qiskit.synthesis.synth_mcx_2_clean_kg24(num_ctrl_qubits)
해당 절에서 설명된 바와 같이, 개의 깨끗한 보조 큐비트와 깊이 를 사용하여 제어 신호를 갖는 다중 제어 X 게이트를 합성하십시오. .의 5.2[1]. 이 회로는 개의 토폴리 게이트(대부분 RCCX 게이트와 하나의 닫힘 CCX 게이트)와 동등합니다. 반환된 회로에는 이미 기본 단일 큐비트 및 2-큐비트 게이트로 분해된 형태가 포함되어 있으며, 총 개의 CX 게이트로 구성됩니다. 의 경우, 반환된 회로는 보조 큐비트를 전혀 사용하지 않습니다. 의 경우 단일 X 게이트, 의 경우 단일 CX 게이트, 의 경우 CCX 게이트의 기본 게이트 분해로 구성됩니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
1. 카타르와 기드니, 양자 회로 최적화를 위한 조건부 청정 부속물의 등장 arXiv:2407.17966
synth_mcx_2_dirty_kg24
qiskit.synthesis.synth_mcx_2_dirty_kg24(num_ctrl_qubits)
해당 절에서 설명된 바와 같이, 더티 보조 큐비트와 깊이 를 사용하여 제어 신호를 갖는 다중 제어 X 게이트를 합성하십시오. .의 5.4[1]. 이 회로는 개의 토폴리 게이트(대부분 RCCX 게이트와 닫힘 CCX 게이트)와 동등합니다. 반환된 회로에는 이미 기본 단일 큐비트 및 2-큐비트 게이트로 분해된 형태가 포함되어 있으며, 총 개의 CX 게이트로 구성됩니다. 의 경우, 반환된 회로는 보조 큐비트를 전혀 사용하지 않습니다. 의 경우 단일 X 게이트, 의 경우 단일 CX 게이트, 의 경우 CCX 게이트의 기본 게이트 분해로 구성됩니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
1. 카타르와 기드니, 양자 회로 최적화를 위한 조건부 청정 부속물의 등장 arXiv:2407.17966
synth_mcx_n_dirty_i15
qiskit.synthesis.synth_mcx_n_dirty_i15(num_ctrl_qubits, relative_phase=False, action_only=False)
Iten 외 [1명의] 논문을 기반으로 제어를 사용하여 다중 제어 X 게이트를 합성합니다.
의 경우, 이 방법은 개의 더티 보조 큐비트를 사용하며, 개의 큐비트와 최대 개의 CX 게이트로 구성된 회로를 생성합니다. 의 경우, 보조 큐비트가 필요 없는 명시적으로 구성된 효율적인 회로가 대신 사용됩니다.
매개변수
- num_ctrl_qubits (int) – 제어 큐비트의 개수.
- relative_phase (bool) – 로 설정된 경우
True, 이 메서드는 최적화된 다중 제어 X 게이트를 상대 위상까지 적용하며, 이때 [1]의 보조정리 8에 따라 의 상대 위상이 의 위상과action part상쇄되도록 한다reset part. - action_only (bool) – 로 설정하면
True, 이 메서드는 의 보조정리 8의action part부분만 적용합니다 [1].
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
- 이텐 외. 등, 등거리 변환을 위한 양자 회로, Phys. Rev. A 93, 2018년 3월 23일 (2016), arXiv:1501.06911
synth_mcx_n_dirty_m15
qiskit.synthesis.synth_mcx_n_dirty_m15(num_ctrl_qubits)
Maslov의 논문에서 제시된 바와 같이, 3개의 제어에 대해서는 회로 (5)를 따르고, 4개 이상의 제어에 대해서는 명제 5를 적용하여, 더티 보조 큐비트를 사용하여 제어 기능을 가진 다중 제어 X 게이트를 합성하라 [1].
의 경우, 이 방법은 더티 앵커일라 하나를 사용하며, 16개의 T 게이트와 14개의 CX 게이트로 구성된 회로를 생성합니다. 의 경우, 개의 더티 앵커를 사용하며, 개의 T 게이트와 개의 CX 게이트로 구성된 회로를 생성합니다. 의 경우, 보조 연산자는 사용되지 않습니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
- 박사 Maslov, 상대 위상 토폴리 게이트 사용의 장점과 다중 제어 토폴리 최적화에의 적용, Phys. Rev. A 93, 022311 (2016), arXiv:1508.03273
synth_mcx_n_clean_m15
qiskit.synthesis.synth_mcx_n_clean_m15(num_ctrl_qubits)
Maslov의 제4정리를 바탕으로 [1], 제어 신호와 클린 보조 큐비트를 사용하여 다중 제어 X 게이트를 합성하고, 개의 T 게이트와 개의 CX 게이트로 구성된 회로를 생성하라. 의 경우, 반환되는 회로는 단일 X, CX 또는 CCX 게이트(각각 에 해당)로 구성되며, 보조 큐비트를 사용하지 않습니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
- 박사 Maslov, 상대 위상 토폴리 게이트 사용의 장점과 다중 제어 토폴리 최적화에의 적용, Phys. Rev. A 93, 022311 (2016), arXiv:1508.03273
synth_mcx_1_clean_b95
qiskit.synthesis.synth_mcx_1_clean_b95(num_ctrl_qubits)
단일한 깨끗한 보조 큐비트를 사용하여 개의 제어 신호를 갖는 다중 제어 X 게이트를 합성하되, 개의 큐비트와 최대 개의 CX 게이트로 구성된 회로를 [1], [2] 까지 구현하라. 의 경우, 반환되는 회로는 단일 X, CX 또는 CCX 게이트(각각 에 해당)로 구성되며 보조 큐비트를 사용하지 않습니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
- Barenco et al. al., 양자 계산을 위한 기본 게이트, Phys.Rev. A52 3457 (1995), arXiv:quant-ph/9503016
- 이텐 외. 등, 등거리 변환을 위한 양자 회로, Phys. Rev. A 93, 2018년 3월 23일 (2016), arXiv:1501.06911
synth_mcx_noaux_sp22
qiskit.synthesis.synth_mcx_noaux_sp22(num_ctrl_qubits)
의 구현을 바탕으로, 제어 신호를 갖는 다중 제어 XGate 게이트를 합성하십시오 MCPhaseGate.
이에 따라, 이 논문은 da Silva 등이 발표한 논문에서 설명된 다중 제어 특수 유니터리의 분해 방식을 활용한다 MCPhaseGate . [1] 그리고 qclib에서의 구현 [2].
큐비트로 양자 회로를 생성합니다. CX 게이트의 수는 에서 2진수입니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
[1]a. J. da Silva와 D. K. Park, “다중 큐비트 제어 게이트를 위한 선형 깊이 양자 회로”, Phys. Rev. A 106, 042602.
[2] https://github.com/qclib/qclib/blob/master/qclib/gates/ldmcu.py
synth_mcx_noaux_v24
qiskit.synthesis.synth_mcx_noaux_v24(num_ctrl_qubits)
MCPhaseGate 에 대한 구현을 기반으로 컨트롤을 사용하여 다중 제어 X 게이트를 합성합니다.
차례로 MCPhase 게이트는 [1에서] 설명한 다중 제어 특수 유니터리에 대한 분해를 사용합니다.
큐비트로 양자 회로를 생성합니다. CX 게이트의 수는 에서 2진수입니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
- Vale et al. al., 다중 제어 특수 단일 큐비트 게이트의 회로 분해, IEEE TCAD 43(3) (2024), arXiv:2302.06377
synth_mcx_noaux_hp24
qiskit.synthesis.synth_mcx_noaux_hp24(num_ctrl_qubits)
Huang과 Palsberg의 작업을 기반으로 컨트롤을 사용하여 다중 제어 X 게이트를 합성합니다.
큐비트로 양자 회로를 생성합니다. CX 게이트의 수는 에서 선형입니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
리턴
합성된 양자 회로.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴 유형
참조
- 황과 팔스버그, 헬퍼 큐비트를 사용하지 않고 조건부 양자 게이트 컴파일하기, PLDI (2024), <https://dl.acm.org/doi/10.1145/3656436> `_
synth_mcx_gray_code
qiskit.synthesis.synth_mcx_gray_code(num_ctrl_qubits)
그레이 코드를 사용하여 개의 제어 신호를 갖는 다중 제어 X 게이트를 합성하십시오.
개의 큐비트로 구성된 양자 회로를 생성합니다. 이 방법은 기하급수적으로 많은 CX 게이트를 생성하므로, 의 값이 작을 때에만 사용해야 합니다. 의 경우, 반환되는 회로는 단일 X, CX 또는 CCX 게이트(각각 에 해당)로 구성되며 보조 큐비트를 사용하지 않습니다.
매개변수
num_ctrl_qubits (int) – 제어 큐비트의 개수.
레이즈
QiskitError – 만약 num_ctrl_qubits 가 불법인 경우.
리턴
합성된 양자 회로.
리턴 유형
synth_c3x
synth_c4x
synth_mcp_noaux_default
qiskit.synthesis.synth_mcp_noaux_default(num_ctrl_qubits, phase)
제어 큐비트의 개수에 MCPhaseGate 따라 에 가장 적합한 합성 코드를 선택하십시오.
매개변수
- num_ctrl_qubits (int) – 제어 큐비트의 개수.
- phase (ParameterExpression |float) – 다중 제어 위상 게이트의 위상각.
리턴
다중 제어 위상 게이트를 구현하는 QuantumCircuit.
레이즈
QiskitError – 제어 큐비트의 개수가 음수인 경우.
리턴 유형
synth_mcp_noaux_sp22
qiskit.synthesis.synth_mcp_noaux_sp22(num_ctrl_qubits, phase)
da Silva 등의 논문을 바탕으로, 제어 방식을 갖는 다중 제어 위상 게이트를 합성하라. [1] 그리고 qclib에서의 구현 [2].
의 경우, 이 방법은 개의 CX 게이트를 갖는 회로를 생성하며 의 깊이가 필요합니다. 의 경우, 를 사용하는 것이 더 효율적이며 synth_mcp_noaux_v24(), 이렇게 하면 CX 게이트 수가 더 적은 회로가 생성됩니다.
이 회로는 네 단계로 나뉘며, 각 단계에서는 특정 패턴의 제어 게이트가 적용됩니다.
-
1단계: 제어 위상 게이트와 제어 RX 게이트를 적용합니다.
-
2단계: 제어 위상 게이트와 제어 RX 게이트를 적용합니다.
이것이 초기 단계입니다. 이 연산은 각도 회전(예: )과 대상 유니터리 연산( )의 제곱근을 계단식 V자 형태로 적용합니다. 이 단계에서는 제어 상태를 기반으로 대상 큐비트에 대한 유니터리 연산의 분할된 구성 요소들을 체계적으로 누적합니다.
-
3단계: 제어 RX 게이트를 적용합니다.
-
4단계: 제어 RX 게이트를 적용합니다.
3단계와 4단계를 합쳐서 ‘비계산(uncomputation)’ 과정이라고 합니다. 1단계와 2단계에서 수행된 각도 회전 연산의 역연산만을 적용함으로써, 이 단계들은 처음 두 단계에서 생성된 원치 않는 얽힘과 위상 변이를 역전시킨다. 이 취소 연산을 통해, 모든 제어 큐비트가 상태일 때에만 대상 큐비트가 완전한 유니터리 연산 을 수행하게 됩니다.
각 제어형 RX 게이트와 제어형 위상 게이트에는 두 개의 CX 게이트가 필요하므로, 총 개의 CX 게이트가 필요합니다.
매개변수
- num_ctrl_qubits (int) – 제어 큐비트의 개수.
- phase (ParameterExpression |float) – 다중 제어 위상 게이트의 위상각.
리턴
다중 제어 위상 게이트를 구현하는 QuantumCircuit.
레이즈
QiskitError – 제어 큐비트의 개수가 음수인 경우.
리턴 유형
참조 자료:
[1]a. J. da Silva와 D. K. Park, “다중 큐비트 제어 게이트를 위한 선형 깊이 양자 회로”, Phys. Rev. A 106, 042602.
[2] https://github.com/qclib/qclib/blob/master/qclib/gates/ldmcu.py
synth_mcp_noaux_v24
qiskit.synthesis.synth_mcp_noaux_v24(num_ctrl_qubits, phase)
보조 큐비트 없이 다중 제어 위상 게이트를 합성하십시오.
이 방법은 다중 제어 RZ 게이트를 사용하여 다중 제어 위상 게이트를 합성하는 방식을 구현한다.
회로 깊이는 이며, 개의 제어 큐비트에 사용된 CX 게이트의 총 개수는 개이다. 이는 synth_mcp_noaux_sp22() 개에 비해 나쁘지만, 개에 비하면 더 낫다.
필요한 CX 게이트의 수는 다음과 같이 구할 수 있습니다:
- 로 제어되는 각 RZ 게이트는 최대
에 대한 CX 게이트와 에 대한 CX 게이트 2개. 여기서 는 로 제어되는 X 게이트를 합성하는 데 필요한 CX 게이트의 수이다.
- 로 제어되는 X 게이트를 합성하려면 다음이 필요합니다
CX 게이트는 다음의 구현에서 도출될 수 있습니다 synth_mcx_n_dirty_i15().
- 따라서, 에 대해서는,
그리고 의 경우,
- 다중 제어 위상 게이트는 에 대해 제어 RZ 게이트를 적용함으로써 합성할 수 있으며, 여기서 는 제어 큐비트의 수이다 [1]. 따라서, 개의 제어 큐비트를 갖는 다중 제어 위상 게이트를 합성하는 데 사용되는 CX 게이트의 총 개수는
매개변수
- num_ctrl_qubits (int) – 제어 큐비트의 개수.
- phase (ParameterExpression |float) – 다중 제어 위상 게이트의 위상각.
리턴
다중 제어 위상 게이트를 구현하는 QuantumCircuit.
레이즈
QiskitError – 제어 큐비트의 개수가 음수인 경우.
리턴 유형
참조
[1] Vale 외. 등, 다중 제어 특수 유니터리 단일 큐비트 게이트의 회로 분해, IEEE TCAD 43(3) (2024), arXiv:2302.06377.
이진 산술 합성
독사
adder_qft_d00
qiskit.synthesis.adder_qft_d00(num_state_qubits, kind='half', annotated=False)
QFT를 사용하여 두 큐비트 레지스터에서 제자리 덧셈을 수행하는 회로입니다.
개의 큐비트를 가진 레지스터의 경우, QFT 가산기는 를 모듈로 한 덧셈( kind="fixed")을 수행하거나, 캐리 큐비트를 추가하여 일반적인 덧셈( kind="half")을 수행할 수 있다. 고정 가산기는 CPhaseGate 연산자를 사용하며, 반가산기에는 추가로 가 사용됩니다.
예를 들어, 2쿼비트 크기의 레지스터 2개에서 덧셈을 수행하는 비고정_포인트 QFT 가산기 회로는 다음과 같습니다:
a_0: ─────────■──────■────────■──────────────────────────────────
│ │ │
a_1: ─────────┼──────┼────────┼────────■──────■──────────────────
┌──────┐ │ │ │P(π/4) │ │P(π/2) ┌─────────┐
b_0: ┤0 ├─┼──────┼────────■────────┼──────■───────┤0 ├
│ │ │ │P(π/2) │P(π) │ │
b_1: ┤1 Qft ├─┼──────■─────────────────■──────────────┤1 qft_dg ├
│ │ │P(π) │ │
cout: ┤2 ├─■───────────────────────────────────────┤2 ├
└──────┘ └─────────┘매개변수
- num_state_qubits (int) – 상태 또는 에 대한 각 입력 레지스터의 큐비트 수. 두 입력 레지스터의 큐비트 수는 반드시 같아야 합니다.
- kind (str) – 가산기의 종류에 따라, 반가산기의
"half"경우 일 수 있고, 고정 크기 가산기의 경우"fixed"일 수 있다. 반가산기에는 최상위 비트를 나타내는 이월 비트가 포함되어 있지만, 고정 크기 가산기에는 이월 비트가 없으므로 모듈로 연산을 수행합니다2 ** num_state_qubits. - annotated (bool) – 인 경우
True, 적절한 제어 연산과 역연산을AnnotatedOperation객체로 생성합니다.
리턴 유형
참조 자료:
[1] T. G. 드레이퍼, 양자 컴퓨터의 추가, 2000. arXiv:quant-ph/0008033
[2] 루이즈-페레즈 외., 양자 푸리에 변환을 이용한 양자 연산, 2017. arXiv:1411.5949
[3] 베드랄 외., 초등 산술 연산을 위한 양자 네트워크, 1995. arXiv:quant-ph/9511018
adder_ripple_c04
qiskit.synthesis.adder_ripple_c04(num_state_qubits, kind='half')
두 큐비트 레지스터에서 제자리 덧셈을 수행하는 리플 캐리 회로입니다.
이 회로는 CCX 게이트와 CX 게이트를 사용하며, 깊이는 [1입니다]. 상수는 구현된 가산기의 종류에 따라 다릅니다.
예를 들어 캐리 인 비트(kind="full")가 있는 3-큐비트 크기의 레지스터 두 개에서 덧셈을 수행하는 리플 캐리 가산기 회로는 다음과 같습니다:
┌──────┐ ┌──────┐
cin_0: ┤2 ├─────────────────────────────────────┤2 ├
│ │┌──────┐ ┌──────┐│ │
a_0: ┤0 ├┤2 ├─────────────────────┤2 ├┤0 ├
│ ││ │┌──────┐ ┌──────┐│ ││ │
a_1: ┤ MAJ ├┤0 ├┤2 ├─────┤2 ├┤0 ├┤ UMA ├
│ ││ ││ │ │ ││ ││ │
a_2: ┤ ├┤ MAJ ├┤0 ├──■──┤0 ├┤ UMA ├┤ ├
│ ││ ││ │ │ │ ││ ││ │
b_0: ┤1 ├┤ ├┤ MAJ ├──┼──┤ UMA ├┤ ├┤1 ├
└──────┘│ ││ │ │ │ ││ │└──────┘
b_1: ────────┤1 ├┤ ├──┼──┤ ├┤1 ├────────
└──────┘│ │ │ │ │└──────┘
b_2: ────────────────┤1 ├──┼──┤1 ├────────────────
└──────┘┌─┴─┐└──────┘
cout_0: ────────────────────────┤ X ├────────────────────────
└───┘여기서 MAJ 및 UMA 게이트는 [1에서] 소개한 게이트에 해당합니다. 이 구현에서 입력 레지스터 큐비트는 첫 번째 입력 레지스터의 모든 큐비트와 두 번째 입력 레지스터의 모든 큐비트 순서로 정렬됩니다.
두 가지 종류의 가산기가 지원됩니다. kind 인수를 설정하면 반입이 없는 하프 더더와 반입과 반출이 없어 고정 레지스터 크기에 따라 작동하는 고정 크기 더더를 선택할 수도 있습니다. 풀 가산기와 달리 이 회로에는 헬퍼 큐비트 하나가 추가로 필요합니다.
3-큐비트 크기의 입력에 대한 고정 소수점 덧셈기(kind="fixed")의 회로도는 다음과 같습니다
┌──────┐┌──────┐ ┌──────┐┌──────┐
a_0: ┤0 ├┤2 ├────────────────┤2 ├┤0 ├
│ ││ │┌──────┐┌──────┐│ ││ │
a_1: ┤ ├┤0 ├┤2 ├┤2 ├┤0 ├┤ ├
│ ││ ││ ││ ││ ││ │
a_2: ┤ ├┤ MAJ ├┤0 ├┤0 ├┤ UMA ├┤ ├
│ ││ ││ ││ ││ ││ │
b_0: ┤1 MAJ ├┤ ├┤ MAJ ├┤ UMA ├┤ ├┤1 UMA ├
│ ││ ││ ││ ││ ││ │
b_1: ┤ ├┤1 ├┤ ├┤ ├┤1 ├┤ ├
│ │└──────┘│ ││ │└──────┘│ │
b_2: ┤ ├────────┤1 ├┤1 ├────────┤ ├
│ │ └──────┘└──────┘ │ │
help_0: ┤2 ├────────────────────────────────┤2 ├
└──────┘ └──────┘캐리아웃이 없기 때문에 풀 애더보다 큐비트가 하나 적지만, 캐리인 대신 헬퍼 큐비트를 사용하므로 큐비트가 두 개가 아니라 하나만 적습니다.
매개변수
- num_state_qubits (int) – 상태 또는 에 대한 각 입력 레지스터의 큐비트 수. 두 입력 레지스터의 큐비트 수는 반드시 같아야 합니다.
- kind (str) – 가산기의 종류에 따라, 풀 가산기의
"full"경우, 하프 가산기의"half"경우, 고정 크기 가산기의"fixed"경우 일 수 있습니다. 전체 가산기는 이월입과 이월출을 모두 포함하며, 반 가산기는 이월출만 포함하고, 고정 크기 가산기는 이월입도 이월출도 포함하지 않습니다.
레이즈
ValueError – 가 num_state_qubits 1보다 작을 경우.
리턴 유형
참조 자료:
[1] 쿠카로 외., 새로운 양자 리플 캐리어 추가 회로, 2004. arXiv:quant-ph/0410184
[2] 베드랄 외., 초등 산술 연산을 위한 양자 네트워크, 1995. arXiv:quant-ph/9511018
adder_ripple_v95
qiskit.synthesis.adder_ripple_v95(num_state_qubits, kind='half')
VBE 리플 캐리 가산기 [1].
이 방법은 CCX 게이트와 CX 게이트의 깊이 [2].
이 회로는 동일한 크기의 양자 레지스터 두 개를 제자리에서 더하는 작업을 수행합니다. 예를 들어, 2쿼비트 크기의 레지스터 두 개에서 전체 덧셈(즉, 캐리인 비트 포함)을 수행하는 고전적인 가산기 회로는 다음과 같습니다:
┌────────┐ ┌───────────┐┌──────┐
cin_0: ┤0 ├───────────────────────┤0 ├┤0 ├
│ │ │ ││ │
a_0: ┤1 ├───────────────────────┤1 ├┤1 ├
│ │┌────────┐ ┌──────┐│ ││ Sum │
a_1: ┤ ├┤1 ├──■──┤1 ├┤ ├┤ ├
│ ││ │ │ │ ││ ││ │
b_0: ┤2 Carry ├┤ ├──┼──┤ ├┤2 Carry_dg ├┤2 ├
│ ││ │┌─┴─┐│ ││ │└──────┘
b_1: ┤ ├┤2 Carry ├┤ X ├┤2 Sum ├┤ ├────────
│ ││ │└───┘│ ││ │
cout_0: ┤ ├┤3 ├─────┤ ├┤ ├────────
│ ││ │ │ ││ │
helper_0: ┤3 ├┤0 ├─────┤0 ├┤3 ├────────
└────────┘└────────┘ └──────┘└───────────┘여기서 캐리 및 합산 게이트는 [1에서] 소개한 게이트에 해당합니다. 캐리_dg는 캐리 게이트의 역수에 해당합니다. 이 구현에서 입력 레지스터 큐비트는 첫 번째 입력 레지스터의 모든 큐비트와 두 번째 입력 레지스터의 모든 큐비트 순서로 정렬됩니다. 이는 그림 2의 [1과] 비교했을 때 순서가 다르므로 회로의 도면이 달라집니다.
매개변수
- num_state_qubits (int) – 레지스터의 크기.
- kind (str) – 가산기의 종류에 따라, 풀 가산기의
"full"경우, 하프 가산기의"half"경우, 고정 크기 가산기의"fixed"경우 일 수 있습니다. 전체 가산기는 이월입과 이월출을 모두 포함하며, 반 가산기는 이월출만 포함하고, 고정 크기 가산기는 이월입도 이월출도 포함하지 않습니다.
레이즈
ValueError – 가 num_state_qubits 1보다 작을 경우.
리턴 유형
참조 자료:
[1] 베드랄 외., 초등 산술 연산을 위한 양자 네트워크, 1995. arXiv:quant-ph/9511018
[2] 쿠카로 외., 새로운 양자 리플 캐리어 추가 회로, 2004. arXiv:quant-ph/0410184
adder_ripple_r25
qiskit.synthesis.adder_ripple_r25(num_qubits)
RV 리플 캐리 가산기 [1]. [1에] 표시된 RV 리플 캐리 가산기를 기반으로 서브선형 깊이를 가진 무안실리 양자 가산기 회로를 구축합니다. 구현의 깊이는 이며, math:O(n 로그 n) 게이트를 사용합니다.
예를 들어, 두 개의 4-큐비트 크기 레지스터에서 덧셈을 수행하는 리플 캐리 가산기 회로는 다음과 같습니다:
┌───────────┐ ┌────────┐
a_0: ─────────────────────────┤0 ├────────────────────┤0 ├───────────────■─────────────────
┌────────┐│ │ │ │┌───────────┐ │
a_1: ──■────────────┤0 ├┤2 ├──■─────────────────┤2 ├┤0 ├──┼────■────────────
│ │ ││ │ │ │ ││ │ │ │
a_2: ──┼────■───────┤1 ├┤4 ├──┼────■────────────┤4 ├┤1 LAD_1_dg ├──┼────┼────■───────
│ │ │ ││ │ │ │ │ ││ │ │ │ │
a_3: ──┼────┼────■──┤2 ├┤6 ├──┼────┼────■───────┤6 LAD_2 ├┤2 ├──┼────┼────┼────■──
│ │ │ │ ││ │ │ │ │ │ │└───────────┘┌─┴─┐ │ │ │
b_0: ──┼────┼────┼──┤ ├┤1 LAD_2_dg ├──┼────┼────┼───────┤1 ├─────────────┤ X ├──┼────┼────┼──
┌─┴─┐ │ │ │ LAD_1 ││ │┌─┴─┐ │ │ ┌───┐│ │ ┌───┐ └───┘┌─┴─┐ │ │
b_1: ┤ X ├──┼────┼──┤ ├┤3 ├┤ X ├──┼────┼──┤ X ├┤3 ├────┤ X ├─────────┤ X ├──┼────┼──
└───┘┌─┴─┐ │ │ ││ │└───┘┌─┴─┐ │ ├───┤│ │ ├───┤ └───┘┌─┴─┐ │
b_2: ─────┤ X ├──┼──┤ ├┤5 ├─────┤ X ├──┼──┤ X ├┤5 ├────┤ X ├──────────────┤ X ├──┼──
└───┘┌─┴─┐│ ││ │ └───┘┌─┴─┐└───┘└────────┘ └───┘ └───┘┌─┴─┐
b_3: ──────────┤ X ├┤ ├┤7 ├──────────┤ X ├───────────────────────────────────────────┤ X ├
└───┘│ ││ │ └───┘ └───┘
cout: ───────────────┤3 ├┤8 ├───────────────────────────────────────────────────────────────
└────────┘└───────────┘여기 LAD_1 와 LAD_2 는 각각 [1에서] 소개한 CX 및 CCX 래더입니다. 이 구현에서 입력 레지스터 큐비트는 첫 번째 입력 레지스터의 모든 큐비트와 두 번째 입력 레지스터의 모든 큐비트 순서로 정렬됩니다.
매개변수
num_qubits (int) – 레지스터의 크기.
리턴
RV 리플 캐리 가산기를 구현하는 양자 회로입니다.
레이즈
ValueError – 가 num_qubits 1보다 작을 경우.
리턴 유형
참조 자료:
1. 레모와 반다일, 서브선형 깊이를 가진 무앵실라 양자 가산기, 2025. arXiv:2501.16802
adder_modular_v17
qiskit.synthesis.adder_modular_v17(num_qubits)
그림 15의 [1의] 반 렌터겜 스타일 가산기를 기반으로 보조 큐비트가 없는 모듈식 가산기 회로를 구성합니다. 구현은 각 레지스터에 k 큐비트가 있는 가산기에 최대 CX 게이트를 사용합니다(여기서 k = num_qubits).
매개변수
num_qubits (int) – 레지스터의 크기.
리턴
모듈형 가산기를 구현하는 양자 회로입니다.
레이즈
ValueError – 가 num_qubits 1보다 작을 경우.
리턴 유형
참조 자료:
[1] Gidney, n+2 clean 큐비트 및 n-1 dirty 큐비트로 팩터링, 2017. arxiv:1706.07884
승수
multiplier_cumulative_h18
qiskit.synthesis.multiplier_cumulative_h18(num_state_qubits, num_result_qubits=None)
두 입력 레지스터의 곱셈을 제자리에 저장하는 곱셈 회로입니다.
이 회로는 참조의 접근 방식을 사용합니다. [1]. 예를 들어 3쿼비트 크기의 레지스터 두 개에서 비모듈식 곱셈을 수행하는 곱셈기 회로는 다음과 같습니다:
from qiskit.synthesis.arithmetic import multiplier_cumulative_h18
num_state_qubits = 3
circuit = multiplier_cumulative_h18(num_state_qubits)
circuit.draw("mpl")
이 회로의 곱셈은 입력 레지스터 중 하나를 사용하여 일련의 시프트 덧셈을 수행하고 다른 입력 레지스터의 큐비트는 가산기의 제어 큐비트 역할을 하는 고전적인 접근 방식으로 구현됩니다.
매개변수
- num_state_qubits (int) – 상태 또는 에 대한 각 입력 레지스터의 큐비트 수. 두 입력 레지스터의 큐비트 수는 반드시 같아야 합니다.
- num_result_qubits (int | None) – 출력을 제한할 결과 큐비트의 수. 결과 큐비트의 개수가 인 경우, 출력을 지정된 큐비트 개수로 제한하기 위해 를 모듈로 한 곱셈이 수행됩니다. 기본값은 두 입력값의 곱셈 결과로 나올 수 있는 모든 값을
2 * num_state_qubits나타냅니다.
레이즈
ValueError – 가 num_result_qubits 지정되었으나 유효하지 않은 경우, 즉 에 속하지 않는 경우 [num_state_qubits, 2 * num_state_qubits].
리턴 유형
참조 자료:
[1] Häner et al.., 산술을 위한 양자 회로 최적화, 2018. arXiv:1805.12445
multiplier_qft_r17
qiskit.synthesis.multiplier_qft_r17(num_state_qubits, num_result_qubits=None)
두 입력 레지스터의 곱셈을 제자리에 저장하는 QFT 곱셈 회로입니다.
이 회로의 곱셈은 그림 3의 [1의] 절차를 사용하여 구현되며, 가중 합계 회전은 그림 5의 [1에] 주어진 대로 구현됩니다. QFT는 출력 레지스터에 사용되며, 그 다음에는 입력 레지스터로 제어되는 회전이 이어집니다. 회전은 상태를 QFT 베이스에서 두 입력 레지스터의 곱으로 변환하고, 역 QFT를 사용하여 QFT 베이스에서 되돌립니다. 예를 들어, 상태 큐비트 3개에서 전체 승수는 다음과 같이 주어집니다:
from qiskit.synthesis.arithmetic import multiplier_qft_r17
num_state_qubits = 3
circuit = multiplier_qft_r17(num_state_qubits)
circuit.draw("mpl")
매개변수
- num_state_qubits (int) – 상태 또는 에 대한 각 입력 레지스터의 큐비트 수. 두 입력 레지스터의 큐비트 수는 반드시 같아야 합니다.
- num_result_qubits (int | None) – 출력을 제한할 결과 큐비트의 수. 결과 큐비트의 개수가 인 경우, 출력을 지정된 큐비트 개수로 제한하기 위해 를 모듈로 한 곱셈이 수행됩니다. 기본값은 두 입력값의 곱셈 결과로 나올 수 있는 모든 값을
2 * num_state_qubits나타냅니다.
레이즈
ValueError – 가 num_result_qubits 지정되었으나 유효하지 않은 경우, 즉 에 속하지 않는 경우 [num_state_qubits, 2 * num_state_qubits].
리턴 유형
참조 자료:
[1] 루이즈-페레즈 외., 양자 푸리에 변환을 이용한 양자 연산, 2017. arXiv:1411.5949
합계
synth_weighted_sum_carry
qiskit.synthesis.synth_weighted_sum_carry(weighted_sum)
상태 큐비트 수와 큐비트 가중치에 따라 가중 합계 게이트를 합성합니다.
이 방법은 부록 [1의] 부록 A에 설명되어 있습니다.
참조:
[1] 스타마토풀로스 외. 양자 컴퓨터를 이용한 옵션 가격 책정 (2020)
매개변수
weighted_sum (WeightedSumGate)
리턴 유형
일항 산술 합성
정수 비교기
synth_integer_comparator_2s
qiskit.synthesis.synth_integer_comparator_2s(num_state_qubits, value, geq=True)
2s 보수를 기반으로 정수 비교를 구현합니다.
이는 부록 B의 [1을] 기준으로 합니다.
매개변수
- num_state_qubits (int) – 비교 대상 값을 인코딩하는 큐비트의 수.
- value (int) – 비교 대상 값.
- geq (bool) – 큐비트 상태가 값보다 인 경우 대상 비트를
True반전시키고, 그렇지 않은 경우 를 구현한다.
리턴
정수 비교기를 구현하는 회로입니다.
리턴 유형
참조
[1] J. Gacon 외. "양자 강화 시뮬레이션 기반 최적화"
synth_integer_comparator_greedy
qiskit.synthesis.synth_integer_comparator_greedy(num_state_qubits, value, geq=True)
값별 비교를 기반으로 정수 비교를 구현합니다.
2 ** (num_state_qubits - 1) 보다 작은 value 의 경우 이 회로는 제어 상태가 0, 1,..., value - 1 인 value 다중 제어 게이트를 구현하여 큐비트 상태가 허용된 값 중 하나를 나타내면 대상 큐비트가 플립되도록 합니다. value 보다 큰 경우 geq 이 뒤집어집니다. 이 구현에는 기하급수적으로 많은 게이트가 필요할 수 있습니다. 보조 큐비트를 사용할 수 있는 경우, 다음에서 제공하는 구현이 더 효율적입니다 synth_integer_comparator_2s() 에서 제공하는 구현이 더 효율적입니다.
매개변수
- num_state_qubits (int) – 비교 대상 값을 인코딩하는 큐비트의 수.
- value (int) – 비교 대상 값.
- geq (bool) – 큐비트 상태가 값보다 인 경우 대상 비트를
True반전시키고, 그렇지 않은 경우 를 구현한다.
리턴
정수 비교기를 구현하는 회로입니다.
리턴 유형