Skip to main content
IBM Quantum Platform

전파

pauli_prop.propagation

파울리 전파를 수행하는 함수들.

RotationGates

class RotationGates(gates, qargs, thetas)

GitHub

베이스: NamedTuple

의 중간 최소 표현 QuantumCircuit.

지원되는 파울리 회전: rx/rxx, ry/ryy, rz/rzz, PauliEvolutionGate

RotationGates(gates, qargs, thetas)의 새 인스턴스 생성

매개변수

append_circuit_instruction

append_circuit_instruction(inst, qargs, num_qubits, *, clifford=None)

GitHub

회로 명령어를 분석하고, 해당 데이터를 내부 목록에 추가합니다.

매개변수

  • inst (CircuitInstruction) – 구문 분석 및 추가를 위한 회로 명령어
  • qargs (list[int]) – 해당 회로 맥락에서 명령어의 큐비트 인덱스 목록
  • num_qubits (int) – 이 명령어를 포함하는 회로의 큐비트 수
  • clifford (Clifford | None) – 제공된 명령을 이동해야 할 선택적 클리포드. 클리포드 연산은 회로 내의 모든 큐비트에 대해 수행되어야 한다.

인상

  • ValueError – 회로에서 지원되지 않는 게이트가 발견되었습니다
  • ValueError – 지정된 경우, 회로 내의 모든 큐비트에 적용되어야 clifford 한다

리턴 유형

없음

count

count(value, /)

값이 나타나는 횟수를 반환합니다.

gates

유형: list[ndarray[tuple[int,...], dtype[bool]]]

ZX-미적분법과 유사한 게이트 표현법.

index

index(value, start=0, stop=9223372036854775807, /)

값의 첫 번째 인덱스를 반환합니다.

값이 존재하지 않으면 ValueError 예외를 발생시킵니다.

qargs

유형: list[list[int]]

각 게이트가 작용하는 큐비트 인덱스.

thetas

유형: list[float]

모든 게이트의 회전 각도.

circuit_to_rotation_gates

circuit_to_rotation_gates(circuit)

GitHub

지정된 회로를 중간 표현으로 변환합니다.

PauliLindbladError 명령어로 지정된 파울리 회전 게이트(‘rx/rxx’, ‘ry/ryy’, ‘rz/rzz’, ‘PauliEvolutionGate’ ) 및 파울리-린드블라드 오류 채널을 지원합니다.

매개변수

circuit (QuantumCircuit) –

변환할 회로. 파울리 회전(rx/rxx, ry/ryy, rz/rzz, PauliEvolutionGate )이 포함될 수 있으며, 선택적으로 PauliLindbladError 명령어가 포함될 수도 있습니다.

리턴

회로에 PauliLindbladError 명령어가 포함되어 있지 않은 경우 인스턴스를 RotationGates 반환하고, 그렇지 않은 경우 인스턴스를 NoisyRotationGates 반환합니다.

인상

ValueError – 에서 지원되지 않는 게이트가 발견될 때 circuit.

리턴 유형

RotationGates | NoisyRotationGates

propagate_through_rotation_gates

propagate_through_rotation_gates(operator, rot_gates, max_terms, atol, frame)

GitHub

OO 로 주어진 스파스 파울리 연산자를, UUrot_gates로 표시된 회로를 통해 전파합니다.

슈뢰딩거 전파에 대해서는: UOUU O U^{\dagger}. 하이젠베르크 전파에 대해서는: UOUU^{\dagger} O U.

NoisyRotationGates 인스턴스인 rot_gates 경우, 연산자는 각 노이즈 생성기를 통해 전파됩니다. cic_i 식에서 각 항에 대응하는 계수는 operator, 각 반교환 오차 발생원의 속도 rir_i 에 따라 감쇠될 것이다: ci=exp(2.0ri)c_i *= exp(-2.0 * r_i).

일반적으로, 회로를 통해 신호가 전파되는 데 필요한 메모리와 시간은 파울리 기저에서 연산자의 항 수가 지수적으로 증가하기 때문에, 회로 내 연산 횟수에 따라 지수적으로 증가한다. 이러한 기하급수적인 난이도를 조절하기 위해, 작은 파울리 항을 잘라내어(즉, 0으로 설정하여) 잘라낸 항의 크기에 비례하는 편향을 발생시킬 수 있다. 회로의 각 연산을 거쳐 전파된 후, 항들은 다음 두 매개변수를 기준으로 잘려 나갑니다:

  • 가장 큰 max_terms 파울리 성분만 유지되며, 그보다 작은 항들은 모두 잘려 나갑니다. 이 옵션을 사용하면 계산에 필요한 시간과 메모리 용량을 미리 추정할 수 있습니다.
  • 크기가 보다 작은 항은 잘려 atol 나갑니다(0으로 설정됩니다).
참고

이 함수는 전체 크기의 연산자와 연산자 버퍼를 위해 메모리 공간을 미리 할당합니다. 용어를 max_terms 포함하는 연산자를 저장할 수 있을 만큼 충분한 메모리가 확보되어 있는지 확인하는 것은 호출자의 책임입니다. 가 일 max_termsNone, 메모리 및 시간 요구량은 일반적으로 회로의 연산 횟수에 따라 기하급수적으로 증가한다.

매개변수

  • operator (SparsePauliOp) – 전파할 연산자
  • rot_gates (RotationGates | NoisyRotationGates) – 의 형태로 표현된 회로 RotationGates.
  • max_terms (int) – 연산자가 전파되는 과정에서 포함할 수 있는 항의 최대 개수
  • atol (float) – 이 값보다 작은 계수 크기를 가진 항은 연산자가 전파될 때 연산자에 추가되지 않습니다. 이 매개변수는 반환되는 연산자의 정확성을 보장하는 것은 아닙니다.
  • frame (str) –s 슈뢰딩거 진화 h 하이젠베르크 진화

리턴

진화한 연산자와 모든 절단 계수의 1-노름.

인상

리턴 유형

튜플 [ SparsePauliOp, float ]

propagate_through_circuit

propagate_through_circuit(operator, circuit, max_terms, atol, frame)

GitHub

스파스 파울리 연산자 OO 를 회로 UU 를 통해 전파합니다.

PauliLindbladError 명령어로 지정된 파울리 회전 게이트(‘rx/rxx’, ‘ry/ryy’, ‘rz/rzz’, ‘PauliEvolutionGate’ ) 및 파울리-린드블라드 오류 채널을 지원합니다.

슈뢰딩거 전파에 대해서는: UOUU O U^{\dagger}. 하이젠베르크 전파에 대해서는: UOUU^{\dagger} O U.

에 파울리-린드블라드 잡음 지침이 포함되어 circuit 있는 경우, 해당 연산자는 각 잡음 생성기를 통해 전파됩니다. cic_i 식에서 각 항에 대응하는 계수는 operator, 각 반교환 오차 발생원의 속도 rir_i 에 따라 감쇠될 것이다: ci=exp(2.0ri)c_i *= exp(-2.0 * r_i).

일반적으로, 회로를 통해 신호가 전파되는 데 필요한 메모리와 시간은 파울리 기저에서 연산자의 항 수가 지수적으로 증가하기 때문에, 회로 내 연산 횟수에 따라 지수적으로 증가한다. 이러한 기하급수적인 난이도를 조절하기 위해, 작은 파울리 항을 잘라내어(즉, 0으로 설정하여) 잘라낸 항의 크기에 비례하는 편향을 발생시킬 수 있다. 회로의 각 연산을 거쳐 전파된 후, 항들은 다음 두 매개변수를 기준으로 잘려 나갑니다:

  • 가장 큰 max_terms 파울리 성분만 유지되며, 그보다 작은 항들은 모두 잘려 나갑니다. 이 옵션을 사용하면 계산에 필요한 시간과 메모리 용량을 미리 추정할 수 있습니다.
  • 크기가 보다 작은 항은 잘려 atol 나갑니다(0으로 설정됩니다).
참고

이 함수는 전체 크기의 연산자와 연산자 버퍼를 위해 메모리 공간을 미리 할당합니다. 용어를 max_terms 포함하는 연산자를 저장할 수 있을 만큼 충분한 메모리가 확보되어 있는지 확인하는 것은 호출자의 책임입니다. 가 일 max_termsNone, 메모리 및 시간 요구량은 일반적으로 회로의 연산 횟수에 따라 기하급수적으로 증가한다.

매개변수

  • operator (SparsePauliOp) – 전파할 연산자
  • circuit (QuantumCircuit) – 연산자가 전파될 회로
  • max_terms (int) – 연산자가 전파되는 과정에서 포함할 수 있는 항의 최대 개수
  • atol (float) – 이 값보다 작은 계수 크기를 가진 항은 연산자가 전파될 때 연산자에 추가되지 않습니다. 이 매개변수는 반환되는 연산자의 정확성을 보장하는 것은 아닙니다.
  • frame (str) –s 슈뢰딩거 진화 h 하이젠베르크 진화

리턴

진화한 연산자

인상

리턴 유형

튜플 [ SparsePauliOp, float ]

propagate_through_operator

propagate_through_operator(op1, op2, max_terms=None, coerce_op1_traceless=False, num_leading_terms=0, frame='s', atol=0.0, search_step=4)

GitHub

op1 또는 OO 연산자를 op2 또는 UU 연산자를 통해 전파합니다.

슈뢰딩거 진화에 대해서는: UOUU O U^{\dagger}.

하이젠베르크 진화 방식에 대해서는: UOUU^{\dagger} O U.

진화는 파울리 기저에서 UiOjUkU_i O_j U_k 형태의 항들을 합산함으로써 수행된다(다거 기호는 무시함, 아래 주석 참조). 이러한 항의 개수는 연산자 크기에 대해 3차 함수 관계(len( op1 ) * len( op2 )**2)를 따르며, 일반적으로 많은 중복된 파울리 항을 포함하게 됩니다.

max_terms를 설정하면 근사값이 산출되며, 이때 계수의 크기가 가장 큰 max_terms개 항만 계산됩니다. 이 방법은 훨씬 더 빠를 수 있지만, 작은 항들이 잘려나감에 따라 일부 오류가 발생합니다.

대략적인 계산은 두 단계로 이루어집니다. 먼저 유지할 항을 찾아내고, 그 다음 해당 항들을 계산하는 것입니다. 검색 횟수를 크게 search_step (3제곱으로) 늘리면 검색 속도가 빨라지지만, 정확도는 대개 약간 떨어집니다.

남겨진 항에 포함된 일부 파울리 항이 잘린 항에도 나타났을 가능성이 있다. 이러한 잘린 항들은 결코 계산되지 않기 때문에, 동일한 파울리를 공유하는 유지된 항들과 병합될 수 없습니다. 따라서, 는 비단조적일 n``th-largest term in the approximate result is not guaranteed to equal the nth-largest term in the exact result. Likewise, convergence to the exact result with increasing ``max_terms 수 있다.

참고

OO 는 헤르미트 행렬로 가정한다( OjO_j = OjO_j^{\dagger} )

매개변수

  • op1 (SparsePauliOp) – 전파할 연산자

  • op2 (SparsePauliOp) – 전파할 대상 운영자

  • max_terms (int | None) –

    그렇지 않은 경우 None, 파울리 공간에서 세 연산자의 직적에 포함된 가장 큰 max_terms 항들만을 고려하여 근사적인 결과를 산출한다.

    None 가이고 max_terms 큐비트 수가 < 12, the propagation will be performed in the computational basis using matrix multiplication. For systems > 12개일 때, 모든 파울리 항을 계산하여 합산하지만, 중복된 항이 많이 존재하기 때문에 이는 일반적으로 정확한 진화를 계산하는 데 적합한 방법이 아닙니다.

  • coerce_op1_traceless (bool) – 출력 연산자에서 항등식을 제거할지 여부를 나타내는 플래그입니다.

  • num_leading_terms (int) – 의 각 항에 대해 의 항 수만큼 활용해야 op1 한다 op2. 포함된 항의 집합은 j<numleadingtermsj < num_leading_terms 인 경우, UiOjUiU_i O_j U_i^{\dagger} 항의 집합과의 합집합을 포함하도록 확장됩니다. 이는 약간의 계산 시간 비용을 치르더라도, 출력의 O 성분 중 선두 성분들에 대한 정확도를 향상시킬 수 있습니다.

  • frame (str) – s는 슈뢰딩거 진화를, h는 하이젠베르크 진화를 나타냅니다

  • atol (float) – 크기가 미만인 진화 연산자의 항은 잘려 나갑니다 atol

  • search_step (int) – 3D 의 매우 방대한 공간에서 검색 속도를 높여, 곱에서 가장 max_terms 큰 항을 식별할 수 있게 해주는 매개변수입니다. 이 단계 크기를 1보다 크게 설정하면 검색 속도가 배로 빨라지지만 search_step**3, 정확도가 다소 떨어질 수 있습니다. 의 경우, 이러한 부정확성은 미미할 것으로 예상됩니다 search_step**3 << max_terms.

리턴

변환된 연산자

인상

  • ValueErrorframe 는 도 아니고 s 도 아니다 h.
  • ValueErrorsearch_step 는 양수가 아니다.
  • ValueError – 잘못된 값이 max_terms 포함되어 있습니다.

리턴 유형

SparsePauliOp

evolve_through_cliffords

evolve_through_cliffords(circuit)

GitHub

회로 내의 모든 클리포드 게이트를 통해 클리포드가 아닌 모든 명령어를 진화(슈뢰딩거 프레임)시킵니다.

이렇게 하면 인식된 모든 클리포드 게이트가 회로의 시작 부분으로 이동하고, 파울리 회전 게이트(예: RxGate, RzzGate, PauliEvolutionGate) 및 PauliLindbladError 채널의 기저가 업데이트됩니다. 그 외의 작업은 지원되지 않습니다. 클리포드 연산을 통한 파울리 연산의 진화에 대한 자세한 내용은 Pauli.evolve 문서를 참조하십시오.

이 효과는 arXiv:2306.04797 에 있는 클리포드 상호작용 그림으로 넘어가는 것과 유사하지만, 모든 회전 각도의 크기를 π/4\leq \pi/4 로 매핑하지는 않습니다.

이 함수는 회로의 클리포드 부분과 비클리포드 부분을 나타내는 두 개의 객체를 반환합니다.

매개변수

circuit (QuantumCircuit) – 변화를 위한 QuantumCircuit . 파울리 회전 게이트 PauliLindbladError (회로에 양자 채널로 추가된 것)와 인정된 클리포드 게이트만 포함할 수 있다.

리턴

  • 클리포드 - 회로의 첫 번째 부분을 나타내는 단일 올-큐비트 클리포드
  • QuantumCircuit - 회로의 나머지 변형된 부분을 포함하는 회로

인상

ValueError – 입력 회로에 지원되지 않는 게이트가 포함되어 있습니다

리턴 유형

튜플 [ Clifford, QuantumCircuit ]

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