Samplex
class samplomatic.samplex.Samplex
베이스: object
회로 파라미터 및 기타 필드에 대한 확률 분포를 나타냅니다.
Samplex 이는 samplomatic 라이브러리의 핵심 유형입니다. 이는 “샘플링 컴플렉스”의 합성어입니다.
추상적인 관점에서 볼 때, 샘플렉스(samplex)는 특정 템플릿 회로의 매개변수에 대한 매개변수 확률 분포를 나타낼 뿐만 아니라, 바인딩된 템플릿 회로의 실행을 통해 수집된 데이터를 후처리하는 데 사용되는 기타 배열 값 필드도 나타냅니다. 실질적으로, 이 함수는 해당 분포에서 값을 추출하여 템플릿 회로에 유효한 (무작위) 각도 배열을 최소한 하나 이상 포함하는 배열 모음을 생성하는 sample() 메서드를 구현합니다. 예를 들어, samplex 인스턴스는 최종 측정을 포함한 특정 기본 회로의 모든 계층에서 파울리 트위를링(Pauli twirling)을 구현할 수 있습니다. 이를 통해 해당 인스턴스에서 샘플링하여 반환되는 각도는, 기본 회로에 존재하는 모든 단일 큐비트 게이트와 조합된 파울리 게이트에 해당하며, 측정 트위를링으로 인해 반전된 측정 결과를 어떻게 반전시킬지 설명하는 부울 배열도 함께 포함됩니다. 그러나 이 라이브러리의 의미론은 이에 국한되지 않으며, 구조 또한 확장성이 매우 뛰어나서 새로운 그룹 유형, 새로운 분포, 새로운 가상 게이트 전파 기법 등을 라이브러리에 추가할 수 있습니다.
내부적으로, 샘플렉스는 샘플링 과정을 절차적으로 설명하는 방향성 비순환 그래프(DAG) 표현 방식을 사용합니다. 그래프의 각 노드는 VirtualRegisters의 집합과 상호작용하며, 노드 간의 연결은 레지스터 의존성을 나타냅니다. 즉, 인 경우, 는 가 해당 레지스터에 먼저 작용해야만 비로소 작용할 수 있습니다. 이는 그래프의 흐름이 양자 회로의 DAG처럼 실행에 따른 시간적 순서를 따르는 것이 아니라, 무작위화를 생성하는 노드에서 처리된 무작위화를 출력으로 생성하는 노드로 흐른다는 것을 의미합니다. 노드에는 세 가지 유형이 있습니다.
SamplingNodes는 입력값을 바탕으로 새로운 레지스터를 생성하는 역할을 하며,EvaluationNodes는 레지스터의 변환, 결합 및 제거를 담당하며,CollectionNodes는 판독 레지스터를 담당하며 출력 값에 쓰기를 수행합니다sample().
Samplex는 일반적으로 주석이 달린 박스 명령어가 포함된 기본 회로를 함수에 build() 전달함으로써 생성됩니다. 수동으로 생성하는 것도 가능하지만 번거로운 작업이며, 이 경우 사용자는 템플릿 회로로 사용할 호환 가능한 파라메트릭 양자 회로를 직접 구성해야 할 책임도 지게 됩니다. 다음 예제는 function build() 을 사용하여 샘플렉스와 템플릿 쌍으로 구성된 간단한 회로를 보여주고, 그 결과로 생성된 샘플렉스의 DAG를 그래프로 표시합니다. 위에서 설명한 세 가지 유형의 노드는 각기 다른 모양으로 표시됩니다.
>>> from samplomatic import build, Twirl
>>> from qiskit import QuantumCircuit
>>>
>>> circuit = QuantumCircuit(2)
>>> with circuit.box([Twirl()]):
... circuit.cz(0, 1)
>>> with circuit.box([Twirl()]):
... circuit.measure_all()
>>>
>>> template, samplex = build(circuit)
>>> samplex.draw()DAG가 이 객체의 데이터 모델에서 핵심 구성 요소이긴 하지만, 그 외에도 다음과 같은 정보가 저장됩니다:
- 샘플렉스 자체는 파라메트릭일 수 있으며(참조
parameters), 파라미터 표현식을 평가할 수 있는데, 이 모든 내용은 샘플렉스에 저장됩니다. 예를 들어,build()를 통해 생성된 샘플렉스는 기본 회로가 허용하는 모든 매개변수에 대한 값을 허용합니다. - 특정
sample()시점에 입력으로 어떤 값이 예상되는지, 그리고 어떤 값이 반환될지를 정확히 설명하는 입력 및 출력 사양은 및inputs()을 참조하십시오outputs(). - 샘플렉스의 샘플링 요구 사항과 호환되는 소음 모델의 유형을 명시하는 소음 모델 요구 사항.
속성 요약
칼럼 1 | 칼럼 2 |
|---|---|
num_parameters | 샘플링 시점에 예상되는 매개변수의 개수. |
param_table | 이 샘플렉스의 매개변수 표현식을 ParameterExpressionTable 소유하고 있습니다. |
parameters | 샘플링 시점에 값이 지정되어야 하는 정렬된 매개변수들. |
passthrough_params | 패스스루 템플릿 매개변수를 제어하는 인덱스 매핑입니다. |
방법 요약
칼럼 1 | 칼럼 2 |
|---|---|
add_edge(a, b) | 샘플렉스 그래프에 변을 하나 추가하십시오. |
add_input(사양) | 이 샘플렉스에 샘플링 입력을 추가하세요. |
add_node(노드) | samplex 그래프에 노드를 추가합니다. |
add_output(사양) | 이 samplex에 샘플링 출력을 추가하세요. |
append_parameter_expression(표현) | samplex에 매개변수 표현식을 추가합니다. |
draw([cols, subgraph_idxs, layout_method]) | 이 예제에서 해당 방법을 plot_graph() 사용하여 그래프를 그려 보세요. |
finalize() | 모든 노드와 에지가 추가되었음을 알리고, 노드 순회 순서를 결정합니다. |
inputs() | 의 필수 입력값을 지정하고 이를 구성하는 데 도움을 주는 객체를 반환합니다 sample(). |
outputs() | 의 약속된 출력을 지정하는 객체를 반환합니다 sample(). |
sample([samplex_input, num_randomizations, ...]) | 예시. |
set_passthrough_params(passthrough_params) | 패스스루 매개변수에 대한 매핑을 설정합니다. |
속성 설명서
num_parameters
샘플링 시점에 예상되는 매개변수의 개수.
param_table
이 샘플렉스의 매개변수 표현식을 ParameterExpressionTable 소유하고 있습니다.
인덱스별로 이 테이블의 샘플렉스 참조 항목에 파라메트릭 노드를 추가하며, 샘플링 시점에 테이블을 평가합니다 sample() . 와 결합하면 passthrough_params, 호출자는 를 호출하지 않고도 템플릿 매개변수 중 결정론적인 부분집합(예: angles RZZGate )만 평가할 수 있습니다 sample(). 또한 및 parameters 을 참조하십시오 append_parameter_expression().
parameters
샘플링 시점에 값이 지정되어야 하는 정렬된 매개변수들.
passthrough_params
패스스루 템플릿 매개변수를 제어하는 인덱스 매핑입니다.
길이가 같고 위치가 정렬된 두 정수 배열을 반환합니다 (template_idxs, expression_idxs). 템플릿 매개변수 인덱스에 해당하는 값은 인덱스에 있는 param_table 표현식의 값을 사용하여 sample() 설정됩니다 template_idxs[i] ( expression_idxs[i] 참조 set_passthrough_params()).
패스스루 매개변수가 등록되어 있지 않으면 두 배열 모두 비어 있습니다. 반환된 배열들은 내부 상태의 독립적인 복사본입니다.
방법 문서
add_edge
add_edge(a: int, b: int) → int
샘플렉스 그래프에 변을 하나 추가하십시오.
매개변수
- a – 소스 노드의 노드 인덱스.
- b – 대상 노드의 노드 인덱스.
리턴
추가된 에지의 정수 인덱스.
add_input
add_node
add_output
append_parameter_expression
append_parameter_expression(expression: ParameterExpression) → int
samplex에 매개변수 표현식을 추가합니다.
노드를 추가하기 전에, 해당 노드가 참조할 샘플렉스에 표현식을 추가해야 합니다. 주어진 매개변수 표현식에 나타나는 새로운 매개변수마다 정렬된 순서대로 parameters 항목이 삽입됩니다.
매개변수
표현식 – 매개변수 또는 매개변수 표현식.
리턴
파라메트릭 노드가 평가된 식을 참조하는 데 사용할 수 있는 인덱스입니다.
draw
draw(cols: int = 2, subgraph_idxs: None | int | Sequence[int] = None, layout_method: Literal['auto', 'spring', 'graphviz', 'graphviz_curved', 'graphviz_line'] | LayoutMethod = 'auto') → Figure
이 예제에서 해당 방법을 plot_graph() 사용하여 그래프를 그려 보세요.
매개변수
- cols – 반환된 그림의 열 수.
- subgraph_idxs – 플롯에 포함할 부분 그래프의 인덱스, 또는 모든 부분 그래프를 포함할
None경우. - layout_method – 이름으로 지정된 미리 정의된 레이아웃 메서드이거나, 레이아웃을 구현하는 호출 가능한 객체입니다.
리턴
Plotly 그래프.
finalize
finalize() → Self
모든 노드와 에지가 추가되었음을 알리고, 노드 순회 순서를 결정합니다.
인상
SamplexError – 노드 종속성 충돌이 발견된 경우.
리턴
연쇄 처리를 위한 동일한 인스턴스입니다.
inputs
inputs() → TensorInterface
의 필수 입력값을 지정하고 이를 구성하는 데 도움을 주는 객체를 반환합니다 sample().
리턴
이 샘플렉스의 입력 인터페이스입니다.
outputs
sample
sample(samplex_input: Mapping[str, Any] | None = None, num_randomizations: int = 1, rng: int | SeedSequence | Generator | None = None, keep_registers: bool = False, max_workers: int | None = None) → SamplexOutput
예시.
다음 예제는 이 메서드 호출 방법을 보여주기 위해 두 개의 매개변수를 가진 간단한 회로를 샘플렉스로 구성합니다. 특히, 타입 및 배열 모양 정보를 모두 포함하는 samplex 노드에 필요한 입력값들은 에 나열되어 있으며 inputs(), 해당 값들로 바인딩되어야 한다는 점에 유의하십시오.
>>> from samplomatic import build, Twirl
>>> from qiskit.circuit import QuantumCircuit, Parameter
>>>
>>> # quickly make a circuit and build it to construct an example simplex
>>> circuit = QuantumCircuit(2)
>>> with circuit.box([Twirl()]):
... circuit.rx(Parameter("a"), 0)
... circuit.rx(Parameter("b"), 0)
... circuit.cz(0, 1)
>>> with circuit.box([Twirl()]):
... circuit.measure_all()
>>>
>>> template, samplex = build(circuit)
>>>
>>> # query the samplex for the expected inputs at sample time, and note that we
>>> # are required to pass a length-2 vector of floats for 'a' and 'b' (alphabetical)
>>> print(inputs := samplex.inputs())
TensorInterface(<
- 'parameter_values' <float64[2]>: Input parameter values to use during sampling.
>)>>> # after binding required values, we can sample 123 randomizations
>>> samplex.sample(
... inputs.bind(parameter_values=[0.1, 0.2]),
... num_randomizations=123,
... )
SamplexOutput({'measurement_flips.meas': ..., 'parameter_values': ...})>>> # alternatively, we can provide any mapping object directly to specify inputs
>>> samplex.sample(
... {"parameter_values": [0.1, 0.2]},
... num_randomizations=123,
... )
SamplexOutput({'measurement_flips.meas': ..., 'parameter_values': ...})매개변수
- samplex_input – 입력 이름과 입력 값 간의 매핑으로, (
inputs()Samplex 입력 및 출력 가이드 참조)에 설명된 대로이며, 입력이 필요하지 않은 경우에는None로 지정합니다. 마침표가 포함된 이름은 중첩된 사전 확장을 사용할 수 있습니다.TensorInterface는 매핑 객체이므로, 완전히 바인딩된 상태에서는 유효한 입력 인자임을 유의하십시오. - num_randomizations – 표본 추출에 사용할 무작위 배정 횟수.
- keep_registers – 샘플링 중에 사용된 가상 레지스터를 유지하고, 이를 메타데이터 키 아래에 출력물에 포함시킬지 여부
"registers". - rng – 난수 생성기의 시드 값으로 사용할 정수, 생성기 자체, 또는 모듈이 소유한 기본 생성기를 사용하도록
None지정합니다. - max_workers – 샘플링, 평가 및 수집 노드의 병렬 실행에 사용할 수 있는 스레드의 최대 개수입니다.
set_passthrough_params
set_passthrough_params(passthrough_params: list[tuple[int | None, ParameterExpression]]) → int
패스스루 매개변수에 대한 매핑을 설정합니다.
일부 매개변수는 가상 게이트 전파의 영향을 받지 않으며, 수집 노드에 의해 설정되지도 않습니다. 이러한 매개변수들은 원래 회로의 매개변수에서 템플릿 회로의 매개변수로만 매핑됩니다. 이 함수는 해당 매개변수에 대한 매핑을 설정합니다.
매개변수
passthrough_params – 패스스루 매개변수에 대한 ParamSpec.
반환값: passthrough_params 내의 최대 템플릿 매개변수 인덱스.