QuantumCircuit 클래스
class qiskit.circuit.QuantumCircuit(*regs, name=None, global_phase=0, metadata=None, inputs=(), captures=(), declarations=())
베이스: IR
양자 회로의 핵심 키스킷 표현.
자세한 내용은 QuantumCircuit 와 함께 제공되는 모든 데이터 구조의 컨텍스트, 나머지 패키지에 어떻게 들어맞는지, 그리고 qiskit 패키지와 키스킷의 양자 회로 설명의 다른 체계에 대한 자세한 내용은 모듈 수준 문서인 qiskit.circuit.
예:
from qiskit import QuantumCircuit
# Create a new circuit with two qubits
qc = QuantumCircuit(2)
# Add a Hadamard gate to qubit 0
qc.h(0)
# Perform a controlled-X gate on qubit 1, controlled by qubit 0
qc.cx(0, 1)
# Return a text drawing of the circuit.
qc.draw() ┌───┐
q_0: ┤ H ├──■──
└───┘┌─┴─┐
q_1: ─────┤ X ├
└───┘회로 속성
QuantumCircuit 에는 대부분 오래된 기능인 소수의 공개 속성이 있습니다. 대부분의 기능은 메서드를 통해 액세스할 수 있습니다.
일부 속성만 의도적으로 변경할 수 있고 나머지는 불변으로 간주해야 하는 데이터 속성입니다.
변경 가능한 속성 | 요약 |
|---|---|
global_phase | 회로의 전역 위상(라디안 단위로 측정)입니다. |
metadata | 임의의 사용자 매핑으로, 키스킷은 트랜스파일러를 통해 보존하지만 그렇지 않으면 완전히 무시합니다. |
name | 회로의 선택적 문자열 이름입니다. |
불변 데이터 속성 | 요약 |
|---|---|
ancillas | 목록 AncillaQubit를 추적합니다. |
cregs | 목록 ClassicalRegister를 추적합니다. |
clbits | 목록 Clbit를 추적합니다. |
data | 회로를 구성하는 개별 CircuitInstruction소자의 목록. |
_data | C API QkCircuit 객체에서 사용하는, Rust 네이티브 백엔드 데이터에 대한 Python 공간 핸들입니다. |
duration | 트랜스파일러 패스를 예약하여 추가된 회로의 총 지속 시간입니다. 이 속성은 더 이상 사용되지 않으며 estimate_duration() 를 대신 사용해야 합니다. |
layout | 트랜스파일러가 추가한 하드웨어 레이아웃 및 라우팅 정보입니다. |
num_ancillas | 회로의 안실라 큐비트 수입니다. |
num_clbits | 회로의 클럭 비트 수입니다. |
num_captured_vars | 캡처된 실시간 클래식 변수의 수입니다. |
num_captured_stretches | 캡처된 스트레치 수입니다. |
num_declared_vars | 외부 회로 범위에서 로컬로 선언된 실시간 클래식 변수의 수입니다. |
num_declared_stretches | 외부 회로 범위에서 로컬로 선언된 스트레치 수입니다. |
num_input_vars | 입력된 실시간 클래식 변수의 수입니다. |
num_parameters | 회로 내의 컴파일 타임 Parameters의 개수. |
num_qubits | 회로의 큐비트 수입니다. |
num_vars | 외부 회로 범위의 실시간 클래식 변수의 총 개수입니다. |
num_stretches | 외부 회로 범위의 총 스트레치 수입니다. |
num_identifiers | 외부 회로의 두 변수와 스트레치의 총 개수입니다. |
op_start_times | 트랜스파일러 패스를 예약하여 추가된 예약된 작업의 시작 시간입니다. |
parameters | 회로가 추적하는 컴파일 시점의 Parameters에 대한 정렬된 집합형 뷰. |
qregs | 목록 QuantumRegister를 추적합니다. |
qubits | 목록 Qubit를 추적합니다. |
unit | 필드의 단위입니다 duration 필드 단위입니다. |
핵심 속성은 data.입니다. 이것은 순서대로 정렬된 형태로 CircuitInstructions를 노출하는 시퀀스형 객체입니다. 일반적으로 이 객체를 직접 수정해서는 안 됩니다. 이 객체는 추가 전용 작업(이 경우 를 사용해야 함 append())만을 위해 설계되었습니다 QuantumCircuit . 회로를 제자리에서 변경하는 대부분의 연산은 트랜스파일러 패스(qiskit.transpiler)로 작성되어야 합니다. C API는 라는 내부 객체와 상호작용하는데 _data, 이 객체는 C API 호출에 전달되는 핸들로서의 역할 외에는 공개 Python API의 일부가 아닙니다.
data
회로 데이터(지침 및 컨텍스트).
예제
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)
qc.measure([0], [1])
print(qc.data)[CircuitInstruction(operation=Instruction(name='measure', num_qubits=1,
num_clbits=1, params=[]), qubits=(Qubit(QuantumRegister(2, 'q'), 0),),
clbits=(Clbit(ClassicalRegister(2, 'c'), 1),))]리턴
회로 내의 인스턴스를 CircuitInstruction 포함하는 목록과 유사한 객체입니다.
_data
유형: CircuitData
기본 Rust 객체를 뒷받침하는 불투명한 핸들 QuantumCircuit.
이 객체는 C API 객체와 직접적으로 대응합니다 QkCircuit.
Python 에서 이 객체의 존재 자체를 제외한 그 어떤 부분도 공개 API에 포함되지 않습니다.
Python 내에서 이 객체를 유용하게 사용할 수 있는 경우는 거의 없습니다. C-API 유형을 기대하는 함수 QkCircuit(예: 를 호출하는 함수)에 이를 전달할 수 있으며 qk_circuit_borrow_from_python(), 이를 로 사용할 수도 있고 passmanager.IR, 를 사용하여 전체 회로를 재구성할 수도 있습니다 QuantumCircuit.from_circuit_data().
data와 더불어, 회로가 제어 가능한 을 Gate 설명하는 데 사용되는 경우, 회로의 global_phase 도 출력에 어느 정도 영향을 미칠 수 있다. 이 값은 라디안 단위로 측정되며 직접 설정할 수 있습니다.
global_phase
현재 회로 범위의 전역 위상(라디안 단위)입니다.
예제
from qiskit import QuantumCircuit
circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
print(circuit.global_phase)0.0from numpy import pi
circuit.global_phase = pi/4
print(circuit.global_phase)0.7853981633974483회로의 는 name 및 to_gate() 호출의 결과로 to_instruction() 생성된 Instruction 또는 Gate 의 이름이 되며, 이는 시각화 시 유용할 수 있습니다.
name
유형: str
사람이 읽을 수 있는 회로의 이름입니다.
예제
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit회로에 임의의 metadata 를 회로에 연결할 수 있습니다. 코어 키스킷의 어떤 부분도 메타데이터에 따라 이를 검사하거나 동작을 변경하지 않지만, 트랜스파일러를 통해 충실하게 전달되므로 사용자가 직접 회로에 태그를 지정할 수 있습니다. QPY로 회로를 직렬화할 때( qiskit.qpy참조), 메타데이터는 JSON으로 직렬화되며 그 안에서 JSON과 호환되지 않는 객체를 처리하기 위해 사용자 정의 직렬화기를 전달해야 할 수 있습니다( qpy.dump() 를 참조하세요.) OpenQASM 2 또는 3으로 내보내는 동안 이 필드는 무시됩니다.
metadata
회로의 메타데이터에 대한 임의의 사용자 정의 사전입니다.
키스킷은 이 매핑의 내용을 검사하지 않지만, 트랜스파일러를 통과하여 출력에 다시 첨부하므로 사용자는 자신의 메타데이터를 추적할 수 있습니다.
예제
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, metadata={'experiment_type': 'Bell state experiment'})
print(qc.metadata){'experiment_type': 'Bell state experiment'}QuantumCircuit 내부 양자 비트 및 고전 비트와 레지스터를 추적하는 데이터 속성을 노출합니다. 이것들은 Python list객체로 보이지만, 불변 객체로 취급해야 합니다. 이를 변경해도 기껏해야 아무런 효과가 없을 뿐이며, 오히려 해당 객체의 내부 데이터가 손상될 가능성이 더 높습니다 QuantumCircuit.
qregs
목록 Qubit를 추가한 순서대로 나열합니다. 이를 변경해서는 안 됩니다.
cregs
목록 Clbit를 추가한 순서대로 나열합니다. 이를 변경해서는 안 됩니다.
qubits
목록 Qubit를 추가한 순서대로 나열합니다. 이를 변경해서는 안 됩니다.
ancillas
목록 AncillaQubit를 추가한 순서대로 나열합니다. 이를 변경해서는 안 됩니다.
clbits
목록 Clbit를 추가한 순서대로 나열합니다. 이를 변경해서는 안 됩니다.
예제
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
qr1 = QuantumRegister(2)
qr2 = QuantumRegister(1)
cr1 = ClassicalRegister(2)
cr2 = ClassicalRegister(1)
qc = QuantumCircuit(qr1, qr2, cr1, cr2)
print("List the qubits in this circuit:", qc.qubits)
print("List the classical bits in this circuit:", qc.clbits)List the qubits in this circuit: [Qubit(QuantumRegister(2, 'q0'), 0),
Qubit(QuantumRegister(2, 'q0'), 1), Qubit(QuantumRegister(1, 'q1'), 0)]
List the classical bits in this circuit: [Clbit(ClassicalRegister(2, 'c0'), 0),
Clbit(ClassicalRegister(2, 'c0'), 1), Clbit(ClassicalRegister(1, 'c1'), 0)]회로의 명령어에 포함된 컴파일 시점 매개변수는 에서 사용할 수 있습니다 parameters. 이것에는 (의 경우를 제외하고는 대체로 사전순인 ParameterVector) 정규 순서가 있으며, 이는 의 리스트 형식을 사용할 때 매개변수에 할당되는 순서와 일치하지만 assign_parameters(), set-와 유사한 상수 시간 내 소속 여부 검사도 지원합니다.
parameters
회로에 정의된 매개변수입니다.
이 속성은 회로 내의 객체들을 Parameter 알파벳 순서로 정렬하여 반환합니다. 기호 ParameterVector ( )로 인스턴스화된 매개변수도 여전히 숫자 순서대로 정렬된다는 점에 유의하십시오.
예제
아래 스니펫은 매개변수의 삽입 순서는 중요하지 않다는 것을 보여줍니다.
>>> from qiskit.circuit import QuantumCircuit, Parameter
>>> a, b, elephant = Parameter("a"), Parameter("b"), Parameter("elephant")
>>> circuit = QuantumCircuit(1)
>>> circuit.rx(b, 0)
>>> circuit.rz(elephant, 0)
>>> circuit.ry(a, 0)
>>> circuit.parameters # sorted alphabetically!
ParameterView([Parameter(a), Parameter(b), Parameter(elephant)])숫자의 경우 알파벳순 정렬이 직관적이지 않을 수 있다는 점을 염두에 두세요. 엄격한 알파벳순 정렬에서는 문자 그대로 '10'이 '2' 앞에옵니다.
>>> from qiskit.circuit import QuantumCircuit, Parameter
>>> angles = [Parameter("angle_1"), Parameter("angle_2"), Parameter("angle_10")]
>>> circuit = QuantumCircuit(1)
>>> circuit.u(*angles, 0)
>>> circuit.draw()
┌─────────────────────────────┐
q: ┤ U(angle_1,angle_2,angle_10) ├
└─────────────────────────────┘
>>> circuit.parameters
ParameterView([Parameter(angle_1), Parameter(angle_10), Parameter(angle_2)])숫자 순서를 유지하려면 를 ParameterVector 사용할 수 있습니다.
>>> from qiskit.circuit import QuantumCircuit, Parameter, ParameterVector
>>> x = ParameterVector("x", 12)
>>> circuit = QuantumCircuit(1)
>>> for x_i in x:
... circuit.rx(x_i, 0)
>>> circuit.parameters
ParameterView([
ParameterVectorElement(x[0]), ParameterVectorElement(x[1]),
ParameterVectorElement(x[2]), ParameterVectorElement(x[3]),
..., ParameterVectorElement(x[11])
])리턴
회로 내의 정렬된 Parameter 객체들.
회로를 트랜스파일하여 물리적 회로가 있는 경우, 소스 회로의 가상 큐비트와 물리적 회로의 하드웨어 큐비트가 어떻게 매핑되는지에 대한 정보에 대한 layout 어트리뷰트를 검사하여 소스 회로의 가상 큐비트와 물리적 회로의 하드웨어 큐비트가 회로의 시작과 끝에서 어떻게 매핑되는지에 대한 트랜스파일러가 저장한 정보를 확인할 수 있습니다.
layout
회로에 대한 모든 관련 레이아웃 정보를 반환합니다.
이 속성에는 선택적 TranspileLayout 객체가 포함됩니다. 이는 일반적으로 또는 PassManager.run() 의 transpile() 출력에서 설정되며, 트랜스필레이션으로 인해 입력 회로에 발생하는 순열에 대한 정보를 유지하기 위함입니다.
SwapGateTarget함수에 transpile() 의해 발생하는 순열에는 두 가지 유형이 있습니다. 하나는 에서 선택된 물리적 큐비트를 기반으로 큐비트의 배열을 재배열하는 초기 배열이고, 다른 하나는 라우팅 과정에서 삽입된 s에 의해 발생하는 출력 순열인 최종 배열입니다.
예제
from qiskit import QuantumCircuit
from qiskit.providers.fake_provider import GenericBackendV2
from qiskit.transpiler import generate_preset_pass_manager
# Create circuit to test transpiler on
qc = QuantumCircuit(3, 3)
qc.h(0)
qc.cx(0, 1)
qc.swap(1, 2)
qc.cx(0, 1)
# Add measurements to the circuit
qc.measure([0, 1, 2], [0, 1, 2])
# Specify the QPU to target
backend = GenericBackendV2(3)
# Transpile the circuit
pass_manager = generate_preset_pass_manager(
optimization_level=1, backend=backend
)
transpiled = pass_manager.run(qc)
# Print the layout after transpilation
print(transpiled.layout.routing_permutation())[0, 1, 2]회로가 트랜스필레이션의 일부로 예약된 경우 각 명령어의 개별 타이밍과 함께 회로의 전체 타이밍이 노출됩니다 duration 과 함께 각 인스트럭션의 개별 타이밍이 노출됩니다.
duration
스케줄링 트랜스파일러 패스로 설정한 회로의 총 지속 시간입니다. 단위는 unit.
qiskit.circuit.quantumcircuit.QuantumCircuit.duration 속성은 키스킷 1.3.0 에서 더 이상 사용되지 않습니다. 키스킷 3.0.0 에서 제거됩니다.
unit
지정된 단위 duration 가 지정된 단위입니다.
qiskit.circuit.quantumcircuit.QuantumCircuit.unit 속성은 키스킷 1.3.0 에서 더 이상 사용되지 않습니다. 키스킷 3.0.0 에서 제거됩니다.
op_start_times
작업 시작 시간 목록을 반환합니다.
이 속성은 예약된 회로에서 작업의 예상 시작 시간을 계산하며 제어 흐름이나 기타 고전적인 피드 포워드 작업이 없는 단순한 회로에서만 작동합니다.
이 속성은 스케줄링 분석 패스 중 하나가 양자 회로에서 실행되면 활성화됩니다.
예제
from qiskit import QuantumCircuit
from qiskit.providers.fake_provider import GenericBackendV2
from qiskit.transpiler import generate_preset_pass_manager
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# Print the original circuit
print("Original circuit:")
print(qc)
# Transpile the circuit with a specific basis gates list and print the resulting circuit
backend = GenericBackendV2(2, basis_gates=['u1', 'u2', 'u3', 'cx'])
pm = generate_preset_pass_manager(
optimization_level=1, backend=backend, scheduling_method="alap"
)
transpiled_qc = pm.run(qc)
print("Transpiled circuit with basis gates ['u1', 'u2', 'u3', 'cx']:")
print(transpiled_qc)
# Print the start times of each instruction in the transpiled circuit
print("Start times of instructions in the transpiled circuit:")
for instruction, start_time in zip(transpiled_qc.data, transpiled_qc.op_start_times):
print(f"{instruction.operation.name}: {start_time}")Original circuit:
┌───┐ ░ ┌─┐
q_0: ┤ H ├──■───░─┤M├───
└───┘┌─┴─┐ ░ └╥┘┌─┐
q_1: ─────┤ X ├─░──╫─┤M├
└───┘ ░ ║ └╥┘
meas: 2/══════════════╩══╩═
0 1
Transpiled circuit with basis gates ['u1', 'u2', 'u3', 'cx']:
┌─────────┐ ░ ┌─────────────────┐┌─┐
q_0 -> 0 ───┤ U2(0,π) ├──────■───░─┤ Delay(1255[dt]) ├┤M├
┌──┴─────────┴───┐┌─┴─┐ ░ └───────┬─┬───────┘└╥┘
q_1 -> 1 ┤ Delay(196[dt]) ├┤ X ├─░─────────┤M├─────────╫─
└────────────────┘└───┘ ░ └╥┘ ║
meas: 2/═══════════════════════════════════╩══════════╩═
1 0
Start times of instructions in the transpiled circuit:
u2: 0
delay: 0
cx: 196
barrier: 2098
delay: 2098
measure: 3353
measure: 2098리턴
인스트럭션 예상 시작 시간을 나타내는 정수 목록입니다. 인덱스는 명령의 인덱스에 해당합니다 QuantumCircuit.data.
레이즈
AttributeError – 회로가 예약되지 않은 경우.
마지막으로 QuantumCircuit 는 몇 가지 간단한 속성을 동적 읽기 전용 숫자 속성으로 노출합니다.
num_ancillas
안실라 큐비트 수를 반환합니다.
예제
from qiskit import QuantumCircuit, QuantumRegister, AncillaRegister
# Create a 2-qubit quantum circuit
reg = QuantumRegister(2)
qc = QuantumCircuit(reg)
# Create an ancilla register with 1 qubit
anc = AncillaRegister(1)
qc.add_register(anc) # Add the ancilla register to the circuit
print("Number of ancilla qubits:", qc.num_ancillas)Number of ancilla qubits: 1num_clbits
클래식 비트 수를 반환합니다.
예제
from qiskit import QuantumCircuit
# Create a new circuit with two qubits and one classical bit
qc = QuantumCircuit(2, 1)
print("Number of classical bits:", qc.num_clbits)Number of classical bits: 1num_captured_vars
둘러싸는 범위에서 캡처된 것으로 표시된 회로 내 실시간 클래식 변수의 수입니다.
이것은 이터러블의 길이입니다 iter_captured_vars() 이터러블의 길이입니다. 0이 아닌 경우 num_input_vars 는 0이어야 합니다.
num_captured_stretches
둘러싸는 스코프에서 캡처된 것으로 표시된 회로의 스트레치 수입니다.
이것은 이터러블의 길이입니다 iter_captured_stretches() 이터러블의 길이입니다. 0이 아닌 경우 num_input_vars 는 0이어야 합니다.
num_declared_vars
이 회로 범위에서 선언된 회로 내 실시간 클래식 변수의 수(입력 또는 캡처 제외)입니다.
이것은 이터러블의 길이입니다 iter_declared_vars() 이터러블의 길이입니다.
num_declared_stretches
캡처를 제외하고 이 회로 범위에서 선언된 회로의 스트레치 수입니다.
이것은 이터러블의 길이입니다 iter_declared_stretches() 이터러블의 길이입니다.
num_input_vars
회로 입력으로 표시된 회로 내 실시간 클래식 변수의 수입니다.
이것은 이터러블의 길이입니다 iter_input_vars() 이터러블의 길이입니다. 0이 아닌 경우 num_captured_vars 는 0이어야 합니다.
num_identifiers
회로의 실시간 클래식 변수 및 스트레치 수입니다.
이는 다음과 같습니다 num_vars() + num_stretches().
num_parameters
회로의 파라미터 개체 수입니다.
num_qubits
반환 큐비트 수입니다.
num_stretches
회로의 스트레치 횟수입니다.
이것은 이터러블의 길이입니다 iter_stretches() 이터러블의 길이입니다.
num_vars
회로의 실시간 클래식 변수 수입니다.
이것은 이터러블의 길이입니다 iter_vars() 이터러블의 길이입니다.
새로운 회로 생성
방법 | 요약 |
|---|---|
__init__() | 인스트럭션이 없는 회로의 기본 생성자입니다. |
copy() | 기존 회로의 완전한 사본을 만드세요. |
copy_empty_like() | 별도의 지침 없이 한 회로의 데이터 개체를 새 회로로 복사할 수 있습니다. |
from_circuit_data() | Rust 네이티브 _data 객체를 기반으로 다시 생성합니다. |
from_instructions() | 지침 목록에서 필요한 데이터 개체를 추론합니다. |
from_qasm_file() | 레거시 인터페이스 qasm2.load(). |
from_qasm_str() | 레거시 인터페이스 qasm2.loads(). |
기본 생성자(QuantumCircuit(...))는 초기 명령어가 없는 회로를 생성합니다. 기본 생성자의 인수는 양자 및 기존 데이터 스토리지로 회로를 시드하고 이름, 전역 위상 및 임의의 메타데이터를 제공하는 데 사용할 수 있습니다. 이러한 모든 필드는 나중에 확장할 수 있습니다.
__init__
__init__(*regs, name=None, global_phase=0, metadata=None, inputs=(), captures=(), declarations=())
의 기본 생성자 QuantumCircuit.
매개변수
-
regs (Register |int |Sequence[Bit]) –
회로에 포함할 레지스터입니다.
-
객체의 목록인 경우
Register객체를 나타내는QuantumRegister및/또는ClassicalRegister객체를 나타냅니다.예를 들어,
QuantumCircuit(QuantumRegister(4))QuantumCircuit(QuantumRegister(4), ClassicalRegister(3))QuantumCircuit(QuantumRegister(4, 'qr0'), QuantumRegister(2, 'qr1'))
-
int의 목록인 경우 회로에 포함할 큐비트 및/또는 클래식 비트의 양입니다. 양자 비트 수만 하나의 정수로 표시하거나 양자 비트와 기존 비트 수를 각각 2정수로 표시할 수 있습니다.예를 들어,
QuantumCircuit(4) # A QuantumCircuit with 4 qubitsQuantumCircuit(4, 3) # A QuantumCircuit with 4 qubits and 3 classical bits
-
객체를 포함하는 파이썬 목록의 경우
Bit객체를 포함하는 파이썬 목록인 경우Bit를 회로에 추가할 수 있습니다.
-
-
name (str | None) – 양자 회로의 이름. 설정되지 않은 경우, 자동으로 생성된 문자열이 할당됩니다.
-
global_phase (ParameterExpression |float) – 회로의 전역 위상(라디안 단위).
-
metadata (dict | None) – 회로에 연결할 임의의 키-값 메타데이터. 이는 속성
metadata내의 딕셔너리에 자유 형식 데이터로 저장됩니다. 이 부품은 회로에서 직접 사용되지는 않을 것입니다. -
inputs (Iterable[Var]) – 이 회로에 대해 런타임
input변수로 선언할 변수가 있습니까? 이들은 이미 다른 곳에서 생성된 기존expr.Var노드여야 합니다. 입력 노드도 함께 생성해야 한다면 다음을 사용하세요QuantumCircuit.add_input(). 이 인자에 지정된 변수들은 에 직접add_input()전달됩니다. 한 회로에서 와 를inputs동시에 가질captures수는 없다. -
captures (Iterable[Var |Stretch]) – 이 회로 범위가 포함하는 범위에서 가져와야 할 변수들. 여기에 지정된 변수들은.
add_capture()로 직접 전달됩니다. 한 회로에서 와 를inputs동시에 가질captures수는 없다. -
declarations (Mapping[Var, Expr] | Iterable[tuple[Var, Expr]]) –
이 회로가 즉시 선언하고 초기화해야 하는 모든 변수입니다. 이후 선언이 이전 선언(입력 또는 캡처 포함)에 종속되도록 이 입력을 정렬할 수 있습니다. 런타임에 나중에 계산될 값에 의존해야 하는 경우 회로 실행의 적절한 시점에
add_var()을 회로 실행의 적절한 지점에서 사용하세요.이 인수는 이미 생성된 변수 집합이 있을 때 편리한 회로 초기화를 위한 것입니다. 여기에 사용되는 변수는 직접
add_var()에 직접 전달되며, 변수를 처음 생성하는 경우 직접 사용할 수 있습니다.
레이즈
- CircuitError - 회로 이름이 유효하지 않은 경우.
- CircuitError -
inputs및captures모두 제공된 경우
기존 회로가 있는 경우 지침을 포함하여 copy()를 사용하여 사본을 만들 수 있습니다. 이 기능은 부분 회로를 유지하면서 다른 회로를 확장하거나 이전 회로를 그대로 유지하면서 제자리에서 변경할 수 있는 버전을 갖고자 할 때 유용합니다.
copy
copy(name=None)
회로를 복사합니다.
매개변수
name (str) – 복사된 회로에 부여할 이름. 'None'인 경우, 이름은 그대로 유지됩니다.
리턴
지정된 이름을 가진 현재 회로의 딥카피입니다
리턴 유형
마찬가지로, 동일한 데이터 객체(비트, 레지스터, 변수 등)는 모두 포함하되 명령어는 하나도 포함하지 않는 회로를 원한다면, 다음을 사용할 수 copy_empty_like() 있습니다. 이는 회로의 새로운 레이어를 구축하여 이를 뒷면에 적용하거나 compose(), 회로의 명령어를 완전히 다시 작성하고자 할 때 흔히 발생하는 일입니다.
copy_empty_like
copy_empty_like(name=None, *, vars_mode='alike')
구조는 동일하지만 비어 있는 self의 복사본을 반환합니다.
이 구조에는 다음이 포함됩니다:
- 이름 및 기타 메타데이터
- 글로벌 단계
- 레지스터를 포함한 모든 큐비트와 클립비트
- 키워드 인자에 따라 처리되는 회로에 정의된 실시간 변수를
vars키워드 인자에 따라 처리합니다.
회로에 로컬 변수 선언( declarations 인수를 회로 생성자에 추가하거나 add_var())을 포함하는 경우 출력 회로에서 초기화되지 않을 수 있습니다. 해당 스토어에 대한 스토어 지침을 수동으로 추가해야 합니다( Store 및 QuantumCircuit.store())를 추가하여 초기화해야 합니다.
매개변수
-
name (str | None) – 복사된 회로의 이름. 'None'인 경우, 이름은 그대로 유지됩니다.
-
vars_mode (Literal['alike', 'captures', 'drop']) –
실시간 변수를 처리할 모드입니다.
모두
출력 회로의 변수는 원래 회로에서와 동일한 선언 의미를 갖습니다. 예를 들어 소스의
input변수는 출력 회로에서input변수가 됩니다. 이렇게 하면 저장소가 복사되지 않으므로 로컬 변수가 초기화되지 않습니다. 초기화 저장소를 다시 추가하지 않으면 회로가 사용자에게 잠재적으로 위험한 상태로 남을 수 있습니다.캡처
모든 변수는 캡처된 변수로 변환됩니다. 이 기능은 기존 회로를 위한 새 레이어를 만들 때 유용합니다
compose()베이스에compose()는 기본 회로에 캡처를 인라인할 수 있기 때문에 유용합니다(다른 변수는 제외).드롭
출력 회로에는 변수가 정의되지 않습니다.
리턴
자아의 빈 사본.
리턴 유형
CircuitInstruction경우에 따라서는 전체 회로 컨텍스트와는 별도로 s의 목록을 생성한 다음, 이를 바탕으로 회로를 구성하는 것이 가장 편리할 수 있습니다. 생성자는 from_instructions() 명령문에 사용된 모든 Qubit 및 Clbit 인스턴스를 자동으로 캡처하고, 올바른 리소스와 모든 명령문을 포함하는 새로운 QuantumCircuit 객체를 생성합니다.
from_instructions
static from_instructions(instructions, *, qubits=(), clbits=(), name=None, global_phase=0, metadata=None)
CircuitInstructions의 반복 가능한 객체를 사용하여 회로를 구성합니다.
매개변수
- instructions (Iterable[CircuitInstruction |tuple[qiskit.circuit.Instruction] | tuple[qiskit.circuit.Instruction, Iterable[Qubit]] | tuple[qiskit.circuit.Instruction, Iterable[Qubit], Iterable[Clbit]]]) – 회로에 추가할 지침.
- qubits (Iterable[Qubit]) – 회로에 추가할 큐비트입니다. 예를 들어 이 인수는 특정 큐비트 순서를 강제하는 데 사용할 수 있습니다.
- clbits (Iterable[Clbit]) – 회로에 추가할 클래식 비트. 예를 들어 이 인수는 클래식 비트의 특정 순서를 강제하는 데 사용할 수 있습니다.
- name (str | None) – 회로의 이름.
- global_phase (ParameterValueType) – 회로의 글로벌 위상(라디안 단위)입니다.
- metadata (dict | None) – 회로에 연결할 임의의 키-값 메타데이터.
리턴
양자 회로.
리턴 유형
C 언어나 네이티브 코드와 상호 운용하는 경우,. 내부의 기본 데이터에 접근해야 할 수도 있습니다 QuantumCircuit._data. .을 사용하여 전체 회로를 재현할 수 있습니다 from_circuit_data().
from_circuit_data
static from_circuit_data(data, /, *, name=None, metadata=None)
불투명한 물체로 회로를 만들어 보세요 CircuitData.
일반적으로 이 함수는 C에서 전달된 객체를 완전한 Python QuantumCircuit 클래스로 감싸는 데 사용됩니다. 이 CircuitData 객체는 C-API 객체에 대응하는 Rust 네이티브 객체입니다 QkCircuit. 이 불투명한 객체에 대한 자세한 내용은 관련 문서를 참조하십시오.
이 함수의 역함수는 속성입니다 _data .
매개변수
- data (CircuitData) – 회로 IR을 포함하는 네이티브 객체.
- name (str | None) – 회로에 적용할 선택적 Python 전용 이름.
- metadata (dict | None) – 회로에 추가할 선택적이며 임의의, Python 전용 메타데이터.
리턴
전체 회로 객체.
리턴 유형
QuantumCircuit 에는 여전히 임포터를 둘러싼 레거시 래퍼인 두 개의 생성자 메서드가 있습니다 qiskit.qasm2. 레거시 호환성 설정을 자동으로 적용합니다 load() 및 loads().
from_qasm_file
static from_qasm_file(path)
파일에서 OpenQASM 2.0 프로그램을 읽고 QuantumCircuit.
매개변수
path (str |PathLike) – OpenQASM 2 프로그램 파일의 경로
리턴
OpenQASM 입력에 대한 QuantumCircuit 객체 2.
리턴 유형
qasm2.load()OpenQASM 2 임포터에 대한 전체 인터페이스입니다.
from_qasm_str
static from_qasm_str(qasm_str)
OpenQASM 2.0 프로그램이 포함된 문자열을 QuantumCircuit.
매개변수
qasm_str (str) – OpenQASM 2.0 프로그램이 포함된 문자열.
리턴
입력 OpenQASM 2에 대한 QuantumCircuit 객체
리턴 유형
qasm2.loads()OpenQASM 2 임포터에 대한 전체 인터페이스입니다.
회로상의 데이터 객체
데이터 객체 추가
방법 | 이런 종류의 데이터를 추가합니다 |
|---|---|
add_bits() | Qubit및 Clbits. |
add_register() | QuantumRegister 및 ClassicalRegister. |
add_var() | Var 노드에 로컬 범위와 초기화자를 추가합니다. |
add_stretch() | Stretch 노드를 로컬 범위로 설정합니다. |
add_input() | Var 노드를 회로 입력으로 취급합니다. |
add_capture() | Var 또는 Stretch 를 포함하는 범위에서 캡처한 노드입니다. |
add_uninitialized_var() | Var 로컬 범위와 정의되지 않은 상태를 가진 노드입니다. |
일반적으로 대부분의 데이터 객체(Qubit, Clbit, ClassicalRegister등)를 회로에 추가할 때 기본 생성자나 __init__() 기본 생성자, 또는 copy_empty_like(). 그러나 나중에 추가할 수도 있습니다. 독립형과 같은 유형화된 클래식 데이터 Var 노드( 실시간 고전적 계산 참조)는 별도의 방법으로 구성 및 추가될 수 있습니다.
새로운 레지스터리스 Qubit 및 Clbit 객체는 add_bits(). 이러한 객체는 회로에 이미 존재하지 않아야 합니다. 비트가 회로에 이미 존재하는지 확인하려면 find_bit().
add_bits
레지스터는 회로에 add_register(). 이 방법에서는 일부 비트가 회로에 이미 존재하더라도 오류가 아닙니다. 이 경우 레지스터는 비트에 대한 '별칭'이 됩니다. 이는 일반적으로 하드웨어 백엔드에서 잘 지원되지 않으므로 하드웨어 백엔드에 의존하지 않는 것이 가장 좋습니다. 주어진 비트가 들어있는 레지스터는 find_bit().
add_register
add_register(*regs)
레지스터를 추가합니다.
양자 회로에 기존 속성이 있는 경우 layout 속성이 있는 경우 QuantumRegister 를 추가하면 큐비트 수만 증가합니다. 레이아웃이 업데이트되지 않습니다.
매개변수
regs (Register |int |Sequence[Bit])
리턴 유형
없음
실시간, 입력된 클래식 데이터는 회로에서 다음과 같이 표현됩니다 Var 잘 정의된 Type. 이들을 별도로 회로에 인스턴스화할 수도 있지만( Var.new()참조), 유형과 표현식 초기화를 자동으로 관리해주는 회로 메서드를 사용하는 것이 더 편리한 경우가 많습니다. 가장 일반적인 두 가지 방법은 add_var() (로컬 범위 변수) 및 add_input() (회로에 대한 입력)입니다. 또한, 방법 add_stretch() 를 사용하여 회로에 스트레칭을 추가할 수 있습니다.
add_var
add_var(name_or_var, /, initial)
이 회로에 자동 저장 및 범위가 있는 클래식 변수를 추가합니다.
변수는 회로를 시작할 때 "선언"된 것으로 간주되지만, 이 메서드를 호출하는 회로 지점에서만 초기화되므로 그 전에 정의된 변수에 따라 달라질 수 있습니다.
매개변수
-
name_or_var (str |Var) – 변수 이름의 문자열이거나, 재사용할
Var기존 인스턴스 중 하나입니다. 변수는 회로 내에서 이미 사용 중인 이름을 가릴 수 없습니다. -
initial (Any) –
이 변수를 초기화할 값입니다. 첫 번째 인수가 문자열 이름으로 주어진 경우, 결과 변수의 유형은 초기 표현식에서 유추됩니다. 이를 보다 수동으로 제어하려면 다음을 사용하여
Var.new()를 사용하여 원하는 유형의 새 변수를 수동으로 생성하거나expr.cast()를 사용하여 이니셜라이저를 원하는 유형으로 캐스팅합니다.노드이거나
Expr노드이거나expr.lift를 사용하여 노드로 끌어올릴 수 있는 값이어야 합니다.
리턴
생성된 변수입니다. 인스턴스가 주어진 경우 Var 인스턴스가 주어지면 정확히 동일한 객체가 반환됩니다.
레이즈
CircuitError - 기존 식별자를 섀도잉하여 변수를 만들 수 없는 경우.
리턴 유형
예제
이름과 이니셜라이저 표현식만 주어진 새 변수를 정의합니다:
from qiskit.circuit import QuantumCircuit
qc = QuantumCircuit(2)
my_var = qc.add_var("my_var", False)관련 회로에서 가져왔거나 수동으로 구성했을 수 있는 변수를 재사용하고 좀 더 복잡한 표현식으로 초기화합니다:
from qiskit.circuit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.circuit.classical import expr, types
my_var = expr.Var.new("my_var", types.Uint(8))
cr1 = ClassicalRegister(8, "cr1")
cr2 = ClassicalRegister(8, "cr2")
qc = QuantumCircuit(QuantumRegister(8), cr1, cr2)
# Get some measurement results into each register.
qc.h(0)
for i in range(1, 8):
qc.cx(0, i)
qc.measure(range(8), cr1)
qc.reset(range(8))
qc.h(0)
for i in range(1, 8):
qc.cx(0, i)
qc.measure(range(8), cr2)
# Now when we add the variable, it is initialized using the real-time state of the
# two classical registers we measured into above.
qc.add_var(my_var, expr.bit_and(cr1, cr2))add_input
add_input(name_or_var: str, type_: Type, /) → Var
add_input(name_or_var: Var, type_: None = None, /) → Var
변수를 회로에 입력으로 등록합니다.
매개변수
- name_or_var (str |Var) – 문자열 이름 또는 입력 변수로 사용할 기존
Var노드 중 하나입니다. - 유형 - 이름이 문자열로 지정된 경우 변수에 사용할 값은
Type를 변수에 사용해야 합니다. 변수가 기존Var로 지정된 경우에는 변수를 지정해서는 안 되며 대신 객체 자체에서 읽어야 합니다. - type_ (Type | None)
리턴
생성된 변수 또는 전달된 변수와 동일한 변수를 반환합니다.
레이즈
CircuitError - 기존 변수를 섀도잉하여 변수를 만들 수 없는 경우.
리턴 유형
add_stretch
add_stretch(name_or_stretch)
이 회로로 범위가 지정된 새 스트레치를 선언합니다.
매개변수
name_or_stretch (str |Stretch) – 스트레치 이름의 문자열이거나, 재사용할 Stretch 기존 인스턴스 중 하나입니다. Stretches는 해당 서킷 내에서 이미 사용 중인 이름을 중복하여 사용할 수 없습니다.
리턴
생성된 스트레치입니다. 인스턴스가 주어진 경우 Stretch 인스턴스가 주어지면 정확히 동일한 객체가 반환됩니다.
레이즈
CircuitError - 기존 식별자를 섀도잉하여 스트레치를 만들 수 없는 경우.
리턴 유형
예제
이름만 주어진 새 스트레치를 정의하고 사용합니다:
from qiskit.circuit import QuantumCircuit, Duration
from qiskit.circuit.classical import expr
qc = QuantumCircuit(2)
my_stretch = qc.add_stretch("my_stretch")
qc.delay(expr.add(Duration.dt(200), my_stretch), 1)또한 프로그래밍 방식으로 회로를 생성하는 데 유용한 두 가지 하위 수준 메서드가 있습니다. 대화형으로 작업할 때는 이것들이 필요하지 않을 가능성이 높습니다. add_uninitialized_var() 의 일부입니다 copy_empty_like(), 그리고 대부분의 용도 add_capture() 제어 흐름 빌더 인터페이스를 사용하는 것이 더 좋습니다.
add_uninitialized_var
add_uninitialized_var(var, /)
이니셜라이저가 없는 변수를 추가합니다.
대부분의 경우 add_var() 를 사용하여 변수를 초기화해야 합니다. 이 함수를 사용하려면 이미 인스턴스를 보유하고 있어야 합니다 Var 인스턴스를 보유하고 있어야 합니다. 이 함수는 일반적으로 컨텍스트를 복사하는 경우에만 의미가 있기 때문입니다.
키스킷은 런타임에 초기화되지 않은 변수가 무엇으로 평가될지에 대한 어떠한 주장도 하지 않으며, 일부 하드웨어는 이를 오류로 거부할 수 있습니다.
이 함수는 주의해서 다루어야 하며, 두 개의 유사한 회로를 프로그래밍 방식으로 재구성하는 특수한 경우에만 유용한 저수준 프리미티브로 취급해야 합니다.
매개변수
var (Var) – 추가할 변수를 지정합니다.
add_capture
add_capture(var: Var)
add_capture(stretch: Stretch)
회로가 포함될 범위에서 캡처할 식별자를 회로에 추가합니다.
이 방법을 사용하려면 Var 또는 Stretch 노드를 사용하여 외부 회로에서 동일한 객체를 사용하여 동일한 식별자를 선언해야 하므로 식별자에 대한 핸들이 있음을 강제합니다.
이는 낮은 수준의 방법으로, 제어 흐름 작업을 수동으로 구성하는 경우에만 유용합니다. 일반적으로 제어 흐름 범위에 빌더 인터페이스를 사용한다고 가정하면 이 메서드를 호출할 필요가 없습니다(with 컨텍스트 관리자 문에 대한 if_test() 및 다른 범위 지정 구조체). 빌더 인터페이스는 내부 범위 내에서 사용되는 모든 식별자를 캡처하여 사용자를 대신하여 내부 범위를 자동으로 닫습니다.
매개변수
var (Union[expr.Var, expr.Stretch]) – 둘러싸는 범위에서 캡처할 변수 또는 스트레치를 지정합니다.
레이즈
CircuitError - 기존 식별자를 섀도잉하여 식별자를 만들 수 없는 경우.
비트 및 레지스터 작업
인스턴스 Bit 자체는 회로가 각자의 맥락에서 사용할 수 있는 고유한 식별자에 불과합니다. 인스턴스와 Bit 회로가 있다면, 를 사용하여 해당 비트가 존재하는 find_bit() 컨텍스트(예: 회로 내의 정수 인덱스나 해당 비트가 포함된 레지스터 등)를 확인할 수 있습니다.
find_bit
find_bit(bit)
회로에서 주어진 값을 참조하는 데 사용할 수 있는 위치를 찾습니다 Bit.
특히 이 함수는 트랜스파일드 회로의 하드웨어 인덱스에 해당하는 큐비트의 정수 인덱스를 찾을 수 있습니다.
의 회로 인덱스는 AncillaQubit 의 회로 인덱스는 qubits가 아니라 ancillas.
매개변수
bit (Bit) – 찾을 비트입니다.
리턴
2-튜플입니다. 첫 번째 요소(index)에는 Bit 을 찾을 수 있는 인덱스가 포함되어 있습니다( qubits, clbits또는 유형에 따라 다름). 두 번째 요소(registers)는 회로의 각 항목이 포함된 (register, index) 쌍의 목록입니다 Register 에 대한 항목이 포함된 Bit (그리고 인덱스가 있는 Register 를 포함하는 항목이 있습니다.)
리턴 유형
namedtuple( int, List[Tuple( Register, int )])
레이즈
- CircuitError - 제공된
Bit가 알 수 없는 유형인 경우. - CircuitError - 제공된
Bit을 회로에서 찾을 수 없는 경우.
예제
회로를 반복하여 각 연산에 대한 큐비트와 클럭비트 인덱스를 구합니다:
from qiskit.circuit import QuantumCircuit, Qubit
qc = QuantumCircuit(3, 3)
qc.h(0)
qc.cx(0, 1)
qc.cx(1, 2)
qc.measure([0, 1, 2], [0, 1, 2])
# The `.qubits` and `.clbits` fields are not integers.
assert isinstance(qc.data[0].qubits[0], Qubit)
# ... but we can use `find_bit` to retrieve them.
assert qc.find_bit(qc.data[0].qubits[0]).index == 0
simple = [
(
instruction.operation.name,
[qc.find_bit(bit).index for bit in instruction.qubits],
[qc.find_bit(bit).index for bit in instruction.clbits],
)
for instruction in qc.data
]마찬가지로 회로를 쿼리하여 레지스터가 이미 추가되었는지 확인할 수 있습니다 has_register().
has_register
has_register(register)
이 회로에 레지스터 R이 있는지 테스트합니다.
매개변수
register (Register) – 퀀텀 또는 클래식 레지스터.
리턴
레지스터가 이 회로에 포함되어 있으면 참입니다.
리턴 유형
컴파일 시점 매개변수 작업
컴파일 타임 매개변수화가 무엇인지, 그리고 이것이 키스킷의 데이터 모델에 어떻게 적용되는지에 대해 더 자세히 설명합니다.
비트, 레지스터, 실시간 타입의 기존 데이터와 달리 컴파일 타임 심볼릭 파라미터는 회로에 수동으로 추가되지 않습니다. 회로와 글로벌 단계에 추가된 연산에 포함됨으로써 그 존재를 유추할 수 있습니다. 현재 회로에 있는 모든 파라미터의 정렬된 목록은 QuantumCircuit.parameters.
인스턴스에 대해 Parameter 가장 흔히 수행되는 연산은, 기호 연산에서 해당 인스턴스를 어떤 수치 값이나 다른 기호 식으로 대체하는 것입니다. assign_parameters()이는.을 사용하여 수행됩니다.
assign_parameters
assign_parameters(parameters: Mapping[Parameter, ParameterExpression | float] | Iterable[ParameterExpression | float], inplace: Literal[False] = False, *, flat_input: bool = False, strict: bool = True) → QuantumCircuit
assign_parameters(parameters: Mapping[Parameter, ParameterExpression | float] | Iterable[ParameterExpression | float], inplace: Literal[True] = False, *, flat_input: bool = False, strict: bool = True) → None
새 매개변수 또는 값에 매개변수를 할당합니다.
가 사전(dictionary)으로 전달되는 경우 parameters , 키는 현재 회로 내의 인스턴스여야 Parameter 합니다. 사전의 값은 숫자 값이거나 새로운 매개변수 객체일 수 있습니다.
가 리스트나 배열로 전달되면 parameters , 그 요소들은 (의 ParameterVector 객체 내 순서를 유지하면서) 알파벳순으로 정렬된 순서대로 parameters 현재 매개변수에 할당됩니다.
값은 현재 회로 개체 또는 그 복사본에 할당할 수 있습니다.
get_parameter()가 매핑으로 주어졌을 때 parameters , 매개변수 이름들로 구성된 문자열을 키로 사용하는 것이 허용되며, 이러한 키는 를 사용하여 조회됩니다. 키가 인스턴스인 ParameterVector 경우도 있으며, 이 경우 사전의 값은 벡터와 동일한 길이의 값 시퀀스여야 합니다.
flat_input=False이 두 경우 중 하나를 사용하는 경우, 설정을 그대로 두어야 합니다. 이 설정을 로 True 변경하면 패스트 경로가 활성화되며, 이때 모든 키는 인스턴스여야 Parameter 합니다.
매개변수
- parameters (Mapping[Parameter, ParameterExpression |float] | Iterable[ParameterExpression |float]) – 새로운 매개변수 값을 지정하는 사전 또는 반복 가능한 객체.
- inplace (bool) – False인 경우, 바인딩된 매개변수가 포함된 회로의 복사본이 반환됩니다. True인 경우 회로 인스턴스 자체가 수정됩니다.
- flat_input (bool) – 만약 이고
True가parameters매핑 유형이라면, 이는 정확히 의 매핑으로 간주된다{parameter: value}. 기본적으로 (False), 매핑에는 해당 값 시퀀스를 가리키는ParameterVector키가 포함될 수도 있으며, 이러한 키는 매핑 과정에서 전개됩니다. 또한 문자열 키가 포함될 수도 있는데, 이 경우 를 사용하여Parameter인스턴스로 변환됩니다get_parameter(). - strict (bool) – 이 경우
False, 매핑에 지정된 매개변수 중 회로에서 사용되지 않는 것은 무시됩니다. (True기본값인) 경우, 논리 오류를 나타내는 오류가 발생합니다.
레이즈
- CircuitError - 매개변수가 딕셔너리이고 회로에 없는 매개변수를 포함하는 경우.
- ValueError –
parameters가 리스트/배열인데, 그 길이가 회로의 자유 매개변수 개수와 일치하지 않는 경우.
리턴
inplace 이 False이면 바인딩된 매개변수가 있는 회로의 사본, 그렇지 않으면 없음입니다.
리턴 유형
QuantumCircuit | 없음
예제
매개변수화된 회로를 생성하고 매개변수를 제자리에 할당합니다.
from qiskit.circuit import QuantumCircuit, Parameter
circuit = QuantumCircuit(2)
params = [Parameter('A'), Parameter('B'), Parameter('C')]
circuit.ry(params[0], 0)
circuit.crx(params[1], 0, 1)
circuit.draw('mpl')
circuit.assign_parameters({params[0]: params[2]}, inplace=True)
circuit.draw('mpl')

목록별로 값을 제자리에 바인딩하고 원본 회로의 복사본을 가져옵니다.
from qiskit.circuit import QuantumCircuit, ParameterVector
circuit = QuantumCircuit(2)
params = ParameterVector('P', 2)
circuit.ry(params[0], 0)
circuit.crx(params[1], 0, 1)
bound_circuit = circuit.assign_parameters([1, 2])
bound_circuit.draw('mpl')
circuit.draw('mpl')

이 회로는 인스턴스 자체를 통해 Parameter 매개변수를 추적하며, OpenQASM 또는 기타 외부 형식과 상호 운용 시 발생할 수 있는 문제를 방지하기 위해 동일한 이름의 매개변수가 여러 개 존재하는 것을 허용하지 않습니다. 와 get_parameter() 를 사용하여 has_parameter() 주어진 문자열 이름의 매개변수에 대해 회로에 쿼리를 보낼 수 있습니다.
has_parameter
has_parameter(name_or_param, /)
이 회로에 매개변수 객체가 있는지 확인합니다.
매개변수
name_or_param (str |Parameter) – 확인할 매개변수 또는 매개변수 이름. 이것이 Parameter 노드인 경우, 이 함수가 를 반환하려면 매개변수가 정확히 주어진 값과 일치해야 합니다 True.
리턴
이 회로에서 일치하는 파라미터를 할당할 수 있는지 여부입니다.
리턴 유형
QuantumCircuit.get_parameter()
이 회로에서 이름으로 인스턴스를 Parameter 검색합니다.
이와 유사한 방법이지만, 컴파일 시점 Parameter변수 대신 런타임 expr.Var 변수에 적용되는 방법입니다.
get_parameter
get_parameter(name: str, default: T) → Parameter | T
get_parameter(name: str, default: builtin_types.EllipsisType = Ellipsis) → Parameter
이 회로 범위에서 이름으로 액세스할 수 있는 컴파일 시간 매개변수를 검색합니다.
매개변수
- name (str) – 가져올 매개변수의 이름.
- default (Any) – : 이 값이 지정된 경우, 해당 매개변수가 없을 때 이 값이 반환됩니다. 지정되지 않은 경우, 대신 a가 발생합니다
KeyError.
리턴
해당 매개변수입니다.
레이즈
KeyError – 기본값이 지정되지 않았으나, 해당 매개변수가 회로에 존재하지 않는 경우.
리턴 유형
예제
회로에서 이름으로 매개변수를 검색합니다:
from qiskit.circuit import QuantumCircuit, Parameter
my_param = Parameter("my_param")
# Create a parametrized circuit.
qc = QuantumCircuit(1)
qc.rx(my_param, 0)
# We can use 'my_param' as a parameter, but let's say we've lost the Python object
# and need to retrieve it.
my_param_again = qc.get_parameter("my_param")
assert my_param == my_param_again회로에서 이름으로 변수를 가져오고, 없는 경우 기본값을 반환합니다:
assert qc.get_parameter("my_param", None) == my_param
assert qc.get_parameter("unknown_param", None) is None실시간으로 입력되는 고전적 데이터 작업
변수, 표현식 및 유형 시스템의 작동 방식, 이를 표현하는 데 사용되는 객체, 사용 가능한 클래식 연산에 대한 모듈 수준 문서입니다.
실시간 데이터가 전체 데이터 모델에 어떻게 적용되는지에 대한 논의 qiskit.circuit 데이터 모델 전체에 어떻게 적용되는지 논의합니다.
회로에 연결된 식별자를 검색할 수 있습니다(예 Var 또는 Stretch) 메서드를 사용하여 이름별로 get_var(), get_stretch()또는 get_identifier(). 를 사용하여 회로에 지정된 식별자가 포함되어 있는지 확인할 수도 있습니다 has_var(), has_stretch()또는 has_identifier().
get_var
get_var(name: str, default: T) → Var | T
get_var(name: str, default: builtin_types.EllipsisType = Ellipsis) → Var
이 회로 범위에서 이름별로 액세스할 수 있는 변수를 검색합니다.
매개변수
- name (str) – 가져올 변수의 이름.
- default (Any) – : 이 값이 지정된 경우, 해당 변수가 존재하지 않을 때 이 값이 반환됩니다. 지정되지 않은 경우, 대신 a가 발생합니다
KeyError.
리턴
해당 변수입니다.
레이즈
KeyError – 기본값이 지정되지 않았는데 변수가 존재하지 않는 경우.
예제
회로에서 이름으로 변수를 검색합니다:
from qiskit.circuit import QuantumCircuit
# Create a circuit and create a variable in it.
qc = QuantumCircuit()
my_var = qc.add_var("my_var", False)
# We can use 'my_var' as a variable, but let's say we've lost the Python object and
# need to retrieve it.
my_var_again = qc.get_var("my_var")
assert my_var == my_var_again회로에서 이름으로 변수를 가져오고, 없는 경우 기본값을 반환합니다:
assert qc.get_var("my_var", None) == my_var
assert qc.get_var("unknown_variable", None) is Noneget_stretch
get_stretch(name: str, default: T) → Stretch | T
get_stretch(name: str, default: builtin_types.EllipsisType = Ellipsis) → Stretch
이 회로 범위에서 액세스할 수 있는 스트레치를 이름으로 검색합니다.
매개변수
- name (str) – 가져올 구간 이름.
- default (Any) – : 이 값이 지정된 경우, 해당 변수가 존재하지 않을 때 이 값이 반환됩니다. 지정되지 않은 경우, 대신 a가 발생합니다
KeyError.
리턴
해당 스트레치.
레이즈
KeyError – 기본값이 지정되지 않았는데 변수가 존재하지 않는 경우.
예제
서킷에서 이름으로 스트레칭을 검색합니다:
from qiskit.circuit import QuantumCircuit
# Create a circuit and create a variable in it.
qc = QuantumCircuit()
my_stretch = qc.add_stretch("my_stretch")
# We can use 'my_stretch' as a variable, but let's say we've lost the Python object and
# need to retrieve it.
my_stretch_again = qc.get_stretch("my_stretch")
assert my_stretch == my_stretch_again회로에서 이름으로 변수를 가져오고, 없는 경우 기본값을 반환합니다:
assert qc.get_stretch("my_stretch", None) == my_stretch
assert qc.get_stretch("unknown_stretch", None) is Noneget_identifier
get_identifier(name: str, default: T) → Var | Stretch | T
get_identifier(name: str, default: builtin_types.EllipsisType = Ellipsis) → Var | Stretch
이 회로 범위에서 이름으로 액세스할 수 있는 식별자를 검색합니다.
여기에는 현재 실시간 클래식 변수와 스트레치가 모두 포함됩니다.
매개변수
- name (str) – 검색할 식별자의 이름.
- default (Any) – : 이 값이 지정된 경우, 해당 변수가 존재하지 않을 때 이 값이 반환됩니다. 지정되지 않은 경우, 대신 a가 발생합니다
KeyError.
리턴
해당 변수입니다.
레이즈
KeyError – 기본값이 지정되지 않았으나 식별자가 존재하지 않는 경우.
인스턴스로 알려진 식별자를 가져옵니다 expr.Var 인스턴스로 알려진 식별자를 가져옵니다.
인스턴스로 알려진 식별자를 가져옵니다 expr.Stretch 인스턴스로 알려진 식별자를 가져옵니다.
비슷한 방법이지만, 런타임 변수 대신 expr.Var 컴파일 타임 매개변수를 대상으로 Parameter 합니다.
has_var
has_var(name_or_var, /)
이 범위에서 변수에 액세스할 수 있는지 확인합니다.
매개변수
name_or_var (str |Var) – 확인할 변수 또는 변수 이름. 이것이 expr.Var 노드인 경우, 이 함수가 를 반환하려면 변수의 값이 주어진 값과 정확히 일치해야 합니다 True.
리턴
일치하는 변수에 액세스할 수 있는지 여부를 확인합니다.
리턴 유형
이 회로에서 이름으로 expr.Var 인스턴스를 이름으로 검색합니다.
QuantumCircuit.has_parameter()
이와 유사한 방법이지만, 런타임 expr.Var 변수가 아닌 컴파일 타임 Parameter변수를 대상으로 하는 방법입니다.
has_stretch
has_stretch(name_or_stretch, /)
이 범위에서 스트레치에 액세스할 수 있는지 확인합니다.
매개변수
name_or_stretch (str |Stretch) – 확인하려는 구간 또는 구간의 이름. 이것이 expr.Stretch 노드인 경우, 이 함수가 0을 반환하려면 스트레치가 주어진 값과 정확히 일치해야 합니다 True.
리턴
일치하는 스트레치에 액세스할 수 있는지 여부를 확인합니다.
리턴 유형
이 회로에서 이름으로 expr.Stretch 인스턴스를 이름으로 검색합니다.
has_identifier
has_identifier(name_or_ident, /)
이 범위에서 식별자에 액세스할 수 있는지 확인합니다.
매개변수
name_or_ident (str |Var |Stretch) – 확인할 인스턴스 또는 식별자의 이름. 이 expr.Stretch 노드가 expr.Var 또는 노드인 경우, 이 함수가 를 반환하려면 일치하는 인스턴스가 정확히 주어진 인스턴스와 동일해야 합니다 True.
리턴
일치하는 식별자에 액세스할 수 있는지 여부를 확인합니다.
리턴 유형
QuantumCircuit.get_identifier()
검색 expr.Var 또는 expr.Stretch 인스턴스를 이름으로 검색합니다.
이 방법과 동일하지만 런타임 expr.Var 변수가 아닌 것은 무시합니다.
이 방법과 동일하지만 런타임 expr.Stretch 변수가 아닌 것은 무시합니다.
QuantumCircuit.has_parameter()
이와 유사한 방법이지만, 런타임 expr.Var 변수가 아닌 컴파일 타임 Parameter변수를 대상으로 하는 방법입니다.
회로에서 추적하는 전체 식별자 집합을 가져오는 데 사용할 수 있는 몇 가지 반복자 메서드도 있습니다. 다음 중 하나 이상 iter_input_vars() 과 iter_captured_vars() 는 입력과 캡처가 상호 배타적이므로 비어 있습니다. 모든 이터레이터는 길이를 포함하는 동적 프로퍼티에 해당하는 QuantumCircuit 에 해당 동적 프로퍼티가 있습니다: num_vars, num_stretches, num_input_vars, num_captured_vars, num_captured_stretches, num_declared_vars또는 num_declared_stretches.
iter_vars
iter_vars()
이 회로 내 범위의 모든 실시간 클래식 변수에 대한 이터러블을 가져옵니다.
이 메서드는 범위의 모든 변수에 대해 반복합니다. 보다 세분화된 반복기를 보려면 iter_declared_vars(), iter_input_vars() 와 iter_captured_vars().
리턴 유형
iter_stretches
iter_stretches()
이 회로 내 범위의 모든 스트레치에 대한 이터러블을 가져옵니다.
이 메서드는 범위의 모든 스트레치에 대해 반복합니다. 보다 세분화된 반복기를 보려면 iter_declared_stretches() 와 iter_captured_stretches().
리턴 유형
iter_input_vars
iter_input_vars()
이 회로 범위에 입력으로 선언된 모든 실시간 클래식 변수에 대한 이터러블을 가져옵니다. 여기에는 로컬로 선언된 변수( iter_declared_vars()) 및 캡처된 변수( iter_captured_vars()).
리턴 유형
iter_captured_vars
iter_captured_vars()
포함 범위에서 이 회로 범위가 캡처하는 모든 실시간 클래식 변수에 대한 이터러블을 가져옵니다. 여기에는 입력 변수( iter_input_vars()) 및 로컬로 선언된 변수( iter_declared_vars()).
리턴 유형
iter_captured_stretches
iter_captured_stretches()
이 회로 스코프가 캡처한 스트레치에 대한 이터러블을 포함하는 스코프에서 가져옵니다. 여기에는 로컬로 선언된 스트레치는 제외됩니다( iter_declared_stretches()).
리턴 유형
iter_declared_vars
iter_declared_vars()
이 범위에서 자동 저장 기간으로 선언된 모든 실시간 클래식 변수에 대한 이터러블을 가져옵니다. 여기에는 입력 변수( iter_input_vars()) 및 캡처된 변수( iter_captured_vars()).
리턴 유형
iter_declared_stretches
iter_declared_stretches()
이 범위에서 선언된 모든 스트레치에 대한 이터러블을 가져옵니다. 여기에는 캡처된 스트레치는 제외됩니다( iter_captured_stretches()).
리턴 유형
회로에 연산 추가하기
인터페이스를 Operation 구현하는 모든 객체를 단일 명령어로 회로에 추가할 수 있지만, 실제로 추가하고 싶은 대부분의 객체는 또는 Gate 인스턴스일 Instruction 것입니다.
키스킷이 사용하는 다양한 인터페이스에 대한 qiskit.circuit-레벨 문서는 키스킷이 회로 수준 명령어를 정의하는 데 사용하는 다양한 인터페이스에 대한 설명입니다.
일반 연산을 추가하는 방법
사용자 정의 객체를 포함한 모든 객체를 회로에 추가하는 기본 메서드입니다.
방법 | 용도 |
|---|---|
append() | 명령어를 회로에 단일 객체로 추가합니다. |
_append() | 와 동일하지만 append()와 동일하지만 거의 모든 오류 검사를 생략하는 낮은 수준의 인터페이스입니다. |
compose() | 한 회로의 지침을 다른 회로에 인라인으로 연결합니다. |
tensor() | 처럼 compose()와 비슷하지만, 분리된 큐비트에 작용하는 회로를 결합하는 경우에만 해당합니다. |
QuantumCircuit 에는 회로에 더 많은 연산을 추가하는 두 가지 주요 방법이 있습니다. 어떤 것을 사용할지는 객체를 하나의 "인스트럭션"으로 추가할지(append()) 또는 두 회로의 명령어를 함께 결합할지(compose()).
draw()단일 명령어나 연산은 회로도에서 data 하나의 항목으로 표시되며, 회로도 시각화 도구에서 그릴 때는 하나의 상자로 나타납니다(참조). Target단일 명령어는 하드웨어 백엔드를 정의하는 데 사용될 수 있는 “단위”입니다(참조). qiskit.transpilerdefinitionAn에는 Instruction 가 포함될 수 있으며, 이는 트랜스파일러(참조)가 필요할 경우 하드웨어용으로 이를 분해할 때 활용할 수 있는 규칙 중 하나입니다. qiskit.transpiler.passes.synthesis.plugin~ Operation 가 아닌 ~는 Instruction , 해당 ~에 대해 등록된 관련 고수준 합성 방법이 있는 경우에만 분해될 수 있습니다(참조).
InstructionA QuantumCircuit 자체만으로는 단순한 ‘개체’가 아닙니다. 오히려 더 복잡한 개념인데, 일반적으로 유형이 지정된 고전적 메모리 입출력과 제어 흐름을 갖춘 완전한 프로그램을 나타낼 수 있기 때문입니다. Qiskit(및 대부분의 하드웨어)의 데이터 모델에는 아직 가상 양자 연산자를 사용하는 재사용 가능한 호출 가능 서브루틴이라는 개념이 포함되어 있지 않습니다. to_instruction()to_gate()단일 연산으로 큐비트에만 작용하는 간단한 회로는 를 Gate 사용하여 로 변환할 수 있으며, 큐비트와 클비트에만 작용하는 간단한 회로는 를 Instruction 사용하여 로 변환할 수 있습니다.
append()GateOperation, Instruction, 또는 가 있을 경우, 이를 회로에 추가하고, qubit 및 clbit 인수를 로 지정하십시오.
append
append(instruction, qargs=None, cargs=None, *, copy=True)
회로 끝에 하나 이상의 지침을 추가하여 회로를 제자리에서 수정합니다.
Instruction와 cargs``qargs 는 주어진 의 규칙에 따라 확장 및 전파되며, 비-지정자Bit (정수 인덱스 등)는 관련 인스턴스로 해석됩니다.
a가 CircuitInstruction 주어지면, a는 언랩 처리되고 이 회로의 컨텍스트에서 검증된 후, 새로운 객체가 회로에 추가됩니다. 이 경우, 또는 을 cargs 따로 통과할 qargs 수 없습니다.
매개변수
CircuitInstructioninstruction (Operation |CircuitInstruction) –Instruction추가할 인스턴스, 또는 전체 컨텍스트를 포함하는. 를 구현하는to_instruction객체도 지원되지만, 반복적인 변환 비용을 피할 수 있으므로 일반적으로 를Instruction직접 전달하는 것이 권장됩니다.- 명령을 연결할 대상인
Qubits의 qargs (Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]] | None) – 지정자. - 명령을 연결할 대상인
Clbits의 cargs (Sequence[Clbit |ClassicalRegister |int |slice |Sequence[Clbit |int]] | None) – 지정자. - copy (bool) – if (
True기본값)인 경우, 입력값에 기호 매개변수가 포함되어 있으면 회로에 추가하기 전에 해당 입력값을instruction복사하므로, 동일한 명령어가 포함된 다른 회로에 영향을 주지 않고 안전하게 변경할 수 있습니다. 이 명령어가 다른 회로에서는 사용되지 않을 것이라고 확신한다면, 이를 설정하여 처리 속도를 약간False높일 수 있습니다.
리턴
CircuitInstruction회로에 실제로 추가된 s에 대한 참조.
리턴 유형
레이즈
InstructionCircuitError – 전달된 연산이 의 인스턴스가 아니거나, 에 대한 호출을 to_instruction 통해 의 인스턴스로 변환될 수 없는 경우.
append() 의 데이터 모델을 실수로 깨뜨리지 않도록 꽤 많은 오류 검사를 수행합니다 QuantumCircuit. 알려진 정상 데이터에서 프로그래밍 방식으로 회로를 생성하는 경우 빠른 경로 추가 기능( _append()를 사용하면 이러한 오류 검사를 생략할 수 있지만, 호출자가 유효한 데이터만 전달하는지 확인할 책임이 있습니다.
_append
_append(instruction: CircuitInstruction, *, _standard_gate: bool) → CircuitInstruction
_append(instruction: Operation, qargs: Sequence[Qubit], cargs: Sequence[Clbit]) → Operation
회로의 끝에 명령어를 추가하여 회로를 제자리에서 수정합니다.
이 함수는 내부 빠른 경로 함수이며 모든 인수가 유효한지 확인하는 것은 호출자의 책임이며, 여기에서는 오류를 검사하지 않습니다. 즉
- 모든 큐비트와 클릿은 회로에 이미 존재해야 하며 목록에 중복이 있어서는 안 됩니다.
- 모든 제어 흐름 연산 명령은 회로에 존재하는 변수에 대해서만 작동해야 합니다.
- 회로가 제어 흐름 빌더 컨텍스트 내에 있지 않아야 합니다.
이 함수는 다음과 같은 경우 외에는 호출자가 사용할 수 없습니다 QuantumCircuit 호출자가 모든 오류 검사, 브로드캐스팅 및 스코핑이 이미 수행되었고 명령어가 추가되는 회로에 대한 유일한 참조가 동일한 함수 내에 있다고 확신하는 경우에만 사용할 수 있습니다. 특히 함수 인자로 수신된 회로를 호출하는 것은 안전하지 않습니다 QuantumCircuit._append() 를 함수 인자로 받는 회로에서 호출하는 것은 안전하지 않습니다. 그 이유는 QuantumCircuit._append() 는 제어 흐름 빌더 인터페이스의 범위 지정 구성을 인식하지 못하기 때문입니다.
매개변수
-
지침 -
추가할 연산 및 해당 컨텍스트에 대한 완전하고 올바른
CircuitInstruction형식의 정의.Operation이전 버전과의 호환성 모드에서는 이것이 단순한 일 수 있으며, 이 경우qargs와cargs를 명시적으로 지정해야 합니다. -
qargs – 베어(bare
Operation)를 연결할 큐비트에 대한 레거시 인자. 첫 번째 인수가 우선순위CircuitInstruction형식인 경우 무시됩니다. -
cargs – clbits가 베어
Operation(bare)를 연결할 대상에 대한 레거시 인자. 첫 번째 인수가 우선순위CircuitInstruction형식인 경우 무시됩니다. -
_standard_gate (bool)
리턴
방금 추가한 인스트럭션에 대한 핸들입니다.
리턴 유형
다른 경우에는 두 회로를 함께 결합하여 한 회로의 명령을 다른 회로의 지정된 큐비트와 클릿에 적용하는 경우도 있습니다. 이 "인라이닝" 작업을 키스킷에서는 compose() 이라고 합니다. compose() 는 일반적으로 to_instruction()-plus-append() 조합보다 더 강력한데, 입력된 클래식 데이터를 서로 연결할 수 있고 회로 제어 흐름 연산을 다른 회로에 결합할 수 있기 때문입니다.
의 단점은 compose() 의 단점은 피연산자를 더 많이 다시 작성해야 하는 더 복잡한 연산이며, 반드시 한 회로 객체에서 다른 회로 객체로 데이터를 이동해야 한다는 점입니다. 직접 회로를 구축하고 원시 성능이 핵심 목표인 경우 임시 레이어 회로를 구축하는 대신 기본 회로를 전달하고 알고리즘의 다른 부분을 기본 회로에 직접 작성하는 것을 고려하세요.
compose
compose(other: QuantumCircuit | Instruction, qubits: Qubit | QuantumRegister | int | slice | Sequence[Qubit | int] | Sequence[Qubit | QuantumRegister | int | slice | Sequence[Qubit | int]] | None = None, clbits: Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int] | Sequence[Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int]] | None = None, front: bool = False, inplace: Literal[True] = True, wrap: bool = False, *, copy: bool = True, var_remap: Mapping[str | Var | Stretch, str | Var | Stretch] | None = None, inline_captures: bool = False) → None
compose(other: QuantumCircuit | Instruction, qubits: Qubit | QuantumRegister | int | slice | Sequence[Qubit | int] | Sequence[Qubit | QuantumRegister | int | slice | Sequence[Qubit | int]] | None = None, clbits: Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int] | Sequence[Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int]] | None = None, front: bool = False, inplace: Literal[False] = False, wrap: bool = False, *, copy: bool = True, var_remap: Mapping[str | Var | Stretch, str | Var | Stretch] | None = None, inline_captures: bool = False) → QuantumCircuit
한 회로의 명령어를 다른 회로의 지정된 큐비트 및/또는 클릿에 적용합니다.
기본적으로 이렇게 하면 새 회로 개체가 생성되며 self 은 그대로 유지됩니다. 이 기능을 사용하는 대부분의 경우 inplace=True 을 설정하고 기본 회로를 제자리에서 수정하는 것이 훨씬 더 효율적입니다.
실시간 변수를 다룰 때(expr.Var 및 expr.Stretch 인스턴스)를 다룰 때, 두 가지 주요 전략이 있습니다 compose():
other회로는 변수를 포함하여 완전히 덧셈으로 처리됩니다.other의 변수는self의 변수와 완전히 구별되어야 하며(var_remap을 사용하면 도움이 됩니다),other의 모든 변수는other에 있는 것과 일치하는 입력/캡쳐/로컬 스코핑을 사용하여 출력에서 새로 선언됩니다. 일반적으로 서로 관련이 없는 두 개의 회로를 연결할 때 이 방법을 사용합니다.other회로는self의 정확한 확장으로 만들어져self의 끝에 있는 상태의 기존 변수에 작용하는 것을 포함하여 그 위에 인라인으로 만들어졌습니다. 이 경우 인라인으로 선언할 변수를 모두 "캡처"로 지정하여other을 생성한 다음inline_captures=True을 사용하여 연결할 수 있습니다. 즉석에서 레이어를 정의하여 회로를 구축하거나 자체에서 가져온 레이어를 사용하여 회로를 재구축하는 경우 일반적으로 원하는 방식입니다. 이 경우vars_mode="captures"인수를copy_empty_like()인수를 사용하면 각 레이어의 베이스를 만드는 데 유용할 수 있습니다.
매개변수
-
other (qiskit.circuit.Instruction orQuantumCircuit) – (하위)회로 또는 자체에 합성하기 위한 명령어.
QuantumCircuit가 아니라면, 이는 가 받아들일 수 있는append어떤 것이든 될 수 있습니다. -
front (bool) – 인 경우
True, 전방 합성이 수행됩니다. 제어 흐름 빌더 컨텍스트 관리자 내에서는 이 작업을 수행할 수 없습니다. -
inplace (bool) – 인 경우
True, 객체를 수정합니다. 그렇지 않으면, 조합된 회로를 반환합니다. -
copy (bool) – 만약 (
True기본값)이라면, 입력은 공유된 것으로 간주되며, 향후 변경될 가능성이 있는 경우 포함된 모든 명령어가 복사됩니다. 불필요한 복사를 방지하기 위해 입력을 기본 회로의 소유로 간주해야 하는 경우False이 옵션을 설정할 수 있습니다. 이 경우, 이후에other를 사용하는 것은 유효하지 않으며, 일부 명령어가 제자리에서 변경되었을 수 있습니다. -
var_remap (Mapping) –
매핑을 다시 작성하는 데 사용할
expr.Var및expr.Stretchother의 노드를self로 인라인 처리합니다. 이는 이름 충돌을 피하는 데 사용할 수 있습니다.키와 값은 모두 문자열 또는 직접 식별자 인스턴스로 지정할 수 있습니다. 키가 문자열인 경우, 모든
Var또는Stretch와 일치합니다. 값이 문자열인 경우, 새 키가 일치할 때마다 새Var또는Stretch가 올바른 유형으로 생성됩니다. 값이 a인 경우Var인 경우type는 대체하는 변수의 값과 정확히 일치해야 합니다. -
inline_captures (bool) –
True인 경우other의 모든 "캡처된" 식별자 노드는QuantumCircuit의 모든 "캡처된" 식별자 노드는self에 이미 선언된 식별자(입력/캡쳐/로컬 유형)를 참조하는 것으로 간주되며other의 사용법은 기존 식별자에 적용됩니다. 와 함께 사용할 기존 회로에 대한 레이어를 구축하려면compose()와 함께 사용할 레이어를 만들려면vars_mode="captures"인수를copy_empty_like()유용합니다.vars_remap의 모든 리매핑은 이 변수 인라이닝을 평가하기 전에 발생합니다.False(기본값)인 경우other의 모든 식별자는self의 식별자와 구별되어야 하며, 이에 대한 새로운 선언이 이루어집니다. -
wrap (bool) – True인 경우, 다른 회로를 게이트(또는 해당 회로에 유니터리 명령어만 포함되어 있는지에 따라 명령어)로 감싼 다음, 이를 self에 합성합니다. 이 옵션을 사용하는 것보다, 또는
to_instruction()to_gate()을 사용하여 직접 수동으로 제어한 다음 를 호출하는 편이 거의 항상 더 좋습니다append().
리턴
구성 회로를 반환합니다(inplace==True인 경우 None을 반환합니다).
리턴 유형
레이즈
- CircuitError -
other이self보다 넓은 경우와 같이 두 회로 간에 올바른 와이어 매핑을 수행할 수 없는 경우. - CircuitError
self- 의 컨텍스트 관리자 형태와 같이 부분적으로 빌드된 제어 흐름 컨텍스트가 활성화된 상태에서 새 회로를 방출하려고 하는 경우if_test(),for_loop()와while_loop(). - CircuitError - 제어 흐름 빌더 블록이 활성화되어 있을 때 회로의 앞쪽에 컴포지션을 시도하는 경우 이 동작에 대한 명확한 의미가 없습니다.
예제
>>> lhs.compose(rhs, qubits=[3, 2], inplace=True) ┌───┐ ┌─────┐ ┌───┐
lqr_1_0: ───┤ H ├─── rqr_0: ──■──┤ Tdg ├ lqr_1_0: ───┤ H ├───────────────
├───┤ ┌─┴─┐└─────┘ ├───┤
lqr_1_1: ───┤ X ├─── rqr_1: ┤ X ├─────── lqr_1_1: ───┤ X ├───────────────
┌──┴───┴──┐ └───┘ ┌──┴───┴──┐┌───┐
lqr_1_2: ┤ U1(0.1) ├ + = lqr_1_2: ┤ U1(0.1) ├┤ X ├───────
└─────────┘ └─────────┘└─┬─┘┌─────┐
lqr_2_0: ─────■───── lqr_2_0: ─────■───────■──┤ Tdg ├
┌─┴─┐ ┌─┴─┐ └─────┘
lqr_2_1: ───┤ X ├─── lqr_2_1: ───┤ X ├───────────────
└───┘ └───┘
lcr_0: 0 ═══════════ lcr_0: 0 ═══════════════════════
lcr_1: 0 ═══════════ lcr_1: 0 ═══════════════════════완전히 분리된 큐비트와 클릿에 적용될 두 회로를 연결하려는 경우, tensor() 는 비트 객체를 수동으로 추가하고 compose().
tensor
tensor(other, inplace=False)
텐서 self 와 other.
리틀 엔디안 규칙에서는 가장 왼쪽 연산이 회로의 맨 아래에 있다는 것을 기억하세요. 자세한 내용은 문서를 참조하세요.
┌────────┐ ┌─────┐ ┌─────┐
q_0: ┤ bottom ├ ⊗ q_0: ┤ top ├ = q_0: ─┤ top ├──
└────────┘ └─────┘ ┌┴─────┴─┐
q_1: ┤ bottom ├
└────────┘매개변수
- other (QuantumCircuit) – 이 회로를 텐서링할 다른 회로입니다.
- inplace (bool) – 인 경우
True, 객체를 수정합니다. 그렇지 않으면 조합된 회로를 반환합니다.
리턴 유형
QuantumCircuit | 없음
예제
from qiskit import QuantumCircuit
top = QuantumCircuit(1)
top.x(0);
bottom = QuantumCircuit(2)
bottom.cry(0.2, 0, 1);
tensored = bottom.tensor(top)
tensored.draw('mpl')
리턴
텐서드 회로( inplace=True)의 경우 None 를 반환합니다.
리턴 유형
매개변수
- other (QuantumCircuit)
- inplace (bool)
몇 가지 경험 법칙을 소개합니다:
_append()Operation,Instruction또는Gate중 하나가 있다면, 반드시 또는 를append()사용해야 합니다.- 더 큰 회로에 대한 단일 원자 명령을 나타내는
QuantumCircuit를 재사용하려는 더 큰 회로에 대한 단일 원자 명령어를 나타내는to_instruction()또는to_gate()를 호출한 다음 그 결과를append(). - 다른 회로의 더 큰 "레이어"를 나타내거나
QuantumCircuit가 다른 회로의 더 큰 "레이어"를 나타내거나 입력된 클래식 변수 또는 제어 흐름을 포함하는 경우에는compose()를 사용하여 다른 회로에 병합해야 합니다. tensor()보다 훨씬 더 드물게append()또는compose(). 내부적으로는 주로add_bits()와compose().
주의해야 할 몇 가지 잠재적 함정이 있습니다:
- 회로 구성 과정에서 사용자 정의
Instruction함수를 재사용하더라도, 트랜스파일러는 일반적으로 해당 함수의 각 호출을 내부 분해 단계로 “펼쳐” 놓은 다음, 비로소 처리를 시작해야 합니다.to_instruction()이 때문에 -plus-append()패턴을 사용하는 것을 주저할 필요는 없습니다. 트랜스파일러가 시간이 지남에 따라 이 부분에서 개선될 것이기 때문입니다. compose()는 기본적으로 이전 버전과의 호환성을 위해 새로운 회로를 생성합니다. 이것은 더 비싸고 일반적으로 원하는 것이 아니므로inplace=True로 설정해야 합니다.True_append()와compose()(단, 는 제외) 모두append()기본값이 인 키워드 인수를copy가지고 있습니다. 이러한 경우, Qiskit이 객체에 가변성(예: 게이트 매개변수 설정 등)이 있다고 감지하면, 입력Operation인스턴스가 복사됩니다. 해당 객체를 다른 곳에서 다시 사용하지 않을 것이 확실하다면, 이러한 복사를 방지하도록 설정해야copy=False합니다. 이렇게 하면 큰 객체의 경우 처리 속도가 상당히 빨라질 수 있습니다.
표준 지침 추가 방법
이 QuantumCircuit 클래스에는 Qiskit 표준 라이브러리의 다양한 명령어와 게이트를 회로에 추가하는 헬퍼 메서드들이 포함되어 있습니다. 이는 일반적으로 관련 qiskit.circuit.library 객체의 인스턴스를 수동으로 생성한 다음, 나머지 인수를 적절한 위치에 qargs append() 및 cargs 필드에 배치하여 이를 에 전달하는 것과 동일합니다.
다음 메서드들은 회로에 특수한 비단위 Instruction 연산을 적용합니다:
QuantumCircuit 메서드 | |
|---|---|
barrier() | Barrier |
delay() | Delay |
initialize() | Initialize |
measure() | Measure |
reset() | Reset |
store() | Store |
다음 방법들은 제어되지 않은 유니터리 Gate 인스턴스를 회로에 적용합니다:
ControlledGate다음 메서드들은 제어 게이트이기도 한 인스턴스에 적용되며 Gate , 따라서 의 직접적인 하위 클래스입니다:
QuantumCircuit 메서드 | |
|---|---|
ccx() | CCXGate |
ccz() | CCZGate |
ch() | CHGate |
cp() | CPhaseGate |
crx() | CRXGate |
cry() | CRYGate |
crz() | CRZGate |
cs() | CSGate |
csdg() | CSdgGate |
cswap() | CSwapGate |
csx() | CSXGate |
cu() | CUGate |
cx() | CXGate |
cy() | CYGate |
cz() | CZGate |
마지막으로, 이러한 방법은 특정 일반화된 곱셈 제어 게이트를 회로에 적용하며, 종종 열성적인 합성을 사용합니다. 정확한 출력은 종종 게이트의 합성 버전이기 때문에 제어하는 기본 게이트의 관점에서 나열됩니다.
이 섹션의 나머지 부분은 모든 개별 메소드의 API 목록이며, 위의 표는 링크를 통해 올바른 위치로 이동할 수 있는 요약본입니다.
barrier
barrier(*qargs, label=None)
신청 Barrier. qargs 이 비어 있으면 회로의 모든 큐비트에 적용됩니다.
매개변수
- qargs (QubitSpecifier) – 하나 이상의 큐비트 인자에 대한 사양입니다.
- label (str) – 배리어의 문자열 레이블.
리턴
핸들을 추가 지침에 추가합니다.
리턴 유형
ccx
ccx(control_qubit1, control_qubit2, target_qubit, ctrl_state=None, label=None)
CCXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 첫 번째 제어 신호로 사용되는 큐비트.
- control_qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 두 번째 제어 신호로 사용되는 큐비트(들).
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
ccz
ccz(control_qubit1, control_qubit2, target_qubit, label=None, ctrl_state=None)
CCZGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 첫 번째 제어 신호로 사용되는 큐비트.
- control_qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 두 번째 제어 신호로 사용되는 큐비트(들).
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘10’)로 표시합니다. 기본적으로 ‘11’ 상태에서 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
ch
ch(control_qubit, target_qubit, label=None, ctrl_state=None)
CHGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cp
cp(theta, control_qubit, target_qubit, label=None, ctrl_state=None)
CPhaseGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
crx
crx(theta, control_qubit, target_qubit, label=None, ctrl_state=None)
CRXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cry
cry(theta, control_qubit, target_qubit, label=None, ctrl_state=None)
CRYGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
crz
crz(theta, control_qubit, target_qubit, label=None, ctrl_state=None)
CRZGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cs
cs(control_qubit, target_qubit, label=None, ctrl_state=None)
CSGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
csdg
csdg(control_qubit, target_qubit, label=None, ctrl_state=None)
CSdgGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cswap
cswap(control_qubit, target_qubit1, target_qubit2, label=None, ctrl_state=None)
CSwapGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- target_qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수 또는 비트열(예:
'1')로 표시합니다. 기본적으로'1'상태를 기준으로 제어합니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
csx
csx(control_qubit, target_qubit, label=None, ctrl_state=None)
CSXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cu
cu(theta, phi, lam, gamma, control_qubit, target_qubit, label=None, ctrl_state=None)
CUGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 게이트의 회전 각도.
- phi (ParameterExpression |float) – 게이트의 회전 각도.
- lam (ParameterExpression |float) – 게이트의 회전 각도.
- gamma (ParameterExpression |float) – U 게이트에 적용된 전역 위상(적용된 경우).
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cx
cx(control_qubit, target_qubit, label=None, ctrl_state=None)
CXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cy
cy(control_qubit, target_qubit, label=None, ctrl_state=None)
CYGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
cz
cz(control_qubit, target_qubit, label=None, ctrl_state=None)
CZGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 제어용으로 사용되는 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
dcx
dcx(qubit1, qubit2, label=None)
DCXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
delay
delay(duration, qarg=None, unit=None)
신청 Delay. Qarg가 None 인 경우 모든 쿼비트에 적용됩니다. 여러 큐비트에 적용할 경우 동일한 기간의 지연이 생성됩니다.
매개변수
- duration (Object) – 지연 기간입니다. 인 경우
Expr타입의 상수 표현식이어야 합니다Duration. - qarg (Object) – 쿼비트 인수를 사용하여 이 지연을 적용합니다.
- unit (str | None) – 지속 시간의 단위. 단, 인
duration경우에는Expr이를 명시해서는 안 된다. 지원되는 단위:'s','ms','us','ns','ps', 및'dt'. 기본값은 이며'dt', 이는 대상 백엔드에 따라 정수형 시간 단위를 의미합니다.
리턴
핸들을 추가 지침에 추가합니다.
리턴 유형
레이즈
CircuitError - 인수의 형식이 잘못된 경우.
ecr
ecr(qubit1, qubit2, label=None)
ECRGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 첫 번째 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 두 번째 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
h
h(qubit, label=None)
HGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
id
id(qubit, label=None)
IGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
initialize
initialize(params, qubits=None, normalize=False)
특정 상태의 큐비트를 초기화합니다.
큐비트 초기화는 먼저 큐비트를 로 재설정한 다음, 클래스를 호출하여 StatePreparation 큐비트를 지정된 상태로 준비하는 방식으로 수행됩니다. 이 두 단계는 모두 설명서에 Initialize 포함되어 있습니다.
매개변수
-
params (Statevector | Sequence[complex] | str |int) –
초기화할 상태는 다음 중 하나가 될 수 있습니다.
- 초기화할 상태 벡터 또는 복소 진폭의 벡터입니다.
- 파울리 고유상태 Z, X, Y의 기저 상태 라벨.
Statevector.from_label()의 내용을 참조하십시오. 적용 대상 큐비트 인덱스에 비해 레이블의 순서가 반대로 되어 있다는 점에 유의하십시오. 예제 레이블은'01'0 큐비트를 로, 1 큐비트를 로 초기화합니다. - 에 초기화할 큐비트를 나타내는 비트맵으로 사용되는 정수입니다. 예: params를 5로 설정하면 큐비트 0과 큐비트 2는 으로, 큐비트 1은 으로 초기화됩니다.
-
qubits (Sequence[QubitSpecifier] | None) – 큐비트를 초기화합니다.
None이면 회로의 모든 큐비트에 초기화가 적용됩니다. -
normalize (bool) – 입력 배열을 단위 벡터로 정규화할지 여부.
리턴
생성된 지침에 대한 핸들입니다.
예제
상태에서 큐비트를 준비합니다 .
import numpy as np
from qiskit import QuantumCircuit
circuit = QuantumCircuit(1)
circuit.initialize([1/np.sqrt(2), -1/np.sqrt(2)], 0)
circuit.draw()출력:
┌──────────────────────────────┐
q_0: ┤ Initialize(0.70711,-0.70711) ├
└──────────────────────────────┘문자열을 사용하여 상태에 있는 두 큐비트를 초기화합니다. 레이블의 순서는 큐비트 인덱스와 반대입니다. Statevector.from_label()기저 상태에 대한 레이블에 대한 자세한 내용은 에서 확인할 수 있습니다.
import numpy as np
from qiskit import QuantumCircuit
circuit = QuantumCircuit(2)
circuit.initialize('01', circuit.qubits)
circuit.draw()출력:
┌──────────────────┐
q_0: ┤0 ├
│ Initialize(0,1) │
q_1: ┤1 ├
└──────────────────┘복잡한 진폭의 배열에서 두 큐비트를 초기화합니다.
import numpy as np
from qiskit import QuantumCircuit
circuit = QuantumCircuit(2)
circuit.initialize([0, 1/np.sqrt(2), -1.j/np.sqrt(2), 0], circuit.qubits)
circuit.draw()출력:
┌────────────────────────────────────┐
q_0: ┤0 ├
│ Initialize(0,0.70711,-0.70711j,0) │
q_1: ┤1 ├
└────────────────────────────────────┘iswap
iswap(qubit1, qubit2, label=None)
iSwapGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 첫 번째 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 두 번째 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
mcp
mcp(lam, control_qubits, target_qubit, ctrl_state=None, label=None)
MCPhaseGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- lam (ParameterExpression |float) – 회전 각도.
- control_qubits (Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]]) – 제어용으로 사용된 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
mcrx
mcry
mcry(theta, q_controls, q_target, q_ancillae=None, mode=None, use_basis_gates=False)
다중 제어 Y 회전 게이트 적용
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- q_controls (Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]]) – 제어용으로 사용된 큐비트.
- q_target (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트의 대상이 되는 큐비트.
- q_ancillae (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int] | Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]] | None) – 보조 큐비트 목록.
- mode (str | None) – 사용할 구현 모드.
- use_basis_gates (bool) – p, u, cx 기본 게이트 사용
mcrz
mcx
mcx(control_qubits, target_qubit, ancilla_qubits=None, mode=None, ctrl_state=None, label=None)
MCXGate신청하기.
multi-cX 게이트는 다양한 수의 앤실라 큐비트를 사용하고 다양한 회로 깊이를 가진 다양한 기술을 사용하여 구현할 수 있습니다. 이러한 모드는 다음과 같습니다:
'noancilla': 0 안실라 큐비트가 필요합니다.'recursion': 4개 이상의 컨트롤을 사용하는 경우 안실라 큐비트 1개가 필요하고, 그렇지 않으면 0입니다.'v-chain': 제어 큐비트 수보다 2개 적은 수의 부호화가 필요합니다.'v-chain-dirty': 클린 앤실라와 동일합니다(단, 회로가 더 길어집니다).
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
qiskit.circuit.quantumcircuit.QuantumCircuit.mcx()의 인자 mode 는 키스킷 2.1 에서 더 이상 사용되지 않습니다. 출시일로부터 3개월 이내에 삭제됩니다. 대신 회로에 일반 MCXGate를 추가하고 트랜스필레이션의 hls_config 을 통해 합성 방법을 지정하세요. 또는 특정 분해는 다음에서 확인할 수 있습니다 https://qisk.it/mcx.
매개변수
- control_qubits (Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]]) – 제어용으로 사용된 큐비트.
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- ancilla_qubits (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int] | Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]] | None) – 해당 모드에 필요한 경우, 보조 큐비트로 사용되는 큐비트들.
- mode (str | None) – 모드 선택에 대해서는 위에서 더 자세히 설명했습니다.
- ctrl_state (str |int | None) – 제어 상태를 10진수로, 또는 비트열(예: ‘1’)로 표시합니다. 기본적으로 ‘1’ 상태일 때 제어됩니다.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
레이즈
- ValueError – 지정된 모드가 알려지지 않았거나, 전달된 보조 큐비트의 수가 너무 적은 경우.
- AttributeError – 보조 큐비트가 전달되지 않았으나, 일부가 필요한 경우.
리턴 유형
measure
measure(qubit, cbit)
Z 기준의 양자 비트(qubit)를 클래식 비트(cbit)로 측정합니다.
양자 상태가 측정되면 큐비트는 계산(폴리 Z) 방식으로 또는 에 투영됩니다. 클래식 비트 cbit 는 해당 투영의 결과를 각각 0 또는 1 로 나타냅니다. 이 조작은 되돌릴 수 없습니다.
매개변수
- 측정할 qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 큐비트.
- cbit (Clbit |ClassicalRegister |int |slice |Sequence[Clbit |int]) – 측정 결과를 저장할 클래식 비트(들) 또는 대상 clbit을 참조하는 인덱스
types.Uint유형의expr.Var값.
리턴
핸들을 추가 지침에 추가합니다.
리턴 유형
레이즈
CircuitError - 인수의 형식이 잘못된 경우.
예제
이 예에서는 큐비트를 측정하고 그 측정 결과를 클래식 비트에 저장합니다(일반적으로 다이어그램에서는 두 줄로 표시됨):
from qiskit import QuantumCircuit
circuit = QuantumCircuit(1, 1)
circuit.h(0)
circuit.measure(0, 0)
circuit.draw() ┌───┐┌─┐
q: ┤ H ├┤M├
└───┘└╥┘
c: 1/══════╩═
0measure 으로 전화하여 qubits 및 cbits 을 일대일 측정 바로 가기로 사용할 수 있습니다. 이 두 가지 양식은 동일한 결과를 생성합니다:
circuit = QuantumCircuit(2, 2)
circuit.measure([0,1], [0,1])circuit = QuantumCircuit(2, 2)
circuit.measure(0, 0)
circuit.measure(1, 1)목록 대신 QuantumRegister 및 ClassicalRegister 를 사용할 수 있습니다.
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
qreg = QuantumRegister(2, "qreg")
creg = ClassicalRegister(2, "creg")
circuit = QuantumCircuit(qreg, creg)
circuit.measure(qreg, creg)이는 다음과 동등합니다.
circuit = QuantumCircuit(qreg, creg)
circuit.measure(qreg[0], creg[0])
circuit.measure(qreg[1], creg[1])ms
ms(theta, qubits, label=None)
MSGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- qubits (Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
p
p(theta, qubit, label=None)
PhaseGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
pauli
pauli(pauli_string, qubits, label=None)
PauliGate신청하기.
매개변수
- pauli_string (str) – 적용할 파울리 연산자를 나타내는 문자열(예: ‘XX’).
- qubits (Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]]) – 이 게이트를 적용할 큐비트들.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
prepare_state
prepare_state(state, qubits=None, label=None, normalize=False)
특정 상태의 큐비트를 준비합니다.
이 클래스는 상태 준비 유니티를 구현합니다. 와 달리 initialize() 와 달리 큐비트를 먼저 리셋하지 않습니다.
매개변수
-
state (Statevector | Sequence[complex] | str |int) –
초기화할 상태는 다음 중 하나가 될 수 있습니다.
- 초기화할 상태 벡터 또는 복소 진폭의 벡터입니다.
- 파울리 고유상태 Z, X, Y의 기저 상태 라벨.
Statevector.from_label()의 내용을 참조하십시오. 적용 대상 큐비트 인덱스에 비해 레이블의 순서가 반대로 되어 있다는 점에 유의하십시오. 예시 레이블 ‘01’은 0 큐비트를 로, 1 큐비트를 로 초기화합니다. - 에 초기화할 큐비트를 나타내는 비트맵으로 사용되는 정수입니다. 예: params를 5로 설정하면 큐비트 0과 큐비트 2는 으로, 큐비트 1은 으로 초기화됩니다.
-
qubits (Sequence[QubitSpecifier] | None) – 큐비트를 초기화합니다.
None이면 회로의 모든 큐비트에 초기화가 적용됩니다. -
label (str | None) – 게이트에 대한 선택적 레이블
-
normalize (bool) – 입력 배열을 단위 벡터로 정규화할지 여부.
리턴
방금 초기화된 명령에 대한 핸들입니다
리턴 유형
예제
상태에서 큐비트를 준비합니다 .
import numpy as np
from qiskit import QuantumCircuit
circuit = QuantumCircuit(1)
circuit.prepare_state([1/np.sqrt(2), -1/np.sqrt(2)], 0)
circuit.draw()출력:
┌─────────────────────────────────────┐
q_0: ┤ State Preparation(0.70711,-0.70711) ├
└─────────────────────────────────────┘ 상태에 있는 두 큐비트를 문자열로부터 준비합니다. 레이블의 순서는 큐비트 인덱스와 반대입니다. Statevector.from_label()기저 상태에 대한 레이블에 대한 자세한 내용은 에서 확인할 수 있습니다.
import numpy as np
from qiskit import QuantumCircuit
circuit = QuantumCircuit(2)
circuit.prepare_state('01', circuit.qubits)
circuit.draw()출력:
┌─────────────────────────┐
q_0: ┤0 ├
│ State Preparation(0,1) │
q_1: ┤1 ├
└─────────────────────────┘복잡한 진폭의 배열에서 두 큐비트를 초기화합니다
import numpy as np
from qiskit import QuantumCircuit
circuit = QuantumCircuit(2)
circuit.prepare_state([0, 1/np.sqrt(2), -1.j/np.sqrt(2), 0], circuit.qubits)
circuit.draw()출력:
┌───────────────────────────────────────────┐
q_0: ┤0 ├
│ State Preparation(0,0.70711,-0.70711j,0) │
q_1: ┤1 ├
└───────────────────────────────────────────┘r
r(theta, phi, qubit, label=None)
RGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- phi (ParameterExpression |float) – x-y 평면 내 회전축의 각도.
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
rcccx
rcccx(control_qubit1, control_qubit2, control_qubit3, target_qubit, label=None)
RC3XGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 첫 번째 제어 신호로 사용되는 큐비트.
- control_qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 두 번째 제어 신호로 사용되는 큐비트(들).
- control_qubit3 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 세 번째 제어 신호로 사용되는 큐비트(들).
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
rccx
rccx(control_qubit1, control_qubit2, target_qubit, label=None)
RCCXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- control_qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 첫 번째 제어 신호로 사용되는 큐비트.
- control_qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 두 번째 제어 신호로 사용되는 큐비트(들).
- target_qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 해당 게이트의 대상이 되는 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
reset
reset(qubit)
양자 비트를 기본 상태로 초기화합니다.
매개변수
재설정할 qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 큐비트.
리턴
핸들을 추가합니다.
리턴 유형
rv
rv(vx, vy, vz, qubit, label=None)
RVGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
임의의 회전 축을 중심으로 회전 , 여기서 은 라디안 단위의 회전 각도입니다.
매개변수
- vx (ParameterExpression |float) – 회전축의 x 성분.
- vy (ParameterExpression |float) – 회전축의 y 성분.
- vz (ParameterExpression |float) – 회전축의 z 성분.
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
rx
rx(theta, qubit, label=None)
RXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 게이트의 회전 각도.
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
rxx
rxx(theta, qubit1, qubit2, label=None)
RXXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 회전 각도.
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
ry
ry(theta, qubit, label=None)
RYGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 게이트의 회전 각도.
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
ryy
ryy(theta, qubit1, qubit2, label=None)
RYYGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 게이트의 회전 각도.
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
rz
rz(phi, qubit, label=None)
RZGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- phi (ParameterExpression |float) – 게이트의 회전 각도.
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
rzx
rzx(theta, qubit1, qubit2, label=None)
RZXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 게이트의 회전 각도.
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
rzz
rzz(theta, qubit1, qubit2, label=None)
RZZGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 게이트의 회전 각도.
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
s
s(qubit, label=None)
SGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
sdg
sdg(qubit, label=None)
SdgGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
store
store(lvalue, rvalue, /)
주어진 실시간 클래식 표현식 rvalue 의 결과를 lvalue 에 정의된 메모리 위치에 저장합니다.
일반적으로 lvalue 은 Var 노드이고 rvalue 는 일부 Expr 에 쓸 수 있지만 expr.lift() 로 올릴 수 있는 Expr 로 올라갈 수 있는 것은 두 곳 모두에서 허용되며 호출됩니다.
매개변수
- lvalue (Any) – 회로의 메모리 위치에 대한 유효한 지정자입니다. 이것은 일반적으로
Var노드이지만Clbit또는ClassicalRegister메모리 위치에 쓸 수도 있습니다. 메모리 위치는 회로에 이미 존재해야 합니다. - rvalue (Any) – 주어진 메모리 위치에 결과를 기록해야 하는 실시간 클래식 표현식입니다.
리턴 유형
swap
swap(qubit1, qubit2, label=None)
SwapGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit1 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 첫 번째 큐비트.
- qubit2 (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 두 번째 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
sx
sx(qubit, label=None)
SXGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
sxdg
sxdg(qubit, label=None)
SXdgGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
t
t(qubit, label=None)
TGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
tdg
tdg(qubit, label=None)
TdgGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
u
u(theta, phi, lam, qubit, label=None)
UGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- theta (ParameterExpression |float) – 게이트의 회전 각도.
- phi (ParameterExpression |float) – 게이트의 회전 각도.
- lam (ParameterExpression |float) – 게이트의 회전 각도.
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
unitary
unitary(obj, qubits, label=None)
obj 에서 지정한 유니티 게이트를 qubits 에 적용합니다.
매개변수
- obj (np.ndarray | Gate | BaseOperator) – 단일 연산자.
- qubits (Sequence[QubitSpecifier]) – 변환을 적용할 회로 큐비트입니다.
- label (str | None) – 백엔드의 단일 이름 [Default: None].
리턴
양자 회로.
리턴 유형
예제
단일 행렬로 지정된 게이트를 양자 회로에 적용합니다
from qiskit import QuantumCircuit
matrix = [[0, 0, 0, 1],
[0, 0, 1, 0],
[1, 0, 0, 0],
[0, 1, 0, 0]]
circuit = QuantumCircuit(2)
circuit.unitary(matrix, [0, 1])x
x(qubit, label=None)
XGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
y
y(qubit, label=None)
YGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
z
z(qubit, label=None)
ZGate신청하기.
이 게이트의 전체 매트릭스 형태는 기본 게이트 문서를 참조하세요.
매개변수
- qubit (Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]) – 게이트를 적용할 큐비트.
- label (str | None) – 회로 내 게이트의 문자열 레이블.
리턴
생성된 지침에 대한 핸들입니다.
리턴 유형
회로에 제어 흐름 추가하기
제어 흐름 연산이 전체 컨텍스트에서 어떻게 표현되는지에 대한 논의 qiskit.circuit 컨텍스트에서 어떻게 표현되는지에 대한 논의.
QuantumCircuit 메서드 | 제어 흐름 명령 |
|---|---|
if_test() | IfElseOp 오직 몸만 True 가지고 |
if_else() | IfElseOp 와 및 False 두 물체를 모두 True 사용하여 |
while_loop() | WhileLoopOp |
switch() | SwitchCaseOp |
for_loop() | ForLoopOp |
box() | BoxOp |
break_loop() | BreakLoopOp |
continue_loop() | ContinueLoopOp |
QuantumCircuit Qiskit에서 지원하는 모든 제어 흐름 연산에 대해 해당 메서드를 제공합니다. 이것들을 호출하는 방법에는 두 가지가 있습니다. ControlFlowOp첫 번째는 명령문의 블록 본문을 인수로 QuantumCircuit 받아, 단순히 해당 블록을 생성하여 뒤에 덧붙이는 매우 간단한 편의 래퍼입니다.
제어 흐름을 구성할 때 사용을 강력히 권장하는 두 번째 형식은 ‘빌더 인터페이스’라고 합니다. with여기서 메서드들은 연산의 실시간 판별량만 받아들이며, 사용자가.을 사용하여 입력한 컨텍스트 매니저를 반환합니다. 그런 다음 해당 블록 내에서 일반적인 QuantumCircuit 메서드를 사용하여 제어 흐름 본문을 구성할 수 있으며, Qiskit은 내부 블록에 필요한 데이터 리소스를 자동으로 추적하여 for 문에서 with 빠져나올 때 완전한 ControlFlowOp 구조를 구축합니다. 이런 식으로 프로그래밍을 통해 제어 흐름을 구축하는 것이 훨씬 간단하고 오류가 발생할 가능성도 적습니다.
제어 흐름 빌더 인터페이스를 사용할 때, 정의된 연산이 없는데도 큐비트를 블록에 포함시키고 싶을 때가 있습니다. 이 경우 noop() 메서드를 사용할 수 있습니다.
QuantumCircuit.has_control_flow_op()회로에 가 ControlFlowOp 포함되어 있는지 확인하려면 헬퍼 메서드를 사용할 수 있습니다.
box
box(body_or_annotations=Ellipsis, /, qubits=None, clbits=None, *, label=None, duration=None, unit=None, annotations=Ellipsis)
이 회로에서 더 큰 맥락에서 원자 단위로 처리되는 작업의 box 을 만듭니다.
'상자'는 무조건 입력되는 제어 흐름 구조입니다. 상자의 내용물은 마치 상자의 시작과 끝이 장벽인 것처럼 작동합니다( barrier())처럼 작동하지만, 상자를 통해 '끝까지' 작업을 수행하는 것은 허용됩니다. 이 상자는 변수, 스트레치 및 컴파일러 패스의 목적에 대한 명시적 범위이기도 합니다.
이 함수를 호출하는 형식은 두 가지가 있습니다:
- 위치 매개변수를
QuantumCircuit전달하고, 이 매개변수가qubits적용되는 와clbits를 전달합니다. 이 양식에서는 a가BoxOp즉시 생성되며, circuit을 본문으로 사용하여 끝에 추가됩니다. body,qubits또는clbits없이with문에 사용하세요. 이것은 "빌더 인터페이스 양식"이며, 여기에서 다른QuantumCircuit메서드를 사용하여 Pythonwith범위 내에서box에 지침을 추가합니다. 이 형식이 선호되며 오류 발생 가능성이 훨씬 적습니다.
예제
빌더 인터페이스를 사용하여 두 개의 상자를 순차적으로 추가합니다. 이 회로의 두 박스는 동시에 실행될 수 있으며, 두 번째 박스는 큐비트가 유휴 상태일지라도 박스 기간 동안 큐비트 8에 대한 데이터 흐름 종속성을 명시적으로 삽입합니다.
from qiskit.circuit import QuantumCircuit, Annotation
class MyAnnotation(Annotation):
namespace = "my.namespace"
qc = QuantumCircuit(9)
with qc.box():
qc.cz(0, 1)
qc.cz(2, 3)
with qc.box([MyAnnotation()]):
qc.cz(4, 5)
qc.cz(6, 7)
qc.noop(8)명시적인 상자 구조를 사용합니다. 이렇게 하면 위와 동일한 회로가 생성되며, 대화형 사용 시 이전 양식이 선호되는 이유를 알 수 있습니다.
from qiskit.circuit import QuantumCircuit, BoxOp
body_0 = QuantumCircuit(4)
body_0.cz(0, 1)
body_0.cz(2, 3)
# Note that the qubit indices inside a body related only to the body. The
# association with qubits in the containing circuit is made by the ``qubits``
# argument to `QuantumCircuit.box`.
body_1 = QuantumCircuit(5)
body_1.cz(0, 1)
body_1.cz(2, 3)
qc = QuantumCircuit(9)
qc.box(body_0, [0, 1, 2, 3], [])
qc.box(body_1, [4, 5, 6, 7, 8], [])매개변수
- body_or_annotations (QuantumCircuit |Iterable[Annotation]) – 첫 번째 위치 매개변수는 이름이 지정되지 않았습니다. a가
QuantumCircuit위치 매개변수로 전달되면, 이는 즉시 상자의 본문으로 사용되며,qubits와clbits도 반드시 지정되어야 합니다. 이 매개변수가 지정되지 않았거나 객체로 구성된 반복 가능한Annotation객체가 지정된 경우, 이 메서드의 컨텍스트 매니저 형태가 호출됩니다. - qubits (Sequence[QubitSpecifier] | None) – 명시적인 형태로, 를
BoxOp적용할 큐비트들. - clbits (Sequence[ClbitSpecifier] | None) – 명시적인 형태로, 이를
BoxOp적용할 clbits. - label (str | None) – 명령어에 대한 선택적 문자열 레이블.
BoxOpduration (None) –.에 대한 선택적 명시적 지속 시간. 스케줄링 패스는 포함된 범위를 주어진 지속 시간에 맞추도록 스케줄링해야 하며, 필요한 경우 지연 시간을 삽입하기도 합니다.- unit (Literal['dt', 's', 'ms', 'us', 'ns', 'ps', 'expr'] | None) – 의 단위는
duration. - annotations (Iterable[Annotation]) – 상자에 들어 있어야 할 모든
Annotation물건. 이 메서드를 컨텍스트 매니저 형태로 사용할 경우, 이 인수를 유일한 위치 매개변수로 전달할 수도 있습니다.
break_loop
break_loop()
BreakLoopOp신청하기.
while_loop()if_test(), for_loop() 또는 의 “빌더” 형태의 컨텍스트 매니저를 사용하는 경우, 루프 컨텍스트 내에 있을 때만 이 메서드를 호출할 수 있습니다. 그렇지 않으면 해당 작업의 “리소스 폭”을 파악할 수 없기 때문입니다. if_else()이렇게 하면 곧바로 유효하지 않은 회로가 생성될 수 있으므로, (컨텍스트 매니저를 사용하지 않고) 재사용 가능한 루프 본문을 구성하려는 경우에는 와 의 if_test() 컨텍스트 매니저를 사용하지 않는 형태도 함께 사용해야 합니다. 해당 BreakLoopOp 명령어는 단순히 바로 인접한 범위뿐만 아니라, 이를 포함하는 루프의 모든 리소스에 걸쳐 적용되어야 한다는 점에 유의하십시오.
리턴
생성된 인스트럭션에 대한 핸들입니다.
레이즈
CircuitError - 이 메서드가 빌더 컨텍스트 내에서 호출되었지만 루프 내에 포함되지 않은 경우.
리턴 유형
continue_loop
continue_loop()
ContinueLoopOp신청하기.
while_loop()if_test(), for_loop() 또는 의 “빌더” 형태의 컨텍스트 매니저를 사용하는 경우, 루프 컨텍스트 내에 있을 때만 이 메서드를 호출할 수 있습니다. 그렇지 않으면 해당 작업의 “리소스 폭”을 파악할 수 없기 때문입니다. if_else()이렇게 하면 곧바로 유효하지 않은 회로가 생성될 수 있으므로, (컨텍스트 매니저를 사용하지 않고) 재사용 가능한 루프 본문을 구성하려는 경우에는 와 의 if_test() 컨텍스트 매니저를 사용하지 않는 형태도 함께 사용해야 합니다. 해당 ContinueLoopOp 명령어는 단순히 바로 인접한 범위뿐만 아니라, 이를 포함하는 루프의 모든 리소스에 걸쳐 적용되어야 한다는 점에 유의하십시오.
리턴
생성된 인스트럭션에 대한 핸들입니다.
레이즈
CircuitError - 이 메서드가 빌더 컨텍스트 내에서 호출되었지만 루프 내에 포함되지 않은 경우.
리턴 유형
for_loop
for_loop(indexset: Iterable[int], loop_parameter: Parameter | Var | None = None, body: None = None, qubits: None = None, clbits: None = None, *, label: str | None = None) → ForLoopContext
for_loop(indexset: Iterable[int], loop_parameter: Parameter | Var | None, body: QuantumCircuit, qubits: Sequence[Qubit | QuantumRegister | int | slice | Sequence[Qubit | int]], clbits: Sequence[Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int]], *, label: str | None = None) → InstructionSet
이 회로에 for 루프를 만듭니다.
이 함수를 호출하는 방법에는 두 가지가 있습니다. body``label모든 인자(를 제외하고)를 모두 전달하여 호출하면, 주어진 를 가진 를 ForLoopOp 생성합니다. (및 qubits 및 clbits) 가 전달되지 않으면 body , 이는 컨텍스트 매니저 역할을 하며, 이 컨텍스트 매니저에 진입하면 루프 변수를 제공하며(변수가 지정된 경우에는 해당 변수를 재사용함), 스코프가 종료될 때 자동으로 를 ForLoopOp 생성합니다. 이 형식에서는 스코프가 자동으로 처리해 주므로, 사용 중인 큐비트나 클비트를 일일이 추적할 필요가 없습니다.
예를 들어,
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 1)
with qc.for_loop(range(5)) as i:
qc.h(0)
qc.cx(0, 1)
qc.measure(0, 0)
with qc.if_test((0, True)):
qc.break_loop()매개변수
-
indexset (Iterable[int]) – 반복 처리를 수행할 정수 모음. 항상 필요합니다.
-
loop_parameter (Optional[Parameter|expr.Var]) –
indexset의 값이 할당될body내에서 사용되는 매개 변수입니다. 컨텍스트 관리자 형식에서 이 인수를 제공하지 않으면 루프 매개 변수가 할당되어with문의 값으로 반환됩니다. 본체 내에서 사용하는 경우에만 회로에 바인딩됩니다.이 메서드의 수동 형식에서 이 인수가
None인 경우body은indexset의 각 항목에 대해 한 번씩 반복되지만 해당 값은 무시됩니다. -
body (Optional[QuantumCircuit]) – 반복적으로 실행할 루프 본문입니다. 컨텍스트 관리자 모드를 사용하려면 이 단계를 생략하세요.
-
qubits (Optional[Sequence[QubitSpecifier]]) – 루프 본문이 실행되어야 하는 회로 큐비트입니다. 컨텍스트 관리자 모드를 사용하려면 이 단계를 생략하세요.
-
clbits (Optional[Sequence[ClbitSpecifier]]) – 루프 본문이 실행되어야 하는 회로 클릿입니다. 컨텍스트 관리자 모드를 사용하려면 이 단계를 생략하세요.
-
label (Optional[str]) – 회로 내 명령어의 문자열 레이블.
리턴
호출 시그니처에 따라, for 루프를 생성하기 위한 컨텍스트 매니저(블록 끝에서 회로에 자동으로 추가됨) 또는 추가된 루프 연산에 대한 핸들이 InstructionSet 반환됩니다.
리턴 유형
InstructionSet 또는 ForLoopContext
레이즈
CircuitError - 잘못된 호출 규칙이 사용된 경우.
if_else
if_else(condition, true_body, false_body, qubits, clbits, label=None)
IfElseOp신청하기.
이 메서드는 이미 컨텍스트 관리자 양식에 의해 처리되기 때문에 연결된 컨텍스트 관리자 양식이 없습니다 if_test() 메서드에 의해 이미 처리되기 때문입니다. else 부분을 다음과 같이 사용할 수 있습니다:
from qiskit.circuit import QuantumCircuit, Qubit, Clbit
bits = [Qubit(), Qubit(), Clbit()]
qc = QuantumCircuit(bits)
qc.h(0)
qc.cx(0, 1)
qc.measure(0, 0)
with qc.if_test((bits[2], 0)) as else_:
qc.h(0)
with else_:
qc.x(0)매개변수
- condition (tuple[ClassicalRegister, int] | tuple[Clbit, int] | tuple[Clbit, bool] | Expr) – 회로 실행 시 실시간으로 평가되는 조건으로, 이 조건이 참일 경우 의 평가가 트리거됩니다
true_body. 유형Bool()이거나, 기존 방식의Expr2원 튜플 등가 형식 입니다(register_or_bit, value). - true_body (QuantumCircuit) –
condition이 참이면 실행할 회로 본문입니다. - false_body (QuantumCircuit) –
condition이 거짓인 경우 실행할 회로입니다. - qubits (Sequence[Qubit |QuantumRegister |int |slice |Sequence[Qubit |int]]) – if/else 조건문이 적용되어야 할 회로 큐비트들.
- clbits (Sequence[Clbit |ClassicalRegister |int |slice |Sequence[Clbit |int]]) – if/else 문이 적용되어야 할 회로 클릿(clbits).
- label (str | None) – 회로 내 명령어의 문자열 레이블.
레이즈
CircuitError - 제공된 조건이 둘러싸는 회로 외부의 Clbits를 참조하는 경우.
리턴
생성된 인스트럭션에 대한 핸들입니다.
리턴 유형
if_test
if_test(condition: tuple[ClassicalRegister | Clbit, int] | Expr) → IfContext
if_test(condition: tuple[ClassicalRegister | Clbit, int] | Expr, true_body: QuantumCircuit, qubits: Sequence[Qubit | QuantumRegister | int | slice | Sequence[Qubit | int]], clbits: Sequence[Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int]], *, label: str | None = None) → InstructionSet
이 회로에 if 문을 만듭니다.
이 함수를 호출하는 방법에는 두 가지가 있습니다. true_body``label모든 인자(를 제외하고는)가 전달되어 호출될 경우, 주어진 로 를 IfElseOp 생성하며, 조건에 false 대한 분기는 발생하지 않습니다(메서드도 if_else() 참조하십시오). 그러나 (및 qubits``clbits ) 가 전달되지 않으면 true_body , 이는 컨텍스트 매니저 역할을 하며, 이를 사용하여 문장을 구성할 if 수 있습니다. 이 with 문장의 반환 값은 연쇄 가능한 컨텍스트 매니저로, 이를 사용하여 후속 else 블록을 생성할 수 있습니다. 이 형식에서는 스코프가 자동으로 처리해 주므로, 사용 중인 큐비트나 클비트를 일일이 추적할 필요가 없습니다.
예를 들어,
from qiskit.circuit import QuantumCircuit, Qubit, Clbit
bits = [Qubit(), Qubit(), Qubit(), Clbit(), Clbit()]
qc = QuantumCircuit(bits)
qc.h(0)
qc.cx(0, 1)
qc.measure(0, 0)
qc.h(0)
qc.cx(0, 1)
qc.measure(0, 1)
with qc.if_test((bits[3], 0)) as else_:
qc.x(2)
with else_:
qc.h(2)
qc.z(2)매개변수
- condition (expr.Expr | Tuple[Union[ClassicalRegister, Clbit], int]) – 회로 실행 중에 실시간으로 평가되는 조건으로, 이 조건이 참일 경우 의 평가가 트리거됩니다
true_body. 유형Bool()이거나, 기존 방식의Expr2원 튜플 등가 형식 입니다(register_or_bit, value). - true_body (Optional[QuantumCircuit]) –
condition이 참이면 실행할 회로 본문입니다. - qubits (Optional[Sequence[QubitSpecifier]]) – If/else가 실행되어야 하는 회로 큐비트입니다.
- clbits (Optional[Sequence[ClbitSpecifier]]) – If/else가 실행되어야 하는 회로 클립비트입니다.
- label (Optional[str]) – 회로 내 명령어의 문자열 레이블.
리턴
호출 시그니처에 따라, 블록을 if 생성하기 위한 컨텍스트 매니저(이 블록은 블록 끝에서 자동으로 회로에 추가됨) 또는 추가된 조건부 연산에 대한 핸들 InstructionSet 중 하나가 반환됩니다.
리턴 유형
InstructionSet 또는 IfContext
레이즈
- CircuitError - 제공된 조건이 둘러싸는 회로 외부의 Clbits를 참조하는 경우.
- CircuitError - 잘못된 호출 규칙이 사용된 경우.
리턴
생성된 인스트럭션에 대한 핸들입니다.
switch
switch(target: Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int] | Expr, cases: None = None, qubits: None = None, clbits: None = None, *, label: str | None = None) → SwitchContext
switch(target: Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int] | Expr, cases: Iterable[tuple[Any, QuantumCircuit]], qubits: Sequence[Qubit | QuantumRegister | int | slice | Sequence[Qubit | int]], clbits: Sequence[Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int]], *, label: str | None = None) → InstructionSet
이 회로에 switch/case 구조를 만듭니다.
이 함수를 호출하는 방법에는 두 가지가 있습니다. label모든 인자(를 제외하고는)를 모두 전달하여 호출하면, 주어진 케이스 구조를 가진 를 SwitchCaseOp 생성합니다. (및 qubits 및 clbits)가 전달되지 않으면 cases , 이는 컨텍스트 매니저 역할을 하며, 스코프가 종료될 때 자동으로 를 SwitchCaseOp 생성합니다. 이 형식에서는 스코프가 자동으로 처리해 주므로, 사용 중인 큐비트나 클비트를 일일이 추적할 필요가 없습니다.
사용 예:
from qiskit.circuit import QuantumCircuit, ClassicalRegister, QuantumRegister
qreg = QuantumRegister(3)
creg = ClassicalRegister(3)
qc = QuantumCircuit(qreg, creg)
qc.h([0, 1, 2])
qc.measure([0, 1, 2], [0, 1, 2])
with qc.switch(creg) as case:
with case(0):
qc.x(0)
with case(1, 2):
qc.z(1)
with case(case.DEFAULT):
qc.cx(0, 1)매개변수
- target (expr.Expr | Union[ClassicalRegister, Clbit]) – 전원을 켜기 위한 기본값. 또는 형식
Expr,Uint(n)또는Bool()형식, 혹은ClassicalRegister또는Clbit. - cases (Iterable[Tuple[Any, QuantumCircuit]]) – 대/소문자 지정자 시퀀스입니다. 각 튜플은 하나의 대소문자 본문(두 번째 항목)을 정의합니다. 튜플의 첫 번째 항목은 단일 정수 값, 특수 값인
CASE_DEFAULT또는 여러 정수 값의 튜플일 수 있습니다. 각 정수 값은 차례로 시도되며, 제어는 첫 번째 일치에 해당하는 본문으로 전달됩니다.CASE_DEFAULT는 가능한 모든 값과 일치합니다. 컨텍스트 관리자 양식에서는 생략합니다. - qubits (Sequence[Qubit]) – 모든 케이스 바디가 실행되는 회로 큐비트입니다. 컨텍스트 관리자 양식에서는 생략합니다.
- clbits (Sequence[Clbit]) – 모든 케이스 바디가 실행되는 회로 클릿입니다. 컨텍스트 관리자 양식에서는 생략합니다.
- label (Optional[str]) – 회로 내 명령어의 문자열 레이블.
리턴
컨텍스트 관리자 모드에서 사용하는 경우 with 리소스로 사용해야 하며, 이 리소스는 switch 문에 대한 케이스를 생성하기 위해 반복적으로 입력할 수 있는 객체를 반환합니다. 전체 양식을 사용하는 경우 생성된 지침에 대한 핸들을 반환합니다.
리턴 유형
InstructionSet 또는 SwitchCaseContext
레이즈
CircuitError - 잘못된 호출 규칙이 사용된 경우.
while_loop
while_loop(condition: tuple[ClassicalRegister | Clbit, int] | Expr, body: None = None, qubits: None = None, clbits: None = None, *, label: str | None = None) → WhileLoopContext
while_loop(condition: tuple[ClassicalRegister | Clbit, int] | Expr, body: QuantumCircuit, qubits: Sequence[Qubit | QuantumRegister | int | slice | Sequence[Qubit | int]], clbits: Sequence[Clbit | ClassicalRegister | int | slice | Sequence[Clbit | int]], *, label: str | None = None) → InstructionSet
이 회로에 while 루프를 만듭니다.
이 함수를 호출하는 형식은 두 가지가 있습니다. 모든 인자와 함께 호출되면 (label을 제외하고) 주어진 body를 사용하여 WhileLoopOp 을 생성합니다. Body(및 qubits와 clbits)가 전달되지 않으면 컨텍스트 관리자 역할을 하며, 범위가 완료되면 자동으로 WhileLoopOp` 을 작성합니다. 이 양식에서는 스코프가 자동으로 처리하므로 사용 중인 큐비트나 클릿을 추적할 필요가 없습니다.
사용 예:
from qiskit.circuit import QuantumCircuit, Clbit, Qubit
bits = [Qubit(), Qubit(), Clbit()]
qc = QuantumCircuit(bits)
with qc.while_loop((bits[2], 0)):
qc.h(0)
qc.cx(0, 1)
qc.measure(0, 0)매개변수
- condition (expr.Expr | Tuple[Union[ClassicalRegister, Clbit], int]) – 실행 전에 확인해야 할 조건
body. 유형Bool()이거나, 기존 방식의Expr2원 튜플 등가 형식 입니다(register_or_bit, value). - body (Optional[QuantumCircuit]) – 반복적으로 실행할 루프 본문입니다. 컨텍스트 관리자 모드를 사용하려면 이 단계를 생략하세요.
- qubits (Optional[Sequence[Qubit]]) – 루프 본문이 실행되어야 하는 회로 큐비트입니다. 컨텍스트 관리자 모드를 사용하려면 이 단계를 생략하세요.
- clbits (Optional[Sequence[Clbit]]) – 루프 본문이 실행되어야 하는 회로 클릿입니다. 컨텍스트 관리자 모드를 사용하려면 이 단계를 생략하세요.
- label (Optional[str]) – 회로 내 명령어의 문자열 레이블.
리턴
컨텍스트 관리자 모드에서 사용하는 경우, 종료 시 블록 콘텐츠와 피연산자를 추론하는 with 리소스로 사용해야 합니다. 전체 양식을 사용하는 경우 생성된 지침에 대한 핸들을 반환합니다.
리턴 유형
InstructionSet 또는 WhileLoopContext
레이즈
CircuitError - 잘못된 호출 규칙이 사용된 경우.
noop
noop(*qargs)
연산을 추가하지 않고 주어진 큐비트를 현재 범위 내에서 사용된 것으로 표시합니다.
의 최상위 범위에서 호출될 때 유효하지 않은 입력에 대한 예외를 발생시키는 것 외에는 아무런 영향을 미치지 않습니다(잘못된 입력에 대한 예외 발생 제외) QuantumCircuit. 제어 흐름 빌더 내에서 이렇게 하면 제어 흐름 블록에서 큐비트가 아직 사용되지 않은 경우 추가 연산을 추가하지 않고도 큐비트를 "사용"하게 됩니다.
예를 들어,
from qiskit.circuit import QuantumCircuit
qc = QuantumCircuit(3)
with qc.box():
# This control-flow block will only use qubits 0 and 1.
qc.cx(0, 1)
with qc.box():
# This control-flow block will contain only the same operation as the previous
# block, but it will also mark qubit 2 as "used" by the box.
qc.cx(0, 1)
qc.noop(2)매개변수
*qargs ( Qubit | QuantumRegister | int | slice | Sequence [ Qubit | int ] ) – 유효한 큐비트 지정자의 가변 리스트입니다. 여기서 각 인자로는 큐비트 또는 큐비트 집합으로 전달될 수 있는 모든 것이 유효합니다.
레이즈
CircuitError - 요청된 큐비트가 회로에 유효하지 않은 경우.
has_control_flow_op
회로를 다른 객체로 변환하기
‘일반 연산 추가 방법’에서 설명한 바와 같이, 두 가지 보조 메서드를 사용하여 회로를 또는 Instruction 로 Gate 변환할 수 있습니다.
to_instruction
to_instruction(parameter_map=None, label=None)
이 회로로 를 Instruction 만들어 보세요.
circuit_to_instruction()
이 메서드의 기본 동인입니다.
매개변수
- parameter_map (dict[Parameter, ParameterExpression |float] | None) – 매개변수화된 회로의 경우, 회로 내의 매개변수와 명령어에서 사용될 매개변수 간의 대응 관계. None인 경우, 기존 회로 매개변수도 해당 명령어에 적용됩니다.
- label (str | None) – 선택적 게이트 레이블.
리턴
이 회로를 캡슐화하는 복합 명령어(
다시 분해됨).
리턴 유형
to_gate
to_gate(parameter_map=None, label=None)
이 회로로 를 Gate 만들어 보세요. 회로는 큐비트에만 작용해야 하며, 유니터리 연산만을 포함해야 한다.
circuit_to_gate()
이 메서드의 기본 동인입니다.
매개변수
- parameter_map (dict[Parameter, ParameterExpression |float] | None) – 매개변수화된 회로의 경우, 회로 내의 매개변수를 게이트에서 사용될 매개변수로 매핑하는 것. 이 경우
None, 기존 회로 파라미터들도 게이트를 매개변수화하게 됩니다. - label (str | None) – 선택적 게이트 레이블.
리턴
이 회로를 캡슐화하는 복합 게이트(다시 분해 가능).
리턴 유형
또한, 전체 회로를 다음과 DAGCircuit 같은 형태로 변환할 수 있습니다:
to_dag
to_dag(*, copy_operations=True)
DAGCircuit이 회로를.로 변환하십시오.
이것은 간단한 래퍼입니다 circuit_to_dag().
매개변수
copy_operations (bool) – 개별 명령어를 딥 복사할지 여부. 로 설정하면 연산 비용은 줄어들지만 False, DAG 내 명령어에 대한 변경 사항은 원래 회로에 영향을 미칩니다.
리턴
이 동일한 회로를 나타내는 DAG.
리턴 유형
보조 돌연변이 방법
두 가지 상위 수준의 메서드가 있습니다 QuantumCircuit 를 사용하여 회로의 끝에 측정값을 추가할 수 있습니다. 기본적으로 레지스터가 추가된다는 점에 유의하세요.
measure_active
measure_active(inplace=True)
유휴 상태가 아닌 모든 큐비트에 측정을 추가합니다. 측정 중인 비유휴 큐비트 수와 동일한 크기의 ClassicalRegister 를 새로 만듭니다.
Inplace=False인 경우 측정값이 포함된 새 회로를 반환합니다.
매개변수
inplace (bool) – 모든 측정을 현장에서 수행하거나 새로운 회로를 반환합니다.
리턴
다음과 같은 경우 측정값이 포함된 회로를 반환합니다 inplace = False.
리턴 유형
measure_all
measure_all(inplace=True, add_bits=True)
모든 큐비트에 측정을 추가합니다.
기본적으로 새로운 클래식 비트를 추가하여 ClassicalRegister 에 새로운 클래식 비트를 추가하여 이러한 측정값을 저장합니다. add_bits=False, 측정 결과는 기존의 클래식 비트에 저장되며, 큐비트 n 는 클래식 비트 n 로 측정됩니다.
inplace=False 이면 측정값이 포함된 새 회로를 반환합니다.
매개변수
리턴
다음과 같은 경우 측정값이 포함된 회로를 반환합니다 inplace=False.
리턴 유형
레이즈
CircuitError - 경우 add_bits=False 하지만 클래식 비트가 충분하지 않습니다.
또한 에는 QuantumCircuit 두 가지 “감산적” 방법이 있습니다. RemoveFinalMeasurementsclear()이는 이 QuantumCircuit 기능이 의도된 사용 사례가 아닙니다. 일반적으로 는 대신 를 사용해야 copy_empty_like() 하며, 는 트랜스파일러 패스 형태로 실행해야 remove_final_measurements() 합니다.
clear
clear()
셀프에서 모든 지침을 지웁니다.
회로를 지우면 메타데이터가 유지됩니다.
명령어 없이 양자 및 기존 유형 데이터의 추적은 모두 동일하지만 원래 회로를 변경하지 않고 새로운 회로를 생성하는 방법입니다.
리턴 유형
없음
remove_final_measurements
remove_final_measurements(inplace=True)
모든 큐비트에 최종 측정값과 장벽이 있는 경우 이를 제거합니다. 이 작업의 결과로 유휴 상태가 된 측정값을 저장하는 데 사용된 클래식 레지스터를 삭제하고, 제거된 레지스터에서만 참조되거나 전혀 참조되지 않지만 이 작업의 결과로 유휴 상태가 된 클래식 비트를 삭제합니다.
측정 및 차단은 다른 작업(다른 측정 또는 차단 제외)이 뒤따르지 않는 경우 최종 작업으로 간주됩니다
이 메서드는 특히 새로 유휴 상태인 클래식 비트와 레지스터 제거와 관련해 다소 복잡한 동작을 합니다. 불필요한 클래식 데이터를 나중에 제거하는 것보다 애초에 추가하지 않는 것이 훨씬 더 효율적입니다.
최종 측정과 장벽을 제거하는 트랜스파일러 패스입니다. 이렇게 해도 기존 데이터는 제거되지 않습니다. 이것이 목표라면 다음과 같이 호출할 수 있습니다:
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import RemoveFinalMeasurements
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.barrier()
qc.measure([0, 1], [0, 1])
pass_ = RemoveFinalMeasurements()
just_bell = pass_(qc)매개변수
inplace (bool) – 모든 측정값을 제자리에서 제거하거나 새로운 회로를 반환합니다.
리턴
다음과 같은 경우 결과 회로를 반환합니다 inplace=False, 그렇지 않으면 없음.
리턴 유형
회로 특성
간단한 회로 지표
양자 회로를 구성할 때 회로의 '크기'와 잡음이 많은 양자 장치에서 실행할 수 있는 능력을 정량화하는 데 도움이 되는 몇 가지 속성이 있습니다. 큐비트 수와 같은 일부 항목은 이해하기 쉽지만, 깊이와 텐서 구성 요소 수와 같은 항목은 조금 더 설명이 필요합니다. 여기에서는 이러한 모든 속성을 설명하고 실제 장치에서 실행할 때 회로가 어떻게 변하는지에 대한 이해를 돕기 위해 회로가 변하는 조건을 강조합니다.
다음 회로를 고려하세요:
from qiskit import QuantumCircuit
qc = QuantumCircuit(12)
for idx in range(5):
qc.h(idx)
qc.cx(idx, idx+5)
qc.cx(1, 7)
qc.x(8)
qc.cx(1, 9)
qc.x(7)
qc.cx(1, 11)
qc.swap(6, 11)
qc.swap(6, 9)
qc.swap(6, 10)
qc.x(6)
qc.draw('mpl')
플롯을 보면 이 회로에는 12개의 큐비트와 하다마드, CNOT, X, SWAP 게이트의 집합이 있음을 쉽게 알 수 있습니다. 하지만 이를 프로그래밍 방식으로 정량화하는 방법은 무엇일까요? 모든 큐비트에서 동시에 단일 큐비트 게이트를 수행할 수 있기 때문에 이 회로의 큐비트 수는 다음과 같습니다 width() 와 같습니다:
assert qc.width() == 12또한 다음을 사용하여 큐비트 수를 직접 구할 수도 있습니다 num_qubits:
assert qc.num_qubits == 12큐비트로만 구성된 양자 회로의 경우, 회로 폭은 큐비트 수와 같습니다. 이것이 바로 양자 컴퓨팅에서 사용되는 정의입니다. 그러나 고전적인 레지스터와 고전적으로 제어되는 게이트가 있는 더 복잡한 회로의 경우 이 등가성은 무너집니다. 따라서 이제부터는 양자 회로의 큐비트 수를 폭이라고 부르지 않겠습니다.
또한 다음을 사용하여 회로에서 게이트의 수와 유형을 얻는 것도 간단합니다 count_ops():
qc.count_ops()OrderedDict([('cx', 8), ('h', 5), ('x', 3), ('swap', 3)])회로를 계산하여 원시 연산 횟수만 얻을 수도 있습니다 size():
assert qc.size() == 19count_ops
depth
depth(filter_function=<function QuantumCircuit.<lambda>>)
반환 회로 깊이(즉, 임계 경로 길이)를 반환합니다.
양자 회로의 깊이는 회로가 정의한 연산을 완료하는 데 필요한 양자 게이트의 '레이어' 수를 병렬로 실행하는 데 걸리는 시간을 측정한 값입니다. 양자 게이트는 구현하는 데 시간이 걸리기 때문에 회로의 깊이는 양자 컴퓨터가 회로를 실행하는 데 걸리는 시간과 대략적으로 일치합니다.
회로에 제어 흐름 연산이 포함된 경우 이 연산은 잘 정의되지 않습니다.
매개변수
filter_function (Callable[[CircuitInstruction], bool]) – 깊이를 늘리는 데 포함될 명령어를 결정하는 함수. 단일 위치 입력으로 CircuitInstruction.을 받아야 합니다. 회로 깊이 계산 시, 함수가 반환하는 명령어는 무시됩니다 False . 기본적으로.와 같은 “지시어”는 제외됩니다 Barrier.
리턴
회로 깊이.
리턴 유형
예제
총 회로 깊이를 간단하게 계산합니다:
from qiskit.circuit import QuantumCircuit
qc = QuantumCircuit(4)
qc.h(0)
qc.cx(0, 1)
qc.h(2)
qc.cx(2, 3)
assert qc.depth() == 2이전 예제를 수정하여 멀티비트 게이트의 깊이만 계산하도록 수정합니다:
assert qc.depth(lambda instr: len(instr.qubits) > 1) == 1get_instructions
get_instructions(name)
이름과 일치하는 안내를 받습니다.
매개변수
name (str) – 가져올 명령어의 이름.
리턴
(인스트럭션, QARGS, CARGS) 목록.
리턴 유형
num_connected_components
num_connected_components(unitary_only=False)
회로를 몇 개의 얽히지 않은 하위 회로로 팩터링할 수 있는지 확인합니다.
매개변수
unitary_only (bool) – 그래프의 유니터리 성분만 계산합니다.
리턴
회로에 연결된 구성 요소의 수입니다.
리턴 유형
num_nonlocal_gates
num_tensor_factors
num_tensor_factors()
회로의 단일(양자) 부분의 텐서 팩터 수만 계산합니다.
참고
이 기능은 이전 버전과의 호환성을 위해 여기에 있으며, 향후 키스킷 릴리스에서 제거될 예정입니다. 대신 num_unitary_factors를 호출해야 합니다.
리턴 유형
num_unitary_factors
size
size(filter_function=<function QuantumCircuit.<lambda>>)
회로의 총 명령어 수를 반환합니다.
매개변수
filter_function (callable) – 일부 지침을 필터링하는 기능입니다. (Instruction, list(Qubit), list(Clbit))의 튜플을 입력으로 받아야 합니다. 기본적으로 배리어 또는 스냅샷과 같은 "지시어"는 필터링되지 않습니다.
리턴
총 게이트 작업 수입니다.
리턴 유형
width
스케줄 정보 접근
만약 QuantumCircuit 가 트랜스파일레이션 파이프라인의 일부로 예약된 경우, 개별 큐비트에 대한 타이밍 정보에 액세스할 수 있습니다. 전체 회로 타이밍 정보는 다음을 통해 확인할 수 있습니다 estimate_duration() 메서드 및 op_start_times 어트리뷰트를 통해 얻을 수 있습니다.
estimate_duration
estimate_duration(target, unit='s')
예약된 서킷의 지속 시간 예측하기
이 방법은 주어진 대상에서 제공한 지속 시간을 기반으로 회로에서 가장 긴 지속 시간 경로를 찾아 회로 지속 시간의 추정치를 계산합니다. 이 방법은 제어 흐름이나 기타 고전적인 피드 포워드 연산이 없는 단순한 회로에서만 작동합니다.
매개변수
- target (Target) – 회로 내의 명령어 중 하나라도 대상에 지속 시간 데이터가 누락된 경우, 해당 명령어의 지속 시간을 포함하는 인스턴스에
Target대해 예외가QiskitError발생합니다. 이는 트랜스파일링의 대상으로 사용된 것과 동일한 대상 객체여야 합니다. - unit (str) – 지속 시간을 반환할 단위. 기본값은 초를 나타내는 “s”이지만, 초 단위의 반환값에 대해 지원되는 SI 접두사를 사용할 수도 있습니다. 예를 들어, 이 값을 “n”으로 설정하면 나노초 단위로 결과가 반환됩니다. 이 유형에서 지원되는 값은 “f”, “p”, “n”, “u”, “µ”, “m”, “k”, “M”, “G”, “T” 및 “P”입니다. 또한, “dt” 값을 지정하면 “dt” 단위의 정수 값을 출력할 수 있습니다. 이 기능이 작동하려면. 파일에 “dt”를 지정해야 합니다
target.
리턴
지정된 단위에서 회로의 단일 샷을 실행하는 데 걸리는 예상 시간입니다.
레이즈
QiskitError - 회로가 예약되지 않았거나 예상 기간을 계산할 수 없는 기타 세부 정보(예: 매개변수화된 지연)가 포함된 경우.
리턴 유형
qubit_duration
qubit_duration(*qubits)
제공된 큐비트에 대해 지연을 제외한 첫 번째 명령과 마지막 명령의 시작과 중지 시간 사이의 지속 시간을 반환합니다. 시간 단위는 self.unit 입니다.
매개변수
*큐비트 ( 큐비트 | 정수 ) – 큐비트 개수 self 포함하기 위해.
리턴
비지연 명령의 첫 시작과 마지막 중지 시간 사이의 기간을 반환합니다
리턴 유형
qubit_start_time
qubit_start_time(*qubits)
제공된 큐비트에 대해 지연을 제외한 첫 번째 명령의 시작 시간을 반환합니다. 시간 단위는 self.unit 입니다.
큐비트 이상의 명령이 없으면 0을 반환합니다
매개변수
- * 큐비트 -
self내에 큐비트를 포함할 수 있습니다. 큐비트에는 정수가 허용되며, 이는 다음을 나타냅니다 - self.qubits. (indices of)
리턴
큐비트에 대해 지연을 제외한 첫 번째 명령의 시작 시간을 반환합니다
레이즈
CircuitError - self 가 아직 예약되지 않은 서킷인 경우.
리턴 유형
qubit_stop_time
qubit_stop_time(*qubits)
제공된 큐비트에 대해 지연을 제외한 마지막 명령의 정지 시간을 반환합니다. 시간 단위는 self.unit 입니다.
큐비트 이상의 명령이 없으면 0을 반환합니다
매개변수
- * 큐비트 -
self내에 큐비트를 포함할 수 있습니다. 큐비트에는 정수가 허용되며, 이는 다음을 나타냅니다 - self.qubits. (indices of)
리턴
지연을 제외한 마지막 명령의 정지 시간을 큐비트에 걸쳐 반환합니다
레이즈
CircuitError - self 가 아직 예약되지 않은 서킷인 경우.
리턴 유형
추상 회로와 물리적 회로
회로는 양자 알고리즘을 상당히 저수준으로 추상화한 것입니다. 하지만 이 안에서도 차이가 존재한다. 양자 프로그래머들은 대개 다양한 게이트와 명령어를 사용하고자 하며, 모든 큐비트가 서로 상호작용하는 환경에서 작업합니다. 그러나 양자 하드웨어는 일반적으로 제한적인 기본 게이트 집합을 가지고 있으며, 특정 쌍의 하드웨어 큐비트만이 상호작용할 수 있다. 우리는 이 두 체계를 각각 “추상 회로”와 “물리적 회로”라고 부른다.
키스킷에는 물리적인 회로를 구별하는 두 가지 방법이 있습니다. 이것은 역사적인 이유로 퍼지 체크입니다. 원래 키스킷은 전혀 구분을 하지 않았습니다(그렇기 때문에 transpile() 을 compile 이라고 부르지 않고 그렇게 부르는 이유입니다.) 가장 명시적인 방법은 회로의 layout 속성을 사용하는 것입니다. 이 속성이 설정되어 있으면 해당 회로는 확실히 물리적인 회로입니다. 더 오래되고 더 암시적인 방법은 Qubit 객체와 QuantumRegister 인스턴스의 메타데이터입니다. 회로는 정확히 하나의 양자 레지스터( q )를 포함하고 모든 회로 큐비트를 인덱스 순서대로 소유하고 있는 경우에만 (여러 번의 트랜스파일러 패스를 통해 판단할 때) 물리적인 것으로 간주할 수 있습니다. 역사적인 이유로 인해 기본 생성자의 기본값은 QuantumCircuit(int [, int]) 형태입니다.
일반적으로, 여러분은 QuantumCircuit 를 생성하고 (큐비트 메타데이터와 상관없이) 추상적인 의미로 빌드합니다. 그런 다음 transpile() 를 호출하여 회로를 하드웨어 지원 회로로 컴파일합니다. 그러나 처음부터 하드웨어적으로 효율적인 회로를 작성하려는 경우 전체 컴파일 인프라를 단락시킬 수 있습니다 ensure_physical() 메서드를 사용하면 됩니다. 이렇게 하면 초기 큐비트 메타데이터를 어떻게 정의했든, 큐비트 인덱스가 하드웨어 큐비트에 매핑되어 물리적인 회로로 간주되기 위한 모든 요구 사항을 충족할 수 있습니다.
가상-물리 매핑 및 라우팅 선택을 보다 완벽하게 제어하려면 사전 설정된 컴파일 파이프라인의 레이아웃 및 라우팅 <transpiler-preset-stage-routing> 단계를 참조하세요.
ensure_physical
ensure_physical(num_qubits=None, *, apply_layout=True)
이 회로를 주어진 큐비트 수에 따라 표준 물리적 형태로 변환합니다(아직 변환하지 않은 경우).
여러 키스킷 트랜스파일러 패스는 물리적 큐비트 측면에서 정의된 회로에 적용될 때만 의미가 있습니다. 큐비트 인덱스가 물리적 큐비트에 해당하는 회로를 수동으로 구성한 경우, 이 기능을 사용하여 회로의 메타데이터가 표준 물리적 형식과 일치하는지 확인합니다. 즉, 큐비트 데이터를 "q" 라는 단일 소유 레지스터로 대체하고 (선택 사항으로) 회로의 layout 필드를 설정하여 이러한 물리적 큐비트를 원래의 가상 큐비트와 연결합니다.
회로에 레이아웃이 아직 없는 경우 이 방법( apply_layout=True)은 사전 설정 컴파일 파이프라인의 전체 사소한 레이아웃 방법을 적용하는 것과 동일합니다.
회로가 이미 정식으로 물리적인 상태라면 아무 일도 일어나지 않습니다. 이 메서드는 회로의 큐비트 수를 변경할 수 없습니다 layout 설정된 경우에는 변경할 수 없습니다.
매개변수
- num_qubits (int | None) – 주어진 경우, 이 크기까지 보조 회로를 추가하여 회로를 확장합니다. 어시스트 비트는 항상 회로에서 큐비트 인덱스가 가장 높은 비트들입니다. 지정하지 않을 경우(기본값), 회로의 너비는 그대로 유지됩니다. 회로에 이미
layout.가 설정되어 있는 경우 이 옵션을 설정할 수 없습니다. - apply_layout (bool) – true인 경우(기본값), 회로가 너비가 인 백엔드에 대해 보조 회로 확장을 포함한 “트리비얼” 레이아웃으로 배치된 것처럼 보이도록 회로의
layout속성을 적절히 설정합니다num_qubits. 회로에 이미layout.가 있는 경우에는 아무런 효과가 없습니다.
리턴
회로를 물리적으로 만들기 위해 회로를 수정했는지 여부를 확인합니다.
레이즈
- ValueError – 값이
num_qubits회로에 비해 너무 작을 경우. - CircuitError - 로 설정되어 있지만 회로에 이미 레이아웃이 설정되어 있는 경우
num_qubits.
리턴 유형
estimate_fidelity
estimate_fidelity(target)
물리적 회로의 충실도를 추정하십시오.
이 함수는 회로 내 각 게이트의 오류율을 곱하여 회로의 충실도를 추정합니다:
..수학::
레이블
예상 회로 충실도
prod_ {g in text{gates}} bigl(1 - operatorname {error} (g)bigr)
여기서 는 대상 내 회로의 명령어 에 대한 대상의 오류율이다. None회로가 물리적이지 않은 경우, 즉 회로 내의 명령어(예: operation 및 qargs)가 대상에서 발견되지 않는 경우, 이 함수는 를 반환합니다. 이 방법은 실제 하드웨어에서의 실행 정확도를 현실적으로 시뮬레이션하기 위한 것이 아닙니다. 이 기능은 트랜스파일러가 작동 시 다양한 휴리스틱 기법을 적용했을 때의 정확도를 바탕으로, 트랜스파일러가 어떻게 작동할지 대략적으로 예측할 수 있도록 설계되었습니다. 일반적으로 이는 서로 다른 컴파일 결과물을 비교하여, 하드웨어에서 어느 쪽이 더 우수한 실행 품질을 보여줄지 추정하는 데에만 유용합니다.
매개변수
target (Target) – 이 회로가 실행될 인스턴스로 Target , 회로 내 명령어의 오류율을 산출하는 데 사용됩니다.
리턴
주어진 대상에서 해당 회로를 실행할 때 예상되는 정확도. 회로에 있는 명령어 중 대상에 없는 것이 있다면
레이즈
QiskitError – 회로에 제어 흐름 연산이 포함되어 있는 경우.
리턴 유형
float | None
명령형 메서드
QuantumCircuit 또한 세부 사항 면에서 매우 Instruction-와 유사한 메서드들이 소수 포함되어 있습니다. 회로를 상황에 맞게 ( to_instruction()Instruction ) 또는 Gate (to_gate())로 먼저 변환한 다음, 해당 메서드를 호출하면 더 나은 통합 기능과 더 많은 API 지원을 누릴 수 있을 것입니다.
control
control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)
이 회로의 제어된 버전을 반환하십시오.
원래 회로는 게이트로 변환되며, 그 결과로 만들어진 회로에는 이 게이트의 제어된 버전이 포함됩니다. True``False이 제어 게이트는 일 때는 annotated 로 ControlledGate , 일 때는 annotated 로 AnnotatedOperation 구현됩니다.
qiskit.circuit.quantumcircuit.QuantumCircuit.control()'s argument'는 Qiskit 2.3annotated 부터 사용을 권장하지 않습니다. Qiskit에서 제거될 예정입니다. 3.0 QuantumCircuit.control 메서드는 더 이상 annotated=None을 허용하지 않습니다. 새로운 기본값은 annotated=True입니다. 이는 새로운 양자 회로에서 제어된 게이트를 제어된 게이트 클래스( AnnotatedOperation )로 표현합니다(전용 제어 게이트 클래스가 이미 존재하지 않는 경우). 이전 동작을 유지하려면 명시적으로 annotated=False를 설정할 수 있습니다. 그러나 annotated=True를 사용하는 것이 권장됩니다. 이는 제어 회로의 생성을 트랜스파일러로 미루고, 추가적인 제어 게이트 최적화를 가능하게 하기 때문입니다(일반적으로 더 높은 품질의 회로로 이어집니다).
매개변수
- num_ctrl_qubits (int) – 추가할 컨트롤의 개수. 기본값은
1.입니다. - label (str | None) – 시각화를 위해 제어 게이트에 부여할 선택적 레이블입니다. 기본값은
None.입니다. 제어 게이트가 주석이 달린 연산으로 구현된 경우에는 무시됩니다. - ctrl_state (str |int | None) – 게이트의 제어 상태로, 정수 또는 비트열(예:
"110")로 지정됩니다. 인 경우None, 기본값은 모든 비트가 1인 상태가 됩니다2**num_ctrl_qubits - 1. - annotated (bool | None) – 제어 게이트를 제어 게이트로 구현할지, 아니면 주석이 달린 연산으로 구현할지 여부를 나타냅니다.
리턴
이 회로의 제어 버전입니다.
리턴 유형
레이즈
CircuitError - 회로에 비단일 작업이 포함되어 있고 제어할 수 없는 경우.
inverse
inverse(annotated=False)
이 회로를 반전(결합)합니다.
이는 모든 게이트를 재귀적으로 반전하여 수행됩니다.
매개변수
annotated (bool) – 는 역 게이트를 주석이 달린 게이트로 구현할 수 있는지 여부를 나타냅니다.
리턴
반전 회로
리턴 유형
레이즈
CircuitError - 회로를 반전할 수 없는 경우.
예제
입력:
┌───┐
q_0: ┤ H ├─────■──────
└───┘┌────┴─────┐
q_1: ─────┤ RX(1.57) ├
└──────────┘출력:
┌───┐
q_0: ──────■──────┤ H ├
┌─────┴─────┐└───┘
q_1: ┤ RX(-1.57) ├─────
└───────────┘power
power(power, matrix_power=False, annotated=False)
이 회로를 power 의 전력으로 올리십시오.
power 이 양의 정수이고 matrix_power 과 annotated 이 모두 False 인 경우 이 구현은 기본적으로 repeat 을 호출합니다. 그렇지 않으면 회로가 게이트로 변환되고 이 게이트가 주어진 전력으로 상승한 새 회로가 반환됩니다. 주어진 파워로 올라간 게이트는 annotated 가 False 인 경우 단일 게이트로 구현되거나 annotated 가 True 인 경우 주석이 달린 연산으로 구현됩니다.
매개변수
- power (float) – 이 회로를 승수할 지수.
- matrix_power (bool) – 는 내부 벡터 게이트를 유니터리 게이트로 구현할 수 있는지 여부를 나타냅니다.
- annotated (bool) – 는 내부 파워 게이트를 주석이 달린 연산으로 구현할 수 있는지 여부를 나타냅니다.
레이즈
CircuitError - 회로를 단일 게이트로 변환해야 하지만 단일 게이트가 아닌 경우.
리턴
이 회로를 구현하는 회로는 power 의 전력으로 상승했습니다.
리턴 유형
repeat
repeat(reps, *, insert_barriers=False)
이 회로( reps )를 여러 번 반복합니다.
매개변수
리턴
이 회로의 reps 반복을 포함하는 회로입니다.
리턴 유형
reverse_ops
reverse_ops()
명령어 순서를 반대로 하여 회로를 뒤집습니다.
이는 모든 지침을 재귀적으로 반전하여 수행합니다. 어떤 게이트도 반전(인접)하지 않습니다.
리턴
반전된 회로입니다.
리턴 유형
예제
입력:
┌───┐
q_0: ┤ H ├─────■──────
└───┘┌────┴─────┐
q_1: ─────┤ RX(1.57) ├
└──────────┘출력:
┌───┐
q_0: ─────■──────┤ H ├
┌────┴─────┐└───┘
q_1: ┤ RX(1.57) ├─────
└──────────┘시각화
키스킷에는 회로의 모양을 빠르게 파악할 수 있는 몇 가지 그리기 도구가 포함되어 있습니다. 이 툴링은 주로 텍스트 기반 도면 또는 Matplotlib - 또는 텍스트 기반 드로잉을 제작하는 데 주로 사용됩니다. 기능이 덜한 LaTeX 백엔드도 있지만 간단한 회로를 그리는 데만 사용할 수 있고 유지 관리가 활발하게 이루어지지 않습니다.
키스킷의 모든 시각화 도구에 대한 기본 문서입니다.
draw
draw(output=None, scale=None, filename=None, style=None, interactive=False, plot_barriers=True, reverse_bits=None, justify=None, vertical_compression='medium', idle_wires=None, with_layout=True, fold=None, ax=None, initial_state=False, cregbundle=None, wire_order=None, expr_len=30, measure_arrows=None, barrier_label_len=16)
양자 회로를 그립니다. 출력 매개변수를 사용하여 그리기 형식을 선택합니다:
text
콘솔에 출력할 수 있는 ASCII 아트 TextDrawing.
mpl
matplotlib을 사용하여 Python 에서 순수하게 색상이 렌더링된 이미지들.
latex
LaTeX 을 통해 수집된 고화질 이미지들.
Instruction.label이 기능은 설계상 임의의 사용자 입력에 대해 설치된 시스템 버전의 pdflatex 를 호출하게 되므로(예: 에서 사용자 정의 코드를 렌더링하기 위해), 신뢰할 수 있는 입력에 대해서만 사용해야 합니다.
latex_source
LaTeX 의 컴파일되지 않은 원본 출력. 이것이 latex 드로어가 렌더링할 내용의 원본입니다.
에 대한 지원 Expr 노드 및 SwitchCaseOp.target 필드에 대한 지원은 예비적이며 불완전합니다. text 및 mpl 서랍은 데이터 종속성을 표시하기 위해 최선을 다하지만 LaTeX-based 서랍은 이를 완전히 건너뜁니다.
매개변수
-
output (str | None) – 회로 도면을 그릴 때 사용할 출력 방식을 선택하십시오. 유효한 선택 항목은
text,mpl,latex, 입니다latex_source. 사용자 구성 파일(일반적으로~/.qiskit/settings.conf)에 다른 백엔드가 기본값으로 설정되어 있지 않은 한, 기본적으로text드로어가 사용됩니다. 예를 들어,circuit_drawer = latex입니다. 출력 kwarg가 설정되어 있으면, 사용자 설정 파일에 지정된 기본값 대신 항상 해당 백엔드가 사용됩니다. -
scale (float | None) – 그릴 이미지의 크기 (축소할 경우
< 1.0).mpl, 및latexlatex_source출력에서만 사용됩니다. 기본값은1.0.입니다. -
filename (str | None) – 이미지를 저장할 파일 경로. 기본값은
None(결과가 파일에 저장되지 않음)입니다. -
스타일 이름, 스타일 JSON 파일의 파일 이름 또는 스타일을 지정하는 사전입니다.
- 지원되는 스타일 이름은
"iqp"(기본값),"iqp-dark","clifford","textbook"및"bw"입니다. - JSON 파일이 주어진 경우, 예를 들어
my_style.json또는my_style(.json확장자는 생략할 수 있음)을 입력하면 이 함수는 해당 위치에서 스타일 사전을 로드하려고 시도합니다. JSON 파일은 시각화 사양을 완전히 지정해야 한다는 점에 유의하세요. 파일은 현재 작업 디렉터리인qiskit/visualization/circuit/styles에서 검색되며~/.qiskit/settings.conf에 지정된 위치에서 검색됩니다. - 사전인 경우, 각 항목이 기본 설정을 재정의합니다. 해당
"name"키가 지정된 경우, 기본 구성은 해당 스타일에 따라 결정됩니다. 예를 들어,{"name": "textbook", "subfontsize": 5}스타일을"textbook"불러오고 서브 폰트 크기(예: 게이트 각도)를 로 설정합니다5. None인 경우 기본 스타일"iqp"이 사용되거나 지정된 경우~/.qiskit/settings.conf에 지정된 기본 스타일이 사용됩니다.
- 지원되는 스타일 이름은
-
interactive (bool) – 이 값으로 설정하면 회로를 새 창에 표시합니다(단
True, 이는mpl사용 중인 matplotlib 백엔드가 이 기능을 지원하는지에 따라 달라집니다). 텍스트 또는 출력latex_source유형과 함께 사용할 경우, 이 설정은 아무런 효과가 없으며 아무런 알림 없이 무시됩니다. 기본값은False.입니다. -
reverse_bits (bool | None) – 이 값으로 설정하면
True, 출력 시각화를 위해 레지스터 내부의 비트 순서를 반전합니다. 사용자 설정 파일(보통~/.qiskit/settings.conf)에 다른 값이 설정되어 있지 않은False한, 기본값은 입니다. 예:circuit_reverse_bits = True. -
plot_barriers (bool) – 출력 회로에서 장벽 그리기 기능을 활성화하거나 비활성화합니다. 기본값은
True.입니다. -
justify (str | None) – 옵션은
"left","right"또는"none"(문자열)입니다. 그 외의 다른 내용이 제공될 경우, 대신 왼쪽 정렬이 사용됩니다. 이는 선택지가 있을 경우 출력 회로에서 게이트를 어디에 배치해야 하는지를 의미합니다.none그 결과 각 게이트가 각각의 열에 배치됩니다. 기본값은left.입니다. -
vertical_compression (str | None) –
high, 또는mediumlow. 텍스트 출력으로 생성된 선들을 병합하여, 그림이 차지하는 세로 공간을 줄여줍니다. 기본값은medium.입니다. 이 옵션은 출력text시에만 사용되며, 그 외의 경우에는 아무런 메시지 없이 무시됩니다. -
idle_wires (bool |str | None) – 출력 시각화에 유휴 전선(회로 소자가 없는 전선)을 포함할지 여부를 설정합니다. 문자열 도 가능하며
"auto", 이 경우 회로에 레이아웃이 연결되어 있지 않은 한 유휴 선이 표시됩니다. 사용자 설정 파일(보통~/.qiskit/settings.conf)에 다른 값이 설정되어 있지 않은"auto"한, 기본값은 입니다. 예:circuit_idle_wires = False. -
with_layout (bool) – 물리적 레이아웃에 레이블을 표시하여 레이아웃 정보를 포함합니다. 기본값은
True입니다. -
fold (int | None) – 페이지 나누기를 설정합니다. -1 을 사용하면 이 기능을 비활성화할 수 있습니다. 에서
text, 줄의 길이를 설정합니다. 이 기능은 도면이 콘솔에 다 들어가지 않을 때 유용합니다. None(기본값)인 경우, 다음을 사용하여 콘솔 너비를 추측하려고 시도합니다shutil.get_terminal_size(). 하지만 Jupyter에서 실행할 경우, 기본 줄 길이는 80자로 설정되어 있습니다. 여기서mpl는 접기 전의 (시각적) 층의 수를 의미합니다. 기본값은 25입니다. -
ax (Any | None) – MPL 백엔드에서만 사용됩니다. 시각화 출력에 사용될 선택적
matplotlib.axes.Axes객체. 지정된 것이 없으면 새로운 matplotlib Figure가 생성되어 사용됩니다. 또한, 명시된 경우 중복되므로 반환되는 그림은 없습니다. -
initial_state (bool) – 큐비트 선의 시작 부분에 를, 고전적 선에는 를 추가합니다. 기본값은
False입니다. -
cregbundle (bool | None) – 이 값으로 설정하면 클래식 레지스터를 묶습니다
True. 기본값은 이며True, 가 로 설정된output경우는 예외입니다"text". -
wire_order (list[int] | None) – 비트의 표시 순서를 재정렬하는 데 사용되는 정수 목록입니다. 이 목록에는 0부터 (
num_qubits+num_clbits)까지의 범위 내 모든 비트에 대한 항목이 포함되어야 합니다. -
expr_len (int) – 에서 조건으로 가 사용될
Expr경우 표시할 문자 수ControlFlowOp. 이 숫자를 초과할 경우, 문자열은 해당 숫자에서 잘리고 끝에 ‘…’가 추가됩니다. -
measure_arrows (bool | None) – True인 경우, 각 마디 상자에서 마디 값이 배치된 클래식 비트나 레지스터까지 화살표를 그립니다. False인 경우 화살표를 그리지 말고, 대신 비트 또는 레지스터의 이름을 측정 상자에 입력합니다. 사용자 설정 파일(보통
~/.qiskit/settings.conf)에 다른 값이 설정되어 있지 않은True한, 기본값은 입니다. 예:circuit_measure_arrows = False. -
barrier_label_len (int) – 출력 회로에서
Barrier레이블에 표시할 문자 수. 이 숫자를 초과할 경우, 문자열은 해당 숫자에서 잘리고 끝에 ‘…’가 추가됩니다.
리턴
TextDrawing 또는 matplotlib.figure 또는 PIL.Image 또는 str:
-
TextDrawing(output='text')아씨 아트로 인쇄할 수 있는 그림입니다.
-
matplotlib.figure.Figure(output='mpl')회로도를 위한 matplotlib 그림 객체입니다.
-
PIL.Image(output='latex')회로도 이미지의 인메모리 표현입니다.
-
str(output='latex_source')회로도를 시각화하기 위한 LaTeX 소스 코드입니다.
레이즈
- VisualizationError - 잘못된 출력 방법을 선택한 경우
- ImportError – 출력 메서드가 설치되지 않은 라이브러리를 필요로 할 때 발생합니다.
예제
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
qc = QuantumCircuit(1, 1)
qc.h(0)
qc.measure(0, 0)
qc.draw(output='mpl', style={'backgroundcolor': '#EEEEEE'})
핵심 draw() 드라이버 외에도 시각화 관련 도우미 메서드가 두 개 있는데, 주로 내부 지침을 빠르게 풀거나 도면의 큐비트 레이블 규칙을 뒤집는 데 유용합니다. 베이스 게이트 재작성을 포함한 보다 일반적인 변이의 경우 트랜스파일러(qiskit.transpiler).
decompose
decompose(gates_to_decompose=None, reps=1)
이 회로에서 분해 패스를 호출하여 한 레벨을 분해합니다(얕은 분해).
매개변수
- gates_to_decompose (str |type[Instruction] | Sequence[str |type[Instruction]] | None) – 분해할 게이트의 선택적 부분 집합. 게이트 유형(예:
HGate)이나 게이트 이름(“h” 등), 게이트 레이블(“My H Gate” 등) 또는 이 모든 것의 임의의 조합으로 구성된 목록일 수 있습니다. 게이트 이름이 입력되면, 해당 이름을 가진 모든 게이트가 레이블이 있든 없든 상관없이 분해됩니다. 기본값은 회로 내의 모든 게이트입니다. - reps (int) – 회로를 분해할 횟수(선택 사항). 예를 들어, 는 를 호출하는 것과 같습니다
reps=2``circuit.decompose().decompose().
리턴
한 단계 분해된 회로
리턴 유형
reverse_bits
reverse_bits()
전선 순서가 반대인 회로를 반환합니다.
회로가 "수직으로" 뒤집힙니다. 회로가 여러 레지스터에 걸쳐 정의된 경우 결과 회로는 동일한 레지스터를 가지지만 순서가 뒤바뀝니다.
이 방법은 리틀 엔디안 규칙으로 작성된 회로를 빅 엔디안으로 변환하거나 그 반대로 변환할 때 유용합니다.
리턴
비트 순서가 반전된 회로입니다.
리턴 유형
예제
입력:
┌───┐
a_0: ┤ H ├──■─────────────────
└───┘┌─┴─┐
a_1: ─────┤ X ├──■────────────
└───┘┌─┴─┐
a_2: ──────────┤ X ├──■───────
└───┘┌─┴─┐
b_0: ───────────────┤ X ├──■──
└───┘┌─┴─┐
b_1: ────────────────────┤ X ├
└───┘출력:
┌───┐
b_0: ────────────────────┤ X ├
┌───┐└─┬─┘
b_1: ───────────────┤ X ├──■──
┌───┐└─┬─┘
a_0: ──────────┤ X ├──■───────
┌───┐└─┬─┘
a_1: ─────┤ X ├──■────────────
┌───┐└─┬─┘
a_2: ┤ H ├──■─────────────────
└───┘매개변수