PauliEvolutionGate
class qiskit.circuit.library.PauliEvolutionGate(operator, time=1.0, label=None, synthesis=None)
베이스: Gate
폴리스로 구성된 연산자의 시간 진화.
폴리 항과 (실제) 진화 시간 으로 구성된 에르미타주 연산자 의 경우, 이 게이트는 유니타리
에볼루션 게이트는 폴리 회전 게이트와 2배의 상관관계가 있습니다. 예를 들어 폴리 연산자의 시간 진화는 다음과 같이 폴리 회전 에 연결됩니다
편집:
이 게이트는 의 정확한 진화 과정을 나타냅니다. 하지만 이 연산을 정확히 구현하려면 일반적으로 지수급의 게이트 수가 필요합니다. LieTrotter따라서 컴파일러는 일반적으로 유니터리 연산 의 근사 값을 구현하는데, 예를 들어 다음과 같이 정의된 곱 공식 등을 사용합니다. 인수를 synthesis 전달하면 컴파일러가 사용할 메서드를 지정할 수 있습니다. 사용 가능한 옵션에 대해서는 를 참조하십시오 qiskit.synthesis .
근사값과 메서드( control() 및 power() 를 호출하는 순서가 중요합니다. 순서를 변경하면 단위가 달라질 수 있습니다.
통근 수당 확인:
Qiskit은 또는 PauliGate 등 다른 파울리 기반 게이트를 사용한 PauliEvolutionGatePauliProductMeasurement 인스턴스의 효율적인 커뮤테이션 검사를 지원합니다. 그러나 이러한 검사는 연산자를 형식으로 SparseObservable 변환해야 하므로, 대규모 교환 검사가 예상되는 경우(예: 순차적 PauliEvolutionGates가 다수 포함된 회로)에는 이 연산자 클래스를 사용하여 연산자를 구축할 것을 강력히 권장합니다.
예:
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import PauliEvolutionGate
from qiskit.quantum_info import SparsePauliOp
X = SparsePauliOp("X")
Z = SparsePauliOp("Z")
I = SparsePauliOp("I")
# build the evolution gate
operator = (Z ^ Z) - 0.1 * (X ^ I)
evo = PauliEvolutionGate(operator, time=0.2)
# plug it into a circuit
circuit = QuantumCircuit(2)
circuit.append(evo, range(2))
print(circuit.draw())위 내용이 인쇄됩니다( -0.1 계수는 인쇄되지 않음에 유의하세요!):
┌──────────────────────────┐
q_0: ┤0 ├
│ exp(-it (ZZ + XI))(0.2) │
q_1: ┤1 ├
└──────────────────────────┘참조 자료:
[1] G. Li et al. 폴리헤럴드: 양자 시뮬레이션 커널을 위한 일반화된 블록 현명한 컴파일러 최적화 프레임워크 (2021). arXiv:2109.03371
매개변수
- operator (qiskit.quantum_info.Pauli |SparsePauliOp |SparseObservable |list[qiskit.quantum_info.Pauli |SparsePauliOp |SparseObservable]) – 진화하는 운영자. 출퇴근하는 운영자의 합계인 비출퇴근 운영자 목록으로 제공될 수도 있습니다. 예:
[XY + YX, ZZ + ZI + IZ, YY]. - time (ParameterValueType) – 진화 시간입니다.
- label (str | None) – 시각화에 표시할 게이트의 레이블입니다. 기본적으로 레이블은
exp(-it <operators>)(<operators>)로 설정되며, 여기서 은 폴리의 합계입니다. 라벨에는 폴리스의 계수가 포함되어 있지 않습니다. 예제는 클래스 문서 문자열을 참조하세요. - synthesis (EvolutionSynthesis | None) – 합성 전략. 없음인 경우 기본 합성은 한 번 반복되는 거짓말 트로터 제품 공식입니다.
속성
base_class
이 인스트럭션의 베이스 클래스를 가져옵니다. 이것은 self 의 상속 트리에 보장됩니다.
명령어의 "베이스 클래스"는 상속 트리에서 객체가 _모든_ 회로 응용 프로그램과 완전히 호환되는 것으로 간주해야 하는 가장 낮은 클래스입니다. 이는 일반적으로 서브클래스는 순전히 기본 클래스에 대한 프로그래머 편의를 제공하기 위해 정의되며, 기본 클래스는 동작 관점에서 "진정한" 클래스라는 의미입니다. 특히, 당신은 무시해서는 *안됩니다 *base_class 하드웨어에 따라 다르게 구현될 명령어의 사용자 정의 버전(예: 대체 측정 전략 또는 이를 구별하기 위한 특정 매개변수 집합을 갖는 매개변수화된 게이트 버전)을 정의하는 경우 Target 완전히 매개변수화된 게이트에서.
이는 표준 라이브러리 지침의 싱글톤 인스턴스의 경우를 제외하고는 type(obj) 과 정확히 일치하는 경우가 많습니다. 이러한 싱글톤 인스턴스는 기본 클래스의 특수 서브클래스이며, 이 프로퍼티는 해당 기본 클래스를 반환합니다. 예를 들어,
>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
True일반적으로 인스트럭션의 정확한 클래스에 의존해서는 안 되며, 주어진 회로 내에서는 Instruction.name 이 대부분의 상황에서 더 적합한 변별자가 될 것으로 예상됩니다.
decompositions
SessionEquivalenceLibrary 에서 인스트럭션의 분해를 가져옵니다.
definition
다른 기본 게이트의 관점에서 정의를 반환합니다.
label
반품 지침 라벨
mutable
이 인스턴스가 변경 가능한 고유 인스턴스인지 여부입니다.
이 속성이 False 인 경우 게이트 인스턴스는 공유 싱글톤이며 변경할 수 없습니다.
name
이름을 반환합니다.
num_clbits
클릿 수를 반환합니다.
num_qubits
큐비트 수를 반환합니다.
params
이 매개변수 Instruction. 이상적으로는 게이트 각도입니다.
time
게이트 파라미터에 저장된 진화 시간을 반환합니다.
리턴
진화 시간입니다.
메소드
add_decomposition
broadcast_arguments
broadcast_arguments(qargs, cargs)
인수의 유효성 검사 및 처리와 그 관계.
예를 들어 cx([q[0],q[1]], q[2]) 은 cx(q[0], q[2]); cx(q[1], q[2]) 을 의미합니다. 이 메서드는 올바른 그룹화의 인수를 산출합니다. 주어진 예제에서:
in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
[q[1], q[2]], []일반적인 방송 규칙은 다음과 같습니다:
Len(qargs) == 1:
[q[0], q[1]] -> [q[0]],[q[1]]Len(qargs) == 2:
[[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]] [[q[0]], [r[0], r[1]]] -> [q[0], r[0]], [q[0], r[1]] [[q[0], q[1]], [r[0]]] -> [q[0], r[0]], [q[1], r[0]]Len(qargs) >= 3:
[q[0], q[1]], [r[0], r[1]], ...] -> [q[0], r[0], ...], [q[1], r[1], ...]
매개변수
리턴
인수가 하나인 튜플입니다.
레이즈
CircuitError – 입력이 유효하지 않은 경우. 예를 들어, 인수의 개수가 게이트의 예상치와 일치하지 않습니다.
리턴 유형
control
control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)
제어된 버전을 반환합니다.
결과는 의 지정된 제어 버전입니다. 반환된 게이트는 을 나타내며, 여기서 는 원래 연산자 를 및 프로젝터로 텐서링한 것입니다(제어 상태에 따라 다름).
제어된 게이트는 의 값과 무관하게 annotated 로 PauliEvolutionGate 구현된다.
매개변수
- num_ctrl_qubits (int) – 추가할 대조군의 수. 기본값은
1.입니다. - label (str | None) – 결과적인 파울리 진화 게이트에 대한 레이블로, 시각화에서 표시하기 위함. 기본적으로 레이블은 로
exp(-it <operators>)설정되며, 여기서<operators>는 파울리 수의 합입니다. 라벨에는 파울리 계수가 포함되지 않음을 유의하십시오. 예제는 클래스 문서 문자열을 참조하십시오. - ctrl_state (int |str | None) – 게이트의 제어 상태는 정수 또는 비트열(예:
"110")로 지정됩니다. 만약None, 기본값은 모든 비트가 1인 상태입니다2**num_ctrl_qubits - 1. - annotated (bool | None) – 무시됨.
리턴
이 게이트의 제어된 버전.
리턴 유형
copy
copy(name=None)
지침 사본.
매개변수
name (str) – 를 복사된 회로에 부여할 이름으로 지정합니다. None 인 경우 이름은 동일하게 유지됩니다.
리턴
현재 인스트럭션의 사본(이름이 제공된 경우 업데이트된 이름 포함)
리턴 유형
inverse
is_parameterized
power
power(exponent, annotated=False)
이 게이트를 exponent 의 힘으로 올리십시오.
결과는 이 exponent 와 같은 를 나타냅니다.
매개변수
- exponent (float) – 게이트를 올릴 수 있는 힘입니다.
- annotated (bool) – 이 클래스에는 적용되지 않습니다. 일반적으로
True인 경우, 구체적인 값 대신 파워 수정자가 설정된AnnotatedOperation대신 파워 수정자가 설정된Gate. 하지만 폴리 진화의 파워를 효율적으로 표현하려면PauliEvolutionGate로 표현할 수 있습니다.
리턴
gate^exponent 을 구현하는 작업입니다.
리턴 유형
repeat
repeat(n)
를 반복하는 self 명령어를 생성합니다.
매개변수
n (int) – 지시를 반복할 횟수
리턴
정의가 포함되어 있습니다.
리턴 유형
레이즈
CircuitError – n < 1인 경우.
reverse_ops
reverse_ops()
복합 인스트럭션의 경우 하위 인스트럭션의 순서를 반대로 합니다.
이는 모든 하위 인스트럭션을 재귀적으로 뒤집는 방식으로 수행됩니다. 어떤 게이트도 반전시키지 않습니다.
리턴
를 포함하는 새 명령어
하위 지침이 반전되었습니다.
리턴 유형
soft_compare
soft_compare(other)
게이트 간 소프트 비교. 이름, 큐비트 수, 클래식 비트 번호가 일치해야 합니다. 매개변수의 개수가 일치해야 합니다. 각 매개변수를 비교합니다. ParameterExpression 인 경우 고려되지 않습니다.
매개변수
other (instruction) – 다른 지침.
리턴
는 자체 및 기타 매개변수 표현식과 동일합니다.
리턴 유형
to_matrix
to_matrix()
행렬 을 numpy.ndarray 으로 반환합니다.
리턴
이 게이트가 나타내는 행렬입니다.
레이즈
ValueError - time 매개변수가 숫자가 아닌 경우.
리턴 유형
to_mutable
to_mutable()
이 게이트의 변경 가능한 복사본을 반환합니다.
이 메서드는 이 게이트 인스턴스의 변경 가능한 새 복사본을 반환합니다. 싱글톤 인스턴스가 사용 중인 경우 이는 변경 가능한 새 고유 인스턴스가 됩니다. 인스턴스가 이미 변경 가능한 경우 해당 인스턴스의 딥카피가 됩니다.
validate_parameter
validate_parameter(parameter)
게이트 파라미터는 int, float 또는 ParameterExpression
매개변수
parameter (ParameterExpression |float)
리턴 유형