Skip to main content
IBM Quantum Platform

QkTarget

typedef struct QkTarget QkTarget

백엔드의 특정 제약 조건을 나타내는 명령어와 속성의 매핑입니다. 그 목적은 컴파일러가 입력 회로를 QkTarget의 사양을 고려하여 최적화된 다른 회로로 컴파일할 수 있는 정보를 컴파일러에 제공하는 것입니다. 이 구조는 Rust의 기본 Target 데이터 구조에 대한 로우 레벨 인터페이스를 나타내며, Python 대응하는 기본 클래스를 나타냅니다, Target.

다음은 이 구조가 어떻게 작동하는지에 대한 예시입니다:

#include <qiskit.h>
#include <math.h>

// Create a Target with 2 qubits
QkTarget *target = qk_target_new(2);
// Create an entry for a CX Gate with qargs (0, 1) and properties
// duration = 0.0123
// error = NaN
uint32_t qargs[2] = {0, 1};
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
qk_target_entry_add_property(entry, qargs, 2, 0.0123, NAN);

// Add a CX Gate to the target
qk_target_add_instruction(target, entry);

// Add a global H gate
qk_target_add_instruction(target, qk_target_entry_new(QkGate_H));

// Free the created target.
qk_target_free(target);

Target C API는 현재 매개 변수가 없거나 고정된 매개 변수가 있는 QkGate 인스턴스 추가만 지원합니다. 향후 일반 매개변수에 대한 지원이 추가될 예정입니다. Rust 데이터 모델 기능을 개선함에 따라 이 기능은 시간이 지남에 따라 계속 확장될 예정입니다.


데이터 유형.

QkInstructionProperties

struct QkInstructionProperties

대상 작업의 명령어 속성을 나타내는 표현.

이중 지속 시간

지정된 큐비트 집합에 대한 명령의 지속 시간(초). 속성이 정의되지 않은 경우 NaN 로 설정됩니다.

이중 오류

지정된 큐비트 집합에 대한 명령어의 평균 오류율. 속성이 정의되지 않은 경우 NaN 로 설정됩니다.

QkTargetOp

struct QkTargetOp

대상 내에서 식별된 작업의 표현

이 구조체는 기본 Target API에 의해 네이티브로 생성되며, 사용자는 이를 직접 쓰거나 속성을 수동으로 해제하려고 시도해서는 안 됩니다. 이는 정의되지 않은 동작을 초래할 수 있습니다. 이 구조체를 해제하려면 사용자는 대신 qk_target_op_clear 호출해야 합니다.

QkOperationKind op_type

현재 작업의 식별자.

char *name

오퍼레이션의 이름입니다.

uint32_t num_qubits

이 연산이 지원하는 큐비트 수. 가변 인수인 경우 기본값으로 (uint32_t)-1 를 사용합니다.

const QkParam **params

이 작업과 관련된 매개변수는 다음과 QkParam같습니다. 매개변수가 없는 경우, 이 값은 NULL 포인터로 표현됩니다.

uint32_t num_params

이 작업이 지원하는 매개변수의 수. 가변 인수인 경우 기본값으로 (uint32_t)-1 를 사용합니다.


함수

qk_target_new

QkTarget *qk_target_new(uint32_t num_qubits)

주어진 큐비트 수로 QkTarget 를 새로 생성합니다. 인덱스가 지정된 큐비트 수보다 높은 쿼릿 컬렉션에 적용되는 속성을 가진 명령어가 추가되면 큐비트 수가 변경될 수밖에 없습니다

QkTarget *target = qk_target_new(5);

매개변수

  • num_쿼비트 - QkTarget 에서 명시적으로 지원하는 큐비트 수입니다.

리턴

새로운 QkTarget

qk_target_borrow_from_python

QkTarget *qk_target_borrow_from_python(PyObject *ob)

Python 객체에서 QkTarget 포인터를 가져옵니다.

이 코드는 Python 참조를 가져와, 해당 참조가 올바른 유형일 경우 그 QkTarget 포인터를 추출합니다. 반환된 포인터는 해당 ob 포인터에서 빌려온 것입니다. 의 유형이 올바르지 않은 PyObject 경우, 반환 값은 이 NULL 되며 Python 인터프리터의 예외 상태가 설정됩니다.

이 함수를 호출하려면 Python 인터프리터가 연결되어 있어야 합니다.

또한 를 사용할 수도 있습니다 qk_target_convert_from_python. 이는 논리적으로는 이 함수와 완전히 동일하지만, Python 변환 함수 계열에 PyArg_Parse* 대한 “변환기” 함수로 직접 사용할 수 있습니다.

안전

호출자는 Python 인터프리터에 연결되어 있어야 합니다. 가 Python 객체를 가리키는 유효한 비공백 포인터가 아닌 ob 경우 동작이 정의되지 않습니다.

매개변수

  • ob – 차용된 Python 객체.

리턴

네이티브 객체에 대한 포인터이거나, NULLPython 객체의 유형이 올바르지 않은 경우.

qk_target_convert_from_python

int qk_target_convert_from_python(PyObject *object, void *address)

Python 객체에서 Target 포인터를 가져옵니다.

이 코드는 Python 참조를 가져와, 해당 QkTarget 포인터가 올바른 유형인 경우 이를 address``로 추출합니다. 반환된 포인터는 해당 object 포인터에서 빌려온 것입니다. 의 PyObject 유형이 올바르지 않은 경우, 반환 값은 1이 되며, Python 인터프리터의 예외 상태가 설정되고 는 변경되지 address 않습니다.

이 함수를 호출하려면 Python 인터프리터가 연결되어 있어야 합니다.

또한 를 qk_target_borrow_from_python사용할 수도 있는데, 이는 논리적으로는 이와 완전히 동일하지만 직접 사용할 때 더 자연스러운 시그니처를 갖습니다.

안전

호출자는 Python 인터프리터에 연결되어 있어야 합니다. 가 유효한 null이 아닌 Python 객체 포인터가 object 아니거나, 가 올바른 유형의 쓰기 가능한 address 데이터에 대한 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 객체 – 빌려온 Python 객체.
  • 주소 – 출력을 기록할 위치.

리턴

성공 시 1, 실패 시 0.

qk_target_num_qubits

uint32_t qk_target_num_qubits(const QkTarget *target)

QkTarget 의 큐비트 수를 반환합니다.

QkTarget *target = qk_target_new(5);
uint32_t num_qubits = qk_target_num_qubits(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.

리턴

이 타겟이 사용할 수 있는 큐비트 수입니다.

qk_target_dt

double qk_target_dt(const QkTarget *target)

QkTarget 의 dt 값을 반환합니다.

QkTarget *target = qk_target_new(5);
qk_target_set_dt(target, 10e-9);
double dt = qk_target_dt(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.

리턴

이 dt 값 QkTarget 또는 지정되지 않은 경우 NAN .

qk_target_granularity

uint32_t qk_target_granularity(const QkTarget *target)

QkTarget 의 세분성 값을 반환합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t granularity = qk_target_granularity(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.

리턴

QkTargetgranularity 값입니다.

qk_target_min_length

uint32_t qk_target_min_length(const QkTarget *target)

QkTargetmin_length 값을 반환합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 1
size_t min_length = qk_target_min_length(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.

리턴

QkTargetmin_length 값입니다.

qk_target_pulse_alignment

uint32_t qk_target_pulse_alignment(const QkTarget *target)

QkTargetpulse_alignment 값을 반환합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t pulse_alignment = qk_target_pulse_alignment(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.

리턴

QkTargetpulse_alignment 값입니다.

qk_target_acquire_alignment

uint32_t qk_target_acquire_alignment(const QkTarget *target)

QkTargetacquire_alignment 값을 반환합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 0
uint32_t acquire_alignment = qk_target_pulse_alignment(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.

리턴

QkTargetacquire_alignment 값입니다.

qk_target_set_dt

QkExitCode qk_target_set_dt(QkTarget *target, double dt)

QkTarget 의 dt 값을 설정합니다.

QkTarget *target = qk_target_new(5);
double dt = qk_target_set_dt(target, 10e-9);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • dt - 입력의 시스템 시간 해상도에 대한 dt 값입니다.

리턴

QkExitCode 작업 성공 여부를 지정합니다.

qk_target_set_granularity

QkExitCode qk_target_set_granularity(QkTarget *target, uint32_t granularity)

QkTargetgranularity 값을 설정합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_granularity(target, 2);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • 세분성 - 최소 펄스 게이트 해상도( dt) 단위의 값입니다.

리턴

QkExitCode 작업 성공 여부를 지정합니다.

qk_target_set_min_length

QkExitCode qk_target_set_min_length(QkTarget *target, uint32_t min_length)

QkTargetmin_length 값을 설정합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_min_length(target, 3);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • 최소_길이 - 최소 펄스 게이트 길이 값( dt 단위).

리턴

QkExitCode 작업 성공 여부를 지정합니다.

qk_target_set_pulse_alignment

QkExitCode qk_target_set_pulse_alignment(QkTarget *target, uint32_t pulse_alignment)

QkTargetpulse_alignment 값을 반환합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_pulse_alignment(target, 4);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • pulse_alignment - 게이트의 시간 분해능을 나타내는 값입니다.

리턴

QkExitCode 작업 성공 여부를 지정합니다.

qk_target_set_acquire_alignment

QkExitCode qk_target_set_acquire_alignment(QkTarget *target, uint32_t acquire_alignment)

QkTargetacquire_alignment 값을 설정합니다.

QkTarget *target = qk_target_new(5);
// The value defaults to 0
qk_target_set_acquire_alignment(target, 5);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • 획득_정렬 - 측정 명령 시작 시간의 시간 분해능을 나타내는 값입니다.

리턴

QkExitCode 작업 성공 여부를 지정합니다.

qk_target_copy

QkTarget *qk_target_copy(QkTarget *target)

QkTarget 의 복사본을 만듭니다.

QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
QkExitCode result = qk_target_add_instruction(target, entry);

QkTarget *copied = qk_target_copy(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - 복사할 QkTarget 포인터입니다.

리턴

QkTarget 의 새 복사본에 대한 포인터입니다.

qk_target_free

void qk_target_free(QkTarget *target)

QkTarget.

QkTarget *target = qk_target_new(5);
qk_target_free(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - 무료에 대한 QkTarget 포인터입니다.

qk_target_add_instruction

QkExitCode qk_target_add_instruction(QkTarget *target, QkTargetEntry *target_entry)

QkTargetEntry 을 통해 QkTarget 에 게이트를 추가합니다.

QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
QkExitCode result = qk_target_add_instruction(target, entry);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

entryQkTargetEntry 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • target_entry - QkTargetEntry 에 대한 포인터입니다. QkTarget 에 추가하면 포인터가 해제됩니다.

리턴

QkExitCode 작업 성공 여부를 지정합니다.

qk_target_update_property

QkExitCode qk_target_update_property(QkTarget *target, QkGate instruction, uint32_t *qargs, uint32_t num_qubits, double duration, double error)

QkTarget 에서 게이트의 속성을 수정합니다.

QkTarget *target = qk_target_new(5);
double params[1] = {3.1415};
QkTargetEntry *entry = qk_target_entry_new_fixed(QkGate_CRX, params, "crx_pi");
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

qk_target_update_property(target, QkGate_CRX, qargs, 2, 0.0012, 1.1);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

qargs 유형은 길이가 num_qubits 에 지정된 uint32_t 의 배열에 대한 포인터로 예상되며 게이트의 기대치와 일치해야 합니다. 배열이 충분히 길지 않으면 배열의 범위를 벗어나 읽히므로 이 함수의 동작이 정의되지 않습니다. 주어진 게이트에 큐비트가 없는 경우 널 포인터가 될 수 있습니다. qk_gate_num_qubits 에서 특정 게이트에 필요한 큐비트 수를 확인할 수 있습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • 명령어 - 수정할 명령어입니다.
  • qargs - qargs로 사용할 uint32_t 값의 배열에 대한 포인터입니다. 글로벌인 경우 NULL .
  • 숫자_큐비트 - 인스트럭션의 큐비트 수입니다.
  • 기간 - 특정 큐비트 집합에 대한 인스트럭션의 기간(초)입니다.
  • 오류 - 특정 큐비트 집합에 대한 인스트럭션의 평균 오류율입니다.

리턴

QkExitCode 작업 성공 여부를 지정합니다.

qk_target_num_instructions

size_t qk_target_num_instructions(const QkTarget *target)

QkTarget 에서 추적한 인스트럭션의 수를 반환합니다.

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

size_t num_instructions = qk_target_num_instructions(target);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.

리턴

대상의 길이입니다.

qk_target_instruction_supported

bool qk_target_instruction_supported(const QkTarget *target, const char *operation_name, const uint32_t *qargs, QkParam **params)

제공된 명령어와 그 qargs가 이 명령어에 의해 Target지원되는지 확인합니다.

// Create a mock target with only a global crx entry
// and 3.14 as its rotation parameter.
QkTarget *target = qk_target_new(5);
QkTargetEntry *crx_entry = qk_target_entry_new_fixed(QkGate_CRX, (double[]){3.14});
qk_target_entry_add_property(crx_entry, NULL, 0, 0.0, 0.1);
qk_target_add_instruction(target, crx_entry);

// Check if target is compatible with a "crx" gate
// at [0, 1] with 3.14 rotation.
QkParam *params[1] = {qk_param_from_double(3.14)};
qk_target_instruction_supported(target, "crx", (uint32_t []){0, 1}, params);

// Free the pointers
qk_param_free(params[0]);
qk_target_free(target);

안전

가 유효한 null이 아닌 포인터가 아닐 QkTarget target 경우 동작은 정의되지 않습니다.

인수는 qargs 게이트의 기대 길이와 일치하는 u32int_t 배열의 포인터여야 합니다. 배열의 길이가 충분하지 않을 경우, 이 함수는 배열 경계를 벗어난 영역을 읽게 되므로 동작이 정의되지 않습니다. 주어진 게이트에 대한 큐비트가 존재하지 않을 경우, 이는 null 포인터일 수 있습니다. 주어진 게이트에 필요한 큐비트 수를 확인하려면 qk_gate_num_qubits 를 참조하십시오.

인수는 params 해당 연산의 기대값과 길이가 일치하는 QkParam 배열이어야 합니다. 배열의 길이가 충분하지 않은 경우, 위에서 인수에 qargs 대해 언급한 바와 같이 동작이 정의되지 않습니다. 항상 확인할 수 있습니다 qk_gate_num_params``QkGate .

매개변수

  • 대상 –. Target에 대한 포인터
  • operation_name – 확인할 명령어 이름.
  • qargs - qargs로 사용할 uint32_t 값의 배열에 대한 포인터입니다. 글로벌인 경우 NULL .
  • params – 검사할 QkParam 객체들의 포인터 배열에 대한 포인터. 매개변수가 없을 경우 NULL 가능합니다.

리턴

해당 명령어가 지원되는지 여부.

qk_target_op_index

size_t qk_target_op_index(const QkTarget *target, const char *name)

작업을 이름 기반으로 찾아 해당 작업이 위치한 인덱스를 반환합니다.

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

size_t op_idx = qk_target_op_index(target, "h");

안전

가 유효한 null이 아닌 포인터가 아닐 QkTarget QkTarget 경우 동작은 정의되지 않습니다. 가 유효한 널 종결 문자열에 대한 포인터가 아닐 경우 name 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • name – 인덱스를 가져올 이름.

리턴

해당 연산이 대상에 포함되지 않은 경우, 해당 size_t 연산의 최대값을 가지는 인덱스.

qk_target_op_name

char *qk_target_op_name(const QkTarget *target, size_t index)

해당 QkTarget 인스턴스의 게이트 맵에서 해당 인덱스에 저장된 연산의 이름을 반환합니다.

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

char *op_name = qk_target_op_name(target, 0);
// Free after use
qk_str_free(op_name);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • 인덱스 – 게이트가 저장된 인덱스.

리턴

제공된 인덱스와 연관된 작업의 이름.

qk_target_op_num_properties

size_t qk_target_op_num_properties(const QkTarget *target, size_t index)

a.k.a QkTarget 인스턴스에서 지정된 작업에 대해 정의된 속성의 수를 반환합니다. 부동산 지도의 길이. 작업 인덱스가 존재하지 않으면 패닉 상태가 됩니다.

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

size_t num_props = qk_target_op_num_properties(target, 0);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • 인덱스 – 게이트가 저장된 인덱스.

리턴

해당 인덱스와 연관된 작업에 지정된 속성 수.

qk_target_op_qargs_index

size_t qk_target_op_qargs_index(const QkTarget *target, size_t op_idx, const uint32_t *qargs)

일부 qargs가 저장된 인덱스를 검색합니다. 찾을 수 없는 경우 SIZE_MAX 반환합니다.

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

size_t idx_0_1 = qk_target_op_qargs_index(target, 0, qargs);

안전

QkTargetQkTarget 에 대한 유효한 널이 아닌 포인터가 아닌 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • op_idx – 작업이 저장된 인덱스.
  • qargs – 검사할 큐비트 uint32_t 인덱스 배열에 대한 포인터. 전역 속성을 검사하려면 null 포인터로 지정할 수 있습니다.

리턴

지정된 op_idx 인덱스의 명령어와 연관된 qargs의 인덱스 또는 qargs가 SIZE_MAX 존재하지 않을 경우.

qk_target_op_qargs

void qk_target_op_qargs(const QkTarget *target, size_t op_idx, size_t qarg_idx, uint32_t **qargs_out, uint32_t *qargs_len)

인덱스로 작업에 대한 qargs를 검색합니다.

어떤 인덱스라도 범위를 벗어날 경우 경보를 발생시킵니다.

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

uint32_t *qargs_retrieved;
uint32_t qargs_length;
qk_target_op_qargs(target, 0, 0, &qargs_retrieved, &qargs_length);
if (qargs_retrieved) {
    // We should enter this branch.
    printf("Number of qargs: %lu\n", qargs_length);
} else {
    printf("Qargs are global\n");
}

안전

가 유효한 null이 아닌 포인터가 아닐 QkTarget target 경우 동작은 정의되지 않습니다. 각각 qargs_out 또는 qargs_len 가 올바른 유형의 단일 값에 대해 정렬되고 쓰기 가능하지 않은 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • op_idx – 게이트가 저장된 인덱스.
  • qarg_idx – qargs가 저장되는 인덱스.
  • qargs_out – 배열 큐비트에 대한 출력 포인터. 전역 작업에 대한 참조인 op_idx 경우, null 포인터가 기록됩니다. 서면 포인터는 대상에서 차용된 것이므로 해제해서는 안 됩니다. 제로 qargs 명령어는 비어 있지 않은 포인터를 출력하지만, 읽기에는 유효하지 않은 포인터입니다.
  • qargs_len – qargs의 길이를 가리키는 출력 포인터 qargs_out. 인덱스가 전역인 경우, 기록된 길이는 정의되지 않습니다.

qk_target_op_props

void qk_target_op_props(const QkTarget *target, size_t op_idx, size_t qarg_idx, QkInstructionProperties *inst_props)

해당 인덱스에 저장된 작업에 대한 qargs를 검색합니다.

어떤 인덱스라도 범위를 벗어날 경우 경보를 발생시킵니다.

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

QkInstructionProperties inst_props;
qk_target_op_props(target, 0, 0, &inst_props);

안전

가 유효한 null이 아닌 포인터가 아닐 QkTarget target 경우 동작은 정의되지 않습니다. 가 를 저장할 QkInstructionProperties 수 있는 올바른 크기의 주소를 가리키지 않을 inst_props 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • op_idx – 게이트가 저장된 인덱스.
  • qarg_idx – qargs가 저장되는 인덱스.
  • inst_propsQkInstructionProperties 인스턴스를 기록하기 위한 포인터.

qk_target_op_get

void qk_target_op_get(const QkTarget *target, size_t index, QkTargetOp *out_op)

인덱스를 통해 대상(Target) 내 작업에 대한 정보를 검색합니다. 인덱스가 존재하지 않으면 이 함수는 패닉 상태가 됩니다. 명령어의 총 QkTarget 개수는 를 qk_target_num_instructions사용하여 확인할 수 있습니다.

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

QkTargetOp op;
qk_target_op_get(target, 0, &op);

// Clean up after you're done
qk_target_op_clear(&op);

안전

가 유효한 null이 아닌 포인터가 아닐 QkTarget target 경우 동작은 정의되지 않습니다. 가 를 저장할 QkTargetOp 수 있는 올바른 크기의 주소를 가리키지 않을 out_op 경우 동작이 정의되지 않습니다.

매개변수

  • 대상 - QkTarget 에 대한 포인터입니다.
  • 인덱스 – 게이트가 저장된 인덱스.
  • out_op – 저장될 QkTargetOp 공간을 가리키는 포인터.

qk_target_op_gate

QkGate qk_target_op_gate(const QkTarget *target, size_t index)

인덱스에 저장된 작업에 기반하여 QkGate 를 검색하려고 시도합니다. 사용자는 이 작업이 via QkTarget 내의 게이트인지 여부를 를 사용하여 확인해야 qk_target_op_get 합니다. 그렇지 않으면 이 함수는 패닉 상태가 됩니다.

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

QkTargetOp op;
qk_target_op_get(target, 0, &op);

// Check if the operation is a gate;
if (op.op_type == QkOperationKind_Gate) {
    QkGate gate = qk_target_op_gate(target, 0);
    // Do something
}

// Clean up after you're done.
qk_target_op_clear(&op);

안전

포인터가 target null이거나 정렬되지 않은 경우 동작이 정의되지 않습니다.

매개변수

  • target – 인스턴스 Target 포인터.
  • 인덱스 – 작업이 위치한 인덱스.

리턴

해당 인덱스의 QkGate 열거형.

qk_target_op_clear

void qk_target_op_clear(QkTargetOp *op)

객체를 QkTargetOp 지웁니다.

안전

포인터가 null이거나 정렬되지 않은 경우 동작이 정의되지 않습니다. 에 속하는 데이터는 QkTargetOp Rust에서 생성되며, 이 함수를 통해서만 해제될 수 있습니다.

매개변수

  • op – 객체에 QkTargetOp 대한 포인터.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.