QDMI v1.3.4-dev
Quantum Device Management Interface
Loading...
Searching...
No Matches
constants.h File Reference

Description

Defines constants and value types used within QDMI across the QDMI Client Interface and the QDMI Device Interface.

Go to the source code of this file.

Data Structures

struct  QDMI_Program_Format
 Exact program format accepted by a device. More...
struct  QDMI_Program_Feature
 One optional feature guarantee for an exact program format. More...

Macros

#define QDMI_CUSTOM_ENUM_VALUE_MIN   999999995
 First value in every provider-defined enum range.
#define QDMI_CUSTOM_ENUM_VALUE_MAX   INT32_MAX
 Last value in every provider-defined enum range.
#define QDMI_PROGRAM_ID_SIZE   64U
 Maximum bytes, including the terminating NUL, in a format or profile ID.
#define QDMI_MAKE_VERSION(major, minor, patch)
 Pack a Semantic Versioning major, minor, and patch release into a 32-bit exact version value.
#define QDMI_VERSION_MAJOR(version)
 Extract the Semantic Versioning major component of a packed version.
#define QDMI_VERSION_MINOR(version)
 Extract the Semantic Versioning minor component of a packed version.
#define QDMI_VERSION_PATCH(version)
 Extract the Semantic Versioning patch component of a packed version.
#define QDMI_PROGRAM_FEATURE_ID_SIZE   64U
 Maximum bytes, including the terminating NUL, in a feature ID.
#define QDMI_PROGRAM_CONSTRAINT_ID_SIZE   64U
 Maximum bytes, including the terminating NUL, in a constraint ID.
#define QDMI_PROGRAM_FEATURE_UNCONSTRAINED(feature_id, feature_value)
 Initialize an unrestricted program feature for C or C++.
#define QDMI_PROGRAM_FEATURE_MID_CIRCUIT_MEASUREMENT   "mid-circuit-measurement"
 Measure a qubit before the end of one execution.
#define QDMI_PROGRAM_FEATURE_MEASURED_QUBIT_REUSE   "measured-qubit-reuse"
 Apply a quantum operation to a measured qubit in the same execution.
#define QDMI_PROGRAM_FEATURE_MEASUREMENT_RESULT_USE   "measurement-result-use"
 Read a measurement result during the same execution.
#define QDMI_PROGRAM_FEATURE_BOOLEAN_COMPUTATION   "boolean-computation"
 Compute Boolean values during execution.
#define QDMI_PROGRAM_FEATURE_FORWARD_BRANCHING   "forward-branching"
 Select a later program region from a value computed during execution.
#define QDMI_PROGRAM_FEATURE_COUNTED_ITERATION   "counted-iteration"
 Repeat a program region a known finite number of times.
#define QDMI_PROGRAM_FEATURE_CONDITIONAL_LOOP   "conditional-loop"
 Repeat a program region based on a value computed during execution.
#define QDMI_PROGRAM_FEATURE_MULTIWAY_BRANCHING   "multiway-branching"
 Select one of more than two program regions during execution.
#define QDMI_PROGRAM_FEATURE_INTEGER_COMPUTATION   "integer-computation"
 Compute integer values during execution.
#define QDMI_PROGRAM_FEATURE_FLOAT_COMPUTATION   "float-computation"
 Compute floating-point values during execution.
#define QDMI_PROGRAM_FEATURE_IR_FUNCTIONS   "ir-functions"
 Define and call functions beyond the entry point and format-mandated declarations or runtime calls.
#define QDMI_PROGRAM_FEATURE_MULTIPLE_RETURN_POINTS   "multiple-return-points"
 Use more than one return point in one function or entry point.
#define QDMI_PROGRAM_FEATURE_DYNAMIC_QUBIT_MANAGEMENT   "dynamic-qubit-management"
 Allocate and release qubits during execution.
#define QDMI_PROGRAM_FEATURE_DYNAMIC_RESULT_MANAGEMENT   "dynamic-result-management"
 Allocate and release result handles during execution.
#define QDMI_PROGRAM_FEATURE_ARRAYS   "arrays"
 Create and access arrays during execution.
#define QDMI_PROGRAM_CONSTRAINT_MAX_CONTROL_FLOW_NESTING_DEPTH   "max-control-flow-nesting-depth"
 Limit lexical control-flow nesting depth.
#define QDMI_PROGRAM_CONSTRAINT_MAX_ITERATION_COUNT   "max-iteration-count"
 Limit the trip count of each loop.
#define QDMI_PROGRAM_CONSTRAINT_MAX_CASE_COUNT   "max-case-count"
 Limit the number of explicit cases in each multiway branch.

Typedefs

typedef enum QDMI_DEVICE_SESSION_PARAMETER_T QDMI_Device_Session_Parameter
 Device session parameter type.
typedef enum QDMI_DEVICE_JOB_PARAMETER_T QDMI_Device_Job_Parameter
 Device job parameter type.
typedef enum QDMI_DEVICE_JOB_PROPERTY_T QDMI_Device_Job_Property
 Device job property type.
typedef enum QDMI_DEVICE_PROPERTY_T QDMI_Device_Property
 Device property type.
typedef enum QDMI_DEVICE_STATUS_T QDMI_Device_Status
 Device status type.
typedef enum QDMI_SITE_PROPERTY_T QDMI_Site_Property
 Site property type.
typedef enum QDMI_OPERATION_PROPERTY_T QDMI_Operation_Property
 Operation property type.
typedef enum QDMI_JOB_STATUS_T QDMI_Job_Status
 Job status type.
typedef enum QDMI_PROGRAM_ENCODING_T QDMI_Program_Encoding
 Program encoding type.
typedef enum QDMI_JOB_RESULT_T QDMI_Job_Result
 Job result type.
typedef enum QDMI_DEVICE_PULSE_SUPPORT_LEVEL_T QDMI_Device_Pulse_Support_Level
 Pulse support level type.

Enumerations

enum  QDMI_STATUS {
  QDMI_WARN_GENERAL = 1 , QDMI_SUCCESS = 0 , QDMI_ERROR_FATAL = -1 , QDMI_ERROR_OUTOFMEM = -2 ,
  QDMI_ERROR_NOTIMPLEMENTED = -3 , QDMI_ERROR_LIBNOTFOUND = -4 , QDMI_ERROR_NOTFOUND = -5 , QDMI_ERROR_OUTOFRANGE = -6 ,
  QDMI_ERROR_INVALIDARGUMENT = -7 , QDMI_ERROR_PERMISSIONDENIED = -8 , QDMI_ERROR_NOTSUPPORTED = -9 , QDMI_ERROR_BADSTATE = -10 ,
  QDMI_ERROR_TIMEOUT = -11
}
 Status codes returned by the API. More...
enum  QDMI_DEVICE_SESSION_PARAMETER_T {
  QDMI_DEVICE_SESSION_PARAMETER_BASEURL = 0 , QDMI_DEVICE_SESSION_PARAMETER_TOKEN = 1 , QDMI_DEVICE_SESSION_PARAMETER_AUTHFILE = 2 , QDMI_DEVICE_SESSION_PARAMETER_AUTHURL = 3 ,
  QDMI_DEVICE_SESSION_PARAMETER_USERNAME = 4 , QDMI_DEVICE_SESSION_PARAMETER_PASSWORD = 5 , QDMI_DEVICE_SESSION_PARAMETER_CHILDDEVICE = 6 , QDMI_DEVICE_SESSION_PARAMETER_MAX = 7 ,
  QDMI_DEVICE_SESSION_PARAMETER_CUSTOM1 = QDMI_CUSTOM_ENUM_VALUE_MIN , QDMI_DEVICE_SESSION_PARAMETER_CUSTOM2 = 999999996 , QDMI_DEVICE_SESSION_PARAMETER_CUSTOM3 = 999999997 , QDMI_DEVICE_SESSION_PARAMETER_CUSTOM4 = 999999998 ,
  QDMI_DEVICE_SESSION_PARAMETER_CUSTOM5 = 999999999 , QDMI_DEVICE_SESSION_PARAMETER_CUSTOM_MAX = QDMI_CUSTOM_ENUM_VALUE_MAX
}
 Enum of the device session parameters that can be set via QDMI_device_session_set_parameter. More...
enum  QDMI_DEVICE_JOB_PARAMETER_T {
  QDMI_DEVICE_JOB_PARAMETER_PROGRAMFORMAT = 0 , QDMI_DEVICE_JOB_PARAMETER_SHOTSNUM = 1 , QDMI_DEVICE_JOB_PARAMETER_MAX = 2 , QDMI_DEVICE_JOB_PARAMETER_CUSTOM1 = QDMI_CUSTOM_ENUM_VALUE_MIN ,
  QDMI_DEVICE_JOB_PARAMETER_CUSTOM2 = 999999996 , QDMI_DEVICE_JOB_PARAMETER_CUSTOM3 = 999999997 , QDMI_DEVICE_JOB_PARAMETER_CUSTOM4 = 999999998 , QDMI_DEVICE_JOB_PARAMETER_CUSTOM5 = 999999999 ,
  QDMI_DEVICE_JOB_PARAMETER_CUSTOM_MAX = QDMI_CUSTOM_ENUM_VALUE_MAX
}
 Enum of the device job parameters that can be set via QDMI_device_job_set_parameter. More...
enum  QDMI_DEVICE_JOB_PROPERTY_T {
  QDMI_DEVICE_JOB_PROPERTY_ID = 0 , QDMI_DEVICE_JOB_PROPERTY_PROGRAMFORMAT = 1 , QDMI_DEVICE_JOB_PROPERTY_PROGRAM = 2 , QDMI_DEVICE_JOB_PROPERTY_SHOTSNUM = 3 ,
  QDMI_DEVICE_JOB_PROPERTY_QUEUEPOSITION = 4 , QDMI_DEVICE_JOB_PROPERTY_PROGRAMSNUM = 5 , QDMI_DEVICE_JOB_PROPERTY_MAX = 6 , QDMI_DEVICE_JOB_PROPERTY_CUSTOM1 = QDMI_CUSTOM_ENUM_VALUE_MIN ,
  QDMI_DEVICE_JOB_PROPERTY_CUSTOM2 = 999999996 , QDMI_DEVICE_JOB_PROPERTY_CUSTOM3 = 999999997 , QDMI_DEVICE_JOB_PROPERTY_CUSTOM4 = 999999998 , QDMI_DEVICE_JOB_PROPERTY_CUSTOM5 = 999999999 ,
  QDMI_DEVICE_JOB_PROPERTY_CUSTOM_MAX = QDMI_CUSTOM_ENUM_VALUE_MAX
}
 Enum of the device job properties that can be queried via QDMI_device_job_query_property as part of the device interface. More...
enum  QDMI_DEVICE_PROPERTY_T {
  QDMI_DEVICE_PROPERTY_NAME = 0 , QDMI_DEVICE_PROPERTY_VERSION = 1 , QDMI_DEVICE_PROPERTY_STATUS = 2 , QDMI_DEVICE_PROPERTY_LIBRARYVERSION = 3 ,
  QDMI_DEVICE_PROPERTY_QUBITSNUM = 4 , QDMI_DEVICE_PROPERTY_SITES = 5 , QDMI_DEVICE_PROPERTY_OPERATIONS = 6 , QDMI_DEVICE_PROPERTY_COUPLINGMAP = 7 ,
  QDMI_DEVICE_PROPERTY_NEEDSCALIBRATION = 8 , QDMI_DEVICE_PROPERTY_PULSESUPPORT = 9 , QDMI_DEVICE_PROPERTY_LENGTHUNIT = 10 , QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR = 11 ,
  QDMI_DEVICE_PROPERTY_DURATIONUNIT = 12 , QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR = 13 , QDMI_DEVICE_PROPERTY_MINATOMDISTANCE = 14 , QDMI_DEVICE_PROPERTY_SUPPORTEDPROGRAMFORMATS = 15 ,
  QDMI_DEVICE_PROPERTY_CHILDDEVICES = 16 , QDMI_DEVICE_PROPERTY_QUEUELENGTH = 17 , QDMI_DEVICE_PROPERTY_MAX = 18 , QDMI_DEVICE_PROPERTY_CUSTOM1 = QDMI_CUSTOM_ENUM_VALUE_MIN ,
  QDMI_DEVICE_PROPERTY_CUSTOM2 = 999999996 , QDMI_DEVICE_PROPERTY_CUSTOM3 = 999999997 , QDMI_DEVICE_PROPERTY_CUSTOM4 = 999999998 , QDMI_DEVICE_PROPERTY_CUSTOM5 = 999999999 ,
  QDMI_DEVICE_PROPERTY_CUSTOM_MAX = QDMI_CUSTOM_ENUM_VALUE_MAX
}
enum  QDMI_DEVICE_STATUS_T {
  QDMI_DEVICE_STATUS_OFFLINE = 0 , QDMI_DEVICE_STATUS_IDLE = 1 , QDMI_DEVICE_STATUS_BUSY = 2 , QDMI_DEVICE_STATUS_ERROR = 3 ,
  QDMI_DEVICE_STATUS_MAINTENANCE = 4 , QDMI_DEVICE_STATUS_CALIBRATION = 5 , QDMI_DEVICE_STATUS_MAX = 6
}
 Enum of different status the device can be in. More...
enum  QDMI_SITE_PROPERTY_T {
  QDMI_SITE_PROPERTY_INDEX = 0 , QDMI_SITE_PROPERTY_T1 = 1 , QDMI_SITE_PROPERTY_T2 = 2 , QDMI_SITE_PROPERTY_NAME = 3 ,
  QDMI_SITE_PROPERTY_XCOORDINATE = 4 , QDMI_SITE_PROPERTY_YCOORDINATE = 5 , QDMI_SITE_PROPERTY_ZCOORDINATE = 6 , QDMI_SITE_PROPERTY_ISZONE = 7 ,
  QDMI_SITE_PROPERTY_XEXTENT = 8 , QDMI_SITE_PROPERTY_YEXTENT = 9 , QDMI_SITE_PROPERTY_ZEXTENT = 10 , QDMI_SITE_PROPERTY_MODULEINDEX = 11 ,
  QDMI_SITE_PROPERTY_SUBMODULEINDEX = 12 , QDMI_SITE_PROPERTY_MAX = 13 , QDMI_SITE_PROPERTY_CUSTOM1 = QDMI_CUSTOM_ENUM_VALUE_MIN , QDMI_SITE_PROPERTY_CUSTOM2 = 999999996 ,
  QDMI_SITE_PROPERTY_CUSTOM3 = 999999997 , QDMI_SITE_PROPERTY_CUSTOM4 = 999999998 , QDMI_SITE_PROPERTY_CUSTOM5 = 999999999 , QDMI_SITE_PROPERTY_CUSTOM_MAX = QDMI_CUSTOM_ENUM_VALUE_MAX
}
enum  QDMI_OPERATION_PROPERTY_T {
  QDMI_OPERATION_PROPERTY_NAME = 0 , QDMI_OPERATION_PROPERTY_QUBITSNUM = 1 , QDMI_OPERATION_PROPERTY_PARAMETERSNUM = 2 , QDMI_OPERATION_PROPERTY_DURATION = 3 ,
  QDMI_OPERATION_PROPERTY_FIDELITY = 4 , QDMI_OPERATION_PROPERTY_INTERACTIONRADIUS = 5 , QDMI_OPERATION_PROPERTY_BLOCKINGRADIUS = 6 , QDMI_OPERATION_PROPERTY_IDLINGFIDELITY = 7 ,
  QDMI_OPERATION_PROPERTY_ISZONED = 8 , QDMI_OPERATION_PROPERTY_SITES = 9 , QDMI_OPERATION_PROPERTY_MEANSHUTTLINGSPEED = 10 , QDMI_OPERATION_PROPERTY_MAX = 11 ,
  QDMI_OPERATION_PROPERTY_CUSTOM1 = QDMI_CUSTOM_ENUM_VALUE_MIN , QDMI_OPERATION_PROPERTY_CUSTOM2 = 999999996 , QDMI_OPERATION_PROPERTY_CUSTOM3 = 999999997 , QDMI_OPERATION_PROPERTY_CUSTOM4 = 999999998 ,
  QDMI_OPERATION_PROPERTY_CUSTOM5 = 999999999 , QDMI_OPERATION_PROPERTY_CUSTOM_MAX = QDMI_CUSTOM_ENUM_VALUE_MAX
}
enum  QDMI_JOB_STATUS_T {
  QDMI_JOB_STATUS_CREATED = 0 , QDMI_JOB_STATUS_SUBMITTED = 1 , QDMI_JOB_STATUS_QUEUED = 2 , QDMI_JOB_STATUS_RUNNING = 3 ,
  QDMI_JOB_STATUS_DONE = 4 , QDMI_JOB_STATUS_CANCELED = 5 , QDMI_JOB_STATUS_FAILED = 6
}
 Enum of the status a job can have. More...
enum  QDMI_PROGRAM_ENCODING_T { QDMI_PROGRAM_ENCODING_TEXT = 1 , QDMI_PROGRAM_ENCODING_BINARY = 2 }
 Encoding of a submitted payload. More...
enum  QDMI_JOB_RESULT_T {
  QDMI_JOB_RESULT_SHOTS = 0 , QDMI_JOB_RESULT_HIST_KEYS = 1 , QDMI_JOB_RESULT_HIST_VALUES = 2 , QDMI_JOB_RESULT_STATEVECTOR_DENSE = 3 ,
  QDMI_JOB_RESULT_PROBABILITIES_DENSE = 4 , QDMI_JOB_RESULT_STATEVECTOR_SPARSE_KEYS = 5 , QDMI_JOB_RESULT_STATEVECTOR_SPARSE_VALUES = 6 , QDMI_JOB_RESULT_PROBABILITIES_SPARSE_KEYS = 7 ,
  QDMI_JOB_RESULT_PROBABILITIES_SPARSE_VALUES = 8 , QDMI_JOB_RESULT_PROGRAMOUTPUT = 9 , QDMI_JOB_RESULT_MAX = 10 , QDMI_JOB_RESULT_CUSTOM1 = QDMI_CUSTOM_ENUM_VALUE_MIN ,
  QDMI_JOB_RESULT_CUSTOM2 = 999999996 , QDMI_JOB_RESULT_CUSTOM3 = 999999997 , QDMI_JOB_RESULT_CUSTOM4 = 999999998 , QDMI_JOB_RESULT_CUSTOM5 = 999999999 ,
  QDMI_JOB_RESULT_CUSTOM_MAX = QDMI_CUSTOM_ENUM_VALUE_MAX
}
 Enum of the formats the results can be returned in. More...
enum  QDMI_DEVICE_PULSE_SUPPORT_LEVEL_T { QDMI_DEVICE_PULSE_SUPPORT_LEVEL_NONE = 0 , QDMI_DEVICE_PULSE_SUPPORT_LEVEL_SITE = 1 , QDMI_DEVICE_PULSE_SUPPORT_LEVEL_CHANNEL = 2 , QDMI_DEVICE_PULSE_SUPPORT_LEVEL_SITEANDCHANNEL = 3 }
 Enum to indicate the level of pulse support a device has. More...

Macro Definition Documentation

◆ QDMI_CUSTOM_ENUM_VALUE_MIN

#define QDMI_CUSTOM_ENUM_VALUE_MIN   999999995

First value in every provider-defined enum range.

Every value from QDMI_CUSTOM_ENUM_VALUE_MIN through QDMI_CUSTOM_ENUM_VALUE_MAX is syntactically valid. The CUSTOM1 through CUSTOM5 members of each extensible enum preserve names for the first five values. Values from such an enum's regular MAX member up to, but excluding, QDMI_CUSTOM_ENUM_VALUE_MIN are invalid. An implementation returns QDMI_ERROR_NOTSUPPORTED for a valid custom value that it does not support.

◆ QDMI_MAKE_VERSION

#define QDMI_MAKE_VERSION ( major,
minor,
patch )
Value:
((((uint32_t)(major) & 0x3FFU) << 22U) | \
(((uint32_t)(minor) & 0x3FFU) << 12U) | ((uint32_t)(patch) & 0xFFFU))

Pack a Semantic Versioning major, minor, and patch release into a 32-bit exact version value.

The major and minor components must each fit in 10 bits. The patch component must fit in 12 bits. Prerelease and build metadata are not part of a program-format descriptor.

◆ QDMI_VERSION_MAJOR

#define QDMI_VERSION_MAJOR ( version)
Value:
(((uint32_t)(version) >> 22U) & 0x3FFU)

Extract the Semantic Versioning major component of a packed version.

◆ QDMI_VERSION_MINOR

#define QDMI_VERSION_MINOR ( version)
Value:
(((uint32_t)(version) >> 12U) & 0x3FFU)

Extract the Semantic Versioning minor component of a packed version.

◆ QDMI_VERSION_PATCH

#define QDMI_VERSION_PATCH ( version)
Value:
((uint32_t)(version) & 0xFFFU)

Extract the Semantic Versioning patch component of a packed version.

◆ QDMI_PROGRAM_FEATURE_UNCONSTRAINED

#define QDMI_PROGRAM_FEATURE_UNCONSTRAINED ( feature_id,
feature_value )
Value:
{feature_id, feature_value, "", 0U}

Initialize an unrestricted program feature for C or C++.

Parameters
feature_idString-literal feature ID.
feature_valueFeature-specific value.

◆ QDMI_PROGRAM_FEATURE_MID_CIRCUIT_MEASUREMENT

#define QDMI_PROGRAM_FEATURE_MID_CIRCUIT_MEASUREMENT   "mid-circuit-measurement"

Measure a qubit before the end of one execution.

This Boolean feature uses value zero. It does not by itself guarantee same-execution use of the result or reuse of the measured qubit.

◆ QDMI_PROGRAM_FEATURE_MEASURED_QUBIT_REUSE

#define QDMI_PROGRAM_FEATURE_MEASURED_QUBIT_REUSE   "measured-qubit-reuse"

Apply a quantum operation to a measured qubit in the same execution.

This Boolean feature uses value zero.

◆ QDMI_PROGRAM_FEATURE_MEASUREMENT_RESULT_USE

#define QDMI_PROGRAM_FEATURE_MEASUREMENT_RESULT_USE   "measurement-result-use"

Read a measurement result during the same execution.

This Boolean feature uses value zero. Control flow based on the result also requires the relevant branching or loop feature.

◆ QDMI_PROGRAM_FEATURE_BOOLEAN_COMPUTATION

#define QDMI_PROGRAM_FEATURE_BOOLEAN_COMPUTATION   "boolean-computation"

Compute Boolean values during execution.

This Boolean feature uses value zero. It includes Boolean logic and comparisons whose operand types are otherwise supported by the descriptor.

◆ QDMI_PROGRAM_FEATURE_FORWARD_BRANCHING

#define QDMI_PROGRAM_FEATURE_FORWARD_BRANCHING   "forward-branching"

Select a later program region from a value computed during execution.

This Boolean feature uses value zero and does not include a backward branch.

◆ QDMI_PROGRAM_FEATURE_COUNTED_ITERATION

#define QDMI_PROGRAM_FEATURE_COUNTED_ITERATION   "counted-iteration"

Repeat a program region a known finite number of times.

This Boolean feature uses value zero. The trip count does not depend on a value produced by the repeated region.

◆ QDMI_PROGRAM_FEATURE_CONDITIONAL_LOOP

#define QDMI_PROGRAM_FEATURE_CONDITIONAL_LOOP   "conditional-loop"

Repeat a program region based on a value computed during execution.

This Boolean feature uses value zero and includes a backward branch.

◆ QDMI_PROGRAM_FEATURE_MULTIWAY_BRANCHING

#define QDMI_PROGRAM_FEATURE_MULTIWAY_BRANCHING   "multiway-branching"

Select one of more than two program regions during execution.

This Boolean feature uses value zero. The selector type requires its corresponding computation feature.

◆ QDMI_PROGRAM_FEATURE_INTEGER_COMPUTATION

#define QDMI_PROGRAM_FEATURE_INTEGER_COMPUTATION   "integer-computation"

Compute integer values during execution.

The feature value is one exact supported integer width in bits. Devices return one feature group for each supported width.

◆ QDMI_PROGRAM_FEATURE_FLOAT_COMPUTATION

#define QDMI_PROGRAM_FEATURE_FLOAT_COMPUTATION   "float-computation"

Compute floating-point values during execution.

The feature value is one exact supported floating-point width in bits. Devices return one feature group for each supported width.

◆ QDMI_PROGRAM_FEATURE_IR_FUNCTIONS

#define QDMI_PROGRAM_FEATURE_IR_FUNCTIONS   "ir-functions"

Define and call functions beyond the entry point and format-mandated declarations or runtime calls.

This Boolean feature uses value zero.

◆ QDMI_PROGRAM_FEATURE_MULTIPLE_RETURN_POINTS

#define QDMI_PROGRAM_FEATURE_MULTIPLE_RETURN_POINTS   "multiple-return-points"

Use more than one return point in one function or entry point.

This Boolean feature uses value zero.

◆ QDMI_PROGRAM_FEATURE_DYNAMIC_QUBIT_MANAGEMENT

#define QDMI_PROGRAM_FEATURE_DYNAMIC_QUBIT_MANAGEMENT   "dynamic-qubit-management"

Allocate and release qubits during execution.

This Boolean feature uses value zero.

◆ QDMI_PROGRAM_FEATURE_DYNAMIC_RESULT_MANAGEMENT

#define QDMI_PROGRAM_FEATURE_DYNAMIC_RESULT_MANAGEMENT   "dynamic-result-management"

Allocate and release result handles during execution.

This Boolean feature uses value zero.

◆ QDMI_PROGRAM_FEATURE_ARRAYS

#define QDMI_PROGRAM_FEATURE_ARRAYS   "arrays"

Create and access arrays during execution.

This Boolean feature uses value zero. Element types must be supported by the descriptor or another reported computation feature.

◆ QDMI_PROGRAM_CONSTRAINT_MAX_CONTROL_FLOW_NESTING_DEPTH

#define QDMI_PROGRAM_CONSTRAINT_MAX_CONTROL_FLOW_NESTING_DEPTH   "max-control-flow-nesting-depth"

Limit lexical control-flow nesting depth.

The positive constraint value is the maximum number of enclosing branch and loop constructs, counting the outermost construct as depth one. This constraint applies to branching and iteration features.

◆ QDMI_PROGRAM_CONSTRAINT_MAX_ITERATION_COUNT

#define QDMI_PROGRAM_CONSTRAINT_MAX_ITERATION_COUNT   "max-iteration-count"

Limit the trip count of each loop.

The positive constraint value is the inclusive maximum number of times one loop body may execute. A compiler must prove this upper bound. This constraint applies to counted iteration and conditional loops.

◆ QDMI_PROGRAM_CONSTRAINT_MAX_CASE_COUNT

#define QDMI_PROGRAM_CONSTRAINT_MAX_CASE_COUNT   "max-case-count"

Limit the number of explicit cases in each multiway branch.

The positive constraint value counts explicit cases and excludes a default case. This constraint applies to multiway branching.

Enumeration Type Documentation

◆ QDMI_STATUS

Status codes returned by the API.

Enumerator
QDMI_WARN_GENERAL 

A general warning.

QDMI_SUCCESS 

The operation was successful.

QDMI_ERROR_FATAL -1 

A fatal error.

QDMI_ERROR_OUTOFMEM -2 

Out of memory.

QDMI_ERROR_NOTIMPLEMENTED -3 

Not implemented.

QDMI_ERROR_LIBNOTFOUND -4 

Library not found.

QDMI_ERROR_NOTFOUND -5 

Element not found.

QDMI_ERROR_OUTOFRANGE -6 

Out of range.

QDMI_ERROR_INVALIDARGUMENT -7 

Invalid argument.

QDMI_ERROR_PERMISSIONDENIED -8 

Permission denied.

QDMI_ERROR_NOTSUPPORTED -9 

Operation is not supported.

QDMI_ERROR_BADSTATE -10 

Resource is in the wrong state for the operation.

QDMI_ERROR_TIMEOUT -11 

Operation timed out.

◆ QDMI_DEVICE_SESSION_PARAMETER_T

Enum of the device session parameters that can be set via QDMI_device_session_set_parameter.

If not noted otherwise, parameters are optional and devices must not require them to be set.

Enumerator
QDMI_DEVICE_SESSION_PARAMETER_BASEURL 

char* (string) The baseURL or API endpoint to be used for accessing the device within the session.

If this parameter is set and the device supports it, the device must use the specified baseURL or API endpoint for the session. Devices may use this parameter to switch between different versions of the API or different endpoints for testing or production environments.

QDMI_DEVICE_SESSION_PARAMETER_TOKEN 

char* (string) A token to be used in the session initialization for authenticating with the device.

A token could be an API key. The device documentation must document what kind of token is required and how it is used. If the device requires authentication via a token, this parameter must be set before calling QDMI_device_session_init.

QDMI_DEVICE_SESSION_PARAMETER_AUTHFILE 

char* (string) A file path to a file containing authentication information.

The file may contain a token or other authentication information required for the session. The device documentation must document whether the implementation requires this parameter to be set and what kind of authentication information is expected in the file.

QDMI_DEVICE_SESSION_PARAMETER_AUTHURL 

char* (string) The URL to an authentication server used as part of the authentication procedure.

This parameter might be used as part of an authentication scheme where an API token is received from an authentication server. This may, additionally, require a username and a password, which can be set via the QDMI_DEVICE_SESSION_PARAMETER_USERNAME and QDMI_DEVICE_SESSION_PARAMETER_PASSWORD parameters.

The device documentation must document if the implementation
requires this parameter to be set and which additional parameters need to be set in case this authentication method is used.
QDMI_DEVICE_SESSION_PARAMETER_USERNAME 

char* (string) The username to use for the device session.

The username is used for authentication within the session. The device documentation must document when the implementation requires this parameter to be set.

QDMI_DEVICE_SESSION_PARAMETER_PASSWORD 

char* (string) The password to use for the session.

The password is used for authentication within the session. The device documentation must document if the implementation requires this parameter to be set.

QDMI_DEVICE_SESSION_PARAMETER_CHILDDEVICE 

QDMI_Child_Device The child device to establish the session with.

If the device manages child devices, a QDMI driver can establish a session with those child devices by setting this session parameter to the respective QDMI_Child_Device handle.

After initialization of this session, the device will forward any function call on this session to the job or query interface of the child device.
Note
This parameter can be unset by setting this parameter to NULL.
See also
QDMI_DEVICE_PROPERTY_CHILDDEVICES
QDMI_DEVICE_SESSION_PARAMETER_MAX 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM1 QDMI_CUSTOM_ENUM_VALUE_MIN 

This enum value is reserved for a custom parameter.

The device defines the meaning and the type of this parameter.

Attention
The value of this enum member must not be changed to maintain binary compatibility.
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM2 999999996 
See also
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM1
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM3 999999997 
See also
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM1
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM4 999999998 
See also
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM1
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM5 999999999 
See also
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM1
QDMI_DEVICE_SESSION_PARAMETER_CUSTOM_MAX QDMI_CUSTOM_ENUM_VALUE_MAX 

The largest syntactically valid custom value.

◆ QDMI_DEVICE_JOB_PARAMETER_T

Enum of the device job parameters that can be set via QDMI_device_job_set_parameter.

If not noted otherwise, parameters are optional and devices must not require them to be set.

Enumerator
QDMI_DEVICE_JOB_PARAMETER_PROGRAMFORMAT 

QDMI_Program_Format The format of the program to be executed.

This parameter is required. The device must support the specified program format. If the device does not support the specified program format, the QDMI_device_job_set_parameter function must return QDMI_ERROR_NOTSUPPORTED. Setting the same exact descriptor keeps an existing program payload. Setting a different supported descriptor clears the payload. Every error leaves the descriptor and payload unchanged.

QDMI_DEVICE_JOB_PARAMETER_SHOTSNUM 

size_t The number of shots to execute for a quantum circuit job.

If this parameter is not set, a device-specific default is used.

QDMI_DEVICE_JOB_PARAMETER_MAX 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.
QDMI_DEVICE_JOB_PARAMETER_CUSTOM1 QDMI_CUSTOM_ENUM_VALUE_MIN 

This enum value is reserved for a custom parameter.

The device defines the meaning and the type of this parameter.

Attention
The value of this enum member must not be changed to maintain binary compatibility.
QDMI_DEVICE_JOB_PARAMETER_CUSTOM2 999999996 
See also
QDMI_DEVICE_JOB_PARAMETER_CUSTOM1
QDMI_DEVICE_JOB_PARAMETER_CUSTOM3 999999997 
See also
QDMI_DEVICE_JOB_PARAMETER_CUSTOM1
QDMI_DEVICE_JOB_PARAMETER_CUSTOM4 999999998 
See also
QDMI_DEVICE_JOB_PARAMETER_CUSTOM1
QDMI_DEVICE_JOB_PARAMETER_CUSTOM5 999999999 
See also
QDMI_DEVICE_JOB_PARAMETER_CUSTOM1
QDMI_DEVICE_JOB_PARAMETER_CUSTOM_MAX QDMI_CUSTOM_ENUM_VALUE_MAX 

The largest syntactically valid custom value.

◆ QDMI_DEVICE_JOB_PROPERTY_T

Enum of the device job properties that can be queried via QDMI_device_job_query_property as part of the device interface.

In particular, every parameter's value that can be set via QDMI_device_job_set_parameter can be queried.

Enumerator
QDMI_DEVICE_JOB_PROPERTY_ID 

char* (string) The job's ID.

The ID must uniquely identify a job for the specific device. It should generally be universally unique (such as a UUID), to avoid conflicts with other devices' job IDs. It may be used with QDMI_device_session_retrieve_device_job_by_id to obtain a new QDMI_Device_Job handle for an existing remote job. It may, for example, correspond to the job ID provided by the device's API or may be generated by the QDMI Device implementation.

QDMI_DEVICE_JOB_PROPERTY_PROGRAMFORMAT 

QDMI_Program_Format The format of the program to be executed.

A query returns QDMI_ERROR_BADSTATE until a format is set. This property returns the format set through QDMI_DEVICE_JOB_PARAMETER_PROGRAMFORMAT or QDMI_device_job_set_programs.

Note
This property returns the descriptor executed by the device. A driver can expose a different client-submitted descriptor when it converts the payload before setting QDMI_DEVICE_JOB_PARAMETER_PROGRAMFORMAT.
QDMI_DEVICE_JOB_PROPERTY_PROGRAM 

void* The program to be executed.

Note
This property returns the program set through QDMI_device_job_set_programs when the job contains one program.
A query for a multi-program job returns QDMI_ERROR_NOTSUPPORTED.
QDMI_DEVICE_JOB_PROPERTY_SHOTSNUM 

size_t The number of shots to execute for a quantum circuit job.

Note
This property returns the value of the QDMI_DEVICE_JOB_PARAMETER_SHOTSNUM parameter.
QDMI_DEVICE_JOB_PROPERTY_QUEUEPOSITION 

size_t The current number of jobs ahead of this job in its queue.

Querying this property must refresh the job's status and queue position. The property can only be queried while the refreshed status is QDMI_JOB_STATUS_QUEUED; otherwise, the query must return QDMI_ERROR_BADSTATE.

If the provider only exposes a lower bound, the implementation reports that lower bound. For example, a provider value of >50 is reported as 50.
The property may yield QDMI_ERROR_NOTSUPPORTED if the implementation cannot obtain a trustworthy queue position.
QDMI_DEVICE_JOB_PROPERTY_PROGRAMSNUM 

size_t The number of programs in the job.

A single-program job reports one. A job has no program count until its program payload has been set; a query before that returns QDMI_ERROR_BADSTATE. The count remains stable after submission.

QDMI_DEVICE_JOB_PROPERTY_MAX 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.
QDMI_DEVICE_JOB_PROPERTY_CUSTOM1 QDMI_CUSTOM_ENUM_VALUE_MIN 

This enum value is reserved for a custom parameter.

The device defines the meaning and the type of this parameter.

Attention
The value of this enum member must not be changed to maintain binary compatibility.
QDMI_DEVICE_JOB_PROPERTY_CUSTOM2 999999996 
See also
QDMI_DEVICE_JOB_PROPERTY_CUSTOM1
QDMI_DEVICE_JOB_PROPERTY_CUSTOM3 999999997 
See also
QDMI_DEVICE_JOB_PROPERTY_CUSTOM1
QDMI_DEVICE_JOB_PROPERTY_CUSTOM4 999999998 
See also
QDMI_DEVICE_JOB_PROPERTY_CUSTOM1
QDMI_DEVICE_JOB_PROPERTY_CUSTOM5 999999999 
See also
QDMI_DEVICE_JOB_PROPERTY_CUSTOM1
QDMI_DEVICE_JOB_PROPERTY_CUSTOM_MAX QDMI_CUSTOM_ENUM_VALUE_MAX 

The largest syntactically valid custom value.

◆ QDMI_DEVICE_PROPERTY_T

Enum of the device properties that can be queried via QDMI_device_session_query_device_property as part of the device interface and via QDMI_device_query_device_property as part of the client interface.

Enumerator
QDMI_DEVICE_PROPERTY_NAME 

char* (string) The name of the device.

QDMI_DEVICE_PROPERTY_VERSION 

char* (string) The version of the device.

QDMI_DEVICE_PROPERTY_STATUS 

QDMI_Device_Status The status of the device.

QDMI_DEVICE_PROPERTY_LIBRARYVERSION 

char* (string) The implemented version of QDMI.

QDMI_DEVICE_PROPERTY_QUBITSNUM 

size_t The number of qubits in the device.

QDMI_DEVICE_PROPERTY_SITES 

QDMI_Site* (QDMI_Site list) The sites of the device.

The returned QDMI_Site handles may be used to query site and operation properties. The list need not be sorted based on the QDMI_SITE_PROPERTY_INDEX.

The list returned by this property contains all sites of the device, i.e., regular and zone sites (see QDMI_SITE_PROPERTY_ISZONE). To filter out regular or zone sites, use the function QDMI_device_query_site_property.
QDMI_DEVICE_PROPERTY_OPERATIONS 

QDMI_Operation* (QDMI_Operation list) The operations supported by the device.

The returned QDMI_Operation handles may be used to query operation properties.

QDMI_DEVICE_PROPERTY_COUPLINGMAP 

QDMI_Site* (QDMI_Site list) The coupling map of the device.

The returned list contains pairs of sites that are coupled. The pairs in the list are flattened such that the first site of the pair is at index 2n and the second site is at index 2n+1.

The sites returned in that list are represented as QDMI_Site handles. For example, consider a 3-site device with a coupling map (0, 1), (1, 2). Additionally, assume site_i is the handle for the i-th site. Then, {site_0, site_1, site_1, site_2} would be returned.

QDMI_DEVICE_PROPERTY_NEEDSCALIBRATION 

size_t Whether the device needs calibration.

Zero means that the device does not need calibration. A nonzero value means that the device needs calibration. The device defines the meaning of each nonzero value. QDMI does not define a portable way to trigger calibration.

QDMI_DEVICE_PROPERTY_PULSESUPPORT 

QDMI_Device_Pulse_Support_Level Whether the device supports pulse-level control.

This property indicates the level of pulse-level control. If a device supports pulse-level control, it may provide additional functionality for pulse-level programming and execution.

QDMI_DEVICE_PROPERTY_LENGTHUNIT 10 

char* (string) The length unit reported by the device.

The device implementation must report a known SI unit (e.g., "mm", "um", or "nm") for this property. A client querying a length value must first scale it using QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR. The resulting value is then interpreted in the unit specified by this property.

Note
If the device reports any length values, this property must be set.
QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR 11 

double A scale factor for all length values.

The device implementation reports this scale factor. A client must multiply any raw length value received from the device by this factor to obtain the physical length. The unit of the physical length is given by QDMI_DEVICE_PROPERTY_LENGTHUNIT.

Note
If querying this property returns QDMI_ERROR_NOTSUPPORTED, a client should assume a default value of 1.0.
QDMI_DEVICE_PROPERTY_DURATIONUNIT 12 

char* (string) The duration unit reported by the device.

The device implementation must report a known SI unit (e.g., "ms", "us", or "ns") for this property. A client querying a duration value must first scale it using QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR. The resulting value is then interpreted in the unit specified by this property.

Note
If the device reports any duration values, this property must be set.
QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR 13 

double A scale factor for all duration values.

The device implementation reports this scale factor. A client must multiply any raw duration value received from the device by this factor to obtain the physical duration. The unit of the physical duration is given by QDMI_DEVICE_PROPERTY_DURATIONUNIT.

Note
If querying this property returns QDMI_ERROR_NOTSUPPORTED, a client should assume a default value of 1.0.
QDMI_DEVICE_PROPERTY_MINATOMDISTANCE 14 

uint64_t The raw, unscaled minimum required distance between qubits during quantum computation.

For neutral atom-based devices, qubits (atoms) can be repositioned dynamically. However, a minimum separation must be maintained to prevent collisions and loss of atoms. This property specifies the minimum atom distance.

To obtain the physical minimum atom distance, a client must scale the raw value of this property. The physical minimum atom distance is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.
Note
Primarily relevant for neutral atom devices supporting dynamic atom arrangement.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR
QDMI_DEVICE_PROPERTY_SUPPORTEDPROGRAMFORMATS 15 

QDMI_Program_Format* (QDMI_Program_Format list) The exact program formats supported by the device.

Every returned descriptor can be passed unchanged as the job's program-format parameter. Descriptors with different versions, profiles, or encodings are independent formats. The list is ordered from most to least preferred by the device provider.

QDMI_DEVICE_PROPERTY_CHILDDEVICES 16 

QDMI_Child_Device* (QDMI_Child_Device list) A list of device handles corresponding to the device's child devices managed by this device.

Some devices may manage multiple child devices, e.g., a multi-device system or a device with multiple processing units. This property provides access to the child devices as separate QDMI_Child_Device handles.

The property may yield QDMI_ERROR_NOTSUPPORTED if the device does not have any child devices.
Note
Devices with child devices may have special job submission handling. Check the concrete device's job interface documentation.
QDMI_DEVICE_PROPERTY_QUEUELENGTH 17 

size_t The current number of jobs waiting to access the device.

This property is a snapshot of the device's queue length and does not include jobs that are currently executing. If a provider exposes multiple queues for the device, the implementation reports the sum of the waiting jobs across those queues.

If the provider only exposes a lower bound, the implementation reports that lower bound. For example, a provider value of >50 is reported as 50.
The property may yield QDMI_ERROR_NOTSUPPORTED if the implementation cannot obtain a trustworthy queue length.
QDMI_DEVICE_PROPERTY_MAX 18 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.
QDMI_DEVICE_PROPERTY_CUSTOM1 QDMI_CUSTOM_ENUM_VALUE_MIN 

This enum value is reserved for a custom property.

The device defines the meaning and the type of this property.

Attention
The value of this enum member must not be changed to maintain binary compatibility.
QDMI_DEVICE_PROPERTY_CUSTOM2 999999996 
See also
QDMI_DEVICE_PROPERTY_CUSTOM1
QDMI_DEVICE_PROPERTY_CUSTOM3 999999997 
See also
QDMI_DEVICE_PROPERTY_CUSTOM1
QDMI_DEVICE_PROPERTY_CUSTOM4 999999998 
See also
QDMI_DEVICE_PROPERTY_CUSTOM1
QDMI_DEVICE_PROPERTY_CUSTOM5 999999999 
See also
QDMI_DEVICE_PROPERTY_CUSTOM1
QDMI_DEVICE_PROPERTY_CUSTOM_MAX QDMI_CUSTOM_ENUM_VALUE_MAX 

The largest syntactically valid custom value.

◆ QDMI_DEVICE_STATUS_T

Enum of different status the device can be in.

Enumerator
QDMI_DEVICE_STATUS_OFFLINE 

The device is offline.

QDMI_DEVICE_STATUS_IDLE 

The device is idle.

QDMI_DEVICE_STATUS_BUSY 

The device is busy.

QDMI_DEVICE_STATUS_ERROR 

The device is in an error state.

QDMI_DEVICE_STATUS_MAINTENANCE 

The device is in maintenance.

QDMI_DEVICE_STATUS_CALIBRATION 

The device is in calibration.

QDMI_DEVICE_STATUS_MAX 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.

◆ QDMI_SITE_PROPERTY_T

Enum of the site properties that can be queried via QDMI_device_session_query_site_property as part of the device interface and via QDMI_device_query_site_property as part of the client interface.

Enumerator
QDMI_SITE_PROPERTY_INDEX 

size_t The unique index (or ID) to identify the site in a program.

The index of a site is used to link the qubits used in a quantum program to the physical sites of the device that can be queried via this interface. Indices may be non-consecutive and need not start at 0. See QDMI_Program_Format for more information on how the site indices map to the qubits in a program.

This property must be available for all sites since it is used to
address the sites in a program.
QDMI_SITE_PROPERTY_T1 

uint64_t The raw, unscaled T1 time of a site.

To obtain the physical T1 time, a client must scale the raw value of this property. The physical T1 time is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_DURATIONUNIT.

See also
QDMI_DEVICE_PROPERTY_DURATIONUNIT QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR
QDMI_SITE_PROPERTY_T2 

uint64_t The raw, unscaled T2 time of a site.

To obtain the physical T2 time, a client must scale the raw value of this property. The physical T2 time is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_DURATIONUNIT.

See also
QDMI_DEVICE_PROPERTY_DURATIONUNIT QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR
QDMI_SITE_PROPERTY_NAME 

char* (string) The name of a site, e.g., another identifier of the site given by the device.

QDMI_SITE_PROPERTY_XCOORDINATE 

int64_t The raw, unscaled X-coordinate of the site.

The X-coordinate is measured relative to some unique origin of the device, i.e., the triple of X-, Y-, and Z-coordinate must be unique to the site.

To obtain the physical X-coordinate of the site, a client must scale the raw value of this property. The physical X-coordinate of the site is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.
Note
This property is mainly required for neutral atom devices to report the location of sites.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR QDMI_SITE_PROPERTY_XCOORDINATE QDMI_SITE_PROPERTY_YCOORDINATE QDMI_SITE_PROPERTY_ZCOORDINATE
QDMI_SITE_PROPERTY_YCOORDINATE 

int64_t The raw, unscaled Y-coordinate of the site.

The Y-coordinate is measured relative to some unique origin of the device, i.e., the triple of X-, Y-, and Z-coordinate must be unique to the site.

To obtain the physical Y-coordinate of the site, a client must scale the raw value of this property. The physical Y-coordinate of the site is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.
Note
This property is mainly required for neutral atom devices to report the location of sites.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR QDMI_SITE_PROPERTY_XCOORDINATE QDMI_SITE_PROPERTY_YCOORDINATE QDMI_SITE_PROPERTY_ZCOORDINATE
QDMI_SITE_PROPERTY_ZCOORDINATE 

int64_t The raw, unscaled Z-coordinate of the site.

The Z-coordinate is measured relative to some unique origin of the device, i.e., the triple of X-, Y-, and Z-coordinate must be unique to the site.

To obtain the physical Z-coordinate of the site, a client must scale the raw value of this property. The physical Z-coordinate of the site is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.
Note
This property is mainly required for neutral atom devices to report the location of sites.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR QDMI_SITE_PROPERTY_XCOORDINATE QDMI_SITE_PROPERTY_YCOORDINATE QDMI_SITE_PROPERTY_ZCOORDINATE
QDMI_SITE_PROPERTY_ISZONE 

bool Whether the site is a zone.

A zone is a site that has a spatial extent, i.e., it is not just a point in space as a regular site. These kind of sites, namely zones, are required to adequately represent global operations that act on all qubits within a certain area, i.e., a zone.

Note
Zones are typically used in neutral atom devices, where the atoms are arranged in a 2D or 3D lattice, and operations can be applied to all atoms within a certain zone. This property defaults to false, i.e., if a device reports QDMI_ERROR_NOTSUPPORTED for this property, it is assumed that the site is a regular site and not a zone.
See also
QDMI_SITE_PROPERTY_XEXTENT QDMI_SITE_PROPERTY_YEXTENT QDMI_SITE_PROPERTY_ZEXTENT
QDMI_SITE_PROPERTY_XEXTENT 

uint64_t The raw, unscaled extent of a zone along the X-axis.

To obtain the physical extent of a zone along the X-axis, a client must scale the raw value of this property. The physical extent of a zone along the X-axis is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.

Note
This property is mainly required for neutral atom devices to report the extent of zones, see QDMI_SITE_PROPERTY_ISZONE. If the site is not a zone, this property must return QDMI_ERROR_NOTSUPPORTED.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR
QDMI_SITE_PROPERTY_YEXTENT 

uint64_t The raw, unscaled extent of a zone along the Y-axis.

To obtain the physical extent of a zone along the Y-axis, a client must scale the raw value of this property. The physical extent of a zone along the Y-axis is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.

Note
This property is mainly required for neutral atom devices to report the extent of zones, see QDMI_SITE_PROPERTY_ISZONE. If the site is not a zone, this property must return QDMI_ERROR_NOTSUPPORTED.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR
QDMI_SITE_PROPERTY_ZEXTENT 10 

uint64_t The raw, unscaled extent of a zone along the Z-axis.

To obtain the physical extent of a zone along the Z-axis, a client must scale the raw value of this property. The physical extent of a zone along the Z-axis is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.

Note
This property is mainly required for neutral atom devices to report the extent of zones, see QDMI_SITE_PROPERTY_ISZONE. If the site is not a zone, this property must return QDMI_ERROR_NOTSUPPORTED.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR
QDMI_SITE_PROPERTY_MODULEINDEX 11 

uint64_t an unsigned integer that uniquely identifies the module.

A module is a logical grouping of sites, e.g., one part on a superconducting chip or an array of sites in a neutral atom-based device.

QDMI_SITE_PROPERTY_SUBMODULEINDEX 12 

uint64_t an unsigned integer uniquely identifying the submodule within a module.

A submodule is a repetitive substructure of sites within a module. E.g., for a module (QDMI_SITE_PROPERTY_MODULEINDEX), where the sites are arranged in pairs and the pairs are arranged in a grid, the submodule index would be the index of the pair within the module.

QDMI_SITE_PROPERTY_MAX 13 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.
QDMI_SITE_PROPERTY_CUSTOM1 QDMI_CUSTOM_ENUM_VALUE_MIN 

This enum value is reserved for a custom property.

The device defines the meaning and the type of this property.

Attention
The value of this enum member must not be changed to maintain binary compatibility.
QDMI_SITE_PROPERTY_CUSTOM2 999999996 
See also
QDMI_SITE_PROPERTY_CUSTOM1
QDMI_SITE_PROPERTY_CUSTOM3 999999997 
See also
QDMI_SITE_PROPERTY_CUSTOM1
QDMI_SITE_PROPERTY_CUSTOM4 999999998 
See also
QDMI_SITE_PROPERTY_CUSTOM1
QDMI_SITE_PROPERTY_CUSTOM5 999999999 
See also
QDMI_SITE_PROPERTY_CUSTOM1
QDMI_SITE_PROPERTY_CUSTOM_MAX QDMI_CUSTOM_ENUM_VALUE_MAX 

The largest syntactically valid custom value.

◆ QDMI_OPERATION_PROPERTY_T

Enum of the operation properties that can be queried via QDMI_device_session_query_operation_property as part of the device interface and via QDMI_device_query_operation_property as part of the client interface.

Enumerator
QDMI_OPERATION_PROPERTY_NAME 

char* (string) The string identifier of the operation.

QDMI_OPERATION_PROPERTY_QUBITSNUM 

size_t The number of qubits involved in the operation.

QDMI_OPERATION_PROPERTY_PARAMETERSNUM 

size_t The number of floating point parameters the operation takes.

QDMI_OPERATION_PROPERTY_DURATION 

uint64_t The raw, unscaled duration of an operation.

To obtain the physical duration, a client must scale the raw value of this property. The physical duration is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_DURATIONUNIT.

See also
QDMI_DEVICE_PROPERTY_DURATIONUNIT QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR
QDMI_OPERATION_PROPERTY_FIDELITY 

double The fidelity of an operation.

QDMI_OPERATION_PROPERTY_INTERACTIONRADIUS 

uint64_t The raw, unscaled interaction radius of the operation.

The interaction radius is the maximum distance between two qubits that can be involved in the operation. It only applies to multi-qubit gates.

To obtain the physical interaction radius, a client must scale the raw value of this property. The physical interaction radius is calculated as: raw_value * scale_factor, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.
Note
This property is mainly required for neutral atom devices where atoms representing qubits can be at arbitrary locations. Hence, it is infeasible to define a coupling map. Instead, the coupling of atoms is defined by the interaction radius of the operation.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTSCALEFACTOR
QDMI_OPERATION_PROPERTY_BLOCKINGRADIUS 

uint64_t The raw, unscaled blocking radius of the operation.

The blocking radius is the minimum distance between two qubits that should not be involved in the operation to avoid crosstalk. It only applies to multi-qubit gates.

To obtain the physical blocking radius, a client must scale the raw value of this property. The physical blocking radius is calculated as: raw_value
  • scale_factor
, where scale_factor is the value of the QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR property. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT.
Note
This property is mainly required for neutral atom devices where atoms representing qubits can be at arbitrary locations. To avoid crosstalk, the blocking radius of the operation must be respected when scheduling operations.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR
QDMI_OPERATION_PROPERTY_IDLINGFIDELITY 

double Fidelity of qubits idling during a global operation.

This property measures the fidelity of qubits that are within the affected area of a global multi-qubit operation but do not actively participate (i.e., they lack an interaction partner within their radius). Even though these qubits undergo an identity operation, errors may still occur, resulting in lower fidelity compared to qubits that are simply idling and not exposed to the operation.

Note
This is especially relevant for neutral atom devices, where global operations (e.g., laser pulses) can impact all atoms in the array, including those not interacting.
QDMI_OPERATION_PROPERTY_ISZONED 

bool Whether the operation is a zoned (global) operation.

A zoned (or global) operation is an operation that can be applied simultaneously to all qubits within a specific zone. If this property is true, the operation is considered zoned. If it is false or returns QDMI_ERROR_NOTSUPPORTED, the operation is considered local. The applicability of a zoned operation to specific zones is detailed in QDMI_OPERATION_PROPERTY_SITES.

Note
This property is primarily relevant for neutral atom devices, where a laser can illuminate an entire array of atoms representing qubits.
See also
QDMI_SITE_PROPERTY_ISZONE QDMI_OPERATION_PROPERTY_SITES
QDMI_OPERATION_PROPERTY_SITES 

QDMI_Site* (list) The sites to which the operation is applicable.

QDMI_OPERATION_PROPERTY_MEANSHUTTLINGSPEED 10 

uint64_t The raw, unscaled mean shuttling speed of an operation.

To obtain the physical speed, a client must scale the raw value of this property. The physical speed is calculated as: raw_value * length_scale_factor / duration_scale_factor. The length_scale_factor is the value of QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR and the duration_scale_factor is the value of QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR. The resulting value is in units of QDMI_DEVICE_PROPERTY_LENGTHUNIT per QDMI_DEVICE_PROPERTY_DURATIONUNIT.

Note
This property is mainly required for neutral atom devices where atoms representing qubits can be moved to different sites.
See also
QDMI_DEVICE_PROPERTY_LENGTHUNIT QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR QDMI_DEVICE_PROPERTY_DURATIONUNIT QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR
QDMI_OPERATION_PROPERTY_MAX 11 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.
QDMI_OPERATION_PROPERTY_CUSTOM1 QDMI_CUSTOM_ENUM_VALUE_MIN 

This enum value is reserved for a custom property.

The device defines the meaning and the type of this property.

Attention
The value of this enum member must not be changed to maintain binary compatibility.
QDMI_OPERATION_PROPERTY_CUSTOM2 999999996 
See also
QDMI_OPERATION_PROPERTY_CUSTOM1
QDMI_OPERATION_PROPERTY_CUSTOM3 999999997 
See also
QDMI_OPERATION_PROPERTY_CUSTOM1
QDMI_OPERATION_PROPERTY_CUSTOM4 999999998 
See also
QDMI_OPERATION_PROPERTY_CUSTOM1
QDMI_OPERATION_PROPERTY_CUSTOM5 999999999 
See also
QDMI_OPERATION_PROPERTY_CUSTOM1
QDMI_OPERATION_PROPERTY_CUSTOM_MAX QDMI_CUSTOM_ENUM_VALUE_MAX 

The largest syntactically valid custom value.

◆ QDMI_JOB_STATUS_T

Enum of the status a job can have.

See also QDMI Client Job Interface for a description of the job's lifecycle.

Enumerator
QDMI_JOB_STATUS_CREATED 

The job was created and can be configured via QDMI_job_set_parameter.

QDMI_JOB_STATUS_SUBMITTED 

The job was submitted.

QDMI_JOB_STATUS_QUEUED 

The job was received, and is waiting to be executed.

QDMI_JOB_STATUS_RUNNING 

The job is running, and the result is not yet available.

QDMI_JOB_STATUS_DONE 

The job is done, and the result can be retrieved.

QDMI_JOB_STATUS_CANCELED 

The job was canceled, and the result is not available.

QDMI_JOB_STATUS_FAILED 

One or more programs failed, or another error occurred in the lifecycle.

◆ QDMI_PROGRAM_ENCODING_T

Encoding of a submitted payload.

Enumerator
QDMI_PROGRAM_ENCODING_TEXT 

Text with exactly one trailing NUL and no earlier NUL.

QDMI_PROGRAM_ENCODING_BINARY 

A nonempty arbitrary byte sequence.

◆ QDMI_JOB_RESULT_T

Enum of the formats the results can be returned in.

Each result applies to the program index passed to QDMI_job_get_results or QDMI_device_job_get_results.

Enumerator
QDMI_JOB_RESULT_SHOTS 

char* (string) The results of the individual shots as a comma-separated list.

Each bit string contains every flat bit output declared by the submitted payload. The following rules assign logical output slots starting at zero:

  • OpenQASM 2 uses creg declarations in source order and increasing bit index within each declaration.
  • OpenQASM 3 uses bit-valued output declarations in source order and increasing bit index within each declaration. If the program has no explicit output declaration, the OpenQASM 3 implicit-output rules select the outputs before this ordering is applied.
  • QIR uses primitive result-recording calls in execution order. A result array contributes its elements in memory order. Container recording calls do not add bits. The string writes the highest-numbered slot first and slot zero at the right. For example, logical slot values [1, 0, 0] produce "001". If the payload output cannot be represented losslessly as one fixed-width bit string per shot, queries for shots and histogram results return QDMI_ERROR_NOTSUPPORTED. Clients can query QDMI_JOB_RESULT_PROGRAMOUTPUT when the submitted descriptor defines a native output representation.

The payload output schema owns the slots. Their width and order are independent of the device sites and physical-site order. For example, "0010,1101,0101" represents three shots of four declared bit outputs.

QDMI_JOB_RESULT_HIST_KEYS 

char* (string) The keys for the histogram of the results.

The histogram of the measurement results is represented as a key-value mapping. This mapping is returned as a list of keys and an equal-length list of values. The corresponding partners of keys and values can be found at the same index in the lists. Each key uses the same payload-declared logical bit order as QDMI_JOB_RESULT_SHOTS.

This constant denotes the list of keys, QDMI_JOB_RESULT_HIST_VALUES denotes the list of values.

QDMI_JOB_RESULT_HIST_VALUES 

size_t* (size_t list) The values for the histogram of the results.

See also
QDMI_JOB_RESULT_HIST_KEY
QDMI_JOB_RESULT_STATEVECTOR_DENSE 

double* (double list) The state vector of the result.

The complex amplitudes are stored as a list of real and imaginary parts. Logical qubit zero is the least-significant bit of basis index n. The real part of the amplitude is at index 2n and the imaginary part is at index 2n+1. For example, the state vector of a 2-qubit system with amplitudes (0.5, 0.5), (0.5, -0.5), (-0.5, 0.5), (-0.5, -0.5) would be represented as {0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5}.

QDMI_JOB_RESULT_PROBABILITIES_DENSE 

double* (double list) The probabilities of the result.

The probabilities are stored as a list of real numbers. Logical qubit zero is the least-significant bit of basis index n. The probability of that state is at index n in the list. For example, the probabilities of a 2-qubit system with states 00, 01, 10, 11 would be represented as {0.25, 0.25, 0.25, 0.25}.

QDMI_JOB_RESULT_STATEVECTOR_SPARSE_KEYS 

char* (string) The keys for the sparse state vector of the result.

The sparse state vector is represented as a key-value mapping. This mapping is returned as a list of keys and an equal-length list of values. The corresponding partners of keys and values can be found at the same index in the lists. Keys write the highest-numbered logical qubit at the left and logical qubit zero at the right.

QDMI_JOB_RESULT_STATEVECTOR_SPARSE_VALUES 

double* (double list) The values for the sparse state vector of the result.

The complex amplitudes are stored in the same way as the dense state vector, but only for the non-zero amplitudes.

See also
QDMI_JOB_RESULT_STATEVECTOR_DENSE QDMI_JOB_RESULT_STATEVECTOR_SPARSE_KEYS
QDMI_JOB_RESULT_PROBABILITIES_SPARSE_KEYS 

char* (string) The keys for the sparse probabilities of the result.

The sparse probabilities are represented as a key-value mapping. This mapping is returned as a list of keys and an equal-length list of values. The corresponding partners of keys and values can be found at the same index in the lists. Keys write the highest-numbered logical qubit at the left and logical qubit zero at the right.

QDMI_JOB_RESULT_PROBABILITIES_SPARSE_VALUES 

double* (double list) The values for the sparse probabilities of the result.

The probabilities are stored in the same way as the dense probabilities, but only for the non-zero probabilities.

See also
QDMI_JOB_RESULT_PROBABILITIES_DENSE QDMI_JOB_RESULT_PROBABILITIES_SPARSE_KEYS
QDMI_JOB_RESULT_PROGRAMOUTPUT 

void* The complete format-native program output.

The exact descriptor defines the byte representation for the selected program. The output is an arbitrary byte sequence and need not be NUL-terminated. For a QIR specification that defines an output schema, the sequence is a complete output-schema stream, including its required headers and every shot record. Devices that accept such a QIR descriptor must support this result. A device may return QDMI_ERROR_NOTSUPPORTED when the submitted descriptor does not define a native output representation.

QDMI_JOB_RESULT_MAX 10 

The maximum value of the enum.

It can be used by devices for bounds checking and validation of function parameters.

Attention
This value must remain the last regular member of the enum besides the custom members and must be updated when new members are added.
QDMI_JOB_RESULT_CUSTOM1 QDMI_CUSTOM_ENUM_VALUE_MIN 

This enum value is reserved for a custom result.

The device defines the meaning and the type of this result.

Attention
The value of this enum member must not be changed to maintain binary compatibility.
QDMI_JOB_RESULT_CUSTOM2 999999996 
See also
QDMI_JOB_RESULT_CUSTOM1
QDMI_JOB_RESULT_CUSTOM3 999999997 
See also
QDMI_JOB_RESULT_CUSTOM1
QDMI_JOB_RESULT_CUSTOM4 999999998 
See also
QDMI_JOB_RESULT_CUSTOM1
QDMI_JOB_RESULT_CUSTOM5 999999999 
See also
QDMI_JOB_RESULT_CUSTOM1
QDMI_JOB_RESULT_CUSTOM_MAX QDMI_CUSTOM_ENUM_VALUE_MAX 

The largest syntactically valid custom value.

◆ QDMI_DEVICE_PULSE_SUPPORT_LEVEL_T

Enum to indicate the level of pulse support a device has.

Enumerator
QDMI_DEVICE_PULSE_SUPPORT_LEVEL_NONE 

The device does not support pulse-level control.

QDMI_DEVICE_PULSE_SUPPORT_LEVEL_SITE 

The device supports pulse-level control at an abstraction level of QDMI_Site.

This means that the device can execute pulse-level instructions on the sites of the device. This level of support is sufficient for most devices that can execute quantum circuits with pulse-level control, as it allows the device to execute pulse-level instructions on the sites of the device.

See also
QDMI_Site for more information on the site abstraction.
QDMI_DEVICE_PULSE_SUPPORT_LEVEL_CHANNEL 

The device supports pulse-level control at an abstraction level of QDMI_Pulse_Channel.

This means that the device can execute pulse-level instructions on the channels of the device. This level of support is sufficient for devices that can execute quantum circuits with pulse-level control on a channel basis, such as devices that use a single channel for all sites.

QDMI_DEVICE_PULSE_SUPPORT_LEVEL_SITEANDCHANNEL 

The device supports pulse-level control at an abstraction level of QDMI_Site and QDMI_Pulse_Channel.

This means that the device can execute pulse-level instructions on both the sites and channels of the device.