mcap/modules/onnxruntime/bindings.jai

13308 lines
804 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// This file was auto-generated using the following command:
//
// jai generate.jai
//
ORT_API_VERSION :: 30;
ORTCHAR_T :: u16;
/** \brief Error codes reported by ONNX Runtime.
*
* The error code associated with an ::OrtStatus.
*/
OrtErrorCode :: enum s32 {
ORT_OK :: 0;
ORT_FAIL :: 1;
ORT_INVALID_ARGUMENT :: 2;
ORT_NO_SUCHFILE :: 3;
ORT_NO_MODEL :: 4;
ORT_ENGINE_ERROR :: 5;
ORT_RUNTIME_EXCEPTION :: 6;
ORT_INVALID_PROTOBUF :: 7;
ORT_MODEL_LOADED :: 8;
ORT_NOT_IMPLEMENTED :: 9;
ORT_INVALID_GRAPH :: 10;
ORT_EP_FAIL :: 11;
ORT_MODEL_LOAD_CANCELED :: 12;
ORT_MODEL_REQUIRES_COMPILATION :: 13;
ORT_NOT_FOUND :: 14;
ORT_DEVICE_RESET :: 15;
}
/** Copied from TensorProto::DataType
* Currently, Ort doesn't support complex64, complex128
*/
ONNXTensorElementDataType :: enum s32 {
ONNX_TENSOR_ELEMENT_DATA_TYPE_UNDEFINED :: 0;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT :: 1;
ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT8 :: 2;
ONNX_TENSOR_ELEMENT_DATA_TYPE_INT8 :: 3;
ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT16 :: 4;
ONNX_TENSOR_ELEMENT_DATA_TYPE_INT16 :: 5;
ONNX_TENSOR_ELEMENT_DATA_TYPE_INT32 :: 6;
ONNX_TENSOR_ELEMENT_DATA_TYPE_INT64 :: 7;
ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING :: 8;
ONNX_TENSOR_ELEMENT_DATA_TYPE_BOOL :: 9;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16 :: 10;
ONNX_TENSOR_ELEMENT_DATA_TYPE_DOUBLE :: 11;
ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT32 :: 12;
ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT64 :: 13;
ONNX_TENSOR_ELEMENT_DATA_TYPE_COMPLEX64 :: 14;
ONNX_TENSOR_ELEMENT_DATA_TYPE_COMPLEX128 :: 15;
ONNX_TENSOR_ELEMENT_DATA_TYPE_BFLOAT16 :: 16;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT8E4M3FN :: 17;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT8E4M3FNUZ :: 18;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT8E5M2 :: 19;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT8E5M2FNUZ :: 20;
ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT4 :: 21;
ONNX_TENSOR_ELEMENT_DATA_TYPE_INT4 :: 22;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT4E2M1 :: 23;
ONNX_TENSOR_ELEMENT_DATA_TYPE_UINT2 :: 24;
ONNX_TENSOR_ELEMENT_DATA_TYPE_INT2 :: 25;
ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT8E8M0 :: 26;
}
// Synced with onnx TypeProto oneof
ONNXType :: enum s32 {
ONNX_TYPE_UNKNOWN :: 0;
ONNX_TYPE_TENSOR :: 1;
ONNX_TYPE_SEQUENCE :: 2;
ONNX_TYPE_MAP :: 3;
ONNX_TYPE_OPAQUE :: 4;
ONNX_TYPE_SPARSETENSOR :: 5;
ONNX_TYPE_OPTIONAL :: 6;
}
// These types are synced with internal
// SparseFormatFlags
OrtSparseFormat :: enum s32 {
ORT_SPARSE_UNDEFINED :: 0;
ORT_SPARSE_COO :: 1;
ORT_SPARSE_CSRC :: 2;
ORT_SPARSE_BLOCK_SPARSE :: 4;
}
// Enum allows to query sparse tensor indices
OrtSparseIndicesFormat :: enum s32 {
ORT_SPARSE_COO_INDICES :: 0;
ORT_SPARSE_CSR_INNER_INDICES :: 1;
ORT_SPARSE_CSR_OUTER_INDICES :: 2;
ORT_SPARSE_BLOCK_SPARSE_INDICES :: 3;
}
/** \brief Logging severity levels
*
* In typical API usage, specifying a logging severity level specifies the minimum severity of log messages to show.
*/
OrtLoggingLevel :: enum s32 {
ORT_LOGGING_LEVEL_VERBOSE :: 0;
ORT_LOGGING_LEVEL_INFO :: 1;
ORT_LOGGING_LEVEL_WARNING :: 2;
ORT_LOGGING_LEVEL_ERROR :: 3;
ORT_LOGGING_LEVEL_FATAL :: 4;
}
OrtOpAttrType :: enum s32 {
ORT_OP_ATTR_UNDEFINED :: 0;
ORT_OP_ATTR_INT :: 1;
ORT_OP_ATTR_INTS :: 2;
ORT_OP_ATTR_FLOAT :: 3;
ORT_OP_ATTR_FLOATS :: 4;
ORT_OP_ATTR_STRING :: 5;
ORT_OP_ATTR_STRINGS :: 6;
ORT_OP_ATTR_GRAPH :: 7;
ORT_OP_ATTR_TENSOR :: 8;
}
/** \addtogroup Global
* ONNX Runtime C API
* @{
*/
// The actual types defined have an Ort prefix
OrtEnv :: struct {}
OrtStatus :: struct {}
OrtMemoryInfo :: struct {}
OrtIoBinding :: struct {}
OrtSession :: struct {}
OrtValue :: struct {}
OrtRunOptions :: struct {}
OrtTypeInfo :: struct {}
OrtTensorTypeAndShapeInfo :: struct {}
OrtMapTypeInfo :: struct {}
OrtSequenceTypeInfo :: struct {}
OrtOptionalTypeInfo :: struct {}
OrtSessionOptions :: struct {}
OrtCustomOpDomain :: struct {}
OrtModelMetadata :: struct {}
OrtThreadPoolParams :: struct {}
OrtThreadingOptions :: struct {}
OrtArenaCfg :: struct {}
OrtPrepackedWeightsContainer :: struct {}
OrtTensorRTProviderOptionsV2 :: struct {}
OrtNvTensorRtRtxProviderOptions :: struct {}
OrtCUDAProviderOptionsV2 :: struct {}
OrtCANNProviderOptions :: struct {}
OrtDnnlProviderOptions :: struct {}
OrtOp :: struct {}
OrtOpAttr :: struct {}
OrtLogger :: struct {}
OrtShapeInferContext :: struct {}
OrtLoraAdapter :: struct {}
OrtValueInfo :: struct {}
OrtNode :: struct {}
OrtGraph :: struct {}
OrtModel :: struct {}
OrtModelCompilationOptions :: struct {}
OrtHardwareDevice :: struct {}
OrtEpDevice :: struct {}
OrtKeyValuePairs :: struct {}
OrtSyncStream :: struct {}
OrtExternalInitializerInfo :: struct {}
OrtExternalResourceImporter :: struct {}
OrtDeviceEpIncompatibilityDetails :: struct {}
OrtEpAssignedSubgraph :: struct {}
OrtEpAssignedNode :: struct {}
OrtStatusPtr :: *OrtStatus;
/** \brief Generic function pointer type for experimental API lookup.
*
* Returned by OrtApi::GetExperimentalFunction. Cast to the correct function pointer type before calling.
* The experimental API function pointer types are defined in onnxruntime_experimental_c_api.h.
*
* This is a function pointer rather than \c void* because casting between function pointers and object
* pointers is undefined behavior in C and C++. Using a function pointer type keeps all casts well-defined.
*/
OrtExperimentalFnPtr :: #type () -> void #c_call;
/** \brief Memory allocation interface
*
* Structure of function pointers that defines a memory allocator. This can be created and filled in by the user for custom allocators.
*
* When an allocator is passed to any function, be sure that the allocator object is not destroyed until the last allocated object using it is freed.
*/
OrtAllocator :: struct {
version: u32; ///< Must be initialized to ORT_API_VERSION
/// Returns a pointer to an allocated block of `size` bytes
Alloc: #type (this_: *OrtAllocator, size: u64) -> *void #c_call;
/// Free a block of memory previously allocated with OrtAllocator::Alloc
Free: #type (this_: *OrtAllocator, p: *void) -> void #c_call;
/// Return a pointer to an ::OrtMemoryInfo that describes this allocator
Info: #type (this_: *OrtAllocator) -> *OrtMemoryInfo #c_call;
/**
* @brief Optional allocation function to use for memory allocations made during session initialization.
* Use this function if you want to separate allocations made by ORT during Run() calls from
* those made during session initialization. This allows for separate memory management strategies for these
* allocations.
*
* \return pointer to an allocated block of `size` bytes. nullptr if size was 0 or allocation failed.
*
* \since 1.18
*/
Reserve: #type (this_: *OrtAllocator, size: u64) -> *void #c_call;
/**
* @brief Function used to get the statistics of the allocator.
*
* Return a pointer to the OrtKeyValuePairs structure that contains the statistics of the allocator.
* The user should call OrtApi::ReleaseKeyValuePairs when done.
*
* Current known keys are:
* - Limit: Bytes limit of the allocator. -1 if no limit is set.
* - InUse: Number of bytes in use.
* - TotalAllocated: The total number of allocated bytes by the allocator.
* - MaxInUse: The maximum bytes in use.
* - NumAllocs: Number of allocations.
* - NumReserves: Number of reserves. (Number of calls to Reserve() in arena-based allocators)
* - NumArenaExtensions: Number of arena extensions (Relevant only for arena based allocators)
* - NumArenaShrinkages: Number of arena shrinkages (Relevant only for arena based allocators)
* - MaxAllocSize: The max single allocation seen.
*
* The allocator is free to add other entries as appropriate.
*
* \note Implementation of this function is optional and GetStats may be set to a nullptr.
* If the OrtAllocator is wrapping an internal ORT allocator that does not implement GetStats
* the returned OrtKeyValuePairs instance will be empty.
*
* \since 1.23
*/
GetStats: #type (this_: *OrtAllocator, out: **OrtKeyValuePairs) -> OrtStatusPtr #c_call;
/** \brief Allocate using a stream.
*
* If the allocator is stream aware this performs allocation using a stream.
*
* Alloc will be used if this is nullptr.
*
* \param[in] this_ OrtAllocator instance
* \param[in] size Size of the allocation in bytes. nullptr if size was 0 or allocation failed.
* \param[in] stream The stream to allocate on.
*
* \return pointer to an allocated block of `size` bytes
*
* \note Implementation of this function is optional and AllocOnStream may be set to a nullptr.
* \since 1.23
*/
AllocOnStream: #type (this_: *OrtAllocator, size: u64, stream: *OrtSyncStream) -> *void #c_call;
/** \brief Release unused memory held by the allocator back to the system.
*
* For arena-based allocators, this frees allocation regions that are completely unused.
* For mempool-based allocators, this trims the pool to a configured minimum.
* For non-arena allocators this is a no-op.
*
* \param[in] this_ OrtAllocator instance
*
* \return nullptr on success, or an OrtStatus* on failure.
*
* \note Implementation of this function is optional and Shrink may be set to a nullptr.
* Callers must check for nullptr before invoking.
* \since 1.25
*/
Shrink: #type (this_: *OrtAllocator) -> OrtStatusPtr #c_call;
}
OrtLoggingFunction :: #type (param: *void, severity: OrtLoggingLevel, category: *u8, logid: *u8, code_location: *u8, message: *u8) -> void #c_call;
/** \brief Graph optimization level
*
* Refer to https://www.onnxruntime.ai/docs/performance/graph-optimizations.html#graph-optimization-levels
* for an in-depth understanding of the Graph Optimization Levels.
*/
GraphOptimizationLevel :: enum s32 {
ORT_DISABLE_ALL :: 0;
ORT_ENABLE_BASIC :: 1;
ORT_ENABLE_EXTENDED :: 2;
ORT_ENABLE_LAYOUT :: 3;
ORT_ENABLE_ALL :: 99;
}
ExecutionMode :: enum s32 {
ORT_SEQUENTIAL :: 0;
ORT_PARALLEL :: 1;
}
/** \brief Language projection identifiers
* /see OrtApi::SetLanguageProjection
*/
OrtLanguageProjection :: enum s32 {
ORT_PROJECTION_C :: 0;
ORT_PROJECTION_CPLUSPLUS :: 1;
ORT_PROJECTION_CSHARP :: 2;
ORT_PROJECTION_PYTHON :: 3;
ORT_PROJECTION_JAVA :: 4;
ORT_PROJECTION_WINML :: 5;
ORT_PROJECTION_NODEJS :: 6;
}
OrtKernelInfo :: struct {}
OrtKernelContext :: struct {}
OrtAllocatorType :: enum s32 {
OrtInvalidAllocator :: -1;
OrtDeviceAllocator :: 0;
OrtArenaAllocator :: 1;
OrtReadOnlyAllocator :: 2;
}
/** \brief Memory types for allocated memory, execution provider specific types should be extended in each provider.
*/
// Whenever this struct is updated, please also update the MakeKey function in onnxruntime / core / framework / execution_provider.cc
OrtMemType :: enum s32 {
OrtMemTypeCPUInput :: -2;
OrtMemTypeCPUOutput :: -1;
OrtMemTypeCPU :: -1;
OrtMemTypeDefault :: 0;
}
/** \brief This matches OrtDevice::MemoryType values */
OrtDeviceMemoryType :: enum s32 {
OrtDeviceMemoryType_DEFAULT :: 0;
OrtDeviceMemoryType_HOST_ACCESSIBLE :: 5;
}
/** \brief This mimics OrtDevice type constants so they can be returned in the API
*/
OrtMemoryInfoDeviceType :: enum s32 {
OrtMemoryInfoDeviceType_CPU :: 0;
OrtMemoryInfoDeviceType_GPU :: 1;
OrtMemoryInfoDeviceType_FPGA :: 2;
OrtMemoryInfoDeviceType_NPU :: 3;
}
OrtHardwareDeviceType :: enum s32 {
OrtHardwareDeviceType_CPU :: 0;
OrtHardwareDeviceType_GPU :: 1;
OrtHardwareDeviceType_NPU :: 2;
}
/** \brief These are the default EP selection policies used by ORT when doing automatic EP selection.
*/
OrtExecutionProviderDevicePolicy :: enum s32 {
OrtExecutionProviderDevicePolicy_DEFAULT :: 0;
OrtExecutionProviderDevicePolicy_PREFER_CPU :: 1;
OrtExecutionProviderDevicePolicy_PREFER_NPU :: 2;
OrtExecutionProviderDevicePolicy_PREFER_GPU :: 3;
OrtExecutionProviderDevicePolicy_MAX_PERFORMANCE :: 4;
OrtExecutionProviderDevicePolicy_MAX_EFFICIENCY :: 5;
OrtExecutionProviderDevicePolicy_MIN_OVERALL_POWER :: 6;
}
/** \brief Reasons why an execution provider might not be compatible with a device
*/
OrtDeviceEpIncompatibilityReason :: enum s32 {
OrtDeviceEpIncompatibility_NONE :: 0;
OrtDeviceEpIncompatibility_DRIVER_INCOMPATIBLE :: 1;
OrtDeviceEpIncompatibility_DEVICE_INCOMPATIBLE :: 2;
OrtDeviceEpIncompatibility_MISSING_DEPENDENCY :: 4;
OrtDeviceEpIncompatibility_UNKNOWN :: -2147483648;
}
/** \brief Delegate to allow providing custom OrtEpDevice selection logic
*
* This delegate is called by the EP selection code to allow the user to provide custom device selection logic.
* The user can use this to select OrtEpDevice instances from the list of available devices.
*
* \param ep_devices The list of available devices.
* \param num_devices The number of available devices.
* \param model_metadata The model metadata.
* \param runtime_metadata The runtime metadata. May be nullptr.
* \param selected Pre-allocated array to populate with selected OrtEpDevice pointers from ep_devices.
* \param max_selected The maximum number of devices that can be selected in the pre-allocated array.
Currently the maximum is 8.
* \param num_selected The number of selected devices.
* \param state Opaque pointer. Required to use the delegate from other languages like C# and python.
*
* \return OrtStatus* Selection status. Return nullptr on success.
* Use CreateStatus to provide error info. Use ORT_FAIL as the error code.
* ORT will release the OrtStatus* if not null.
*/
EpSelectionDelegate :: #type (ep_devices: **OrtEpDevice, num_devices: u64, model_metadata: *OrtKeyValuePairs, runtime_metadata: *OrtKeyValuePairs, selected: **OrtEpDevice, max_selected: u64, num_selected: *u64, state: *void) -> *OrtStatus #c_call;
/** \brief Function called by ORT to write a buffer to a custom destination (e.g., file, stream, etc.).
*
* \param state Opaque pointer holding the user's state.
* \param buffer The buffer to write.
* \param buffer_num_bytes The size of the buffer in bytes.
*
* \return OrtStatus* Write status. Return nullptr on success.
* Use CreateStatus to provide error info. Use ORT_FAIL as the error code.
* ORT will release the OrtStatus* if not null.
*/
OrtWriteBufferFunc :: #type (state: *void, buffer: *void, buffer_num_bytes: u64) -> *OrtStatus #c_call;
/** \brief Function called by ORT to allow user to specify how an initializer should be saved, that is, either
* written to an external file or stored within the model. ORT calls this function for every initializer when
* generating a model.
*
* If the function implementation sets the `new_external_info` output parameter to NULL, ORT stores the initializer data
* within the generated model.
*
* Otherwise, if the function implementation sets `new_external_info` to a valid OrtExternalInitializerInfo instance,
* ORT assumes that this function stores the initializer data in a file. In this case, ORT configures the model's
* initializer to point to the location specified by the `new_external_info` output parameter.
*
* \param[in] state Opaque pointer holding the user's state.
* \param[in] initializer_name The initializer's name as a null-terminated string.
* \param[in] initializer_value OrtValue containing the initializer's data, type, and shape.
* \param[in] external_info If the initializer is originally stored in an external file, `external_info` contains
* the file path, file offset, and the data's byte size within the file. Otherwise,
* `external_info` is NULL if the initializer is not originally stored in a file.
* \param[out] new_external_info Output parameter set to a new OrtExternalInitializerInfo instance indicating the
* location where the function implementation stored the initializer data.
* The function implementation must use `OrtApi::CreateExternalInitializerInfo()` to
* create the instance.
* If the function implementation sets `new_external_info` to NULL,
* ORT stores the initializers within the model.
*
* \note ORT takes ownership of the `new_external_info` output parameter.
*
* \return OrtStatus* Write status. Return nullptr on success.
* Use CreateStatus to provide error info. Use ORT_FAIL as the error code.
* ORT will release the OrtStatus* if not null.
*/
OrtGetInitializerLocationFunc :: #type (state: *void, initializer_name: *u8, initializer_value: *OrtValue, external_info: *OrtExternalInitializerInfo, new_external_info: **OrtExternalInitializerInfo) -> *OrtStatus #c_call;
/** \brief Algorithm to use for cuDNN Convolution Op
*/
OrtCudnnConvAlgoSearch :: enum s32 {
OrtCudnnConvAlgoSearchExhaustive :: 0;
OrtCudnnConvAlgoSearchHeuristic :: 1;
OrtCudnnConvAlgoSearchDefault :: 2;
}
/** \brief CUDA Provider Options
*
* \see OrtApi::SessionOptionsAppendExecutionProvider_CUDA
*/
OrtCUDAProviderOptions :: struct {
/** \brief CUDA device Id
* Defaults to 0.
*/
device_id: s32;
/** \brief CUDA Convolution algorithm search configuration.
* See enum OrtCudnnConvAlgoSearch for more details.
* Defaults to OrtCudnnConvAlgoSearchExhaustive.
*/
cudnn_conv_algo_search: OrtCudnnConvAlgoSearch;
/** \brief CUDA memory limit (To use all possible memory pass in maximum size_t)
* Defaults to SIZE_MAX.
* \note If a ::OrtArenaCfg has been applied, it will override this field
*/
gpu_mem_limit: u64;
/** \brief Strategy used to grow the memory arena
* 0 = kNextPowerOfTwo<br>
* 1 = kSameAsRequested<br>
* Defaults to 0.
* \note If a ::OrtArenaCfg has been applied, it will override this field
*/
arena_extend_strategy: s32;
/** \brief Flag indicating if copying needs to take place on the same stream as the compute stream in the CUDA EP
* 0 = Use separate streams for copying and compute.
* 1 = Use the same stream for copying and compute.
* Defaults to 1.
* WARNING: Setting this to 0 may result in data races for some models.
* Please see issue #4829 for more details.
*/
do_copy_in_default_stream: s32;
/** \brief Flag indicating if there is a user provided compute stream
* Defaults to 0.
*/
has_user_compute_stream: s32;
/** \brief User provided compute stream.
* If provided, please set `has_user_compute_stream` to 1.
*/
user_compute_stream: *void;
/** \brief CUDA memory arena configuration parameters
*/
default_memory_arena_cfg: *OrtArenaCfg;
/** \brief Enable TunableOp for using.
* Set it to 1/0 to enable/disable TunableOp. Otherwise, it is disabled by default.
* This option can be overridden by environment variable ORT_CUDA_TUNABLE_OP_ENABLE.
*/
tunable_op_enable: s32;
/** \brief Enable TunableOp for tuning.
* Set it to 1/0 to enable/disable TunableOp tuning. Otherwise, it is disabled by default.
* This option can be overridden by environment variable ORT_CUDA_TUNABLE_OP_TUNING_ENABLE.
*/
tunable_op_tuning_enable: s32;
/** \brief Max tuning duration time limit for each instance of TunableOp.
* Defaults to 0 to disable the limit.
*/
tunable_op_max_tuning_duration_ms: s32;
}
/** \brief ROCM Provider Options
*
* \see OrtApi::SessionOptionsAppendExecutionProvider_ROCM
*/
OrtROCMProviderOptions :: struct {
/** \brief ROCM device Id
* Defaults to 0.
*/
device_id: s32;
/** \brief ROCM MIOpen Convolution algorithm exhaustive search option.
* Defaults to 0 (false).
*/
miopen_conv_exhaustive_search: s32;
/** \brief ROCM memory limit (To use all possible memory pass in maximum size_t)
* Defaults to SIZE_MAX.
* \note If a ::OrtArenaCfg has been applied, it will override this field
*/
gpu_mem_limit: u64;
/** \brief Strategy used to grow the memory arena
* 0 = kNextPowerOfTwo<br>
* 1 = kSameAsRequested<br>
* Defaults to 0.
* \note If a ::OrtArenaCfg has been applied, it will override this field
*/
arena_extend_strategy: s32;
/** \brief Flag indicating if copying needs to take place on the same stream as the compute stream in the ROCM EP
* 0 = Use separate streams for copying and compute.
* 1 = Use the same stream for copying and compute.
* Defaults to 1.
* WARNING: Setting this to 0 may result in data races for some models.
* Please see issue #4829 for more details.
*/
do_copy_in_default_stream: s32;
/** \brief Flag indicating if there is a user provided compute stream
* Defaults to 0.
*/
has_user_compute_stream: s32;
/** \brief User provided compute stream.
* If provided, please set `has_user_compute_stream` to 1.
*/
user_compute_stream: *void;
/** \brief ROCM memory arena configuration parameters
*/
default_memory_arena_cfg: *OrtArenaCfg;
enable_hip_graph: s32;
/** \brief Enable TunableOp for using.
* Set it to 1/0 to enable/disable TunableOp. Otherwise, it is disabled by default.
* This option can be overridden by environment variable ORT_ROCM_TUNABLE_OP_ENABLE.
*/
tunable_op_enable: s32;
/** \brief Enable TunableOp for tuning.
* Set it to 1/0 to enable/disable TunableOp tuning. Otherwise, it is disabled by default.
* This option can be overridden by environment variable ORT_ROCM_TUNABLE_OP_TUNING_ENABLE.
*/
tunable_op_tuning_enable: s32;
/** \brief Max tuning duration time limit for each instance of TunableOp.
* Defaults to 0 to disable the limit.
*/
tunable_op_max_tuning_duration_ms: s32;
}
/** \brief TensorRT Provider Options
*
* \see OrtApi::SessionOptionsAppendExecutionProvider_TensorRT
*/
OrtTensorRTProviderOptions :: struct {
device_id: s32; ///< CUDA device id (0 = default device)
has_user_compute_stream: s32; // indicator of user specified CUDA compute stream.
user_compute_stream: *void; // user specified CUDA compute stream.
trt_max_partition_iterations: s32; // maximum iterations for TensorRT parser to get capability
trt_min_subgraph_size: s32; // minimum size of TensorRT subgraphs
trt_max_workspace_size: u64; // maximum workspace size for TensorRT.
trt_fp16_enable: s32; // enable TensorRT FP16 precision. Default 0 = false, nonzero = true
trt_int8_enable: s32; // enable TensorRT INT8 precision. Default 0 = false, nonzero = true
trt_int8_calibration_table_name: *u8; // TensorRT INT8 calibration table name.
trt_int8_use_native_calibration_table: s32; // use native TensorRT generated calibration table. Default 0 = false, nonzero = true
trt_dla_enable: s32; // enable DLA. Default 0 = false, nonzero = true
trt_dla_core: s32; // DLA core number. Default 0
trt_dump_subgraphs: s32; // dump TRT subgraph. Default 0 = false, nonzero = true
trt_engine_cache_enable: s32; // enable engine caching. Default 0 = false, nonzero = true
trt_engine_cache_path: *u8; // specify engine cache path
trt_engine_decryption_enable: s32; // enable engine decryption. Default 0 = false, nonzero = true
trt_engine_decryption_lib_path: *u8; // specify engine decryption library path
trt_force_sequential_engine_build: s32; // force building TensorRT engine sequentially. Default 0 = false, nonzero = true
}
/** \brief MIGraphX Provider Options
*
* \see OrtApi::SessionOptionsAppendExecutionProvider_MIGraphX
*/
OrtMIGraphXProviderOptions :: struct {
device_id: s32; // hip device id.
migraphx_fp16_enable: s32; // MIGraphX FP16 precision. Default 0 = false, nonzero = true
migraphx_fp8_enable: s32; // MIGraphX FP8 precision. Default 0 = false, nonzero = true
migraphx_int8_enable: s32; // MIGraphX INT8 precision. Default 0 = false, nonzero = true
migraphx_use_native_calibration_table: s32; // MIGraphx INT8 cal table. Default 0 = false, nonzero = true
migraphx_int8_calibration_table_name: *u8; // MIGraphx INT8 calibration table name
migraphx_save_compiled_model: s32; // migraphx save compiled model. Default 0 = false, nonzero = true
migraphx_save_model_path: *u8; // migraphx model path name
migraphx_load_compiled_model: s32; // migraphx int8 cal table. Default 0 = false, nonzero = true
migraphx_load_model_path: *u8; // migraphx model path name
migraphx_exhaustive_tune: bool; // MIGraphX tuned compile. Default = false, nonzero = true
/** \brief MIGraphX memory limit (To use all possible memory pass in maximum size_t)
* Defaults to SIZE_MAX.
* \note If a ::OrtArenaCfg has been applied, it will override this field
*/
migraphx_mem_limit: u64;
/** \brief Strategy used to grow the memory arena
* 0 = kNextPowerOfTwo<br>
* 1 = kSameAsRequested<br>
* Defaults to 0.
* \note If a ::OrtArenaCfg has been applied, it will override this field
*/
migraphx_arena_extend_strategy: s32;
}
/** \brief OpenVINO Provider Options
* \brief This Struct is frozen since ORT 1.13.0. Its maintained part of Legacy API for compatibility.
* \brief For latest OpenVINO Provider Options update to the ProviderOptions map.
* \brief Latest OpenVINO Provider Options are listed in the
* \htmlonly
* <a href="https://onnxruntime.ai/docs/execution-providers/OpenVINO-ExecutionProvider.html#summary-of-options">onnxruntime document.</a>
* \endhtmlonly
* \see OrtApi::SessionOptionsAppendExecutionProvider()
*/
OrtOpenVINOProviderOptions :: struct {
/** \brief Device type string
*
* Valid settings are one of: "CPU_FP32", "CPU_FP16", "GPU_FP32", "GPU_FP16"
*/
device_type: *u8;
enable_npu_fast_compile: u8; ///< 0 = disabled, nonzero = enabled
device_id: *u8;
num_of_threads: u64; ///< 0 = Use default number of threads
cache_dir: *u8; // path is set to empty by default
_context: *void;
enable_opencl_throttling: u8; ///< 0 = disabled, nonzero = enabled
enable_dynamic_shapes: u8; ///< 0 = disabled, nonzero = enabled
}
OrtTrainingApi :: struct {}
/** \brief The helper interface to get the right version of OrtApi
*
* Get a pointer to this structure through ::OrtGetApiBase
*/
OrtApiBase :: struct {
/** \brief Get a pointer to the requested version of the ::OrtApi
*
* \param[in] version Must be ::ORT_API_VERSION
* \return The ::OrtApi for the version requested, nullptr will be returned if this version is unsupported, for example when using a runtime
* older than the version created with this header file.
*
* One can call GetVersionString() to get the version of the Onnxruntime library for logging
* and error reporting purposes.
*/
GetApi: #type (version: u32) -> *OrtApi #c_call;
/** \brief Returns a null terminated string of the version of the Onnxruntime library (eg: "1.8.1")
*
* \return UTF-8 encoded version string. Do not deallocate the returned buffer.
*/
GetVersionString: #type () -> *u8 #c_call;
}
/** \brief Thread work loop function
*
* Onnxruntime will provide the working loop on custom thread creation
* Argument is an onnxruntime built-in type which will be provided when thread pool calls OrtCustomCreateThreadFn
*/
OrtThreadWorkerFn :: #type (ort_worker_fn_param: *void) -> void #c_call;
OrtCustomHandleType :: struct {
__place_holder: u8;
}
OrtCustomThreadHandle :: *OrtCustomHandleType;
/** \brief Ort custom thread creation function
*
* The function should return a thread handle to be used in onnxruntime thread pools
* Onnxruntime will throw exception on return value of nullptr or 0, indicating that the function failed to create a thread
*/
OrtCustomCreateThreadFn :: #type (ort_custom_thread_creation_options: *void, ort_thread_worker_fn: OrtThreadWorkerFn, ort_worker_fn_param: *void) -> OrtCustomThreadHandle #c_call;
/** \brief Custom thread join function
*
* Onnxruntime thread pool destructor will call the function to join a custom thread.
* Argument ort_custom_thread_handle is the value returned by OrtCustomCreateThreadFn
*/
OrtCustomJoinThreadFn :: #type (ort_custom_thread_handle: OrtCustomThreadHandle) -> void #c_call;
/** \brief Thread pool work enqueue callback
*
* Called when work is about to be enqueued to a thread pool worker thread.
* This runs on the thread that is submitting the work.
* \param[in] user_context The user-provided context passed when configuring callbacks
* \return Callback-specific data that will be passed to the configured
* OrtThreadPoolCallbacksConfig::on_start_work and OrtThreadPoolCallbacksConfig::on_stop_work.
* May return NULL.
*/
OrtThreadPoolWorkEnqueueFn :: #type (user_context: *void) -> *void #c_call;
/** \brief Thread pool work start callback
*
* Called when a thread is about to start executing work.
* This typically runs on a worker thread, but may also run on the submitting thread
* when the work queue is full and work is executed synchronously.
* \param[in] user_context The user-provided context passed when configuring callbacks
* \param[in] enqueue_data Data returned by the corresponding OrtThreadPoolCallbacksConfig::on_enqueue call
*/
OrtThreadPoolWorkStartFn :: #type (user_context: *void, enqueue_data: *void) -> void #c_call;
/** \brief Thread pool work stop callback
*
* Called when a thread has finished executing work.
* This typically runs on a worker thread, but may also run on the submitting thread
* when the work queue is full and work is executed synchronously.
* Guaranteed to be called regardless of whether the work finishes successfully or not.
* \param[in] user_context The user-provided context passed when configuring callbacks
* \param[in] enqueue_data Data returned by the corresponding OrtThreadPoolCallbacksConfig::on_enqueue call
*/
OrtThreadPoolWorkStopFn :: #type (user_context: *void, enqueue_data: *void) -> void #c_call;
/** \brief Thread pool work abandon callback
*
* Called when enqueued work is abandoned (revoked or rejected) without execution.
* This allows the caller to free any resources associated with enqueue_data.
* \param[in] user_context The user-provided context passed when configuring callbacks
* \param[in] enqueue_data Data returned by the corresponding OrtThreadPoolCallbacksConfig::on_enqueue call
*/
OrtThreadPoolWorkAbandonFn :: #type (user_context: *void, enqueue_data: *void) -> void #c_call;
/** \brief Configuration for thread pool work callbacks.
*
* A versioned struct that bundles all thread pool callback function pointers and a user context.
* Pass to OrtApi::SetPerSessionThreadPoolCallbacks.
*
* \note The version field must be set to ORT_API_VERSION.
* \note New fields MUST only be appended at the end of this struct.
*
* \since Version 1.25.
*/
OrtThreadPoolCallbacksConfig :: struct {
version: u32; /**< Must be ORT_API_VERSION */
on_enqueue: OrtThreadPoolWorkEnqueueFn; /**< Called when work is enqueued. May be NULL. */
on_start_work: OrtThreadPoolWorkStartFn; /**< Called when work starts. May be NULL. */
on_stop_work: OrtThreadPoolWorkStopFn; /**< Called when work completes. May be NULL. */
on_abandon: OrtThreadPoolWorkAbandonFn; /**< Called when work is abandoned. May be NULL. */
/**< User-provided context passed to all callbacks. May be NULL.
Must remain valid for the lifetime of the session.
Subject to concurrent invocations from multiple threads
and must be thread-safe. May affect inference performance. */
user_context: *void;
}
RegisterCustomOpsFn :: #type (options: *OrtSessionOptions, api: *OrtApiBase) -> *OrtStatus #c_call;
/** \brief Callback function for RunAsync
*
* \param[in] user_data User specific data that passed back to the callback
* \param[out] outputs On succeed, outputs host inference results, on error, the value will be nullptr
* \param[out] num_outputs Number of outputs, on error, the value will be zero
* \param[out] status On error, status will provide details
*/
RunAsyncCallbackFn :: #type (user_data: *void, outputs: **OrtValue, num_outputs: u64, status: OrtStatusPtr) -> void #c_call;
/** \brief External memory handle type for importing GPU/NPU resources.
*
* \todo Add Linux DMA-BUF file descriptor for embedded GPU memory sharing
*
* \since Version 1.24.
*/
OrtExternalMemoryHandleType :: enum s32 {
ORT_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE :: 0;
ORT_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP :: 1;
ORT_EXTERNAL_MEMORY_HANDLE_TYPE_MEMORY_WIN32 :: 2;
ORT_EXTERNAL_MEMORY_HANDLE_TYPE_MEMORY_OPAQUE_FD :: 3;
ORT_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION :: 4;
}
/** \brief Descriptor for importing external memory.
*
* \note The version field must be set to ORT_API_VERSION.
* This ensures forward compatibility as fields may be added in future versions.
*
* \since Version 1.24.
*/
OrtExternalMemoryDescriptor :: struct {
version: u32; /**< Must be ORT_API_VERSION */
handle_type: OrtExternalMemoryHandleType; /**< Type of the external memory handle */
native_handle: *void; /**< Platform-specific handle (e.g., Windows HANDLE) */
size_bytes: u64; /**< Total size in bytes of the external allocation */
/**< Offset in bytes into the allocation (default 0).
Base offset for the imported memory region. */
offset_bytes: u64;
}
/** \brief External semaphore type for GPU synchronization.
*
* \since Version 1.24.
*/
OrtExternalSemaphoreType :: enum s32 {
ORT_EXTERNAL_SEMAPHORE_D3D12_FENCE :: 0;
ORT_EXTERNAL_SEMAPHORE_VK_TIMELINE_SEMAPHORE_WIN32 :: 1;
ORT_EXTERNAL_SEMAPHORE_VK_TIMELINE_SEMAPHORE_OPAQUE_FD :: 2;
}
/** \brief Descriptor for importing external semaphores.
*
* \note The version field must be set to ORT_API_VERSION.
* This ensures forward compatibility as fields may be added in future versions.
*
* \since Version 1.24.
*/
OrtExternalSemaphoreDescriptor :: struct {
version: u32; /**< Must be ORT_API_VERSION */
type: OrtExternalSemaphoreType; /**< Type of the external semaphore */
native_handle: *void; /**< Platform-specific handle (e.g., Windows HANDLE) */
}
/** \brief Graphics API type for interop configuration.
*
* Specifies the graphics API used for GPU interop with the execution provider.
* This enables synchronization between graphics workloads (e.g., rendering, compute shaders)
* and ONNX Runtime inference.
*
* \since Version 1.25.
*/
OrtGraphicsApi :: enum s32 {
ORT_GRAPHICS_API_NONE :: 0;
ORT_GRAPHICS_API_D3D12 :: 1;
ORT_GRAPHICS_API_VULKAN :: 2;
}
/** \brief Configuration for initializing graphics interop on an EP factory.
*
* This structure contains all parameters needed to set up graphics interop between
* ONNX Runtime and an external graphics API (D3D12, Vulkan). The factory stores this
* configuration and uses it when creating synchronization streams.
*
* Design rationale:
* - Single init function with all required params to avoid multiple init signatures
* - Factory stores the context and uses it in stream creation
* - Supports extensibility via additional_options for future requirements
*
* Example usage for D3D12:
* \code
* const OrtInteropApi* interop_api = ort_api->GetInteropApi();
* OrtGraphicsInteropConfig config = {0};
* config.version = ORT_API_VERSION;
* config.graphics_api = ORT_GRAPHICS_API_D3D12;
* config.command_queue = my_d3d12_command_queue; // ID3D12CommandQueue*
* status = interop_api->InitGraphicsInteropForEpDevice(ep_device, &config);
* \endcode
*
* \note The version field must be set to ORT_API_VERSION.
* This ensures forward compatibility as fields may be added in future versions.
*
* \since Version 1.25.
*/
OrtGraphicsInteropConfig :: struct {
version: u32; /**< Must be ORT_API_VERSION */
graphics_api: OrtGraphicsApi; /**< The graphics API to use for interop */
/** \brief Command queue/submission queue for graphics workloads (optional).
*
* Optional. When provided, the factory may use it for efficient GPU-side synchronization
* with inference streams (performance optimization). When null, the Interop API still
* works; streams use the default context.
*
* For D3D12: ID3D12CommandQueue*
* For Vulkan: pass NULL
*/
command_queue: *void;
/** \brief Additional API-specific options (optional).
*
* Can be used for future extensibility without changing the struct layout.
* For example, D3D12 fence sharing flags or provider-specific options like
* onnxruntime::nv::provider_option_names::kExternalComputeQueueDataParamNV_data
* for Vulkan interop for the NvTensorRTRTX provider.
*/
additional_options: *OrtKeyValuePairs;
}
/** \brief Descriptor for creating a tensor from imported external memory.
*
* \note The version field must be set to ORT_API_VERSION.
* This ensures forward compatibility as fields may be added in future versions.
*
* \since Version 1.24.
*/
OrtExternalTensorDescriptor :: struct {
version: u32; /**< Must be ORT_API_VERSION */
element_type: ONNXTensorElementDataType; /**< Data type of tensor elements */
shape: *s64; /**< Array of dimension sizes */
rank: u64; /**< Number of dimensions */
/**< Additional offset within imported memory (default 0).
Applied relative to OrtExternalMemoryDescriptor::offset_bytes.
Enables multiple tensors from the same imported memory handle. */
offset_bytes: u64;
}
/*
* Public enum for compiled model compatibility across EPs.
*/
OrtCompiledModelCompatibility :: enum s32 {
OrtCompiledModelCompatibility_EP_NOT_APPLICABLE :: 0;
OrtCompiledModelCompatibility_EP_SUPPORTED_OPTIMAL :: 1;
OrtCompiledModelCompatibility_EP_SUPPORTED_PREFER_RECOMPILATION :: 2;
OrtCompiledModelCompatibility_EP_UNSUPPORTED :: 3;
}
/** \brief Configuration options for creating an OrtEnv.
*
* \note The version field must be set to ORT_API_VERSION.
* This ensures forward compatibility as fields may be added in future versions.
*
* \since Version 1.24.
*/
OrtEnvCreationOptions :: struct {
version: u32; ///< Must be set to ORT_API_VERSION
/** \brief The logging severity level for the environment. Must be set to a value from OrtLoggingLevel.
*
* \note Logging messages which are less severe than the `logging_severity_level` are not emitted.
*
* \note Serves as the default logging severity level for session creation and runs.
* Use OrtApi::SetSessionLogSeverityLevel to set a logging severity level for the creation of specific session.
* Use OrtApi::RunOptionsSetRunLogSeverityLevel to set a logging severity level for a specific session run.
*
* \since Version 1.24.
*/
logging_severity_level: s32;
/** \brief The log identifier. Must be set to a valid UTF-8 null-terminated string.
*
* \note This string identifier is copied by ORT.
*
* \since Version 1.24.
*/
log_id: *u8;
/** \brief Optional custom logging function. May be set to NULL.
*
* \note The OrtEnvCreationOptions::custom_logging_param is provided as the first argument to this logging function.
* This allows passing custom state into the logging function.
*
* \note This function is only called when a message's severity meets or exceeds the set logging severity level.
*
* \since Version 1.24.
*/
custom_logging_function: OrtLoggingFunction;
/** \brief Optional state to pass as the first argument to OrtEnvCreationOptions::custom_logger_function.
* May be set to NULL.
*
* \since Version 1.24.
*/
custom_logging_param: *void;
/** \brief Optional threading options for creating an environment with global thread pools shared across sessions.
* May be set to NULL.
*
* \note The OrtThreadingOptions instance is copied by ORT.
*
* \note Use OrtApi::CreateThreadingOptions() to create an instance of OrtThreadingOptions.
*
* \note Use this in conjunction with OrtApi::DisablePerSessionThreads or else the session will use its own
* thread pools.
*
* \since Version 1.24.
*/
threading_options: *OrtThreadingOptions;
/** \brief Optional environment configuration entries represented as string key-value pairs. May be set to NULL.
*
* \note The OrtKeyValuePairs instance is copied by ORT.
*
* \note Refer to onnxruntime_env_config_keys.h for common config entry keys and their supported values.
*
* \note An application provides environment-level configuration options for execution provider libraries by
* using keys with the prefix 'ep_factory.\\<ep_name\\>.'. Ex: the key 'ep_factory.my_ep.some_ep_key' represents
* a key named 'some_ep_key' that is meant to be consumed by an execution provider named 'my_ep'. Refer to
* the specific execution provider's documentation for valid keys and values.
*
* \note An application may separately set session-level configuration options for execution providers via other APIs
* such as SessionOptionsAppendExecutionProvider_V2, which store configuration entries within OrtSessionOptions.
* If an environment-level configuration conflicts with a session-level configuration, then
* precedence is determined by the execution provider library itself.
*
* \since Version 1.24.
*/
config_entries: *OrtKeyValuePairs;
}
/** \brief The C API
*
* All C API functions are defined inside this structure as pointers to functions.
* Call OrtApiBase::GetApi to get a pointer to it
*
* \nosubgrouping
*/
OrtApi :: struct {
/**
* \brief Create an OrtStatus from a null terminated string
*
* \param[in] code
* \param[in] msg A null-terminated string. Its contents will be copied.
* \return A new OrtStatus object, must be destroyed with OrtApi::ReleaseStatus
*/
CreateStatus: #type (code: OrtErrorCode, msg: *u8) -> *OrtStatus #c_call;
/** \brief Get OrtErrorCode from OrtStatus
*
* \param[in] status
* \return OrtErrorCode that \p status was created with
*/
GetErrorCode: #type (status: *OrtStatus) -> OrtErrorCode #c_call;
/** \brief Get error string from OrtStatus
*
* \param[in] status
* \return The error message inside the `status`. Do not free the returned value.
*/
GetErrorMessage: #type (status: *OrtStatus) -> *u8 #c_call;
/** \brief Create an OrtEnv
*
* \note Invoking this function will return the same instance of the environment as that returned by a previous call
* to another env creation function; all arguments to this function will be ignored.
* \param[in] log_severity_level The log severity level.
* \param[in] logid The log identifier.
* \param[out] out Returned newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateEnv: #type (log_severity_level: OrtLoggingLevel, logid: *u8, out: **OrtEnv) -> OrtStatusPtr #c_call;
/** \brief Create an OrtEnv
*
* \note Invoking this function will return the same instance of the environment as that returned by a previous call
* to another env creation function; all arguments to this function will be ignored. If you want to provide your
* own logging function, consider setting it using the SetUserLoggingFunction API instead.
* \param[in] logging_function A pointer to a logging function.
* \param[in] logger_param A pointer to arbitrary data passed as the ::OrtLoggingFunction `param` parameter to
* `logging_function`. This parameter is optional.
* \param[in] log_severity_level The log severity level.
* \param[in] logid The log identifier.
* \param[out] out Returned newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateEnvWithCustomLogger: #type (logging_function: OrtLoggingFunction, logger_param: *void, log_severity_level: OrtLoggingLevel, logid: *u8, out: **OrtEnv) -> OrtStatusPtr #c_call;
/** \brief Enable Telemetry
*
* \note Telemetry events are on by default since they are lightweight
* \param[in] env
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
EnableTelemetryEvents: #type (env: *OrtEnv) -> OrtStatusPtr #c_call;
/** \brief Disable Telemetry
*
* \see OrtApi::EnableTelemetryEvents
* \param[in] env
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
DisableTelemetryEvents: #type (env: *OrtEnv) -> OrtStatusPtr #c_call;
/** \brief Create an OrtSession from a model file
*
* \param[in] env
* \param[in] model_path
* \param[in] options
* \param[out] out Returned newly created OrtSession. Must be freed with OrtApi::ReleaseSession
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
// TODO: document the path separator convention? '/' vs '\'
// TODO: should specify the access characteristics of model_path. Is this read only during the
// execution of CreateSession, or does the OrtSession retain a handle to the file/directory
// and continue to access throughout the OrtSession lifetime?
// What sort of access is needed to model_path : read or read/write?
CreateSession: #type (env: *OrtEnv, model_path: *u16, options: *OrtSessionOptions, out: **OrtSession) -> OrtStatusPtr #c_call;
/** \brief Create an OrtSession from memory
*
* \param[in] env
* \param[in] model_data
* \param[in] model_data_length
* \param[in] options
* \param[out] out Returned newly created OrtSession. Must be freed with OrtApi::ReleaseSession
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateSessionFromArray: #type (env: *OrtEnv, model_data: *void, model_data_length: u64, options: *OrtSessionOptions, out: **OrtSession) -> OrtStatusPtr #c_call;
/** \brief Run the model in an ::OrtSession
*
* Will not return until the model run has completed. Multiple threads might be used to run the model based on
* the options in the ::OrtSession and settings used when creating the ::OrtEnv
*
* \param[in] session
* \param[in] run_options If nullptr, will use a default ::OrtRunOptions
* \param[in] input_names Array of null terminated UTF8 encoded strings of the input names
* \param[in] inputs Array of ::OrtValue%s of the input values
* \param[in] input_len Number of elements in the input_names and inputs arrays
* \param[in] output_names Array of null terminated UTF8 encoded strings of the output names
* \param[in] output_names_len Number of elements in the output_names and outputs array
* \param[out] outputs Array of ::OrtValue%s that the outputs are stored in. This can also be
* an array of nullptr values, in this case ::OrtValue objects will be allocated and pointers
* to them will be set into the `outputs` array.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
Run: #type (session: *OrtSession, run_options: *OrtRunOptions, input_names: **u8, inputs: **OrtValue, input_len: u64, output_names: **u8, output_names_len: u64, outputs: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtSessionOptions object
*
* To use additional providers, you must build ORT with the extra providers enabled. Then call one of these
* functions to enable them in the session:<br>
* OrtSessionOptionsAppendExecutionProvider_CPU<br>
* OrtSessionOptionsAppendExecutionProvider_CUDA<br>
* OrtSessionOptionsAppendExecutionProvider_(remaining providers...)<br>
* The order they are called indicates the preference order as well. In other words call this method
* on your most preferred execution provider first followed by the less preferred ones.
* If none are called Ort will use its internal CPU execution provider.
*
* \param[out] options The newly created OrtSessionOptions. Must be freed with OrtApi::ReleaseSessionOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateSessionOptions: #type (options: **OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Set filepath to save optimized model after graph level transformations
*
* \param[in] options
* \param[in] optimized_model_filepath
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetOptimizedModelFilePath: #type (options: *OrtSessionOptions, optimized_model_filepath: *u16) -> OrtStatusPtr #c_call;
/** \brief Create a copy of an existing ::OrtSessionOptions
*
* \param[in] in_options OrtSessionOptions to copy
* \param[out] out_options Returned newly created ::OrtSessionOptions. Must be freed with OrtApi::ReleaseSessionOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CloneSessionOptions: #type (in_options: *OrtSessionOptions, out_options: **OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Set execution mode
*
* Controls whether you want to execute operators in your graph sequentially or in parallel. Usually when the model
* has many branches, setting this option to ExecutionMode.ORT_PARALLEL will give you better performance.
* See [docs/ONNX_Runtime_Perf_Tuning.md] for more details.
*
* \param[in] options
* \param[in] execution_mode
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetSessionExecutionMode: #type (options: *OrtSessionOptions, execution_mode: ExecutionMode) -> OrtStatusPtr #c_call;
/** \brief Enable profiling for a session
*
* \param[in] options
* \param[in] profile_file_prefix
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
EnableProfiling: #type (options: *OrtSessionOptions, profile_file_prefix: *u16) -> OrtStatusPtr #c_call;
/** \brief Disable profiling for a session
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
DisableProfiling: #type (options: *OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Enable the memory pattern optimization
*
* The idea is if the input shapes are the same, we could trace the internal memory allocation
* and generate a memory pattern for future request. So next time we could just do one allocation
* with a big chunk for all the internal memory allocation.
* \note Memory pattern optimization is only available when Sequential Execution mode is enabled (see OrtApi::SetSessionExecutionMode)
*
* \see OrtApi::DisableMemPattern
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
EnableMemPattern: #type (options: *OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Disable the memory pattern optimization
*
* \see OrtApi::EnableMemPattern
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
DisableMemPattern: #type (options: *OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Enable the memory arena on CPU
*
* Arena may pre-allocate memory for future usage.
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
EnableCpuMemArena: #type (options: *OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Disable the memory arena on CPU
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
DisableCpuMemArena: #type (options: *OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Set session log id
*
* \param[in] options
* \param[in] logid The log identifier.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetSessionLogId: #type (options: *OrtSessionOptions, logid: *u8) -> OrtStatusPtr #c_call;
/** \brief Set session log verbosity level
*
* Applies to session load, initialization, etc
*
* \param[in] options
* \param[in] session_log_verbosity_level \snippet{doc} snippets.dox Log Verbosity Level
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetSessionLogVerbosityLevel: #type (options: *OrtSessionOptions, session_log_verbosity_level: s32) -> OrtStatusPtr #c_call;
/** \brief Set session log severity level
*
* \param[in] options
* \param[in] session_log_severity_level The log severity level (refer to ::OrtLoggingLevel for possible values).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetSessionLogSeverityLevel: #type (options: *OrtSessionOptions, session_log_severity_level: s32) -> OrtStatusPtr #c_call;
/** \brief Set the optimization level to apply when loading a graph
*
* Please see https://onnxruntime.ai/docs/performance/model-optimizations/graph-optimizations.html for an in-depth explanation
* \param[in,out] options The session options object
* \param[in] graph_optimization_level The optimization level
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetSessionGraphOptimizationLevel: #type (options: *OrtSessionOptions, graph_optimization_level: GraphOptimizationLevel) -> OrtStatusPtr #c_call;
/** \brief Sets the number of threads used to parallelize the execution within nodes
*
* When running a single node operation, ex. add, this sets the maximum number of threads to use.
*
* \note If built with OpenMP, this has no effect on the number of threads used. In this case
* use the OpenMP env variables to configure the number of intra op num threads.
*
* \param[in] options
* \param[in] intra_op_num_threads Number of threads to use<br>
* A value of 0 will use the default number of threads<br>
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetIntraOpNumThreads: #type (options: *OrtSessionOptions, intra_op_num_threads: s32) -> OrtStatusPtr #c_call;
/** \brief Sets the number of threads used to parallelize the execution of the graph
*
* If nodes can be run in parallel, this sets the maximum number of threads to use to run them in parallel.
*
* \note If sequential execution is enabled this value is ignored, it acts as if it was set to 1.
*
* \param[in] options
* \param[in] inter_op_num_threads Number of threads to use<br>
* A value of 0 will use the default number of threads<br>
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetInterOpNumThreads: #type (options: *OrtSessionOptions, inter_op_num_threads: s32) -> OrtStatusPtr #c_call;
/** \brief Create a custom op domain
*
* \param[in] domain
* \param[out] out Newly created domain. Must be freed with OrtApi::ReleaseCustomOpDomain
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateCustomOpDomain: #type (domain: *u8, out: **OrtCustomOpDomain) -> OrtStatusPtr #c_call;
/** \brief Add a custom op to a custom op domain
*
* \note The OrtCustomOp* pointer must remain valid until the ::OrtCustomOpDomain using it is released
*
* \param[in] custom_op_domain
* \param[in] op
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CustomOpDomain_Add: #type (custom_op_domain: *OrtCustomOpDomain, op: *OrtCustomOp) -> OrtStatusPtr #c_call;
/** \brief Add custom op domain to a session options
*
* \note The OrtCustomOpDomain* must not be deleted until all sessions using it are released
*
* \param[in] options
* \param[in] custom_op_domain
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
AddCustomOpDomain: #type (options: *OrtSessionOptions, custom_op_domain: *OrtCustomOpDomain) -> OrtStatusPtr #c_call;
/** \deprecated Use OrtApi::RegisterCustomOpsLibrary_V2.
*
* Registers custom ops from a shared library.
*
* Loads a shared library (dll on windows, so on linux, etc) named 'library_path' and looks for this entry point:
* OrtStatus* RegisterCustomOps(OrtSessionOptions * options, const OrtApiBase* api);
* It then passes in the provided session options to this function along with the api base.
* The handle to the loaded library is returned in library_handle. It can be freed by the caller after all sessions using the passed in
* session options are destroyed, or if an error occurs and it is non null.
*
* \param[in] options
* \param[in] library_path
* \param[out] library_handle OS specific handle to the loaded library (Use FreeLibrary on Windows, dlclose on Linux, etc.. to unload)
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
RegisterCustomOpsLibrary: #type (options: *OrtSessionOptions, library_path: *u8, library_handle: **void) -> OrtStatusPtr #c_call;
/** \brief Get input count for a session
*
* This number must also match the number of inputs passed to OrtApi::Run
*
* \see OrtApi::SessionGetInputTypeInfo, OrtApi::SessionGetInputName, OrtApi::Session
*
* \param[in] session
* \param[out] out Number of inputs
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetInputCount: #type (session: *OrtSession, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get output count for a session
*
* This number must also match the number of outputs returned by OrtApi::Run
*
* \see OrtApi::SessionGetOutputTypeInfo, OrtApi::SessionGetOutputName, OrtApi::Session
*
* \param[in] session
* \param[out] out Number of outputs
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetOutputCount: #type (session: *OrtSession, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get overridable initializer count
*
* \see OrtApi::SessionGetOverridableInitializerTypeInfo, OrtApi::SessionGetOverridableInitializerName
*
* \param[in] session
* \param[in] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetOverridableInitializerCount: #type (session: *OrtSession, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get input type information
*
* \param[in] session
* \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetInputCount returns (exclusive)
* \param[out] type_info Must be freed with OrtApi::ReleaseTypeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetInputTypeInfo: #type (session: *OrtSession, index: u64, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get output type information
*
* \param[in] session
* \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOutputCount returns (exclusive)
* \param[out] type_info Must be freed with OrtApi::ReleaseTypeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetOutputTypeInfo: #type (session: *OrtSession, index: u64, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get overridable initializer type information
*
* \param[in] session
* \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOverridableInitializerCount returns (exclusive)
* \param[out] type_info Must be freed with OrtApi::ReleaseTypeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetOverridableInitializerTypeInfo: #type (session: *OrtSession, index: u64, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get input name
*
* \param[in] session
* \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetInputCount returns (exclusive)
* \param[in] allocator
* \param[out] value Set to a null terminated UTF-8 encoded string allocated using `allocator`. Must be freed using `allocator`.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetInputName: #type (session: *OrtSession, index: u64, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Get output name
*
* \param[in] session
* \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOutputCount returns (exclusive)
* \param[in] allocator
* \param[out] value Set to a null terminated UTF-8 encoded string allocated using `allocator`. Must be freed using `allocator`.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetOutputName: #type (session: *OrtSession, index: u64, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Get overridable initializer name
*
* \param[in] session
* \param[in] index Must be between 0 (inclusive) and what OrtApi::SessionGetOverridableInitializerCount returns (exclusive)
* \param[in] allocator
* \param[out] value Set to a null terminated UTF-8 encoded string allocated using `allocator`. Must be freed using `allocator`.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetOverridableInitializerName: #type (session: *OrtSession, index: u64, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Create an OrtRunOptions
*
* \param[out] out Returned newly created ::OrtRunOptions. Must be freed with OrtApi::ReleaseRunOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateRunOptions: #type (out: **OrtRunOptions) -> OrtStatusPtr #c_call;
/** \brief Set per-run log verbosity level
*
* \see OrtApi::RunOptionsGetRunLogVerbosityLevel
*
* \param[in] options
* \param[in] log_verbosity_level \snippet{doc} snippets.dox Log Verbosity Level
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
RunOptionsSetRunLogVerbosityLevel: #type (options: *OrtRunOptions, log_verbosity_level: s32) -> OrtStatusPtr #c_call;
/** \brief Set per-run log severity level
*
* \see OrtApi::RunOptionsGetRunLogSeverityLevel
*
* \param[in] options
* \param[in] log_severity_level The log severity level (refer to ::OrtLoggingLevel for possible values).
*/
RunOptionsSetRunLogSeverityLevel: #type (options: *OrtRunOptions, log_severity_level: s32) -> OrtStatusPtr #c_call;
/** \brief Set per-run tag
*
* This is used in a per-run log identifier.
*
* \see OrtApi::RunOptionsGetRunTag
*
* \param[in] options
* \param[in] run_tag The run tag.
*/
RunOptionsSetRunTag: #type (options: *OrtRunOptions, run_tag: *u8) -> OrtStatusPtr #c_call;
/** \brief Get per-run log verbosity level
*
* \see OrtApi::RunOptionsSetRunLogVerbosityLevel
*
* \param[in] options
* \param[out] log_verbosity_level \snippet{doc} snippets.dox Log Verbosity Level
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
RunOptionsGetRunLogVerbosityLevel: #type (options: *OrtRunOptions, log_verbosity_level: *s32) -> OrtStatusPtr #c_call;
/** \brief Get per-run log severity level
*
* \see OrtApi::RunOptionsSetRunLogSeverityLevel
*
* \param[in] options
* \param[out] log_severity_level The log severity level (refer to ::OrtLoggingLevel for possible values).
*/
RunOptionsGetRunLogSeverityLevel: #type (options: *OrtRunOptions, log_severity_level: *s32) -> OrtStatusPtr #c_call;
/** \brief Get per-run tag
*
* This is used in a per-run log identifier.
*
* \see OrtApi::RunOptionsSetRunTag
*
* \param[in] options
* \param[out] run_tag The run tag.
* Do not free this value, it is owned by `options`. It will be invalidated if the run tag
* changes (i.e., with OrtApi::RunOptionsSetRunTag) or `options` is freed.
*/
RunOptionsGetRunTag: #type (options: *OrtRunOptions, run_tag: **u8) -> OrtStatusPtr #c_call;
/** \brief Set terminate flag
*
* If a currently executing session needs to be force terminated, this can be called from another thread to force it to fail with an error.
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
RunOptionsSetTerminate: #type (options: *OrtRunOptions) -> OrtStatusPtr #c_call;
/** \brief Clears the terminate flag
*
* Used so the OrtRunOptions instance can be used in a new OrtApi::Run call without it instantly terminating
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
RunOptionsUnsetTerminate: #type (options: *OrtRunOptions) -> OrtStatusPtr #c_call;
/** \brief Create a tensor
*
* Create a tensor using a supplied ::OrtAllocator
*
* \param[in] allocator
* \param[in] shape Pointer to the tensor shape dimensions.
* \param[in] shape_len The number of tensor shape dimensions.
* \param[in] type
* \param[out] out Returns newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateTensorAsOrtValue: #type (allocator: *OrtAllocator, shape: *s64, shape_len: u64, type: ONNXTensorElementDataType, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Create a tensor backed by a user supplied buffer
*
* Create a tensor with user's buffer. You can fill the buffer either before calling this function or after.
* p_data is owned by caller. ReleaseValue won't release p_data.
*
* If you wish to transfer ownership of p_data to ORT use CreateTensorWithDataAndDeleterAsOrtValue.
*
* \param[in] info Memory description of where the p_data buffer resides (CPU vs GPU etc).
* \param[in] p_data Pointer to the data buffer.
* \param[in] p_data_len The number of bytes in the data buffer.
* \param[in] shape Pointer to the tensor shape dimensions.
* \param[in] shape_len The number of tensor shape dimensions.
* \param[in] type The data type.
* \param[out] out Returns newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateTensorWithDataAsOrtValue: #type (info: *OrtMemoryInfo, p_data: *void, p_data_len: u64, shape: *s64, shape_len: u64, type: ONNXTensorElementDataType, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Return if an ::OrtValue is a tensor type
*
* \param[in] value A tensor type (string tensors are not supported)
* \param[out] out Set to 1 iff ::OrtValue is a tensor, 0 otherwise
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
IsTensor: #type (value: *OrtValue, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Get a pointer to the raw data inside a tensor
*
* Used to read/write/modify the internal tensor data directly.
* \note The returned pointer is valid until the \p value is destroyed.
*
* \param[in] value A tensor type (string tensors are not supported)
* \param[out] out Filled in with a pointer to the internal storage
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetTensorMutableData: #type (value: *OrtValue, out: **void) -> OrtStatusPtr #c_call;
/** \brief Set all strings at once in a string tensor
*
* \param[in,out] value A tensor of type ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING
* \param[in] s An array of strings. Each string in this array must be null terminated.
* \param[in] s_len Count of strings in s (Must match the size of \p value's tensor shape)
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
FillStringTensor: #type (value: *OrtValue, s: **u8, s_len: u64) -> OrtStatusPtr #c_call;
/** \brief Get total byte length for all strings in a string tensor
*
* Typically used with OrtApi::GetStringTensorContent
*
* \param[in] value A tensor of type ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING
* \param[out] len Total byte length of all strings (does not include trailing nulls)
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetStringTensorDataLength: #type (value: *OrtValue, len: *u64) -> OrtStatusPtr #c_call;
/** \brief Get all strings from a string tensor
*
* An example of the results:<br>
* Given \p value is a string tensor with the strings { "This" "is" "a" "test" }<br>
* \p s must have a size of 11 bytes<br>
* \p offsets must have 4 elements<br>
* After the call, these values will be filled in:<br>
* \p s will contain "Thisisatest"<br>
* \p offsets will contain { 0, 4, 6, 7 }<br>
* The length of the last string is just s_len - offsets[last]
*
* \param[in] value A tensor of type ONNX_TENSOR_ELEMENT_DATA_TYPE_STRING
* \param[in] s Buffer to sequentially write all tensor strings to. Each string is NOT null-terminated.
* \param[in] s_len Number of bytes of buffer pointed to by \p s (Get it from OrtApi::GetStringTensorDataLength)
* \param[out] offsets Array of start offsets into the strings written to \p s
* \param[in] offsets_len Number of elements in offsets
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetStringTensorContent: #type (value: *OrtValue, s: *void, s_len: u64, offsets: *u64, offsets_len: u64) -> OrtStatusPtr #c_call;
/** \brief Get ::OrtTensorTypeAndShapeInfo from an ::OrtTypeInfo
*
* \param[in] type_info
* \param[out] out Do not free this value, it will be valid until type_info is freed.
* If type_info does not represent tensor, this value will be set to nullptr.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CastTypeInfoToTensorInfo: #type (_type_info: *OrtTypeInfo, out: **OrtTensorTypeAndShapeInfo) -> OrtStatusPtr #c_call;
/** \brief Get ::ONNXType from ::OrtTypeInfo
*
* \param[in] type_info
* \param[out] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetOnnxTypeFromTypeInfo: #type (_type_info: *OrtTypeInfo, out: *ONNXType) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtTensorTypeAndShapeInfo object
*
* \param[out] out Returns newly created ::OrtTensorTypeAndShapeInfo. Must be freed with OrtApi::ReleaseTensorTypeAndShapeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateTensorTypeAndShapeInfo: #type (out: **OrtTensorTypeAndShapeInfo) -> OrtStatusPtr #c_call;
/** \brief Set element type in ::OrtTensorTypeAndShapeInfo
*
* \param[in] info
* \param[in] type
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetTensorElementType: #type (info: *OrtTensorTypeAndShapeInfo, type: ONNXTensorElementDataType) -> OrtStatusPtr #c_call;
/** \brief Set shape information in ::OrtTensorTypeAndShapeInfo
*
* \param[in] info
* \param[in] dim_values Array with `dim_count` elements. Can contain negative values.
* \param[in] dim_count Number of elements in `dim_values`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetDimensions: #type (info: *OrtTensorTypeAndShapeInfo, dim_values: *s64, dim_count: u64) -> OrtStatusPtr #c_call;
/** \brief Get element type in ::OrtTensorTypeAndShapeInfo
*
* \see OrtApi::SetTensorElementType
*
* \param[in] info
* \param[out] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetTensorElementType: #type (info: *OrtTensorTypeAndShapeInfo, out: *ONNXTensorElementDataType) -> OrtStatusPtr #c_call;
/** \brief Get dimension count in ::OrtTensorTypeAndShapeInfo
*
* \see OrtApi::GetDimensions
*
* \param[in] info
* \param[out] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetDimensionsCount: #type (info: *OrtTensorTypeAndShapeInfo, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get dimensions in ::OrtTensorTypeAndShapeInfo
*
* \param[in] info
* \param[out] dim_values Array with `dim_values_length` elements. On return, filled with the dimensions stored in the ::OrtTensorTypeAndShapeInfo
* \param[in] dim_values_length Number of elements in `dim_values`. Use OrtApi::GetDimensionsCount to get this value
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetDimensions: #type (info: *OrtTensorTypeAndShapeInfo, dim_values: *s64, dim_values_length: u64) -> OrtStatusPtr #c_call;
/** \brief Get symbolic dimension names in ::OrtTensorTypeAndShapeInfo
*
* \param[in] info
* \param[in] dim_params Array with `dim_params_length` elements. On return filled with pointers to null terminated strings of the dimension names
* \param[in] dim_params_length Number of elements in `dim_params`. Use OrtApi::GetDimensionsCount to get this value
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetSymbolicDimensions: #type (info: *OrtTensorTypeAndShapeInfo, dim_params: **u8, dim_params_length: u64) -> OrtStatusPtr #c_call;
/** \brief Get total number of elements in a tensor shape from an ::OrtTensorTypeAndShapeInfo
*
* Return the number of elements specified by the tensor shape (all dimensions multiplied by each other).
* For 0 dimensions, 1 is returned. If any dimension is less than 0, the result is always -1.
*
* Examples:<br>
* [] = 1<br>
* [1,3,4] = 12<br>
* [2,0,4] = 0<br>
* [-1,3,4] = -1<br>
*
* \param[in] info
* \param[out] out Number of elements
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetTensorShapeElementCount: #type (info: *OrtTensorTypeAndShapeInfo, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get type and shape information from a tensor ::OrtValue
*
* \param[in] value Must be a tensor (not a map/sequence/etc) or will return failure
* \param[out] out Newly created ::OrtTensorTypeAndShapeInfo. Must be freed with OrtApi::ReleaseTensorTypeAndShapeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetTensorTypeAndShape: #type (value: *OrtValue, out: **OrtTensorTypeAndShapeInfo) -> OrtStatusPtr #c_call;
/** \brief Get type information of an OrtValue
*
* \param[in] value
* \param[out] out Newly created ::OrtTypeInfo. Must be freed with OrtApi::ReleaseTypeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetTypeInfo: #type (value: *OrtValue, out: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get ONNXType of an ::OrtValue
*
* \param[in] value
* \param[out] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetValueType: #type (value: *OrtValue, out: *ONNXType) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtMemoryInfo
*
* \param[in] name
* \param[in] type
* \param[in] id
* \param[in] mem_type
* \param[out] out Newly created ::OrtMemoryInfo. Must be freed with OrtAPi::ReleaseMemoryInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateMemoryInfo: #type (name: *u8, type: OrtAllocatorType, id: s32, mem_type: OrtMemType, out: **OrtMemoryInfo) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtMemoryInfo for CPU memory
*
* Special case version of OrtApi::CreateMemoryInfo for CPU based memory. Same as using OrtApi::CreateMemoryInfo with name = "Cpu" and id = 0.
*
* \param[in] type
* \param[in] mem_type
* \param[out] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateCpuMemoryInfo: #type (type: OrtAllocatorType, mem_type: OrtMemType, out: **OrtMemoryInfo) -> OrtStatusPtr #c_call;
/** \brief Compare ::OrtMemoryInfo objects for equality
*
* Compares all settings of each ::OrtMemoryInfo for equality
*
* \param[in] info1
* \param[in] info2
* \param[out] out Set to 0 if equal, -1 if not equal
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CompareMemoryInfo: #type (info1: *OrtMemoryInfo, info2: *OrtMemoryInfo, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Get name from ::OrtMemoryInfo
*
* \param[in] ptr
* \param[out] out Writes null terminated string to this pointer. Do NOT free the returned pointer. It is valid for the lifetime of the ::OrtMemoryInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
MemoryInfoGetName: #type (ptr: *OrtMemoryInfo, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the device id from ::OrtMemoryInfo
*/
MemoryInfoGetId: #type (ptr: *OrtMemoryInfo, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Get the ::OrtMemType from ::OrtMemoryInfo
*/
MemoryInfoGetMemType: #type (ptr: *OrtMemoryInfo, out: *OrtMemType) -> OrtStatusPtr #c_call;
/** \brief Get the ::OrtAllocatorType from ::OrtMemoryInfo
*/
MemoryInfoGetType: #type (ptr: *OrtMemoryInfo, out: *OrtAllocatorType) -> OrtStatusPtr #c_call;
/// \brief Calls OrtAllocator::Alloc function
AllocatorAlloc: #type (ort_allocator: *OrtAllocator, size: u64, out: **void) -> OrtStatusPtr #c_call;
/// \brief Calls OrtAllocator::Free function
AllocatorFree: #type (ort_allocator: *OrtAllocator, p: *void) -> OrtStatusPtr #c_call;
/// \brief Calls OrtAllocator::Info function
AllocatorGetInfo: #type (ort_allocator: *OrtAllocator, out: **OrtMemoryInfo) -> OrtStatusPtr #c_call;
/** \brief Get the default allocator
*
* The default allocator is a CPU based, non-arena. Always returns the same pointer to the same default allocator.
*
* \param[out] out Returned value should NOT be freed
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetAllocatorWithDefaultOptions: #type (out: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Override session symbolic dimensions
*
* Override symbolic dimensions (by specific denotation strings) with actual values if known at session initialization time to enable
* optimizations that can take advantage of fixed values (such as memory planning, etc)
*
* \param[in] options
* \param[in] dim_denotation
* \param[in] dim_value
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
AddFreeDimensionOverride: #type (options: *OrtSessionOptions, dim_denotation: *u8, dim_value: s64) -> OrtStatusPtr #c_call;
/** \brief Get non tensor data from an ::OrtValue
*
* If `value` is of type ONNX_TYPE_MAP, you need to retrieve the keys and values
* separately. Use index=0 to retrieve keys and index=1 to retrieve values.
* If `value` is of type ONNX_TYPE_SEQUENCE, use index to retrieve the index'th element
* of the sequence.
*
* \param[in] value
* \param[in] index See above for usage based on `value` type
* \param[in] allocator Allocator used to allocate ::OrtValue
* \param[out] out Created ::OrtValue that holds the element requested. Must be freed with OrtApi::ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetValue: #type (value: *OrtValue, index: s32, allocator: *OrtAllocator, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Get non tensor value count from an ::OrtValue
*
* If `value` is of type ONNX_TYPE_MAP 2 will always be returned. For ONNX_TYPE_SEQUENCE
* the number of elements in the sequence will be returned
*
* \param[in] value
* \param[out] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetValueCount: #type (value: *OrtValue, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Create a map or sequence ::OrtValue
*
* To construct a map (ONNX_TYPE_MAP), use num_values = 2 and `in` should be an array of 2 ::OrtValue%s
* representing keys and values.<br>
*
* To construct a sequence (ONNX_TYPE_SEQUENCE), use num_values = N where N is the number of the elements in the
* sequence. 'in' should be an array of N ::OrtValue%s.
*
* \param[in] in See above for details
* \param[in] num_values
* \param[in] value_type Must be either ONNX_TYPE_MAP or ONNX_TYPE_SEQUENCE
* \param[out] out Newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateValue: #type (in: **OrtValue, num_values: u64, value_type: ONNXType, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Create an opaque (custom user defined type) ::OrtValue
*
* Constructs an ::OrtValue that contains a value of non-standard type created for
* experiments or while awaiting standardization. ::OrtValue in this case would contain
* an internal representation of the Opaque type. Opaque types are distinguished from
* each other by two strings 1) domain and 2) type name. The combination of the two
* must be unique, so the type representation is properly identified internally. The combination
* must be properly registered from within ORT at both compile/run time or by another API.
*
* To construct the ::OrtValue pass domain and type names, also a pointer to a data container
* the type of which must be known to both ORT and the client program. That data container may or may
* not match the internal representation of the Opaque type. The sizeof(data_container) is passed for
* verification purposes.
*
* \param[in] domain_name Null terminated string of the domain name
* \param[in] type_name Null terminated string of the type name
* \param[in] data_container User pointer Data to populate ::OrtValue
* \param[in] data_container_size Size in bytes of what `data_container` points to
* \param[out] out Newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateOpaqueValue: #type (domain_name: *u8, type_name: *u8, data_container: *void, data_container_size: u64, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Get internal data from an opaque (custom user defined type) ::OrtValue
*
* Copies internal data from an opaque value into a user provided buffer
*
* \see OrtApi::CreateOpaqueValue
*
* \param[in] domain_name Null terminated string of the domain name
* \param[in] type_name Null terminated string of the type name
* \param[in] in The opaque ::OrtValue
* \param[out] data_container Buffer to copy data into
* \param[out] data_container_size Size in bytes of the buffer pointed to by data_container. Must match the size of the internal buffer.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetOpaqueValue: #type (domain_name: *u8, type_name: *u8, in: *OrtValue, data_container: *void, data_container_size: u64) -> OrtStatusPtr #c_call;
/** \brief Get a float stored as an attribute in the graph node
*
* \param[in] info ::OrtKernelInfo instance
* \param[in] name Null terminated string of the name of the attribute
* \param[out] out Pointer to memory where the attribute will be stored
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelInfoGetAttribute_float: #type (info: *OrtKernelInfo, name: *u8, out: *float) -> OrtStatusPtr #c_call;
/** \brief Fetch a 64-bit int stored as an attribute in the graph node
*
* \param[in] info ::OrtKernelInfo instance
* \param[in] name Null terminated string of the name of the attribute
* \param[out] out Pointer to memory where the attribute will be stored
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelInfoGetAttribute_int64: #type (info: *OrtKernelInfo, name: *u8, out: *s64) -> OrtStatusPtr #c_call;
/** \brief Fetch a string stored as an attribute in the graph node
*
* If `out` is nullptr, the value of `size` is set to the true size of the string
* attribute, and a success status is returned.
*
* If the `size` parameter is greater than or equal to the actual string attribute's size,
* the value of `size` is set to the true size of the string attribute, the provided memory
* is filled with the attribute's contents, and a success status is returned.
*
* If the `size` parameter is less than the actual string attribute's size and `out`
* is not nullptr, the value of `size` is set to the true size of the string attribute
* and a failure status is returned.)
*
* \param[in] info ::OrtKernelInfo instance
* \param[in] name Null terminated string of the name of the attribute
* \param[out] out Pointer to memory where the attribute will be stored
* \param[in,out] size See above comments for details
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelInfoGetAttribute_string: #type (info: *OrtKernelInfo, name: *u8, out: *u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Used for custom operators, get the input count of a kernel
*
* \see ::OrtCustomOp
*/
KernelContext_GetInputCount: #type (_context: *OrtKernelContext, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Used for custom operators, get the output count of a kernel
*
* \see ::OrtCustomOp
*/
KernelContext_GetOutputCount: #type (_context: *OrtKernelContext, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Used for custom operators, get an input of a kernel
*
* The function attempts fetches the input of the kernel. If the input is optional
* and not present, the function returns success and out is set to nullptr.
*
* \param[in] context ::OrtKernelContext instance
* \param[in] index See KernelContext_GetInputCount for boundaries check.
* \param[out] out OrtValue if the input is present otherwise is set nullptr
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelContext_GetInput: #type (_context: *OrtKernelContext, index: u64, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Used for custom operators, get an output of a kernel
*
* The function attempts fetches the output of the kernel. If the output is optional
* and not present, the function returns success and out is set to nullptr.
*
* \param[in] context ::OrtKernelContext instance
* \param[in] index See KernelContext_GetOutputCount for boundaries check.
* \param[in] dim_values output dimensions
* \param[in] dim_count number of dimensions
* \param[out] out a ptr to OrtValue to output otherwise set to nullptr
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelContext_GetOutput: #type (_context: *OrtKernelContext, index: u64, dim_values: *s64, dim_count: u64, out: **OrtValue) -> OrtStatusPtr #c_call;
/// @}
/// \name OrtEnv
/// @{
ReleaseEnv: #type (input: *OrtEnv) -> void #c_call;
/// @}
/// \name OrtStatus
/// @{
ReleaseStatus: #type (input: *OrtStatus) -> void #c_call;
/// @}
/// \name OrtMemoryInfo
/// @{
ReleaseMemoryInfo: #type (input: *OrtMemoryInfo) -> void #c_call;
ReleaseSession: #type (input: *OrtSession) -> void #c_call; // Don't call ReleaseSession from Dllmain (because session owns a thread pool)
/// @}
/// \name OrtValue
/// @{
ReleaseValue: #type (input: *OrtValue) -> void #c_call;
/// @}
/// \name OrtRunOptions
/// @{
ReleaseRunOptions: #type (input: *OrtRunOptions) -> void #c_call;
/// @}
/// \name OrtTypeInfo
/// @{
ReleaseTypeInfo: #type (input: *OrtTypeInfo) -> void #c_call;
/// @}
/// \name OrtTensorTypeAndShapeInfo
/// @{
ReleaseTensorTypeAndShapeInfo: #type (input: *OrtTensorTypeAndShapeInfo) -> void #c_call;
/// @}
/// \name OrtSessionOptions
/// @{
ReleaseSessionOptions: #type (input: *OrtSessionOptions) -> void #c_call;
/// @}
/// \name OrtCustomOpDomain
/// @{
ReleaseCustomOpDomain: #type (input: *OrtCustomOpDomain) -> void #c_call;
/** \brief Get denotation from type information
*
* Augments ::OrtTypeInfo to return denotations on the type.
*
* This is used by WinML to determine if an input/output is intended to be an Image or a Tensor.
*
* \param[in] type_info
* \param[out] denotation Pointer to the null terminated denotation string is written to this pointer. This pointer is valid until the object is destroyed or the name is changed, do not free.
* \param[out] len Length in bytes of the string returned in `denotation`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetDenotationFromTypeInfo: #type (_type_info: *OrtTypeInfo, denotation: **u8, len: *u64) -> OrtStatusPtr #c_call;
/** \brief Get detailed map information from an ::OrtTypeInfo
*
* This augments ::OrtTypeInfo to return an ::OrtMapTypeInfo when the type is a map.
* The OrtMapTypeInfo has additional information about the map's key type and value type.
*
* This is used by WinML to support model reflection APIs.
*
* \param[out] type_info
* \param[out] out A pointer to the ::OrtMapTypeInfo. Do not free this value. If type_info
* does not contain a map, this value will be set to nullptr.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CastTypeInfoToMapTypeInfo: #type (_type_info: *OrtTypeInfo, out: **OrtMapTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Cast ::OrtTypeInfo to an ::OrtSequenceTypeInfo
*
* This api augments ::OrtTypeInfo to return an ::OrtSequenceTypeInfo when the type is a sequence.
* The ::OrtSequenceTypeInfo has additional information about the sequence's element type.
*
* This is used by WinML to support model reflection APIs.
*
* \param[in] type_info
* \param[out] out A pointer to the OrtSequenceTypeInfo. Do not free this value. If type_info
* doesn not contain a sequence, this value will be set to nullptr.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CastTypeInfoToSequenceTypeInfo: #type (_type_info: *OrtTypeInfo, out: **OrtSequenceTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get key type from an ::OrtMapTypeInfo
*
* Key types are restricted to being scalar types.
*
* This is used by WinML to support model reflection APIs.
*
* \param[in] map_type_info
* \param[out] out
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetMapKeyType: #type (map_type_info: *OrtMapTypeInfo, out: *ONNXTensorElementDataType) -> OrtStatusPtr #c_call;
/** \brief Get the value type from an ::OrtMapTypeInfo
*
* \param[in] map_type_info
* \param[out] type_info A copy of the OrtTypeInfo for the map value type.
* The user must free this value with ReleaseTypeInfo.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetMapValueType: #type (map_type_info: *OrtMapTypeInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get element type from an ::OrtSequenceTypeInfo
*
* This is used by WinML to support model reflection APIs.
*
* \param[in] sequence_type_info
* \param[out] type_info A copy of the OrtTypeInfo for the sequence element type.
* The user must free this value with ReleaseTypeInfo.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetSequenceElementType: #type (sequence_type_info: *OrtSequenceTypeInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/// @}
/// \name OrtMapTypeInfo
/// @{
ReleaseMapTypeInfo: #type (input: *OrtMapTypeInfo) -> void #c_call;
/// @}
/// \name OrtSequenceTypeInfo
/// @{
ReleaseSequenceTypeInfo: #type (input: *OrtSequenceTypeInfo) -> void #c_call;
/** \brief End profiling and return filename of the profile data
*
* Profiling is turned on through OrtApi::EnableProfiling
*
* \param[in] session
* \param[in] allocator
* \param[out] out Null terminated string of the filename, allocated using `allocator`. Must be freed using `allocator`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionEndProfiling: #type (session: *OrtSession, allocator: *OrtAllocator, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get ::OrtModelMetadata from an ::OrtSession
*
* \param[in] session
* \param[out] out Newly created ::OrtModelMetadata. Must be freed using OrtApi::ReleaseModelMetadata
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetModelMetadata: #type (session: *OrtSession, out: **OrtModelMetadata) -> OrtStatusPtr #c_call;
/** \brief Get `producer name` from an ::OrtModelMetadata
*
* \param[in] model_metadata
* \param[in] allocator
* \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataGetProducerName: #type (model_metadata: *OrtModelMetadata, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Get `graph name` from an ::OrtModelMetadata
*
* \param[in] model_metadata
* \param[in] allocator
* \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataGetGraphName: #type (model_metadata: *OrtModelMetadata, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Get `domain` from an ::OrtModelMetadata
*
* \param[in] model_metadata
* \param[in] allocator
* \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataGetDomain: #type (model_metadata: *OrtModelMetadata, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Get `description` from an ::OrtModelMetadata
*
* \param[in] model_metadata
* \param[in] allocator
* \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataGetDescription: #type (model_metadata: *OrtModelMetadata, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Return data for a key in the custom metadata map in an ::OrtModelMetadata
*
* \param[in] model_metadata
* \param[in] allocator
* \param[in] key Null terminated string
* \param[out] value Set to a null terminated string allocated using `allocator`. Must be freed using `allocator`
* `value` will be set to nullptr if the given key is not found in the custom metadata map.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataLookupCustomMetadataMap: #type (model_metadata: *OrtModelMetadata, allocator: *OrtAllocator, key: *u8, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Get version number from an ::OrtModelMetadata
*
* \param[in] model_metadata
* \param[out] value Set to the version number
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataGetVersion: #type (model_metadata: *OrtModelMetadata, value: *s64) -> OrtStatusPtr #c_call;
ReleaseModelMetadata: #type (input: *OrtModelMetadata) -> void #c_call;
/** \brief Create an OrtEnv
*
* Create an environment with global threadpools that will be shared across sessions.
* Use this in conjunction with OrtApi::DisablePerSessionThreads or else the session will use
* its own thread pools.
*
* \param[in] log_severity_level The log severity level.
* \param[in] logid The log identifier.
* \param[in] tp_options
* \param[out] out Returned newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateEnvWithGlobalThreadPools: #type (log_severity_level: OrtLoggingLevel, logid: *u8, tp_options: *OrtThreadingOptions, out: **OrtEnv) -> OrtStatusPtr #c_call;
/** \brief Use global thread pool on a session
*
* Disable using per session thread pool and use the shared global threadpool.
* This should be used in conjunction with OrtApi::CreateEnvWithGlobalThreadPools.
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
DisablePerSessionThreads: #type (options: *OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtThreadingOptions
*
* \param[out] out Newly created ::OrtThreadingOptions. Must be freed with OrtApi::ReleaseThreadingOptions
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateThreadingOptions: #type (out: **OrtThreadingOptions) -> OrtStatusPtr #c_call;
ReleaseThreadingOptions: #type (input: *OrtThreadingOptions) -> void #c_call;
/**
*
* \param[in] model_metadata
* \param[in] allocator
* \param[out] keys Array of null terminated strings (array count = num_keys) allocated using `allocator`.
* The strings and the pointer array must be freed using `allocator`
* `keys` will be set to nullptr if the custom metadata map is empty.
* \param[out] num_keys Set to the number of elements in the `keys` array
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataGetCustomMetadataMapKeys: #type (model_metadata: *OrtModelMetadata, allocator: *OrtAllocator, keys: ***u8, num_keys: *s64) -> OrtStatusPtr #c_call;
/**
*
* Override symbolic dimensions (by specific name strings) with actual values
* if known at session initialization time to enable optimizations that can
* take advantage of fixed values (such as memory planning, etc)
*
*/
AddFreeDimensionOverrideByName: #type (options: *OrtSessionOptions, dim_name: *u8, dim_value: s64) -> OrtStatusPtr #c_call;
/** \brief Get the names of all available providers
*
* \note The providers in the list are not guaranteed to be usable. They may fail to load due to missing system dependencies.
* For example, if the CUDA/cuDNN libraries are not installed, the CUDA provider will report an error when it is added to the session options.
*
* \param[out] out_ptr Set to a pointer to an array of null terminated strings of the available providers. The entries and the
* array itself must be freed using OrtApi::ReleaseAvailableProviders
* \param[out] provider_length Set to the number of entries in the `out_ptr` array
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetAvailableProviders: #type (out_ptr: ***u8, provider_length: *s32) -> OrtStatusPtr #c_call;
/** \brief Release data from OrtApi::GetAvailableProviders. This API will never fail
* so you can rely on it in a noexcept code.
*
* \param[in] ptr The `out_ptr` result from OrtApi::GetAvailableProviders.
* \param[in] providers_length The `provider_length` result from OrtApi::GetAvailableProviders
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ReleaseAvailableProviders: #type (ptr: **u8, providers_length: s32) -> OrtStatusPtr #c_call;
/** \brief Get the length of a single string in a string tensor
*
* \param[in] value A string tensor
* \param[in] index Index of the string in the tensor
* \param[out] out Set to number of bytes of the string element
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetStringTensorElementLength: #type (value: *OrtValue, index: u64, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get a single string from a string tensor
*
* \param[in] value A string tensor
* \param[in] s_len Number of bytes in the `s` buffer. Must match the value returned by OrtApi::GetStringTensorElementLength.
* \param[in] index Index of the string in the tensor
* \param[out] s The string element contents in UTF-8 encoding. The string is NOT null-terminated.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetStringTensorElement: #type (value: *OrtValue, s_len: u64, index: u64, s: *void) -> OrtStatusPtr #c_call;
/** \brief Set a single string in a string tensor
*
* \param[in] value A string tensor
* \param[in] s A null terminated UTF-8 encoded string
* \param[in] index Index of the string in the tensor to set
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
FillStringTensorElement: #type (value: *OrtValue, s: *u8, index: u64) -> OrtStatusPtr #c_call;
/** \brief Set a session configuration entry as a pair of strings
*
* If a configuration with same key exists, this will overwrite the configuration with the given config_value.
*
* The config_key and the format of config_value are defined in onnxruntime_session_options_config_keys.h
*
* \param[in] options
* \param[in] config_key A null terminated string representation of the config key
* \param[in] config_value A null terminated string representation of the config value
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
AddSessionConfigEntry: #type (options: *OrtSessionOptions, config_key: *u8, config_value: *u8) -> OrtStatusPtr #c_call;
/** \brief Create an allocator for an ::OrtSession following an ::OrtMemoryInfo
*
* The allocator wraps the internal allocator from the OrtSession and becomes invalid when the session does.
*
* \param[in] session
* \param[in] mem_info valid ::OrtMemoryInfo instance
* \param[out] out Newly created ::OrtAllocator. Must be freed with OrtApi::ReleaseAllocator
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateAllocator: #type (session: *OrtSession, mem_info: *OrtMemoryInfo, out: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Release an ::OrtAllocator obtained from OrtApi::CreateAllocator
*/
ReleaseAllocator: #type (input: *OrtAllocator) -> void #c_call;
/** \brief Run a model using Io Bindings for the inputs & outputs
*
* \see OrtApi::Run
*
* \param[in] session
* \param[in] run_options
* \param[in] binding_ptr
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
RunWithBinding: #type (session: *OrtSession, run_options: *OrtRunOptions, binding_ptr: *OrtIoBinding) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtIoBinding instance
*
* An IoBinding object allows one to bind pre-allocated ::OrtValue%s to input names.
* Thus if you want to use a raw on device buffer as input or output you can avoid
* extra copy during runtime.
*
* \param[in] session
* \param[out] out Newly created ::OrtIoBinding. Must be freed with OrtApi::ReleaseIoBinding
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateIoBinding: #type (session: *OrtSession, out: **OrtIoBinding) -> OrtStatusPtr #c_call;
/** \brief Release an ::OrtIoBinding obtained from OrtApi::CreateIoBinding
*/
ReleaseIoBinding: #type (input: *OrtIoBinding) -> void #c_call;
/** \brief Bind an ::OrtValue to an ::OrtIoBinding input
*
* When using OrtApi::RunWithBinding this value is used for the named input
*
* \param[in] binding_ptr
* \param[in] name Name for the model input
* \param[in] val_ptr ::OrtValue of Tensor type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
BindInput: #type (binding_ptr: *OrtIoBinding, name: *u8, val_ptr: *OrtValue) -> OrtStatusPtr #c_call;
/** \brief Bind an ::OrtValue to an ::OrtIoBinding output
*
* When using OrtApi::RunWithBinding this value is used for the named output
*
* \param[in] binding_ptr
* \param[in] name Null terminated string of the model output name
* \param[in] val_ptr ::OrtValue of Tensor type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
BindOutput: #type (binding_ptr: *OrtIoBinding, name: *u8, val_ptr: *OrtValue) -> OrtStatusPtr #c_call;
/** \brief Bind an ::OrtIoBinding output to a device
*
* Binds the ::OrtValue to a device which is specified by ::OrtMemoryInfo.
* You can either create an instance of ::OrtMemoryInfo with a device id or obtain one from the allocator that you have created/are using
* This is useful when one or more outputs have dynamic shapes and, it is hard to pre-allocate and bind a chunk of
* memory within ::OrtValue ahead of time.
*
* \see OrtApi::RunWithBinding
*
* \param[in] binding_ptr
* \param[in] name Null terminated string of the device name
* \param[in] mem_info_ptr
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
BindOutputToDevice: #type (binding_ptr: *OrtIoBinding, name: *u8, mem_info_ptr: *OrtMemoryInfo) -> OrtStatusPtr #c_call;
/** \brief Get the names of an ::OrtIoBinding's outputs
*
* Returns the names of the outputs in the order they were bound. This is useful after running the model
* with bound outputs because the returned names are in order in which output ::OrtValue are returned. This is useful if
* the order of outputs and their names is not known.
*
* \param[in] binding_ptr
* \param[in] allocator Allocator used to allocate continuous buffers for output strings and lengths.
* \param[out] buffer Returns an array of non-null terminated UTF-8 strings. The number of strings stored is returned in the count parameter.
* This buffer is allocated using `allocator` and must be freed using it.
* \param[out] lengths Returns an array of `count` lengths of the strings returned in `buffer`
* This buffer is allocated using `allocator` and must be freed using it.
* \param[out] count Number of strings returned. If `binding_ptr` has no bound outputs, zero is returned,
* no memory allocation is performed and buffer and lengths are set to nullptr.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetBoundOutputNames: #type (binding_ptr: *OrtIoBinding, allocator: *OrtAllocator, buffer: **u8, lengths: **u64, count: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the output ::OrtValue objects from an ::OrtIoBinding
*
* Returns an array of pointers to individually allocated ::OrtValue%s that contain results of a model execution with OrtApi::RunWithBinding
* The array contains the same number of ::OrtValue%s and they are in the same order as they were bound with OrtApi::BindOutput
* or OrtApi::BindOutputToDevice.
*
* The returned ::OrtValue%s must be released using OrtApi::ReleaseValue after they are no longer needed.
* The array is allocated using the specified instance of the allocator and must be freed using the same allocator after
* all the ::OrtValue%s contained therein are individually released.
*
* \param[in] binding_ptr
* \param[in] allocator Allocator used to allocate output array
* \param[out] output Set to the allocated array of allocated ::OrtValue outputs. Set to nullptr if there are 0 outputs.
* \param[out] output_count Set to number of ::OrtValue%s returned
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetBoundOutputValues: #type (binding_ptr: *OrtIoBinding, allocator: *OrtAllocator, output: ***OrtValue, output_count: *u64) -> OrtStatusPtr #c_call;
/** \brief Clears any previously set Inputs for an ::OrtIoBinding
*/
ClearBoundInputs: #type (binding_ptr: *OrtIoBinding) -> void #c_call;
/** \brief Clears any previously set Outputs for an ::OrtIoBinding
*/
ClearBoundOutputs: #type (binding_ptr: *OrtIoBinding) -> void #c_call;
/** \brief Direct memory access to a specified tensor element
*
* For example, given a tensor with shape of [3,224,224], a pointer to the element at location [2,150,128] can be retrieved
*
* This function only works for numeric type tensors (No strings, etc).
* This function does not support sub-byte packed types (e.g., int4).
* This is a no-copy method whose returned pointer is valid until the passed in ::OrtValue is free'd.
*
* \param[in] value
* \param[in] location_values Pointer to an array of index values that specify an element's location relative to its shape
* \param[in] location_values_count Number of elements in location_values. Must match the number of elements in the tensor's shape.
* \param[out] out Set to a pointer to the element specified
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
TensorAt: #type (value: *OrtValue, location_values: *s64, location_values_count: u64, out: **void) -> OrtStatusPtr #c_call;
/** \brief Create an allocator and register it with the ::OrtEnv
*
* Enables sharing the allocator between multiple sessions that use the same env instance.
* Lifetime of the created allocator will be valid for the duration of the environment.
* Returns an error if an allocator with the same ::OrtMemoryInfo is already registered.
*
* See https://onnxruntime.ai/docs/get-started/with-c.html for details.
*
* \param[in] env ::OrtEnv instance
* \param[in] mem_info
* \param[in] arena_cfg Pass nullptr for defaults
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateAndRegisterAllocator: #type (env: *OrtEnv, mem_info: *OrtMemoryInfo, arena_cfg: *OrtArenaCfg) -> OrtStatusPtr #c_call;
/** \brief Set language projection
*
* Set the language projection for collecting telemetry data when Env is created.
*
* The default is ORT_PROJECTION_C, which means it will classify the language not in the list to C also.
*
* \param[in] ort_env
* \param[in] projection
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetLanguageProjection: #type (ort_env: *OrtEnv, projection: OrtLanguageProjection) -> OrtStatusPtr #c_call;
/** \brief Return the time that profiling was started
*
* \note The timer precision varies per platform. On Windows and MacOS, the precision will be ~100ns
*
* \param[in] session
* \param[out] out nanoseconds of profiling's start time
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionGetProfilingStartTimeNs: #type (session: *OrtSession, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Set global intra-op thread count
*
* This configures the global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools
*
* \param[in] tp_options
* \param[in] intra_op_num_threads Number of threads, special values:<br>
* 0 = Use default thread count<br>
* 1 = The invoking thread will be used; no threads will be created in the thread pool.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetGlobalIntraOpNumThreads: #type (tp_options: *OrtThreadingOptions, intra_op_num_threads: s32) -> OrtStatusPtr #c_call;
/** \brief Set global inter-op thread count
*
* This configures the global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools
*
* \param[in] tp_options
* \param[in] inter_op_num_threads Number of threads, special values:<br>
* 0 = Use default thread count<br>
* 1 = The invoking thread will be used; no threads will be created in the thread pool.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetGlobalInterOpNumThreads: #type (tp_options: *OrtThreadingOptions, inter_op_num_threads: s32) -> OrtStatusPtr #c_call;
/** \brief Set global spin control options
*
* This will configure the global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools.
* Allow spinning of thread pools when their queues are empty. This will set the value for both
* inter_op and intra_op threadpools.
*
* \param[in] tp_options
* \param[in] allow_spinning Valid values are 0 or 1.<br>
* 0 = It won't spin (recommended if CPU usage is high)<br>
* 1 = Threadpool will spin to wait for queue to become non-empty
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetGlobalSpinControl: #type (tp_options: *OrtThreadingOptions, allow_spinning: s32) -> OrtStatusPtr #c_call;
/** \brief Add a pre-allocated initializer to a session
*
* If a model contains an initializer with a name that is same as the name passed to this call,
* ORT will use this initializer instance instead of deserializing one from the model file. This
* is useful when you want to share the same initializer across sessions.
*
* \param[in] options
* \param[in] name Null terminated string of the initializer name
* \param[in] val ::OrtValue containing the initializer. Its lifetime and the underlying initializer buffer must be
* managed by the user (created using the OrtApi::CreateTensorWithDataAsOrtValue) and it must outlive the session object
* to which it is added.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
AddInitializer: #type (options: *OrtSessionOptions, name: *u8, val: *OrtValue) -> OrtStatusPtr #c_call;
/**
* Create a custom environment with global threadpools and logger that will be shared across sessions.
* Use this in conjunction with OrtApi::DisablePerSessionThreads or else the session will use
* its own thread pools.
*
* \param[in] logging_function A pointer to a logging function.
* \param[in] logger_param A pointer to arbitrary data passed as the ::OrtLoggingFunction `param` parameter to
* `logging_function`.
* \param[in] log_severity_level The log severity level.
* \param[in] logid The log identifier.
* \param[in] tp_options
* \param[out] out Newly created OrtEnv. Must be freed with OrtApi::ReleaseEnv
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateEnvWithCustomLoggerAndGlobalThreadPools: #type (logging_function: OrtLoggingFunction, logger_param: *void, log_severity_level: OrtLoggingLevel, logid: *u8, tp_options: *OrtThreadingOptions, out: **OrtEnv) -> OrtStatusPtr #c_call;
/** \brief Append CUDA provider to session options
*
* If CUDA is not available (due to a non CUDA enabled build, or if CUDA is not installed on the system), this function will return failure.
*
* \param[in] options
* \param[in] cuda_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsAppendExecutionProvider_CUDA: #type (options: *OrtSessionOptions, cuda_options: *OrtCUDAProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Append ROCM execution provider to the session options
*
* If ROCM is not available (due to a non ROCM enabled build, or if ROCM is not installed on the system), this function will return failure.
*
* \param[in] options
* \param[in] rocm_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsAppendExecutionProvider_ROCM: #type (options: *OrtSessionOptions, rocm_options: *OrtROCMProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Append OpenVINO execution provider to the session options
*
* If OpenVINO is not available (due to a non OpenVINO enabled build, or if OpenVINO is not installed on the system), this function will fail.
*
* \param[in] options
* \param[in] provider_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsAppendExecutionProvider_OpenVINO: #type (options: *OrtSessionOptions, provider_options: *OrtOpenVINOProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Set threading flush-to-zero and denormal-as-zero
*
* Sets global thread pool options to be used in the call to OrtApi::CreateEnvWithGlobalThreadPools.
* Flush-to-zero and denormal-as-zero are applied to threads in both intra and inter global thread pool.
* \note This option is not needed if the models used have no denormals. Having no denormals is recommended as this option may hurt model accuracy.
*
* \param[in] tp_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetGlobalDenormalAsZero: #type (tp_options: *OrtThreadingOptions) -> OrtStatusPtr #c_call;
/** \deprecated Use OrtApi::CreateArenaCfgV2
*
* This will create the configuration of an arena that can eventually be used to define an arena based allocator's behavior
*
* \param[in] max_mem Use 0 to allow ORT to choose the default
* \param[in] arena_extend_strategy Use -1 to allow ORT to choose the default, 0 = kNextPowerOfTwo, 1 = kSameAsRequested
* \param[in] initial_chunk_size_bytes Use -1 to allow ORT to choose the default
* \param[in] max_dead_bytes_per_chunk Use -1 to allow ORT to choose the default
* \param[in] out A pointer to an OrtArenaCfg instance
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateArenaCfg: #type (max_mem: u64, arena_extend_strategy: s32, initial_chunk_size_bytes: s32, max_dead_bytes_per_chunk: s32, out: **OrtArenaCfg) -> OrtStatusPtr #c_call;
ReleaseArenaCfg: #type (input: *OrtArenaCfg) -> void #c_call;
/**
* Use this to obtain the description of the graph present in the model
* (doc_string field of the GraphProto message within the ModelProto message).
* If it doesn't exist, an empty string will be returned.
*
* \param[in] model_metadata An instance of ::OrtModelMetadata
* \param[in] allocator Allocator used to allocate the string that will be returned back
* \param[out] value Set to a null terminated string allocated using `allocator`. The caller is responsible for freeing it using `allocator`
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
ModelMetadataGetGraphDescription: #type (model_metadata: *OrtModelMetadata, allocator: *OrtAllocator, value: **u8) -> OrtStatusPtr #c_call;
/** \brief Append TensorRT provider to session options
*
* If TensorRT is not available (due to a non TensorRT enabled build, or if TensorRT is not installed on the system), this function will return failure.
*
* \param[in] options
* \param[in] tensorrt_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsAppendExecutionProvider_TensorRT: #type (options: *OrtSessionOptions, tensorrt_options: *OrtTensorRTProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Set current GPU device ID
*
* Set the current device id of the GPU execution provider (CUDA/tensorrt/rocm). The device id should be less
* than the total number of devices available. This is only useful when multiple-GPUs are installed and it is
* required to restrict execution to a single GPU.
*
* \param[in] device_id
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetCurrentGpuDeviceId: #type (device_id: s32) -> OrtStatusPtr #c_call;
/** \brief Get current GPU device ID
*
* Get the current device id of the GPU execution provider (CUDA/tensorrt/rocm).
*
* \see OrtApi::SetCurrentGpuDeviceId
*
* \param[out] device_id
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetCurrentGpuDeviceId: #type (device_id: *s32) -> OrtStatusPtr #c_call;
/** \brief Fetch an array of int64_t values stored as an attribute in the graph node
*
*
* If `out` is nullptr, the value of `size` is set to the true size of the attribute
* array's size, and a success status is returned.
*
* If the `size` parameter is greater than or equal to the actual attribute array's size,
* the value of `size` is set to the true size of the attribute array's size,
* the provided memory is filled with the attribute's contents,
* and a success status is returned.
*
* If the `size` parameter is less than the actual attribute array's size and `out`
* is not nullptr, the value of `size` is set to the true size of the attribute array's size
* and a failure status is returned.)
*
* \param[in] info instance
* \param[in] name name of the attribute to be parsed
* \param[out] out pointer to memory where the attribute's contents are to be stored
* \param[in, out] size actual size of attribute array
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelInfoGetAttributeArray_float: #type (info: *OrtKernelInfo, name: *u8, out: *float, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Fetch an array of int64_t values stored as an attribute in the graph node
*
* If `out` is nullptr, the value of `size` is set to the true size of the attribute
* array's size, and a success status is returned.
*
* If the `size` parameter is greater than or equal to the actual attribute array's size,
* the value of `size` is set to the true size of the attribute array's size,
* the provided memory is filled with the attribute's contents,
* and a success status is returned.
*
* If the `size` parameter is less than the actual attribute array's size and `out`
* is not nullptr, the value of `size` is set to the true size of the attribute array's size
* and a failure status is returned.)
*
* \param[in] info instance
* \param[in] name name of the attribute to be parsed
* \param[out] out pointer to memory where the attribute's contents are to be stored
* \param[in, out] size actual size of attribute array
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelInfoGetAttributeArray_int64: #type (info: *OrtKernelInfo, name: *u8, out: *s64, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtArenaCfg
*
* Create the configuration of an arena that can eventually be used to define an arena based allocator's behavior.
*
* Supported keys are (See https://onnxruntime.ai/docs/get-started/with-c.html for details on what the
* following parameters mean and how to choose these values.):
* "max_mem": Maximum memory that can be allocated by the arena based allocator.
* Use 0 for ORT to pick the best value. Default is 0.
* "arena_extend_strategy": 0 = kNextPowerOfTwo, 1 = kSameAsRequested.
* Use -1 to allow ORT to choose the default.
* "initial_chunk_size_bytes": (Possible) Size of the first allocation in the arena.
* Only relevant if arena strategy is `kNextPowerOfTwo`. Use -1 to allow ORT to choose the default.
* Ultimately, the first allocation size is determined by the allocation memory request.
* "max_dead_bytes_per_chunk": Threshold of unused memory in an allocated chunk of arena memory after
* crossing which the current chunk is chunked into 2.
* "initial_growth_chunk_size_bytes": (Possible) Size of the second allocation in the arena.
* Only relevant if arena strategy is `kNextPowerOfTwo`. Use -1 to allow ORT to choose the default.
* "max_power_of_two_extend_bytes": The maximum extend size if arena strategy is `kNextPowerOfTwo`.
* It is not an allocation limit, it is only a limit for extension when requested byte is less than the limit.
* When requested bytes is more than the limit, allocator will still return as requested.
* Use -1 to allow ORT to choose the default 1GB for max_power_of_two_extend_bytes.
* Ultimately, the allocation size is determined by the allocation memory request.
* Further allocation sizes are governed by the arena extend strategy.
*
* \param[in] arena_config_keys Keys to configure the arena
* \param[in] arena_config_values Values to configure the arena
* \param[in] num_keys Number of keys in `arena_config_keys` and `arena_config_values`
* \param[out] out Newly created ::OrtArenaCfg. Must be freed with OrtApi::ReleaseArenaCfg
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateArenaCfgV2: #type (arena_config_keys: **u8, arena_config_values: *u64, num_keys: u64, out: **OrtArenaCfg) -> OrtStatusPtr #c_call;
/** \brief Set a single run configuration entry as a pair of strings
*
* If a configuration with same key exists, this will overwrite the configuration with the given config_value
*
* The config_key and the format of config_value are defined in onnxruntime_run_options_config_keys.h
*
* \param[in] options
* \param[in] config_key A null terminated string representation of the config key
* \param[in] config_value A null terminated string representation of the config value
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
AddRunConfigEntry: #type (options: *OrtRunOptions, config_key: *u8, config_value: *u8) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtPrepackedWeightsContainer
*
* This container will hold pre-packed buffers of shared initializers for sharing between sessions
* (i.e.) if there are shared initializers that can be shared between sessions, the pre-packed buffers
* of these (if any) may possibly be shared to provide memory footprint savings. Pass this container
* to sessions that you would like to share pre-packed buffers of shared initializers at session
* creation time.
*
* \param[out] out Newly created ::OrtPrepackedWeightsContainer. Must be freed with OrtApi::ReleasePrepackedWeightsContainer
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreatePrepackedWeightsContainer: #type (out: **OrtPrepackedWeightsContainer) -> OrtStatusPtr #c_call;
/** \brief Release OrtPrepackedWeightsContainer instance
*
* \note instance must not be released until the sessions using it are released
*/
ReleasePrepackedWeightsContainer: #type (input: *OrtPrepackedWeightsContainer) -> void #c_call;
/** \brief Create session with prepacked weights container
*
* Same functionality offered by OrtApi::CreateSession except that a container that contains
* pre-packed weights' buffers is written into/read from by the created session.
* This is useful when used in conjunction with OrtApi::AddInitializer which injects
* shared initializer info into sessions. Wherever possible, the pre-packed versions of these
* shared initializers are cached in this container so that multiple sessions can just re-use
* these instead of duplicating these in memory.
*
* \param[in] env OrtEnv instance instance
* \param[in] model_path Null terminated string of the path (wchar on Windows, char otherwise)
* \param[in] options
* \param[in] prepacked_weights_container
* \param[out] out Newly created ::OrtSession. Must be freed with OrtApi::ReleaseSession
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateSessionWithPrepackedWeightsContainer: #type (env: *OrtEnv, model_path: *u16, options: *OrtSessionOptions, prepacked_weights_container: *OrtPrepackedWeightsContainer, out: **OrtSession) -> OrtStatusPtr #c_call;
/** \brief Create session from memory with prepacked weights container
*
* Same functionality offered by OrtApi::CreateSessionFromArray except that a container that contains
* pre-packed weights' buffers is written into/read from by the created session.
* This is useful when used in conjunction with OrtApi::AddInitializer which injects
* shared initializer info into sessions. Wherever possible, the pre-packed versions of these
* shared initializers are cached in this container so that multiple sessions can just re-use
* these instead of duplicating these in memory.
*
* \param[in] env
* \param[in] model_data Array of bytes holding the model
* \param[in] model_data_length Number of bytes in `model_data_model`
* \param[in] options
* \param[in] prepacked_weights_container
* \param[out] out Newly created ::OrtSession. Must be freed with OrtApi::ReleaseSession
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateSessionFromArrayWithPrepackedWeightsContainer: #type (env: *OrtEnv, model_data: *void, model_data_length: u64, options: *OrtSessionOptions, prepacked_weights_container: *OrtPrepackedWeightsContainer, out: **OrtSession) -> OrtStatusPtr #c_call;
/** \brief Append TensorRT execution provider to the session options
*
* If TensorRT is not available (due to a non TensorRT enabled build), this function will return failure.
*
* This is slightly different from OrtApi::SessionOptionsAppendExecutionProvider_TensorRT, it takes an
* ::OrtTensorRTProviderOptions which is publicly defined. This takes an opaque ::OrtTensorRTProviderOptionsV2
* which must be created with OrtApi::CreateTensorRTProviderOptions.
*
* For OrtApi::SessionOptionsAppendExecutionProvider_TensorRT, the user needs to instantiate ::OrtTensorRTProviderOptions
* as well as allocate/release buffers for some members of ::OrtTensorRTProviderOptions.
* Here, OrtApi::CreateTensorRTProviderOptions and Ortapi::ReleaseTensorRTProviderOptions will do the memory management for you.
*
* \param[in] options
* \param[in] tensorrt_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsAppendExecutionProvider_TensorRT_V2: #type (options: *OrtSessionOptions, tensorrt_options: *OrtTensorRTProviderOptionsV2) -> OrtStatusPtr #c_call;
/** \brief Create an OrtTensorRTProviderOptionsV2
*
* \param[out] out Newly created ::OrtTensorRTProviderOptionsV2. Must be released with OrtApi::ReleaseTensorRTProviderOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateTensorRTProviderOptions: #type (out: **OrtTensorRTProviderOptionsV2) -> OrtStatusPtr #c_call;
/** \brief Set options in a TensorRT Execution Provider.
*
* Please refer to https://onnxruntime.ai/docs/execution-providers/TensorRT-ExecutionProvider.html#cc
* to know the available keys and values. Key should be in null terminated string format of the member of ::OrtTensorRTProviderOptionsV2
* and value should be its related range. Recreates the options and only sets the supplied values.
*
* For example, key="trt_max_workspace_size" and value="2147483648"
*
* \param[in] tensorrt_options
* \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys
* \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values
* \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
UpdateTensorRTProviderOptions: #type (tensorrt_options: *OrtTensorRTProviderOptionsV2, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/** \brief Get serialized TensorRT provider options string.
*
* For example, "trt_max_workspace_size=2147483648;trt_max_partition_iterations=10;trt_int8_enable=1;......"
*
* \param tensorrt_options - OrtTensorRTProviderOptionsV2 instance
* \param allocator - a ptr to an instance of OrtAllocator obtained with OrtApi::CreateAllocator or OrtApi::GetAllocatorWithDefaultOptions
* the specified allocator will be used to allocate continuous buffers for output strings and lengths.
* \param ptr - is a UTF-8 null terminated string allocated using 'allocator'. The caller is responsible for using the same allocator to free it.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetTensorRTProviderOptionsAsString: #type (tensorrt_options: *OrtTensorRTProviderOptionsV2, allocator: *OrtAllocator, ptr: **u8) -> OrtStatusPtr #c_call;
/** \brief Release an ::OrtTensorRTProviderOptionsV2
*
* \note This is an exception in the naming convention of other Release* functions, as the name of the method does not have the V2 suffix, but the type does
*/
ReleaseTensorRTProviderOptions: #type (input: *OrtTensorRTProviderOptionsV2) -> void #c_call;
/** \brief Enable custom operators
*
* See onnxruntime-extensions: https://github.com/microsoft/onnxruntime-extensions.git
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
EnableOrtCustomOps: #type (options: *OrtSessionOptions) -> OrtStatusPtr #c_call;
/** \brief Register a custom allocator
*
* Enables sharing between multiple sessions that use the same env instance.
* Returns an error if an allocator with the same ::OrtMemoryInfo is already registered.
*
* The behavior of this is exactly the same as OrtApi::CreateAndRegisterAllocator except
* instead of ORT creating an allocator based on provided info, in this case
* ORT uses the user-provided custom allocator.
* See https://onnxruntime.ai/docs/get-started/with-c.html for details.
*
* \param[in] env
* \param[in] allocator User provided allocator
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
RegisterAllocator: #type (env: *OrtEnv, allocator: *OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Unregister a custom allocator
*
* It is an error if you provide an ::OrtMemoryInfo not corresponding to any
* registered allocators for sharing.
*
* \param[in] env
* \param[in] mem_info
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
UnregisterAllocator: #type (env: *OrtEnv, mem_info: *OrtMemoryInfo) -> OrtStatusPtr #c_call;
/** \brief Sets *out to 1 iff an ::OrtValue is a SparseTensor, and 0 otherwise
*
* \param[in] value existing ::OrtValue
* \param[out] out unless an error occurs, contains 1 iff the value contains an instance
* of sparse tensor or 0 otherwise.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
IsSparseTensor: #type (value: *OrtValue, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtValue with a sparse tensor that is empty.
*
* Use FillSparseTensor<Format>() functions to populate sparse tensor with non-zero values and
* format specific indices data.
* Use ReleaseValue to destroy the sparse tensor, this will also release the buffer inside the output value
* if any was allocated.
* \param[in,out] allocator allocator to use when performing an allocation. Allocation will be performed
* by FillSparseTensor<Format>() APIs. The lifespan of the allocator instance must eclipse the lifespan
* this sparse tensor instance as the same allocator will be used to free memory.
* \param[in] dense_shape shape of the original dense tensor
* \param[in] dense_shape_len number of shape dimensions being passed
* \param[in] type must be one of TENSOR_ELEMENT_DATA_TYPE_xxxx
* \param[out] out Should be freed by calling ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateSparseTensorAsOrtValue: #type (allocator: *OrtAllocator, dense_shape: *s64, dense_shape_len: u64, type: ONNXTensorElementDataType, out: **OrtValue) -> OrtStatusPtr #c_call;
/**
* This fills populates an empty tensor that was created using OrtApi::CreateSparseTensorAsOrtValue.
* This will allocate required memory and copy the supplied NNZ values and COO indices into that memory allocation.
* Memory allocation is performed using the allocator that was specified with OrtApi::CreateSparseTensorAsOrtValue.
*
* \param[in,out] ort_value ::OrtValue to populate with data
* \param[in] data_mem_info serves to identify the location of the data to be copied. If the allocator specified
* at the creation time has memory info that is not the same as mem_info argument to this function a X-device copy will be performed.
* String data is assumed to be on CPU and will only be copied into a CPU allocated buffer.
* \param[in] values_shape pointer to values shape array
* \param[in] values_shape_len length of the values_shape
* \param[in] values pointer to an array of values. For strings, pass const char**.
* \param[in] indices_data pointer to a location of COO indices
* \param[in] indices_num number of COO indices
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
FillSparseTensorCoo: #type (ort_value: *OrtValue, data_mem_info: *OrtMemoryInfo, values_shape: *s64, values_shape_len: u64, values: *void, indices_data: *s64, indices_num: u64) -> OrtStatusPtr #c_call;
/**
* This fills populates an empty tensor that was created using OrtApi::CreateSparseTensorAsOrtValue.
* This will allocate required memory and copy the supplied NNZ values and CSR indices into that memory allocation.
* Memory allocation is performed using the allocator that was specified with OrtApi::CreateSparseTensorAsOrtValue.
*
* \param[in,out] ort_value ::OrtValue to populate with data
* \param[in] data_mem_info serves to identify the location of the data to be copied. If the allocator specified
* at the creation time has memory info that is not the same as mem_info argument to this function a X-device copy will be performed.
* String data is assumed to be on CPU and will only be copied into a CPU allocated buffer.
* \param[in] values_shape pointer to values shape array
* \param[in] values_shape_len length of the values_shape
* \param[in] values - pointer to an array of values. For strings, pass const char**.
* \param[in] inner_indices_data pointer to a location of CSR inner indices
* \param[in] inner_indices_num number of CSR inner indices
* \param[in] outer_indices_data pointer to a location of CSR outer indices
* \param[in] outer_indices_num number of CSR outer indices
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
FillSparseTensorCsr: #type (ort_value: *OrtValue, data_mem_info: *OrtMemoryInfo, values_shape: *s64, values_shape_len: u64, values: *void, inner_indices_data: *s64, inner_indices_num: u64, outer_indices_data: *s64, outer_indices_num: u64) -> OrtStatusPtr #c_call;
/**
* This fills populates an empty tensor that was created using OrtApi::CreateSparseTensorAsOrtValue.
* This will allocate required memory and copy the supplied NNZ values and BlockSparse indices into that memory allocation.
* Memory allocation is performed using the allocator that was specified with OrtApi::CreateSparseTensorAsOrtValue.
*
* \param[in,out] ort_value ::OrtValue to populate with data
* \param[in] data_mem_info serves to identify the location of the data to be copied. If the allocator specified
* at the creation time has memory info that is not the same as mem_info argument to this function a X-device copy will be performed.
* String data is assumed to be on CPU and will only be copied into a CPU allocated buffer.
* \param[in] values_shape
* \param[in] values_shape_len
* \param[in] values structure with values information
* \param[in] indices_shape_data pointer to a location of indices shape
* \param[in] indices_shape_len length of the block sparse indices shape
* \param[in] indices_data pointer to a location of indices data. Shape will determine the length of the indices data.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
FillSparseTensorBlockSparse: #type (ort_value: *OrtValue, data_mem_info: *OrtMemoryInfo, values_shape: *s64, values_shape_len: u64, values: *void, indices_shape_data: *s64, indices_shape_len: u64, indices_data: *s32) -> OrtStatusPtr #c_call;
/**
* Create an ::OrtValue with a sparse tensor. This is the first step.
* Next, use Use<Format>Indices() functions to supply sparse tensor with
* format specific indices data and set its sparse format to a specific enum value.
* This will not perform memory allocations. It will
* use supplied user buffer which should outlive the created sparse tensor.
* Use OrtApi::ReleaseValue to destroy the sparse tensor. It would not release the supplied values buffer.
* This function can not be used to map strings from the user allocated memory. Strings must always be copied
* and have UTF-8 encoding. Therefore, use OrtApi::CreateSparseTensorAsOrtValue above and then fill it with data
* using appropriate Make*() function.
*
* \param[in] info memory info where sparse values reside.
* \param[in,out] p_data pointer to a user allocated buffer with values. To create a full sparse tensor with no non-zero
* values, pass nullptr
* \param[in] dense_shape shape of the original dense tensor
* \param[in] dense_shape_len number of shape dimensions being passed
* \param[in] values_shape shape of the values data. To create a fully sparse tensor with no non-zero values,
* pass {0} shape.
* \param[in] values_shape_len number of values shape dimensions
* \param[in] type must be one of TENSOR_ELEMENT_DATA_TYPE_xxxx
* \param[out] out Should be freed by calling ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
CreateSparseTensorWithValuesAsOrtValue: #type (info: *OrtMemoryInfo, p_data: *void, dense_shape: *s64, dense_shape_len: u64, values_shape: *s64, values_shape_len: u64, type: ONNXTensorElementDataType, out: **OrtValue) -> OrtStatusPtr #c_call;
/**
* This assigns Coo format indices to the SparseTensor that was created by
* OrtApi::CreateSparseTensorWithValuesAsOrtValue above. It also sets OrtSparseFormat to
* ORT_SPARSE_COO. This will not allocate any additional memory for data. The life span of
* indices_data buffer should eclipse the life span of this ::OrtValue.
*
* \param[in,out] ort_value ::OrtValue instance constructed with OrtApi::CreateSparseTensorWithValuesAsOrtValue
* \param[in,out] indices_data pointer to a user pre-allocated buffer or nullptr for fully sparse tensors.
* \param[in] indices_num number of COO indices. Should either be 0 for fully sparse tensors, be equal
* to the number of nnz values specified to OrtApi::CreateSparseTensorWithValuesAsOrtValue for 1-D {nnz} indices or
* be twice as number of nnz values for a 2-D indices {nnz, 2}
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
UseCooIndices: #type (ort_value: *OrtValue, indices_data: *s64, indices_num: u64) -> OrtStatusPtr #c_call;
/**
* The assigns CSR format indices to the SparseTensor that was created by
* OrtApi::CreateSparseTensorWithValuesAsOrtValue above. It also sets OrtSparseFormat to
* ORT_SPARSE_CSRC. This will not allocate any additional memory for data. The life spans of
* inner_data and outer_data buffers should eclipse the life span of this ::OrtValue.
*
* \param[in,out] ort_value ::OrtValue instance constructed with OrtApi::CreateSparseTensorWithValuesAsOrtValue
* \param[in,out] inner_data pointer to a user pre-allocated buffer or nullptr for fully sparse tensors.
* \param[in] inner_num number of inner CSR indices. Should either be 0 for fully sparse tensors or be equal
* to the number of nnz values specified to OrtApi::CreateSparseTensorWithValuesAsOrtValue.
* \param[in,out] outer_data pointer to user pre-allocated buffer or nullptr for fully sparse tensors.
* \param[in] outer_num number of CSR outer indices. Should either be 0 for fully sparse tensors or
* equal to rows + 1 of the dense shape.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
UseCsrIndices: #type (ort_value: *OrtValue, inner_data: *s64, inner_num: u64, outer_data: *s64, outer_num: u64) -> OrtStatusPtr #c_call;
/**
* The assigns BlockSparse format indices to the SparseTensor that was created by
* OrtApi::CreateSparseTensorWithValuesAsOrtValue above. It also sets OrtSparseFormat to
* ORT_SPARSE_BLOCK_SPARSE. This will not allocate any additional memory for data. The life span of
* indices_data buffer must eclipse the lifespan of this ::OrtValue.
*
* \param[in,out] ort_value OrtValue instance constructed with OrtApi::CreateSparseTensorWithValuesAsOrtValue
* \param[in] indices_shape pointer to indices shape. Use {0} for fully sparse tensors
* \param[in] indices_shape_len length of the indices shape
* \param[in,out] indices_data pointer to user pre-allocated buffer or nullptr for fully sparse tensors.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
UseBlockSparseIndices: #type (ort_value: *OrtValue, indices_shape: *s64, indices_shape_len: u64, indices_data: *s32) -> OrtStatusPtr #c_call;
/** \brief Returns sparse tensor format enum iff a given ort value contains an instance of sparse tensor.
*
* \param[in] ort_value ::OrtValue that contains an instance of sparse tensor
* \param[out] out pointer to out parameter
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetSparseTensorFormat: #type (ort_value: *OrtValue, out: *OrtSparseFormat) -> OrtStatusPtr #c_call;
/** \brief Returns data type and shape of sparse tensor values (nnz) iff ::OrtValue contains a SparseTensor.
*
* \param[in] ort_value An ::OrtValue that contains a fully constructed sparse tensor
* \param[out] out Must be freed by OrtApi::ReleaseTensorTypeAndShapeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetSparseTensorValuesTypeAndShape: #type (ort_value: *OrtValue, out: **OrtTensorTypeAndShapeInfo) -> OrtStatusPtr #c_call;
/** \brief Returns numeric data for sparse tensor values (nnz). For string values use GetStringTensor*().
*
* \param[in] ort_value an instance of ::OrtValue containing sparse tensor
* \param[out] out returns a pointer to values data. Do not attempt to free this ptr.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetSparseTensorValues: #type (ort_value: *OrtValue, out: **void) -> OrtStatusPtr #c_call;
/** \brief Returns data type, shape for the type of indices specified by indices_format.
*
* \param[in] ort_value ::OrtValue containing sparse tensor.
* \param[in] indices_format One of the indices formats. It is an error to request a format that the sparse
* tensor does not contain.
* \param[out] out an instance of ::OrtTensorTypeAndShapeInfo. Must be freed by OrtApi::ReleaseTensorTypeAndShapeInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetSparseTensorIndicesTypeShape: #type (ort_value: *OrtValue, indices_format: OrtSparseIndicesFormat, out: **OrtTensorTypeAndShapeInfo) -> OrtStatusPtr #c_call;
/** \brief Returns indices data for the type of the indices specified by indices_format
*
* \param[in] ort_value ::OrtValue containing sparse tensor.
* \param[in] indices_format One of the indices formats. It is an error to request a format that the sparse tensor does not contain.
* \param[out] num_indices Pointer to where the number of indices entries is returned
* \param[out] indices Returned pointer to the indices data. Do not free the returned pointer as it refers to internal data owned by the ::OrtValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetSparseTensorIndices: #type (ort_value: *OrtValue, indices_format: OrtSparseIndicesFormat, num_indices: *u64, indices: **void) -> OrtStatusPtr #c_call;
/**
* \brief Sets out to 1 iff an optional type OrtValue has an element, 0 otherwise (OrtValue is None)
* Use this API to find if the optional type OrtValue is None or not.
* If the optional type OrtValue is not None, use the OrtValue just like any other OrtValue.
* For example, if you get an OrtValue that corresponds to Optional(tensor) and
* if HasValue() returns true, use it as tensor and so on.
* \param[in] value Input OrtValue.
* \param[out] out indicating if the input OrtValue contains data (1) or if it is a None (0)
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
HasValue: #type (value: *OrtValue, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Used for custom operators, gets the GPU compute stream to use to launch the custom a GPU kernel
* \see ::OrtCustomOp
* \param[in] context OrtKernelContext instance
* \param[out] out Returns pointer to a GPU compute stream that can be used to launch the custom GPU kernel.
* If retrieving the GPU compute stream is not relevant (GPU not enabled in the build, kernel partitioned to
* some other EP), then a nullptr is returned as the output param.
* Do not free or mutate the returned pointer as it refers to internal data owned by the underlying session.
* Only use it for custom kernel launching.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelContext_GetGPUComputeStream: #type (_context: *OrtKernelContext, out: **void) -> OrtStatusPtr #c_call;
/// @}
/// \name GetTensorMemoryInfo
/// @{
/** \brief Returns a pointer to the ::OrtMemoryInfo of a Tensor
* \param[in] value ::OrtValue containing tensor.
* \param[out] mem_info ::OrtMemoryInfo of the tensor. Do NOT free the returned pointer. It is valid for the lifetime of the ::OrtValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetTensorMemoryInfo: #type (value: *OrtValue, mem_info: **OrtMemoryInfo) -> OrtStatusPtr #c_call;
/// @}
/// \name GetExecutionProviderApi
/// @{
/** \brief Get a pointer to the requested version of the Execution Provider specific
* API extensions to the OrtApi
* \param[in] provider_name The name of the execution provider name. Currently only the following
* values are supported: "DML".
* \param[in] version Must be ::ORT_API_VERSION.
* \param[out] provider_api A void pointer containing a reference to the execution provider versioned api structure.
* For example, the provider_api pointer can be cast to the OrtDmlApi* when the provider_name is "DML".
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetExecutionProviderApi: #type (provider_name: *u8, version: u32, provider_api: **void) -> OrtStatusPtr #c_call;
/// \name SessionOptions
/// @{
/** \brief Set custom thread creation function
*
* \param[in] options Session options
* \param[in] ort_custom_create_thread_fn Custom thread creation function
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsSetCustomCreateThreadFn: #type (options: *OrtSessionOptions, ort_custom_create_thread_fn: OrtCustomCreateThreadFn) -> OrtStatusPtr #c_call;
/** \brief Set creation options for custom thread
*
* \param[in] options Session options
* \param[in] ort_custom_thread_creation_options Custom thread creation options (can be nullptr)
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsSetCustomThreadCreationOptions: #type (options: *OrtSessionOptions, ort_custom_thread_creation_options: *void) -> OrtStatusPtr #c_call;
/** \brief Set custom thread join function
*
* \param[in] options Session options
* \param[in] ort_custom_join_thread_fn Custom join thread function, must not be nullptr when ort_custom_create_thread_fn is set
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SessionOptionsSetCustomJoinThreadFn: #type (options: *OrtSessionOptions, ort_custom_join_thread_fn: OrtCustomJoinThreadFn) -> OrtStatusPtr #c_call;
/// \name OrtThreadingOptions
/// @{
/** \brief Set custom thread creation function for global thread pools
*
* \param[inout] tp_options
* \param[in] ort_custom_create_thread_fn Custom thread creation function
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetGlobalCustomCreateThreadFn: #type (tp_options: *OrtThreadingOptions, ort_custom_create_thread_fn: OrtCustomCreateThreadFn) -> OrtStatusPtr #c_call;
/** \brief Set custom thread creation options for global thread pools
*
* \param[inout] tp_options
* \param[in] ort_custom_thread_creation_options Custom thread creation options (can be nullptr)
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetGlobalCustomThreadCreationOptions: #type (tp_options: *OrtThreadingOptions, ort_custom_thread_creation_options: *void) -> OrtStatusPtr #c_call;
/** \brief Set custom thread join function for global thread pools
*
* \param[inout] tp_options
* \param[in] ort_custom_join_thread_fn Custom thread join function, must not be nullptr when global ort_custom_create_thread_fn is set
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SetGlobalCustomJoinThreadFn: #type (tp_options: *OrtThreadingOptions, ort_custom_join_thread_fn: OrtCustomJoinThreadFn) -> OrtStatusPtr #c_call;
/** \brief Synchronize bound inputs. The call may be necessary for some providers, such as cuda,
* in case the system that allocated bound memory operated on a different stream. However, the
* operation is provider specific and could be a no-op.
*
* \param[inout] binding_ptr
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SynchronizeBoundInputs: #type (binding_ptr: *OrtIoBinding) -> OrtStatusPtr #c_call;
/** \brief Synchronize bound outputs. The call may be necessary for some providers, such as cuda,
* in case the system that allocated bound memory operated on a different stream. However, the
* operation is provider specific and could be a no-op.
*
* \param[inout] binding_ptr
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
SynchronizeBoundOutputs: #type (binding_ptr: *OrtIoBinding) -> OrtStatusPtr #c_call;
/** \brief Append CUDA execution provider to the session options
*
* If CUDA is not available (due to a non CUDA enabled build), this function will return failure.
*
* This is slightly different from OrtApi::SessionOptionsAppendExecutionProvider_CUDA, it takes an
* ::OrtCUDAProviderOptions which is publicly defined. This takes an opaque ::OrtCUDAProviderOptionsV2
* which must be created with OrtApi::CreateCUDAProviderOptions.
*
* For OrtApi::SessionOptionsAppendExecutionProvider_CUDA, the user needs to instantiate ::OrtCUDAProviderOptions
* as well as allocate/release buffers for some members of ::OrtCUDAProviderOptions.
* Here, OrtApi::CreateCUDAProviderOptions and Ortapi::ReleaseCUDAProviderOptions will do the memory management for you.
*
* \param[in] options
* \param[in] cuda_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.11.
*/
SessionOptionsAppendExecutionProvider_CUDA_V2: #type (options: *OrtSessionOptions, cuda_options: *OrtCUDAProviderOptionsV2) -> OrtStatusPtr #c_call;
/** \brief Create an OrtCUDAProviderOptionsV2
*
* \param[out] out Newly created ::OrtCUDAProviderOptionsV2. Must be released with OrtApi::ReleaseCudaProviderOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.11.
*/
CreateCUDAProviderOptions: #type (out: **OrtCUDAProviderOptionsV2) -> OrtStatusPtr #c_call;
/** \brief Set options in a CUDA Execution Provider.
*
* Please refer to https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#configuration-options
* to know the available keys and values. Key should be in null terminated string format of the member of ::OrtCUDAProviderOptionsV2
* and value should be its related range. Recreates the options and only sets the supplied values.
*
* For example, key="device_id" and value="0"
*
* \param[in] cuda_options
* \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys
* \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values
* \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.11.
*/
UpdateCUDAProviderOptions: #type (cuda_options: *OrtCUDAProviderOptionsV2, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/**
* Get serialized CUDA provider options string.
*
* For example, "device_id=0;arena_extend_strategy=0;......"
*
* \param cuda_options - OrtCUDAProviderOptionsV2 instance
* \param allocator - a ptr to an instance of OrtAllocator obtained with CreateAllocator() or GetAllocatorWithDefaultOptions()
* the specified allocator will be used to allocate continuous buffers for output strings and lengths.
* \param ptr - is a UTF-8 null terminated string allocated using 'allocator'. The caller is responsible for using the same allocator to free it.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.11.
*/
GetCUDAProviderOptionsAsString: #type (cuda_options: *OrtCUDAProviderOptionsV2, allocator: *OrtAllocator, ptr: **u8) -> OrtStatusPtr #c_call;
/** \brief Release an ::OrtCUDAProviderOptionsV2
*
* \note This is an exception in the naming convention of other Release* functions, as the name of the method does not have the V2 suffix, but the type does
*
* \since Version 1.11.
*/
ReleaseCUDAProviderOptions: #type (input: *OrtCUDAProviderOptionsV2) -> void #c_call;
/** \brief Append MIGraphX provider to session options
*
* If MIGraphX is not available (due to a non MIGraphX enabled build, or if MIGraphX is not installed on the system), this function will return failure.
*
* \param[in] options
* \param[in] migraphx_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.11.
*/
SessionOptionsAppendExecutionProvider_MIGraphX: #type (options: *OrtSessionOptions, migraphx_options: *OrtMIGraphXProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Replace initialized Tensors with external data with the data provided in initializers.
*
* The function will find the initialized TensorProtos with external data in the graph with the provided names and
* replace them with the provided tensors. The API verifies that the TensorProto being replaced
* has an external data reference and has the same name, dimensions and data type as its replacement. The replacement
* will occur before any of the optimizations take place. The data will be copied into the graph
* since TensorProto can't refer to the user provided buffers.
*
* Once the model has been loaded, the OrtValue(s) added to SessionOptions instance will be removed
* from the internal SessionOptions copy to save memory, the user provided buffers can then be deallocated
* and the SessionOptions instance that refers to them can be destroyed.
*
* \param[in] options
* \param[in] initializer_names Array of null terminated UTF-8 encoded strings of the initializers names.
* \param[in] initializers Array of ::OrtValue type
* \param[in] num_initializers Number of elements in the initializer_names and initializers
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.12.
*/
AddExternalInitializers: #type (options: *OrtSessionOptions, initializer_names: **u8, initializers: **OrtValue, num_initializers: u64) -> OrtStatusPtr #c_call;
/** \brief: Create attribute of onnxruntime operator
*
* \param[in] name Name of the attribute
* \param[in] data Data content of the attribute
* \param[in] len Number of bytes stored in data for ORT_OP_ATTR_STRING.
Number of elements if data represents an array (e.g., ORT_OP_ATTR_INTS). Otherwise, set to 1.
* \param[in] type Data type
* \param[out] op_attr Attribute that has been created, which must be released by OrtApi::ReleaseOpAttr
*
* \since Version 1.12.
*/
CreateOpAttr: #type (name: *u8, data: *void, len: s32, type: OrtOpAttrType, op_attr: **OrtOpAttr) -> OrtStatusPtr #c_call;
/* \brief: Release op attribute
*
* \param[in] opAttr Attribute created by OrtApi::CreateOpAttr
*
* \since Version 1.12.
*/
ReleaseOpAttr: #type (input: *OrtOpAttr) -> void #c_call;
/** \brief: Create onnxruntime native operator
*
* \param[in] info Kernel info
* \param[in] op_name Operator name
* \param[in] domain Operator domain
* \param[in] version Operator opset version
* \param[in] type_constraint_names Name of the type constraints, such as "T" or "T1"
* \param[in] type_constraint_values Type of each constraints
* \param[in] type_constraint_count Number of constraints
* \param[in] attr_values Attributes used to initialize the operator
* \param[in] attr_count Number of the attributes
* \param[in] input_count Number of inputs
* \param[in] output_count Number of outputs
* \param[out] ort_op Operator that has been created
*
* \since Version 1.12.
*/
CreateOp: #type (info: *OrtKernelInfo, op_name: *u8, domain: *u8, version: s32, type_constraint_names: **u8, type_constraint_values: *ONNXTensorElementDataType, type_constraint_count: s32, attr_values: **OrtOpAttr, attr_count: s32, input_count: s32, output_count: s32, ort_op: **OrtOp) -> OrtStatusPtr #c_call;
/** \brief: Invoke the operator created by OrtApi::CreateOp
* The inputs must follow the order as specified in onnx specification
*
* \param[in] context Kernel context
* \param[in] ort_op Operator that has been created
* \param[in] input_values Array of inputs
* \param[in] input_count Number of inputs
* \param[in] output_values Array of outputs
* \param[in] output_count Number of outputs
*
* \since Version 1.12.
*/
InvokeOp: #type (_context: *OrtKernelContext, ort_op: *OrtOp, input_values: **OrtValue, input_count: s32, output_values: **OrtValue, output_count: s32) -> OrtStatusPtr #c_call;
/* \brief: Release an onnxruntime operator
*
* \param[in] Op Operator created by OrtApi::CreateOp
*
* \since Version 1.12.
*/
ReleaseOp: #type (input: *OrtOp) -> void #c_call;
/** \brief: Append execution provider to the session options.
* \param[in] options
* \param[in] provider_name - provider to add.
* \param[in] provider_options_keys - keys to configure the provider options
* \param[in] provider_options_values - values to configure the provider options
* \param[in] num_keys - number of keys passed in
*
* Currently supported provider names:
* QNNExecutionProvider (or QNN)
* OpenVINOExecutionProvider (or OpenVINO)
* XnnpackExecutionProvider (or XNNPACK)
* WebNNExecutionProvider (or WEBNN)
* WebGpuExecutionProvider (or WebGPU)
* AzureExecutionProvider (or AZURE)
* JsExecutionProvider (or JS)
* VitisAIExecutionProvider (or VitisAI)
* CoreMLExecutionProvider (or CoreML)
*
* Note: If an execution provider has a dedicated SessionOptionsAppendExecutionProvider_<provider name> function
* that should be used to add it.
*
* QNN supported keys:
* "backend_type": Type of QNN backend. Specifies a backend path that is the associated QNN backend library file
* name. E.g., given backend type "htp", on Windows, the backend path would be "QnnHtp.dll", and on other
* platforms, it would be "libQnnHtp.so". Mutually exclusive with "backend_path".
* Available options:
* -# "cpu"
* -# "gpu"
* -# "htp": Default.
* -# "saver"
* -# "ir"
* "backend_path": File path to QNN backend library. Mutually exclusive with "backend_type".
* "profiling_level": QNN profiling level.
* Available options:
* -# "off": Default.
* -# "basic"
* -# "detailed"
* "profiling_file_path": QNN profiling file path if ETW not enabled.
* "rpc_control_latency": QNN RPC control latency.
* "vtcm_mb": QNN VTCM size in MB. default to 0(not set).
* "htp_performance_mode": QNN performance mode.
* Available options:
* -# "burst"
* -# "balanced"
* -# "default": Default.
* -# "high_performance"
* -# "high_power_saver"
* -# "low_balanced"
* -# "extreme_power_saver"
* -# "low_power_saver"
* -# "power_saver"
* -# "sustained_high_performance"
* "dump_qnn_ir_dlc": Use the QnnIr backend library to write .dlc files for each subgraph dispatched to QNN. When
* enabled, inference results will be incorrect. Use only for debugging.
* -# "0": Default: disabled
* -# "1": enabled
* "dump_qnn_ir_dlc_dir": Set the directory into which QnnIr will be configured to write QNN graphs as .dlc files.
* Default is current working directory.
* "qnn_ir_backend_path": File path to the QnnIr backend library. If "dump_qnn_ir_dlc" is enabled, use this path
* instead of looking for the Ir backend in the standard location.
* "qnn_saver_path": File path to the QNN Saver backend library. If specified, QNN Saver will be enabled and will
* dump QNN API calls to disk for replay/debugging. QNN Saver produces incorrect model inference results and
* may alter model/EP partitioning. Use only for debugging.
* "qnn_context_priority": QNN context priority.
* Available options:
* -# "low"
* -# "normal": Default.
* -# "normal_high"
* -# "high"
* "htp_graph_finalization_optimization_mode": Set the optimization mode for graph finalization on the HTP backend.
* Available options:
* -# "0": Default.
* -# "1": Faster preparation time, less optimal graph.
* -# "2": Longer preparation time, more optimal graph.
* -# "3": Longest preparation time, most likely even more optimal graph. See QNN SDK documentation for specific
* details.
* "soc_model": The SoC model number. Refer to the QNN SDK documentation for valid values.
* Defaults to "0" (unknown).
* "htp_arch": The minimum HTP architecture the driver will use to select compatible QNN operators.
* Available options:
* -# "0": Default (none).
* -# "68"
* -# "69"
* -# "73"
* -# "75"
* -# "81"
* "device_id": The ID of the device to use when setting 'htp_arch'. Defaults to "0" (for single device).
* "enable_htp_fp16_precision": Used for float32 model for HTP backend.
* Enable the float32 model to be inferenced with fp16 precision. Otherwise, it will be fp32 precision.
* -# "0": With fp32 precision.
* -# "1": Default. With fp16 precision.
* "offload_graph_io_quantization": Offload graph input quantization and graph output dequantization to another
* execution provider (typically CPU EP).
* -# "0": Disabled. QNN EP will handle quantization and dequantization of graph I/O.
* -# "1": Enabled. This is the default value.
* "enable_htp_spill_fill_buffer": Enable HTP spill fill buffer setting. The flag is used while generating context
* binary.
* -# "0": Default. Disabled.
* -# "1": Enabled.
* "enable_htp_shared_memory_allocator": Enable the QNN HTP shared memory allocator. Requires libcdsprpc.so/dll to
* be available.
* -# "0": Default. Disabled.
* -# "1": Enabled.
* "dump_json_qnn_graph": Set to "1" to dump QNN graphs generated by QNN EP as JSON files. Each graph partition
* assigned to QNN EP is dumped to a separate file.
* "json_qnn_graph_dir": Directory in which to dump QNN JSON graphs. If not specified, QNN graphs are dumped in the
* program's current working directory. Ignored if "dump_json_qnn_graph" is not set.
* "op_packages": QNN UDO op_package for QNN EP, allowed format:
*   "<op_type>:<op_package_path>:<interface>[:<target>],<op_type2>:<op_package_path2>:<interface2>[:<target>]",
*   where op_type is the name of the operation, op_package_path is the path to the op package shared library,
* interface is the symbol name to register the op life cycle functions, and target is the backend type. For more
* details, refer to: https://docs.qualcomm.com/bundle/publicresource/topics/80-63442-50/op_packages.html
* [Advanced] "skip_qnn_version_check": Set to "1" to allow a different version of QNN to be used than what was compiled
* into ONNX Runtime. Differences in operator support, accuracy, performance, and QNN's ABI may lead to crashes, inaccurate
* results, and poor performance. Use with caution and test thoroughly.
*
* XNNPACK supported keys:
* "intra_op_num_threads": number of thread-pool size to use for XNNPACK execution provider.
* default value is 0, which means to use the session thread-pool size.
*
* \since Version 1.12.
*/
SessionOptionsAppendExecutionProvider: #type (options: *OrtSessionOptions, provider_name: *u8, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/* \brief: Get a copy of kernel info
*
* \param[in] info Kernel info
* \param[out] info_copy Copy of kernel info
*
* \since Version 1.12.
*/
CopyKernelInfo: #type (info: *OrtKernelInfo, info_copy: **OrtKernelInfo) -> OrtStatusPtr #c_call;
/* \brief: Release kernel info
*
* \param[in] KernelInfo A copy of kernel info returned by CopyKernelInfo
*
* \since Version 1.12.
*/
ReleaseKernelInfo: #type (input: *OrtKernelInfo) -> void #c_call;
/// \name Ort Training
/// @{
/** \brief Gets the Training C Api struct
*
* Call this function to access the ::OrtTrainingApi structure that holds pointers to functions that enable
* training with onnxruntime.
* \note A NULL pointer will be returned and no error message will be printed if the training api
* is not supported with this build. A NULL pointer will be returned and an error message will be
* printed if the provided version is unsupported, for example when using a runtime older than the
* version created with this header file.
*
* \param[in] version Must be ::ORT_API_VERSION
* \return The ::OrtTrainingApi struct for the version requested.
*
* \since Version 1.13
*/
GetTrainingApi: #type (version: u32) -> *OrtTrainingApi #c_call;
/** \brief Append CANN provider to session options
*
* If CANN is not available (due to a non CANN enabled build, or if CANN is not installed on the system), this function will return failure.
*
* \param[in] options
* \param[in] cann_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.13.
*/
SessionOptionsAppendExecutionProvider_CANN: #type (options: *OrtSessionOptions, cann_options: *OrtCANNProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Create an OrtCANNProviderOptions
*
* \param[out] out created ::OrtCANNProviderOptions. Must be released with OrtApi::ReleaseCANNProviderOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.13.
*/
CreateCANNProviderOptions: #type (out: **OrtCANNProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Set options in a CANN Execution Provider.
*
* \param[in] cann_options
* \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys
* \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values
* \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.13.
*/
UpdateCANNProviderOptions: #type (cann_options: *OrtCANNProviderOptions, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/** \brief Get serialized CANN provider options string.
*
* \param[in] cann_options OrtCANNProviderOptions instance
* \param[in] allocator a ptr to an instance of OrtAllocator obtained with CreateAllocator()
* or GetAllocatorWithDefaultOptions(), the specified allocator will be used to allocate
* continuous buffers for output strings and lengths.
* \param[out] ptr is a UTF-8 null terminated string allocated using 'allocator'.
* The caller is responsible for using the same allocator to free it.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.13.
*/
GetCANNProviderOptionsAsString: #type (cann_options: *OrtCANNProviderOptions, allocator: *OrtAllocator, ptr: **u8) -> OrtStatusPtr #c_call;
/** \brief Release an OrtCANNProviderOptions
*
* \param[in] input The pointer of OrtCANNProviderOptions which will been deleted
*
* \since Version 1.13.
*/
ReleaseCANNProviderOptions: #type (input: *OrtCANNProviderOptions) -> void #c_call;
/* \brief Get OrtDevice type from MemoryInfo
*
* \since Version 1.14
*/
MemoryInfoGetDeviceType: #type (ptr: *OrtMemoryInfo, out: *OrtMemoryInfoDeviceType) -> void #c_call;
/* \brief Update the OrtEnv instance with custom log severity level
*
* \param[in] ort_env The OrtEnv instance being used
* \param[in] log_severity_level The log severity level.
*
* \since Version 1.14.
*/
UpdateEnvWithCustomLogLevel: #type (ort_env: *OrtEnv, log_severity_level: OrtLoggingLevel) -> OrtStatusPtr #c_call;
/* \brief Set affinities for intra op threads
*
* Affinity string follows format:
* logical_processor_id,logical_processor_id;logical_processor_id,logical_processor_id
* Semicolon isolates configurations among threads, while comma split processors where ith thread expected to attach to.
* e.g. 1,2,3;4,5
* specifies affinities for two threads, with the 1st thread attach to the 1st, 2nd, and 3rd processor, and 2nd thread to the 4th and 5th.
* To ease the configuration, an "interval" is also allowed:
* e.g. 1-8;8-16;17-24
* orders that the 1st thread runs on first eight processors, 2nd thread runs on next eight processors, and so forth.
* Note:
* 1. Once set, the number of thread affinities must equal to intra_op_num_threads - 1,
* ort does not set affinity on the main thread which is started and managed by the calling app;
* 2. For windows, ort will infer the group id from a logical processor id, for example, assuming there are two groups with each has 64 logical processors,
* an id of 64 will be inferred as the last processor of the 1st group, while 65 will be interpreted as the 1st processor of the second group.
* Hence 64-65 is an invalid configuration, because a windows thread cannot be attached to processors across group boundary.
*
* \since Version 1.14
*/
SetGlobalIntraOpThreadAffinity: #type (tp_options: *OrtThreadingOptions, affinity_string: *u8) -> OrtStatusPtr #c_call;
/** \brief Register custom ops from a shared library.
*
* Loads a shared library (.dll on windows, .so on linux, etc) named 'library_name' and looks for this entry point:
* OrtStatus* RegisterCustomOps(OrtSessionOptions * options, const OrtApiBase* api);
* It then passes in the provided session options to this function along with the api base.
*
* The handle to the loaded library is automatically released by ORT when the last OrtSession that references the
* library handle is released. If no OrtSession is created, then the library handle is released when the provided
* OrtSessionOptions is released.
*
* \param[in] options The session options.
* \param[in] library_name The name of the shared library to load and register. Refer to OS-specific dynamic library
* loading utilities (e.g., LoadLibraryEx on Windows or dlopen on Linux/MacOS) for information
* on the format of library names and search paths.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
RegisterCustomOpsLibrary_V2: #type (options: *OrtSessionOptions, library_name: *u16) -> OrtStatusPtr #c_call;
/** \brief Register custom ops by calling a RegisterCustomOpsFn function.
*
* Searches for registration_func_name and if found calls it.
*
* The library containing the function must either be linked against or previously loaded by the executable.
*
* If you want ONNX Runtime to load the library and manage its lifetime, use RegisterCustomOpsLibrary_V2.
*
* RegisterCustomOpsUsingFunction can be used in scenarios where it may not be possible for ONNX Runtime to load
* the library from a path. e.g. mobile platforms where the library must be linked into the app.
*
* The registration function must have the signature of RegisterCustomOpsFn:
* OrtStatus* (*fn)(OrtSessionOptions* options, const OrtApiBase* api);
*
* See https://onnxruntime.ai/docs/reference/operators/add-custom-op.html for details on how the registration
* function should be implemented.
*
* \param[in] options OrtSessionOptions that is passed through as the first argument in the call to the
* registration function.
* \param[in] registration_func_name Name of registration function to use.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
RegisterCustomOpsUsingFunction: #type (options: *OrtSessionOptions, registration_func_name: *u8) -> OrtStatusPtr #c_call;
/** \brief Get the number of inputs from ::OrtKernelInfo.
*
* Used in the CreateKernel callback of an OrtCustomOp to query the number of inputs
* during kernel/session creation.
*
* \param[in] info Instance of ::OrtKernelInfo.
* \param[out] out Pointer to variable assigned with the result on success.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
KernelInfo_GetInputCount: #type (info: *OrtKernelInfo, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the number of outputs from ::OrtKernelInfo.
*
* Used in the CreateKernel callback of an OrtCustomOp to query the number of outputs
* during kernel/session creation.
*
* \param[in] info Instance of ::OrtKernelInfo.
* \param[out] out Pointer to variable assigned with the result on success.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
KernelInfo_GetOutputCount: #type (info: *OrtKernelInfo, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the name of a ::OrtKernelInfo's input.
*
* Used in the CreateKernel callback of an OrtCustomOp to query an input's name
* during kernel/session creation.
*
* If `out` is nullptr, the value of `size` is set to the size of the name
* string (including null-terminator), and a success status is returned.
*
* If the `size` parameter is greater than or equal to the name string's size and `out` is not nullptr,
* the value of `size` is set to the true size of the string (including null-terminator),
* the provided memory is filled with the string's contents, and a success status is returned.
*
* If the `size` parameter is less than the actual string's size and `out`
* is not nullptr, the value of `size` is set to the true size of the string
* and a failure status is returned.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[in] index The index of the input name to get. Returns a failure status if out-of-bounds.
* \param[out] out Memory location into which to write the UTF-8 null-terminated string representing the input's name.
* \param[in,out] size Pointer to the size of the `out` buffer. See above comments for details.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
KernelInfo_GetInputName: #type (info: *OrtKernelInfo, index: u64, out: *u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the name of a ::OrtKernelInfo's output.
*
* Used in the CreateKernel callback of an OrtCustomOp to query an output's name
* during kernel/session creation.
*
* If `out` is nullptr, the value of `size` is set to the size of the name
* string (including null-terminator), and a success status is returned.
*
* If the `size` parameter is greater than or equal to the name string's size and `out` is not nullptr,
* the value of `size` is set to the true size of the string (including null-terminator),
* the provided memory is filled with the string's contents, and a success status is returned.
*
* If the `size` parameter is less than the actual string's size and `out`
* is not nullptr, the value of `size` is set to the true size of the string
* and a failure status is returned.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[in] index The index of the output name to get. Returns a failure status if out-of-bounds.
* \param[out] out Memory location into which to write the UTF-8 null-terminated string representing the output's
* name.
* \param[in,out] size Pointer to the size of the `out` buffer. See above comments for details.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
KernelInfo_GetOutputName: #type (info: *OrtKernelInfo, index: u64, out: *u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the type information for a ::OrtKernelInfo's input.
*
* Used in the CreateKernel callback of an OrtCustomOp to query the shape and type information
* of an input during kernel/session creation.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[in] index Which input to get the type information for
* \param[out] type_info Pointer set to the resulting ::OrtTypeInfo. Must be freed with OrtApi::ReleaseTypeInfo.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
KernelInfo_GetInputTypeInfo: #type (info: *OrtKernelInfo, index: u64, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get the type information for a ::OrtKernelInfo's output.
*
* Used in the CreateKernel callback of an OrtCustomOp to query the shape and type information
* of an output during kernel/session creation.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[in] index Which input to get the type information for
* \param[out] type_info Pointer set to the resulting ::OrtTypeInfo. Must be freed with OrtApi::ReleaseTypeInfo.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
KernelInfo_GetOutputTypeInfo: #type (info: *OrtKernelInfo, index: u64, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get a ::OrtValue tensor stored as an attribute in the graph node.
*
* Used in the CreateKernel callback of an OrtCustomOp to get a tensor attribute.
*
* \param[in] info ::OrtKernelInfo instance.
* \param[in] name UTF-8 null-terminated string representing the attribute's name.
* \param[in] allocator Allocator used to allocate the internal tensor state.
* \param[out] out Returns newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue,
* which will also free internal tensor state allocated with the provided allocator.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
KernelInfoGetAttribute_tensor: #type (info: *OrtKernelInfo, name: *u8, allocator: *OrtAllocator, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Checks if the given session configuration entry exists.
*
* The config_key formats are defined in onnxruntime_session_options_config_keys.h
*
* Can be used in a custom operator library to check for session configuration entries
* that target one or more custom operators in the library. Example: The config entry
* custom_op.myop.some_key targets a custom op named "myop".
*
* \param[in] options The ::OrtSessionOptions instance.
* \param[in] config_key A null-terminated UTF-8 string representation of the configuration key.
* \param[out] out Pointer set to 1 if the entry exists and 0 otherwise.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
HasSessionConfigEntry: #type (options: *OrtSessionOptions, config_key: *u8, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Get a session configuration value.
*
* Returns a failure status if the configuration key does not exist.
* The config_key and the format of config_value are defined in onnxruntime_session_options_config_keys.h
*
* If `config_value` is nullptr, the value of `size` is set to the true size of the string
* value (including null-terminator), and a success status is returned.
*
* If the `size` parameter is greater than or equal to the actual string value's size,
* the value of `size` is set to the true size of the string value, the provided memory
* is filled with the value's contents, and a success status is returned.
*
* If the `size` parameter is less than the actual string value's size and `config_value`
* is not nullptr, the value of `size` is set to the true size of the string value
* and a failure status is returned.
*
* Can be used in a custom operator library to get session configuration entries
* that target one or more custom operators in the library. Example: The config entry
* custom_op.myop.some_key targets a custom op named "myop".
*
* \param[in] options The session options.
* \param[in] config_key A null-terminated UTF-8 string representation of the config key.
* \param[in] config_value Pointer to memory where the null-terminated UTF-8 string value will be stored.
* \param[in,out] size Pointer to the size of the `config_value` buffer. See above comments for details.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.14
*/
GetSessionConfigEntry: #type (options: *OrtSessionOptions, config_key: *u8, config_value: *u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Append dnnl provider to session options
*
* If oneDNN is not available, this function will return failure.
*
* \param[in] options
* \param[in] dnnl_options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
SessionOptionsAppendExecutionProvider_Dnnl: #type (options: *OrtSessionOptions, dnnl_options: *OrtDnnlProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Create an OrtDnnlProviderOptions
*
* \param[out] out Newly created ::OrtDnnlProviderOptions. Must be released with OrtApi::ReleaseDnnlProviderOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
CreateDnnlProviderOptions: #type (out: **OrtDnnlProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Set options in a oneDNN Execution Provider.
*
* Key should be in null terminated string format of the member of ::OrtDnnlProviderOptions
* and value should be its related range.
*
* For example, key="use_arena" and value="1"
*
* \param[in] dnnl_options
* \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys
* \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values
* \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
UpdateDnnlProviderOptions: #type (dnnl_options: *OrtDnnlProviderOptions, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/**
* Get serialized oneDNN provider options string.
*
* For example, "use_arena=1;......"
*
* \param dnnl_options - OrtDnnlProviderOptions instance
* \param allocator - a ptr to an instance of OrtAllocator obtained with CreateAllocator() or GetAllocatorWithDefaultOptions()
* the specified allocator will be used to allocate continuous buffers for output strings and lengths.
* \param ptr - is a UTF-8 null terminated string allocated using 'allocator'. The caller is responsible for using the same allocator to free it.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
GetDnnlProviderOptionsAsString: #type (dnnl_options: *OrtDnnlProviderOptions, allocator: *OrtAllocator, ptr: **u8) -> OrtStatusPtr #c_call;
/** \brief Release an ::OrtDnnlProviderOptions
*
* \since Version 1.15.
*/
ReleaseDnnlProviderOptions: #type (input: *OrtDnnlProviderOptions) -> void #c_call;
/** \brief Get the graph node name from ::OrtKernelInfo.
*
* If `out` is nullptr, the value of `size` is set to the size of the name
* string (including null-terminator), and a success status is returned.
*
* If the `size` parameter is greater than or equal to the name string's size and `out` is not nullptr,
* the value of `size` is set to the true size of the string (including null-terminator),
* the provided memory is filled with the string's contents, and a success status is returned.
*
* If the `size` parameter is less than the actual string's size and `out`
* is not nullptr, the value of `size` is set to the true size of the string
* and a failure status is returned.
*
* Can be used in a custom operator's CreateKernel callback to get the name of the operator's node name in the graph.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[out] out Memory location into which to write the UTF-8 null-terminated string representing the name.
* \param[in,out] size Pointer to the size of the `out` buffer. See above comments for details.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.15
*/
KernelInfo_GetNodeName: #type (info: *OrtKernelInfo, out: *u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the session logger from ::OrtKernelInfo.
*
* Used in the CreateKernel callback of an OrtCustomOp to get a logger that can be used to log
* messages.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[out] logger Pointer set to the session's ::OrtLogger. Owned by ONNX Runtime, so do not free.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.15
*/
KernelInfo_GetLogger: #type (info: *OrtKernelInfo, logger: **OrtLogger) -> OrtStatusPtr #c_call;
/** \brief Get the runtime logger from ::OrtKernelContext.
*
* Used in the KernelCompute callback of an OrtCustomOp to get a logger that can be used to log
* messages during inference.
*
* \param[in] context An instance of ::OrtKernelContext.
* \param[out] logger Pointer set to the kernel context's ::OrtLogger. Owned by ONNX Runtime, so do not free.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.15
*/
KernelContext_GetLogger: #type (_context: *OrtKernelContext, logger: **OrtLogger) -> OrtStatusPtr #c_call;
/** \brief Logs a message at the given severity level using the provided ::OrtLogger.
*
* Only messages with a severity level equal or greater than the ::OrtLogger's logging severity level
* are logged. Use OrtApi::Logger_GetLoggingSeverityLevel to get the ::OrtLogger's logging severity
* level.
*
* Can be used in custom operators to log messages with the logger retrieved via OrtApi::KernelInfo_GetLogger.
*
* \param[in] logger The ::OrtLogger instance.
* \param[in] log_severity_level The message's severity level.
* \param[in] message The message to log.
* \param[in] file_path The filepath of the file in which the message is logged. Usually the value of ORT_FILE.
* \param[in] line_number The file line number in which the message is logged. Usually the value of __LINE__.
* \param[in] func_name The name of the function in which the message is logged. Usually the value of __FUNCTION__.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.15
*/
Logger_LogMessage: #type (logger: *OrtLogger, log_severity_level: OrtLoggingLevel, message: *u8, file_path: *u16, line_number: s32, func_name: *u8) -> OrtStatusPtr #c_call;
/** \brief Get the logging severity level of the ::OrtLogger.
*
* Can be used in a custom operator to get the logging severity level of the ::OrtLogger associated with
* the ::OrtKernelInfo.
*
* \param[in] logger The ::OrtLogger instance.
* \param[out] out Pointer to variable assigned with the logging severity level on success.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.15
*/
Logger_GetLoggingSeverityLevel: #type (logger: *OrtLogger, out: *OrtLoggingLevel) -> OrtStatusPtr #c_call;
/** \brief Get a ::OrtValue tensor stored as a constant initializer in the graph node.
*
* Used in the CreateKernel callback of an OrtCustomOp to get a tensor value.
*
* \param[in] info ::OrtKernelInfo instance.
* \param[in] index The node index.
* \param[out] is_constant Is it a constant node input or not.
* \param[out] out The OrtValue tensor value.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
KernelInfoGetConstantInput_tensor: #type (info: *OrtKernelInfo, index: u64, _is_constant: *s32, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Get Optional Type information from an ::OrtTypeInfo
*
* This augments ::OrtTypeInfo to return an ::OrtOptionalTypeInfo when the type is optional.
* The OrtOptionalTypeInfo also has a nested ::OrtTypeInfo that describes the type of the optional value.
* ::OrtOptionalTypeInfo type can only appear within model metadata to describe inputs/outputs.
* The actual OrtValues that are supplied in place of optional type inputs should contain
* specific type that is described by ::OrtOptionalTypeInfo.
*
* So the picture: ::OrtTypeInfo -> ::OrtOptionalTypeInfo -> ::OrtTypeInfo (describes the type that can be supplied
* in place of the optional type when creating the actual ::OrtValue).
*
* \param[in] type_info
* \param[out] out A pointer to the ::OrtOptionalTypeInfo. Do not free this value,
* it is owned by OrtTypeInfo instance. When the type_info does not represent
* optional type, nullptr is returned in out.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
CastTypeInfoToOptionalTypeInfo: #type (_type_info: *OrtTypeInfo, out: **OrtOptionalTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get OrtTypeInfo for the allowed contained type from an ::OrtOptionalTypeInfo.
*
* This augments ::OrtOptionalTypeInfo to return an ::OrtTypeInfo for the contained type.
* The OrtOptionalTypeInfo has a nested ::OrtTypeInfo that describes the type of the optional value.
* ::OrtOptionalTypeInfo type can only appear within model metadata to describe inputs/outputs.
* The actual OrtValues that are supplied in place of optional type inputs should contain
* specific type that is described by the returned ::OrtTypeInfo.
*
* \param[in] optional_type_info
* \param[out] out A copy of ::OrtTypeInfo for what the optional value could be.
* The user must free this value with ReleaseTypeInfo.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
GetOptionalContainedTypeInfo: #type (optional_type_info: *OrtOptionalTypeInfo, out: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Set a single string in a string tensor
* Do not zero terminate the string data.
*
* \param[in] value A string tensor
* \param[in] index - flat index of the element
* \param[in] length_in_bytes length of the buffer in utf-8 bytes (without the null terminator)
* \param[inout] buffer - address of return value
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*/
GetResizedStringTensorElementBuffer: #type (value: *OrtValue, index: u64, length_in_bytes: u64, buffer: **u8) -> OrtStatusPtr #c_call;
/** \brief Get Allocator from KernelContext for a specific memoryInfo. Please use C API ReleaseAllocator to release out object
*
* \param[in] context OrtKernelContext instance
* \param[in] mem_info OrtMemoryInfo instance
* \param[out] out A pointer to OrtAllocator. Must be released with OrtApi::ReleaseAllocator.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.15.
*/
KernelContext_GetAllocator: #type (_context: *OrtKernelContext, mem_info: *OrtMemoryInfo, out: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Returns a null terminated string of the build info including git info and cxx flags
*
* \return UTF-8 encoded version string. Do not deallocate the returned buffer.
*
* \since Version 1.15.
*/
GetBuildInfoString: #type () -> *u8 #c_call;
/** \brief Create an OrtROCMProviderOptions
*
* \param[out] out Newly created ::OrtROCMProviderOptions. Must be released with OrtApi::ReleaseROCMProviderOptions
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.16.
*/
CreateROCMProviderOptions: #type (out: **OrtROCMProviderOptions) -> OrtStatusPtr #c_call;
/** \brief Set options in a ROCm Execution Provider.
*
* Please refer to https://onnxruntime.ai/docs/execution-providers/ROCm-ExecutionProvider.html
* to know the available keys and values. Key should be in null terminated string format of the member of
* ::OrtROCMProviderOptions and value should be its related range.
*
* For example, key="device_id" and value="0"
*
* \param[in] rocm_options
* \param[in] provider_options_keys Array of UTF-8 null-terminated string for provider options keys
* \param[in] provider_options_values Array of UTF-8 null-terminated string for provider options values
* \param[in] num_keys Number of elements in the `provider_option_keys` and `provider_options_values` arrays
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.16.
*/
UpdateROCMProviderOptions: #type (rocm_options: *OrtROCMProviderOptions, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/**
* Get serialized ROCm provider options string.
*
* For example, "device_id=0;arena_extend_strategy=0;......"
*
* \param rocm_options - OrtROCMProviderOptions instance
* \param allocator - a ptr to an instance of OrtAllocator obtained with CreateAllocator() or GetAllocatorWithDefaultOptions()
* the specified allocator will be used to allocate continuous buffers for output strings and lengths.
* \param ptr - is a UTF-8 null terminated string allocated using 'allocator'. The caller is responsible for using the same allocator to free it.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.16.
*/
GetROCMProviderOptionsAsString: #type (rocm_options: *OrtROCMProviderOptions, allocator: *OrtAllocator, ptr: **u8) -> OrtStatusPtr #c_call;
/** \brief Release an ::OrtROCMProviderOptions
*
* \note This is an exception in the naming convention of other Release* functions, as the name of the method does not have the V2 suffix, but the type does
*
* \since Version 1.16.
*/
ReleaseROCMProviderOptions: #type (input: *OrtROCMProviderOptions) -> void #c_call;
/** \brief Create an allocator with specific type and register it with the ::OrtEnv
* This API enhance CreateAndRegisterAllocator that it can create an allocator with specific type, not just CPU allocator
* Enables sharing the allocator between multiple sessions that use the same env instance.
* Lifetime of the created allocator will be valid for the duration of the environment.
* Returns an error if an allocator with the same ::OrtMemoryInfo is already registered.
* \param[in] env OrtEnv instance
* \param[in] provider_type ExecutionProvider type
* \param[in] mem_info OrtMemoryInfo instance
* \param[in] arena_cfg Arena configuration
* \param[in] provider_options_keys key of the provider options map
* \param[in] provider_options_values value of the provider options map
* \param[in] num_keys Length of the provider options map
*/
CreateAndRegisterAllocatorV2: #type (env: *OrtEnv, provider_type: *u8, mem_info: *OrtMemoryInfo, arena_cfg: *OrtArenaCfg, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/** \brief Run the model asynchronously in a thread owned by intra op thread pool
*
* \param[in] session
* \param[in] run_options If nullptr, will use a default ::OrtRunOptions
* \param[in] input_names Array of null terminated UTF8 encoded strings of the input names
* \param[in] input Array of ::OrtValue%s of the input values
* \param[in] input_len Number of elements in the input_names and inputs arrays
* \param[in] output_names Array of null terminated UTF8 encoded strings of the output names
* \param[in] output_names_len Number of elements in the output_names and outputs array
* \param[out] output OrtValue* array of size output_names_len.
* On calling RunAsync, output[i] could either be a null or a pointer to a preallocated OrtValue.
* Later, the output array will be passed to run_async_callback with all null(s) filled with valid
* OrtValue pointer(s) allocated by onnxruntime.
* NOTE: it is customer's duty to finally release the output array and each of its member,
* regardless of whether the member (OrtValue*) is allocated by onnxruntime or preallocated by the customer.
* \param[in] run_async_callback Callback function on model run completion
* \param[in] user_data User data that pass back to run_async_callback
*/
RunAsync: #type (session: *OrtSession, run_options: *OrtRunOptions, input_names: **u8, input: **OrtValue, input_len: u64, output_names: **u8, output_names_len: u64, output: **OrtValue, run_async_callback: RunAsyncCallbackFn, user_data: *void) -> OrtStatusPtr #c_call;
/**
* Update TensorRT EP provider option where its data type is pointer, for example 'user_compute_stream'.
* If the data type of the provider option can be represented by string please use UpdateTensorRTProviderOptions.
*
* Note: It's caller's responsibility to properly manage the lifetime of the instance pointed by this pointer.
*
* \param tensorrt_options - OrtTensorRTProviderOptionsV2 instance
* \param key - Name of the provider option
* \param value - A pointer to the instance that will be assigned to this provider option
*
* \since Version 1.16.
*/
UpdateTensorRTProviderOptionsWithValue: #type (tensorrt_options: *OrtTensorRTProviderOptionsV2, key: *u8, value: *void) -> OrtStatusPtr #c_call;
/**
* Get TensorRT EP provider option where its data type is pointer.
* If the data type of the provider option can be represented by string please use GetTensorRTProviderOptionsAsString.
*
* \param tensorrt_options - OrtTensorRTProviderOptionsV2 instance
* \param key - Name of the provider option
* \param ptr - A pointer to the instance that is kept by the provider option
*
* \since Version 1.16.
*/
GetTensorRTProviderOptionsByName: #type (tensorrt_options: *OrtTensorRTProviderOptionsV2, key: *u8, ptr: **void) -> OrtStatusPtr #c_call;
/**
* Update CUDA EP provider option where its data type is pointer, for example 'user_compute_stream'.
* If the data type of the provider option can be represented by string please use UpdateCUDAProviderOptions.
*
* Note: It's caller's responsibility to properly manage the lifetime of the instance pointed by this pointer.
*
* \param cuda_options - OrtCUDAProviderOptionsV2 instance
* \param key - Name of the provider option
* \param value - A pointer to the instance that will be assigned to this provider option
*
* \since Version 1.16.
*/
UpdateCUDAProviderOptionsWithValue: #type (cuda_options: *OrtCUDAProviderOptionsV2, key: *u8, value: *void) -> OrtStatusPtr #c_call;
/**
* Get CUDA EP provider option where its data type is pointer.
* If the data type of the provider option can be represented by string please use GetCUDAProviderOptionsAsString.
*
* \param cuda_options - OrtCUDAProviderOptionsV2 instance
* \param key - Name of the provider option
* \param ptr - A pointer to the instance that is kept by the provider option
*
* \since Version 1.16.
*/
GetCUDAProviderOptionsByName: #type (cuda_options: *OrtCUDAProviderOptionsV2, key: *u8, ptr: **void) -> OrtStatusPtr #c_call;
/**
* Get a EP resource.
* E.g. a cuda stream or a cublas handle
*
* \param context - Kernel context
* \param resource_version - Version of the resource
* \param resource_id - Type of resource
* \param resource - A pointer to returned resource
*
* \since Version 1.16.
*/
KernelContext_GetResource: #type (_context: *OrtKernelContext, resource_version: s32, resource_id: s32, resource: **void) -> OrtStatusPtr #c_call;
/** \brief Set user logging function
*
* By default the logger created by the CreateEnv* functions is used to create the session logger as well.
* This function allows a user to override this default session logger with a logger of their own choosing. This way
* the user doesn't have to create a separate environment with a custom logger. This addresses the problem when
* the user already created an env but now wants to use a different logger for a specific session (for debugging or
* other reasons).
*
* \param[in] options
* \param[in] user_logging_function A pointer to a logging function.
* \param[in] user_logging_param A pointer to arbitrary data passed as the ::OrtLoggingFunction `param` parameter to
* `user_logging_function`. This parameter is optional.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.17.
*/
SetUserLoggingFunction: #type (options: *OrtSessionOptions, user_logging_function: OrtLoggingFunction, user_logging_param: *void) -> OrtStatusPtr #c_call;
/**
* Get number of input from OrtShapeInferContext
*
* \param[in] context
* \param[out] out The number of inputs
*
* \since Version 1.17.
*/
ShapeInferContext_GetInputCount: #type (_context: *OrtShapeInferContext, out: *u64) -> OrtStatusPtr #c_call;
/**
* Get type and shape info of an input
*
* \param[in] context
* \param[in] index The index of the input
* \param[out] info Type shape info of the input
*
* \since Version 1.17.
*/
ShapeInferContext_GetInputTypeShape: #type (_context: *OrtShapeInferContext, index: u64, info: **OrtTensorTypeAndShapeInfo) -> OrtStatusPtr #c_call;
/**
* Get attribute from OrtShapeInferContext. Note that OrtShapeInferContext is a per-node context, one could only read attribute from current node.
*
* \param[in] context
* \param[in] attr_name Name of the attribute
* \param[out] attr Handle of the attribute fetched
*
* \since Version 1.17.
*/
ShapeInferContext_GetAttribute: #type (_context: *OrtShapeInferContext, attr_name: *u8, attr: **OrtOpAttr) -> OrtStatusPtr #c_call;
/**
* Set type and shape info of an output
*
* \param[in] context
* \param[in] index The index of the output
* \param[out] info Type shape info of the output
*
* \since Version 1.17.
*/
ShapeInferContext_SetOutputTypeShape: #type (_context: *OrtShapeInferContext, index: u64, info: *OrtTensorTypeAndShapeInfo) -> OrtStatusPtr #c_call;
/**
* Set symbolic shape to type shape info
*
* \param[in] info Type shape info
* \param[in] dim_params Symbolic strings
* \param[in] dim_params_length Number of strings
*
* \since Version 1.17.
*/
SetSymbolicDimensions: #type (info: *OrtTensorTypeAndShapeInfo, dim_params: **u8, dim_params_length: u64) -> OrtStatusPtr #c_call;
/**
* Read contents of an attribute to data
*
* \param[in] op_attr
* \param[in] type Attribute type
* \param[out] data Memory address to save raw content of the attribute
* \param[in] len Number of bytes allowed to store in data
* \param[out] out Number of bytes required to save the data when the call failed, or the real number of bytes saved to data on success
*
* \note Does not support reading graph attributes. Refer to Node_GetSubgraphs.
*
* \since Version 1.17.
*/
ReadOpAttr: #type (op_attr: *OrtOpAttr, type: OrtOpAttrType, data: *void, len: u64, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Set whether to use deterministic compute.
*
* Default is false. If set to true, this will enable deterministic compute for GPU kernels where possible.
* Note that this most likely will have a performance cost.
*
* \param[in] options
* \param[in] value
*
* \since Version 1.17.
*/
SetDeterministicCompute: #type (options: *OrtSessionOptions, value: bool) -> OrtStatusPtr #c_call;
/**
* Run fn in parallel
*
* \param[in] context
* \param[in] fn Function accepting usr_data and an integer as iterator
* \param[in] total The number of times fn is to be invoked
* \param[in] num_batch Number of batches by which the "total" is to be divided in maximum. When zero, there is no limit
* \param[in] usr_data User data to be passed back to fn
*
* \since Version 1.17.
*/
KernelContext_ParallelFor: #type (_context: *OrtKernelContext, fn: #type (unknown0: *void, unknown1: u64) -> void #c_call, total: u64, num_batch: u64, usr_data: *void) -> OrtStatusPtr #c_call;
/** \brief Append OpenVINO execution provider to the session options
*
* If OpenVINO is not available (due to a non OpenVINO enabled build, or if OpenVINO is not installed on the system), this function will fail.
*
* \param[in] options
* \param[in] provider_options_keys
* \param[in] provider_options_values
* \param[in] num_keys
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.17.
*/
SessionOptionsAppendExecutionProvider_OpenVINO_V2: #type (options: *OrtSessionOptions, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/** \brief Append VitisAI provider to session options
*
* If VitisAI is not available (due to a non VitisAI enabled build, or if VitisAI is not installed on the system), this function will return failure.
*
* \param[in] options
* \param[in] provider_options_keys
* \param[in] provider_options_values
* \param[in] num_keys
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.18.
*/
SessionOptionsAppendExecutionProvider_VitisAI: #type (options: *OrtSessionOptions, provider_options_keys: **u8, provider_options_values: **u8, num_keys: u64) -> OrtStatusPtr #c_call;
/** \brief Get scratch buffer from the corresponding allocator under the specific OrtMemoryInfo object.
* NOTE: callers are responsible to release this scratch buffer from the corresponding allocator
* \param[in] context OrtKernelContext instance
* \param[in] mem_info OrtMemoryInfo instance
* \param[in] count_or_bytes How many bytes is this scratch buffer
* \param[out] out A pointer to the scratch buffer
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.18.
*/
KernelContext_GetScratchBuffer: #type (_context: *OrtKernelContext, mem_info: *OrtMemoryInfo, count_or_bytes: u64, out: **void) -> OrtStatusPtr #c_call;
/** \brief Get allocator from KernelInfo for a specific memory type. Please use C API ReleaseAllocator to release out object
*
* \param[in] info OrtKernelInfo instance
* \param[in] mem_type OrtMemType object
* \param[out] out A pointer to OrtAllocator
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.18.
*/
KernelInfoGetAllocator: #type (info: *OrtKernelInfo, mem_type: OrtMemType, out: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Replace initialized Tensors with external data with the provided files in memory
*
* The function will find the initialized TensorProtos with external data in the graph with the provided
* external file names and the file content in memory. The API gets the external file name, offset, data length
* from TensorProto, and locate the tensor data from the file in memory buffer.
* It creates a Tensor to replace the existing Tensor in graph. The replacement
* will occur before any of the optimizations take place. The data will be copied into the graph
* since TensorProto can't refer to the user provided buffers.
*
* \param[in] options
* \param[in] external_initializer_file_names Array of null terminated UTF-8 encoded strings of the file names
* which holds the external initializers.
* \param[in] external_initializer_file_buffer_array Array of pointers to the buffer of the file content.
* The buffer can be freed after session creation.
* \param[in] external_initializer_file_lengths Array of size_t to indicate the length of file content
* \param[in] num_external_initializer_files Number of external files
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.18.
*/
AddExternalInitializersFromFilesInMemory: #type (options: *OrtSessionOptions, external_initializer_file_names: **u16, external_initializer_file_buffer_array: **u8, external_initializer_file_lengths: *u64, num_external_initializer_files: u64) -> OrtStatusPtr #c_call;
/** \brief Create an OrtLoraAdapter
*
* The function attempts to locate file specified by adapter_file_path, read it and create an OrtLoraAdapter
* instance. The adapter_file_path should be a valid path to a file that contains a valid Lora Adapter
* format. The function attempts to validate the format at load time. The file will always be memory mapped, unless
* the platform does not support memory mapping, in which case the file will be read into memory.
*
* \param[in] adapter_file_path adapter file path.
* \param[in] allocator optional pointer to a non-CPU device allocator. If specified and a data transfer implementation
* is available during adapter creation, the data is copied to the device before Run() is invoked.
* Otherwise, the data stays on CPU and is copied to the device if required by the model at inference time.
* \param[out] out A pointer to a newly created OrtLoraAdapter instance. Must be released with
* OrtApi::ReleaseLoraAdapter.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.20.
*/
CreateLoraAdapter: #type (adapter_file_path: *u16, allocator: *OrtAllocator, out: **OrtLoraAdapter) -> OrtStatusPtr #c_call;
/** \brief Create an OrtLoraAdapter
*
* The function copies the bytes from the array and creates an OrtLoraAdapter instance.
*
*
* \param[in] bytes pointer to a valid Lora Adapter format buffer.
* \param[in] num_bytes length of bytes buffer.
* \param[in] allocator optional pointer to a non-CPU device allocator. If specified and a data transfer implementation
* is available during adapter creation, the data is copied to the device before Run() is invoked.
* Otherwise, the data stays on CPU and is copied to the device if required by the model at inference time.
* \param[out] out A pointer to a newly created OrtLoraAdapter instance. Must be released with
* OrtApi::ReleaseLoraAdapter.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.20.
*/
CreateLoraAdapterFromArray: #type (bytes: *void, num_bytes: u64, allocator: *OrtAllocator, out: **OrtLoraAdapter) -> OrtStatusPtr #c_call;
/** \brief Release an ::OrtLoraAdapter obtained from OrtApi::CreateLoraAdapter
*/
ReleaseLoraAdapter: #type (input: *OrtLoraAdapter) -> void #c_call;
/** \brief Add the Lora Adapter to the list of active adapters.
*
* The function adds the Lora Adapter to the list of active adapters. The Lora Adapter must be created with
* OrtApi::CreateLoraAdapter or FromArray. The Lora Adapter will be used by the session to run the model.
* The instance of the OrtRunOptions can then be used to customize the Run() calls.
* More than one OrtLoraAdapter can be active at the same time. Lora Parameters that belong to different
* Lora adapters that will be active at the same time must not overlap.
* This setting does not affect RunWithBinding.
*
* \param[in] options OrtRunOptions instance
* \param[in] adapter OrtLoraAdapter instance
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.20.
*/
RunOptionsAddActiveLoraAdapter: #type (options: *OrtRunOptions, adapter: *OrtLoraAdapter) -> OrtStatusPtr #c_call;
/** \brief Set DynamicOptions for EPs (Execution Providers)
*
* Valid options can be found in `include\onnxruntime\core\session\onnxruntime_session_options_config_keys.h`
* Look for `kOrtEpDynamicOptions`
*
* \param[in] sess OrtSession
* \param[in] keys Array of null terminated UTF8 encoded strings of EP dynamic option keys
* \param[in] values Array of null terminated UTF8 encoded string of EP dynamic option values
* \param[in] kv_len Number of elements in the keys and values arrays
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.20.
*/
SetEpDynamicOptions: #type (sess: *OrtSession, keys: **u8, values: **u8, kv_len: u64) -> OrtStatusPtr #c_call;
/** \brief Release an OrtValueInfo instance if it was not added to an OrtGraph.
* \since Version 1.22.
*/
ReleaseValueInfo: #type (input: *OrtValueInfo) -> void #c_call;
/** \brief Release an OrtNode if it was not added to an OrtGraph.
* \since Version 1.22.
*/
ReleaseNode: #type (input: *OrtNode) -> void #c_call;
/** \brief Release an OrtGraph.
* \since Version 1.22.
*/
ReleaseGraph: #type (input: *OrtGraph) -> void #c_call;
/** \brief Release an OrtModel.
* \since Version 1.22.
*/
ReleaseModel: #type (input: *OrtModel) -> void #c_call;
/** \brief Get the value name from an OrtValueInfo instance.
* \param[in] value_info The OrtValueInfo instance.
* \param[out] name The name of the OrtValueInfo
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.22.
*/
GetValueInfoName: #type (value_info: *OrtValueInfo, name: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the type information from an OrtValueInfo instance.
* \param[in] value_info The OrtValueInfo instance.
* \param[out] type_info The type info of the OrtValueInfo
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.22.
*/
GetValueInfoTypeInfo: #type (value_info: *OrtValueInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Get the Model Editor API instance
*
* Get the Model Editor API instance to create a new model or augment an existing model.
*
* \return Model Editor API struct
*
* \since Version 1.22.
*/
GetModelEditorApi: #type () -> *OrtModelEditorApi #c_call;
/** \brief Create an OrtValue for a Tensor that uses pre-existing memory.
*
* ORT will take ownership of the memory and free it using the provided deleter when no longer in use.
*
* \param[in] deleter OrtAllocator instance that will be used to free the memory.
* Only the OrtAllocator:Info and OrtAllocator::Release functions are required.
* The OrtMemoryInfo returned by OrtAllocator::Info must match the location of p_data.
* \param[in] p_data Pointer to the memory that will be used by the Tensor. ORT will take ownership of the memory.
* \param[in] p_data_len Length of the memory in bytes.
* \param[in] shape Dimensions of the Tensor. All values should be > 0.
* \param[in] shape_len Number of dimensions in the shape array.
* \param[in] type Data type of the Tensor.
* \param[out] out Newly created ::OrtValue. Must be freed with OrtApi::ReleaseValue
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateTensorWithDataAndDeleterAsOrtValue: #type (deleter: *OrtAllocator, p_data: *void, p_data_len: u64, shape: *s64, shape_len: u64, type: ONNXTensorElementDataType, out: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief sets load cancellation flag to abort session loading process.
*
* \param[in] options instance that was passed to the session at creation time.
* \param[in] cancel setting this to true after model loading process was initiated will
* attempt to cancel the loading process. If cancellation is successful, CreateSession()
* CreateSessionFromArray() or any other session creation API that take session options as an
* argument will return an OrtStatus indicating that session loading was canceled at user request,
* error code ORT_MODEL_LOAD_CANCELED.
* The APIs above would not return any valid Session instance. This is the best case effort and the result
* is not guaranteed. The session may have already been created and initialized
* before the cancellation request was issued.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
SessionOptionsSetLoadCancellationFlag: #type (options: *OrtSessionOptions, cancel: bool) -> OrtStatusPtr #c_call;
/** \brief Get the Compile API instance.
*
* Get the Compile API instance to compile ONNX models. Execution providers that support compilation fuse a subgraph
* into an EPContext node that wraps a provider-specific binary representation of the subgraph.
* For more details about the EPContext design, refer to:
* \htmlonly
* <a href="https://onnxruntime.ai/docs/execution-providers/EP-Context-Design.html">EPContext design document.</a>
* \endhtmlonly
*
* \return Compile API struct instance.
*
* \since Version 1.22.
*/
GetCompileApi: #type () -> *OrtCompileApi #c_call;
/** \brief Create an OrtKeyValuePairs instance.
*
* \param[out] out A pointer to a newly created OrtKeyValuePairs instance.
*
* \note Must be released by calling ReleaseKeyValuePairs.
*
* \since Version 1.22.
*/
CreateKeyValuePairs: #type (out: **OrtKeyValuePairs) -> void #c_call;
/** \brief Add a key-value pair to the OrtKeyValuePairs instance.
*
* If a pair with the same key already exists, it is overwritten.
*
* \param[in] kvps OrtKeyValuePairs instance.
* \param[in] key Key to be added.
* \param[in] value Value to be added.
*
* \note The `key` and `value` are copied internally.
*
* \since Version 1.22.
*/
AddKeyValuePair: #type (kvps: *OrtKeyValuePairs, key: *u8, value: *u8) -> void #c_call;
/** \brief Get the value associated with a key in the OrtKeyValuePairs instance.
*
* \param[in] kvps OrtKeyValuePairs instance.
* \param[in] key Key to be searched.
*
* \return The value associated with the key, or nullptr if the key does not exist.
*
* \since Version 1.22.
*/
GetKeyValue: #type (kvps: *OrtKeyValuePairs, key: *u8) -> *u8 #c_call;
/** \brief Get all the key-value pairs from the OrtKeyValuePairs instance.
*
* \param[in] kvps OrtKeyValuePairs instance.
* \param[out] keys Array of keys from `kvps`.
* \param[out] values Array of values from `kvps`.
* \param[out] num_entries Number of entries in `keys` and `values`.
*
* \since Version 1.22.
*/
GetKeyValuePairs: #type (kvps: *OrtKeyValuePairs, keys: ***u8, values: ***u8, num_entries: *u64) -> void #c_call;
/** \brief Remove a key-value pair from the OrtKeyValuePairs instance.
*
* \param[in] kvps OrtKeyValuePairs instance.
* \param[in] key Key to be removed. No error if not found.
*
* \since Version 1.22.
*/
RemoveKeyValuePair: #type (kvps: *OrtKeyValuePairs, key: *u8) -> void #c_call;
/** \brief Release an OrtKeyValuePairs instance.
*
* \param[in] input OrtKeyValuePairs instance to be released.
*
* \since Version 1.22.
*/
ReleaseKeyValuePairs: #type (input: *OrtKeyValuePairs) -> void #c_call;
/** \brief Register an execution provider library with ORT.
*
* The library must export 'CreateEpFactories' and 'ReleaseEpFactory' functions.
* See OrtEpApi for more details.
*
* \param[in] env The OrtEnv instance to register the library in.
* \param[in] registration_name The name to register the execution provider library under.
* \param[in] path The path to the execution provider library.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
RegisterExecutionProviderLibrary: #type (env: *OrtEnv, registration_name: *u8, path: *u16) -> OrtStatusPtr #c_call;
/** \brief Unregister an execution provider library with ORT.
*
* ORT will call ReleaseEpFactory for all factories created by the library, and unload the library.
*
* You <b>MUST</b> ensure there are no Session instances using execution providers created by the library
* before calling this function.
*
* \param[in] env The OrtEnv instance to unregister the library from.
* \param[in] registration_name The name the execution provider library was registered under.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
UnregisterExecutionProviderLibrary: #type (env: *OrtEnv, registration_name: *u8) -> OrtStatusPtr #c_call;
/** \brief Get the list of available OrtEpDevice instances.
*
* Each OrtEpDevice instance contains details of the execution provider and the device it will use.
*
* \param[in] env The OrtEnv instance to query.
* \param[out] ep_devices The OrtEpDevice instances that the execution provider will use.
* \param[out] num_ep_devices The number of OrtEpDevice instances returned.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
GetEpDevices: #type (env: *OrtEnv, ep_devices: ***OrtEpDevice, num_ep_devices: *u64) -> OrtStatusPtr #c_call;
/** \brief Append the execution provider that is responsible for the selected OrtEpDevice instances
* to the session options.
*
* \param[in] session_options Session options to add execution provider to.
* \param[in] env Environment that execution providers were registered with.
* \param[in] ep_devices One or more OrtEpDevice instances to create an execution provider for.
* Obtain from GetEpDevices. All OrtEpDevice instances must be from the same execution
* provider. It is only necessary to provide multiple OrtEpDevices if you want to use the
* same execution provider for multiple devices.
* e.g. the EP is capable of running on GPU and NPU.
* \param[in] num_ep_devices Number of OrtEpDevice instances.
* \param[in] ep_option_keys Optional keys to configure the execution provider.
* \param[in] ep_option_vals Optional values to configure the execution provider.
* \param[in] num_ep_options Number of execution provide options to add.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
SessionOptionsAppendExecutionProvider_V2: #type (session_options: *OrtSessionOptions, env: *OrtEnv, ep_devices: **OrtEpDevice, num_ep_devices: u64, ep_option_keys: **u8, ep_option_vals: **u8, num_ep_options: u64) -> OrtStatusPtr #c_call;
/** \brief Set the execution provider selection policy for the session.
*
* Allows users to specify a device selection policy for automatic execution provider (EP) selection.
* If custom selection is required please use SessionOptionsSetEpSelectionPolicyDelegate instead.
*
* \param[in] session_options The OrtSessionOptions instance.
* \param[in] policy The device selection policy to use (see OrtExecutionProviderDevicePolicy).
*
* \since Version 1.22
*/
SessionOptionsSetEpSelectionPolicy: #type (session_options: *OrtSessionOptions, policy: OrtExecutionProviderDevicePolicy) -> OrtStatusPtr #c_call;
/** \brief Set the execution provider selection policy delegate for the session.
*
* Allows users to provide a custom device selection policy for automatic execution provider (EP) selection.
*
* \param[in] session_options The OrtSessionOptions instance.
* \param[in] delegate Delegate callback for custom selection.
* \param[in] delegate_state Optional state that will be passed to the delegate callback. nullptr if not required.
*
* \since Version 1.22
*/
SessionOptionsSetEpSelectionPolicyDelegate: #type (session_options: *OrtSessionOptions, delegate: EpSelectionDelegate, delegate_state: *void) -> OrtStatusPtr #c_call;
/** \brief Get the hardware device type.
*
* \param[in] device The OrtHardwareDevice instance to query.
* \return The hardware device type.
*
* \since Version 1.22.
*/
HardwareDevice_Type: #type (device: *OrtHardwareDevice) -> OrtHardwareDeviceType #c_call;
/** \brief Get the hardware device's vendor identifier.
*
* \param[in] device The OrtHardwareDevice instance to query.
* \return The hardware device vendor identifier.
*
* \since Version 1.22.
*/
HardwareDevice_VendorId: #type (device: *OrtHardwareDevice) -> u32 #c_call;
/** \brief Get the hardware device's vendor name.
*
* \param[in] device The OrtHardwareDevice instance to query.
* \return The hardware device's vendor name.
*
* \since Version 1.22.
*/
HardwareDevice_Vendor: #type (device: *OrtHardwareDevice) -> *u8 #c_call;
/** \brief Get the hardware device's unique identifier.
*
* \param[in] device The OrtHardwareDevice instance to query.
* \return The device id.
*
* \note This is not a unique identifier. It identifies the hardware type when combined with vendor id.
* \since Version 1.22.
*/
HardwareDevice_DeviceId: #type (device: *OrtHardwareDevice) -> u32 #c_call;
/** \brief Get hardware device metadata.
*
* \param[in] device The OrtHardwareDevice instance to query.
* \return An OrtKeyValuePairs instance containing the metadata for the device.
* Note: ORT owns the instance so the user must not call ReleaseKeyValuePairs with it.
*
* \since Version 1.22.
*/
HardwareDevice_Metadata: #type (device: *OrtHardwareDevice) -> *OrtKeyValuePairs #c_call;
/** \brief Get the execution provider name.
*
* \param[in] ep_device The OrtEpDevice instance to query.
* \return The execution provider name.
*
* \since Version 1.22.
*/
EpDevice_EpName: #type (ep_device: *OrtEpDevice) -> *u8 #c_call;
/** \brief Get the execution provider's vendor name.
*
* \param[in] ep_device The OrtEpDevice instance to query.
* \return The execution provider's vendor name.
*
* \since Version 1.22.
*/
EpDevice_EpVendor: #type (ep_device: *OrtEpDevice) -> *u8 #c_call;
/** \brief Get the metadata for the OrtEpDevice.
*
* \param[in] ep_device The OrtEpDevice instance to query.
* \return An OrtKeyValuePairs instance containing the metadata for the device.
*
* \since Version 1.22.
*/
EpDevice_EpMetadata: #type (ep_device: *OrtEpDevice) -> *OrtKeyValuePairs #c_call;
/** \brief Get the execution provider options for the OrtEpDevice.
*
* \param[in] ep_device The OrtEpDevice instance to query.
* \return An OrtKeyValuePairs instance containing the execution provider options for the device.
*
* \since Version 1.22.
*/
EpDevice_EpOptions: #type (ep_device: *OrtEpDevice) -> *OrtKeyValuePairs #c_call;
/** \brief Get the OrtHardwareDevice instance for the OrtEpDevice.
*
* \param[in] ep_device The OrtEpDevice instance to query.
* \return The OrtHardwareDevice instance for the device.
*
* \since Version 1.22.
*/
EpDevice_Device: #type (ep_device: *OrtEpDevice) -> *OrtHardwareDevice #c_call;
/** \brief Get the OrtEpApi instance for implementing an execution provider.
*
* \since Version 1.22.
*/
GetEpApi: #type () -> *OrtEpApi #c_call;
/** \brief Compute total size in bytes of the tensor data contained in an OrtValue.
*
* Returns the total number of bytes used to store the tensor data. For numeric tensors of a
* type that occupies at least one byte per element, this is sizeof(element_type) *
* total_element_count. For packed sub-byte types (e.g. int4/uint4, which store multiple
* elements per byte) it is the actual packed storage size, which is smaller than
* sizeof(element_type) * total_element_count. Use this value (not the element count) when
* copying or bounds-checking the raw tensor buffer. OrtValues that are not tensors or that are
* tensors that contain strings will cause an error to be returned.
*
* \param[in] ort_value OrtValue instance containing a tensor
* \param[out] size The total size of the tensor data in bytes
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
GetTensorSizeInBytes: #type (ort_value: *OrtValue, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Calls OrtAllocator::GetStats function
*
* Return a pointer to the OrtKeyValuePairs structure that contains the statistics of the allocator
* and the user should call OrtApi::ReleaseKeyValuePairs.
*
* NOTE: If the allocator does not implement this function, the OrtKeyValuePairs instance will be empty.
*
* \param[in] ort_allocator The allocator to get stats from
* \param[out] out A pointer to the OrtKeyValuePairs instance that contains the stats
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
AllocatorGetStats: #type (ort_allocator: *OrtAllocator, out: **OrtKeyValuePairs) -> OrtStatusPtr #c_call;
/** \brief Create an ::OrtMemoryInfo
*
* \param[in] name Arbitrary name.
* \param[in] device_type Device type.
* \param[in] vendor_id PCI Vendor ID. Use 0 for a generic allocator (e.g. WebGPU).
* \param[in] device_id Device ID if there are multiple devices of the same type. e.g. 2 GPU devices.
* \param[in] mem_type Memory type. Use OrtDeviceMemoryType_DEFAULT for device memory, and
* OrtDeviceMemoryType_HOST_ACCESSIBLE (if applicable) for memory used to transfer between the
* device and the CPU. Use the device_type and device_id of the GPU/NPU that the memory is also
* accessible to.
* \param[in] alignment Alignment of the memory if required. Pass 0 for default alignment.
* \param[in] allocator_type Allocator type. If OrtAllocatorType::OrtArenaAllocator, the ORT arena will be used.
* Caveat: Support for OrtArenaAllocator is currently limited to usage of internal ORT
* allocators via CreateAllocator/CreateAndRegisterAllocator/CreateAndRegisterAllocatorV2.
* \param[out] out Newly created ::OrtMemoryInfo. Must be freed with OrtApi::ReleaseMemoryInfo
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
CreateMemoryInfo_V2: #type (name: *u8, device_type: OrtMemoryInfoDeviceType, vendor_id: u32, device_id: s32, mem_type: OrtDeviceMemoryType, alignment: u64, allocator_type: OrtAllocatorType, out: **OrtMemoryInfo) -> OrtStatusPtr #c_call;
/** \brief Get the device memory type from ::OrtMemoryInfo
*
* \param[in] ptr The OrtMemoryInfo instance to query.
* \return The device memory type.
*
* \since Version 1.23
*/
MemoryInfoGetDeviceMemType: #type (ptr: *OrtMemoryInfo) -> OrtDeviceMemoryType #c_call;
/** \brief Get the vendor id from ::OrtMemoryInfo
*
* \param[in] ptr The OrtMemoryInfo instance to query.
* \return The vendor id.
*
* \since Version 1.23
*/
MemoryInfoGetVendorId: #type (ptr: *OrtMemoryInfo) -> u32 #c_call;
/** \brief Get the OrtNode that produces the value represented by the given OrtValueInfo.
* Optionally returns the associated output index.
*
* \param[in] value_info The OrtValueInfo instance.
* \param[out] producer_node Output parameter set to the OrtNode that produces the OrtValueInfo.
* \param[out] producer_output_index Optional output parameter set to the OrtNode instance's output index
* that produces the value. Ignored if set to NULL.
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.23.
*/
ValueInfo_GetValueProducer: #type (value_info: *OrtValueInfo, producer_node: **OrtNode, producer_output_index: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the number of consumers of a value as a node input.
*
* Only nodes are considered "consumers" by this function. To check if an OrtValueInfo is a graph output,
* call ValueInfo_IsGraphOutput().
*
* A single OrtNode may use a single value for more than one input (e.g., Mul(x, x)), so the returned
* `num_consumers` may be larger than the number of unique OrtNode instances that consume the value.
*
* \param[in] value_info The OrtValueInfo instance.
* \param[out] num_consumers Output parameter set to the number of consumers of the value.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_GetValueNumConsumers: #type (value_info: *OrtValueInfo, num_consumers: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns information (OrtNode and input index) for all consumer nodes that use the value as an input.
*
* Only nodes are considered "consumers" by this function.
*
* Caller provides 2 pre-allocated arrays that will be filled with the OrtNode and input index values.
* Use ValueInfo_GetValueNumConsumers() to get the number of consumers of the value.
*
* An OrtNode instance may appear multiple times if it uses the given value more than once.
* Example: For a node MulNode(x, x) that consumes the value 'x' twice, the following is returned:
* - nodes: [MulNode, MulNode]
* - input_indices: [0, 1]
*
* \param[in] value_info The OrtValueInfo instance.
* \param[out] nodes Pre-allocated array of size `num_consumers` that is filled with OrtNode instances.
* \param[out] input_indices Pre-allocated array of `num_consumers` elements that is filled
* with input indices. Index is set to -1 for an "implicit" input to a consumer node
* that contains a subgraph (e.g., If, Loop) with nodes that use the value internally.
* \param[in] num_consumers The size of the `consumer_nodes` and `consumer_input_indices` arrays.
* Typical usage sets this to the value of ValueInfo_GetValueNumConsumers().
* An error status is returned if `num_consumers` is less than the number of actual
* consumers.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_GetValueConsumers: #type (value_info: *OrtValueInfo, nodes: **OrtNode, input_indices: *s64, num_consumers: u64) -> OrtStatusPtr #c_call;
/** \brief Get the underlying initializer value, as an OrtValue, from the given OrtValueInfo.
*
* Sets the output parameter to NULL if the given OrtValueInfo does not represent an initializer.
* Does not return an error status in this case.
*
* Supports initializers defined in an outer scope (i.e., a parent graph).
*
* Supports initializers stored in an external file. For external initializers, ORT memory maps
* the initializer data on the first call to this function. If caller needs custom memory mapping,
* use ValueInfo_GetExternalInitializerInfo to get the location of the initializer data.
*
* \param[in] value_info The OrtValueInfo instance.
* \param[out] initializer_value Output parameter set to the initializer value or NULL. Do not cache the OrtValue
* as it is released when the owning OrtGraph is released.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_GetInitializerValue: #type (value_info: *OrtValueInfo, initializer_value: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Get information about an external initializer (e.g., filepath, file offset, byte size).
*
* Sets the output parameter `info` to NULL if the given OrtValueInfo does not represent an initializer
* with external data. In this case, a NULL status (non-error) is returned.
*
* \param[in] value_info The OrtValueInfo instance.
* \param[out] info Output parameter set to an OrtExternalInitializerInfo instance that can be used to query
* file path, file offset, etc. ORT sets this to NULL if the OrtValueInfo does not represent
* an external initializer.
* Must release with ReleaseExternalInitializerInfo.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_GetExternalInitializerInfo: #type (value_info: *OrtValueInfo, info: **OrtExternalInitializerInfo) -> OrtStatusPtr #c_call;
/** \brief Returns a boolean indicating if the given value is a required graph input.
*
* For ONNX IR version < 4, all graph inputs without a matching initializer are required.
*
* For ONNX IR version >=4, a graph input with a matching initializer is an optional graph input
* with the initializer serving as the default value.
*
* \param[in] value_info The OrtValueInfo instance representing the graph value.
* \param[out] is_required_graph_input Output parameter set to true if the graph value is a required graph input.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_IsRequiredGraphInput: #type (value_info: *OrtValueInfo, is_required_graph_input: *bool) -> OrtStatusPtr #c_call;
/** \brief Returns a boolean indicating if the given value is an optional graph input.
*
* Optional graph inputs were introduced in ONNX IR version 4. For ONNX IR version >=4, a graph input with a
* matching initializer is an optional graph input with the initializer serving as the default value.
* The matching initializer is also known as a non-constant initializer.
*
* \param[in] value_info The OrtValueInfo instance representing the graph value.
* \param[out] is_optional_graph_input Output parameter set to true if the graph value is an optional graph input.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_IsOptionalGraphInput: #type (value_info: *OrtValueInfo, is_optional_graph_input: *bool) -> OrtStatusPtr #c_call;
/** \brief Returns a boolean indicating if the given value is a graph output.
*
* \param[in] value_info The OrtValueInfo instance representing the graph value.
* \param[out] is_graph_output Output parameter set to true if the graph value is a graph output.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_IsGraphOutput: #type (value_info: *OrtValueInfo, is_graph_output: *bool) -> OrtStatusPtr #c_call;
/** \brief Returns a boolean indicating if the given value is a constant initializer.
*
* For ONNX IR version < 4, all initializers are constant.
*
* For ONNX IR version >=4, an initializer that serves as the default value for a matching graph input is not a
* constant initializer.
*
* \param[in] value_info The OrtValueInfo instance representing the graph value.
* \param[out] is_constant_initializer Output parameter set to true if the graph value is a constant initializer.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_IsConstantInitializer: #type (value_info: *OrtValueInfo, is_constant_initializer: *bool) -> OrtStatusPtr #c_call;
/** \brief Returns a boolean indicating if the given value is defined in an outer scope.
*
* Certain operator types (e.g., If and Loop) contain nested subgraphs. This function enables
* determining whether a value is defined in a parent node's graph.
*
* \param[in] value_info The OrtValueInfo instance representing the graph value.
* \param[out] is_from_outer_scope Output parameter set to true if the value is defined in an outer
* scope (i.e., a parent graph).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValueInfo_IsFromOuterScope: #type (value_info: *OrtValueInfo, is_from_outer_scope: *bool) -> OrtStatusPtr #c_call;
/** \brief Returns a graph's name.
*
* \param[in] graph The OrtGraph instance.
* \param[out] graph_name Output parameter set to the graph's name.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetName: #type (graph: *OrtGraph, graph_name: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the filepath to the model from which an OrtGraph is constructed.
*
* \note The model's filepath is empty if the filepath is unknown, such as when the model is loaded from bytes
* via CreateSessionFromArray.
*
* \param[in] graph The OrtGraph instance.
* \param[out] model_path Output parameter set to the model's null-terminated filepath.
* Set to an empty path string if unknown.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetModelPath: #type (graph: *OrtGraph, model_path: **u16) -> OrtStatusPtr #c_call;
/** \brief Returns the ONNX IR version.
*
* \param[in] graph The OrtGraph instance.
* \param[out] onnx_ir_version Output parameter set to the ONNX IR version.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetOnnxIRVersion: #type (graph: *OrtGraph, onnx_ir_version: *s64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of operator sets that the graph's model uses.
*
* \note An operator set is uniquely identified by the (domain, opset_version) pair. All models must have at
* least one entry that specifies which entry of the ONNX operator set is used. The ONNX domain is represented by
* an empty string.
*
* \param[in] graph The OrtGraph instance.
* \param[out] num_operator_sets Output parameter set to the number of operator sets that the graph's model uses.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetNumOperatorSets: #type (graph: *OrtGraph, num_operator_sets: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns the operator sets that the graph's model uses.
*
* \note An operator set is uniquely identified by the (domain, opset_version) pair. All models must have at
* least one entry that specifies which entry of the ONNX operator set is used. The ONNX domain is represented by
* an empty string.
*
* \param[in] graph The OrtGraph instance.
* \param[out] domains Pre-allocated array of `num_operator_sets` elements that is filled with
* null-terminated domain names.
* \param[out] opset_versions Pre-allocated array of `num_operator_sets` elements that is filled with
* the opset version of the corresponding domain in the `domains` array.
* \param[in] num_operator_sets The size of the `domains` and `opset_versions` arrays.
* Typical usage sets this to the result of Graph_GetNumOperatorSets().
* An error status is returned if `num_operator_sets` is less than the actual number
* of operator sets.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetOperatorSets: #type (graph: *OrtGraph, domains: **u8, opset_versions: *s64, num_operator_sets: u64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of graph inputs.
*
* \note The count includes initializers that are included in the list of graph inputs.
*
* \param[in] graph The OrtGraph instance.
* \param[out] num_inputs Output parameter set to the number of graph inputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetNumInputs: #type (graph: *OrtGraph, num_inputs: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns the graph's inputs as OrtValueInfo instances.
*
* \note The result includes initializers that are included in the list of graph inputs.
*
* \param[in] graph The OrtGraph instance.
* \param[out] inputs Pre-allocated array of `num_inputs` elements that is filled with the graph's inputs.
* \param[in] num_inputs The size of the `inputs` array.
* Typical usage sets this to the result of Graph_GetNumInputs(). An error status is
* returned if `num_inputs` is less than the number of graph inputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetInputs: #type (graph: *OrtGraph, inputs: **OrtValueInfo, num_inputs: u64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of graph outputs.
*
* \param[in] graph The OrtGraph instance.
* \param[out] num_outputs Output parameter set to the number of graph outputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetNumOutputs: #type (graph: *OrtGraph, num_outputs: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns the graph's outputs as OrtValueInfo instances.
*
* \param[in] graph The OrtGraph instance.
* \param[out] outputs Pre-allocated array of `num_outputs` elements that is filled with the graph's outputs.
* \param[in] num_outputs The size of the `outputs` array.
* Typical usage sets this to the result of Graph_GetNumOutputs(). An error status is
* returned if `num_outputs` is less than the number of graph outputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetOutputs: #type (graph: *OrtGraph, outputs: **OrtValueInfo, num_outputs: u64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of graph initializers.
*
* Counts constant and non-constant initializers.
*
* \param[in] graph The OrtGraph instance.
* \param[out] num_initializers Output parameter set to the number of graph initializers.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetNumInitializers: #type (graph: *OrtGraph, num_initializers: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns the graph's initializers as OrtValueInfo instances.
*
* Includes constant and non-constant initializers.
*
* For ONNX IR version < 4, all initializers are constant.
*
* For ONNX IR version >= 4, an initializer with a name that matches a graph input is considered a
* non-constant initializer.
*
* Call ValueInfo_GetInitializerValue to get the initializer's data.
*
* \param[in] graph The OrtGraph instance.
* \param[out] initializers Pre-allocated array of `num_outputs` elements that is filled with the initializers.
* \param[in] num_initializers The size of the `initializers` array. Typical usage sets this to the
* result of Graph_GetNumInitializers(). An error status is returned if
* `num_initializers` is less than the number of graph initializers.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetInitializers: #type (graph: *OrtGraph, initializers: **OrtValueInfo, num_initializers: u64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of graph nodes.
*
* \param[in] graph The OrtGraph instance.
* \param[out] num_nodes Output parameter set to the number of graph nodes.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetNumNodes: #type (graph: *OrtGraph, num_nodes: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns the graph's nodes as OrtNode instances.
*
* The nodes are sorted using a stable topological ordering. Callers are responsible for maintaining their
* own node ordering if a different order is required.
*
* \param[in] graph The OrtGraph instance.
* \param[out] nodes Pre-allocated array of `num_nodes` elements that is filled with the graph's nodes.
* \param[in] num_nodes The size of the `nodes` array. Typical usage sets this to the
* result of Graph_GetNumNodes(). An error status is returned if
* `num_nodes` is less than the number of graph nodes.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetNodes: #type (graph: *OrtGraph, nodes: **OrtNode, num_nodes: u64) -> OrtStatusPtr #c_call;
/** \brief Get the parent node for the given graph, if any exists.
*
* Certain operator types (e.g., If and Loop) contain nested subgraphs. This function enables
* access to the parent node (e.g., the If and Loop node) from a nested subgraph.
*
* \param[in] graph The OrtGraph instance.
* \param[out] node Output parameter that is set to the graph's parent node.
* Set to NULL if a parent node does not exist (e.g., for a top-level graph).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetParentNode: #type (graph: *OrtGraph, node: **OrtNode) -> OrtStatusPtr #c_call;
/** \brief Returns an OrtGraph that contains a subset of nodes in the source OrtGraph.
*
* \note The lifetime of "dst_graph" is tied to that of "src_graph", as they both internally reference
* the same underlying graph. "dst_graph" preserves the input order of "src_graph", and
* its output order corresponds to the outputs produced by the nodes in "nodes" with the given order.
*
* \param[in] src_graph The source OrtGraph instance.
* \param[in] nodes A subset of the nodes/OrtNodes in 'graph'.
* \param[in] num_nodes Number of nodes.
* \param[out] dst_graph An OrtGraph created from a given set of nodes. Must be released by calling ReleaseGraph.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetGraphView: #type (src_graph: *OrtGraph, nodes: **OrtNode, num_nodes: u64, dst_graph: **OrtGraph) -> OrtStatusPtr #c_call;
/** \brief Returns a node's identifier.
*
* The node's identifier is only unique in the node's parent graph. Different nested subgraphs
* (e.g., subgraphs contained by If and Loop nodes) may reuse identifiers.
*
* \param[in] node The OrtNode instance.
* \param[out] node_id Output parameter set to the node's identifier.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetId: #type (node: *OrtNode, node_id: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns a node's name. Can be an empty string.
*
* \param[in] node The OrtNode instance.
* \param[out] node_name Output parameter set to the node's name.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetName: #type (node: *OrtNode, node_name: **u8) -> OrtStatusPtr #c_call;
/** \brief Returns a node's operator type (e.g., "Conv").
*
* \param[in] node The OrtNode instance.
* \param[out] operator_type Output parameter set to the name of the node's operator type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetOperatorType: #type (node: *OrtNode, operator_type: **u8) -> OrtStatusPtr #c_call;
/** \brief Returns a node's domain name.
*
* \param[in] node The OrtNode instance.
* \param[out] domain_name Output parameter set to the node's domain name.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetDomain: #type (node: *OrtNode, domain_name: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the opset version in which the given node's operator type was first defined.
*
* \param[in] node The OrtNode instance.
* \param[out] since_version The opset version in which the node's operator type was first defined.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetSinceVersion: #type (node: *OrtNode, since_version: *s32) -> OrtStatusPtr #c_call;
/** \brief Returns the number of node inputs.
*
* \param[in] node The OrtNode instance.
* \param[out] num_inputs Output parameter set to the number of node inputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetNumInputs: #type (node: *OrtNode, num_inputs: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns the node's inputs as OrtValueInfo instances.
*
* \param[in] node The OrtNode instance.
* \param[out] inputs Pre-allocated array of `num_inputs` elements that is filled with the node's inputs.
* \param[in] num_inputs The size of the `inputs` array.
* Typical usage sets this to the result of Node_GetNumInputs(). An error status is
* returned if `num_inputs` is less than the number of node inputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetInputs: #type (node: *OrtNode, inputs: **OrtValueInfo, num_inputs: u64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of node outputs.
*
* \param[in] node The OrtNode instance.
* \param[out] num_outputs Output parameter set to the number of node outputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetNumOutputs: #type (node: *OrtNode, num_outputs: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns the node's outputs as OrtValueInfo instances.
*
* \param[in] node The OrtNode instance.
* \param[out] outputs Pre-allocated array of `num_outputs` elements that is filled with the node's outputs.
* \param[in] num_outputs The size of the `outputs` array.
* Typical usage sets this to the result of Node_GetNumOutputs(). An error status is
* returned if `num_outputs` is less than the number of node outputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetOutputs: #type (node: *OrtNode, outputs: **OrtValueInfo, num_outputs: u64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of node implicit inputs.
*
* Certain operator types (e.g., If and Loop) contain nested subgraphs. The internal nodes within the nested subgraphs
* may use values from the outer scope. Those "outer scope" values are considered implicit inputs to the node that
* contains the subgraphs (e.g., the If or Loop node).
*
* \param[in] node The OrtNode instance.
* \param[out] num_implicit_inputs Output parameter set to the number of node implicit inputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetNumImplicitInputs: #type (node: *OrtNode, num_implicit_inputs: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the implicit inputs, as OrtValueInfo instances, that are used within the given node's subgraphs.
*
* \note Only certain operator types (e.g., If and Loop) contain nested subgraphs.
* The internal nodes within the nested subgraphs may use values from the outer scope. Those "outer scope" values
* are considered implicit inputs to the node that contains the subgraphs (e.g., the If or Loop node).
*
* \param[in] node The OrtNode instance.
* \param[out] implicit_inputs Pre-allocated array of `num_implicit_inputs` elements that is filled the node's
* implicit inputs.
* \param[in] num_implicit_inputs The size of the `implicit_inputs` array. Typical usage sets this to the result
* of Node_GetNumImplicitInputs(). An error status is returned if
* `num_implicit_inputs` is less than the number of node implicit inputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetImplicitInputs: #type (node: *OrtNode, implicit_inputs: **OrtValueInfo, num_implicit_inputs: u64) -> OrtStatusPtr #c_call;
/** \brief Returns the number of node attributes.
*
* \param[in] node The OrtNode instance.
* \param[out] num_attributes Output parameter set to the number of node attributes.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetNumAttributes: #type (node: *OrtNode, num_attributes: *u64) -> OrtStatusPtr #c_call;
/** \brief Returns a node's attributes as OrtOpAttr instances.
*
* \param[in] node The OrtNode instance.
* \param[out] attributes Pre-allocated array of `num_attributes` elements that is filled with the node's attributes.
* \param[in] num_attributes The size of the `num_attributes` array.
* Typical usage sets this to the result of Node_GetNumAttributes(). An error status is
* returned if `num_attributes` is less than the number of node attributes.
*
* \note ONNX Runtime automatically sets optional (unset) attributes to their default values if the default value
* is a constant expression that does not depend on other tensor/model characteristics. Conv's 'kernel_shape'
* attribute is an example of an optional attribute that does not have a constant default value. This function
* does not provide any unset optional attributes without a constant default value.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetAttributes: #type (node: *OrtNode, attributes: **OrtOpAttr, num_attributes: u64) -> OrtStatusPtr #c_call;
/** \brief Gets the OrtNode's attribute as OrtOpAttr by name.
*
* \param[in] node The OrtNode instance.
* \param[in] attribute_name The name of the attribute
* \param[out] attribute Output parameter set to the OrtOpAttr instance if an attribute by the given name exists.
* For an unset optional attribute, `attribute` is set to NULL and a non-error status is
* returned. For an invalid attribute name, `attribute` is set to NULL and an error status with
* code ORT_NOT_FOUND is returned.
*
* \note ONNX Runtime automatically sets optional (unset) attributes to their default values if the default value
* is a constant expression that does not depend on other tensor/model characteristics. Conv's 'kernel_shape'
* attribute is an example of an optional attribute that does not have a constant default value. This function
* does not provide any unset optional attributes without a constant default value.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetAttributeByName: #type (node: *OrtNode, attribute_name: *u8, attribute: **OrtOpAttr) -> OrtStatusPtr #c_call;
/** \brief Get the OrtNode's 'TENSOR' attribute as an OrtValue.
*
* \param[in] attribute The OrtOpAttr instance.
* \param[out] attr_tensor If successful, contains the 'TENSOR' attribute as a newly created OrtValue.
Must be freed with OrtApi::ReleaseValue.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
OpAttr_GetTensorAttributeAsOrtValue: #type (attribute: *OrtOpAttr, attr_tensor: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Get the attribute type as OrtOpAttrType from an OrtOpAttr.
*
* \param[in] attribute The OrtOpAttr instance.
* \param[out] type Output the attribute type as OrtOpAttrType.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
OpAttr_GetType: #type (attribute: *OrtOpAttr, type: *OrtOpAttrType) -> OrtStatusPtr #c_call;
/** \brief Get the attribute name from an OrtOpAttr.
*
* \param[in] attribute The OrtOpAttr instance.
* \param[out] name Output parameter set to the attribute's name. The name is a null-terminated string.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
OpAttr_GetName: #type (attribute: *OrtOpAttr, name: **u8) -> OrtStatusPtr #c_call;
/** \brief Returns the number of subgraphs contained by the given node.
*
* \note Only certain operator types (e.g., If and Loop) contain nested subgraphs.
*
* \param[in] node The OrtNode instance.
* \param[out] num_subgraphs Output parameter set to the number of node subgraphs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetNumSubgraphs: #type (node: *OrtNode, num_subgraphs: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the subgraphs, as OrtGraph instances, contained by the given node.
*
* \note Only certain operator types (e.g., If and Loop) contain nested subgraphs. ONNX nodes store subgraphs in
* their attributes, however, this function must be used to obtain subgraphs from an OrtNode.
*
* \param[in] node The OrtNode instance.
* \param[out] subgraphs Pre-allocated array of `num_subgraphs` elements that is filled with the node's subgraphs.
* \param[in] num_subgraphs The size of the `num_subgraphs` array.
* Typical usage sets this to the result of Node_GetNumSubgraphs(). An error status is
* returned if `num_subgraphs` is less than the number of node subgraphs.
* \param[out] attribute_names Optional pre-allocated array of `num_subgraphs` elements that is filled with the
* attribute names that correspond to the subgraphs. Ignored if set to NULL.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetSubgraphs: #type (node: *OrtNode, subgraphs: **OrtGraph, num_subgraphs: u64, attribute_names: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the node's parent OrtGraph instance.
*
* Can return NULL if the OrtNode was created without an owning graph.
* In another case, this API may also return NULL if `node` is obtained by calling Graph_GetParentNode()
* on an OrtGraph that is a subgraph of a control-flow op, and the parent graph has not been created yet,
* for example during ORT's GetCapability() when processing the innermost subgraph.
*
* \param[in] node The OrtNode instance.
* \param[out] graph Output parameter set to the node's OrtGraph. Can be set to NULL
* if the node is not currently contained by a graph.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetGraph: #type (node: *OrtNode, graph: **OrtGraph) -> OrtStatusPtr #c_call;
/** \brief Returns the execution provider name that this node is assigned to run on.
* Returns NULL if the node has not been assigned to any execution provider yet.
* For plugin execution providers, the name is the one returned by OrtEp::GetName.
*
* \param[in] node The OrtNode instance.
* \param[out] out Output execution provider type and can be NULL if node has not been assigned.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Node_GetEpName: #type (node: *OrtNode, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Release an OrtExternalInitializerInfo instance.
*
* \param[in] input OrtExternalInitializerInfo instance to be released.
*
* \since Version 1.23.
*/
ReleaseExternalInitializerInfo: #type (input: *OrtExternalInitializerInfo) -> void #c_call;
/** \brief Get the relative path to the file that stores the initializer's data.
*
* \note The path is relative to the filesystem directory where the ONNX model was stored.
* Caller can use Graph_GetModelPath to get the model's full path and construct the absolute path to the
* external initializer file if necessary.
*
* \param[in] info The OrtExternalInitializerInfo instance.
* \return The relative path to the file that stores the initializer's data. Do NOT free this pointer.
*
* \since Version 1.23.
*/
ExternalInitializerInfo_GetFilePath: #type (info: *OrtExternalInitializerInfo) -> *u16 #c_call;
/** \brief Get the byte offset within the file where the initializer's data is stored.
*
* \param[in] info The OrtExternalInitializerInfo instance.
* \return The byte offset where the initializer's data is stored within the file.
*
* \since Version 1.23.
*/
ExternalInitializerInfo_GetFileOffset: #type (info: *OrtExternalInitializerInfo) -> s64 #c_call;
/** \brief Get the size in bytes of the initializer's data within the file.
*
* \param[in] info The OrtExternalInitializerInfo instance.
* \return The size in bytes of the initializer's data within the file.
*
* \since Version 1.23.
*/
ExternalInitializerInfo_GetByteSize: #type (info: *OrtExternalInitializerInfo) -> u64 #c_call;
/** \brief Get a run configuration entry.
*
* If a run configuration entry with key `config_key` doesn't exist, `config_value` will be set to NULL.
*
* `config_key`s are defined in onnxruntime_run_options_config_keys.h.
*
* \param[in] options The OrtRunOptions instance.
* \param[in] config_key The configuration entry key. A null-terminated string.
* \return The configuration entry value. Either a null-terminated string if the entry was found. nullptr otherwise.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
GetRunConfigEntry: #type (options: *OrtRunOptions, config_key: *u8) -> *u8 #c_call;
/** \brief Get the OrtMemoryInfo for the device.
*
* \param[in] ep_device The OrtEpDevice instance to query.
* \param[in] memory_type The memory type to return.
* \return A pointer to the OrtMemoryInfo for the device. This may be nullptr if not set.
* If memory_type is OrtDeviceMemoryType_DEFAULT and nullptr is returned the EP uses CPU memory.
*
* \since Version 1.23
*/
EpDevice_MemoryInfo: #type (ep_device: *OrtEpDevice, memory_type: OrtDeviceMemoryType) -> *OrtMemoryInfo #c_call;
/** \brief Create/replace a shared allocator for the OrtEpDevice in the OrtEnv.
*
* OrtEpDevice maps to the EP factory, and the factory provides the allocator implementation.
*
* Both OrtDeviceMemoryType_DEFAULT and OrtDeviceMemoryType_HOST_ACCESSIBLE are optional for an EP to provide.
* It is EP implementation dependent as to what is available.
*
* If a shared allocator already exists for the OrtEpDevice and OrtDeviceMemoryType, it is replaced. This allows
* changing the shared allocator configuration from the default. e.g. adding an arena.
*
* \param[in] env The OrtEnv instance to create the shared allocator in.
* \param[in] ep_device The OrtEpDevice instance to create the shared allocator for.
* \param[in] mem_type The memory type to use for the shared allocator.
* \param[in] allocator_type The type of allocator to create. Only OrtDeviceAllocator is valid currently.
* \param[in] allocator_options Optional key-value pairs to configure the allocator. If arena based, see
* include/onnxruntime/core/framework/allocator.h for the keys and values that can be
* used.
* \param[out] allocator A pointer to the created shared allocator. Owned by the OrtEnv instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
CreateSharedAllocator: #type (env: *OrtEnv, ep_device: *OrtEpDevice, mem_type: OrtDeviceMemoryType, allocator_type: OrtAllocatorType, allocator_options: *OrtKeyValuePairs, allocator: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Get a shared allocator from the OrtEnv.
*
* By default there is a shared allocator created for all OrtEpDevice instances, so if you get the OrtMemoryInfo
* from the OrtEpDevice using EpDevice_MemoryInfo a shared allocator is guaranteed to exist.
*
* This will also match and return custom allocators added with RegisterAllocator.
*
* It is not an error to not find a matching allocator.
*
* \param[in] env The OrtEnv instance to get the shared allocator from.
* \param[in] mem_info The OrtMemoryInfo instance to get the shared allocator for.
* \param[out] allocator A pointer to the shared allocator, or nullptr if no shared allocator exists for
* the given memory info.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
GetSharedAllocator: #type (env: *OrtEnv, mem_info: *OrtMemoryInfo, allocator: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Release a shared allocator from the OrtEnv for the OrtEpDevice and memory type.
*
* This will release the shared allocator for the given OrtEpDevice and memory type.
* If no shared allocator exists, this is a no-op.
*
* \param[in] env The OrtEnv instance to release the shared allocator from.
* \param[in] ep_device The OrtEpDevice instance to release the shared allocator for.
* \param[in] mem_type The memory type of the shared allocator to release.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
ReleaseSharedAllocator: #type (env: *OrtEnv, ep_device: *OrtEpDevice, mem_type: OrtDeviceMemoryType) -> OrtStatusPtr #c_call;
/** \brief Get a const pointer to the raw data inside a tensor
*
* Used to read the internal tensor data directly.
* \note The returned pointer is valid until the OrtValue is destroyed.
*
* \param[in] value A tensor type (string tensors are not supported)
* \param[out] out Filled in with a pointer to the internal storage
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
GetTensorData: #type (value: *OrtValue, out: **void) -> OrtStatusPtr #c_call;
/** \brief Get Session configuration entries.
*
* \param[in] options The session options.
* \param[out] out A pointer to a newly created OrtKeyValuePairs instance.
*
* An OrtKeyValuePairs instance containing all session configuration entries.
* Note: the user should call OrtApi::ReleaseKeyValuePairs.
*
* \since Version 1.23.
*/
GetSessionOptionsConfigEntries: #type (options: *OrtSessionOptions, out: **OrtKeyValuePairs) -> OrtStatusPtr #c_call;
/** \brief Get the OrtMemoryInfo for each input of the session.
*
* The memory info can be used to determine where the input tensors are required.
*
* The session must be fully initialized before calling this function as the input locations are not known until
* this has occurred.
*
* \param[in] session The OrtSession instance.
* \param[out] inputs_memory_info Pre-allocated array of size `num_inputs` that will be filled with the
* OrtMemoryInfo* value for each input.
* The order is the same as returned by SessionGetInputName.
* \param[in] num_inputs The number of inputs in the session. Must match SessionGetInputCount.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
SessionGetMemoryInfoForInputs: #type (session: *OrtSession, inputs_memory_info: **OrtMemoryInfo, num_inputs: u64) -> OrtStatusPtr #c_call;
/** \brief Get the OrtMemoryInfo for each output of the session.
*
* The memory info can be used to determine the device the output tensors are produced on.
* The user can pre-allocate an OrtValue using this information or use IOBinding to keep the data on the device.
* ORT will copy the output to CPU otherwise.
*
* The session must be fully initialized before calling this function as the output locations are not known until
* this has occurred.
*
* \param[in] session The OrtSession instance.
* \param[out] outputs_memory_info Pre-allocated array of size `num_outputs` that will be filled with
* OrtMemoryInfo* values for each output.
* The order is the same as returned by SessionGetOutputName.
* \param[in] num_outputs The number of outputs in the session. Must match SessionGetOutputCount.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
SessionGetMemoryInfoForOutputs: #type (session: *OrtSession, outputs_memory_info: **OrtMemoryInfo, num_outputs: u64) -> OrtStatusPtr #c_call;
/** \brief Get the OrtEpDevice (if available) for each input of the session.
*
* An OrtEpDevice will be available if auto EP selection is enabled by calling
* SessionOptionsSetEpSelectionPolicy or SessionOptionsSetEpSelectionPolicyDelegate,
* or if the OrtEpDevice was manually added to the session using SessionOptionsAppendExecutionProvider_V2.
*
* If an OrtEpDevice is not available for the input a nullptr is returned.
*
* The returned OrtEpDevice can be used to create an OrtSyncStream via CreateSyncStreamForEpDevice to asynchronously
* provide input to the inference session Run.
*
* The session must be fully initialized before calling this function as the assigned EPs are not known until
* this has occurred.
*
* \param[in] session The OrtSession instance.
* \param[out] inputs_ep_devices Pre-allocated array of size `num_inputs` that will be filled with
* OrtEpDevice* values for each input.
* The order is the same as returned by SessionGetInputName.
* \param[in] num_inputs The number of inputs in the session. Must match SessionGetInputCount.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
SessionGetEpDeviceForInputs: #type (session: *OrtSession, inputs_ep_devices: **OrtEpDevice, num_inputs: u64) -> OrtStatusPtr #c_call;
/** \brief Create an OrtSyncStream for the given OrtEpDevice.
*
* The OrtSyncStream can be used to enable asynchronous operations.
* e.g. async usage of CopyTensors to provide input to an OrtSession Run call.
*
* An error code of ORT_NOT_IMPLEMENTED will be returned if the EP does not support OrtSyncStream.
*
* \param[in] ep_device The OrtEpDevice instance to create the sync stream for.
* \param[in] stream_options Options for OrtSyncStream creation. May be nullptr.
* \param[out] stream Output parameter set to the created OrtSyncStream instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
CreateSyncStreamForEpDevice: #type (ep_device: *OrtEpDevice, stream_options: *OrtKeyValuePairs, stream: **OrtSyncStream) -> OrtStatusPtr #c_call;
/** \brief Get the native handle of the sync stream.
*
* This returns the native handle for the stream. e.g. cudaStream_t for CUDA streams.
*
* \param[in] stream The OrtSyncStream instance to get the handle from.
*
* \returns The native handle of the stream.
*
* \since Version 1.23
*/
SyncStream_GetHandle: #type (stream: *OrtSyncStream) -> *void #c_call;
ReleaseSyncStream: #type (input: *OrtSyncStream) -> void #c_call;
/** \brief Copy OrtValue instances containing Tensors between devices.
*
* The overall copy must be between a single source device and a single destination device. i.e.
* - all src_tensors must have matching OrtMemoryInfo,
* - all dst_tensors must have matching OrtMemoryInfo.
*
* OrtValue instances can be created by:
* - Use GetSharedAllocator to get the shared allocator for the OrtMemoryInfo if you need to allocate memory
* on the device.
* - Use CreateTensorAsOrtValue, CreateTensorWithDataAsOrtValue or CreateTensorWithDataAndDeleterAsOrtValue
* to create an OrtValue containing a tensor depending on whether you have existing data or not, and whether
* you want ORT to free the existing data once it is done with the OrtValue.
*
* \param[in] env The OrtEnv instance to use. The data transfer implementation is provided by an execution provider
* that is registered in this OrtEnv.
* \param[in] src_tensors Array of OrtValue instances containing the source tensors to copy.
* \param[in] dst_tensors Array of OrtValue instances to copy the source tensors to.
* \param[in] stream Optional OrtSyncStream that can be used to perform the copy asynchronously. May be nullptr.
* \param[in] num_tensors The number of tensors to copy. The size of `src_tensors` and `dst_tensors` must match.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23
*/
CopyTensors: #type (env: *OrtEnv, src_tensors: **OrtValue, dst_tensors: **OrtValue, stream: *OrtSyncStream, num_tensors: u64) -> OrtStatusPtr #c_call;
/** \brief Get ::OrtModelMetadata from an ::OrtGraph
*
* \param[in] graph The OrtGraph instance.
* \param[out] out Newly created ::OrtModelMetadata. Must be freed using OrtApi::ReleaseModelMetadata.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Graph_GetModelMetadata: #type (graph: *OrtGraph, out: **OrtModelMetadata) -> OrtStatusPtr #c_call;
/** \brief Validate a compiled model's compatibility information for one or more EP devices.
*
* \param[in] ep_devices The EP devices to validate against (e.g., from GetEpDevices).
* All devices must belong to the same execution provider.
* \param[in] num_ep_devices The number of EP devices provided.
* \param[in] compatibility_info The compatibility info string produced when the model was compiled.
* \param[out] out_status The resulting compatibility status for the EP devices.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
GetModelCompatibilityForEpDevices: #type (ep_devices: **OrtEpDevice, num_ep_devices: u64, compatibility_info: *u8, out_status: *OrtCompiledModelCompatibility) -> OrtStatusPtr #c_call;
/** \brief Creates an OrtExternalInitializerInfo instance.
*
* \param[in] filepath The relative path to the file that stores the initializer's data. ORT copies this path string.
* \param[in] file_offset The byte offset where the initializer's data is stored within the file.
* \param[in] byte_size The size in bytes of the initializer's data within the file.
* \param[out] out Output parameter set to the new OrtExternalInitializerInfo instance.
* Must be released by calling ReleaseExternalInitializerInfo().
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CreateExternalInitializerInfo: #type (filepath: *u16, file_offset: s64, byte_size: u64, out: **OrtExternalInitializerInfo) -> OrtStatusPtr #c_call;
/// @}
/** \brief Fetch whether the tensor has shape information.
* \param[in] info The OrtTensorTypeAndShapeInfo instance.
* \return true if the tensor has shape information, false otherwise.
*
* \since Version 1.24
*/
TensorTypeAndShape_HasShape: #type (info: *OrtTensorTypeAndShapeInfo) -> bool #c_call;
/** \brief Get all config entries from ::OrtKernelInfo.
*
* Gets all configuration entries from the ::OrtKernelInfo object as key-value pairs.
* Config entries are set on the ::OrtSessionOptions and are accessible in custom operator kernels.
*
* Used in the CreateKernel callback of an OrtCustomOp to access all session configuration entries
* during kernel construction.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[out] out A pointer to a newly created OrtKeyValuePairs instance containing all config entries.
* Note: the user should call OrtApi::ReleaseKeyValuePairs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
KernelInfo_GetConfigEntries: #type (info: *OrtKernelInfo, out: **OrtKeyValuePairs) -> OrtStatusPtr #c_call;
/** \brief Get the graph node's operator domain from ::OrtKernelInfo.
*
* If `out` is nullptr, the value of `size` is set to the size of the operator domain
* string (including null-terminator), and a success status is returned.
*
* If the `size` parameter is greater than or equal to the string's size and `out` is not nullptr,
* the value of `size` is set to the true size of the string (including null-terminator),
* the provided memory is filled with the string's contents, and a success status is returned.
*
* If the `size` parameter is less than the actual string's size and `out`
* is not nullptr, the value of `size` is set to the true size of the string
* and a failure status with error code ORT_INVALID_ARGUMENT is returned.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[out] out Memory location into which to write the UTF-8 null-terminated string representing the
* operator domain.
* \param[in,out] size Pointer to the size of the `out` buffer. See above comments for details.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
KernelInfo_GetOperatorDomain: #type (info: *OrtKernelInfo, out: *u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the graph node's operator type from ::OrtKernelInfo.
*
* If `out` is nullptr, the value of `size` is set to the size of the operator type
* string (including null-terminator), and a success status is returned.
*
* If the `size` parameter is greater than or equal to the string's size and `out` is not nullptr,
* the value of `size` is set to the true size of the string (including null-terminator),
* the provided memory is filled with the string's contents, and a success status is returned.
*
* If the `size` parameter is less than the actual string's size and `out`
* is not nullptr, the value of `size` is set to the true size of the string
* and a failure status with error code ORT_INVALID_ARGUMENT is returned.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[out] out Memory location into which to write the UTF-8 null-terminated string representing the
* operator type.
* \param[in,out] size Pointer to the size of the `out` buffer. See above comments for details.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
KernelInfo_GetOperatorType: #type (info: *OrtKernelInfo, out: *u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the opset version in which the given node's operator type was first defined from ::OrtKernelInfo.
*
* \param[in] info An instance of ::OrtKernelInfo.
* \param[out] since_version The opset version in which the node's operator type was first defined.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
KernelInfo_GetOperatorSinceVersion: #type (info: *OrtKernelInfo, since_version: *s32) -> OrtStatusPtr #c_call;
/** \brief Get the EP Interop API instance.
*
* Get the Interop API instance to work with external resources. This API provides functions
* for importing external GPU memory and semaphores for zero-copy sharing between ORT inference
* and other GPU workloads.
*
* \return Interop API struct instance.
*
* \since Version 1.24.
*/
GetInteropApi: #type () -> *OrtInteropApi #c_call;
/** \brief Get the EP device assigned to each session output.
*
* Returns the OrtEpDevice assigned to each output of the session after graph partitioning.
* This allows validation that outputs are placed on the expected device for external resource sharing.
*
* The EP device for each output is determined by which execution provider will produce that output
* during inferencing. This information is useful for:
* - Validating that outputs will be placed on the expected device for external resource sharing
* - Deciding whether to use external memory handles for outputs
*
* \param[in] session The OrtSession instance to query.
* \param[out] outputs_ep_devices An array to be filled with the EP device for each output.
* The array must be allocated by the caller with space for
* OrtEpDevice* values for each output.
* The order is the same as returned by SessionGetOutputName.
* \param[in] num_outputs The number of outputs in the session. Must match SessionGetOutputCount.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24
*/
SessionGetEpDeviceForOutputs: #type (session: *OrtSession, outputs_ep_devices: **OrtEpDevice, num_outputs: u64) -> OrtStatusPtr #c_call;
/** \brief Get the number of available hardware devices.
*
* Returns the count of hardware devices discovered on the system.
* Use this to allocate an array before calling GetHardwareDevices().
*
* \param[in] env The OrtEnv instance where device discovery results are stored.
* \param[out] num_devices The number of OrtHardwareDevice instances available.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetNumHardwareDevices: #type (env: *OrtEnv, num_devices: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the list of available hardware devices.
*
* Enumerates hardware devices available on the system.
* Populates a user-provided array with pointers to OrtHardwareDevice instances. The caller is responsible
* for allocating the array with sufficient space (use GetNumHardwareDevices() to get the count).
*
* The returned pointers reference internal ORT data structures that are discovered once at process
* startup and remain valid for the lifetime of the OrtEnv. The caller does not need to release these
* pointers, but should not use them after calling ReleaseEnv().
*
* \param[in] env The OrtEnv instance where device discovery results are stored.
* \param[out] devices User-allocated array to receive pointers to OrtHardwareDevice instances.
* The array must have space for at least num_devices elements.
* \param[in] num_devices The size of the user-allocated devices array.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetHardwareDevices: #type (env: *OrtEnv, devices: **OrtHardwareDevice, num_devices: u64) -> OrtStatusPtr #c_call;
/** \brief Check for known incompatibility issues between hardware device and a specific execution provider.
*
* This function checks for known incompatibility issues between the specified hardware device
* and a specific execution provider.
* If returned incompatibility details have non-zero reasons, it indicates the device is not compatible.
* However, if returned detail have reason == 0, it doesn't guarantee 100% compatibility for all models,
* as models may have specific requirements.
*
* Note: This method should only be called when the OrtEnv has been initialized with execution
* providers (after RegisterExecutionProviderLibrary is called).
*
* \param[in] env The OrtEnv instance with registered execution providers.
* \param[in] ep_name The name of the execution provider to check. Required and cannot be null or empty.
* \param[in] hw The hardware device to check for incompatibility.
* \param[out] details Compatibility details including reasons for incompatibility if any.
* Must be freed with OrtApi::ReleaseDeviceEpIncompatibilityDetails.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetHardwareDeviceEpIncompatibilityDetails: #type (env: *OrtEnv, ep_name: *u8, hw: *OrtHardwareDevice, details: **OrtDeviceEpIncompatibilityDetails) -> OrtStatusPtr #c_call;
/** \brief Get the incompatibility reasons bitmask from OrtDeviceEpIncompatibilityDetails.
*
* \param[in] details The OrtDeviceEpIncompatibilityDetails instance to query.
* \param[out] reasons_bitmask Pointer to store the bitmask of incompatibility reasons.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
DeviceEpIncompatibilityDetails_GetReasonsBitmask: #type (details: *OrtDeviceEpIncompatibilityDetails, reasons_bitmask: *u32) -> OrtStatusPtr #c_call;
/** \brief Get the notes from OrtDeviceEpIncompatibilityDetails.
*
* \param[in] details The OrtDeviceEpIncompatibilityDetails instance to query.
* \param[out] notes Pointer to the notes string. May be nullptr if no notes are available.
* The returned string is owned by the details object and should not be freed.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
DeviceEpIncompatibilityDetails_GetNotes: #type (details: *OrtDeviceEpIncompatibilityDetails, notes: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the execution provider error code from OrtDeviceEpIncompatibilityDetails.
*
* This allows Independent Hardware Vendors (IHVs) to define their own error codes
* to provide additional details about device incompatibility.
*
* \param[in] details The OrtDeviceEpIncompatibilityDetails instance to query.
* \param[out] error_code Pointer to store the EP-specific error code. A value of 0 indicates no error code was set.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
DeviceEpIncompatibilityDetails_GetErrorCode: #type (details: *OrtDeviceEpIncompatibilityDetails, error_code: *s32) -> OrtStatusPtr #c_call;
/** \brief Release an OrtDeviceEpIncompatibilityDetails instance.
*
* \since Version 1.24.
*/
ReleaseDeviceEpIncompatibilityDetails: #type (input: *OrtDeviceEpIncompatibilityDetails) -> void #c_call;
/** \brief Extract EP compatibility info from a precompiled model file.
*
* Parses the model file to extract the compatibility info string for a specific execution provider
* from the model's metadata properties. This is only applicable to models that have been precompiled
* for an EP (e.g., via OrtCompileApi). Standard ONNX models do not contain this information.
*
* The compatibility info string must be valid UTF-8 without embedded NUL characters.
*
* \note This API performs standalone model parsing, separate from session creation. This means
* the protobuf parsing cost is incurred here and again during session creation. It is intended
* for scenarios where applications need to check compatibility before deciding whether to proceed
* with session creation, such as providing early user feedback.
*
* \note This operation parses the full ONNX ModelProto from disk. For very large models, consider
* using GetCompatibilityInfoFromModelBytes with a pre-loaded buffer if the model is already in memory.
*
* The compatibility info can then be passed to GetModelCompatibilityForEpDevices to check if a
* precompiled model is compatible with the current system.
*
* \param[in] model_path Path to the ONNX model file.
* \param[in] ep_type The execution provider type string. Must be non-empty.
* Use OrtApi::EpDevice_EpName to get this value from an OrtEpDevice.
* \param[in] allocator Allocator to use for the output string. Use OrtApi::GetAllocatorWithDefaultOptions.
* \param[out] compatibility_info Output pointer to the compatibility info string.
* Returns nullptr if no compatibility info exists for the specified EP.
* Caller must free with OrtApi::AllocatorFree when non-null.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetCompatibilityInfoFromModel: #type (model_path: *u16, ep_type: *u8, allocator: *OrtAllocator, compatibility_info: **u8) -> OrtStatusPtr #c_call;
/** \brief Extract EP compatibility info from precompiled model bytes in memory.
*
* Same as GetCompatibilityInfoFromModel but reads from a memory buffer instead of a file.
* Useful when precompiled models are loaded from encrypted storage, network, or other non-file sources.
*
* \note This API performs standalone model parsing, separate from session creation. This means
* the protobuf parsing cost is incurred here and again during session creation. It is intended
* for scenarios where applications need to check compatibility before deciding whether to proceed
* with session creation, such as providing early user feedback.
*
* \param[in] model_data Pointer to the model data in memory.
* \param[in] model_data_length Size of the model data in bytes.
* \param[in] ep_type The execution provider type string. Must be non-empty.
* \param[in] allocator Allocator to use for the output string. Use OrtApi::GetAllocatorWithDefaultOptions.
* \param[out] compatibility_info Output pointer to the compatibility info string.
* Returns nullptr if no compatibility info exists for the specified EP.
* Caller must free with OrtApi::AllocatorFree when non-null.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetCompatibilityInfoFromModelBytes: #type (model_data: *void, model_data_length: u64, ep_type: *u8, allocator: *OrtAllocator, compatibility_info: **u8) -> OrtStatusPtr #c_call;
/** \brief Create an OrtEnv instance with the given options.
*
* \note Invoking this function will return the same instance of the environment as that returned by a previous call
* to another env creation function; all arguments to this function will be ignored.
*
* \param[in] options The OrtEnvCreationOptions instance that contains creation options.
* \param[out] out Output parameter set to the new OrtEnv instance. Must be freed with OrtApi::ReleaseEnv.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24
*/
CreateEnvWithOptions: #type (options: *OrtEnvCreationOptions, out: **OrtEnv) -> OrtStatusPtr #c_call;
/** \brief Get information about the subgraphs assigned to each execution provider (EP) and the nodes within.
*
* Each returned OrtEpAssignedSubgraph instance contains details of the subgraph/nodes assigned to an execution
* provider, including the execution provider's name, and the name, domain, and operator type for every node.
*
* For compiling execution providers, a single OrtEpAssignedSubgraph instance contains information about the
* nodes that are fused and compiled within a single subgraph assigned to the execution provider.
*
* For execution providers that use kernel registration (e.g., CPU EP), each node with a registered kernel is
* contained in its own OrtEpAssignedSubgraph instance.
*
* \note The caller must enable the collection of this information by enabling the session
* configuration entry "session.record_ep_graph_assignment_info" during session creation.
* Refer to onnxruntime_session_options_config_keys.h. Otherwise, if not enabled, this function returns a
* status with error code ORT_FAIL.
*
* \note The information reported by this function is obtained immediately after running basic optimizations on the
* original graph if the session optimization level is set to ORT_ENABLE_BASIC or higher. If the session
* optimization level is set to ORT_DISABLE_ALL, only minimal/required optimizations are run before
* the information is collected.
*
* \param[in] session The OrtSession instance.
* \param[out] ep_subgraphs Output parameter set to the array of OrtEpAssignedSubgraph instances.
* \param[out] num_ep_subgraphs Output parameter set to the number of elements in the `ep_subgraphs` array.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
Session_GetEpGraphAssignmentInfo: #type (session: *OrtSession, ep_subgraphs: ***OrtEpAssignedSubgraph, num_ep_subgraphs: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the name of the execution provider to which the subgraph was assigned.
*
* \param[in] ep_subgraph The OrtEpAssignedSubgraph instance.
* \param[out] out Output parameter set to the execution provider's name as a UTF-8 null-terminated string.
* Owned by the OrtEpAssignedSubgraph instance (do not free).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
EpAssignedSubgraph_GetEpName: #type (ep_subgraph: *OrtEpAssignedSubgraph, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the nodes in a subgraph assigned to a specific execution provider.
*
* \param[in] ep_subgraph The OrtEpAssignedSubgraph instance.
* \param[out] ep_nodes Output parameter set to the array of OrtEpAssignedNode instances.
* \param[out] num_ep_nodes Output parameter set to the number of OrtEpAssignedNode instance returned.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
EpAssignedSubgraph_GetNodes: #type (ep_subgraph: *OrtEpAssignedSubgraph, ep_nodes: ***OrtEpAssignedNode, num_ep_nodes: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the name of the node assigned to an execution provider.
*
* \param[in] ep_node The OrtEpAssignedNode instance.
* \param[out] out Output parameter set to the node's name as a UTF-8 null-terminated string.
* Owned by the OrtEpAssignedNode instance (do not free).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
EpAssignedNode_GetName: #type (ep_node: *OrtEpAssignedNode, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the domain of the node assigned to an execution provider.
*
* \param[in] ep_node The OrtEpAssignedNode instance.
* \param[out] out Output parameter set to the node's domain as a UTF-8 null-terminated string.
* Owned by the OrtEpAssignedNode instance (do not free).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
EpAssignedNode_GetDomain: #type (ep_node: *OrtEpAssignedNode, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the operator type of the node assigned to an execution provider.
*
* \param[in] ep_node The OrtEpAssignedNode instance.
* \param[out] out Output parameter set to the node's operator type as a UTF-8 null-terminated string.
* Owned by the OrtEpAssignedNode instance (do not free).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
EpAssignedNode_GetOperatorType: #type (ep_node: *OrtEpAssignedNode, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Sets OrtSyncStream for the run options
*
* OrtSyncStream is used to synchronize the execution of the model run for the device
* of the stream. It overrides the existing stream for the duration of the Run().
* The stream instance must be alive for the duration of the Run() call.
*
* \param[in] options
* \param[in] sync_stream The synchronization stream. Pass nullptr to clear previous setting.
*
* \since 1.24
*/
RunOptionsSetSyncStream: #type (options: *OrtRunOptions, sync_stream: *OrtSyncStream) -> void #c_call;
/** \brief Get the element data type and shape for an OrtValue that represents a Tensor (scalar, dense, or sparse).
*
* \note This function is an alternative to OrtApi::GetTensorTypeAndShape that does not allocate a new array for
* the shape data. The OrtValue instance's internal shape data is returned directly.
*
* \note Returns an error if the underlying OrtValue is not a Tensor.
*
* \param[in] value The OrtValue instance.
* \param[out] elem_type Output parameter set to the tensor element data type.
* \param[out] shape_data Output parameter set to the OrtValue instance's internal shape data array.
* For a scalar, `shape_data` is NULL and `shape_data_count` is 0.
* Must not be released as it is owned by the OrtValue instance. This pointer becomes invalid
* when the OrtValue is released or if the underlying shape data is updated or reallocated.
* \param[out] shape_data_count Output parameter set to the number of elements in `shape_data`.
* `shape_data_count` is 0 for a scalar.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetTensorElementTypeAndShapeDataReference: #type (value: *OrtValue, elem_type: *ONNXTensorElementDataType, shape_data: **s64, shape_data_count: *u64) -> OrtStatusPtr #c_call;
/** \brief Enable profiling for this run
*
* \param[in] options
* \param[in] profile_file_prefix The prefix for the profile file. The actual filename will be:
* [profile_file_prefix]_[timestamp].json
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
RunOptionsEnableProfiling: #type (options: *OrtRunOptions, profile_file_prefix: *u16) -> OrtStatusPtr #c_call;
/** \brief Disable profiling for this run
*
* \param[in] options
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
RunOptionsDisableProfiling: #type (options: *OrtRunOptions) -> OrtStatusPtr #c_call;
/** \brief Fetch an array of strings stored as an attribute in the graph node
*
* If `out` is nullptr, the value of `size` is set to the true size of the attribute
* array and a success status is returned.
*
* Otherwise, the strings and pointer array are allocated using `allocator`.
* The caller must free each string and the pointer array with `allocator`.
* If the attribute array is empty, `*out` is set to nullptr and `*size` is set to 0.
*
* \param[in] info instance
* \param[in] name name of the attribute to be parsed
* \param[in] allocator allocator used to allocate the returned string array and strings
* \param[out] out pointer to the returned array of null-terminated UTF-8 strings
* \param[out] size actual size of attribute array
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
KernelInfoGetAttributeArray_string: #type (info: *OrtKernelInfo, name: *u8, allocator: *OrtAllocator, out: ***u8, size: *u64) -> OrtStatusPtr #c_call;
/** \brief Set thread pool work callbacks for per-session thread pools.
*
* Stores callbacks on the Env that will be applied to per-session thread pools
* created by subsequent sessions. Does not affect sessions already created or
* global thread pools created via OrtApi::CreateEnvWithGlobalThreadPools.
*
* Requires ORT built with --enable_session_threadpool_callbacks.
*
* \param[in] env OrtEnv instance.
* \param[in] config Versioned callbacks configuration. ORT copies the struct contents;
* the caller does not need to keep the struct alive after this call returns.
* However, all pointers within the struct must remain valid for the
* lifetime of any session that uses these callbacks.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
SetPerSessionThreadPoolCallbacks: #type (env: *OrtEnv, config: *OrtThreadPoolCallbacksConfig) -> OrtStatusPtr #c_call;
/** \brief Check if the memory pattern optimization is enabled in the session options.
*
* \param[in] options
* \param[out] out Set to 1 if the memory pattern optimization is enabled, 0 otherwise.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.27.
*
* \see OrtApi::EnableMemPattern, OrtApi::DisableMemPattern
*/
GetMemPatternEnabled: #type (options: *OrtSessionOptions, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Get the current execution mode setting.
*
* \param[in] options
* \param[out] out Set to the current execution mode (ORT_SEQUENTIAL or ORT_PARALLEL).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.27.
*
* \see OrtApi::SetSessionExecutionMode
*/
GetSessionExecutionMode: #type (options: *OrtSessionOptions, out: *ExecutionMode) -> OrtStatusPtr #c_call;
/** \brief Release a previously captured graph and its associated resources.
*
* When graph capture is enabled, the EP records information during initial runs (e.g., GPU commands)
* and replays them on subsequent runs. This function releases the captured resources for a specific
* graph annotation ID, freeing memory.
*
* \param[in] session The OrtSession instance.
* \param[in] graph_annotation_id The annotation ID of the captured graph to release.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.27.
*/
SessionReleaseCapturedGraph: #type (session: *OrtSession, graph_annotation_id: s32) -> OrtStatusPtr #c_call;
/** \brief Retrieve an experimental function pointer by name.
*
* Experimental functions are not part of the stable ABI and may be added or removed between releases without notice.
* Use the companion header onnxruntime_experimental_c_api.h for typedefs, name constants, and (for C++) typed
* accessors.
*
* \param[in] name The null-terminated name of the experimental function to look up.
* Names follow the pattern "<target struct>_<function name>_SinceV<ORT API version added>".
* Name constants are defined in onnxruntime_experimental_c_api.h.
* \return The function pointer cast to ::OrtExperimentalFnPtr, or nullptr if the function is not available in this
* build. The caller must cast the returned pointer to the correct function pointer type before calling.
* Function pointer typedefs are defined in onnxruntime_experimental_c_api.h.
*
* \since Version 1.28.
*/
GetExperimentalFunction: #type (name: *u8) -> OrtExperimentalFnPtr #c_call;
/** \brief Get the framework synchronization stream associated with a kernel context.
*
* This returns the framework stream wrapper for the execution provider stream used by this kernel invocation.
* It is intended for APIs that need a stable framework stream object for stream-aware allocation and
* synchronization bookkeeping. Use KernelContext_GetGPUComputeStream when launching native GPU work.
*
* \param[in] context OrtKernelContext instance.
* \param[out] out Returns the framework synchronization stream, or nullptr if the kernel has no stream.
* Do not free or mutate the returned pointer. It is owned by the underlying session.
* The pointer may be stored and used for stream-aware allocation and synchronization
* bookkeeping beyond the Compute call (e.g. an allocator may persist it in arena
* chunks); it remains valid until the owning Session::Run() completes its teardown.
* Do not retain or dereference it after the run that produced this kernel context ends.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.28.
*/
KernelContext_GetSyncStream: #type (_context: *OrtKernelContext, out: **OrtSyncStream) -> OrtStatusPtr #c_call;
/** \brief Set the source ONNX model as a byte buffer for weightless EPContext sessions.
*
* When creating a session from a weightless EPContext model, the EP may need access to the source model's
* initializer data. This function provides the source model as an in-memory byte buffer, for scenarios
* where the source model is not available as a file on disk (e.g., loaded from a package or downloaded).
*
* The caller retains ownership of the buffer and must ensure it remains valid for the lifetime of the session.
*
* \note If the source model is available as a file on disk, use the session config entry
* "ep.context_source_model_path" (kOrtSessionOptionEpContextSourceModelPath) instead.
*
* \note If both a buffer (via this function) and a file path (via "ep.context_source_model_path") are
* provided, the EP should prefer the buffer. The recommended EP precedence is:
* buffer > file path > "onnx_model_filename" EPContext node attribute.
*
* \param[in] options The OrtSessionOptions instance.
* \param[in] source_model_data Pointer to the source model byte buffer.
* \param[in] source_model_data_length Size of the byte buffer in bytes.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.29.
*/
SessionOptionsSetWeightlessSourceModelBuffer: #type (options: *OrtSessionOptions, source_model_data: *void, source_model_data_length: u64) -> OrtStatusPtr #c_call;
/** \brief Get a preallocated output tensor without allocating an output.
*
* Returns a borrowed OrtValue that is already allocated for this output. The
* value may have been supplied by the caller of Run or IoBinding, or
* preallocated by ORT for an internal execution such as a control-flow
* subgraph. The returned value is valid only while the current kernel Compute
* call is executing and must not be released. If the output is unallocated or
* optional, `*output` is set to nullptr. This function never allocates,
* resizes, or replaces an output value.
*
* The caller must validate the returned tensor's shape and element type before
* writing to it, and must not write to an incompatible tensor. ORT generally
* rejects element type, rank, and static-dimension mismatches for top-level
* outputs during pre-run validation. For dynamic output dimensions, however,
* the shape check that KernelContext_GetOutput performs is skipped on this
* path, so a model with dynamic output shapes can yield a buffer smaller than
* the computed output. Calling KernelContext_GetOutput with the computed shape
* does not resize or replace an incompatible preallocated tensor; because the
* output slot is already allocated, ORT returns an error for the mismatch.
*
* \param[in] context OrtKernelContext instance.
* \param[in] output_index Output index in the current kernel.
* \param[out] output Borrowed preallocated output, or nullptr when the
* current output is unallocated or optional.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.30.
*/
KernelContext_GetPreallocatedOutput: #type (_context: *OrtKernelContext, output_index: u64, output: **OrtValue) -> OrtStatusPtr #c_call;
}
// Specifies some characteristics of inputs/outputs of custom ops:
// Specify if the inputs/outputs are one of:
// 1) Non-optional (input/output must be present in the node)
// 2) Optional (input/output may be absent in the node)
// 3) Variadic: A variadic input or output specifies N (i.e., the minimum arity) or more operands.
// Only the last input or output of a custom op may be marked as variadic.
// The homogeneity of the variadic input or output determines whether all operands must be of the same
// tensor element type.
OrtCustomOpInputOutputCharacteristic :: enum s32 {
INPUT_OUTPUT_REQUIRED :: 0;
INPUT_OUTPUT_OPTIONAL :: 1;
INPUT_OUTPUT_VARIADIC :: 2;
}
/*
* The OrtCustomOp structure defines a custom op's schema and its kernel callbacks. The callbacks are filled in by
* the implementor of the custom op.
*/
OrtCustomOp :: struct {
// Initialize to ORT_API_VERSION. ORT will cap the API version used to select the OrtApi passed
// to CreateKernel/CreateKernelV2 callbacks, so custom ops compiled against a newer ORT can load
// on an older runtime if they only use APIs available at the runtime version. Newer OrtCustomOp
// function pointers are gated by per-function version checks within ORT.
version: u32;
// This callback creates the kernel, which is a user defined
// parameter that is passed to the Kernel* callbacks below. It is
// recommended to use CreateKernelV2 which allows for a safe error
// propagation by returning an OrtStatusPtr.
CreateKernel: #type (op: *OrtCustomOp, api: *OrtApi, info: *OrtKernelInfo) -> *void #c_call;
// Returns the name of the op
GetName: #type (op: *OrtCustomOp) -> *u8 #c_call;
// Returns the type of the execution provider, return nullptr to use CPU execution provider
GetExecutionProviderType: #type (op: *OrtCustomOp) -> *u8 #c_call;
// Returns the count and types of the input & output tensors
GetInputType: #type (op: *OrtCustomOp, index: u64) -> ONNXTensorElementDataType #c_call;
GetInputTypeCount: #type (op: *OrtCustomOp) -> u64 #c_call;
GetOutputType: #type (op: *OrtCustomOp, index: u64) -> ONNXTensorElementDataType #c_call;
GetOutputTypeCount: #type (op: *OrtCustomOp) -> u64 #c_call;
// Perform a computation step. It is recommended to use
// KernelComputeV2 which allows for a safe error propagation by
// returning an OrtStatusPtr.
KernelCompute: #type (op_kernel: *void, _context: *OrtKernelContext) -> void #c_call;
KernelDestroy: #type (op_kernel: *void) -> void #c_call;
// Returns the characteristics of the input & output tensors
GetInputCharacteristic: #type (op: *OrtCustomOp, index: u64) -> OrtCustomOpInputOutputCharacteristic #c_call;
GetOutputCharacteristic: #type (op: *OrtCustomOp, index: u64) -> OrtCustomOpInputOutputCharacteristic #c_call;
// Returns the memory type of the input tensors. This API allows the custom op
// to place the inputs on specific devices. By default, it returns
// OrtMemTypeDefault, which means the input is placed on the default device for
// the execution provider. If the inputs need to be with different memory types,
// this function can be overridden to return the specific memory types.
GetInputMemoryType: #type (op: *OrtCustomOp, index: u64) -> OrtMemType #c_call;
// Returns the minimum number of input arguments expected for the variadic input.
// Applicable only for custom ops that have a variadic input.
GetVariadicInputMinArity: #type (op: *OrtCustomOp) -> s32 #c_call;
// Returns true (non-zero) if all arguments of a variadic input have to be of the same type (homogeneous),
// and false (zero) otherwise.
// Applicable only for custom ops that have a variadic input.
GetVariadicInputHomogeneity: #type (op: *OrtCustomOp) -> s32 #c_call;
// Returns the minimum number of output values expected for the variadic output.
// Applicable only for custom ops that have a variadic output.
GetVariadicOutputMinArity: #type (op: *OrtCustomOp) -> s32 #c_call;
// Returns true (non-zero) if all outputs values of a variadic output have to be of the same type (homogeneous),
// and false (zero) otherwise.
// Applicable only for custom ops that have a variadic output.
GetVariadicOutputHomogeneity: #type (op: *OrtCustomOp) -> s32 #c_call;
// Create the kernel state which is passed to each compute call.
CreateKernelV2: #type (op: *OrtCustomOp, api: *OrtApi, info: *OrtKernelInfo, kernel: **void) -> OrtStatusPtr #c_call;
// Perform the computation step.
KernelComputeV2: #type (op_kernel: *void, _context: *OrtKernelContext) -> OrtStatusPtr #c_call;
InferOutputShapeFn: #type (op: *OrtCustomOp, unknown0: *OrtShapeInferContext) -> OrtStatusPtr #c_call;
// Get start range
GetStartVersion: #type (op: *OrtCustomOp) -> s32 #c_call;
GetEndVersion: #type (op: *OrtCustomOp) -> s32 #c_call;
// Get the inplace_map that defines which output can reuse which input
// Callers will provide 2 raw int* and pass in their address, this function will fill these 2 arrays
// when return, output (*output_index)[i] may reuse the input (*input_index[i]).
// The return value is the size of these 2 arrays.
// Callers are responsible to delete these 2 arrays after use by calling OrtCustomOp::ReleaseMayInplace().
GetMayInplace: #type (input_index: **s32, output_index: **s32) -> u64 #c_call;
// Release the pointer input_index and output_index allocated from GetMayInplace() function.
// If GetMayInplace() is defined, this function MUST be defined as well.
ReleaseMayInplace: #type (input_index: *s32, output_index: *s32) -> void #c_call;
// Same as GetMayInplace() and ReleaseMayInplace()
GetAliasMap: #type (input_index: **s32, output_index: **s32) -> u64 #c_call;
ReleaseAliasMap: #type (input_index: *s32, output_index: *s32) -> void #c_call;
}
/**
* \brief The OrtModelEditorApi struct provides functions to create or edit an ONNX model.
*
* See onnxruntime/test/shared_lib/test_model_editor_api.cc for example usage.
*
* \since Version 1.22.
*/
OrtModelEditorApi :: struct {
/** \brief Create an OrtTypeInfo instance for a Tensor.
*
* Create an OrtTypeInfo instance for a Tensor to use as graph inputs/outputs with the Model Editor API.
*
* User can release `tensor_info` after creating the OrtTypeInfo.
*
* \param[in] tensor_info Tensor type and shape information.
* \param[out] type_info TypeInfo instance for the tensor.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateTensorTypeInfo: #type (tensor_info: *OrtTensorTypeAndShapeInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Create an OrtTypeInfo instance for a SparseTensor.
*
* Create an OrtTypeInfo instance for a SparseTensor to use as graph inputs/outputs with the Model Editor API.
*
* User can release `tensor_info` after creating the OrtTypeInfo.
*
* \param[in] tensor_info SparseTensor type and shape information.
* \param[out] type_info TypeInfo instance for the tensor.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateSparseTensorTypeInfo: #type (tensor_info: *OrtTensorTypeAndShapeInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Create an OrtTypeInfo instance for a Map.
*
* Create an OrtTypeInfo instance for a Map to use as graph inputs/outputs with the Model Editor API.
*
* User can release `map_value_type` after creating the OrtTypeInfo.
*
* \param[in] map_key_type Key type for the map.
* \param[in] map_value_type Value type for the map.
* \param[out] type_info TypeInfo instance for the map.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateMapTypeInfo: #type (map_key_type: ONNXTensorElementDataType, map_value_type: *OrtTypeInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Create an OrtTypeInfo instance for a Sequence.
*
* Create an OrtTypeInfo instance for a Sequence to use as graph inputs/outputs with the Model Editor API.
*
* User can release `sequence_type` after creating the OrtTypeInfo.
*
* \param[in] sequence_type Sequence type and shape information.
* \param[out] type_info TypeInfo instance for the sequence.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateSequenceTypeInfo: #type (sequence_type: *OrtTypeInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Create an OrtTypeInfo instance for an Optional.
*
* Create an OrtTypeInfo instance for an Optional to use as graph inputs/outputs with the Model Editor API.
*
* User can release `contained_type` after creating the OrtTypeInfo.
*
* \param[in] contained_type Tensor type and shape information.
* \param[out] type_info TypeInfo instance for the tensor.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateOptionalTypeInfo: #type (contained_type: *OrtTypeInfo, _type_info: **OrtTypeInfo) -> OrtStatusPtr #c_call;
/** \brief Create an OrtValueInfo for use as an OrtGraph input or output.
*
* \param[in] name The name of the input or output.
* \param[in] type_info The type information for the input or output. The provided value is copied.
* \param[out] value_info The OrtValueInfo instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateValueInfo: #type (name: *u8, _type_info: *OrtTypeInfo, value_info: **OrtValueInfo) -> OrtStatusPtr #c_call;
/** \brief Create an OrtNode to add to an OrtGraph.
*
* Create an OrtNode.
*
* Create attributes with CreateOpAttr. OrtOpAttr instances are copied.
*
* \param[in] operator_name The name of the operator.
* \param[in] domain_name The domain of the operator. Use an empty string for ONNX operators.
* \param[in] node_name The name of the node.
* \param[in] input_names The names of the inputs.
* \param[in] input_names_len The number of input names.
* \param[in] output_names The names of the outputs.
* \param[in] output_names_len The number of output names.
* \param[in] attributes The optional attributes of the node.
* \param[in] attribs_len The number of attributes. May be zero.
* \param[out] node The OrtNode instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateNode: #type (operator_name: *u8, domain_name: *u8, node_name: *u8, input_names: **u8, input_names_len: u64, output_names: **u8, output_names_len: u64, attributes: **OrtOpAttr, attribs_len: u64, node: **OrtNode) -> OrtStatusPtr #c_call;
/** \brief Create an OrtGraph
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.22.
*/
CreateGraph: #type (graph: **OrtGraph) -> OrtStatusPtr #c_call;
/** \brief Set the inputs for the OrtGraph.
*
* Set the graph inputs. This will replace any existing inputs with the new values.
*
* Atomicity / all-or-nothing: on success, the OrtGraph takes ownership of every OrtValueInfo in
* `inputs`, and each entry in the array is reset to nullptr to make the transfer explicit. On any
* failure, the graph's previous inputs are preserved and ownership of NONE of the OrtValueInfo
* instances is transferred -- the caller remains responsible for releasing them. Calling
* OrtApi::ReleaseValueInfo on an entry whose array slot has been nulled out would cause a double-free.
*
* \param[in] graph The OrtGraph instance to update.
* \param[in] inputs The input OrtValueInfo instances.
* \param[in] inputs_len The number of input OrtValueInfo instances.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
SetGraphInputs: #type (graph: *OrtGraph, inputs: **OrtValueInfo, inputs_len: u64) -> OrtStatusPtr #c_call;
/** \brief Set the outputs for the OrtGraph.
*
* Set the graph outputs. This will replace any existing outputs with the new values.
*
* Atomicity / all-or-nothing: on success, the OrtGraph takes ownership of every OrtValueInfo in
* `outputs`, and each entry in the array is reset to nullptr to make the transfer explicit. On any
* failure, the graph's previous outputs are preserved and ownership of NONE of the OrtValueInfo
* instances is transferred -- the caller remains responsible for releasing them. Calling
* OrtApi::ReleaseValueInfo on an entry whose array slot has been nulled out would cause a double-free.
*
* \param[in] graph The OrtGraph instance to update.
* \param[in] outputs The output OrtValueInfo instances.
* \param[in] outputs_len The number of output OrtValueInfo instances.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
SetGraphOutputs: #type (graph: *OrtGraph, outputs: **OrtValueInfo, outputs_len: u64) -> OrtStatusPtr #c_call;
/** \brief Add an initializer to the OrtGraph
*
* Atomicity / all-or-nothing: on success, the OrtGraph takes ownership of `tensor` and the caller
* must NOT call OrtApi::ReleaseValue on it. On any failure, ownership is NOT transferred and the caller
* remains responsible for releasing the OrtValue. Calling OrtApi::ReleaseValue after a successful
* transfer would cause a double-free.
* Adding the same OrtValue pointer twice (under any name) is rejected with ORT_INVALID_ARGUMENT.
* Adding a duplicate initializer name is also rejected. The Model Editor API does not currently
* support removing or replacing an initializer once it has been added.
*
* Two options:
*
* Allocated memory:
* Use OrtApi::CreateTensorAsOrtValue (allocates memory) and populate the tensor with the data.
* Set `data_is_external` to false.
*
* Pre-existing memory:
* Use OrtApi::CreateTensorWithDataAsOrtValue or OrtApi::CreateTensorWithDataAndDeleterAsOrtValue to create an OrtValue
* with a tensor that contains a pointer to the existing data.
* Set `data_is_external` to true.
*
* The pointer must remain valid for the duration of the inference session.
* If using OrtApi::CreateTensorWithDataAsOrtValue you are responsible for freeing the memory after the inference session
* is released.
* If using OrtApi::CreateTensorWithDataAndDeleterAsOrtValue, ORT will free the memory using the provided deleter as
* soon as the OrtValue is no longer in use.
*
* NOTE: A tensor containing pre-existing memory MUST have 128 bytes of data or more.
* For smaller tensors use OrtApi::CreateTensorAsOrtValue.
*
* ONNX shape inferencing does not support external data. An initializer involved in shape inferencing is
* typically small (a single value or limited by the rank of a tensor) and uses less than 128 bytes of
* memory, so this limit acts as a simple catch-all rule to avoid issues.
* e.g. Reshape's `shape`, Clip's `min` and `max`, various ops `axes`.
*
* \param[in] graph The OrtGraph instance to update.
* \param[in] name The value name for the initializer.
* \param[in] tensor The OrtValue instance containing the tensor data.
* \param[in] data_is_external Set to true if the data is external and should not be copied.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
AddInitializerToGraph: #type (graph: *OrtGraph, name: *u8, tensor: *OrtValue, data_is_external: bool) -> OrtStatusPtr #c_call;
/** \brief Add an OrtNode to an OrtGraph
*
* Atomicity / all-or-nothing: on success, the OrtGraph takes ownership of `node` and the caller
* must NOT call OrtApi::ReleaseNode. On any failure, ownership is NOT transferred and the caller remains
* responsible for releasing the OrtNode. Calling OrtApi::ReleaseNode after a successful transfer would
* cause a double-free.
* Adding the same OrtNode pointer twice is rejected with ORT_INVALID_ARGUMENT.
*
* \param[in] graph The OrtGraph instance to update.
* \param[in] node The OrtNode instance to add to the graph.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
AddNodeToGraph: #type (graph: *OrtGraph, node: *OrtNode) -> OrtStatusPtr #c_call;
/** \brief Create an OrtModel.
*
* Create an OrtModel.
*
* This can be used to build a new model, or to augment an existing model.
*
* \param[in] domain_names The domain names for the model.
* If augmenting an existing model add additional domains if needed.
* \param[in] opset_versions The opset versions for the model.
* If augmenting an existing model add additional opset versions if needed.
* \param[in] opset_entries_len The number of domain_names and opset_versions entries.
* Domain and opset entries should be 1:1
* \param[out] model The OrtModel instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateModel: #type (domain_names: **u8, opset_versions: *s32, opset_entries_len: u64, model: **OrtModel) -> OrtStatusPtr #c_call;
/** \brief Add an OrtGraph to an OrtModel.
*
* Add the graph to a model. Each OrtModel may hold at most one OrtGraph; a second call is rejected
* with ORT_INVALID_ARGUMENT.
*
* Atomicity / all-or-nothing: on success, the OrtModel takes ownership of `graph` and the caller
* must NOT call OrtApi::ReleaseGraph. On any failure, ownership is NOT transferred and the caller
* remains responsible for releasing the OrtGraph. Calling OrtApi::ReleaseGraph after a successful
* transfer would cause a double-free.
*
* \param[in] model The OrtModel instance to update.
* \param[in] graph The OrtGraph instance to add to the model.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
AddGraphToModel: #type (model: *OrtModel, graph: *OrtGraph) -> OrtStatusPtr #c_call;
/** \brief Create an OrtSession using the OrtModel.
*
* Create an inference session using the OrtModel instance.
* The OrtModel should have been populated with an OrtGraph containing nodes and initializers, and SetGraphInputs
* and SetGraphOutputs must have been called.
* This will validate the model, run optimizers, and prepare the session for inferencing.
*
* OrtApi::ReleaseModel must be called to free the OrtModel after session creation.
*
* \param[in] env The OrtEnv instance.
* \param[in] model The OrtModel instance.
* \param[in] options The OrtSessionOptions instance.
* \param[out] out The OrtSession instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateSessionFromModel: #type (env: *OrtEnv, model: *OrtModel, options: *OrtSessionOptions, out: **OrtSession) -> OrtStatusPtr #c_call;
/** \brief Create an OrtSession to augment an existing model.
*
* Create an OrtSession with an existing model that will be augmented with additional nodes and initializers.
* Nodes can be added before or after the existing nodes in the model. ONNX Runtime will connect the nodes when the
* model is finalized.
*
* To add nodes and initializers to the existing model, first create an OrtModel using CreateModel().
* Add nodes and initializers to the OrtModel using AddNodeToGraph() and AddInitializerToGraph().
* Graph inputs/outputs should be updated with SetGraphInputs() and SetGraphOutputs() as needed to reflect changes made
* by the new nodes. The list of graph inputs/outputs should be for the overall model and not just the new nodes.
*
* Add the new information from the OrtModel to the original model using ApplyModelToSession(), and prepare the
* session for inferencing by calling FinalizeModelEditorSession().
*
* \param{in} env The OrtEnv instance.
* \param{in} model_path The path to the existing ONNX model to augment.
* \param{in} options The OrtSessionOptions instance.
* \param{out} out The created OrtSession instance.
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateModelEditorSession: #type (env: *OrtEnv, model_path: *u16, options: *OrtSessionOptions, out: **OrtSession) -> OrtStatusPtr #c_call;
/** \brief Create an OrtSession to augment an existing model.
*
* Create an OrtSession with an existing model that will be augmented with additional nodes and initializers.
* Nodes can be added before or after the existing nodes in the model. ONNX Runtime will connect the nodes when the
* model is finalized.
*
* To add nodes and initializers to the existing model, first create an OrtModel using CreateModel().
* Add nodes and initializers to the OrtModel using AddNodeToGraph() and AddInitializerToGraph().
* Graph inputs/outputs should be updated with SetGraphInputs() and SetGraphOutputs() as needed to reflect changes made
* by the new nodes. The list of graph inputs/outputs should be for the overall model and not just the new nodes.
*
* Add the new information from the OrtModel to the original model using ApplyModelToSession(), and prepare the
* session for inferencing by calling FinalizeModelEditorSession().
*
* \param{in} env The OrtEnv instance.
* \param{in} model_data The model data for the existing model to augment.
* \param{in} model_data_length The length of the model data.
* \param{in} options The OrtSessionOptions instance.
* \param{out} out The created OrtSession instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateModelEditorSessionFromArray: #type (env: *OrtEnv, model_data: *void, model_data_length: u64, options: *OrtSessionOptions, out: **OrtSession) -> OrtStatusPtr #c_call;
/** \brief Query the session for the opset version of a domain.
*
* When using the Model Editor API to augment a model, any new nodes must conform to the opset version of the
* original model. To do that the user must be able to discover that opset version.
* Returns an error if the domain is not used in the model.
*
* \param[in] session OrtSession to query
* \param[in] domain Domain to query. The ONNX domain is an empty string.
* \param[out] opset The opset version of the domain.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
SessionGetOpsetForDomain: #type (session: *OrtSession, domain: *u8, opset: *s32) -> OrtStatusPtr #c_call;
/** \brief Apply changes to augment the ONNX model in a session created using CreateModelEditorSession[FromArray]
*
* Adds new nodes and updates graph inputs/outputs using `model` to augment the original ONNX model in the session.
* All changes will be validated.
* Call FinalizeModelEditorSession to prepare the session for inferencing.
*
* Existing input/outputs will only be updated if the OrtGraph inputs/outputs are set in the OrtModel.
* i.e. you don't need to call SetGraphInputs/SetGraphOutputs if they are unchanged.
*
* ReleaseOrtModel must be called to free the OrtModel after it is applied to the session.
*
* \param[in] session OrtSession to update. Session must have been created using CreateModelEditorSession[FromArray].
* \param[in] model OrtModel containing new nodes, new initializers, and updated graph input and/or output info.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ApplyModelToModelEditorSession: #type (session: *OrtSession, model: *OrtModel) -> OrtStatusPtr #c_call;
/** \brief Finalize the Model Editor session that was created using CreateModelEditorSession[FromArray].
*
* Finalize the Model Editor session that augmented an ONNX model by adding new nodes.
* This will run optimizers and prepare the session for inferencing.
*
* \param[in] session OrtSession to finalize. Session must have been created using CreateModelEditorSession[FromArray].
* \param[in] options OrtSessionOptions to use for the session.
* \param[in] prepacked_weights_container Optional OrtPrepackedWeightsContainer to use for the session.
Set to nullptr if not used.
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
FinalizeModelEditorSession: #type (session: *OrtSession, options: *OrtSessionOptions, prepacked_weights_container: *OrtPrepackedWeightsContainer) -> OrtStatusPtr #c_call;
}
/** \brief Flags representing options to enable when compiling a model.
*/
OrtCompileApiFlags :: enum s32 {
OrtCompileApiFlags_NONE :: 0;
OrtCompileApiFlags_ERROR_IF_NO_NODES_COMPILED :: 1;
OrtCompileApiFlags_ERROR_IF_OUTPUT_FILE_EXISTS :: 2;
}
/**
* \brief The OrtCompileApi struct provides functions to compile ONNX models.
*
* Execution providers that support compilation fuse a subgraph into an EPContext node that wraps a provider-specific
* binary representation of the subgraph.
* For more details about the EPContext design, refer to:
* \htmlonly
* <a href="https://onnxruntime.ai/docs/execution-providers/EP-Context-Design.html">EPContext design document.</a>
* \endhtmlonly
*
* Example (error handling not shown):
* OrtStatus* status = NULL;
* OrtCompileApi* compile_api = ort_api->GetCompileApi();
* OrtModelCompilationOptions* compile_options = NULL;
*
* status = compile_api->CreateModelCompilationOptionsFromSessionOptions(env, session_options, &compile_options);
* status = compile_api->ModelCompilationOptions_SetInputModelPath(compile_options, ORT_TSTR("model.onnx"));
* status = compile_api->ModelCompilationOptions_SetOutputModelPath(compile_options, ORT_TSTR("model.compiled.onnx"));
* status = compile_api->CompileModel(env, compile_options);
* compile_api->ReleaseModelCompilationOptions(compile_options);
*
* \since Version 1.22.
*/
OrtCompileApi :: struct {
/// \name OrtModelCompilationOptions
/// @{
ReleaseModelCompilationOptions: #type (input: *OrtModelCompilationOptions) -> void #c_call;
/** \brief Creates an OrtModelCompilationOptions object from an existing OrtSessionOptions object.
*
* An OrtModelCompilationOptions object contains the settings used to generate a compiled ONNX model.
* The OrtSessionOptions object has the execution providers with which the model will be compiled.
*
* ReleaseOrtModelCompilationsOptions must be called to free the OrtModelCompilationOptions after calling
* CompileModel.
*
* \note By default, the GraphOptimizationLevel is set to ORT_DISABLE_ALL. Use
* ModelCompilationOptions_SetGraphOptimizationLevel to enable graph optimizations.
*
* \param[in] env OrtEnv object.
* \param[in] session_options The OrtSessionOptions instance from which to create the OrtModelCompilationOptions.
* \param[out] out The created OrtModelCompilationOptions instance.
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateModelCompilationOptionsFromSessionOptions: #type (env: *OrtEnv, session_options: *OrtSessionOptions, out: **OrtModelCompilationOptions) -> OrtStatusPtr #c_call;
/** \brief Sets the file path to the input ONNX model to compile.
*
* The input model's location (e.g., file path or memory buffer) must be set with either
* ModelCompilationOptions_SetInputModelPath or ModelCompilationOptions_SetInputModelFromBuffer.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] input_model_path Null terminated string of the path (wchar on Windows, char otherwise).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ModelCompilationOptions_SetInputModelPath: #type (model_compile_options: *OrtModelCompilationOptions, input_model_path: *u16) -> OrtStatusPtr #c_call;
/** \brief Sets the buffer that stores the bytes of the loaded ONNX model to compile.
*
* The input model's location (e.g., file path or memory buffer) must be set with either
* ModelCompilationOptions_SetInputModelPath or ModelCompilationOptions_SetInputModelFromBuffer.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] input_model_data Buffer containing the loaded ONNX model bytes.
* \param[in] input_model_data_size The number of bytes in the `input_model_data` buffer.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ModelCompilationOptions_SetInputModelFromBuffer: #type (model_compile_options: *OrtModelCompilationOptions, input_model_data: *void, input_model_data_size: u64) -> OrtStatusPtr #c_call;
/** \brief Sets the file path for the output ONNX model generated by CompileModel.
*
* The output model's location (e.g., file path or memory buffer) can be set with either
* ModelCompilationOptions_SetOutputModelPath or ModelCompilationOptions_SetOutputModelBuffer.
*
* If the output model's location is not set, ONNX Runtime will generate an output file with a path based on
* the input model's file path. Examples:
* /Path/my_model.onnx -> /Path/my_model_ctx.onnx
* /Path/my_model -> /Path/my_model_ctx.onnx
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] output_model_path Null terminated string of the path (wchar on Windows, char otherwise).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ModelCompilationOptions_SetOutputModelPath: #type (model_compile_options: *OrtModelCompilationOptions, output_model_path: *u16) -> OrtStatusPtr #c_call;
/** \brief Optionally sets the file that should store external initializers for the compiled ONNX model.
* If not set, initializers are stored within the model.
*
* Only initializers for nodes that were not compiled are stored in the external initializers file.
* Compiled nodes contain their initializer data within the `ep_cache_context` attribute of EPContext nodes.
* Refer to ModelCompilationOptions_SetEpContextEmbedMode.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] external_initializers_file_path Null terminated string of the path to the file.
* \param[in] external_initializers_size_threshold Initializers larger than this threshold are stored in the file.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ModelCompilationOptions_SetOutputModelExternalInitializersFile: #type (model_compile_options: *OrtModelCompilationOptions, external_initializers_file_path: *u16, external_initializers_size_threshold: u64) -> OrtStatusPtr #c_call;
/** \brief Configures model compilation to store the output compiled ONNX model in a buffer.
*
* The caller passes an OrtAllocator that ONNX Runtime uses to allocate memory for the buffer.
*
* The output model's location (e.g., file path or memory buffer) can be set with either
* ModelCompilationOptions_SetOutputModelPath or ModelCompilationOptions_SetOutputModelBuffer.
*
* If the output model's location is not set, ONNX Runtime will generate an output file with a path based on
* the input model's file path. Examples:
* /Path/my_model.onnx -> /Path/my_model_ctx.onnx
* /Path/my_model -> /Path/my_model_ctx.onnx
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] allocator The allocator used to allocate the buffer for the compiled model.
* \param[out] output_model_buffer_ptr Pointer to the buffer that stores the compiled model.
* \param[out] output_model_buffer_size_ptr Pointer set to the size of output model in bytes.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ModelCompilationOptions_SetOutputModelBuffer: #type (model_compile_options: *OrtModelCompilationOptions, allocator: *OrtAllocator, output_model_buffer_ptr: **void, output_model_buffer_size_ptr: *u64) -> OrtStatusPtr #c_call;
/** \brief Enables or disables the embedding of EPContext binary data into the `ep_cache_context` attribute
* of EPContext nodes. Defaults to false.
*
* If enabled, the `ep_cache_context` attribute of EPContext nodes will store the context binary data, which may
* include weights for compiled subgraphs.
*
* If disabled, the `ep_cache_context` attribute of EPContext nodes will contain the path to the file containing the
* context binary data. The path is set by the execution provider creating the EPContext node.
*
* More details relate to EPContext design refers to:
* \htmlonly
* <a href="https://onnxruntime.ai/docs/execution-providers/EP-Context-Design.html">EPContext design document.</a>
* \endhtmlonly
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] embed_ep_context_in_model True to embed EPContext binary data into the EPContext node
* `ep_cache_context` attributes.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ModelCompilationOptions_SetEpContextEmbedMode: #type (model_compile_options: *OrtModelCompilationOptions, embed_ep_context_in_model: bool) -> OrtStatusPtr #c_call;
/** \brief Compiles an input ONNX model with the given compilation options.
*
* \param[in] env OrtEnv object.
* \param[in] model_options The compilation options that defines compilation options for a model.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CompileModel: #type (env: *OrtEnv, model_options: *OrtModelCompilationOptions) -> OrtStatusPtr #c_call;
/** \brief Sets flags from OrtCompileApiFlags that represent one or more boolean options to enable.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] flags bitwise OR of flags in OrtCompileApiFlags to enable.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ModelCompilationOptions_SetFlags: #type (model_compile_options: *OrtModelCompilationOptions, flags: u32) -> OrtStatusPtr #c_call;
/** Sets information related to EP context binary file.
*
* EP uses this information to decide the location and context binary file name.
* Used while compiling model with input and output in memory buffer
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] output_directory Null terminated string of the path (wchar on Windows, char otherwise).
* \param[in] model_name Null terminated string of the model name (wchar on Windows, char otherwise).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ModelCompilationOptions_SetEpContextBinaryInformation: #type (model_compile_options: *OrtModelCompilationOptions, output_directory: *u16, model_name: *u16) -> OrtStatusPtr #c_call;
/** Set the graph optimization level.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] graph_optimization_level The graph optimization level.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ModelCompilationOptions_SetGraphOptimizationLevel: #type (model_compile_options: *OrtModelCompilationOptions, graph_optimization_level: GraphOptimizationLevel) -> OrtStatusPtr #c_call;
/** \brief Sets a OrtWriteBufferFunc function that is called by ORT to write out the output model's serialized
* ONNX bytes.
*
* The provided write function may be called repeatedly until then entire output model has been written out. Each call
* to the write function is expected to consume the entire input buffer.
*
* The output model's destination (e.g., file path, memory buffer, or stream) can be set with any of the functions
* that begin with ModelCompilationOptions_SetOutputModel____.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] write_func The OrtWriteBufferFunc function called by ORT when writing out the model.
* \param[in] state Opaque state passed as the first argument to OrtWriteBufferFunc. Can be NULL.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ModelCompilationOptions_SetOutputModelWriteFunc: #type (model_compile_options: *OrtModelCompilationOptions, write_func: OrtWriteBufferFunc, state: *void) -> OrtStatusPtr #c_call;
/** \brief Sets a OrtGetInitializerLocationFunc function that is called by ORT for every initializer in the generated
* model. Allows implementer to specify whether initializers should be stored within the model or externally.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] get_initializer_location_func The OrtGetInitializerLocationFunc function called by ORT when
* to determine the location of the initializer.
* \param[in] state Opaque state passed as the first argument to OrtGetInitializerLocationFunc. Can be NULL.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ModelCompilationOptions_SetOutputModelGetInitializerLocationFunc: #type (model_compile_options: *OrtModelCompilationOptions, get_initializer_location_func: OrtGetInitializerLocationFunc, state: *void) -> OrtStatusPtr #c_call;
/** \brief Sets the OrtModel to compile.
*
* Sets an OrtModel created via the Model Editor API as the input for compilation.
*
* The input model's source (file path, memory buffer, or OrtModel) must be set with
* one of: ModelCompilationOptions_SetInputModelPath, ModelCompilationOptions_SetInputModelFromBuffer,
* or ModelCompilationOptions_SetInputModel.
*
* The OrtModel must have a complete graph with inputs, outputs, and nodes defined.
* The caller retains ownership of the OrtModel and must not release it until after
* CompileModel returns.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] model The OrtModel to compile. The model is borrowed (not copied or owned).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
ModelCompilationOptions_SetInputModel: #type (model_compile_options: *OrtModelCompilationOptions, model: *OrtModel) -> OrtStatusPtr #c_call;
/** \brief Enable or disable weightless mode for model compilation.
*
* When enabled, the compiled EPContext model will not embed constant initializer data in the EP's
* compiled binary. Instead, the initializer data must be provided when creating a session from the
* compiled model, either from the source model (via the "onnx_model_filename" EPContext node attribute
* or the "ep.context_source_model_path" session option) or from externalized weights.
*
* This enables smaller compiled models and allows sharing initializer data across multiple compiled
* model variants (e.g., multi-platform caches for different hardware generations).
*
* ORT verifies that the target EP supports weightless mode during CompileModel() by calling
* OrtEp::GetWeightlessSupport(). If the EP does not support weightless mode, CompileModel()
* returns an error.
*
* \param[in] model_compile_options The OrtModelCompilationOptions instance.
* \param[in] use_weightless If true, enable weightless mode. If false, disable (default behavior).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.29.
*/
ModelCompilationOptions_SetWeightlessEnabled: #type (model_compile_options: *OrtModelCompilationOptions, use_weightless: bool) -> OrtStatusPtr #c_call;
}
/**
* \brief The OrtInteropApi struct provides functions for external resource interop with execution providers.
*
* This API enables importing external GPU resources (memory and semaphores) for zero-copy sharing
* between ORT inference and other GPU workloads (e.g., D3D12 applications, media pipelines).
*
* The API is designed to be EP-agnostic and can be extended to support various GPU interop mechanisms
* (D3D12 shared handles, CUDA external memory, Vulkan, etc.).
*
* Example usage (error handling not shown):
* const OrtInteropApi* interop_api = ort_api->GetInteropApi();
* OrtExternalResourceImporter* importer = NULL;
*
* status = interop_api->CreateExternalResourceImporterForDevice(ep_device, &importer);
* if (importer == nullptr) {
* // External resource import is optional for EPs to implement
* return;
* }
* bool can_import = false;
* status = interop_api->CanImportMemory(importer, ORT_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE, &can_import);
* if (can_import) {
* OrtExternalMemoryHandle* mem_handle = NULL;
* status = interop_api->ImportMemory(importer, &mem_desc, &mem_handle);
* // ... use mem_handle to create tensors ...
* interop_api->ReleaseExternalMemoryHandle(mem_handle);
* }
* interop_api->ReleaseExternalResourceImporter(importer);
*
* \since Version 1.24.
*/
OrtInteropApi :: struct {
/** \brief Create an external resource importer for a specific EP device.
*
* The external resource importer is a capability object that provides methods for importing
* external GPU memory and semaphores for zero-copy import with an execution provider.
*
* This is an optional EP capability. If the EP does not support external resource import,
* out_importer is set to nullptr and the function returns success (nullptr status).
* This allows callers to use the simple "if (status != nullptr) handle_error()" pattern
* and check out_importer separately for capability detection.
*
* \param[in] ep_device The OrtEpDevice instance to create the importer for.
* \param[out] out_importer Output parameter set to the created OrtExternalResourceImporter instance,
* or nullptr if the EP does not support external resource import.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CreateExternalResourceImporterForDevice: #type (ep_device: *OrtEpDevice, out_importer: **OrtExternalResourceImporter) -> OrtStatusPtr #c_call;
/** \brief Release an OrtExternalResourceImporter instance.
*
* \param[in] input The OrtExternalResourceImporter instance to release. May be nullptr.
*
* \since Version 1.24.
*/
ReleaseExternalResourceImporter: #type (input: *OrtExternalResourceImporter) -> void #c_call;
/** \brief Check if the external resource importer can import a specific memory handle type.
*
* \param[in] importer The OrtExternalResourceImporter instance.
* \param[in] handle_type The type of external memory handle to check.
* \param[out] out_supported Set to true if the handle type is supported.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CanImportMemory: #type (importer: *OrtExternalResourceImporter, handle_type: OrtExternalMemoryHandleType, out_supported: *bool) -> OrtStatusPtr #c_call;
/** \brief Import external memory into the execution provider.
*
* \param[in] importer The OrtExternalResourceImporter instance.
* \param[in] desc Descriptor containing the external memory handle and properties.
* \param[out] out_handle Output parameter set to the created OrtExternalMemoryHandle.
* The caller owns the returned handle and must call ReleaseExternalMemoryHandle to free it.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
ImportMemory: #type (importer: *OrtExternalResourceImporter, desc: *OrtExternalMemoryDescriptor, out_handle: **OrtExternalMemoryHandle) -> OrtStatusPtr #c_call;
/** \brief Release an OrtExternalMemoryHandle instance.
*
* \param[in] input The OrtExternalMemoryHandle instance to release. May be nullptr.
*
* \since Version 1.24.
*/
ReleaseExternalMemoryHandle: #type (input: *OrtExternalMemoryHandle) -> void #c_call;
/** \brief Create a tensor backed by imported external memory.
*
* The created tensor is a view over the imported memory and does not copy data.
* The OrtExternalMemoryHandle must remain valid for the lifetime of the tensor.
*
* \param[in] importer The OrtExternalResourceImporter instance.
* \param[in] mem_handle The imported external memory handle.
* \param[in] tensor_desc Descriptor specifying tensor element type, shape, and optional offset.
* \param[out] out_tensor Output parameter set to the created OrtValue containing the tensor.
* The caller owns the returned tensor and must call ReleaseValue to free it.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CreateTensorFromMemory: #type (importer: *OrtExternalResourceImporter, mem_handle: *OrtExternalMemoryHandle, tensor_desc: *OrtExternalTensorDescriptor, out_tensor: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Check if the external resource importer can import a specific semaphore type.
*
* \param[in] importer The OrtExternalResourceImporter instance.
* \param[in] type The type of external semaphore to check.
* \param[out] out_supported Set to true if the semaphore type is supported.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CanImportSemaphore: #type (importer: *OrtExternalResourceImporter, type: OrtExternalSemaphoreType, out_supported: *bool) -> OrtStatusPtr #c_call;
/** \brief Import an external semaphore into the execution provider.
*
* The returned OrtExternalSemaphoreHandle can be used with WaitSemaphore and an OrtSyncStream
* to synchronize execution with external operations.
*
* \param[in] importer The OrtExternalResourceImporter instance.
* \param[in] desc Descriptor containing the external semaphore handle and type.
* \param[out] out_handle Output parameter set to the created OrtExternalSemaphoreHandle.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
ImportSemaphore: #type (importer: *OrtExternalResourceImporter, desc: *OrtExternalSemaphoreDescriptor, out_handle: **OrtExternalSemaphoreHandle) -> OrtStatusPtr #c_call;
/** \brief Release an OrtExternalSemaphoreHandle instance.
*
* \param[in] input The OrtExternalSemaphoreHandle instance to release. May be nullptr.
*
* \since Version 1.24.
*/
ReleaseExternalSemaphoreHandle: #type (input: *OrtExternalSemaphoreHandle) -> void #c_call;
/** \brief Wait on an external semaphore on the EP's stream.
*
* Inserts a wait operation into the EP's stream that blocks until the semaphore
* reaches the specified value. This is used to synchronize with external GPU work
* (e.g., D3D12 timeline fence).
*
* \param[in] importer The OrtExternalResourceImporter instance.
* \param[in] semaphore_handle The imported external semaphore.
* \param[in] stream The OrtSyncStream to wait on.
* \param[in] value The fence/semaphore value to wait for.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
WaitSemaphore: #type (importer: *OrtExternalResourceImporter, semaphore_handle: *OrtExternalSemaphoreHandle, stream: *OrtSyncStream, value: u64) -> OrtStatusPtr #c_call;
/** \brief Signal an external semaphore from the EP's stream.
*
* Inserts a signal operation into the EP's stream that sets the semaphore
* to the specified value when reached. This is used to notify external GPU work
* (e.g., D3D12 timeline fence) that ORT inference is complete.
*
* \param[in] importer The OrtExternalResourceImporter instance.
* \param[in] semaphore_handle The imported external semaphore.
* \param[in] stream The OrtSyncStream to signal from.
* \param[in] value The fence/semaphore value to signal.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
SignalSemaphore: #type (importer: *OrtExternalResourceImporter, semaphore_handle: *OrtExternalSemaphoreHandle, stream: *OrtSyncStream, value: u64) -> OrtStatusPtr #c_call;
/** \brief Initialize graphics interop for an execution provider device.
*
* Requests the EP factory to set up graphics interop for the given ep_device using the
* provided config. How the factory uses the config (e.g. creating a context, affecting
* later stream creation) is implementation-defined. The config (OrtGraphicsInteropConfig)
* supplies the graphics API and optional handles; the command_queue member is optional.
* Passing command_queue and calling this before CreateSyncStreamForEpDevice for the same
* ep_device may allow the factory to enable more efficient GPU-side sync; see the EP
* documentation for details.
*
* Initialization is tied to the OrtEpDevice instance and applies across all sessions
* that use that ep_device (i.e. it is global per ep_device, not per-session).
*
* \param[in] ep_device The OrtEpDevice to initialize graphics interop for.
* \param[in] config Configuration (OrtGraphicsInteropConfig): required fields are version (ORT_API_VERSION)
* and graphics_api; optional handles include command_queue and additional_options.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
InitGraphicsInteropForEpDevice: #type (ep_device: *OrtEpDevice, config: *OrtGraphicsInteropConfig) -> OrtStatusPtr #c_call;
/** \brief Deinitialize graphics interop for an execution provider device.
*
* This function cleans up the graphics interop context that was created by InitGraphicsInteropForEpDevice.
* Should be called when graphics interop is no longer needed for the ep_device.
*
* The caller must release all resources that use the interop context before calling this function:
* - OrtSyncStream instances created for this ep_device via CreateSyncStreamForEpDevice
* - OrtExternalSemaphoreHandle and OrtExternalResourceImporter instances created for this ep_device
* Failure to do so may lead to undefined behavior if the implementation destroys the underlying context.
*
* \param[in] ep_device The OrtEpDevice to deinitialize graphics interop for.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
DeinitGraphicsInteropForEpDevice: #type (ep_device: *OrtEpDevice) -> OrtStatusPtr #c_call;
}
OrtEpGraphSupportInfo :: struct {}
OrtMemoryDevice :: struct {}
OrtNodeComputeContext :: struct {}
OrtOpSchema :: struct {}
OrtOpSchemaTypeConstraint :: struct {}
OrtProfilingEventsContainer :: struct {}
OrtProfilingEvent :: struct {}
/** \brief Base struct for imported external memory handles.
*
* EPs derive from this struct to add EP-specific fields (e.g., CUdeviceptr for CUDA).
* EP is responsible for creating and releasing instances of the derived type.
*
* Example derived type for CUDA EP:
* \code
* struct MyCudaExternalMemoryHandle : OrtExternalMemoryHandle {
* CUexternalMemory ext_memory;
* CUdeviceptr mapped_ptr;
* bool is_dedicated;
* };
* \endcode
*
* \since Version 1.24.
*/
OrtExternalMemoryHandle :: struct {
version: u32; ///< Must be ORT_API_VERSION
ep_device: *OrtEpDevice; ///< EP device that created this handle
descriptor: OrtExternalMemoryDescriptor; ///< External memory descriptor
/** \brief Release callback for this handle. EP sets this to its release function.
*
* ORT calls this when ReleaseExternalMemoryHandle is invoked. The EP's callback
* should cast the handle to its derived type and delete it.
*/
Release: #type (handle: *OrtExternalMemoryHandle) -> void #c_call;
}
/** \brief Base struct for imported external semaphore handles.
*
* EPs derive from this struct to add EP-specific fields (e.g., CUexternalSemaphore for CUDA).
* EP is responsible for creating and releasing instances of the derived type.
*
* Example derived type for CUDA EP:
* \code
* struct MyCudaExternalSemaphoreHandle : OrtExternalSemaphoreHandle {
* CUexternalSemaphore ext_semaphore;
* };
* \endcode
*
* \since Version 1.24.
*/
OrtExternalSemaphoreHandle :: struct {
version: u32; ///< Must be ORT_API_VERSION
ep_device: *OrtEpDevice; ///< EP device that created this handle
descriptor: OrtExternalSemaphoreDescriptor; ///< External semaphore descriptor
/** \brief Release callback for this handle. EP sets this to its release function.
*
* ORT calls this when ReleaseExternalSemaphoreHandle is invoked. The EP's callback
* should cast the handle to its derived type and delete it.
*/
Release: #type (handle: *OrtExternalSemaphoreHandle) -> void #c_call;
}
// Opaque types for kernel-based EPs
OrtKernelRegistry :: struct {}
OrtKernelDefBuilder :: struct {}
OrtKernelDef :: struct {}
OrtDataType :: struct {}
OrtSharedPrePackedWeightCache :: struct {}
/** \brief Struct that an EP implements for IDataTransfer to copy between devices it uses and CPU.
*
* \since Version 1.23.
*/
OrtDataTransferImpl :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION
/** \brief Release the OrtDataTransferImpl instance.
*
* This is called by ORT when the OrtDataTransferImpl instance is no longer needed.
* The implementation should release any resources held by the instance.
*
* \param[in] this_ptr Pointer to the OrtDataTransferImpl instance.
*
* \since Version 1.23.
*/
Release: #type (this_ptr: *OrtDataTransferImpl) -> void #c_call;
/** \brief Check if the implementation can copy between the source and destination memory devices.
*
* \param[in] this_ptr Pointer to the OrtDataTransferImpl instance.
* \param[in] src_memory_device Source OrtMemoryDevice to copy from.
* \param[in] dst_memory_device Destination OrtMemoryDevice to copy to.
* \return True if the implementation can copy between the devices.
*
* \since Version 1.23.
*/
CanCopy: #type (this_ptr: *OrtDataTransferImpl, src_memory_device: *OrtMemoryDevice, dst_memory_device: *OrtMemoryDevice) -> bool #c_call;
/** \brief Copy tensors from src_tensors to dst_tensors using the provided streams.
*
* The implementation can use the provided streams to perform asynchronous copies if supported.
* If a stream is not available, the copy is performed synchronously.
*
* \param[in] this_ptr Pointer to the OrtDataTransferImpl instance.
* \param[in] src_tensors Array of source OrtValue pointers to copy from.
* \param[in] dst_tensors Array of destination OrtValue pointers to copy to.
* \param[in] streams Array of OrtSyncStream pointers for the copy operations, if the execution provider is stream
* aware. nullptr if it is not.
* \param[in] num_tensors Number of tensors to copy.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CopyTensors: #type (this_ptr: *OrtDataTransferImpl, src_tensors: **OrtValue, dst_tensors: **OrtValue, streams: **OrtSyncStream, num_tensors: u64) -> OrtStatusPtr #c_call;
}
/** \brief Struct that an EP implements for Stream Notifications.
*
* \since Version 1.23.
*/
OrtSyncNotificationImpl :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION
/** \brief Release the OrtSyncNotificationImpl instance.
*
* This is called by ORT when the OrtSyncNotificationImpl instance is no longer needed.
* The implementation should release any resources held by the instance.
*
* \param[in] this_ptr Pointer to the OrtSyncNotificationImpl instance.
*
* \since Version 1.23.
*/
Release: #type (this_ptr: *OrtSyncNotificationImpl) -> void #c_call;
/** \brief Called by ORT to activate the notification.
*
* \param[in] this_ptr Pointer to the OrtSyncNotificationImpl instance.
*
* \since Version 1.23.
*/
Activate: #type (this_ptr: *OrtSyncNotificationImpl) -> OrtStatusPtr #c_call;
/** \brief Wait for a device to device operation to complete.
*
* \param[in] this_ptr Pointer to the OrtSyncNotificationImpl instance.
* \param[in] consumer_stream The OrtSyncStream instance that will wait on this notification to be activated.
*
* \since Version 1.23.
*/
WaitOnDevice: #type (this_ptr: *OrtSyncNotificationImpl, consumer_stream: *OrtSyncStream) -> OrtStatusPtr #c_call;
/** \brief Wait for a device to host operation to complete.
*
* \param[in] this_ptr Pointer to the OrtSyncNotificationImpl instance.
*
* \since Version 1.23.
*/
WaitOnHost: #type (this_ptr: *OrtSyncNotificationImpl) -> OrtStatusPtr #c_call;
}
/** \brief Struct that an EP implements if it wishes to implement Stream support.
*
* This struct provides the overrides for onnxruntime::Stream's virtual methods.
*
* \since Version 1.23.
*/
OrtSyncStreamImpl :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION
/** \brief Release the OrtSyncStreamImpl instance.
*
* This is called by ORT when the OrtSyncStreamImpl instance is no longer needed.
* The implementation should release any resources held by the instance.
*
* \param[in] this_ptr Pointer to the OrtSyncStreamImpl instance.
*
* \since Version 1.23.
*/
Release: #type (this_ptr: *OrtSyncStreamImpl) -> void #c_call;
/** \brief Get the handle of the stream.
*
* This returns the native handle for the stream. e.g. cudaStream_t for CUDA streams.
*
* \param[in] this_ptr Pointer to the OrtSyncStreamImpl instance.
* \return The handle of the stream.
*
* \since Version 1.23.
*/
GetHandle: #type (this_ptr: *OrtSyncStreamImpl) -> *void #c_call;
/** \brief Create an OrtSyncNotificationImpl for the OrtSyncStreamImpl instance.
*
* \param[in] this_ptr Pointer to the OrtSyncStreamImpl instance
* \param[out] notification The new OrtSyncNotificationImpl instance.
*
* \since Version 1.23.
*/
CreateNotification: #type (this_ptr: *OrtSyncStreamImpl, notification: **OrtSyncNotificationImpl) -> OrtStatusPtr #c_call;
/** \brief Flush the stream.
*
* This is called by ORT to flush the stream, ensuring that all operations submitted to the stream are completed.
*
* \param[in] this_ptr Pointer to the OrtSyncStreamImpl instance.
*
* \since Version 1.23.
*/
Flush: #type (this_ptr: *OrtSyncStreamImpl) -> OrtStatusPtr #c_call;
/** \brief Notify the stream that a session run has ended.
*
* This is called by ORT to notify the stream that a session run has ended, allowing the stream to perform any
* necessary cleanup or finalization.
*
* \param[in] this_ptr Pointer to the OrtSyncStreamImpl instance.
*
* \since Version 1.23.
*/
OnSessionRunEnd: #type (this_ptr: *OrtSyncStreamImpl) -> OrtStatusPtr #c_call;
}
/** \brief Struct that an EP implements for external resource import (memory + semaphore import).
*
* This capability object provides methods for importing external GPU memory and semaphores
* for zero-copy import. EPs that support D3D12, CUDA, HIP, or Vulkan external resource APIs
* can implement this interface.
*
* \since Version 1.24.
*/
OrtExternalResourceImporterImpl :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION
/** \brief Check if the implementation can import external memory of the given handle type.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] handle_type The type of external memory handle to check.
* \return True if the handle type is supported.
*
* \since Version 1.24.
*/
CanImportMemory: #type (this_ptr: *OrtExternalResourceImporterImpl, handle_type: OrtExternalMemoryHandleType) -> bool #c_call;
/** \brief Import external memory.
*
* The EP creates a derived type of OrtExternalMemoryHandle and returns a pointer to the base.
* EP is responsible for the lifetime of the handle (release via ReleaseMemory).
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] desc Descriptor containing the external memory handle and properties.
* \param[out] out_handle Output parameter set to the created OrtExternalMemoryHandle (EP's derived type).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
ImportMemory: #type (this_ptr: *OrtExternalResourceImporterImpl, desc: *OrtExternalMemoryDescriptor, out_handle: **OrtExternalMemoryHandle) -> OrtStatusPtr #c_call;
/** \brief Release an imported external memory handle.
*
* The EP deletes its derived type instance.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] handle The OrtExternalMemoryHandle to release (EP casts to its derived type).
*
* \since Version 1.24.
*/
ReleaseMemory: #type (this_ptr: *OrtExternalResourceImporterImpl, handle: *OrtExternalMemoryHandle) -> void #c_call;
/** \brief Create a tensor backed by imported external memory.
*
* The created tensor is a view over the imported memory and does not copy data.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] mem_handle The imported external memory handle (EP casts to its derived type).
* \param[in] tensor_desc Descriptor specifying tensor element type, shape, and optional offset.
* \param[out] out_tensor Output parameter set to the created OrtValue containing the tensor.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CreateTensorFromMemory: #type (this_ptr: *OrtExternalResourceImporterImpl, mem_handle: *OrtExternalMemoryHandle, tensor_desc: *OrtExternalTensorDescriptor, out_tensor: **OrtValue) -> OrtStatusPtr #c_call;
/** \brief Check if the implementation can import external semaphores of the given type.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] type The type of external semaphore to check.
* \return True if the semaphore type is supported.
*
* \since Version 1.24.
*/
CanImportSemaphore: #type (this_ptr: *OrtExternalResourceImporterImpl, type: OrtExternalSemaphoreType) -> bool #c_call;
/** \brief Import an external semaphore.
*
* The EP creates a derived type of OrtExternalSemaphoreHandle and returns a pointer to the base.
* EP is responsible for the lifetime of the handle (release via ReleaseSemaphore).
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] desc Descriptor containing the external semaphore handle and type.
* \param[out] out_handle Output parameter set to the created OrtExternalSemaphoreHandle (EP's derived type).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
ImportSemaphore: #type (this_ptr: *OrtExternalResourceImporterImpl, desc: *OrtExternalSemaphoreDescriptor, out_handle: **OrtExternalSemaphoreHandle) -> OrtStatusPtr #c_call;
/** \brief Release an imported external semaphore handle.
*
* The EP deletes its derived type instance.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] handle The OrtExternalSemaphoreHandle to release (EP casts to its derived type).
*
* \since Version 1.24.
*/
ReleaseSemaphore: #type (this_ptr: *OrtExternalResourceImporterImpl, handle: *OrtExternalSemaphoreHandle) -> void #c_call;
/** \brief Wait on an external semaphore on the EP's stream.
*
* Inserts a wait operation into the EP's stream that blocks until the semaphore
* reaches the specified value.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] handle The imported external semaphore (EP casts to its derived type).
* \param[in] stream The OrtSyncStream to wait on.
* \param[in] value The fence/semaphore value to wait for.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
WaitSemaphore: #type (this_ptr: *OrtExternalResourceImporterImpl, handle: *OrtExternalSemaphoreHandle, stream: *OrtSyncStream, value: u64) -> OrtStatusPtr #c_call;
/** \brief Signal an external semaphore from the EP's stream.
*
* Inserts a signal operation into the EP's stream that sets the semaphore
* to the specified value when reached.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
* \param[in] handle The imported external semaphore (EP casts to its derived type).
* \param[in] stream The OrtSyncStream to signal from.
* \param[in] value The fence/semaphore value to signal.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
SignalSemaphore: #type (this_ptr: *OrtExternalResourceImporterImpl, handle: *OrtExternalSemaphoreHandle, stream: *OrtSyncStream, value: u64) -> OrtStatusPtr #c_call;
/** \brief Release the OrtExternalResourceImporterImpl instance.
*
* This is called by ORT when the OrtExternalResourceImporterImpl instance is no longer needed.
* The implementation should release any resources held by the instance.
*
* \param[in] this_ptr Pointer to the OrtExternalResourceImporterImpl instance.
*
* \since Version 1.24.
*/
Release: #type (this_ptr: *OrtExternalResourceImporterImpl) -> void #c_call;
}
/** \brief The event category for profiling events reported by an execution provider.
*
* \since Version 1.25.
*/
OrtProfilingEventCategory :: enum s32 {
OrtProfilingEventCategory_SESSION :: 0;
OrtProfilingEventCategory_NODE :: 1;
OrtProfilingEventCategory_KERNEL :: 2;
OrtProfilingEventCategory_API :: 3;
}
/** \brief Struct that an EP implements for profiling support.
*
* An execution provider optionally implements this struct to participate in ONNX Runtime's profiling system.
* The EP creates and returns an instance of this struct via OrtEp::CreateProfiler.
*
* ORT calls the function pointers at appropriate times during a profiling session:
* - StartProfiling once when profiling begins.
* - [Optional] StartEvent / StopEvent around each ORT event (operator executions, session events, etc.).
* - EndProfiling once when profiling ends to collect EP events.
* - Release when ORT no longer needs the profiler.
*
* Profiling scenarios:
* - ORT session profiling: Captures session initialization and one or more runs with a single ORT session.
* - Enabled via OrtApi::EnableProfiling(session_options).
* - There is one ORT session, one OrtEp, and one OrtEpProfilerImpl
* - Concurrency notes: An application may use a single ORT session (and the single OrtEpProfilerImpl) to run
* multiple inferences concurrently. The OrtEpProfilerImpl::StartEvent and OrtEpProfilerImpl::StopEvent
* functions will be called with ORT events from multiple concurrent runs. The OrtEpProfilerImpl::EndProfiling
* function is expected to return all EP events from all runs with correct correlations with the original ORT
* events.
* - ORT run profiling: Captures events for a given run. An application can either enable session profiling or run
* profiling, but not both at the same time.
* - Enabled via OrtApi::RunOptionsEnableProfiling(run_options).
* - There is one ORT session, one OrtEp, and multiple OrtEpProfilerImpl instances (one per profiled run).
* - Concurrency notes: each OrtEpProfilerImpl only receives calls for its specific run.
* OrtEpProfilerImpl::EndProfiling must only return EP events for its specific run.
*
* \since Version 1.25.
*/
OrtEpProfilerImpl :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION.
/** \brief Release the OrtEpProfilerImpl instance.
*
* Called by ORT when the profiler is no longer needed.
* The implementation should release any resources held by the instance.
*
* \param[in] this_ptr Pointer to the OrtEpProfilerImpl instance.
*
* \note Implementation of this function is required.
*
* \since Version 1.25.
*/
Release: #type (this_ptr: *OrtEpProfilerImpl) -> void #c_call;
/** \brief Called when profiling starts.
*
* Allows the EP profiler to initialize profiling utilities and record the profiling start time.
*
* An EP profiler should record its own clock's current time when this function is called. This allows the EP to
* later compute ORT-relative event timestamps by combining `ep_profiling_start_offset_ns` with the EP's own
* elapsed time since this call. The formula is:
*
* event_timestamp_us = (ep_profiling_start_offset_ns + (ep_event_time_ns - ep_profiling_start_time_ns)) / 1000
*
* where `ep_event_time_ns` and `ep_profiling_start_time_ns` are measured using the EP's own clock.
*
* \param[in] this_ptr Pointer to the OrtEpProfilerImpl instance.
* \param[in] ep_profiling_start_offset_ns The elapsed time in nanoseconds (using ORT's profiling clock) between
* ORT's profiling start and this call to StartProfiling.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note An error OrtStatus returned from this function is logged by ORT (does not end execution).
* \note Implementation of this function is required.
*
* \since Version 1.25.
*/
StartProfiling: #type (this_ptr: *OrtEpProfilerImpl, ep_profiling_start_offset_ns: s64) -> OrtStatusPtr #c_call;
/** \brief Called when an ORT event (e.g., session initialization, node kernel execution, etc.) begins.
*
* ORT pairs every StartEvent call with a corresponding call to StopEvent with the same ORT event correlation ID.
* EP profiler implementations may use the calls to StartEvent and StopEvent to maintain a stack of ORT event
* correlation IDs that can be correlated with EP events (e.g., GPU kernel events). For example:
*
* OrtEpProfilerImpl::StartEvent(x) -> EP ort event stack: [x] <- top of stack
* [EP events are tagged with 'x']
* OrtEpProfilerImpl::StartEvent(y) -> EP ort event stack: [x, y] <- top of stack
* [EP events are tagged with 'y']
* OrtEpProfilerImpl::StopEvent(y) -> EP ort event stack: [x] <- top of stack
* OrtEpProfilerImpl::StartEvent(z) -> EP ort event stack: [x, z] <- top of stack
* [EP events are tagged with 'z']
* OrtEpProfilerImpl::StopEvent(z) -> EP ort event stack: [x] <- top of stack
* OrtEpProfilerImpl::StopEvent(x) -> EP ort event stack: [ ] <- top of stack
*
* Tagging EP events with the ORT event correlation ID enables the EP to annotate its own events
* with metadata from the parent ORT event (e.g., operator name).
*
* \note **Threading:** For a given ORT event, StartEvent, the kernel's Compute() entry point, and StopEvent
* are all invoked on the same CPU thread (Compute() may asynchronously launch device work).
* Different ORT events may run on different threads (e.g., inter-op parallelism), so correlation
* stacks (e.g., for CUPTI) should use thread-local storage.
*
* \note The ORT event correlation ID is an absolute, epoch-based timestamp in microseconds. It is computed
* from the ORT event's start time using std::chrono::high_resolution_clock (platform-defined epoch).
* Because it is absolute rather than relative to profiling start, it is practically unique across
* concurrent profiling sessions within the same process (collisions require sub-microsecond event
* concurrency) and can be used directly as a correlation ID for EP profiling utilities
* (e.g., CUPTI or ROCTracer).
*
* \param[in] this_ptr Pointer to the OrtEpProfilerImpl instance.
* \param[in] ort_event_correlation_id Absolute, epoch-based correlation ID for the ORT event that is starting.
* The same value is passed to the corresponding StopEvent call.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note An error OrtStatus returned from this function is logged by ORT (does not end execution).
* \note Implementation of this function is optional. If set to NULL, it is not called.
*
* \since Version 1.25.
*/
StartEvent: #type (this_ptr: *OrtEpProfilerImpl, ort_event_correlation_id: u64) -> OrtStatusPtr #c_call;
/** \brief Called when a profiled ORT event (e.g., session initialization, node kernel execution, etc.) ends.
*
* ORT pairs every StartEvent call with a corresponding call to StopEvent with the same ORT event correlation ID.
* EP profiler implementations may use the calls to StartEvent and StopEvent to maintain a stack of ORT event
* correlation IDs that can be correlated with EP events (e.g., GPU kernel events). For example:
*
* OrtEpProfilerImpl::StartEvent(x) -> EP ort event stack: [x] <- top of stack
* [EP events are tagged with 'x']
* OrtEpProfilerImpl::StartEvent(y) -> EP ort event stack: [x, y] <- top of stack
* [EP events are tagged with 'y']
* OrtEpProfilerImpl::StopEvent(y) -> EP ort event stack: [x] <- top of stack
* OrtEpProfilerImpl::StartEvent(z) -> EP ort event stack: [x, z] <- top of stack
* [EP events are tagged with 'z']
* OrtEpProfilerImpl::StopEvent(z) -> EP ort event stack: [x] <- top of stack
* OrtEpProfilerImpl::StopEvent(x) -> EP ort event stack: [ ] <- top of stack
*
* Tagging EP events with the ORT event correlation ID enables the EP to annotate its own events
* with metadata from the parent ORT event (e.g., operator name).
*
* \note **Threading:** For a given ORT event, StartEvent, the kernel's Compute() entry point, and StopEvent
* are all invoked on the same CPU thread (Compute() may asynchronously launch device work).
* Different ORT events may run on different threads (e.g., inter-op parallelism), so correlation
* stacks (e.g., for CUPTI) should use thread-local storage.
*
* \note The ORT event correlation ID is an absolute, epoch-based timestamp in microseconds. It is computed
* from the ORT event's start time using std::chrono::high_resolution_clock (platform-defined epoch).
* Because it is absolute rather than relative to profiling start, it is practically unique across
* concurrent profiling sessions within the same process (collisions require sub-microsecond event
* concurrency) and can be used directly as a correlation ID for EP profiling utilities
* (e.g., CUPTI or ROCTracer).
*
* \param[in] this_ptr Pointer to the OrtEpProfilerImpl instance.
* \param[in] ort_event_correlation_id Absolute, epoch-based correlation ID for the ORT event that is ending.
* The same value was passed to the corresponding StartEvent call.
* \param[in] ort_event Opaque pointer to the ORT profiling event. Valid only during this call.
* Use OrtEpApi accessor functions to read event fields.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note An error OrtStatus returned from this function is logged by ORT (does not end execution).
* \note Implementation of this function is optional. If set to NULL, it is not called.
*
* \since Version 1.25.
*/
StopEvent: #type (this_ptr: *OrtEpProfilerImpl, ort_event_correlation_id: u64, ort_event: *OrtProfilingEvent) -> OrtStatusPtr #c_call;
/** \brief Called when profiling ends to collect the EP's new profiling events since the call to StartProfiling.
*
* An EP profiler converts its events to OrtProfilingEvent instances and adds them into the provided
* OrtProfilingEventsContainer container. Call OrtEpApi::CreateProfilingEvent to create a new
* OrtProfilingEvent instance. Then call OrtEpApi::ProfilingEventsContainer_AddEvents to add one or more
* events to the container.
*
* After this function returns, ORT appends the EP's events to the profiling timeline.
*
* \param[in] this_ptr The OrtEpProfilerImpl instance.
* \param[in] events_container Event container to which the EP profiler adds its new events.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note An error OrtStatus returned from this function is logged by ORT (does not end execution).
* \note Implementation of this function is required.
*
* \since Version 1.25.
*/
EndProfiling: #type (this_ptr: *OrtEpProfilerImpl, events_container: *OrtProfilingEventsContainer) -> OrtStatusPtr #c_call;
}
/**
* \brief The OrtNodeFusionOptions struct specifies options for fusing nodes supported by an execution provider.
*
* Refer to OrtEpApi::EpGraphSupportInfo_AddNodesToFuse.
*
* \since Version 1.23.
*/
OrtNodeFusionOptions :: struct {
/** \brief The ONNX Runtime version the OrtNodeFusionOptions was compiled with.
*
* Implementation should set to ORT_API_VERSION.
* ORT will use this to ensure it does not use members that were not available when the EP library was compiled.
*
* \since Version 1.23.
*/
ort_version_supported: u32;
/** \brief If set to true, specify that the execution provider does not require ONNX Runtime to provide constant
* initializers as inputs to the fused node during model inference. This is used when the execution
* provider saves a copy of constant initializers, and allows ONNX Runtime to release constant initializers that
* are not used by any execution provider.
*
* If not specified, defaults to false. That is, ONNX Runtime provides constant initializers as inputs to
* the fused node by default.
*
* \since Version 1.23.
*/
drop_constant_initializers: bool;
}
/**
* \brief The OrtNodeComputeInfo struct provides functions that an OrtEp implements to specify the compute
* function for a compiled OrtGraph instance.
* \since Version 1.23.
*/
OrtNodeComputeInfo :: struct {
/** \brief The ONNX Runtime version the OrtNodeComputeInfo was compiled with.
*
* Implementation should set to ORT_API_VERSION.
* ORT will use this to ensure it does not call functions that were not available when the EP library was compiled.
*
* \since Version 1.23.
*/
ort_version_supported: u32;
/** \brief Creates an opaque compute state object that is then passed to the Compute() function during inference.
* \param[in] this_ptr The OrtNodeComputeInfo instance.
* \param[in] compute_context OrtNodeComputeContext instance that contains compiled/fused node's name and host
* memory allocation functions. Can optionally be used to build the compute state.
* \param[out] compute_state Output parameter that is assigned the opaque computation state. ONNX Runtime calls
* ReleaseState() (after calling Compute()) to allow the implementer to release the
* compute state.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CreateState: #type (this_ptr: *OrtNodeComputeInfo, compute_context: *OrtNodeComputeContext, compute_state: **void) -> *OrtStatus #c_call;
/** \brief Computation function called to execute the fused node compiled by an OrtEp instance.
* \param[in] this_ptr The OrtNodeComputeInfo instance.
* \param[in] compute_state The opaque computation state returned by CreateState().
* \param[in] kernel_context The OrtKernelContext instance used to access inputs/outputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
Compute: #type (this_ptr: *OrtNodeComputeInfo, compute_state: *void, kernel_context: *OrtKernelContext) -> *OrtStatus #c_call;
/** \brief Releases the compute state returned by CreateState().
* \param[in] this_ptr The OrtNodeComputeInfo instance.
* \param[inout] compute_state The opaque compute state returned by CreateState().
*
* \since Version 1.23.
*/
ReleaseState: #type (this_ptr: *OrtNodeComputeInfo, compute_state: *void) -> void #c_call;
}
/**
* \brief Contains functions that an OrtEp implements to specify the computation for an operator kernel.
* \since Version 1.24.
*/
OrtKernelImpl :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION
flags: u32; ///< EP must initialize to 0. Used internally by ORT.
/** \brief Computation function called to execute the kernel on an EP.
*
* \note Implementation of this function is required.
*
* \param[in] this_ptr The OrtKernelImpl instance.
* \param[in] context The OrtKernelContext instance that provides access to the inputs and outputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
Compute: #type (this_ptr: *OrtKernelImpl, _context: *OrtKernelContext) -> OrtStatusPtr #c_call;
/** \brief Called by ORT to release the OrtKernelImpl instance and its resources.
*
* \note Implementation of this function is required.
*
* \param[in] this_ptr The OrtKernelImpl instance.
*
* \since Version 1.24.
*/
Release: #type (this_ptr: *OrtKernelImpl) -> void #c_call;
/** \brief Optional function to pre-pack a constant tensor (i.e., a weight) to the kernel's preferred data layout.
*
* For example, a Conv kernel can define this function to pack input W to the channel-last data layout
* before inference.
*
* Pre-packing can operate in three different modes: no pre-packing mode, sharing mode, and non-sharing mode.
* 1) No pre-packing mode: The kernel can forgo any weight pre-packing for the given `input_index` by setting
* `is_packed` to false and returning a successful OrtStatus. In this mode, the kernel's
* OrtKernelImpl::SetSharedPrePackedWeight() function is not called for that specific
* `input_index`.
* 2) Sharing mode: Sharing is allowed if the `prepacked_weight_cache` argument is not NULL and the EP stores
* weight data in CPU-accessible memory. In this case, the kernel can optionally choose
* to share the packed weight with other kernels that use the same weight
* (compared by content hash). To do so, the kernel must allocate the packed weight with the
* provided `allocator`, then it stores the packed weight data into `prepacked_weight_cache`
* via SharedPrePackedWeightCache_StoreWeightData(), sets `is_packed` to true, and returns a
* successful OrtStatus. ORT will subsequently call OrtKernelImpl::SetSharedPrePackedWeight()
* to provide this kernel with the actual shared weight data, whose memory location could
* differ (i.e., if shared data was allocated by a previously processed kernel).
* 3) Non-sharing mode: In non-sharing mode, the `prepacked_weight_cache` argument is ignored. In this mode,
* the implementation allocates the packed data with the provided `allocator`, sets
* `is_packed` to true, and returns a successful OrtStatus. The kernel is ultimately
* responsible for releasing the packed data for the weight with `allocator`.
* ORT may release the original (unpacked) weight, which must not be accessed in
* OrtKernelImpl::Compute(). Note that in this mode, the kernel's
* OrtKernelImpl::SetSharedPrePackedWeight() function is not called by ORT for that specific
* `input_index`.
*
* \note This function is based on the internal OpKernel::PrePack() virtual function used within ORT.
*
* \param[in] this_ptr The OrtKernelImpl instance.
* \param[in] tensor The OrtValue instance representing the constant tensor (weight). Do not cache in the kernel.
* \param[in] input_index The input index of the tensor in this kernel.
* \param[in] allocator Allocator for allocating the pre-packed data. Its use is required in sharing mode and
* recommended, but not required, in the non-sharing mode. This will be an allocator set by
* the application for the session/environment (e.g., via CreateAndRegisterAllocator[V2]
* or RegisterAllocator), or an allocator on the OrtEpDevice (read-only or default) otherwise.
* The allocator remains valid throughout the lifetime of the OrtKernelImpl instance.
* \param[in] prepacked_weight_cache May be NULL. If not NULL, the kernel may choose to share a packed weight by
* first storing it in the OrtSharedPrePackedWeightCache instance and then
* receiving the actual shared weight data in the call to
* OrtKernelImpl::SetSharedPrePackedWeight(). See the above description for
* "sharing mode".
* \param[out] is_packed Output parameter that the implementation sets to true if the kernel packed the tensor data.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional. If not implemented (set to NULL), ORT assumes the kernel
* does not pre-pack weight data (i.e., `is_packed` defaults to false).
*
* \since Version 1.24.
*/
PrePackWeight: #type (this_ptr: *OrtKernelImpl, tensor: *OrtValue, input_index: s32, allocator: *OrtAllocator, prepacked_weight_cache: *OrtSharedPrePackedWeightCache, is_packed: *bool) -> OrtStatusPtr #c_call;
/** \brief Optional function that receives data for a shared pre-packed weight from ORT.
*
* ORT calls this function after calling OrtKernelImpl::PrePackWeight for a specific `input_index` if:
* - OrtKernelImpl::PrePackWeight set the output parameter `is_packed` to true.
* - OrtKernelImpl::PrePackWeight stored weight data to share into the provided OrtSharedPrePackedWeightCache
* parameter (`prepacked_weight_cache`) via the API SharedPrePackedWeightCache_StoreWeightData.
*
* Refer to the description of the "sharing-mode" in the documentation for OrtKernelImpl::PrePackWeight().
*
* \note ORT will not call this function for an `input_index` that a previous call to
* OrtKernelImpl::PrePackWeight() did not elect to pre-pack and share.
*
* \note This function is based on the internal OpKernel::UseSharedPrePackedBuffers() virtual function used
* within ORT.
*
* \param[in] this_ptr The OrtKernelImpl instance.
* \param[in] buffer_data_ptrs An array of buffer data pointers that collectively hold the pre-packed data for a
* single shared weight. The buffers are provided in the same order and with the same
* contents (in a potentially different memory location) as the buffers
* passed into SharedPrePackedWeightCache_StoreWeightData() within the
* OrtKernelImpl::PrePackWeight() call for the same `input_index`.
* \param[in] buffer_data_sizes An array of buffer byte sizes, one per element in `buffer_data_ptrs`.
* \param[in] num_buffers The number of buffers used to store the data for the shared pre-packed weight.
* Specifies the number of elements in the `buffer_data_ptrs` and `buffer_data_sizes` arrays.
* \param[in] input_index The input index of the tensor in this kernel. This index identifies the identity of
* the weight.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is generally optional. It is only required if OrtKernelImpl::PrePack()
* elects to share pre-packed weights.
*
* \since Version 1.24.
*/
SetSharedPrePackedWeight: #type (this_ptr: *OrtKernelImpl, buffer_data_ptrs: **void, buffer_data_sizes: *u64, num_buffers: u64, input_index: s32) -> OrtStatusPtr #c_call;
}
/** \brief Type definition for a function that creates an OrtKernelImpl instance for an operator kernel.
*
* \param[in] kernel_create_func_state Opaque state initially provided by the EP that registered the kernel.
* Refer to OrtEpApi::KernelRegistry_AddKernel(). May be null.
* \param[in] info The OrtKernelInfo instance that provides access to the kernel's input and output characteristics.
* \param[out] kernel_out Output parameter set to the new OrtKernelImpl instance. On success, ownership of this
* OrtKernelImpl instance transfers to ORT, which will call OrtKernelImpl::Release() to
* release the instance when it is no longer used.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
OrtKernelCreateFunc :: #type (kernel_create_func_state: *void, info: *OrtKernelInfo, kernel_out: **OrtKernelImpl) -> *OrtStatus #c_call;
/**
* \brief Contains helper functions for a Loop OrtKernelImpl created via OrtEpApi::CreateLoopKernel.
* \since Version 1.24.
*/
OrtLoopKernelHelper :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION
/** \brief Called by ORT to release the OrtLoopKernelHelper instance and its resources.
*
* \param[in] this_ptr The OrtLoopKernelHelper instance.
*
* \since Version 1.24.
*/
Release: #type (this_ptr: *OrtLoopKernelHelper) -> void #c_call;
/** \brief Helper function that concatenates OrtValue instances from each loop iteration into a single
* pre-allocated output buffer.
*
* \note Implementing this function is required for all Loop opset versions.
*
* \param[in] this_ptr The OrtLoopKernelHelper instance.
* \param[in] stream_handle Optional native stream handle that enables asynchronous operations. May be NULL.
* \param[in] per_iteration_outputs Array of OrtValue instances from each iteration. All OrtValue elements have the
* same shape.
* \param[in] num_per_iteration_outputs The number of OrtValue* elements in the `per_iteration_outputs` array.
* \param[out] output The pre-allocated output buffer. Memory is allocated on the device for the EP running the
* Loop node.
* \param[in] output_size_in_bytes The size in bytes of the `output` buffer. It is guaranteed to be large enough
* to hold the concatenated data of each element in `per_iteration_outputs`.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
ConcatOutput: #type (this_ptr: *OrtLoopKernelHelper, stream_handle: *void, per_iteration_outputs: **OrtValue, num_per_iteration_outputs: u64, output: *void, output_size_in_bytes: u64) -> OrtStatusPtr #c_call;
}
/**
* \brief Contains helper functions for a Scan OrtKernelImpl created via OrtEpApi::CreateScanKernel.
* \since Version 1.24.
*/
OrtScanKernelHelper :: struct {
ort_version_supported: u32; ///< Must be initialized to ORT_API_VERSION
/** \brief Called by ORT to release the OrtScanKernelHelper instance and its resources.
*
* \param[in] this_ptr The OrtScanKernelHelper instance.
*
* \since Version 1.24.
*/
Release: #type (this_ptr: *OrtScanKernelHelper) -> void #c_call;
/** \brief Helper function that transposes an OrtValue instance during execution of a Scan kernel.
*
* \note Called for Scan (opset >= 9) when the 'scan_input_axes' or 'scan_output_axes' attributes contain
* non-zero values. Implementing this function is required for Scan opset versions >= 9.
*
* \param[in] this_ptr The OrtScanKernelHelper instance.
* \param[in] permutation An array of integers that defines how the input tensor's axes should be permuted.
* \param[in] num_permutation_elems The number of integer elements in the `permutation` array.
* \param[in] input The input OrtValue tensor to transpose.
* \param[in] stream An optional OrtSyncStream instance to be used for asynchronous operations. May be NULL.
* \param[out] output The pre-allocated output OrtValue instance into which to store the results of the
* transpose operation. Must not be released as it is owned by ORT.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
Transpose: #type (this_ptr: *OrtScanKernelHelper, permutation: *u64, num_permutation_elems: u64, input: *OrtValue, stream: *OrtSyncStream, output: *OrtValue) -> OrtStatusPtr #c_call;
}
/**
* \brief Discriminator for the resource count type stored in an OrtResourceCount.
*
* New resource accounting types can be added by appending new enum values.
* The OrtResourceCount union storage is large enough to hold all current and future types.
*
* \since Version 1.26.
*/
OrtResourceCountKind :: enum s32 {
OrtResourceCountKind_None :: 0;
OrtResourceCountKind_TotalBytes :: 1;
}
/**
* \brief ABI-stable tagged union representing a resource cost or budget.
*
* This struct is a C-safe variant that can be passed by value across the plugin DLL boundary.
* The `kind` field selects which member of the `value` union is active. The
* `value.reserved_words` storage reserves space for future resource types without changing
* the struct layout.
*
* Adding new resource types requires only: (a) a new OrtResourceCountKind enum value,
* (b) a new union member. No new C API functions are needed.
*
* \since Version 1.26.
*/
OrtResourceCount :: struct {
kind: u32; /**< OrtResourceCountKind discriminator. */
reserved: u32; /**< Must be zero. Ensures natural alignment for the value union. */
value: struct {
reserved_words: [6] u64; // largest member, moved to the start of the struct/union to support #overlay. /**< 48 bytes fixed storage for future resource types. */
#overlay (reserved_words) total_bytes: u64; /**< Active when kind == OrtResourceCountKind_TotalBytes. */
};
}
/**
* \brief The OrtEpApi struct provides functions that are relevant to the implementation of an execution provider.
*
* \since Version 1.22.
*/
OrtEpApi :: struct {
/** \brief Create an OrtEpDevice for the EP and an OrtHardwareDevice.
* \param[in] ep_factory Execution provider factory that is creating the instance.
* \param[in] hardware_device Hardware device that the EP can utilize.
* \param[in] ep_metadata Optional OrtKeyValuePairs instance for execution provider metadata that may be used
* during execution provider selection and passed to CreateEp.
* ep_device will copy this instance and the user should call ReleaseKeyValuePairs.
* \param[in] ep_options Optional OrtKeyValuePairs instance for execution provider options that will be added
* to the Session configuration options if the execution provider is selected.
* ep_device will copy this instance and the user should call ReleaseKeyValuePairs.
* \param ep_device OrtExecutionDevice that is created.
*
* \since Version 1.22.
*/
CreateEpDevice: #type (ep_factory: *OrtEpFactory, hardware_device: *OrtHardwareDevice, ep_metadata: *OrtKeyValuePairs, ep_options: *OrtKeyValuePairs, ep_device: **OrtEpDevice) -> OrtStatusPtr #c_call;
ReleaseEpDevice: #type (input: *OrtEpDevice) -> void #c_call;
/** \brief Specify nodes that are supported by an OrtEp and should be fused into one node.
*
* Because the nodes will be fused into one "fused node", there must not exist an unsupported node in
* a path between two of the provided nodes. Otherwise, the graph will become invalid.
*
* This function can be called multiple times. A subsequent call to this function will force the next set of
* nodes to be fused into a different node.
*
* \param[in] graph_support_info OrtEpGraphSupportInfo instance to which to add the supported nodes.
* \param[in] nodes Array of nodes supported by the EP that should be fused/compiled.
* \param[in] num_nodes The number of supported nodes.
* \param[in] node_fusion_options Optional node fusion options. Ignored if set to NULL.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
EpGraphSupportInfo_AddNodesToFuse: #type (graph_support_info: *OrtEpGraphSupportInfo, nodes: **OrtNode, num_nodes: u64, node_fusion_options: *OrtNodeFusionOptions) -> OrtStatusPtr #c_call;
/** \brief Specify a node that is supported by an OrtEp and should be run with a registered EP kernel.
*
* \param[in] graph_support_info OrtEpGraphSupportInfo instance to which to add the supported node.
* \param[in] node The supported OrtNode instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
EpGraphSupportInfo_AddSingleNode: #type (graph_support_info: *OrtEpGraphSupportInfo, node: *OrtNode) -> OrtStatusPtr #c_call;
/** \brief Query a OrtNodeComputeContext for the name of the node that encapsulates the compiled/fused node.
*
* Used in OrtNodeComputeInfo::CreateComputeState().
*
* \param[in] context The OrtNodeComputeContext instance to query.
* \return The node's name.
*
* \note Returned string is owned by ORT and valid only while OrtNodeComputeInfo::CreateComputeState() is called.
*
* \since Version 1.23.
*/
NodeComputeContext_NodeName: #type (_context: *OrtNodeComputeContext) -> *u8 #c_call;
/** \brief Register an allocator with the OrtEpDevice.
*
* This allows an EP to provide OrtMemoryInfo for DEFAULT and HOST_ACCESSIBLE memory type as needed.
* The registered values will be used in calls to OrtEpFactory::CreateAllocator to ensure the required allocator/s
* are available for EP usage.
*
* Multiple calls for the same entry type will replace a previous entry.
*
* Available entries:
* - OrtDeviceAllocator with type of OrtDeviceMemoryType_DEFAULT
* - OrtDeviceAllocator with type of OrtDeviceMemoryType_HOST_ACCESSIBLE
* - OrtReadOnlyAllocator with type of OrtDeviceMemoryType_DEFAULT
* - if provided this allocator will only be used to copy initializers to the device the EP uses.
* ORT will use the OrtDeviceAllocator if not provided.
*
* \param[in] ep_device The OrtEpDevice instance to register the OrtMemoryInfo with.
* \param[in] allocator_memory_info The OrtMemoryInfo information for the allocator.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
EpDevice_AddAllocatorInfo: #type (ep_device: *OrtEpDevice, allocator_memory_info: *OrtMemoryInfo) -> OrtStatusPtr #c_call;
/** \brief Get the OrtMemoryDevice from an OrtMemoryInfo instance.
*
* This is required for OrtDataTransferImpl (which implements onnxruntime::IDataTransfer) where the OrtMemoryDevice
* is used in the CanCopy and CopyTensors functions.
*
* \param[in] memory_info The OrtMemoryInfo instance to get the memory device from.
* \return The OrtMemoryDevice associated with the OrtMemoryInfo instance.
*
* \since Version 1.23.
*/
MemoryInfo_GetMemoryDevice: #type (memory_info: *OrtMemoryInfo) -> *OrtMemoryDevice #c_call;
/** \brief Get the OrtMemoryDevice from an OrtValue instance if it contains a Tensor.
*
* \param[in] value The OrtValue instance to get the memory device from.
* \return Memory device if OrtValue contains a Tensor, nullptr otherwise.
*
* \since Version 1.23.
*/
Value_GetMemoryDevice: #type (value: *OrtValue) -> *OrtMemoryDevice #c_call;
/** \brief Compare two OrtMemoryDevice instances for equality.
*
* This is used to check if two memory devices are the same.
* Used to implement DataTransferImpl::CanCopy.
*
* \param[in] a The first OrtMemoryDevice instance to compare.
* \param[in] b The second OrtMemoryDevice instance to compare.
* \return True if the two OrtMemoryDevice instances are equal, false otherwise.
*
* \since Version 1.23.
*/
MemoryDevice_AreEqual: #type (a: *OrtMemoryDevice, b: *OrtMemoryDevice) -> bool #c_call;
/** \brief Get the OrtMemoryInfoDeviceType value from an OrtMemoryDevice instance.
*
* \param[in] memory_device OrtMemoryDevice instance.
* \return The OrtMemoryInfoDeviceType value.
*
* \since Version 1.23.
*/
MemoryDevice_GetDeviceType: #type (memory_device: *OrtMemoryDevice) -> OrtMemoryInfoDeviceType #c_call;
/** \brief Get the OrtDeviceMemoryType value from an OrtMemoryDevice instance.
*
* \param[in] memory_device OrtMemoryDevice instance.
* \return The OrtDeviceMemoryType value.
*
* \since Version 1.23.
*/
MemoryDevice_GetMemoryType: #type (memory_device: *OrtMemoryDevice) -> OrtDeviceMemoryType #c_call;
/** \brief Get the vendor ID from an OrtMemoryDevice instance.
*
* The vendor ID is used to identify the vendor of the device, and is typically set to the PCI vendor ID.
*
* If the device is not vendor specific (e.g. CPU memory) the vendor ID is set to 0.
*
* \param[in] memory_device OrtMemoryDevice instance.
* \return The vendor ID value.
*
* \since Version 1.23.
*/
MemoryDevice_GetVendorId: #type (memory_device: *OrtMemoryDevice) -> u32 #c_call;
/** \brief Get the device ID from an OrtMemoryDevice instance.
*
* \param[in] memory_device OrtMemoryDevice instance.
* \return The device ID.
*
* \since Version 1.23.
*/
MemoryDevice_GetDeviceId: #type (memory_device: *OrtMemoryDevice) -> u32 #c_call;
/** \brief Get the OrtSyncStreamImpl associated with an OrtSyncStream instance.
*
* This allows an the plugin library to connect its OrtSyncStreamImpl instance with an OrtSyncStream if needed.
*
* \param[in] stream The OrtSyncStream instance to find an OrtSyncStreamImpl for.
* \return The associated OrtSyncStreamImpl if found. nullptr otherwise.
*
* \since Version 1.23.
*
* \remarks There should always be an OrtSyncStreamImpl associated with an OrtSyncStream instance that the EP gets.
*/
SyncStream_GetImpl: #type (stream: *OrtSyncStream) -> *OrtSyncStreamImpl #c_call;
/** \brief Get the current sync ID for a stream.
*
* \param[in] stream The OrtSyncStream to get the sync ID for.
* \return Current sync ID.
*
* \since Version 1.23.
*/
SyncStream_GetSyncId: #type (stream: *OrtSyncStream) -> u64 #c_call;
/** \brief Get the sync ID for the last time the consumer_stream waited on the producer_stream.
*
* When two streams are synchronized, the sync id represents the event used in that synchronization.
*
* \param[in] producer_stream The OrtSyncStream that produced the data.
* \param[in] consumer_stream The OrtSyncStream that waited on the producer_stream.
* \return ID for last sync. 0 if no sync has occurred between the two streams.
*
* \since Version 1.23.
*/
GetSyncIdForLastWaitOnSyncStream: #type (producer_stream: *OrtSyncStream, consumer_stream: *OrtSyncStream) -> u64 #c_call;
/** \brief Create an OrtHardwareDevice.
*
* \note Called within OrtEpFactory::GetSupportedDevices to create a new hardware device (e.g., virtual).
*
* \param[in] type The hardware device type.
* \param[in] vendor_id The hardware device's vendor identifier.
* \param[in] device_id The hardware device's identifier.
* \param[in] vendor_name The hardware device's vendor name as a null-terminated string. Copied by ORT.
* \param[in] metadata Optional OrtKeyValuePairs instance for hardware device metadata that may be queried by
* applications via OrtApi::GetEpDevices().
* Refer to onnxruntime_ep_device_ep_metadata_keys.h for common OrtHardwareDevice metadata keys.
* \param[out] hardware_device Output parameter set to the new OrtHardwareDevice instance that is created.
* Must be release with ReleaseHardwareDevice().
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CreateHardwareDevice: #type (type: OrtHardwareDeviceType, vendor_id: u32, device_id: u32, vendor_name: *u8, metadata: *OrtKeyValuePairs, hardware_device: **OrtHardwareDevice) -> OrtStatusPtr #c_call;
ReleaseHardwareDevice: #type (input: *OrtHardwareDevice) -> void #c_call;
/** \brief Creates an empty kernel registry. A kernel registry contains kernel creation information for
* every operator kernel supported by an EP.
*
* \remarks Refer to OrtEp::GetKernelRegistry, which returns an EP's kernel registry to ORT.
*
* \param[out] kernel_registry Output parameter set to the new OrtKernelRegistry instance.
* Must be released with OrtEpApi::ReleaseKernelRegistry.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CreateKernelRegistry: #type (kernel_registry: **OrtKernelRegistry) -> OrtStatusPtr #c_call;
ReleaseKernelRegistry: #type (input: *OrtKernelRegistry) -> void #c_call;
/** \brief Adds kernel creation information for a supported operator kernel to the given kernel registry.
*
* \remarks Refer to OrtEp::GetKernelRegistry, which returns an EP's kernel registry to ORT.
*
* \param[in] kernel_registry The OrtKernelRegistry instance.
* \param[in] kernel_def The kernel definition, which includes operator type, version, EP name, type constraints, etc.
* \param[in] kernel_create_func Function that creates an instance of the operator kernel as a OrtKernelImpl instance.
* \param[in] kernel_create_func_state Custom state passed to the kernel creation function. Can be null.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelRegistry_AddKernel: #type (kernel_registry: *OrtKernelRegistry, kernel_def: *OrtKernelDef, kernel_create_func: OrtKernelCreateFunc, kernel_create_func_state: *void) -> OrtStatusPtr #c_call;
/** \brief Creates a kernel definition builder used to create instances of OrtKernelDef.
*
* \param[out] kernel_def_builder_out Output parameter set to the new OrtKernelDefBuilder instance.
* Must be released with OrtEpApi::ReleaseKernelDefBuilder().
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
CreateKernelDefBuilder: #type (kernel_def_builder_out: **OrtKernelDefBuilder) -> OrtStatusPtr #c_call;
ReleaseKernelDefBuilder: #type (input: *OrtKernelDefBuilder) -> void #c_call;
/** \brief Sets the kernel's operator type.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] op_type A null-terminated string representing the operator type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_SetOperatorType: #type (kernel_def_builder: *OrtKernelDefBuilder, op_type: *u8) -> OrtStatusPtr #c_call;
/** \brief Sets the kernel's domain.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] domain A null-terminated string representing the operator's domain.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_SetDomain: #type (kernel_def_builder: *OrtKernelDefBuilder, domain: *u8) -> OrtStatusPtr #c_call;
/** \brief Sets the kernel's opset version range that is supported.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] since_version_start The starting opset version that is supported.
* \param[in] since_version_end The ending opset version (inclusive) that is supported.
* Can be set equal to the starting version to indicate that only one
* version is supported.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_SetSinceVersion: #type (kernel_def_builder: *OrtKernelDefBuilder, since_version_start: s32, since_version_end: s32) -> OrtStatusPtr #c_call;
/** \brief Sets the name of the kernel's intended execution provider.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] ep_name A null-terminated string representing the execution provider's name.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_SetExecutionProvider: #type (kernel_def_builder: *OrtKernelDefBuilder, ep_name: *u8) -> OrtStatusPtr #c_call;
/** \brief Sets the memory type for a kernel input.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] input_index The index of the input.
* \param[in] mem_type The input's memory type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_SetInputMemType: #type (kernel_def_builder: *OrtKernelDefBuilder, input_index: u64, mem_type: OrtMemType) -> OrtStatusPtr #c_call;
/** \brief Sets the memory type for a kernel output.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] output_index The index of the output.
* \param[in] mem_type The output's memory type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_SetOutputMemType: #type (kernel_def_builder: *OrtKernelDefBuilder, output_index: u64, mem_type: OrtMemType) -> OrtStatusPtr #c_call;
/** \brief Adds type constraints for a kernel argument represented as a string (e.g., "T").
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] arg_name A null-terminated string representing the argument to constrain (e.g., "T").
* \param[in] types Array of OrtDataType instances representing allowed types for the argument.
* Must contain `num_types` elements.
* \param[in] num_types The number of OrtDataType elements in the `types` array.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_AddTypeConstraint: #type (kernel_def_builder: *OrtKernelDefBuilder, arg_name: *u8, types: **OrtDataType, num_types: u64) -> OrtStatusPtr #c_call;
/** \brief Adds aliases for the given input and output pairs.
*
* \note Used for operators like Identity and Reshape to allow ORT to reuse the input buffer for the output
* without modification.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] input_indices Array of input indices. Array must contain `num_io_indices` elements.
* \param[in] output_indices Array of output indices. Each output index is aliased with a corresponding
* input index in `input_indices`. Array must contain `num_io_indices` elements.
* \param[in] num_io_indices The number of input/output index pairs to alias.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_AddInputOutputAliases: #type (kernel_def_builder: *OrtKernelDefBuilder, input_indices: *s32, output_indices: *s32, num_io_indices: u64) -> OrtStatusPtr #c_call;
/** \brief Adds mutable aliases for the given input and output pairs.
*
* \note Allows ORT to reuse and *modify* an input buffer (in-place) for the output buffer.
* This is also known as "MayInplace" within the ORT codebase.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[in] input_indices Array of input indices. Array must contain `num_io_indices` elements.
* \param[in] output_indices Array of output indices. Each output index is aliased with a corresponding
* input index in `input_indices`. Array must contain `num_io_indices` elements.
* \param[in] num_io_indices The number of input/output index pairs to alias.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_AddInputOutputMutableAliases: #type (kernel_def_builder: *OrtKernelDefBuilder, input_indices: *s32, output_indices: *s32, num_io_indices: u64) -> OrtStatusPtr #c_call;
/** \brief Creates a OrtKernelDef instance from the given kernel definition builder.
*
* \param[in] kernel_def_builder The OrtKernelDefBuilder instance.
* \param[out] kernel_def_out The new OrtKernelDef instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDefBuilder_Build: #type (kernel_def_builder: *OrtKernelDefBuilder, kernel_def_out: **OrtKernelDef) -> OrtStatusPtr #c_call;
ReleaseKernelDef: #type (input: *OrtKernelDef) -> void #c_call;
/** \brief Returns the operator type from the kernel definition.
*
* \param[in] kernel_def The OrtKernelDef instance.
* \return A null-terminated string representing the operator type.
*
* \since Version 1.24.
*/
KernelDef_GetOperatorType: #type (kernel_def: *OrtKernelDef) -> *u8 #c_call;
/** \brief Returns the operator's domain from the kernel definition.
*
* \param[in] kernel_def The OrtKernelDef instance.
* \return A null-terminated string representing the operator's domain.
*
* \since Version 1.24.
*/
KernelDef_GetDomain: #type (kernel_def: *OrtKernelDef) -> *u8 #c_call;
/** \brief Gets the kernel's opset version range that is supported.
*
* \param[in] kernel_def The OrtKernelDef instance.
* \param[out] start_version Output parameter set to the starting opset version that is supported.
* \param[out] end_version Output parameter set to the ending opset version (inclusive) that is supported.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDef_GetSinceVersion: #type (kernel_def: *OrtKernelDef, start_version: *s32, end_version: *s32) -> OrtStatusPtr #c_call;
/** \brief Returns the name of the kernel's intended execution provider.
*
* \param[in] kernel_def The OrtKernelDef instance.
* \return A null-terminated string representing the name of the execution provider.
*
* \since Version 1.24.
*/
KernelDef_GetExecutionProvider: #type (kernel_def: *OrtKernelDef) -> *u8 #c_call;
/** \brief Gets the memory type for a kernel input.
*
* \param[in] kernel_def The OrtKernelDef instance.
* \param[in] input_index The index of the input.
* \param[out] mem_type Output parameter set to the input's memory type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDef_GetInputMemType: #type (kernel_def: *OrtKernelDef, input_index: u64, mem_type: *OrtMemType) -> OrtStatusPtr #c_call;
/** \brief Gets the memory type for a kernel output.
*
* \param[in] kernel_def The OrtKernelDef instance.
* \param[in] output_index The index of the output.
* \param[out] mem_type Output parameter set to the output's memory type.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
KernelDef_GetOutputMemType: #type (kernel_def: *OrtKernelDef, output_index: u64, mem_type: *OrtMemType) -> OrtStatusPtr #c_call;
/** \brief Gets the OrtDataType that represents the data type for a tensor of the given element type.
*
* \param[in] elem_type The tensor's element type.
* \param[out] out Output parameter set to the OrtDataType. Owned by ORT and must not be released.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetTensorDataType: #type (elem_type: ONNXTensorElementDataType, out: **OrtDataType) -> OrtStatusPtr #c_call;
/** \brief Gets the kernel definition for a given node, if any exists for the calling execution provider.
*
* Used within OrtEp::GetCapability() to get the registered kernel definition for the given node.
* The kernel definition is set to NULL if there is no registered kernel definition for the node
* and execution provider.
*
* \param[in] graph_support_info The OrtEpGraphSupportInfo instance to query.
* \param[in] node The node for which to look up a kernel definition.
* \param[out] out_kernel_def Output parameter set to the OrtKernelDef or NULL.
* Owned by ORT and must not be released.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
EpGraphSupportInfo_LookUpKernel: #type (graph_support_info: *OrtEpGraphSupportInfo, node: *OrtNode, out_kernel_def: **OrtKernelDef) -> OrtStatusPtr #c_call;
/** \brief Sets one or more data buffers that collectively hold the pre-packed data for a single shared weight.
*
* \note Used within the implementation of OrtKernelImpl::PrePackWeight() when the kernel wants to share pre-packed
* weight data with other kernels. The buffer data MUST be allocated with the OrtAllocator provided to
* OrtKernelImpl::PrePack.
*
* \note Ownership of weight data transfers to the OrtSharedPrePackedWeightCache instance on success.
* If this function returns an error status, the caller retains ownership of the weight data.
*
* \note Subsequent calls with the same OrtSharedPrePackedWeightCache instance release and replace the old data.
*
* \param[in] prepacked_weight_cache The OrtSharedPrePackedWeightCache instance.
* \param[in] buffer_data_ptrs An array of buffer data pointers that collectively hold the pre-packed data for a
* single shared weight. Note that sometimes a single weight may have multiple pre-packed
* buffers and it is up to the kernel implementation to determine how to split the data
* into multiple buffers (if desired).
* \param[in] buffer_data_sizes An array of buffer byte sizes, one per element in `buffer_data_ptrs`.
* \param[in] num_buffers The number of buffers used to store the data for the shared pre-packed weight.
* Specifies the number of elements in the `buffer_data_ptrs` and `buffer_data_sizes` arrays.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
SharedPrePackedWeightCache_StoreWeightData: #type (prepacked_weight_cache: *OrtSharedPrePackedWeightCache, buffer_data_ptrs: **void, buffer_data_sizes: *u64, num_buffers: u64) -> OrtStatusPtr #c_call;
/** \brief Get the OrtEp instance to which the node is assigned from the OrtKernelInfo.
*
* \note Used within OrtKernelImpl implementations to obtain a reference to the OrtEp.
*
* \param[in] info The ::OrtKernelInfo instance.
* \param[out] ep Output parameter set to the OrtEp instance associated with the OrtKernelInfo.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
KernelInfo_GetEp: #type (info: *OrtKernelInfo, ep: **OrtEp) -> OrtStatusPtr #c_call;
/** \brief Set the details of an OrtDeviceEpIncompatibilityDetails instance.
*
* Used by execution provider factories to set incompatibility details in their
* GetHardwareDeviceIncompatibilityDetails implementation. ORT creates and initializes the object
* before passing it to the EP, so calling this function is optional. The EP uses this function
* to set incompatibility information when the device is not compatible.
*
* \param[in,out] details The OrtDeviceEpIncompatibilityDetails instance to update.
* \param[in] reasons_bitmask Bitmask of OrtDeviceEpIncompatibilityReason values. (0 = no incompatibility).
* \param[in] error_code Optional EP-specific error code (0 = no error).
* \param[in] notes Optional human-readable notes. Can be null.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
DeviceEpIncompatibilityDetails_SetDetails: #type (details: *OrtDeviceEpIncompatibilityDetails, reasons_bitmask: u32, error_code: s32, notes: *u8) -> OrtStatusPtr #c_call;
/** \brief Creates an OrtKernelImpl instance for an If operator.
*
* Control flow operators require access to ORT session internals to orchestrate subgraph operations.
* This function allows an EP to create a properly configured OrtKernelImpl with access to ORT internals that
* the EP can add to its kernel registry.
*
* An EP is required to create an OrtKernelDef that keeps input[0] ('cond') on the CPU (i.e., OrtMemTypeCPUInput)
* as this input is used by CPU logic. The output should remain on the device (i.e., OrtMemTypeDefault), which is
* the default setting, to avoid copying to/from CPU.
*
* Example kernel definition (CXX API):
* Ort::KernelDef kernel_def = Ort::KernelDefBuilder()
* .SetDomain("").SetOperatorType("If").SetSinceVersion(21, 22)
* .SetExecutionProvider("MyEp")
* .SetInputMemType(0, OrtMemTypeCPUInput) // 'cond' on CPU
* .SetOutputMemType(0, OrtMemTypeDefault) // output on EP device
* .AddTypeConstraint("B", ...)
* .AddTypeConstraint("V", ...).Build();
*
* \param[in] kernel_info The ::OrtKernelInfo instance for an If node. This function returns error ORT_FAIL
* if the opset version specified by `kernel_info` is unsupported.
* \param[out] kernel_out Output parameter set to the OrtKernelImpl instance for the If node.
* Must be released via OrtEpApi::ReleaseKernelImpl, unless ownership is transferred
* to ORT (see OrtKernelCreateFunc and OrtEpApi::KernelRegistry_AddKernel).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
CreateIfKernel: #type (kernel_info: *OrtKernelInfo, kernel_out: **OrtKernelImpl) -> OrtStatusPtr #c_call;
/** \brief Creates an OrtKernelImpl instance for a Loop operator.
*
* Control flow operators require access to ORT session internals to orchestrate subgraph operations.
* This function allows an EP to create a properly configured OrtKernelImpl with access to ORT internals that
* the EP can add to its kernel registry.
*
* An EP is required to create an OrtKernelDef that keeps input[0] ('M') and input[1] ('cond') on the CPU
* (i.e., OrtMemTypeCPUInput) as these inputs are used by CPU logic. Input[2] ('v_initial') and the output should
* remain on the device (i.e., OrtMemTypeDefault), which is the default setting, to avoid copying to/from CPU.
*
* Example kernel definition (CXX API):
* Ort::KernelDef kernel_def = Ort::KernelDefBuilder()
* .SetDomain("").SetOperatorType("Loop").SetSinceVersion(21, 22)
* .SetExecutionProvider("MyEp")
* .SetInputMemType(0, OrtMemTypeCPUInput) // 'M' on CPU
* .SetInputMemType(1, OrtMemTypeCPUInput) // 'cond' on CPU
* .SetInputMemType(2, OrtMemTypeDefault) // 'v_initial' on EP device
* .SetOutputMemType(0, OrtMemTypeDefault) // output on EP device
* .AddTypeConstraint("I", ...)
* .AddTypeConstraint("B", ...)
* .AddTypeConstraint("V", ...).Build();
*
* \param[in] kernel_info The ::OrtKernelInfo instance for a Loop node. This function returns error ORT_FAIL
* if the opset version specified by `kernel_info` is unsupported.
* \param[in] helper A OrtLoopKernelHelper instance that contains helper functions that ORT calls during kernel
* execution to operate on tensors allocated with the EP's device memory.
* ORT will call OrtLoopKernelHelper::Release() to release the helper and its resources.
* \param[out] kernel_out Output parameter set to the OrtKernelImpl instance for the Loop node.
* Must be released via OrtEpApi::ReleaseKernelImpl, unless ownership is transferred
* to ORT (see OrtKernelCreateFunc and OrtEpApi::KernelRegistry_AddKernel).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
CreateLoopKernel: #type (kernel_info: *OrtKernelInfo, helper: *OrtLoopKernelHelper, kernel_out: **OrtKernelImpl) -> OrtStatusPtr #c_call;
/** \brief Creates an OrtKernelImpl instance for a Scan operator. Does not support opset versions older than 9.
*
* Control flow operators require access to ORT session internals to orchestrate subgraph operations.
* This function allows an EP to create a properly configured OrtKernelImpl with access to ORT internals that
* the EP can add to its kernel registry.
*
* It is recommended that an EP create an OrtKernelDef that keeps the inputs and outputs on the EP's
* device (i.e., OrtMemTypeDefault), which is the default setting, to avoid copying to/from CPU.
*
* Example kernel definition (CXX API):
* Ort::KernelDef kernel_def = Ort::KernelDefBuilder()
* .SetDomain("").SetOperatorType("Scan").SetSinceVersion(21, 22)
* .SetExecutionProvider("MyEp")
* .SetInputMemType(0, OrtMemTypeDefault) // input[0] on EP device
* .SetOutputMemType(0, OrtMemTypeDefault) // output[0] on EP device
* .AddTypeConstraint("V", ...).Build();
*
* \param[in] kernel_info The ::OrtKernelInfo instance for a Scan node. This function returns error ORT_FAIL
* if the opset version specified by `kernel_info` is unsupported.
* \param[in] helper A OrtScanKernelHelper instance that contains helper functions that ORT calls during kernel
* execution to operate on tensors allocated with the EP's device memory.
* ORT will call OrtScanKernelHelper::Release() to release the helper and its resources.
* \param[out] kernel_out Output parameter set to the OrtKernelImpl instance for the Scan node.
* Must be released via OrtEpApi::ReleaseKernelImpl, unless ownership is transferred
* to ORT (see OrtKernelCreateFunc and OrtEpApi::KernelRegistry_AddKernel).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
CreateScanKernel: #type (kernel_info: *OrtKernelInfo, helper: *OrtScanKernelHelper, kernel_out: **OrtKernelImpl) -> OrtStatusPtr #c_call;
ReleaseKernelImpl: #type (input: *OrtKernelImpl) -> void #c_call;
/** \brief Gets a new OrtKeyValuePairs instance containing a copy of all configuration entries set on the environment.
*
* \note An application provides environment-level configuration options for execution provider libraries by
* using keys with the prefix 'ep_factory.\\<ep_name\\>.'. Ex: the key 'ep_factory.my_ep.some_ep_key' represents
* a key named 'some_ep_key' that is meant to be consumed by an execution provider named 'my_ep'. Refer to
* the specific execution provider's documentation for valid keys and values.
*
* \note Refer to onnxruntime_env_config_keys.h for common configuration entry keys and their supported values.
*
* \param[out] config_entries Output parameter set to the OrtKeyValuePairs instance containing all configuration entries.
* Must be released via OrtApi::ReleaseKeyValuePairs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.24
*/
GetEnvConfigEntries: #type (config_entries: **OrtKeyValuePairs) -> OrtStatusPtr #c_call;
/** \brief Get an operator schema from the global schema registry.
*
* Looks up a schema by name, maximum inclusive version, and domain.
* The returned pointer is owned by the caller and must be released via ReleaseOpSchema.
* If the schema is not found, *out_schema is set to nullptr (no allocation occurs).
*
* Available schemas include standard ONNX operators (domain "" or "ai.onnx"), ONNX ML operators
* (domain "ai.onnx.ml"), and ORT contrib operators (domain "com.microsoft").
*
* \param[in] name A null-terminated string for the operator name.
* \param[in] max_inclusive_version The maximum inclusive opset version.
* \param[in] domain A null-terminated string for the operator domain.
* \param[out] out_schema Output parameter set to the schema pointer, or nullptr if not found.
* Must be released via OrtEpApi::ReleaseOpSchema.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
GetOpSchema: #type (name: *u8, max_inclusive_version: s32, domain: *u8, out_schema: **OrtOpSchema) -> OrtStatusPtr #c_call;
ReleaseOpSchema: #type (input: *OrtOpSchema) -> void #c_call;
/** \brief Get the first ONNX opset version that introduced this operator schema.
*
* If an operator has had no changes that break backwards compatibility, the `since_version` is
* just the first opset version that introduced the operator. However, if the operator has had breaking changes,
* then `since_version` corresponds to the opset version that introduced the breaking change.
*
* For example, suppose operator "Foo" was added in version 3 and had a breaking change in version 6.
* Then, there will be an operator schema entry for "Foo" with a since_version of 3 and another updated
* operator schema entry for "Foo" with a since_version of 6.
*
* \param[in] schema The OrtOpSchema instance.
* \param[out] out Output parameter set to the ONNX opset version.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetSinceVersion: #type (schema: *OrtOpSchema, out: *s32) -> OrtStatusPtr #c_call;
/** \brief Get the number of inputs defined by the operator schema.
*
* \param[in] schema The OrtOpSchema instance.
* \param[out] out Output parameter set to the number of inputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetNumInputs: #type (schema: *OrtOpSchema, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the name of the i-th input formal parameter from an operator schema.
*
* \param[in] schema The OrtOpSchema instance.
* \param[in] index Zero-based index of the input parameter.
* \param[out] out Output parameter set to the name of the input parameter (null-terminated UTF8 string).
* Valid as long as the OrtOpSchema exists.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetInputName: #type (schema: *OrtOpSchema, index: u64, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the type constraint for the i-th input formal parameter from an operator schema.
*
* Returns a non-owning pointer to the OrtOpSchemaTypeConstraint associated with the given input.
* The returned pointer is valid as long as the parent OrtOpSchema is alive.
* If the input has no type constraint, *out is set to nullptr.
*
* Multiple inputs sharing the same type constraint (e.g., both using "T") return the same pointer.
*
* \param[in] schema The OrtOpSchema instance.
* \param[in] index Zero-based index of the input parameter.
* \param[out] out Output parameter set to the type constraint, or NULL if the input has no type constraint.
* Valid as long as the OrtOpSchema exists.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetInputTypeConstraint: #type (schema: *OrtOpSchema, index: u64, out: **OrtOpSchemaTypeConstraint) -> OrtStatusPtr #c_call;
/** \brief Get the number of outputs defined by the operator schema.
*
* \param[in] schema The OrtOpSchema instance.
* \param[out] out Output parameter set to the number of outputs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetNumOutputs: #type (schema: *OrtOpSchema, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the name of the i-th output formal parameter from an operator schema.
*
* \param[in] schema The OrtOpSchema instance.
* \param[in] index Zero-based index of the output parameter.
* \param[out] out Output parameter set to the name of the output parameter (null-terminated UTF8 string).
* Valid as long as the OrtOpSchema exists.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetOutputName: #type (schema: *OrtOpSchema, index: u64, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the type constraint for the i-th output formal parameter from an operator schema.
*
* Returns a non-owning pointer to the OrtOpSchemaTypeConstraint associated with the given output.
* The returned pointer is valid as long as the parent OrtOpSchema is alive.
* If the output has no type constraint, *out is set to nullptr.
*
* Multiple outputs sharing the same type constraint return the same pointer.
* Pointer equality can be used to check if two outputs share a type constraint.
*
* \param[in] schema The OrtOpSchema instance.
* \param[in] index Zero-based index of the output parameter.
* \param[out] out Output parameter set to the type constraint, or NULL if the output has no type constraint.
* Valid as long as the OrtOpSchema exists.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetOutputTypeConstraint: #type (schema: *OrtOpSchema, index: u64, out: **OrtOpSchemaTypeConstraint) -> OrtStatusPtr #c_call;
/** \brief Get the number of unique type constraints in the operator schema.
*
* \param[in] schema The OrtOpSchema instance.
* \param[out] out Output set to the number of type constraints.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetTypeConstraintCount: #type (schema: *OrtOpSchema, out: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the i-th type constraint from the operator schema.
*
* Returns a non-owning pointer to the OrtOpSchemaTypeConstraint at the given index.
* The returned pointer is valid as long as the parent OrtOpSchema is alive.
*
* Constraints are returned in the order they are declared in the ONNX operator schema
* definition. The order is stable but has no semantic significance.
*
* Use this API to iterate all type constraints (e.g., to register allowed types for
* each constraint). Use OpSchema_GetInputTypeConstraint / OpSchema_GetOutputTypeConstraint
* to look up the constraint for a specific input or output.
*
* \param[in] schema The OrtOpSchema instance.
* \param[in] index Zero-based index of the type constraint.
* \param[out] out Output parameter set to the type constraint.
* Valid as long as the OrtOpSchema exists.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchema_GetTypeConstraint: #type (schema: *OrtOpSchema, index: u64, out: **OrtOpSchemaTypeConstraint) -> OrtStatusPtr #c_call;
/** \brief Get the type parameter name of a type constraint (e.g., "T", "T1").
*
* \param[in] type_constraint The OrtOpSchemaTypeConstraint instance.
* \param[out] out Output parameter set to the type parameter name.
* Valid as long as the parent OrtOpSchema exists.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchemaTypeConstraint_GetTypeParamName: #type (type_constraint: *OrtOpSchemaTypeConstraint, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the allowed type strings for a type constraint.
*
* Returns an array of null-terminated strings representing the allowed data types
* (e.g., "tensor(float)", "tensor(double)"). The array and its contents are valid
* as long as the parent OrtOpSchema exists.
*
* \param[in] type_constraint The OrtOpSchemaTypeConstraint instance.
* \param[out] out_types Output parameter set to the output array of type strings.
* Valid as long as the parent OrtOpSchema exists.
* \param[out] num_types Output parameter set to the number of elements in the output array.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchemaTypeConstraint_GetAllowedTypes: #type (type_constraint: *OrtOpSchemaTypeConstraint, out_types: ***u8, num_types: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the input indices that use a type constraint.
*
* Returns an array of zero-based input indices whose formal parameter type string
* matches this type constraint. The array is valid as long as the parent OrtOpSchema exists.
*
* \param[in] type_constraint The OrtOpSchemaTypeConstraint instance.
* \param[out] out_indices Output parameter set to the output array of input indices.
* \param[out] count Output parameter set to the number of elements in the output array.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchemaTypeConstraint_GetInputIndices: #type (type_constraint: *OrtOpSchemaTypeConstraint, out_indices: **u64, count: *u64) -> OrtStatusPtr #c_call;
/** \brief Get the output indices that use a type constraint.
*
* Returns an array of zero-based output indices whose formal parameter type string
* matches this type constraint. The array is valid as long as the parent OrtOpSchema exists.
*
* \param[in] type_constraint The OrtOpSchemaTypeConstraint instance.
* \param[out] out_indices Output parameter set to the output array of output indices.
* \param[out] count Output parameter set to the number of elements in the output array.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
OpSchemaTypeConstraint_GetOutputIndices: #type (type_constraint: *OrtOpSchemaTypeConstraint, out_indices: **u64, count: *u64) -> OrtStatusPtr #c_call;
/** \brief Create a profiling event.
*
* An EP profiler calls this to create an event to pass to OrtEpApi::ProfilingEventsContainer_AddEvents.
* The returned event must be released via OrtEpApi::ReleaseProfilingEvent after it has been added.
*
* \param[in] category The event category (e.g., session, node, kernel, or API).
* \param[in] process_id Process ID. Set to -1 if does not apply.
* \param[in] thread_id Thread ID. Set to -1 if does not apply.
* \param[in] event_name Null-terminated string representing the event name. ORT copies this string.
* \param[in] timestamp_us Starting timestamp in microseconds relative to the profiling start time.
* An OrtEpProfilerImpl should record its own clock's profiling start time and
* use the `ep_profiling_start_offset_ns` value passed to OrtEpProfilerImpl::StartProfiling
* to compute this value as:
* timestamp_us = (ep_profiling_start_offset_ns +
* (ep_event_time_ns - ep_profiling_start_time_ns)) / 1000
* \param[in] duration_us Duration in microseconds.
* \param[in] arg_keys Array of null-terminated argument key strings. Can be NULL if num_args is 0.
* ORT copies these strings.
* \param[in] arg_values Array of null-terminated argument value strings. Can be NULL if num_args is 0.
* ORT copies these strings.
* \param[in] num_args Number of key-value argument pairs.
* \param[out] out Output parameter set to the created profiling event.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
CreateProfilingEvent: #type (category: OrtProfilingEventCategory, process_id: s32, thread_id: s32, event_name: *u8, timestamp_us: s64, duration_us: s64, arg_keys: **u8, arg_values: **u8, num_args: u64, out: **OrtProfilingEvent) -> OrtStatusPtr #c_call;
/** \brief Release an opaque profiling event created via CreateProfilingEvent.
*
* \since Version 1.25.
*/
ReleaseProfilingEvent: #type (input: *OrtProfilingEvent) -> void #c_call;
/** \brief Get the event category of a profiling event.
*
* \param[in] event The OrtProfilingEvent instance.
* \param[out] out Output parameter set to the event category.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
ProfilingEvent_GetCategory: #type (event: *OrtProfilingEvent, out: *OrtProfilingEventCategory) -> OrtStatusPtr #c_call;
/** \brief Get the event name of a profiling event.
*
* \param[in] event The OrtProfilingEvent instance.
* \param[out] out Output parameter set to the event name as a null-terminated UTF-8 string.
* Do not free as it is owned by the OrtProfilingEvent instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
ProfilingEvent_GetName: #type (event: *OrtProfilingEvent, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Get the start timestamp of a profiling event in microseconds.
*
* \param[in] event The OrtProfilingEvent instance.
* \param[out] out Output parameter set to the start timestamp of the profiling event in microseconds relative to
* the profiling start time.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
ProfilingEvent_GetTimestampUs: #type (event: *OrtProfilingEvent, out: *s64) -> OrtStatusPtr #c_call;
/** \brief Get the duration of a profiling event in microseconds.
*
* \param[in] event The OrtProfilingEvent instance.
* \param[out] out Output parameter set to the event duration in microseconds.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
ProfilingEvent_GetDurationUs: #type (event: *OrtProfilingEvent, out: *s64) -> OrtStatusPtr #c_call;
/** \brief Get the value of an event argument by its key.
*
* The value is set to NULL if the key is not found.
*
* \param[in] event The OrtProfilingEvent instance.
* \param[in] key Null-terminated argument key to look up.
* \param[out] out Output parameter set to the argument value string, or NULL if not found.
* The value is a null-terminated UTF-8 string.
* Do not free as the string is owned by the OrtProfilingEvent instance.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
* \since Version 1.25.
*/
ProfilingEvent_GetArgValue: #type (event: *OrtProfilingEvent, key: *u8, out: **u8) -> OrtStatusPtr #c_call;
/** \brief Add EP profiling events to an events container.
*
* An EP profiler calls this function to report new EP profiling events (e.g., GPU kernel timings) during
* OrtEpProfilerImpl::EndProfiling(). ORT copies the EP event data during this call. The EP retains ownership of the
* OrtProfilingEvent instances and must release them via ReleaseProfilingEvent after this call returns.
* This function may be called multiple times within a single EndProfiling call to add EP events in batches.
*
* \param[in] events_container The OrtProfilingEventsContainer instance provided by ORT
* to OrtEpProfilerImpl::EndProfiling().
* \param[in] events Array of pointers to opaque OrtProfilingEvent instances.
* \param[in] num_events Number of events in the `events` array. Must be greater than 0.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
ProfilingEventsContainer_AddEvents: #type (events_container: *OrtProfilingEventsContainer, events: **OrtProfilingEvent, num_events: u64) -> OrtStatusPtr #c_call;
/** \brief Get the weightless source model byte buffer from session options.
*
* Returns the buffer and size set by SessionOptionsSetWeightlessSourceModelBuffer, or NULL/0 if not set.
* The EP can use this during CreateEp or Compile to access the source model for weightless
* EPContext model sessions.
*
* \note If the source model is provided as a file path, the EP should read the
* "ep.context_source_model_path" (kOrtSessionOptionEpContextSourceModelPath) session config entry
* via GetSessionConfigEntry instead.
*
* \note Recommended EP precedence for locating the source model:
* buffer (this API) > file path ("ep.context_source_model_path") > "onnx_model_filename" EPContext
* node attribute.
*
* \param[in] session_options The OrtSessionOptions instance.
* \param[out] source_model_data Output parameter set to the source model buffer, or NULL if not set.
* \param[out] source_model_data_length Output parameter set to the buffer size, or 0 if not set.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.29.
*/
SessionOptionsGetWeightlessSourceModelBuffer: #type (session_options: *OrtSessionOptions, source_model_data: **void, source_model_data_length: *u64) -> OrtStatusPtr #c_call;
}
/**
* \brief The data layout type.
*
* EPs may specify a preferred data layout type. ORT's default layout type is OrtEpDataLayout_NCHW, or
* OrtEpDataLayout_Default.
*
* \since Version 1.23.
*/
OrtEpDataLayout :: enum s32 {
OrtEpDataLayout_NCHW :: 0;
OrtEpDataLayout_NHWC :: 1;
OrtEpDataLayout_Default :: 0;
}
/**
* \brief Node assignment policies for graph capture validation.
*
* When graph capture is enabled, ORT validates that nodes are assigned to EPs in a way that is
* compatible with graph capture. An EP can specify which validation policy ORT should apply.
*
* \since Version 1.26.
*/
OrtGraphCaptureNodeAssignmentPolicy :: enum s32 {
OrtGraphCaptureNodeAssignmentPolicy_ALL_NODES_ON_EP :: 0;
OrtGraphCaptureNodeAssignmentPolicy_ALLOW_CPU_FOR_SHAPES :: 1;
}
/**
* \brief Describes the scope of an EP's weightless mode support.
*
* Returned by OrtEp::GetWeightlessSupport() to indicate which types of initializers
* the EP can operate on without copying.
*
* \since Version 1.29.
*/
OrtWeightlessSupport :: enum s32 {
OrtWeightlessSupport_NONE :: 0;
OrtWeightlessSupport_EXTERNAL_ONLY :: 1;
OrtWeightlessSupport_ALL :: 2;
}
/** \addtogroup Global
* @{
*/
OrtEp :: struct {
/** \brief The ONNX Runtime API version the execution provider was compiled with.
*
* Implementation should set this to ORT_API_VERSION.
* ORT uses this to avoid calling functions that were not available when the EP was compiled.
*
* \since Version 1.22.
*/
ort_version_supported: u32;
/** \brief Get the execution provider name.
*
* The returned string should be a null-terminated, UTF-8 encoded string. ORT will copy it.
*
* \param[in] this_ptr The OrtEp instance.
* \return The execution provider name.
*
* \since Version 1.22.
*/
GetName: #type (this_ptr: *OrtEp) -> *u8 #c_call;
/** \brief Get information about the nodes supported by the OrtEp instance.
*
* IMPORTANT: This is not the final version of this API function. This is currently experimental but will
* be stabilized by the ONNX Runtime 1.23 release.
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] graph The OrtGraph instance for which to populate node support. The OrtGraph could be a nested subgraph
* contained by a node (e.g., an If or Loop node). ONNX Runtime calls this function separately
* for each nested subgraph.
* \param[inout] graph_support_info OrtEpGraphSupportInfo instance that the implementer must fill out in order to
* specify the supported nodes.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
GetCapability: #type (this_ptr: *OrtEp, graph: *OrtGraph, graph_support_info: *OrtEpGraphSupportInfo) -> OrtStatusPtr #c_call;
/** \brief Compile OrtGraph instances assigned to the OrtEp. Implementer must set a OrtNodeComputeInfo instance
* for each OrtGraph in order to define its computation function.
*
* If the session is configured to generate a pre-compiled model, the execution provider must return EPContext nodes,
* as OrtNode instances, that ONNX Runtime uses to create a pre-compiled model, known as an "EPContext model".
* An EPContext model contains EPContext nodes. Each EPContext node encapsulates the pre-compiled binary data for a
* OrtGraph compiled for a specific execution provider. For more details about the EPContext design, refer to:
* \htmlonly
* <a href="https://onnxruntime.ai/docs/execution-providers/EP-Context-Design.html">EPContext design document.</a>
* \endhtmlonly
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] graphs Array of `count` OrtGraph instances to compile. Each graph contains only the nodes for
* which the execution provider indicated support. Nested subgraphs contained by a
* node, such as an If or Loop, have separate OrtGraph instances.
* \param[in] fused_nodes Array of `count` fused nodes that will replace the compiled graphs.
* Each fused node is an OrtNode initialized with the intended fused node name and
* input/output information.
* \param[in] count The number of OrtGraph instances to compile.
* \param[out] node_compute_infos Array of `count` OrtNodeComputeInfo instances that define each OrtGraph instance's
* computation function. The implementer allocates the OrtNodeComputeInfo instances.
* ORT calls ReleaseNodeComputeInfos() to release multiple instances in a batch.
* \param[out] ep_context_nodes Output array of `count` OrtNode instances, each representing an EPContext
* node for a compiled OrtGraph. The execution provider must use
* OrtModelEditorApi::CreateNode to create the OrtNode instances. ONNX Runtime takes
* ownership of the OrtNode instances, so the execution provider must NOT call
* OrtApi::ReleaseNode. Should be ignored if the session is not configured to generate an
* EPContext model.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Do NOT cache the provided OrtGraph instances in any of the OrtNodeComputeInfo functions because the
* graphs are only valid for the duration of the call to Compile. Any graph/node/input/output
* names that are needed by the OrtNodeComputeInfo functions must be copied and stored by the OrtEp.
*
* \note As of version 1.24, implementation of this function is optional if the EP does not compile nodes and
* uses a kernel registry instead.
*
* \since Version 1.23.
*/
Compile: #type (this_ptr: *OrtEp, graphs: **OrtGraph, fused_nodes: **OrtNode, count: u64, node_compute_infos: **OrtNodeComputeInfo, ep_context_nodes: **OrtNode) -> OrtStatusPtr #c_call;
/** \brief Release OrtNodeComputeInfo instances.
*
* \param[in] this_ptr The OrtEp instance.
* \param[inout] node_compute_infos The OrtNodeComputeInfo instances to release.
* \param[in] num_node_compute_infos The number of OrtNodeComputeInfo instances.
*
* \note As of version 1.24, implementation of this function is optional if the EP does not compile nodes and
* uses a kernel registry instead.
*
* \since Version 1.23.
*/
ReleaseNodeComputeInfos: #type (this_ptr: *OrtEp, node_compute_infos: **OrtNodeComputeInfo, num_node_compute_infos: u64) -> void #c_call;
/** \brief Get the EP's preferred data layout.
*
* \note Implementation of this function is optional.
* If not implemented, ORT will assume that this EP prefers the data layout `OrtEpDataLayout::NCHW`.
*
* \param[in] this_ptr The OrtEp instance.
* \param[out] preferred_data_layout The EP's preferred data layout.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
GetPreferredDataLayout: #type (this_ptr: *OrtEp, preferred_data_layout: *OrtEpDataLayout) -> OrtStatusPtr #c_call;
/** \brief Given an op with domain `domain` and type `op_type`, determine whether an associated node's data layout
* should be converted to `target_data_layout`.
* If the EP prefers a non-default data layout (see `GetPreferredDataLayout()`), this function will be called
* during layout transformation with `target_data_layout` set to the EP's preferred data layout.
*
* \note Implementation of this function is optional.
* If an EP prefers a non-default data layout, it may implement this to customize the specific op data layout
* preferences at a finer granularity.
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] domain The op domain. An empty string means the ONNX domain.
* \param[in] op_type The op type.
* \param[in] target_data_layout The target data layout.
* \param[out] should_convert Whether the associated node's data layout should be converted to `target_data_layout`.
* If greater than 0, convert.
* If 0, don't convert.
* Otherwise, if less than 0, leave the decision to ORT.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ShouldConvertDataLayoutForOp: #type (this_ptr: *OrtEp, domain: *u8, op_type: *u8, target_data_layout: OrtEpDataLayout, should_convert: *s32) -> OrtStatusPtr #c_call;
/** \brief Set dynamic options on this EP.
*
* Dynamic options can be set by the user at any time after session creation with `OrtApi::SetEpDynamicOptions()`.
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] option_keys The dynamic option keys.
* \param[in] option_values The dynamic option values.
* \param[in] num_options The number of dynamic options.
*
* \note Implementation of this function is optional.
* An EP should only implement this if it needs to handle any dynamic options.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
SetDynamicOptions: #type (this_ptr: *OrtEp, option_keys: **u8, option_values: **u8, num_options: u64) -> OrtStatusPtr #c_call;
/** \brief Called by ORT to notify the EP of the start of a run.
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] run_options The run options for this run.
*
* \note Implementation of this function is optional.
* When graph capture/replay is enabled and a graph has already been captured, ORT skips
* normal execution and calls ReplayGraph() directly, so this callback is not invoked for replay runs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
OnRunStart: #type (this_ptr: *OrtEp, run_options: *OrtRunOptions) -> OrtStatusPtr #c_call;
/** \brief Called by ORT to notify the EP of the end of a run.
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] run_options The run options for this run.
* \param[in] sync_stream Whether any associated stream should be synchronized during this call.
* Only applicable if there is such a stream.
*
* \note Implementation of this function is optional.
* When graph capture/replay is enabled and a graph has already been captured, ORT skips
* normal execution and calls ReplayGraph() directly, so this callback is not invoked for replay runs.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
OnRunEnd: #type (this_ptr: *OrtEp, run_options: *OrtRunOptions, sync_stream: bool) -> OrtStatusPtr #c_call;
/** \brief Create an OrtAllocator for the given OrtMemoryInfo for an OrtSession.
*
* The OrtMemoryInfo instance will match one of the values set in the OrtEpDevice using EpDevice_AddAllocatorInfo.
* Any allocator specific options should be read from the session options.
*
* If nullptr OrtEpFactory::CreateAllocator will be used.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] memory_info The OrtMemoryInfo to create the allocator for. May be nullptr.
* \param[out] allocator The created OrtAllocator instance. Set to nullptr if the default CPU allocator is used.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CreateAllocator: #type (this_ptr: *OrtEp, memory_info: *OrtMemoryInfo, allocator: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Create a synchronization stream for the given memory device for an OrtSession.
*
* This is used to create a synchronization stream for the execution provider and is used to synchronize
* operations on the device during model execution.
* Any stream specific options should be read from the session options.
*
* If nullptr OrtEpFactory::CreateSyncStreamForDevice will be used.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] memory_device The OrtMemoryDevice to create the synchronization stream for.
* \param[out] stream The created OrtSyncStreamImpl instance. nullptr if the execution provider is not stream aware.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CreateSyncStreamForDevice: #type (this_ptr: *OrtEp, memory_device: *OrtMemoryDevice, stream: **OrtSyncStreamImpl) -> OrtStatusPtr #c_call;
/** \brief Get a string with details about the EP stack used to produce a compiled model.
*
* This function gets a compatibility information string that contains details about the execution provider
* used to compile a given model. This string can later be used with ValidateCompiledModelCompatibilityInfo
* to determine if a compiled model is compatible with the EP.
*
* The returned string should be a null-terminated, UTF-8 encoded string. ORT will copy it.
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] graph The OrtGraph instance for which to generate compatibility information.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
GetCompiledModelCompatibilityInfo: #type (this_ptr: *OrtEp, graph: *OrtGraph) -> *u8 #c_call;
/** \brief Gets the execution provider's kernel registry, if any.
*
* A kernel registry contains kernel creation information for operator kernels supported by an EP.
*
* \param[in] this_ptr The OrtEp instance.
* \param[out] kernel_registry Output parameter set to the EP's kernel registry, which must remain valid throughout
* the lifetime of the EP. Can be NULL if the EP doesn't use a kernel registry.
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional. If set to NULL, ORT assumes the EP compiles nodes.
*
* \since Version 1.24.
*/
GetKernelRegistry: #type (this_ptr: *OrtEp, kernel_registry: **OrtKernelRegistry) -> OrtStatusPtr #c_call;
/** \brief Gets whether the execution provider supports concurrent run calls made on the session.
*
* \param[in] this_ptr The OrtEp instance.
* \param[out] is_supported Whether concurrent runs are supported.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional and it may be set to NULL.
* If not implemented, ORT assumes that concurrent runs are supported.
*
* \since Version 1.24.
*/
IsConcurrentRunSupported: #type (this_ptr: *OrtEp, is_supported: *bool) -> OrtStatusPtr #c_call;
/** \brief Called by ORT to block until the device has completed all preceding requested tasks.
*
* Currently this is primarily used by the IOBinding object to ensure that all inputs have been copied
* to the device before execution begins.
*
* \param[in] this_ptr The OrtEp instance.
*
* \note Implementation of this function is optional.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.25.
*/
Sync: #type (this_ptr: *OrtEp) -> OrtStatusPtr #c_call;
/** \brief Return a new profiler for the execution provider.
*
* If the EP supports profiling, it should create and return an OrtEpProfilerImpl instance.
* ORT takes ownership of each non-NULL instance returned and will call OrtEpProfilerImpl::Release when
* it is no longer needed.
*
* ORT may call this function multiple times over the lifetime of a single OrtEp instance, for example
* during EP registration and again per run if run-level profiling is enabled. Each call is independent and
* the EP must return a new profiler instance (or NULL if profiling is not supported).
*
* \param[in] this_ptr The OrtEp instance.
* \param[out] profiler Output parameter set to a new OrtEpProfilerImpl instance created by the EP.
* Set to NULL if the EP does not support profiling.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional. If set to NULL, ORT assumes the EP does not
* support profiling.
*
* \since Version 1.25.
*/
CreateProfiler: #type (this_ptr: *OrtEp, profiler: **OrtEpProfilerImpl) -> OrtStatusPtr #c_call;
/** \brief Indicate whether the graph capturing mode (e.g., CUDA graph) is enabled for the provider.
*
* Graph capture allows an EP to record a sequence of device (e.g., GPU) operations during an initial run and replay
* them on subsequent runs, bypassing per-kernel CPU launch overhead.
*
* Applications enable graph capture via EP-specific provider options (e.g., `enable_cuda_graph=1`
* for the CUDA EP). An EP should return true from this function if it has been configured to enable
* graph capture/replay.
*
* **ORT graph capture/replay summary:**
* During OrtSession initialization, ORT calls OrtEp::IsGraphCaptureEnabled() on each EP in the order specified during
* provider registration with the session. If an EP returns true, ORT validates that the graph is suitable for
* graph capture, and if so, caches the EP for graph capture during the next run. The graph validation ensures
* that there are no control flow nodes and that node-to-EP assignments are compatible with the policy specified
* by the EP via OrtEp::GetGraphCaptureNodeAssignmentPolicy().
* Note that an OrtSession only supports graph capture for one EP (i.e., the first EP to claim support).
*
* During the first call to OrtApi::Run() for the OrtSession, ORT performs multiple internal runs of the model
* until the EP indicates that the graph has been captured by returning `true` from `OrtEp::IsGraphCaptured()`.
* If the EP is unable to capture the graph within 8 runs, the call to OrtApi::Run() returns an error OrtStatus.
* Each internal run invokes `OrtEp::OnRunStart()`, normal execution, and `OrtEp::OnRunEnd()`. EPs should use
* these run callbacks to track the number of necessary warm-up runs and begin/end graph capture when ready.
*
* After successful graph capture, subsequent calls to OrtApi::Run() skip normal execution and ORT instead calls
* `OrtEp::ReplayGraph()` directly.
*
* Applications can capture and replay multiple graphs (e.g., one per distinct input shape) by setting the
* `"gpu_graph_id"` run config entry via `OrtApi::AddRunConfigEntry()` to different integer values. ORT passes
* the value as the `graph_annotation_id` parameter to `OrtEp::IsGraphCaptured()` and `OrtEp::ReplayGraph()`.
*
* \param[in] this_ptr The OrtEp instance.
* \return true if graph capture mode is enabled, false otherwise.
*
* \note Implementation of this function is optional. If set to NULL, ORT assumes graph capture is not enabled.
* \note If this function returns true, `OrtEp::IsGraphCaptured` and `OrtEp::ReplayGraph` must also be implemented.
* If either is NULL, ORT will log a warning and ignore this EP for graph capture.
*
* \since Version 1.26.
*/
IsGraphCaptureEnabled: #type (this_ptr: *OrtEp) -> bool #c_call;
/** \brief Indicate whether a graph has been captured and instantiated.
*
* ORT calls this before each `Session::Run()`. If true, ORT calls `ReplayGraph()` instead of
* normal execution. After a run where this returns false, ORT automatically retries until it
* returns true (handling warm-up runs transparently).
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] graph_annotation_id Identifies which captured graph to query.
* Applications can set this value via `OrtApi::AddRunConfigEntry()` with the key `"gpu_graph_id"`.
* The default value is 0 when the run config entry is not set.
* Setting different IDs allows the EP to capture and manage multiple graphs (e.g., one per
* distinct input shape). A value of -1 means graph capture/replay should be skipped for this run.
* \return true if the graph has been captured, false otherwise.
*
* \note This function must be implemented if `OrtEp::IsGraphCaptureEnabled` is implemented and may return true.
*
* \since Version 1.26.
*/
IsGraphCaptured: #type (this_ptr: *OrtEp, graph_annotation_id: s32) -> bool #c_call;
/** \brief Run the instantiated (captured) graph.
*
* Called by ORT instead of normal execution when `IsGraphCaptured()` returns true.
*
* \param[in] this_ptr The OrtEp instance.
* \param[in] graph_annotation_id Identifies which captured graph to replay.
* Applications can set this value via `OrtApi::AddRunConfigEntry()` with the key `"gpu_graph_id"`.
* The default value is 0 when the run config entry is not set.
* A value of -1 means graph replay should be skipped for this run.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note This function must be implemented if `OrtEp::IsGraphCaptureEnabled` is implemented and may return true.
*
* \since Version 1.26.
*/
ReplayGraph: #type (this_ptr: *OrtEp, graph_annotation_id: s32) -> OrtStatusPtr #c_call;
/** \brief Get the node assignment validation policy for graph capture.
*
* When graph capture is enabled, ORT validates that nodes are assigned to EPs in a way that is
* compatible with graph capture. This function tells ORT which validation policy to apply.
*
* \param[in] this_ptr The OrtEp instance.
* \return The node assignment policy for graph capture.
*
* \note Implementation of this function is optional. If set to NULL, ORT uses
* OrtGraphCaptureNodeAssignmentPolicy_ALL_NODES_ON_EP (strictest validation).
*
* \since Version 1.26.
*/
GetGraphCaptureNodeAssignmentPolicy: #type (this_ptr: *OrtEp) -> OrtGraphCaptureNodeAssignmentPolicy #c_call;
/** \brief Query the available device resource for partitioning budget.
*
* Called by ORT during graph partitioning when no explicit resource budget threshold
* has been configured via session options. The EP should query its device for the
* currently available resource (e.g., free GPU memory) and return it as an OrtResourceCount.
*
* If the EP does not support resource querying, set this function pointer to NULL.
* ORT will skip threshold-based budget enforcement in that case.
*
* \param[in] this_ptr The OrtEp instance.
* \param[out] available The available device resource.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional. If set to NULL, no automatic
* resource threshold is established and budget enforcement requires an explicit
* threshold from session options.
*
* \since Version 1.26.
*/
GetAvailableResource: #type (this_ptr: *OrtEp, available: *OrtResourceCount) -> OrtStatusPtr #c_call;
/** \brief Called by ORT when session initialization is complete.
*
* This provides an opportunity for execution providers to optionally synchronize and
* clean up temporary resources to reduce memory usage and ensure the first inference run is fast.
*
* \param[in] this_ptr The OrtEp instance.
*
* \note Implementation of this function is optional. If set to NULL, ORT assumes no
* post-initialization work is needed and treats it as a no-op success.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.27.
*/
OnSessionInitializationEnd: #type (this_ptr: *OrtEp) -> OrtStatusPtr #c_call;
/** \brief Get the EP's default memory device.
*
* The EP's default memory device identifies the hardware the EP operates on. ORT uses it to:
* - Determine if data copies are needed between EPs (inserting memcpy nodes at EP boundaries)
* - Determine if the EP is CPU-based (which affects synchronization and data transfer decisions)
* - Bind execution streams to the correct device
*
* If the implementation allows an EP to be created with multiple EpDevices this should return the OrtMemoryDevice
* that ORT should consider as default for this EP instance.
*
* An OrtMemoryDevice is obtained from an OrtMemoryInfo via `OrtEpApi::MemoryInfo_GetMemoryDevice()`.
* Typically, an EP creates OrtMemoryInfo instances and registers them with its OrtEpDevice(s) via
* `OrtEpApi::EpDevice_AddAllocatorInfo()`. The OrtMemoryDevice returned here must correspond to an
* OrtMemoryInfo registered as an `OrtDeviceAllocator` entry (either `OrtDeviceMemoryType_DEFAULT` or
* `OrtDeviceMemoryType_HOST_ACCESSIBLE`). An OrtMemoryDevice from an `OrtReadOnlyAllocator` entry is
* not accepted as the EP's default/identity device.
*
* The returned pointer must remain valid for the lifetime of the OrtEp instance
* (typically by storing the parent OrtMemoryInfo as a member of the EP).
*
* If this function is not implemented (NULL), or if it sets `device` to NULL, ORT infers
* the default memory device from the first OrtEpDevice's `OrtDeviceAllocator` entry with
* `OrtDeviceMemoryType_DEFAULT` registered via `EpDevice_AddAllocatorInfo`. EPs created against
* multiple OrtEpDevices whose default memory devices differ should implement this function to
* disambiguate; otherwise the first OrtEpDevice's default memory device is used and the others
* are ignored for identity purposes. If no such allocator entry is registered, the EP defaults
* to a CPU memory device.
*
* \param[in] this_ptr The OrtEp instance.
* \param[out] device Set to the EP's default OrtMemoryDevice, or NULL to use the default behavior (described above).
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional. If set to NULL (not implemented), ORT
* infers the default memory device using the default behavior described above.
*
* \since Version 1.27.
*/
GetDefaultMemoryDevice: #type (this_ptr: *OrtEp, device: **OrtMemoryDevice) -> OrtStatusPtr #c_call;
/** \brief Release a previously captured graph and its associated resources.
*
* Called when the caller no longer needs the captured graph for the given annotation ID.
* This allows the EP to free buffers and other resources tied to this graph.
*
* \param[in] this_ptr The EP instance.
* \param[in] graph_annotation_id The annotation ID of the graph to release.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional. If set to NULL, ORT assumes
* no captured graph release is needed and treats it as a no-op success.
*
* \note Thread safety: For EPs that support concurrent Run() calls, this method may be
* called concurrently with Run(). The EP is responsible for ensuring thread safety
* of its own state in that case. For non-concurrent EPs, the session serializes
* calls via its internal mutex.
*
* \since Version 1.27.
*/
ReleaseCapturedGraph: #type (this_ptr: *OrtEp, graph_annotation_id: s32) -> OrtStatusPtr #c_call;
/** \brief Query the execution provider's weightless mode support.
*
* When weightless mode is enabled (via the "ep.enable_weightless" session option), ORT calls this function
* to determine the scope of the EP's weightless support. The EP returns an OrtWeightlessSupport value
* indicating whether it supports weightless mode for all initializers, external initializers only, or not
* at all.
*
* The EP's response may depend on the underlying hardware or driver capabilities. For example, an EP may
* support weightless mode for all initializers on newer hardware but only for external initializers on
* older hardware that requires weight transformation.
*
* EPs that support weightless mode should set drop_constant_initializers to false in OrtNodeFusionOptions
* so that ORT provides the initializer data as inputs to the compiled/fused node. The EP can then access
* these initializers at Compute() time via KernelContext_GetInput().
*
* \note Extending the lifetime of initializer data obtained via ValueInfo_GetInitializerValue() during
* Compile() so that the EP can cache and reuse data pointers directly (without going through
* KernelContext) is planned but not yet implemented. Until then, KernelContext_GetInput() is the
* only supported way to access initializer data at Compute() time.
*
* \param[in] this_ptr The OrtEp instance.
* \param[out] support Output parameter set to the EP's weightless support scope.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional. If set to NULL, ORT assumes the EP does not
* support weightless mode (equivalent to OrtWeightlessSupport_NONE).
*
* \since Version 1.29.
*/
GetWeightlessSupport: #type (this_ptr: *OrtEp, support: *OrtWeightlessSupport) -> OrtStatusPtr #c_call;
}
/** \brief The function signature that ORT will call to create OrtEpFactory instances.
*
* This must be available in a function called 'CreateEpFactories' in the execution provider library.
*
* \param[in] registered_name The name the execution library is registered with by RegisterExecutionProviderLibrary
* \param[in] ort_api_base The OrtApiBase instance that is used by the factory to get the OrtApi instance for the
* version of ORT that the library was compiled against.
* \param[in] default_logger The default ORT logger that can be used for logging outside of an inference session.
* \param[in,out] factories The implementation should create and add OrtEpFactory instances to this
* pre-allocated array.
* i.e. usage is `factories[0] = new MyEpFactory();`
* \param[in] max_factories The maximum number of OrtEpFactory instances that can be added to `factories`.
* Current default is to allow 4 factories. This can be increased in the future if needed.
* \param[out] num_factories The number of OrtEpFactory instances created by the factory and added to `factories`.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateEpApiFactoriesFn :: #type (registered_name: *u8, ort_api_base: *OrtApiBase, default_logger: *OrtLogger, factories: **OrtEpFactory, max_factories: u64, num_factories: *u64) -> *OrtStatus #c_call;
/** \brief The function signature that ORT will call to release an OrtEpFactory instance.
*
* This must be available in a function called 'ReleaseEpFactory' in the execution provider library.
*
* \param[in] factory The OrtEpFactory instance to release.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
ReleaseEpApiFactoryFn :: #type (factory: *OrtEpFactory) -> *OrtStatus #c_call;
/**
* \brief The OrtEpFactory provides functions to create and manage execution providers.
* \since Version 1.22.
*/
OrtEpFactory :: struct {
/** \brief The ONNX Runtime version the execution provider was compiled with.
*
* Implementation should set to ORT_API_VERSION.
* ORT will use this to ensure it does not call functions that were not available when the library was compiled.
*
* \since Version 1.22.
*/
ort_version_supported: u32;
/** \brief Get the name of the execution provider that the factory creates.
*
* The returned string should be a null-terminated, UTF-8 encoded string. ORT will copy it.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \return The name of the execution provider the factory creates.
*
* \since Version 1.22.
*/
GetName: #type (this_ptr: *OrtEpFactory) -> *u8 #c_call;
GetVendor: #type (this_ptr: *OrtEpFactory) -> *u8 #c_call; // return EP vendor
/** \brief Get information from the execution provider about OrtHardwareDevice support.
*
* \param[in] this_ptr The OrtEpFactory instance.
* Non-const as the factory is passed through to the CreateEp call via the OrtEpDevice.
* \param[in] devices The OrtHardwareDevice instances that are available.
* \param[in] num_devices The number of OrtHardwareDevice instances.
* \param[out] ep_devices OrtEpDevice instances for each OrtHardwareDevice that the EP can use.
* The implementation should call OrtEpApi::CreateEpDevice to create, and add the OrtEpDevice
* instances to this pre-allocated array. ORT will take ownership of the values returned.
* i.e. usage is `ep_devices[0] = <ptr to OrtEpDevice created with OrtEpApi::CreateEpDevice>;`
* \param[in] max_ep_devices The maximum number of OrtEpDevices that can be added to ep_devices.
* Current default is 8. This can be increased if needed.
* \param[out] num_ep_devices The number of EP devices added to ep_devices.
* \return true if the factory can create an execution provider that uses `device`.
*
* \since Version 1.22.
*/
GetSupportedDevices: #type (this_ptr: *OrtEpFactory, devices: **OrtHardwareDevice, num_devices: u64, ep_devices: **OrtEpDevice, max_ep_devices: u64, num_ep_devices: *u64) -> OrtStatusPtr #c_call;
/** \brief Function to create an OrtEp instance for use in a Session.
*
* ORT will call ReleaseEp to release the instance when it is no longer needed.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] devices The OrtHardwareDevice instances that the execution provider was selected to use.
* May be a subset of the OrtHardwareDevice instances that the execution provider's factory
* set as supported in the call to OrtEpFactory::GetSupportedDevices.
* \param[in] ep_metadata_pairs Execution provider metadata that was provided to OrtEpApi::CreateEpDevice, for each
* device.
* \param[in] num_devices The number of devices the execution provider was selected for.
* \param[in] session_options The OrtSessionOptions instance that contains the configuration options for the
* session. This will include ep_options from GetSupportedDevices as well as any
* user provided overrides.
* Execution provider options will have been added with a prefix of 'ep.[ep name].'.
* The OrtSessionOptions instance will NOT be valid after this call and should not be
* stored for later use.
* \param[in] logger The OrtLogger instance for the session that the execution provider should use for logging.
* \param[out] ep The OrtEp instance created by the factory.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.22.
*/
CreateEp: #type (this_ptr: *OrtEpFactory, devices: **OrtHardwareDevice, ep_metadata_pairs: **OrtKeyValuePairs, num_devices: u64, session_options: *OrtSessionOptions, logger: *OrtLogger, ep: **OrtEp) -> OrtStatusPtr #c_call;
/** \brief Release the OrtEp instance.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] ep The OrtEp instance to release.
*
* \since Version 1.22.
*/
ReleaseEp: #type (this_ptr: *OrtEpFactory, ep: *OrtEp) -> void #c_call;
/** \brief Get the vendor id who owns the execution provider that the factory creates.
*
* This is typically the PCI vendor ID. See https://pcisig.com/membership/member-companies
*
* \param[in] this_ptr The OrtEpFactory instance.
* \return vendor_id The vendor ID of the execution provider the factory creates.
*
* \since Version 1.23.
*/
GetVendorId: #type (this_ptr: *OrtEpFactory) -> u32 #c_call;
/** \brief Get the version of the execution provider that the factory creates.
*
* The version string should adhere to the Semantic Versioning 2.0 specification
* (https://github.com/semver/semver/blob/v2.0.0/semver.md).
*
* The returned string should be a null-terminated, UTF-8 encoded string. ORT will copy it.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \return The execution provider version string.
*
* \since Version 1.23.
*/
GetVersion: #type (this_ptr: *OrtEpFactory) -> *u8 #c_call;
/** \brief Validate the compatibility of a compiled model with the execution provider factory for one or more devices.
*
* Given a compatibility info string produced during model compilation, the EP factory should determine whether the
* compiled model is compatible with the EP factory when targeting the provided hardware devices. All devices provided
* must belong to the same execution provider instance that this factory creates.
*
* The EP factory implementation should consider the set of devices (e.g., multi-adapter or multi-GPU scenarios) when
* evaluating compatibility and set `model_compatibility` accordingly.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] devices Array of OrtHardwareDevice pointers that the EP would run on. All must map to this EP.
* \param[in] num_devices Number of entries in `devices`.
* \param[in] compatibility_info The compatibility information string produced when the model was compiled.
* \param[out] model_compatibility OrtCompiledModelCompatibility value describing the compatibility of the model with the EP.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
ValidateCompiledModelCompatibilityInfo: #type (this_ptr: *OrtEpFactory, devices: **OrtHardwareDevice, num_devices: u64, compatibility_info: *u8, model_compatibility: *OrtCompiledModelCompatibility) -> OrtStatusPtr #c_call;
/** \brief Create an OrtAllocator that can be shared across sessions for the given OrtMemoryInfo.
*
* The factory that creates the EP is responsible for providing the allocators required by the EP.
* The OrtMemoryInfo instance will match one of the values set in the OrtEpDevice using EpDevice_AddAllocatorInfo.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] memory_info The OrtMemoryInfo to create the allocator for. May be nullptr.
* \param[in] allocator_options Optional key-value pairs for allocator options, can be nullptr.
* \param[out] allocator The created OrtAllocator instance. Set to nullptr if the default CPU allocator is used.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CreateAllocator: #type (this_ptr: *OrtEpFactory, memory_info: *OrtMemoryInfo, allocator_options: *OrtKeyValuePairs, allocator: **OrtAllocator) -> OrtStatusPtr #c_call;
/** \brief Release an OrtAllocator created by the factory.
*
* \since Version 1.23.
*/
ReleaseAllocator: #type (this_ptr: *OrtEpFactory, allocator: *OrtAllocator) -> void #c_call;
/** \brief Create an OrtDataTransferImpl instance for the factory.
*
* This is used to create an IDataTransfer implementation that can be used to copy data between devices
* that the execution provider supports.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[out] data_transfer The created OrtDataTransferImpl instance. Set to nullptr if not required.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CreateDataTransfer: #type (this_ptr: *OrtEpFactory, data_transfer: **OrtDataTransferImpl) -> OrtStatusPtr #c_call;
/** \brief Check if execution providers created by the factory are stream aware.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \return True if the factory creates execution providers that are stream aware and it implements CreateSyncStreamForDevice.
*
* \since Version 1.23.
*/
IsStreamAware: #type (this_ptr: *OrtEpFactory) -> bool #c_call;
/** \brief Create a synchronization stream for the given memory device.
*
* This is used to create a synchronization stream for the memory device that can be used for operations outside of
* a session.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] memory_device The OrtMemoryDevice to create the synchronization stream for.
* \param[in] stream_options Options for stream creation. May be nullptr.
* \param[out] stream The created OrtSyncStreamImpl instance. nullptr if the execution provider is not stream aware.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.23.
*/
CreateSyncStreamForDevice: #type (this_ptr: *OrtEpFactory, memory_device: *OrtMemoryDevice, stream_options: *OrtKeyValuePairs, stream: **OrtSyncStreamImpl) -> OrtStatusPtr #c_call;
/** \brief Check for known incompatibility reasons between a hardware device and this execution provider.
*
* This function allows an execution provider to check if a specific hardware device is compatible
* with the execution provider. The EP can set specific incompatibility reasons via the
* OrtDeviceEpIncompatibilityDetails parameter using OrtEpApi::DeviceEpIncompatibilityDetails_SetDetails.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] hw The hardware device to check for incompatibility.
* \param[in,out] details Pre-allocated incompatibility details object created and initialized by ORT.
* The EP can use OrtEpApi::DeviceEpIncompatibilityDetails_SetDetails to set
* incompatibility information. If the device is compatible, the EP can
* leave the object unchanged (it defaults to no incompatibility).
*
* \note Implementation of this function is optional.
* If not implemented, ORT will assume the device is compatible with this EP.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetHardwareDeviceIncompatibilityDetails: #type (this_ptr: *OrtEpFactory, hw: *OrtHardwareDevice, details: *OrtDeviceEpIncompatibilityDetails) -> OrtStatusPtr #c_call;
/** \brief Create an OrtExternalResourceImporterImpl for external resource import.
*
* This is used to create an external resource importer that enables zero-copy import of
* external GPU memory (e.g., D3D12 shared resources) and synchronization primitives
* (e.g., D3D12 timeline fences).
*
* EPs that support external resource import (via CUDA, HIP, Vulkan, or D3D12 APIs) can
* implement this to allow applications to share GPU resources without copies.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] ep_device The OrtEpDevice to create the external resource importer for.
* \param[out] out_importer The created OrtExternalResourceImporterImpl instance.
* Set to nullptr if external resource import is not supported.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional.
* An EP factory should only implement this if it supports external resource import.
* If not implemented or not supported, return ORT_NOT_IMPLEMENTED or set out_importer to nullptr.
*
* \since Version 1.24.
*/
CreateExternalResourceImporterForDevice: #type (this_ptr: *OrtEpFactory, ep_device: *OrtEpDevice, out_importer: **OrtExternalResourceImporterImpl) -> OrtStatusPtr #c_call;
/** \brief Returns the number of OrtCustomOpDomains that this factory provides.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[out] num_domains Output parameter set to the number of provided OrtCustomOpDomain instances.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetNumCustomOpDomains: #type (this_ptr: *OrtEpFactory, num_domains: *u64) -> OrtStatusPtr #c_call;
/** \brief Gets the EP-specific OrtCustomOpDomains.
*
* This function is used when running inference on a model that contains EP-specific custom operations.
*
* Workflow:
* 1. The EP factory implements this function to supply a list of OrtCustomOpDomain instances.
* 2. The application either 1) calls SessionOptionsAppendExecutionProvider_V2() with an OrtEpDevice containing
* the plugin EP's factory or 2) enables auto ep selection.
* 3. 1) SessionOptionsAppendExecutionProvider_V2() appends the provided OrtCustomOpDomains to the
* session options or 2) ORT registers the OrtCustomOpDomains provided by the EP devices
* that could be potentially selected.
*
* As a result, any session created from these session options will have these custom op domains registered
* in ORT, ensuring that the custom ops are properly recognized and validated when the model is loaded.
*
* Plugin EPs can provide two types of custom ops:
* 1. A full OrtCustomOp with a concrete kernel implementation
* - A Plugin EP can supply an OrtCustomOp and a corresponding CustomKernel::Compute() implementation.
* - In GetCapability(), it calls EpGraphSupportInfo_AddSingleNode() to inform ORT
* that the custom node should NOT be fused or compiled. Instead, ORT should invoke
* the custom node's Compute() function at runtime.
*
* 2. A "placeholder" OrtCustomOp with an empty kernel implementation
* - A compile-based Plugin EP can supply an OrtCustomOp whose CustomKernel::Compute()
* does nothing. The purpose is to satisfy model validation during model loading by
* registering the custom op as a valid operator in the session.
* - In GetCapability(), the EP should call EpGraphSupportInfo_AddNodesToFuse() to
* notify ORT that this custom node should be fused and compiled by the EP.
* - In Compile(), the EP executes its compiled bits to perform inference for
* the fused custom node.
*
* Note: The OrtCustomOpDomain instances must be valid while any session is using them.
EP factory has the responsibility to release OrtCustomOpDomain instances it creates. It happens
* automatically if using the C++ Ort::CustomOpDomain class.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[out] domains Array of `num_domains` elements pre-allocated by ORT that should be filled with
OrtCustomOpDomain instances created by the EP. The `num_domains` is the value returned by
GetNumCustomOpDomains().
* \param[in] num_domains The size of the `domains` array pre-allocated by ORT.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.24.
*/
GetCustomOpDomains: #type (this_ptr: *OrtEpFactory, domains: **OrtCustomOpDomain, num_domains: u64) -> OrtStatusPtr #c_call;
/** \brief Initialize graphics interop for the EP factory.
*
* This function sets up graphics interop context that enables synchronization between
* external graphics API workloads (D3D12, Vulkan) and ONNX Runtime inference.
*
* The factory stores the graphics context configuration and uses it when creating
* synchronization streams via CreateSyncStreamForDevice. This approach
* is more graceful than passing the command queue directly during stream creation.
*
* The implementation is EP-specific. EPs may create a specialized interop context using
* platform-specific APIs to enable GPU-GPU synchronization.
*
* Key design points:
* - Single init function with all required params (avoids multiple init signatures)
* - Factory stores context and uses it in stream creation
* - Paired with DeinitGraphicsInterop for cleanup
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] ep_device The OrtEpDevice to initialize graphics interop for.
* \param[in] config Configuration specifying the graphics API and required handles.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional.
* EPs that don't support graphics interop should set this to nullptr or return ORT_NOT_IMPLEMENTED.
*
* \since Version 1.25.
*/
InitGraphicsInterop: #type (this_ptr: *OrtEpFactory, ep_device: *OrtEpDevice, config: *OrtGraphicsInteropConfig) -> OrtStatusPtr #c_call;
/** \brief Deinitialize graphics interop for the EP factory.
*
* This function cleans up any graphics interop context that was set up by InitGraphicsInterop.
* Should be called when graphics interop is no longer needed.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] ep_device The OrtEpDevice to deinitialize graphics interop for.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \note Implementation of this function is optional.
* EPs that don't support graphics interop should set this to nullptr or return ORT_NOT_IMPLEMENTED.
*
* \since Version 1.25.
*/
DeinitGraphicsInterop: #type (this_ptr: *OrtEpFactory, ep_device: *OrtEpDevice) -> OrtStatusPtr #c_call;
/** \brief Select the best model variant candidate from metadata.
*
* Evaluates each candidate's metadata against the given hardware device and optional session options,
* and returns the index of the best match.
*
* Each candidate is an OrtKeyValuePairs representing one model variant. The KVP uses indexed keys
* so that the EP can inspect each model's metadata independently. A variant always has num_models >= 1.
*
* Required and optional keys:
* - "num_models" — number of models in this variant (>= 1) (required)
* - "\<i\>.ep_compatibility_info" — compatibility string for model i (required per model)
* - "\<i\>.role" — role/purpose of model i (e.g., "prefill", "decode") (optional)
* - "\<i\>.future_meaningful_info" — additional EP-meaningful metadata for model i (optional)
*
* where \<i\> is a zero-based index (e.g., "0.ep_compatibility_info", "1.ep_compatibility_info").
*
* The implementer should loop from 0 to num_models - 1 and validate each "\<i\>.ep_compatibility_info" entry.
* An advanced implementation may additionally consider "role" or other metadata when ranking candidates.
*
* **Why this function exists:**
*
* The existing ValidateCompiledModelCompatibilityInfo() alone is not sufficient for some EPs to determine the best
* compatible model when there are multiple candidates. For example, an EP may support multiple compilation modes
* (e.g., "speed optimized" vs "memory optimized") that produce different compatibility strings. The EP can implement
* this function to evaluate the candidate metadata and select the best compatible variant based on its own criteria,
* the target device, and the session options.
*
* If all candidates are unsupported, this function succeeds and sets `selected_index` to SIZE_MAX.
*
* \note The implementer should validate each "\<i\>.ep_compatibility_info" in the candidate (e.g., by calling
* ValidateCompiledModelCompatibilityInfo for each one) before determining the best match.
*
* \param[in] this_ptr The OrtEpFactory instance.
* \param[in] device The target hardware device that the EP would run on. Must map to this EP.
* \param[in] candidates Array of OrtKeyValuePairs pointers (one per model variant).
* \param[in] num_candidates Number of candidates (i.e., number of model variants to evaluate).
* \param[in] session_options Optional session options to consider when selecting the best candidate.
* May be nullptr if no session-level preferences are relevant.
* \param[out] selected_index Selected candidate index, or SIZE_MAX if all unsupported.
*
* \snippet{doc} snippets.dox OrtStatus Return Value
*
* \since Version 1.28.
*/
SelectBestModelCandidate: #type (this_ptr: *OrtEpFactory, device: *OrtHardwareDevice, candidates: **OrtKeyValuePairs, num_candidates: u64, session_options: *OrtSessionOptions, selected_index: *u64) -> OrtStatusPtr #c_call;
}
#scope_file
#import "Basic"; // For assert
#run {
{
info := type_info(OrtAllocator);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtAllocator.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtAllocator.version has unexpected size % instead of 4", it.type.runtime_size);
case "Alloc";
assert(it.offset_in_bytes == 8, "OrtAllocator.Alloc has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtAllocator.Alloc has unexpected size % instead of 8", it.type.runtime_size);
case "Free";
assert(it.offset_in_bytes == 16, "OrtAllocator.Free has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtAllocator.Free has unexpected size % instead of 8", it.type.runtime_size);
case "Info";
assert(it.offset_in_bytes == 24, "OrtAllocator.Info has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtAllocator.Info has unexpected size % instead of 8", it.type.runtime_size);
case "Reserve";
assert(it.offset_in_bytes == 32, "OrtAllocator.Reserve has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtAllocator.Reserve has unexpected size % instead of 8", it.type.runtime_size);
case "GetStats";
assert(it.offset_in_bytes == 40, "OrtAllocator.GetStats has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtAllocator.GetStats has unexpected size % instead of 8", it.type.runtime_size);
case "AllocOnStream";
assert(it.offset_in_bytes == 48, "OrtAllocator.AllocOnStream has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtAllocator.AllocOnStream has unexpected size % instead of 8", it.type.runtime_size);
case "Shrink";
assert(it.offset_in_bytes == 56, "OrtAllocator.Shrink has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtAllocator.Shrink has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtAllocator) == 64, "OrtAllocator has size % instead of 64", size_of(OrtAllocator));
}
{
info := type_info(OrtCUDAProviderOptions);
for info.members {
if it.name == {
case "device_id";
assert(it.offset_in_bytes == 0, "OrtCUDAProviderOptions.device_id has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.device_id has unexpected size % instead of 4", it.type.runtime_size);
case "cudnn_conv_algo_search";
assert(it.offset_in_bytes == 4, "OrtCUDAProviderOptions.cudnn_conv_algo_search has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.cudnn_conv_algo_search has unexpected size % instead of 4", it.type.runtime_size);
case "gpu_mem_limit";
assert(it.offset_in_bytes == 8, "OrtCUDAProviderOptions.gpu_mem_limit has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCUDAProviderOptions.gpu_mem_limit has unexpected size % instead of 8", it.type.runtime_size);
case "arena_extend_strategy";
assert(it.offset_in_bytes == 16, "OrtCUDAProviderOptions.arena_extend_strategy has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.arena_extend_strategy has unexpected size % instead of 4", it.type.runtime_size);
case "do_copy_in_default_stream";
assert(it.offset_in_bytes == 20, "OrtCUDAProviderOptions.do_copy_in_default_stream has unexpected offset % instead of 20", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.do_copy_in_default_stream has unexpected size % instead of 4", it.type.runtime_size);
case "has_user_compute_stream";
assert(it.offset_in_bytes == 24, "OrtCUDAProviderOptions.has_user_compute_stream has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.has_user_compute_stream has unexpected size % instead of 4", it.type.runtime_size);
case "user_compute_stream";
assert(it.offset_in_bytes == 32, "OrtCUDAProviderOptions.user_compute_stream has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCUDAProviderOptions.user_compute_stream has unexpected size % instead of 8", it.type.runtime_size);
case "default_memory_arena_cfg";
assert(it.offset_in_bytes == 40, "OrtCUDAProviderOptions.default_memory_arena_cfg has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCUDAProviderOptions.default_memory_arena_cfg has unexpected size % instead of 8", it.type.runtime_size);
case "tunable_op_enable";
assert(it.offset_in_bytes == 48, "OrtCUDAProviderOptions.tunable_op_enable has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.tunable_op_enable has unexpected size % instead of 4", it.type.runtime_size);
case "tunable_op_tuning_enable";
assert(it.offset_in_bytes == 52, "OrtCUDAProviderOptions.tunable_op_tuning_enable has unexpected offset % instead of 52", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.tunable_op_tuning_enable has unexpected size % instead of 4", it.type.runtime_size);
case "tunable_op_max_tuning_duration_ms";
assert(it.offset_in_bytes == 56, "OrtCUDAProviderOptions.tunable_op_max_tuning_duration_ms has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCUDAProviderOptions.tunable_op_max_tuning_duration_ms has unexpected size % instead of 4", it.type.runtime_size);
}
}
assert(size_of(OrtCUDAProviderOptions) == 64, "OrtCUDAProviderOptions has size % instead of 64", size_of(OrtCUDAProviderOptions));
}
{
info := type_info(OrtROCMProviderOptions);
for info.members {
if it.name == {
case "device_id";
assert(it.offset_in_bytes == 0, "OrtROCMProviderOptions.device_id has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.device_id has unexpected size % instead of 4", it.type.runtime_size);
case "miopen_conv_exhaustive_search";
assert(it.offset_in_bytes == 4, "OrtROCMProviderOptions.miopen_conv_exhaustive_search has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.miopen_conv_exhaustive_search has unexpected size % instead of 4", it.type.runtime_size);
case "gpu_mem_limit";
assert(it.offset_in_bytes == 8, "OrtROCMProviderOptions.gpu_mem_limit has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtROCMProviderOptions.gpu_mem_limit has unexpected size % instead of 8", it.type.runtime_size);
case "arena_extend_strategy";
assert(it.offset_in_bytes == 16, "OrtROCMProviderOptions.arena_extend_strategy has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.arena_extend_strategy has unexpected size % instead of 4", it.type.runtime_size);
case "do_copy_in_default_stream";
assert(it.offset_in_bytes == 20, "OrtROCMProviderOptions.do_copy_in_default_stream has unexpected offset % instead of 20", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.do_copy_in_default_stream has unexpected size % instead of 4", it.type.runtime_size);
case "has_user_compute_stream";
assert(it.offset_in_bytes == 24, "OrtROCMProviderOptions.has_user_compute_stream has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.has_user_compute_stream has unexpected size % instead of 4", it.type.runtime_size);
case "user_compute_stream";
assert(it.offset_in_bytes == 32, "OrtROCMProviderOptions.user_compute_stream has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtROCMProviderOptions.user_compute_stream has unexpected size % instead of 8", it.type.runtime_size);
case "default_memory_arena_cfg";
assert(it.offset_in_bytes == 40, "OrtROCMProviderOptions.default_memory_arena_cfg has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtROCMProviderOptions.default_memory_arena_cfg has unexpected size % instead of 8", it.type.runtime_size);
case "enable_hip_graph";
assert(it.offset_in_bytes == 48, "OrtROCMProviderOptions.enable_hip_graph has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.enable_hip_graph has unexpected size % instead of 4", it.type.runtime_size);
case "tunable_op_enable";
assert(it.offset_in_bytes == 52, "OrtROCMProviderOptions.tunable_op_enable has unexpected offset % instead of 52", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.tunable_op_enable has unexpected size % instead of 4", it.type.runtime_size);
case "tunable_op_tuning_enable";
assert(it.offset_in_bytes == 56, "OrtROCMProviderOptions.tunable_op_tuning_enable has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.tunable_op_tuning_enable has unexpected size % instead of 4", it.type.runtime_size);
case "tunable_op_max_tuning_duration_ms";
assert(it.offset_in_bytes == 60, "OrtROCMProviderOptions.tunable_op_max_tuning_duration_ms has unexpected offset % instead of 60", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtROCMProviderOptions.tunable_op_max_tuning_duration_ms has unexpected size % instead of 4", it.type.runtime_size);
}
}
assert(size_of(OrtROCMProviderOptions) == 64, "OrtROCMProviderOptions has size % instead of 64", size_of(OrtROCMProviderOptions));
}
{
info := type_info(OrtTensorRTProviderOptions);
for info.members {
if it.name == {
case "device_id";
assert(it.offset_in_bytes == 0, "OrtTensorRTProviderOptions.device_id has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.device_id has unexpected size % instead of 4", it.type.runtime_size);
case "has_user_compute_stream";
assert(it.offset_in_bytes == 4, "OrtTensorRTProviderOptions.has_user_compute_stream has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.has_user_compute_stream has unexpected size % instead of 4", it.type.runtime_size);
case "user_compute_stream";
assert(it.offset_in_bytes == 8, "OrtTensorRTProviderOptions.user_compute_stream has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtTensorRTProviderOptions.user_compute_stream has unexpected size % instead of 8", it.type.runtime_size);
case "trt_max_partition_iterations";
assert(it.offset_in_bytes == 16, "OrtTensorRTProviderOptions.trt_max_partition_iterations has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_max_partition_iterations has unexpected size % instead of 4", it.type.runtime_size);
case "trt_min_subgraph_size";
assert(it.offset_in_bytes == 20, "OrtTensorRTProviderOptions.trt_min_subgraph_size has unexpected offset % instead of 20", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_min_subgraph_size has unexpected size % instead of 4", it.type.runtime_size);
case "trt_max_workspace_size";
assert(it.offset_in_bytes == 24, "OrtTensorRTProviderOptions.trt_max_workspace_size has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtTensorRTProviderOptions.trt_max_workspace_size has unexpected size % instead of 8", it.type.runtime_size);
case "trt_fp16_enable";
assert(it.offset_in_bytes == 32, "OrtTensorRTProviderOptions.trt_fp16_enable has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_fp16_enable has unexpected size % instead of 4", it.type.runtime_size);
case "trt_int8_enable";
assert(it.offset_in_bytes == 36, "OrtTensorRTProviderOptions.trt_int8_enable has unexpected offset % instead of 36", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_int8_enable has unexpected size % instead of 4", it.type.runtime_size);
case "trt_int8_calibration_table_name";
assert(it.offset_in_bytes == 40, "OrtTensorRTProviderOptions.trt_int8_calibration_table_name has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtTensorRTProviderOptions.trt_int8_calibration_table_name has unexpected size % instead of 8", it.type.runtime_size);
case "trt_int8_use_native_calibration_table";
assert(it.offset_in_bytes == 48, "OrtTensorRTProviderOptions.trt_int8_use_native_calibration_table has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_int8_use_native_calibration_table has unexpected size % instead of 4", it.type.runtime_size);
case "trt_dla_enable";
assert(it.offset_in_bytes == 52, "OrtTensorRTProviderOptions.trt_dla_enable has unexpected offset % instead of 52", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_dla_enable has unexpected size % instead of 4", it.type.runtime_size);
case "trt_dla_core";
assert(it.offset_in_bytes == 56, "OrtTensorRTProviderOptions.trt_dla_core has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_dla_core has unexpected size % instead of 4", it.type.runtime_size);
case "trt_dump_subgraphs";
assert(it.offset_in_bytes == 60, "OrtTensorRTProviderOptions.trt_dump_subgraphs has unexpected offset % instead of 60", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_dump_subgraphs has unexpected size % instead of 4", it.type.runtime_size);
case "trt_engine_cache_enable";
assert(it.offset_in_bytes == 64, "OrtTensorRTProviderOptions.trt_engine_cache_enable has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_engine_cache_enable has unexpected size % instead of 4", it.type.runtime_size);
case "trt_engine_cache_path";
assert(it.offset_in_bytes == 72, "OrtTensorRTProviderOptions.trt_engine_cache_path has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtTensorRTProviderOptions.trt_engine_cache_path has unexpected size % instead of 8", it.type.runtime_size);
case "trt_engine_decryption_enable";
assert(it.offset_in_bytes == 80, "OrtTensorRTProviderOptions.trt_engine_decryption_enable has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_engine_decryption_enable has unexpected size % instead of 4", it.type.runtime_size);
case "trt_engine_decryption_lib_path";
assert(it.offset_in_bytes == 88, "OrtTensorRTProviderOptions.trt_engine_decryption_lib_path has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtTensorRTProviderOptions.trt_engine_decryption_lib_path has unexpected size % instead of 8", it.type.runtime_size);
case "trt_force_sequential_engine_build";
assert(it.offset_in_bytes == 96, "OrtTensorRTProviderOptions.trt_force_sequential_engine_build has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtTensorRTProviderOptions.trt_force_sequential_engine_build has unexpected size % instead of 4", it.type.runtime_size);
}
}
assert(size_of(OrtTensorRTProviderOptions) == 104, "OrtTensorRTProviderOptions has size % instead of 104", size_of(OrtTensorRTProviderOptions));
}
{
info := type_info(OrtMIGraphXProviderOptions);
for info.members {
if it.name == {
case "device_id";
assert(it.offset_in_bytes == 0, "OrtMIGraphXProviderOptions.device_id has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.device_id has unexpected size % instead of 4", it.type.runtime_size);
case "migraphx_fp16_enable";
assert(it.offset_in_bytes == 4, "OrtMIGraphXProviderOptions.migraphx_fp16_enable has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.migraphx_fp16_enable has unexpected size % instead of 4", it.type.runtime_size);
case "migraphx_fp8_enable";
assert(it.offset_in_bytes == 8, "OrtMIGraphXProviderOptions.migraphx_fp8_enable has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.migraphx_fp8_enable has unexpected size % instead of 4", it.type.runtime_size);
case "migraphx_int8_enable";
assert(it.offset_in_bytes == 12, "OrtMIGraphXProviderOptions.migraphx_int8_enable has unexpected offset % instead of 12", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.migraphx_int8_enable has unexpected size % instead of 4", it.type.runtime_size);
case "migraphx_use_native_calibration_table";
assert(it.offset_in_bytes == 16, "OrtMIGraphXProviderOptions.migraphx_use_native_calibration_table has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.migraphx_use_native_calibration_table has unexpected size % instead of 4", it.type.runtime_size);
case "migraphx_int8_calibration_table_name";
assert(it.offset_in_bytes == 24, "OrtMIGraphXProviderOptions.migraphx_int8_calibration_table_name has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtMIGraphXProviderOptions.migraphx_int8_calibration_table_name has unexpected size % instead of 8", it.type.runtime_size);
case "migraphx_save_compiled_model";
assert(it.offset_in_bytes == 32, "OrtMIGraphXProviderOptions.migraphx_save_compiled_model has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.migraphx_save_compiled_model has unexpected size % instead of 4", it.type.runtime_size);
case "migraphx_save_model_path";
assert(it.offset_in_bytes == 40, "OrtMIGraphXProviderOptions.migraphx_save_model_path has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtMIGraphXProviderOptions.migraphx_save_model_path has unexpected size % instead of 8", it.type.runtime_size);
case "migraphx_load_compiled_model";
assert(it.offset_in_bytes == 48, "OrtMIGraphXProviderOptions.migraphx_load_compiled_model has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.migraphx_load_compiled_model has unexpected size % instead of 4", it.type.runtime_size);
case "migraphx_load_model_path";
assert(it.offset_in_bytes == 56, "OrtMIGraphXProviderOptions.migraphx_load_model_path has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtMIGraphXProviderOptions.migraphx_load_model_path has unexpected size % instead of 8", it.type.runtime_size);
case "migraphx_exhaustive_tune";
assert(it.offset_in_bytes == 64, "OrtMIGraphXProviderOptions.migraphx_exhaustive_tune has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 1, "OrtMIGraphXProviderOptions.migraphx_exhaustive_tune has unexpected size % instead of 1", it.type.runtime_size);
case "migraphx_mem_limit";
assert(it.offset_in_bytes == 72, "OrtMIGraphXProviderOptions.migraphx_mem_limit has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtMIGraphXProviderOptions.migraphx_mem_limit has unexpected size % instead of 8", it.type.runtime_size);
case "migraphx_arena_extend_strategy";
assert(it.offset_in_bytes == 80, "OrtMIGraphXProviderOptions.migraphx_arena_extend_strategy has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtMIGraphXProviderOptions.migraphx_arena_extend_strategy has unexpected size % instead of 4", it.type.runtime_size);
}
}
assert(size_of(OrtMIGraphXProviderOptions) == 88, "OrtMIGraphXProviderOptions has size % instead of 88", size_of(OrtMIGraphXProviderOptions));
}
{
info := type_info(OrtOpenVINOProviderOptions);
for info.members {
if it.name == {
case "device_type";
assert(it.offset_in_bytes == 0, "OrtOpenVINOProviderOptions.device_type has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtOpenVINOProviderOptions.device_type has unexpected size % instead of 8", it.type.runtime_size);
case "enable_npu_fast_compile";
assert(it.offset_in_bytes == 8, "OrtOpenVINOProviderOptions.enable_npu_fast_compile has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 1, "OrtOpenVINOProviderOptions.enable_npu_fast_compile has unexpected size % instead of 1", it.type.runtime_size);
case "device_id";
assert(it.offset_in_bytes == 16, "OrtOpenVINOProviderOptions.device_id has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtOpenVINOProviderOptions.device_id has unexpected size % instead of 8", it.type.runtime_size);
case "num_of_threads";
assert(it.offset_in_bytes == 24, "OrtOpenVINOProviderOptions.num_of_threads has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtOpenVINOProviderOptions.num_of_threads has unexpected size % instead of 8", it.type.runtime_size);
case "cache_dir";
assert(it.offset_in_bytes == 32, "OrtOpenVINOProviderOptions.cache_dir has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtOpenVINOProviderOptions.cache_dir has unexpected size % instead of 8", it.type.runtime_size);
case "_context";
assert(it.offset_in_bytes == 40, "OrtOpenVINOProviderOptions._context has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtOpenVINOProviderOptions._context has unexpected size % instead of 8", it.type.runtime_size);
case "enable_opencl_throttling";
assert(it.offset_in_bytes == 48, "OrtOpenVINOProviderOptions.enable_opencl_throttling has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 1, "OrtOpenVINOProviderOptions.enable_opencl_throttling has unexpected size % instead of 1", it.type.runtime_size);
case "enable_dynamic_shapes";
assert(it.offset_in_bytes == 49, "OrtOpenVINOProviderOptions.enable_dynamic_shapes has unexpected offset % instead of 49", it.offset_in_bytes);
assert(it.type.runtime_size == 1, "OrtOpenVINOProviderOptions.enable_dynamic_shapes has unexpected size % instead of 1", it.type.runtime_size);
}
}
assert(size_of(OrtOpenVINOProviderOptions) == 56, "OrtOpenVINOProviderOptions has size % instead of 56", size_of(OrtOpenVINOProviderOptions));
}
{
info := type_info(OrtApiBase);
for info.members {
if it.name == {
case "GetApi";
assert(it.offset_in_bytes == 0, "OrtApiBase.GetApi has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApiBase.GetApi has unexpected size % instead of 8", it.type.runtime_size);
case "GetVersionString";
assert(it.offset_in_bytes == 8, "OrtApiBase.GetVersionString has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApiBase.GetVersionString has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtApiBase) == 16, "OrtApiBase has size % instead of 16", size_of(OrtApiBase));
}
{
info := type_info(OrtCustomHandleType);
for info.members {
if it.name == {
case "__place_holder";
assert(it.offset_in_bytes == 0, "OrtCustomHandleType.__place_holder has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 1, "OrtCustomHandleType.__place_holder has unexpected size % instead of 1", it.type.runtime_size);
}
}
assert(size_of(OrtCustomHandleType) == 1, "OrtCustomHandleType has size % instead of 1", size_of(OrtCustomHandleType));
}
{
info := type_info(OrtThreadPoolCallbacksConfig);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtThreadPoolCallbacksConfig.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtThreadPoolCallbacksConfig.version has unexpected size % instead of 4", it.type.runtime_size);
case "on_enqueue";
assert(it.offset_in_bytes == 8, "OrtThreadPoolCallbacksConfig.on_enqueue has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtThreadPoolCallbacksConfig.on_enqueue has unexpected size % instead of 8", it.type.runtime_size);
case "on_start_work";
assert(it.offset_in_bytes == 16, "OrtThreadPoolCallbacksConfig.on_start_work has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtThreadPoolCallbacksConfig.on_start_work has unexpected size % instead of 8", it.type.runtime_size);
case "on_stop_work";
assert(it.offset_in_bytes == 24, "OrtThreadPoolCallbacksConfig.on_stop_work has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtThreadPoolCallbacksConfig.on_stop_work has unexpected size % instead of 8", it.type.runtime_size);
case "on_abandon";
assert(it.offset_in_bytes == 32, "OrtThreadPoolCallbacksConfig.on_abandon has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtThreadPoolCallbacksConfig.on_abandon has unexpected size % instead of 8", it.type.runtime_size);
case "user_context";
assert(it.offset_in_bytes == 40, "OrtThreadPoolCallbacksConfig.user_context has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtThreadPoolCallbacksConfig.user_context has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtThreadPoolCallbacksConfig) == 48, "OrtThreadPoolCallbacksConfig has size % instead of 48", size_of(OrtThreadPoolCallbacksConfig));
}
{
info := type_info(OrtExternalMemoryDescriptor);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtExternalMemoryDescriptor.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalMemoryDescriptor.version has unexpected size % instead of 4", it.type.runtime_size);
case "handle_type";
assert(it.offset_in_bytes == 4, "OrtExternalMemoryDescriptor.handle_type has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalMemoryDescriptor.handle_type has unexpected size % instead of 4", it.type.runtime_size);
case "native_handle";
assert(it.offset_in_bytes == 8, "OrtExternalMemoryDescriptor.native_handle has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalMemoryDescriptor.native_handle has unexpected size % instead of 8", it.type.runtime_size);
case "size_bytes";
assert(it.offset_in_bytes == 16, "OrtExternalMemoryDescriptor.size_bytes has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalMemoryDescriptor.size_bytes has unexpected size % instead of 8", it.type.runtime_size);
case "offset_bytes";
assert(it.offset_in_bytes == 24, "OrtExternalMemoryDescriptor.offset_bytes has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalMemoryDescriptor.offset_bytes has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtExternalMemoryDescriptor) == 32, "OrtExternalMemoryDescriptor has size % instead of 32", size_of(OrtExternalMemoryDescriptor));
}
{
info := type_info(OrtExternalSemaphoreDescriptor);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtExternalSemaphoreDescriptor.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalSemaphoreDescriptor.version has unexpected size % instead of 4", it.type.runtime_size);
case "type";
assert(it.offset_in_bytes == 4, "OrtExternalSemaphoreDescriptor.type has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalSemaphoreDescriptor.type has unexpected size % instead of 4", it.type.runtime_size);
case "native_handle";
assert(it.offset_in_bytes == 8, "OrtExternalSemaphoreDescriptor.native_handle has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalSemaphoreDescriptor.native_handle has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtExternalSemaphoreDescriptor) == 16, "OrtExternalSemaphoreDescriptor has size % instead of 16", size_of(OrtExternalSemaphoreDescriptor));
}
{
info := type_info(OrtGraphicsInteropConfig);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtGraphicsInteropConfig.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtGraphicsInteropConfig.version has unexpected size % instead of 4", it.type.runtime_size);
case "graphics_api";
assert(it.offset_in_bytes == 4, "OrtGraphicsInteropConfig.graphics_api has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtGraphicsInteropConfig.graphics_api has unexpected size % instead of 4", it.type.runtime_size);
case "command_queue";
assert(it.offset_in_bytes == 8, "OrtGraphicsInteropConfig.command_queue has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtGraphicsInteropConfig.command_queue has unexpected size % instead of 8", it.type.runtime_size);
case "additional_options";
assert(it.offset_in_bytes == 16, "OrtGraphicsInteropConfig.additional_options has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtGraphicsInteropConfig.additional_options has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtGraphicsInteropConfig) == 24, "OrtGraphicsInteropConfig has size % instead of 24", size_of(OrtGraphicsInteropConfig));
}
{
info := type_info(OrtExternalTensorDescriptor);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtExternalTensorDescriptor.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalTensorDescriptor.version has unexpected size % instead of 4", it.type.runtime_size);
case "element_type";
assert(it.offset_in_bytes == 4, "OrtExternalTensorDescriptor.element_type has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalTensorDescriptor.element_type has unexpected size % instead of 4", it.type.runtime_size);
case "shape";
assert(it.offset_in_bytes == 8, "OrtExternalTensorDescriptor.shape has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalTensorDescriptor.shape has unexpected size % instead of 8", it.type.runtime_size);
case "rank";
assert(it.offset_in_bytes == 16, "OrtExternalTensorDescriptor.rank has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalTensorDescriptor.rank has unexpected size % instead of 8", it.type.runtime_size);
case "offset_bytes";
assert(it.offset_in_bytes == 24, "OrtExternalTensorDescriptor.offset_bytes has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalTensorDescriptor.offset_bytes has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtExternalTensorDescriptor) == 32, "OrtExternalTensorDescriptor has size % instead of 32", size_of(OrtExternalTensorDescriptor));
}
{
info := type_info(OrtEnvCreationOptions);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtEnvCreationOptions.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtEnvCreationOptions.version has unexpected size % instead of 4", it.type.runtime_size);
case "logging_severity_level";
assert(it.offset_in_bytes == 4, "OrtEnvCreationOptions.logging_severity_level has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtEnvCreationOptions.logging_severity_level has unexpected size % instead of 4", it.type.runtime_size);
case "log_id";
assert(it.offset_in_bytes == 8, "OrtEnvCreationOptions.log_id has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEnvCreationOptions.log_id has unexpected size % instead of 8", it.type.runtime_size);
case "custom_logging_function";
assert(it.offset_in_bytes == 16, "OrtEnvCreationOptions.custom_logging_function has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEnvCreationOptions.custom_logging_function has unexpected size % instead of 8", it.type.runtime_size);
case "custom_logging_param";
assert(it.offset_in_bytes == 24, "OrtEnvCreationOptions.custom_logging_param has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEnvCreationOptions.custom_logging_param has unexpected size % instead of 8", it.type.runtime_size);
case "threading_options";
assert(it.offset_in_bytes == 32, "OrtEnvCreationOptions.threading_options has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEnvCreationOptions.threading_options has unexpected size % instead of 8", it.type.runtime_size);
case "config_entries";
assert(it.offset_in_bytes == 40, "OrtEnvCreationOptions.config_entries has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEnvCreationOptions.config_entries has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtEnvCreationOptions) == 48, "OrtEnvCreationOptions has size % instead of 48", size_of(OrtEnvCreationOptions));
}
{
info := type_info(OrtApi);
for info.members {
if it.name == {
case "CreateStatus";
assert(it.offset_in_bytes == 0, "OrtApi.CreateStatus has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateStatus has unexpected size % instead of 8", it.type.runtime_size);
case "GetErrorCode";
assert(it.offset_in_bytes == 8, "OrtApi.GetErrorCode has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetErrorCode has unexpected size % instead of 8", it.type.runtime_size);
case "GetErrorMessage";
assert(it.offset_in_bytes == 16, "OrtApi.GetErrorMessage has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetErrorMessage has unexpected size % instead of 8", it.type.runtime_size);
case "CreateEnv";
assert(it.offset_in_bytes == 24, "OrtApi.CreateEnv has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateEnv has unexpected size % instead of 8", it.type.runtime_size);
case "CreateEnvWithCustomLogger";
assert(it.offset_in_bytes == 32, "OrtApi.CreateEnvWithCustomLogger has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateEnvWithCustomLogger has unexpected size % instead of 8", it.type.runtime_size);
case "EnableTelemetryEvents";
assert(it.offset_in_bytes == 40, "OrtApi.EnableTelemetryEvents has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EnableTelemetryEvents has unexpected size % instead of 8", it.type.runtime_size);
case "DisableTelemetryEvents";
assert(it.offset_in_bytes == 48, "OrtApi.DisableTelemetryEvents has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DisableTelemetryEvents has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSession";
assert(it.offset_in_bytes == 56, "OrtApi.CreateSession has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSession has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSessionFromArray";
assert(it.offset_in_bytes == 64, "OrtApi.CreateSessionFromArray has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSessionFromArray has unexpected size % instead of 8", it.type.runtime_size);
case "Run";
assert(it.offset_in_bytes == 72, "OrtApi.Run has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Run has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSessionOptions";
assert(it.offset_in_bytes == 80, "OrtApi.CreateSessionOptions has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSessionOptions has unexpected size % instead of 8", it.type.runtime_size);
case "SetOptimizedModelFilePath";
assert(it.offset_in_bytes == 88, "OrtApi.SetOptimizedModelFilePath has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetOptimizedModelFilePath has unexpected size % instead of 8", it.type.runtime_size);
case "CloneSessionOptions";
assert(it.offset_in_bytes == 96, "OrtApi.CloneSessionOptions has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CloneSessionOptions has unexpected size % instead of 8", it.type.runtime_size);
case "SetSessionExecutionMode";
assert(it.offset_in_bytes == 104, "OrtApi.SetSessionExecutionMode has unexpected offset % instead of 104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetSessionExecutionMode has unexpected size % instead of 8", it.type.runtime_size);
case "EnableProfiling";
assert(it.offset_in_bytes == 112, "OrtApi.EnableProfiling has unexpected offset % instead of 112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EnableProfiling has unexpected size % instead of 8", it.type.runtime_size);
case "DisableProfiling";
assert(it.offset_in_bytes == 120, "OrtApi.DisableProfiling has unexpected offset % instead of 120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DisableProfiling has unexpected size % instead of 8", it.type.runtime_size);
case "EnableMemPattern";
assert(it.offset_in_bytes == 128, "OrtApi.EnableMemPattern has unexpected offset % instead of 128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EnableMemPattern has unexpected size % instead of 8", it.type.runtime_size);
case "DisableMemPattern";
assert(it.offset_in_bytes == 136, "OrtApi.DisableMemPattern has unexpected offset % instead of 136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DisableMemPattern has unexpected size % instead of 8", it.type.runtime_size);
case "EnableCpuMemArena";
assert(it.offset_in_bytes == 144, "OrtApi.EnableCpuMemArena has unexpected offset % instead of 144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EnableCpuMemArena has unexpected size % instead of 8", it.type.runtime_size);
case "DisableCpuMemArena";
assert(it.offset_in_bytes == 152, "OrtApi.DisableCpuMemArena has unexpected offset % instead of 152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DisableCpuMemArena has unexpected size % instead of 8", it.type.runtime_size);
case "SetSessionLogId";
assert(it.offset_in_bytes == 160, "OrtApi.SetSessionLogId has unexpected offset % instead of 160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetSessionLogId has unexpected size % instead of 8", it.type.runtime_size);
case "SetSessionLogVerbosityLevel";
assert(it.offset_in_bytes == 168, "OrtApi.SetSessionLogVerbosityLevel has unexpected offset % instead of 168", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetSessionLogVerbosityLevel has unexpected size % instead of 8", it.type.runtime_size);
case "SetSessionLogSeverityLevel";
assert(it.offset_in_bytes == 176, "OrtApi.SetSessionLogSeverityLevel has unexpected offset % instead of 176", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetSessionLogSeverityLevel has unexpected size % instead of 8", it.type.runtime_size);
case "SetSessionGraphOptimizationLevel";
assert(it.offset_in_bytes == 184, "OrtApi.SetSessionGraphOptimizationLevel has unexpected offset % instead of 184", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetSessionGraphOptimizationLevel has unexpected size % instead of 8", it.type.runtime_size);
case "SetIntraOpNumThreads";
assert(it.offset_in_bytes == 192, "OrtApi.SetIntraOpNumThreads has unexpected offset % instead of 192", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetIntraOpNumThreads has unexpected size % instead of 8", it.type.runtime_size);
case "SetInterOpNumThreads";
assert(it.offset_in_bytes == 200, "OrtApi.SetInterOpNumThreads has unexpected offset % instead of 200", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetInterOpNumThreads has unexpected size % instead of 8", it.type.runtime_size);
case "CreateCustomOpDomain";
assert(it.offset_in_bytes == 208, "OrtApi.CreateCustomOpDomain has unexpected offset % instead of 208", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateCustomOpDomain has unexpected size % instead of 8", it.type.runtime_size);
case "CustomOpDomain_Add";
assert(it.offset_in_bytes == 216, "OrtApi.CustomOpDomain_Add has unexpected offset % instead of 216", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CustomOpDomain_Add has unexpected size % instead of 8", it.type.runtime_size);
case "AddCustomOpDomain";
assert(it.offset_in_bytes == 224, "OrtApi.AddCustomOpDomain has unexpected offset % instead of 224", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddCustomOpDomain has unexpected size % instead of 8", it.type.runtime_size);
case "RegisterCustomOpsLibrary";
assert(it.offset_in_bytes == 232, "OrtApi.RegisterCustomOpsLibrary has unexpected offset % instead of 232", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RegisterCustomOpsLibrary has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetInputCount";
assert(it.offset_in_bytes == 240, "OrtApi.SessionGetInputCount has unexpected offset % instead of 240", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetInputCount has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetOutputCount";
assert(it.offset_in_bytes == 248, "OrtApi.SessionGetOutputCount has unexpected offset % instead of 248", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetOutputCount has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetOverridableInitializerCount";
assert(it.offset_in_bytes == 256, "OrtApi.SessionGetOverridableInitializerCount has unexpected offset % instead of 256", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetOverridableInitializerCount has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetInputTypeInfo";
assert(it.offset_in_bytes == 264, "OrtApi.SessionGetInputTypeInfo has unexpected offset % instead of 264", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetInputTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetOutputTypeInfo";
assert(it.offset_in_bytes == 272, "OrtApi.SessionGetOutputTypeInfo has unexpected offset % instead of 272", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetOutputTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetOverridableInitializerTypeInfo";
assert(it.offset_in_bytes == 280, "OrtApi.SessionGetOverridableInitializerTypeInfo has unexpected offset % instead of 280", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetOverridableInitializerTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetInputName";
assert(it.offset_in_bytes == 288, "OrtApi.SessionGetInputName has unexpected offset % instead of 288", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetInputName has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetOutputName";
assert(it.offset_in_bytes == 296, "OrtApi.SessionGetOutputName has unexpected offset % instead of 296", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetOutputName has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetOverridableInitializerName";
assert(it.offset_in_bytes == 304, "OrtApi.SessionGetOverridableInitializerName has unexpected offset % instead of 304", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetOverridableInitializerName has unexpected size % instead of 8", it.type.runtime_size);
case "CreateRunOptions";
assert(it.offset_in_bytes == 312, "OrtApi.CreateRunOptions has unexpected offset % instead of 312", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateRunOptions has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsSetRunLogVerbosityLevel";
assert(it.offset_in_bytes == 320, "OrtApi.RunOptionsSetRunLogVerbosityLevel has unexpected offset % instead of 320", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsSetRunLogVerbosityLevel has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsSetRunLogSeverityLevel";
assert(it.offset_in_bytes == 328, "OrtApi.RunOptionsSetRunLogSeverityLevel has unexpected offset % instead of 328", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsSetRunLogSeverityLevel has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsSetRunTag";
assert(it.offset_in_bytes == 336, "OrtApi.RunOptionsSetRunTag has unexpected offset % instead of 336", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsSetRunTag has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsGetRunLogVerbosityLevel";
assert(it.offset_in_bytes == 344, "OrtApi.RunOptionsGetRunLogVerbosityLevel has unexpected offset % instead of 344", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsGetRunLogVerbosityLevel has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsGetRunLogSeverityLevel";
assert(it.offset_in_bytes == 352, "OrtApi.RunOptionsGetRunLogSeverityLevel has unexpected offset % instead of 352", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsGetRunLogSeverityLevel has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsGetRunTag";
assert(it.offset_in_bytes == 360, "OrtApi.RunOptionsGetRunTag has unexpected offset % instead of 360", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsGetRunTag has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsSetTerminate";
assert(it.offset_in_bytes == 368, "OrtApi.RunOptionsSetTerminate has unexpected offset % instead of 368", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsSetTerminate has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsUnsetTerminate";
assert(it.offset_in_bytes == 376, "OrtApi.RunOptionsUnsetTerminate has unexpected offset % instead of 376", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsUnsetTerminate has unexpected size % instead of 8", it.type.runtime_size);
case "CreateTensorAsOrtValue";
assert(it.offset_in_bytes == 384, "OrtApi.CreateTensorAsOrtValue has unexpected offset % instead of 384", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateTensorAsOrtValue has unexpected size % instead of 8", it.type.runtime_size);
case "CreateTensorWithDataAsOrtValue";
assert(it.offset_in_bytes == 392, "OrtApi.CreateTensorWithDataAsOrtValue has unexpected offset % instead of 392", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateTensorWithDataAsOrtValue has unexpected size % instead of 8", it.type.runtime_size);
case "IsTensor";
assert(it.offset_in_bytes == 400, "OrtApi.IsTensor has unexpected offset % instead of 400", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.IsTensor has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorMutableData";
assert(it.offset_in_bytes == 408, "OrtApi.GetTensorMutableData has unexpected offset % instead of 408", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorMutableData has unexpected size % instead of 8", it.type.runtime_size);
case "FillStringTensor";
assert(it.offset_in_bytes == 416, "OrtApi.FillStringTensor has unexpected offset % instead of 416", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.FillStringTensor has unexpected size % instead of 8", it.type.runtime_size);
case "GetStringTensorDataLength";
assert(it.offset_in_bytes == 424, "OrtApi.GetStringTensorDataLength has unexpected offset % instead of 424", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetStringTensorDataLength has unexpected size % instead of 8", it.type.runtime_size);
case "GetStringTensorContent";
assert(it.offset_in_bytes == 432, "OrtApi.GetStringTensorContent has unexpected offset % instead of 432", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetStringTensorContent has unexpected size % instead of 8", it.type.runtime_size);
case "CastTypeInfoToTensorInfo";
assert(it.offset_in_bytes == 440, "OrtApi.CastTypeInfoToTensorInfo has unexpected offset % instead of 440", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CastTypeInfoToTensorInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetOnnxTypeFromTypeInfo";
assert(it.offset_in_bytes == 448, "OrtApi.GetOnnxTypeFromTypeInfo has unexpected offset % instead of 448", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetOnnxTypeFromTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateTensorTypeAndShapeInfo";
assert(it.offset_in_bytes == 456, "OrtApi.CreateTensorTypeAndShapeInfo has unexpected offset % instead of 456", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateTensorTypeAndShapeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "SetTensorElementType";
assert(it.offset_in_bytes == 464, "OrtApi.SetTensorElementType has unexpected offset % instead of 464", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetTensorElementType has unexpected size % instead of 8", it.type.runtime_size);
case "SetDimensions";
assert(it.offset_in_bytes == 472, "OrtApi.SetDimensions has unexpected offset % instead of 472", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetDimensions has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorElementType";
assert(it.offset_in_bytes == 480, "OrtApi.GetTensorElementType has unexpected offset % instead of 480", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorElementType has unexpected size % instead of 8", it.type.runtime_size);
case "GetDimensionsCount";
assert(it.offset_in_bytes == 488, "OrtApi.GetDimensionsCount has unexpected offset % instead of 488", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetDimensionsCount has unexpected size % instead of 8", it.type.runtime_size);
case "GetDimensions";
assert(it.offset_in_bytes == 496, "OrtApi.GetDimensions has unexpected offset % instead of 496", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetDimensions has unexpected size % instead of 8", it.type.runtime_size);
case "GetSymbolicDimensions";
assert(it.offset_in_bytes == 504, "OrtApi.GetSymbolicDimensions has unexpected offset % instead of 504", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSymbolicDimensions has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorShapeElementCount";
assert(it.offset_in_bytes == 512, "OrtApi.GetTensorShapeElementCount has unexpected offset % instead of 512", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorShapeElementCount has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorTypeAndShape";
assert(it.offset_in_bytes == 520, "OrtApi.GetTensorTypeAndShape has unexpected offset % instead of 520", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorTypeAndShape has unexpected size % instead of 8", it.type.runtime_size);
case "GetTypeInfo";
assert(it.offset_in_bytes == 528, "OrtApi.GetTypeInfo has unexpected offset % instead of 528", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetValueType";
assert(it.offset_in_bytes == 536, "OrtApi.GetValueType has unexpected offset % instead of 536", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetValueType has unexpected size % instead of 8", it.type.runtime_size);
case "CreateMemoryInfo";
assert(it.offset_in_bytes == 544, "OrtApi.CreateMemoryInfo has unexpected offset % instead of 544", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateMemoryInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateCpuMemoryInfo";
assert(it.offset_in_bytes == 552, "OrtApi.CreateCpuMemoryInfo has unexpected offset % instead of 552", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateCpuMemoryInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CompareMemoryInfo";
assert(it.offset_in_bytes == 560, "OrtApi.CompareMemoryInfo has unexpected offset % instead of 560", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CompareMemoryInfo has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfoGetName";
assert(it.offset_in_bytes == 568, "OrtApi.MemoryInfoGetName has unexpected offset % instead of 568", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.MemoryInfoGetName has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfoGetId";
assert(it.offset_in_bytes == 576, "OrtApi.MemoryInfoGetId has unexpected offset % instead of 576", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.MemoryInfoGetId has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfoGetMemType";
assert(it.offset_in_bytes == 584, "OrtApi.MemoryInfoGetMemType has unexpected offset % instead of 584", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.MemoryInfoGetMemType has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfoGetType";
assert(it.offset_in_bytes == 592, "OrtApi.MemoryInfoGetType has unexpected offset % instead of 592", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.MemoryInfoGetType has unexpected size % instead of 8", it.type.runtime_size);
case "AllocatorAlloc";
assert(it.offset_in_bytes == 600, "OrtApi.AllocatorAlloc has unexpected offset % instead of 600", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AllocatorAlloc has unexpected size % instead of 8", it.type.runtime_size);
case "AllocatorFree";
assert(it.offset_in_bytes == 608, "OrtApi.AllocatorFree has unexpected offset % instead of 608", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AllocatorFree has unexpected size % instead of 8", it.type.runtime_size);
case "AllocatorGetInfo";
assert(it.offset_in_bytes == 616, "OrtApi.AllocatorGetInfo has unexpected offset % instead of 616", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AllocatorGetInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetAllocatorWithDefaultOptions";
assert(it.offset_in_bytes == 624, "OrtApi.GetAllocatorWithDefaultOptions has unexpected offset % instead of 624", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetAllocatorWithDefaultOptions has unexpected size % instead of 8", it.type.runtime_size);
case "AddFreeDimensionOverride";
assert(it.offset_in_bytes == 632, "OrtApi.AddFreeDimensionOverride has unexpected offset % instead of 632", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddFreeDimensionOverride has unexpected size % instead of 8", it.type.runtime_size);
case "GetValue";
assert(it.offset_in_bytes == 640, "OrtApi.GetValue has unexpected offset % instead of 640", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetValue has unexpected size % instead of 8", it.type.runtime_size);
case "GetValueCount";
assert(it.offset_in_bytes == 648, "OrtApi.GetValueCount has unexpected offset % instead of 648", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetValueCount has unexpected size % instead of 8", it.type.runtime_size);
case "CreateValue";
assert(it.offset_in_bytes == 656, "OrtApi.CreateValue has unexpected offset % instead of 656", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateValue has unexpected size % instead of 8", it.type.runtime_size);
case "CreateOpaqueValue";
assert(it.offset_in_bytes == 664, "OrtApi.CreateOpaqueValue has unexpected offset % instead of 664", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateOpaqueValue has unexpected size % instead of 8", it.type.runtime_size);
case "GetOpaqueValue";
assert(it.offset_in_bytes == 672, "OrtApi.GetOpaqueValue has unexpected offset % instead of 672", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetOpaqueValue has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAttribute_float";
assert(it.offset_in_bytes == 680, "OrtApi.KernelInfoGetAttribute_float has unexpected offset % instead of 680", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAttribute_float has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAttribute_int64";
assert(it.offset_in_bytes == 688, "OrtApi.KernelInfoGetAttribute_int64 has unexpected offset % instead of 688", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAttribute_int64 has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAttribute_string";
assert(it.offset_in_bytes == 696, "OrtApi.KernelInfoGetAttribute_string has unexpected offset % instead of 696", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAttribute_string has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetInputCount";
assert(it.offset_in_bytes == 704, "OrtApi.KernelContext_GetInputCount has unexpected offset % instead of 704", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetInputCount has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetOutputCount";
assert(it.offset_in_bytes == 712, "OrtApi.KernelContext_GetOutputCount has unexpected offset % instead of 712", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetOutputCount has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetInput";
assert(it.offset_in_bytes == 720, "OrtApi.KernelContext_GetInput has unexpected offset % instead of 720", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetInput has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetOutput";
assert(it.offset_in_bytes == 728, "OrtApi.KernelContext_GetOutput has unexpected offset % instead of 728", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetOutput has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseEnv";
assert(it.offset_in_bytes == 736, "OrtApi.ReleaseEnv has unexpected offset % instead of 736", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseEnv has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseStatus";
assert(it.offset_in_bytes == 744, "OrtApi.ReleaseStatus has unexpected offset % instead of 744", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseStatus has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseMemoryInfo";
assert(it.offset_in_bytes == 752, "OrtApi.ReleaseMemoryInfo has unexpected offset % instead of 752", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseMemoryInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseSession";
assert(it.offset_in_bytes == 760, "OrtApi.ReleaseSession has unexpected offset % instead of 760", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseSession has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseValue";
assert(it.offset_in_bytes == 768, "OrtApi.ReleaseValue has unexpected offset % instead of 768", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseValue has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseRunOptions";
assert(it.offset_in_bytes == 776, "OrtApi.ReleaseRunOptions has unexpected offset % instead of 776", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseRunOptions has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseTypeInfo";
assert(it.offset_in_bytes == 784, "OrtApi.ReleaseTypeInfo has unexpected offset % instead of 784", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseTensorTypeAndShapeInfo";
assert(it.offset_in_bytes == 792, "OrtApi.ReleaseTensorTypeAndShapeInfo has unexpected offset % instead of 792", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseTensorTypeAndShapeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseSessionOptions";
assert(it.offset_in_bytes == 800, "OrtApi.ReleaseSessionOptions has unexpected offset % instead of 800", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseSessionOptions has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseCustomOpDomain";
assert(it.offset_in_bytes == 808, "OrtApi.ReleaseCustomOpDomain has unexpected offset % instead of 808", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseCustomOpDomain has unexpected size % instead of 8", it.type.runtime_size);
case "GetDenotationFromTypeInfo";
assert(it.offset_in_bytes == 816, "OrtApi.GetDenotationFromTypeInfo has unexpected offset % instead of 816", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetDenotationFromTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CastTypeInfoToMapTypeInfo";
assert(it.offset_in_bytes == 824, "OrtApi.CastTypeInfoToMapTypeInfo has unexpected offset % instead of 824", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CastTypeInfoToMapTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CastTypeInfoToSequenceTypeInfo";
assert(it.offset_in_bytes == 832, "OrtApi.CastTypeInfoToSequenceTypeInfo has unexpected offset % instead of 832", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CastTypeInfoToSequenceTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetMapKeyType";
assert(it.offset_in_bytes == 840, "OrtApi.GetMapKeyType has unexpected offset % instead of 840", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetMapKeyType has unexpected size % instead of 8", it.type.runtime_size);
case "GetMapValueType";
assert(it.offset_in_bytes == 848, "OrtApi.GetMapValueType has unexpected offset % instead of 848", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetMapValueType has unexpected size % instead of 8", it.type.runtime_size);
case "GetSequenceElementType";
assert(it.offset_in_bytes == 856, "OrtApi.GetSequenceElementType has unexpected offset % instead of 856", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSequenceElementType has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseMapTypeInfo";
assert(it.offset_in_bytes == 864, "OrtApi.ReleaseMapTypeInfo has unexpected offset % instead of 864", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseMapTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseSequenceTypeInfo";
assert(it.offset_in_bytes == 872, "OrtApi.ReleaseSequenceTypeInfo has unexpected offset % instead of 872", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseSequenceTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "SessionEndProfiling";
assert(it.offset_in_bytes == 880, "OrtApi.SessionEndProfiling has unexpected offset % instead of 880", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionEndProfiling has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetModelMetadata";
assert(it.offset_in_bytes == 888, "OrtApi.SessionGetModelMetadata has unexpected offset % instead of 888", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetModelMetadata has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataGetProducerName";
assert(it.offset_in_bytes == 896, "OrtApi.ModelMetadataGetProducerName has unexpected offset % instead of 896", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataGetProducerName has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataGetGraphName";
assert(it.offset_in_bytes == 904, "OrtApi.ModelMetadataGetGraphName has unexpected offset % instead of 904", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataGetGraphName has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataGetDomain";
assert(it.offset_in_bytes == 912, "OrtApi.ModelMetadataGetDomain has unexpected offset % instead of 912", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataGetDomain has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataGetDescription";
assert(it.offset_in_bytes == 920, "OrtApi.ModelMetadataGetDescription has unexpected offset % instead of 920", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataGetDescription has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataLookupCustomMetadataMap";
assert(it.offset_in_bytes == 928, "OrtApi.ModelMetadataLookupCustomMetadataMap has unexpected offset % instead of 928", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataLookupCustomMetadataMap has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataGetVersion";
assert(it.offset_in_bytes == 936, "OrtApi.ModelMetadataGetVersion has unexpected offset % instead of 936", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataGetVersion has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseModelMetadata";
assert(it.offset_in_bytes == 944, "OrtApi.ReleaseModelMetadata has unexpected offset % instead of 944", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseModelMetadata has unexpected size % instead of 8", it.type.runtime_size);
case "CreateEnvWithGlobalThreadPools";
assert(it.offset_in_bytes == 952, "OrtApi.CreateEnvWithGlobalThreadPools has unexpected offset % instead of 952", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateEnvWithGlobalThreadPools has unexpected size % instead of 8", it.type.runtime_size);
case "DisablePerSessionThreads";
assert(it.offset_in_bytes == 960, "OrtApi.DisablePerSessionThreads has unexpected offset % instead of 960", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DisablePerSessionThreads has unexpected size % instead of 8", it.type.runtime_size);
case "CreateThreadingOptions";
assert(it.offset_in_bytes == 968, "OrtApi.CreateThreadingOptions has unexpected offset % instead of 968", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateThreadingOptions has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseThreadingOptions";
assert(it.offset_in_bytes == 976, "OrtApi.ReleaseThreadingOptions has unexpected offset % instead of 976", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseThreadingOptions has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataGetCustomMetadataMapKeys";
assert(it.offset_in_bytes == 984, "OrtApi.ModelMetadataGetCustomMetadataMapKeys has unexpected offset % instead of 984", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataGetCustomMetadataMapKeys has unexpected size % instead of 8", it.type.runtime_size);
case "AddFreeDimensionOverrideByName";
assert(it.offset_in_bytes == 992, "OrtApi.AddFreeDimensionOverrideByName has unexpected offset % instead of 992", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddFreeDimensionOverrideByName has unexpected size % instead of 8", it.type.runtime_size);
case "GetAvailableProviders";
assert(it.offset_in_bytes == 1000, "OrtApi.GetAvailableProviders has unexpected offset % instead of 1000", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetAvailableProviders has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseAvailableProviders";
assert(it.offset_in_bytes == 1008, "OrtApi.ReleaseAvailableProviders has unexpected offset % instead of 1008", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseAvailableProviders has unexpected size % instead of 8", it.type.runtime_size);
case "GetStringTensorElementLength";
assert(it.offset_in_bytes == 1016, "OrtApi.GetStringTensorElementLength has unexpected offset % instead of 1016", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetStringTensorElementLength has unexpected size % instead of 8", it.type.runtime_size);
case "GetStringTensorElement";
assert(it.offset_in_bytes == 1024, "OrtApi.GetStringTensorElement has unexpected offset % instead of 1024", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetStringTensorElement has unexpected size % instead of 8", it.type.runtime_size);
case "FillStringTensorElement";
assert(it.offset_in_bytes == 1032, "OrtApi.FillStringTensorElement has unexpected offset % instead of 1032", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.FillStringTensorElement has unexpected size % instead of 8", it.type.runtime_size);
case "AddSessionConfigEntry";
assert(it.offset_in_bytes == 1040, "OrtApi.AddSessionConfigEntry has unexpected offset % instead of 1040", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddSessionConfigEntry has unexpected size % instead of 8", it.type.runtime_size);
case "CreateAllocator";
assert(it.offset_in_bytes == 1048, "OrtApi.CreateAllocator has unexpected offset % instead of 1048", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseAllocator";
assert(it.offset_in_bytes == 1056, "OrtApi.ReleaseAllocator has unexpected offset % instead of 1056", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "RunWithBinding";
assert(it.offset_in_bytes == 1064, "OrtApi.RunWithBinding has unexpected offset % instead of 1064", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunWithBinding has unexpected size % instead of 8", it.type.runtime_size);
case "CreateIoBinding";
assert(it.offset_in_bytes == 1072, "OrtApi.CreateIoBinding has unexpected offset % instead of 1072", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateIoBinding has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseIoBinding";
assert(it.offset_in_bytes == 1080, "OrtApi.ReleaseIoBinding has unexpected offset % instead of 1080", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseIoBinding has unexpected size % instead of 8", it.type.runtime_size);
case "BindInput";
assert(it.offset_in_bytes == 1088, "OrtApi.BindInput has unexpected offset % instead of 1088", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.BindInput has unexpected size % instead of 8", it.type.runtime_size);
case "BindOutput";
assert(it.offset_in_bytes == 1096, "OrtApi.BindOutput has unexpected offset % instead of 1096", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.BindOutput has unexpected size % instead of 8", it.type.runtime_size);
case "BindOutputToDevice";
assert(it.offset_in_bytes == 1104, "OrtApi.BindOutputToDevice has unexpected offset % instead of 1104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.BindOutputToDevice has unexpected size % instead of 8", it.type.runtime_size);
case "GetBoundOutputNames";
assert(it.offset_in_bytes == 1112, "OrtApi.GetBoundOutputNames has unexpected offset % instead of 1112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetBoundOutputNames has unexpected size % instead of 8", it.type.runtime_size);
case "GetBoundOutputValues";
assert(it.offset_in_bytes == 1120, "OrtApi.GetBoundOutputValues has unexpected offset % instead of 1120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetBoundOutputValues has unexpected size % instead of 8", it.type.runtime_size);
case "ClearBoundInputs";
assert(it.offset_in_bytes == 1128, "OrtApi.ClearBoundInputs has unexpected offset % instead of 1128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ClearBoundInputs has unexpected size % instead of 8", it.type.runtime_size);
case "ClearBoundOutputs";
assert(it.offset_in_bytes == 1136, "OrtApi.ClearBoundOutputs has unexpected offset % instead of 1136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ClearBoundOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "TensorAt";
assert(it.offset_in_bytes == 1144, "OrtApi.TensorAt has unexpected offset % instead of 1144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.TensorAt has unexpected size % instead of 8", it.type.runtime_size);
case "CreateAndRegisterAllocator";
assert(it.offset_in_bytes == 1152, "OrtApi.CreateAndRegisterAllocator has unexpected offset % instead of 1152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateAndRegisterAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "SetLanguageProjection";
assert(it.offset_in_bytes == 1160, "OrtApi.SetLanguageProjection has unexpected offset % instead of 1160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetLanguageProjection has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetProfilingStartTimeNs";
assert(it.offset_in_bytes == 1168, "OrtApi.SessionGetProfilingStartTimeNs has unexpected offset % instead of 1168", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetProfilingStartTimeNs has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalIntraOpNumThreads";
assert(it.offset_in_bytes == 1176, "OrtApi.SetGlobalIntraOpNumThreads has unexpected offset % instead of 1176", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalIntraOpNumThreads has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalInterOpNumThreads";
assert(it.offset_in_bytes == 1184, "OrtApi.SetGlobalInterOpNumThreads has unexpected offset % instead of 1184", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalInterOpNumThreads has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalSpinControl";
assert(it.offset_in_bytes == 1192, "OrtApi.SetGlobalSpinControl has unexpected offset % instead of 1192", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalSpinControl has unexpected size % instead of 8", it.type.runtime_size);
case "AddInitializer";
assert(it.offset_in_bytes == 1200, "OrtApi.AddInitializer has unexpected offset % instead of 1200", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddInitializer has unexpected size % instead of 8", it.type.runtime_size);
case "CreateEnvWithCustomLoggerAndGlobalThreadPools";
assert(it.offset_in_bytes == 1208, "OrtApi.CreateEnvWithCustomLoggerAndGlobalThreadPools has unexpected offset % instead of 1208", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateEnvWithCustomLoggerAndGlobalThreadPools has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_CUDA";
assert(it.offset_in_bytes == 1216, "OrtApi.SessionOptionsAppendExecutionProvider_CUDA has unexpected offset % instead of 1216", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_CUDA has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_ROCM";
assert(it.offset_in_bytes == 1224, "OrtApi.SessionOptionsAppendExecutionProvider_ROCM has unexpected offset % instead of 1224", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_ROCM has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_OpenVINO";
assert(it.offset_in_bytes == 1232, "OrtApi.SessionOptionsAppendExecutionProvider_OpenVINO has unexpected offset % instead of 1232", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_OpenVINO has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalDenormalAsZero";
assert(it.offset_in_bytes == 1240, "OrtApi.SetGlobalDenormalAsZero has unexpected offset % instead of 1240", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalDenormalAsZero has unexpected size % instead of 8", it.type.runtime_size);
case "CreateArenaCfg";
assert(it.offset_in_bytes == 1248, "OrtApi.CreateArenaCfg has unexpected offset % instead of 1248", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateArenaCfg has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseArenaCfg";
assert(it.offset_in_bytes == 1256, "OrtApi.ReleaseArenaCfg has unexpected offset % instead of 1256", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseArenaCfg has unexpected size % instead of 8", it.type.runtime_size);
case "ModelMetadataGetGraphDescription";
assert(it.offset_in_bytes == 1264, "OrtApi.ModelMetadataGetGraphDescription has unexpected offset % instead of 1264", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ModelMetadataGetGraphDescription has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_TensorRT";
assert(it.offset_in_bytes == 1272, "OrtApi.SessionOptionsAppendExecutionProvider_TensorRT has unexpected offset % instead of 1272", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_TensorRT has unexpected size % instead of 8", it.type.runtime_size);
case "SetCurrentGpuDeviceId";
assert(it.offset_in_bytes == 1280, "OrtApi.SetCurrentGpuDeviceId has unexpected offset % instead of 1280", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetCurrentGpuDeviceId has unexpected size % instead of 8", it.type.runtime_size);
case "GetCurrentGpuDeviceId";
assert(it.offset_in_bytes == 1288, "OrtApi.GetCurrentGpuDeviceId has unexpected offset % instead of 1288", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetCurrentGpuDeviceId has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAttributeArray_float";
assert(it.offset_in_bytes == 1296, "OrtApi.KernelInfoGetAttributeArray_float has unexpected offset % instead of 1296", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAttributeArray_float has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAttributeArray_int64";
assert(it.offset_in_bytes == 1304, "OrtApi.KernelInfoGetAttributeArray_int64 has unexpected offset % instead of 1304", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAttributeArray_int64 has unexpected size % instead of 8", it.type.runtime_size);
case "CreateArenaCfgV2";
assert(it.offset_in_bytes == 1312, "OrtApi.CreateArenaCfgV2 has unexpected offset % instead of 1312", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateArenaCfgV2 has unexpected size % instead of 8", it.type.runtime_size);
case "AddRunConfigEntry";
assert(it.offset_in_bytes == 1320, "OrtApi.AddRunConfigEntry has unexpected offset % instead of 1320", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddRunConfigEntry has unexpected size % instead of 8", it.type.runtime_size);
case "CreatePrepackedWeightsContainer";
assert(it.offset_in_bytes == 1328, "OrtApi.CreatePrepackedWeightsContainer has unexpected offset % instead of 1328", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreatePrepackedWeightsContainer has unexpected size % instead of 8", it.type.runtime_size);
case "ReleasePrepackedWeightsContainer";
assert(it.offset_in_bytes == 1336, "OrtApi.ReleasePrepackedWeightsContainer has unexpected offset % instead of 1336", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleasePrepackedWeightsContainer has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSessionWithPrepackedWeightsContainer";
assert(it.offset_in_bytes == 1344, "OrtApi.CreateSessionWithPrepackedWeightsContainer has unexpected offset % instead of 1344", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSessionWithPrepackedWeightsContainer has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSessionFromArrayWithPrepackedWeightsContainer";
assert(it.offset_in_bytes == 1352, "OrtApi.CreateSessionFromArrayWithPrepackedWeightsContainer has unexpected offset % instead of 1352", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSessionFromArrayWithPrepackedWeightsContainer has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_TensorRT_V2";
assert(it.offset_in_bytes == 1360, "OrtApi.SessionOptionsAppendExecutionProvider_TensorRT_V2 has unexpected offset % instead of 1360", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_TensorRT_V2 has unexpected size % instead of 8", it.type.runtime_size);
case "CreateTensorRTProviderOptions";
assert(it.offset_in_bytes == 1368, "OrtApi.CreateTensorRTProviderOptions has unexpected offset % instead of 1368", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateTensorRTProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateTensorRTProviderOptions";
assert(it.offset_in_bytes == 1376, "OrtApi.UpdateTensorRTProviderOptions has unexpected offset % instead of 1376", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateTensorRTProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorRTProviderOptionsAsString";
assert(it.offset_in_bytes == 1384, "OrtApi.GetTensorRTProviderOptionsAsString has unexpected offset % instead of 1384", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorRTProviderOptionsAsString has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseTensorRTProviderOptions";
assert(it.offset_in_bytes == 1392, "OrtApi.ReleaseTensorRTProviderOptions has unexpected offset % instead of 1392", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseTensorRTProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "EnableOrtCustomOps";
assert(it.offset_in_bytes == 1400, "OrtApi.EnableOrtCustomOps has unexpected offset % instead of 1400", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EnableOrtCustomOps has unexpected size % instead of 8", it.type.runtime_size);
case "RegisterAllocator";
assert(it.offset_in_bytes == 1408, "OrtApi.RegisterAllocator has unexpected offset % instead of 1408", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RegisterAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "UnregisterAllocator";
assert(it.offset_in_bytes == 1416, "OrtApi.UnregisterAllocator has unexpected offset % instead of 1416", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UnregisterAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "IsSparseTensor";
assert(it.offset_in_bytes == 1424, "OrtApi.IsSparseTensor has unexpected offset % instead of 1424", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.IsSparseTensor has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSparseTensorAsOrtValue";
assert(it.offset_in_bytes == 1432, "OrtApi.CreateSparseTensorAsOrtValue has unexpected offset % instead of 1432", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSparseTensorAsOrtValue has unexpected size % instead of 8", it.type.runtime_size);
case "FillSparseTensorCoo";
assert(it.offset_in_bytes == 1440, "OrtApi.FillSparseTensorCoo has unexpected offset % instead of 1440", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.FillSparseTensorCoo has unexpected size % instead of 8", it.type.runtime_size);
case "FillSparseTensorCsr";
assert(it.offset_in_bytes == 1448, "OrtApi.FillSparseTensorCsr has unexpected offset % instead of 1448", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.FillSparseTensorCsr has unexpected size % instead of 8", it.type.runtime_size);
case "FillSparseTensorBlockSparse";
assert(it.offset_in_bytes == 1456, "OrtApi.FillSparseTensorBlockSparse has unexpected offset % instead of 1456", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.FillSparseTensorBlockSparse has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSparseTensorWithValuesAsOrtValue";
assert(it.offset_in_bytes == 1464, "OrtApi.CreateSparseTensorWithValuesAsOrtValue has unexpected offset % instead of 1464", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSparseTensorWithValuesAsOrtValue has unexpected size % instead of 8", it.type.runtime_size);
case "UseCooIndices";
assert(it.offset_in_bytes == 1472, "OrtApi.UseCooIndices has unexpected offset % instead of 1472", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UseCooIndices has unexpected size % instead of 8", it.type.runtime_size);
case "UseCsrIndices";
assert(it.offset_in_bytes == 1480, "OrtApi.UseCsrIndices has unexpected offset % instead of 1480", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UseCsrIndices has unexpected size % instead of 8", it.type.runtime_size);
case "UseBlockSparseIndices";
assert(it.offset_in_bytes == 1488, "OrtApi.UseBlockSparseIndices has unexpected offset % instead of 1488", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UseBlockSparseIndices has unexpected size % instead of 8", it.type.runtime_size);
case "GetSparseTensorFormat";
assert(it.offset_in_bytes == 1496, "OrtApi.GetSparseTensorFormat has unexpected offset % instead of 1496", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSparseTensorFormat has unexpected size % instead of 8", it.type.runtime_size);
case "GetSparseTensorValuesTypeAndShape";
assert(it.offset_in_bytes == 1504, "OrtApi.GetSparseTensorValuesTypeAndShape has unexpected offset % instead of 1504", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSparseTensorValuesTypeAndShape has unexpected size % instead of 8", it.type.runtime_size);
case "GetSparseTensorValues";
assert(it.offset_in_bytes == 1512, "OrtApi.GetSparseTensorValues has unexpected offset % instead of 1512", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSparseTensorValues has unexpected size % instead of 8", it.type.runtime_size);
case "GetSparseTensorIndicesTypeShape";
assert(it.offset_in_bytes == 1520, "OrtApi.GetSparseTensorIndicesTypeShape has unexpected offset % instead of 1520", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSparseTensorIndicesTypeShape has unexpected size % instead of 8", it.type.runtime_size);
case "GetSparseTensorIndices";
assert(it.offset_in_bytes == 1528, "OrtApi.GetSparseTensorIndices has unexpected offset % instead of 1528", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSparseTensorIndices has unexpected size % instead of 8", it.type.runtime_size);
case "HasValue";
assert(it.offset_in_bytes == 1536, "OrtApi.HasValue has unexpected offset % instead of 1536", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.HasValue has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetGPUComputeStream";
assert(it.offset_in_bytes == 1544, "OrtApi.KernelContext_GetGPUComputeStream has unexpected offset % instead of 1544", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetGPUComputeStream has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorMemoryInfo";
assert(it.offset_in_bytes == 1552, "OrtApi.GetTensorMemoryInfo has unexpected offset % instead of 1552", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorMemoryInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetExecutionProviderApi";
assert(it.offset_in_bytes == 1560, "OrtApi.GetExecutionProviderApi has unexpected offset % instead of 1560", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetExecutionProviderApi has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsSetCustomCreateThreadFn";
assert(it.offset_in_bytes == 1568, "OrtApi.SessionOptionsSetCustomCreateThreadFn has unexpected offset % instead of 1568", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsSetCustomCreateThreadFn has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsSetCustomThreadCreationOptions";
assert(it.offset_in_bytes == 1576, "OrtApi.SessionOptionsSetCustomThreadCreationOptions has unexpected offset % instead of 1576", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsSetCustomThreadCreationOptions has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsSetCustomJoinThreadFn";
assert(it.offset_in_bytes == 1584, "OrtApi.SessionOptionsSetCustomJoinThreadFn has unexpected offset % instead of 1584", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsSetCustomJoinThreadFn has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalCustomCreateThreadFn";
assert(it.offset_in_bytes == 1592, "OrtApi.SetGlobalCustomCreateThreadFn has unexpected offset % instead of 1592", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalCustomCreateThreadFn has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalCustomThreadCreationOptions";
assert(it.offset_in_bytes == 1600, "OrtApi.SetGlobalCustomThreadCreationOptions has unexpected offset % instead of 1600", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalCustomThreadCreationOptions has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalCustomJoinThreadFn";
assert(it.offset_in_bytes == 1608, "OrtApi.SetGlobalCustomJoinThreadFn has unexpected offset % instead of 1608", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalCustomJoinThreadFn has unexpected size % instead of 8", it.type.runtime_size);
case "SynchronizeBoundInputs";
assert(it.offset_in_bytes == 1616, "OrtApi.SynchronizeBoundInputs has unexpected offset % instead of 1616", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SynchronizeBoundInputs has unexpected size % instead of 8", it.type.runtime_size);
case "SynchronizeBoundOutputs";
assert(it.offset_in_bytes == 1624, "OrtApi.SynchronizeBoundOutputs has unexpected offset % instead of 1624", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SynchronizeBoundOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_CUDA_V2";
assert(it.offset_in_bytes == 1632, "OrtApi.SessionOptionsAppendExecutionProvider_CUDA_V2 has unexpected offset % instead of 1632", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_CUDA_V2 has unexpected size % instead of 8", it.type.runtime_size);
case "CreateCUDAProviderOptions";
assert(it.offset_in_bytes == 1640, "OrtApi.CreateCUDAProviderOptions has unexpected offset % instead of 1640", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateCUDAProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateCUDAProviderOptions";
assert(it.offset_in_bytes == 1648, "OrtApi.UpdateCUDAProviderOptions has unexpected offset % instead of 1648", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateCUDAProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "GetCUDAProviderOptionsAsString";
assert(it.offset_in_bytes == 1656, "OrtApi.GetCUDAProviderOptionsAsString has unexpected offset % instead of 1656", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetCUDAProviderOptionsAsString has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseCUDAProviderOptions";
assert(it.offset_in_bytes == 1664, "OrtApi.ReleaseCUDAProviderOptions has unexpected offset % instead of 1664", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseCUDAProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_MIGraphX";
assert(it.offset_in_bytes == 1672, "OrtApi.SessionOptionsAppendExecutionProvider_MIGraphX has unexpected offset % instead of 1672", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_MIGraphX has unexpected size % instead of 8", it.type.runtime_size);
case "AddExternalInitializers";
assert(it.offset_in_bytes == 1680, "OrtApi.AddExternalInitializers has unexpected offset % instead of 1680", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddExternalInitializers has unexpected size % instead of 8", it.type.runtime_size);
case "CreateOpAttr";
assert(it.offset_in_bytes == 1688, "OrtApi.CreateOpAttr has unexpected offset % instead of 1688", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateOpAttr has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseOpAttr";
assert(it.offset_in_bytes == 1696, "OrtApi.ReleaseOpAttr has unexpected offset % instead of 1696", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseOpAttr has unexpected size % instead of 8", it.type.runtime_size);
case "CreateOp";
assert(it.offset_in_bytes == 1704, "OrtApi.CreateOp has unexpected offset % instead of 1704", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateOp has unexpected size % instead of 8", it.type.runtime_size);
case "InvokeOp";
assert(it.offset_in_bytes == 1712, "OrtApi.InvokeOp has unexpected offset % instead of 1712", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.InvokeOp has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseOp";
assert(it.offset_in_bytes == 1720, "OrtApi.ReleaseOp has unexpected offset % instead of 1720", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseOp has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider";
assert(it.offset_in_bytes == 1728, "OrtApi.SessionOptionsAppendExecutionProvider has unexpected offset % instead of 1728", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider has unexpected size % instead of 8", it.type.runtime_size);
case "CopyKernelInfo";
assert(it.offset_in_bytes == 1736, "OrtApi.CopyKernelInfo has unexpected offset % instead of 1736", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CopyKernelInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseKernelInfo";
assert(it.offset_in_bytes == 1744, "OrtApi.ReleaseKernelInfo has unexpected offset % instead of 1744", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseKernelInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetTrainingApi";
assert(it.offset_in_bytes == 1752, "OrtApi.GetTrainingApi has unexpected offset % instead of 1752", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTrainingApi has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_CANN";
assert(it.offset_in_bytes == 1760, "OrtApi.SessionOptionsAppendExecutionProvider_CANN has unexpected offset % instead of 1760", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_CANN has unexpected size % instead of 8", it.type.runtime_size);
case "CreateCANNProviderOptions";
assert(it.offset_in_bytes == 1768, "OrtApi.CreateCANNProviderOptions has unexpected offset % instead of 1768", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateCANNProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateCANNProviderOptions";
assert(it.offset_in_bytes == 1776, "OrtApi.UpdateCANNProviderOptions has unexpected offset % instead of 1776", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateCANNProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "GetCANNProviderOptionsAsString";
assert(it.offset_in_bytes == 1784, "OrtApi.GetCANNProviderOptionsAsString has unexpected offset % instead of 1784", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetCANNProviderOptionsAsString has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseCANNProviderOptions";
assert(it.offset_in_bytes == 1792, "OrtApi.ReleaseCANNProviderOptions has unexpected offset % instead of 1792", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseCANNProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfoGetDeviceType";
assert(it.offset_in_bytes == 1800, "OrtApi.MemoryInfoGetDeviceType has unexpected offset % instead of 1800", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.MemoryInfoGetDeviceType has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateEnvWithCustomLogLevel";
assert(it.offset_in_bytes == 1808, "OrtApi.UpdateEnvWithCustomLogLevel has unexpected offset % instead of 1808", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateEnvWithCustomLogLevel has unexpected size % instead of 8", it.type.runtime_size);
case "SetGlobalIntraOpThreadAffinity";
assert(it.offset_in_bytes == 1816, "OrtApi.SetGlobalIntraOpThreadAffinity has unexpected offset % instead of 1816", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetGlobalIntraOpThreadAffinity has unexpected size % instead of 8", it.type.runtime_size);
case "RegisterCustomOpsLibrary_V2";
assert(it.offset_in_bytes == 1824, "OrtApi.RegisterCustomOpsLibrary_V2 has unexpected offset % instead of 1824", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RegisterCustomOpsLibrary_V2 has unexpected size % instead of 8", it.type.runtime_size);
case "RegisterCustomOpsUsingFunction";
assert(it.offset_in_bytes == 1832, "OrtApi.RegisterCustomOpsUsingFunction has unexpected offset % instead of 1832", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RegisterCustomOpsUsingFunction has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetInputCount";
assert(it.offset_in_bytes == 1840, "OrtApi.KernelInfo_GetInputCount has unexpected offset % instead of 1840", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetInputCount has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetOutputCount";
assert(it.offset_in_bytes == 1848, "OrtApi.KernelInfo_GetOutputCount has unexpected offset % instead of 1848", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetOutputCount has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetInputName";
assert(it.offset_in_bytes == 1856, "OrtApi.KernelInfo_GetInputName has unexpected offset % instead of 1856", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetInputName has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetOutputName";
assert(it.offset_in_bytes == 1864, "OrtApi.KernelInfo_GetOutputName has unexpected offset % instead of 1864", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetOutputName has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetInputTypeInfo";
assert(it.offset_in_bytes == 1872, "OrtApi.KernelInfo_GetInputTypeInfo has unexpected offset % instead of 1872", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetInputTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetOutputTypeInfo";
assert(it.offset_in_bytes == 1880, "OrtApi.KernelInfo_GetOutputTypeInfo has unexpected offset % instead of 1880", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetOutputTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAttribute_tensor";
assert(it.offset_in_bytes == 1888, "OrtApi.KernelInfoGetAttribute_tensor has unexpected offset % instead of 1888", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAttribute_tensor has unexpected size % instead of 8", it.type.runtime_size);
case "HasSessionConfigEntry";
assert(it.offset_in_bytes == 1896, "OrtApi.HasSessionConfigEntry has unexpected offset % instead of 1896", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.HasSessionConfigEntry has unexpected size % instead of 8", it.type.runtime_size);
case "GetSessionConfigEntry";
assert(it.offset_in_bytes == 1904, "OrtApi.GetSessionConfigEntry has unexpected offset % instead of 1904", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSessionConfigEntry has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_Dnnl";
assert(it.offset_in_bytes == 1912, "OrtApi.SessionOptionsAppendExecutionProvider_Dnnl has unexpected offset % instead of 1912", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_Dnnl has unexpected size % instead of 8", it.type.runtime_size);
case "CreateDnnlProviderOptions";
assert(it.offset_in_bytes == 1920, "OrtApi.CreateDnnlProviderOptions has unexpected offset % instead of 1920", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateDnnlProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateDnnlProviderOptions";
assert(it.offset_in_bytes == 1928, "OrtApi.UpdateDnnlProviderOptions has unexpected offset % instead of 1928", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateDnnlProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "GetDnnlProviderOptionsAsString";
assert(it.offset_in_bytes == 1936, "OrtApi.GetDnnlProviderOptionsAsString has unexpected offset % instead of 1936", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetDnnlProviderOptionsAsString has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseDnnlProviderOptions";
assert(it.offset_in_bytes == 1944, "OrtApi.ReleaseDnnlProviderOptions has unexpected offset % instead of 1944", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseDnnlProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetNodeName";
assert(it.offset_in_bytes == 1952, "OrtApi.KernelInfo_GetNodeName has unexpected offset % instead of 1952", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetNodeName has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetLogger";
assert(it.offset_in_bytes == 1960, "OrtApi.KernelInfo_GetLogger has unexpected offset % instead of 1960", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetLogger has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetLogger";
assert(it.offset_in_bytes == 1968, "OrtApi.KernelContext_GetLogger has unexpected offset % instead of 1968", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetLogger has unexpected size % instead of 8", it.type.runtime_size);
case "Logger_LogMessage";
assert(it.offset_in_bytes == 1976, "OrtApi.Logger_LogMessage has unexpected offset % instead of 1976", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Logger_LogMessage has unexpected size % instead of 8", it.type.runtime_size);
case "Logger_GetLoggingSeverityLevel";
assert(it.offset_in_bytes == 1984, "OrtApi.Logger_GetLoggingSeverityLevel has unexpected offset % instead of 1984", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Logger_GetLoggingSeverityLevel has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetConstantInput_tensor";
assert(it.offset_in_bytes == 1992, "OrtApi.KernelInfoGetConstantInput_tensor has unexpected offset % instead of 1992", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetConstantInput_tensor has unexpected size % instead of 8", it.type.runtime_size);
case "CastTypeInfoToOptionalTypeInfo";
assert(it.offset_in_bytes == 2000, "OrtApi.CastTypeInfoToOptionalTypeInfo has unexpected offset % instead of 2000", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CastTypeInfoToOptionalTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetOptionalContainedTypeInfo";
assert(it.offset_in_bytes == 2008, "OrtApi.GetOptionalContainedTypeInfo has unexpected offset % instead of 2008", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetOptionalContainedTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetResizedStringTensorElementBuffer";
assert(it.offset_in_bytes == 2016, "OrtApi.GetResizedStringTensorElementBuffer has unexpected offset % instead of 2016", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetResizedStringTensorElementBuffer has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetAllocator";
assert(it.offset_in_bytes == 2024, "OrtApi.KernelContext_GetAllocator has unexpected offset % instead of 2024", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "GetBuildInfoString";
assert(it.offset_in_bytes == 2032, "OrtApi.GetBuildInfoString has unexpected offset % instead of 2032", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetBuildInfoString has unexpected size % instead of 8", it.type.runtime_size);
case "CreateROCMProviderOptions";
assert(it.offset_in_bytes == 2040, "OrtApi.CreateROCMProviderOptions has unexpected offset % instead of 2040", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateROCMProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateROCMProviderOptions";
assert(it.offset_in_bytes == 2048, "OrtApi.UpdateROCMProviderOptions has unexpected offset % instead of 2048", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateROCMProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "GetROCMProviderOptionsAsString";
assert(it.offset_in_bytes == 2056, "OrtApi.GetROCMProviderOptionsAsString has unexpected offset % instead of 2056", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetROCMProviderOptionsAsString has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseROCMProviderOptions";
assert(it.offset_in_bytes == 2064, "OrtApi.ReleaseROCMProviderOptions has unexpected offset % instead of 2064", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseROCMProviderOptions has unexpected size % instead of 8", it.type.runtime_size);
case "CreateAndRegisterAllocatorV2";
assert(it.offset_in_bytes == 2072, "OrtApi.CreateAndRegisterAllocatorV2 has unexpected offset % instead of 2072", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateAndRegisterAllocatorV2 has unexpected size % instead of 8", it.type.runtime_size);
case "RunAsync";
assert(it.offset_in_bytes == 2080, "OrtApi.RunAsync has unexpected offset % instead of 2080", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunAsync has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateTensorRTProviderOptionsWithValue";
assert(it.offset_in_bytes == 2088, "OrtApi.UpdateTensorRTProviderOptionsWithValue has unexpected offset % instead of 2088", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateTensorRTProviderOptionsWithValue has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorRTProviderOptionsByName";
assert(it.offset_in_bytes == 2096, "OrtApi.GetTensorRTProviderOptionsByName has unexpected offset % instead of 2096", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorRTProviderOptionsByName has unexpected size % instead of 8", it.type.runtime_size);
case "UpdateCUDAProviderOptionsWithValue";
assert(it.offset_in_bytes == 2104, "OrtApi.UpdateCUDAProviderOptionsWithValue has unexpected offset % instead of 2104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UpdateCUDAProviderOptionsWithValue has unexpected size % instead of 8", it.type.runtime_size);
case "GetCUDAProviderOptionsByName";
assert(it.offset_in_bytes == 2112, "OrtApi.GetCUDAProviderOptionsByName has unexpected offset % instead of 2112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetCUDAProviderOptionsByName has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetResource";
assert(it.offset_in_bytes == 2120, "OrtApi.KernelContext_GetResource has unexpected offset % instead of 2120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetResource has unexpected size % instead of 8", it.type.runtime_size);
case "SetUserLoggingFunction";
assert(it.offset_in_bytes == 2128, "OrtApi.SetUserLoggingFunction has unexpected offset % instead of 2128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetUserLoggingFunction has unexpected size % instead of 8", it.type.runtime_size);
case "ShapeInferContext_GetInputCount";
assert(it.offset_in_bytes == 2136, "OrtApi.ShapeInferContext_GetInputCount has unexpected offset % instead of 2136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ShapeInferContext_GetInputCount has unexpected size % instead of 8", it.type.runtime_size);
case "ShapeInferContext_GetInputTypeShape";
assert(it.offset_in_bytes == 2144, "OrtApi.ShapeInferContext_GetInputTypeShape has unexpected offset % instead of 2144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ShapeInferContext_GetInputTypeShape has unexpected size % instead of 8", it.type.runtime_size);
case "ShapeInferContext_GetAttribute";
assert(it.offset_in_bytes == 2152, "OrtApi.ShapeInferContext_GetAttribute has unexpected offset % instead of 2152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ShapeInferContext_GetAttribute has unexpected size % instead of 8", it.type.runtime_size);
case "ShapeInferContext_SetOutputTypeShape";
assert(it.offset_in_bytes == 2160, "OrtApi.ShapeInferContext_SetOutputTypeShape has unexpected offset % instead of 2160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ShapeInferContext_SetOutputTypeShape has unexpected size % instead of 8", it.type.runtime_size);
case "SetSymbolicDimensions";
assert(it.offset_in_bytes == 2168, "OrtApi.SetSymbolicDimensions has unexpected offset % instead of 2168", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetSymbolicDimensions has unexpected size % instead of 8", it.type.runtime_size);
case "ReadOpAttr";
assert(it.offset_in_bytes == 2176, "OrtApi.ReadOpAttr has unexpected offset % instead of 2176", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReadOpAttr has unexpected size % instead of 8", it.type.runtime_size);
case "SetDeterministicCompute";
assert(it.offset_in_bytes == 2184, "OrtApi.SetDeterministicCompute has unexpected offset % instead of 2184", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetDeterministicCompute has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_ParallelFor";
assert(it.offset_in_bytes == 2192, "OrtApi.KernelContext_ParallelFor has unexpected offset % instead of 2192", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_ParallelFor has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_OpenVINO_V2";
assert(it.offset_in_bytes == 2200, "OrtApi.SessionOptionsAppendExecutionProvider_OpenVINO_V2 has unexpected offset % instead of 2200", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_OpenVINO_V2 has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_VitisAI";
assert(it.offset_in_bytes == 2208, "OrtApi.SessionOptionsAppendExecutionProvider_VitisAI has unexpected offset % instead of 2208", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_VitisAI has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetScratchBuffer";
assert(it.offset_in_bytes == 2216, "OrtApi.KernelContext_GetScratchBuffer has unexpected offset % instead of 2216", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetScratchBuffer has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAllocator";
assert(it.offset_in_bytes == 2224, "OrtApi.KernelInfoGetAllocator has unexpected offset % instead of 2224", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "AddExternalInitializersFromFilesInMemory";
assert(it.offset_in_bytes == 2232, "OrtApi.AddExternalInitializersFromFilesInMemory has unexpected offset % instead of 2232", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddExternalInitializersFromFilesInMemory has unexpected size % instead of 8", it.type.runtime_size);
case "CreateLoraAdapter";
assert(it.offset_in_bytes == 2240, "OrtApi.CreateLoraAdapter has unexpected offset % instead of 2240", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateLoraAdapter has unexpected size % instead of 8", it.type.runtime_size);
case "CreateLoraAdapterFromArray";
assert(it.offset_in_bytes == 2248, "OrtApi.CreateLoraAdapterFromArray has unexpected offset % instead of 2248", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateLoraAdapterFromArray has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseLoraAdapter";
assert(it.offset_in_bytes == 2256, "OrtApi.ReleaseLoraAdapter has unexpected offset % instead of 2256", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseLoraAdapter has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsAddActiveLoraAdapter";
assert(it.offset_in_bytes == 2264, "OrtApi.RunOptionsAddActiveLoraAdapter has unexpected offset % instead of 2264", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsAddActiveLoraAdapter has unexpected size % instead of 8", it.type.runtime_size);
case "SetEpDynamicOptions";
assert(it.offset_in_bytes == 2272, "OrtApi.SetEpDynamicOptions has unexpected offset % instead of 2272", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetEpDynamicOptions has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseValueInfo";
assert(it.offset_in_bytes == 2280, "OrtApi.ReleaseValueInfo has unexpected offset % instead of 2280", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseValueInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseNode";
assert(it.offset_in_bytes == 2288, "OrtApi.ReleaseNode has unexpected offset % instead of 2288", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseNode has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseGraph";
assert(it.offset_in_bytes == 2296, "OrtApi.ReleaseGraph has unexpected offset % instead of 2296", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseGraph has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseModel";
assert(it.offset_in_bytes == 2304, "OrtApi.ReleaseModel has unexpected offset % instead of 2304", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseModel has unexpected size % instead of 8", it.type.runtime_size);
case "GetValueInfoName";
assert(it.offset_in_bytes == 2312, "OrtApi.GetValueInfoName has unexpected offset % instead of 2312", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetValueInfoName has unexpected size % instead of 8", it.type.runtime_size);
case "GetValueInfoTypeInfo";
assert(it.offset_in_bytes == 2320, "OrtApi.GetValueInfoTypeInfo has unexpected offset % instead of 2320", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetValueInfoTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetModelEditorApi";
assert(it.offset_in_bytes == 2328, "OrtApi.GetModelEditorApi has unexpected offset % instead of 2328", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetModelEditorApi has unexpected size % instead of 8", it.type.runtime_size);
case "CreateTensorWithDataAndDeleterAsOrtValue";
assert(it.offset_in_bytes == 2336, "OrtApi.CreateTensorWithDataAndDeleterAsOrtValue has unexpected offset % instead of 2336", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateTensorWithDataAndDeleterAsOrtValue has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsSetLoadCancellationFlag";
assert(it.offset_in_bytes == 2344, "OrtApi.SessionOptionsSetLoadCancellationFlag has unexpected offset % instead of 2344", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsSetLoadCancellationFlag has unexpected size % instead of 8", it.type.runtime_size);
case "GetCompileApi";
assert(it.offset_in_bytes == 2352, "OrtApi.GetCompileApi has unexpected offset % instead of 2352", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetCompileApi has unexpected size % instead of 8", it.type.runtime_size);
case "CreateKeyValuePairs";
assert(it.offset_in_bytes == 2360, "OrtApi.CreateKeyValuePairs has unexpected offset % instead of 2360", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateKeyValuePairs has unexpected size % instead of 8", it.type.runtime_size);
case "AddKeyValuePair";
assert(it.offset_in_bytes == 2368, "OrtApi.AddKeyValuePair has unexpected offset % instead of 2368", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AddKeyValuePair has unexpected size % instead of 8", it.type.runtime_size);
case "GetKeyValue";
assert(it.offset_in_bytes == 2376, "OrtApi.GetKeyValue has unexpected offset % instead of 2376", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetKeyValue has unexpected size % instead of 8", it.type.runtime_size);
case "GetKeyValuePairs";
assert(it.offset_in_bytes == 2384, "OrtApi.GetKeyValuePairs has unexpected offset % instead of 2384", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetKeyValuePairs has unexpected size % instead of 8", it.type.runtime_size);
case "RemoveKeyValuePair";
assert(it.offset_in_bytes == 2392, "OrtApi.RemoveKeyValuePair has unexpected offset % instead of 2392", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RemoveKeyValuePair has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseKeyValuePairs";
assert(it.offset_in_bytes == 2400, "OrtApi.ReleaseKeyValuePairs has unexpected offset % instead of 2400", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseKeyValuePairs has unexpected size % instead of 8", it.type.runtime_size);
case "RegisterExecutionProviderLibrary";
assert(it.offset_in_bytes == 2408, "OrtApi.RegisterExecutionProviderLibrary has unexpected offset % instead of 2408", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RegisterExecutionProviderLibrary has unexpected size % instead of 8", it.type.runtime_size);
case "UnregisterExecutionProviderLibrary";
assert(it.offset_in_bytes == 2416, "OrtApi.UnregisterExecutionProviderLibrary has unexpected offset % instead of 2416", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.UnregisterExecutionProviderLibrary has unexpected size % instead of 8", it.type.runtime_size);
case "GetEpDevices";
assert(it.offset_in_bytes == 2424, "OrtApi.GetEpDevices has unexpected offset % instead of 2424", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetEpDevices has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsAppendExecutionProvider_V2";
assert(it.offset_in_bytes == 2432, "OrtApi.SessionOptionsAppendExecutionProvider_V2 has unexpected offset % instead of 2432", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsAppendExecutionProvider_V2 has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsSetEpSelectionPolicy";
assert(it.offset_in_bytes == 2440, "OrtApi.SessionOptionsSetEpSelectionPolicy has unexpected offset % instead of 2440", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsSetEpSelectionPolicy has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsSetEpSelectionPolicyDelegate";
assert(it.offset_in_bytes == 2448, "OrtApi.SessionOptionsSetEpSelectionPolicyDelegate has unexpected offset % instead of 2448", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsSetEpSelectionPolicyDelegate has unexpected size % instead of 8", it.type.runtime_size);
case "HardwareDevice_Type";
assert(it.offset_in_bytes == 2456, "OrtApi.HardwareDevice_Type has unexpected offset % instead of 2456", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.HardwareDevice_Type has unexpected size % instead of 8", it.type.runtime_size);
case "HardwareDevice_VendorId";
assert(it.offset_in_bytes == 2464, "OrtApi.HardwareDevice_VendorId has unexpected offset % instead of 2464", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.HardwareDevice_VendorId has unexpected size % instead of 8", it.type.runtime_size);
case "HardwareDevice_Vendor";
assert(it.offset_in_bytes == 2472, "OrtApi.HardwareDevice_Vendor has unexpected offset % instead of 2472", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.HardwareDevice_Vendor has unexpected size % instead of 8", it.type.runtime_size);
case "HardwareDevice_DeviceId";
assert(it.offset_in_bytes == 2480, "OrtApi.HardwareDevice_DeviceId has unexpected offset % instead of 2480", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.HardwareDevice_DeviceId has unexpected size % instead of 8", it.type.runtime_size);
case "HardwareDevice_Metadata";
assert(it.offset_in_bytes == 2488, "OrtApi.HardwareDevice_Metadata has unexpected offset % instead of 2488", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.HardwareDevice_Metadata has unexpected size % instead of 8", it.type.runtime_size);
case "EpDevice_EpName";
assert(it.offset_in_bytes == 2496, "OrtApi.EpDevice_EpName has unexpected offset % instead of 2496", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpDevice_EpName has unexpected size % instead of 8", it.type.runtime_size);
case "EpDevice_EpVendor";
assert(it.offset_in_bytes == 2504, "OrtApi.EpDevice_EpVendor has unexpected offset % instead of 2504", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpDevice_EpVendor has unexpected size % instead of 8", it.type.runtime_size);
case "EpDevice_EpMetadata";
assert(it.offset_in_bytes == 2512, "OrtApi.EpDevice_EpMetadata has unexpected offset % instead of 2512", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpDevice_EpMetadata has unexpected size % instead of 8", it.type.runtime_size);
case "EpDevice_EpOptions";
assert(it.offset_in_bytes == 2520, "OrtApi.EpDevice_EpOptions has unexpected offset % instead of 2520", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpDevice_EpOptions has unexpected size % instead of 8", it.type.runtime_size);
case "EpDevice_Device";
assert(it.offset_in_bytes == 2528, "OrtApi.EpDevice_Device has unexpected offset % instead of 2528", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpDevice_Device has unexpected size % instead of 8", it.type.runtime_size);
case "GetEpApi";
assert(it.offset_in_bytes == 2536, "OrtApi.GetEpApi has unexpected offset % instead of 2536", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetEpApi has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorSizeInBytes";
assert(it.offset_in_bytes == 2544, "OrtApi.GetTensorSizeInBytes has unexpected offset % instead of 2544", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorSizeInBytes has unexpected size % instead of 8", it.type.runtime_size);
case "AllocatorGetStats";
assert(it.offset_in_bytes == 2552, "OrtApi.AllocatorGetStats has unexpected offset % instead of 2552", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.AllocatorGetStats has unexpected size % instead of 8", it.type.runtime_size);
case "CreateMemoryInfo_V2";
assert(it.offset_in_bytes == 2560, "OrtApi.CreateMemoryInfo_V2 has unexpected offset % instead of 2560", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateMemoryInfo_V2 has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfoGetDeviceMemType";
assert(it.offset_in_bytes == 2568, "OrtApi.MemoryInfoGetDeviceMemType has unexpected offset % instead of 2568", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.MemoryInfoGetDeviceMemType has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfoGetVendorId";
assert(it.offset_in_bytes == 2576, "OrtApi.MemoryInfoGetVendorId has unexpected offset % instead of 2576", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.MemoryInfoGetVendorId has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_GetValueProducer";
assert(it.offset_in_bytes == 2584, "OrtApi.ValueInfo_GetValueProducer has unexpected offset % instead of 2584", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_GetValueProducer has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_GetValueNumConsumers";
assert(it.offset_in_bytes == 2592, "OrtApi.ValueInfo_GetValueNumConsumers has unexpected offset % instead of 2592", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_GetValueNumConsumers has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_GetValueConsumers";
assert(it.offset_in_bytes == 2600, "OrtApi.ValueInfo_GetValueConsumers has unexpected offset % instead of 2600", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_GetValueConsumers has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_GetInitializerValue";
assert(it.offset_in_bytes == 2608, "OrtApi.ValueInfo_GetInitializerValue has unexpected offset % instead of 2608", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_GetInitializerValue has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_GetExternalInitializerInfo";
assert(it.offset_in_bytes == 2616, "OrtApi.ValueInfo_GetExternalInitializerInfo has unexpected offset % instead of 2616", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_GetExternalInitializerInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_IsRequiredGraphInput";
assert(it.offset_in_bytes == 2624, "OrtApi.ValueInfo_IsRequiredGraphInput has unexpected offset % instead of 2624", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_IsRequiredGraphInput has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_IsOptionalGraphInput";
assert(it.offset_in_bytes == 2632, "OrtApi.ValueInfo_IsOptionalGraphInput has unexpected offset % instead of 2632", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_IsOptionalGraphInput has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_IsGraphOutput";
assert(it.offset_in_bytes == 2640, "OrtApi.ValueInfo_IsGraphOutput has unexpected offset % instead of 2640", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_IsGraphOutput has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_IsConstantInitializer";
assert(it.offset_in_bytes == 2648, "OrtApi.ValueInfo_IsConstantInitializer has unexpected offset % instead of 2648", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_IsConstantInitializer has unexpected size % instead of 8", it.type.runtime_size);
case "ValueInfo_IsFromOuterScope";
assert(it.offset_in_bytes == 2656, "OrtApi.ValueInfo_IsFromOuterScope has unexpected offset % instead of 2656", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ValueInfo_IsFromOuterScope has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetName";
assert(it.offset_in_bytes == 2664, "OrtApi.Graph_GetName has unexpected offset % instead of 2664", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetName has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetModelPath";
assert(it.offset_in_bytes == 2672, "OrtApi.Graph_GetModelPath has unexpected offset % instead of 2672", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetModelPath has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetOnnxIRVersion";
assert(it.offset_in_bytes == 2680, "OrtApi.Graph_GetOnnxIRVersion has unexpected offset % instead of 2680", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetOnnxIRVersion has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetNumOperatorSets";
assert(it.offset_in_bytes == 2688, "OrtApi.Graph_GetNumOperatorSets has unexpected offset % instead of 2688", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetNumOperatorSets has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetOperatorSets";
assert(it.offset_in_bytes == 2696, "OrtApi.Graph_GetOperatorSets has unexpected offset % instead of 2696", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetOperatorSets has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetNumInputs";
assert(it.offset_in_bytes == 2704, "OrtApi.Graph_GetNumInputs has unexpected offset % instead of 2704", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetNumInputs has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetInputs";
assert(it.offset_in_bytes == 2712, "OrtApi.Graph_GetInputs has unexpected offset % instead of 2712", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetInputs has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetNumOutputs";
assert(it.offset_in_bytes == 2720, "OrtApi.Graph_GetNumOutputs has unexpected offset % instead of 2720", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetNumOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetOutputs";
assert(it.offset_in_bytes == 2728, "OrtApi.Graph_GetOutputs has unexpected offset % instead of 2728", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetNumInitializers";
assert(it.offset_in_bytes == 2736, "OrtApi.Graph_GetNumInitializers has unexpected offset % instead of 2736", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetNumInitializers has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetInitializers";
assert(it.offset_in_bytes == 2744, "OrtApi.Graph_GetInitializers has unexpected offset % instead of 2744", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetInitializers has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetNumNodes";
assert(it.offset_in_bytes == 2752, "OrtApi.Graph_GetNumNodes has unexpected offset % instead of 2752", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetNumNodes has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetNodes";
assert(it.offset_in_bytes == 2760, "OrtApi.Graph_GetNodes has unexpected offset % instead of 2760", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetNodes has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetParentNode";
assert(it.offset_in_bytes == 2768, "OrtApi.Graph_GetParentNode has unexpected offset % instead of 2768", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetParentNode has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetGraphView";
assert(it.offset_in_bytes == 2776, "OrtApi.Graph_GetGraphView has unexpected offset % instead of 2776", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetGraphView has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetId";
assert(it.offset_in_bytes == 2784, "OrtApi.Node_GetId has unexpected offset % instead of 2784", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetId has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetName";
assert(it.offset_in_bytes == 2792, "OrtApi.Node_GetName has unexpected offset % instead of 2792", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetName has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetOperatorType";
assert(it.offset_in_bytes == 2800, "OrtApi.Node_GetOperatorType has unexpected offset % instead of 2800", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetOperatorType has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetDomain";
assert(it.offset_in_bytes == 2808, "OrtApi.Node_GetDomain has unexpected offset % instead of 2808", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetDomain has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetSinceVersion";
assert(it.offset_in_bytes == 2816, "OrtApi.Node_GetSinceVersion has unexpected offset % instead of 2816", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetSinceVersion has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetNumInputs";
assert(it.offset_in_bytes == 2824, "OrtApi.Node_GetNumInputs has unexpected offset % instead of 2824", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetNumInputs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetInputs";
assert(it.offset_in_bytes == 2832, "OrtApi.Node_GetInputs has unexpected offset % instead of 2832", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetInputs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetNumOutputs";
assert(it.offset_in_bytes == 2840, "OrtApi.Node_GetNumOutputs has unexpected offset % instead of 2840", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetNumOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetOutputs";
assert(it.offset_in_bytes == 2848, "OrtApi.Node_GetOutputs has unexpected offset % instead of 2848", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetNumImplicitInputs";
assert(it.offset_in_bytes == 2856, "OrtApi.Node_GetNumImplicitInputs has unexpected offset % instead of 2856", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetNumImplicitInputs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetImplicitInputs";
assert(it.offset_in_bytes == 2864, "OrtApi.Node_GetImplicitInputs has unexpected offset % instead of 2864", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetImplicitInputs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetNumAttributes";
assert(it.offset_in_bytes == 2872, "OrtApi.Node_GetNumAttributes has unexpected offset % instead of 2872", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetNumAttributes has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetAttributes";
assert(it.offset_in_bytes == 2880, "OrtApi.Node_GetAttributes has unexpected offset % instead of 2880", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetAttributes has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetAttributeByName";
assert(it.offset_in_bytes == 2888, "OrtApi.Node_GetAttributeByName has unexpected offset % instead of 2888", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetAttributeByName has unexpected size % instead of 8", it.type.runtime_size);
case "OpAttr_GetTensorAttributeAsOrtValue";
assert(it.offset_in_bytes == 2896, "OrtApi.OpAttr_GetTensorAttributeAsOrtValue has unexpected offset % instead of 2896", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.OpAttr_GetTensorAttributeAsOrtValue has unexpected size % instead of 8", it.type.runtime_size);
case "OpAttr_GetType";
assert(it.offset_in_bytes == 2904, "OrtApi.OpAttr_GetType has unexpected offset % instead of 2904", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.OpAttr_GetType has unexpected size % instead of 8", it.type.runtime_size);
case "OpAttr_GetName";
assert(it.offset_in_bytes == 2912, "OrtApi.OpAttr_GetName has unexpected offset % instead of 2912", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.OpAttr_GetName has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetNumSubgraphs";
assert(it.offset_in_bytes == 2920, "OrtApi.Node_GetNumSubgraphs has unexpected offset % instead of 2920", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetNumSubgraphs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetSubgraphs";
assert(it.offset_in_bytes == 2928, "OrtApi.Node_GetSubgraphs has unexpected offset % instead of 2928", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetSubgraphs has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetGraph";
assert(it.offset_in_bytes == 2936, "OrtApi.Node_GetGraph has unexpected offset % instead of 2936", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetGraph has unexpected size % instead of 8", it.type.runtime_size);
case "Node_GetEpName";
assert(it.offset_in_bytes == 2944, "OrtApi.Node_GetEpName has unexpected offset % instead of 2944", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Node_GetEpName has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseExternalInitializerInfo";
assert(it.offset_in_bytes == 2952, "OrtApi.ReleaseExternalInitializerInfo has unexpected offset % instead of 2952", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseExternalInitializerInfo has unexpected size % instead of 8", it.type.runtime_size);
case "ExternalInitializerInfo_GetFilePath";
assert(it.offset_in_bytes == 2960, "OrtApi.ExternalInitializerInfo_GetFilePath has unexpected offset % instead of 2960", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ExternalInitializerInfo_GetFilePath has unexpected size % instead of 8", it.type.runtime_size);
case "ExternalInitializerInfo_GetFileOffset";
assert(it.offset_in_bytes == 2968, "OrtApi.ExternalInitializerInfo_GetFileOffset has unexpected offset % instead of 2968", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ExternalInitializerInfo_GetFileOffset has unexpected size % instead of 8", it.type.runtime_size);
case "ExternalInitializerInfo_GetByteSize";
assert(it.offset_in_bytes == 2976, "OrtApi.ExternalInitializerInfo_GetByteSize has unexpected offset % instead of 2976", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ExternalInitializerInfo_GetByteSize has unexpected size % instead of 8", it.type.runtime_size);
case "GetRunConfigEntry";
assert(it.offset_in_bytes == 2984, "OrtApi.GetRunConfigEntry has unexpected offset % instead of 2984", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetRunConfigEntry has unexpected size % instead of 8", it.type.runtime_size);
case "EpDevice_MemoryInfo";
assert(it.offset_in_bytes == 2992, "OrtApi.EpDevice_MemoryInfo has unexpected offset % instead of 2992", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpDevice_MemoryInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSharedAllocator";
assert(it.offset_in_bytes == 3000, "OrtApi.CreateSharedAllocator has unexpected offset % instead of 3000", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSharedAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "GetSharedAllocator";
assert(it.offset_in_bytes == 3008, "OrtApi.GetSharedAllocator has unexpected offset % instead of 3008", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSharedAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseSharedAllocator";
assert(it.offset_in_bytes == 3016, "OrtApi.ReleaseSharedAllocator has unexpected offset % instead of 3016", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseSharedAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorData";
assert(it.offset_in_bytes == 3024, "OrtApi.GetTensorData has unexpected offset % instead of 3024", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorData has unexpected size % instead of 8", it.type.runtime_size);
case "GetSessionOptionsConfigEntries";
assert(it.offset_in_bytes == 3032, "OrtApi.GetSessionOptionsConfigEntries has unexpected offset % instead of 3032", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSessionOptionsConfigEntries has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetMemoryInfoForInputs";
assert(it.offset_in_bytes == 3040, "OrtApi.SessionGetMemoryInfoForInputs has unexpected offset % instead of 3040", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetMemoryInfoForInputs has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetMemoryInfoForOutputs";
assert(it.offset_in_bytes == 3048, "OrtApi.SessionGetMemoryInfoForOutputs has unexpected offset % instead of 3048", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetMemoryInfoForOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetEpDeviceForInputs";
assert(it.offset_in_bytes == 3056, "OrtApi.SessionGetEpDeviceForInputs has unexpected offset % instead of 3056", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetEpDeviceForInputs has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSyncStreamForEpDevice";
assert(it.offset_in_bytes == 3064, "OrtApi.CreateSyncStreamForEpDevice has unexpected offset % instead of 3064", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateSyncStreamForEpDevice has unexpected size % instead of 8", it.type.runtime_size);
case "SyncStream_GetHandle";
assert(it.offset_in_bytes == 3072, "OrtApi.SyncStream_GetHandle has unexpected offset % instead of 3072", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SyncStream_GetHandle has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseSyncStream";
assert(it.offset_in_bytes == 3080, "OrtApi.ReleaseSyncStream has unexpected offset % instead of 3080", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseSyncStream has unexpected size % instead of 8", it.type.runtime_size);
case "CopyTensors";
assert(it.offset_in_bytes == 3088, "OrtApi.CopyTensors has unexpected offset % instead of 3088", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CopyTensors has unexpected size % instead of 8", it.type.runtime_size);
case "Graph_GetModelMetadata";
assert(it.offset_in_bytes == 3096, "OrtApi.Graph_GetModelMetadata has unexpected offset % instead of 3096", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Graph_GetModelMetadata has unexpected size % instead of 8", it.type.runtime_size);
case "GetModelCompatibilityForEpDevices";
assert(it.offset_in_bytes == 3104, "OrtApi.GetModelCompatibilityForEpDevices has unexpected offset % instead of 3104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetModelCompatibilityForEpDevices has unexpected size % instead of 8", it.type.runtime_size);
case "CreateExternalInitializerInfo";
assert(it.offset_in_bytes == 3112, "OrtApi.CreateExternalInitializerInfo has unexpected offset % instead of 3112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateExternalInitializerInfo has unexpected size % instead of 8", it.type.runtime_size);
case "TensorTypeAndShape_HasShape";
assert(it.offset_in_bytes == 3120, "OrtApi.TensorTypeAndShape_HasShape has unexpected offset % instead of 3120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.TensorTypeAndShape_HasShape has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetConfigEntries";
assert(it.offset_in_bytes == 3128, "OrtApi.KernelInfo_GetConfigEntries has unexpected offset % instead of 3128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetConfigEntries has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetOperatorDomain";
assert(it.offset_in_bytes == 3136, "OrtApi.KernelInfo_GetOperatorDomain has unexpected offset % instead of 3136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetOperatorDomain has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetOperatorType";
assert(it.offset_in_bytes == 3144, "OrtApi.KernelInfo_GetOperatorType has unexpected offset % instead of 3144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetOperatorType has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetOperatorSinceVersion";
assert(it.offset_in_bytes == 3152, "OrtApi.KernelInfo_GetOperatorSinceVersion has unexpected offset % instead of 3152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfo_GetOperatorSinceVersion has unexpected size % instead of 8", it.type.runtime_size);
case "GetInteropApi";
assert(it.offset_in_bytes == 3160, "OrtApi.GetInteropApi has unexpected offset % instead of 3160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetInteropApi has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetEpDeviceForOutputs";
assert(it.offset_in_bytes == 3168, "OrtApi.SessionGetEpDeviceForOutputs has unexpected offset % instead of 3168", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionGetEpDeviceForOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "GetNumHardwareDevices";
assert(it.offset_in_bytes == 3176, "OrtApi.GetNumHardwareDevices has unexpected offset % instead of 3176", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetNumHardwareDevices has unexpected size % instead of 8", it.type.runtime_size);
case "GetHardwareDevices";
assert(it.offset_in_bytes == 3184, "OrtApi.GetHardwareDevices has unexpected offset % instead of 3184", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetHardwareDevices has unexpected size % instead of 8", it.type.runtime_size);
case "GetHardwareDeviceEpIncompatibilityDetails";
assert(it.offset_in_bytes == 3192, "OrtApi.GetHardwareDeviceEpIncompatibilityDetails has unexpected offset % instead of 3192", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetHardwareDeviceEpIncompatibilityDetails has unexpected size % instead of 8", it.type.runtime_size);
case "DeviceEpIncompatibilityDetails_GetReasonsBitmask";
assert(it.offset_in_bytes == 3200, "OrtApi.DeviceEpIncompatibilityDetails_GetReasonsBitmask has unexpected offset % instead of 3200", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DeviceEpIncompatibilityDetails_GetReasonsBitmask has unexpected size % instead of 8", it.type.runtime_size);
case "DeviceEpIncompatibilityDetails_GetNotes";
assert(it.offset_in_bytes == 3208, "OrtApi.DeviceEpIncompatibilityDetails_GetNotes has unexpected offset % instead of 3208", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DeviceEpIncompatibilityDetails_GetNotes has unexpected size % instead of 8", it.type.runtime_size);
case "DeviceEpIncompatibilityDetails_GetErrorCode";
assert(it.offset_in_bytes == 3216, "OrtApi.DeviceEpIncompatibilityDetails_GetErrorCode has unexpected offset % instead of 3216", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.DeviceEpIncompatibilityDetails_GetErrorCode has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseDeviceEpIncompatibilityDetails";
assert(it.offset_in_bytes == 3224, "OrtApi.ReleaseDeviceEpIncompatibilityDetails has unexpected offset % instead of 3224", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.ReleaseDeviceEpIncompatibilityDetails has unexpected size % instead of 8", it.type.runtime_size);
case "GetCompatibilityInfoFromModel";
assert(it.offset_in_bytes == 3232, "OrtApi.GetCompatibilityInfoFromModel has unexpected offset % instead of 3232", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetCompatibilityInfoFromModel has unexpected size % instead of 8", it.type.runtime_size);
case "GetCompatibilityInfoFromModelBytes";
assert(it.offset_in_bytes == 3240, "OrtApi.GetCompatibilityInfoFromModelBytes has unexpected offset % instead of 3240", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetCompatibilityInfoFromModelBytes has unexpected size % instead of 8", it.type.runtime_size);
case "CreateEnvWithOptions";
assert(it.offset_in_bytes == 3248, "OrtApi.CreateEnvWithOptions has unexpected offset % instead of 3248", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.CreateEnvWithOptions has unexpected size % instead of 8", it.type.runtime_size);
case "Session_GetEpGraphAssignmentInfo";
assert(it.offset_in_bytes == 3256, "OrtApi.Session_GetEpGraphAssignmentInfo has unexpected offset % instead of 3256", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.Session_GetEpGraphAssignmentInfo has unexpected size % instead of 8", it.type.runtime_size);
case "EpAssignedSubgraph_GetEpName";
assert(it.offset_in_bytes == 3264, "OrtApi.EpAssignedSubgraph_GetEpName has unexpected offset % instead of 3264", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpAssignedSubgraph_GetEpName has unexpected size % instead of 8", it.type.runtime_size);
case "EpAssignedSubgraph_GetNodes";
assert(it.offset_in_bytes == 3272, "OrtApi.EpAssignedSubgraph_GetNodes has unexpected offset % instead of 3272", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpAssignedSubgraph_GetNodes has unexpected size % instead of 8", it.type.runtime_size);
case "EpAssignedNode_GetName";
assert(it.offset_in_bytes == 3280, "OrtApi.EpAssignedNode_GetName has unexpected offset % instead of 3280", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpAssignedNode_GetName has unexpected size % instead of 8", it.type.runtime_size);
case "EpAssignedNode_GetDomain";
assert(it.offset_in_bytes == 3288, "OrtApi.EpAssignedNode_GetDomain has unexpected offset % instead of 3288", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpAssignedNode_GetDomain has unexpected size % instead of 8", it.type.runtime_size);
case "EpAssignedNode_GetOperatorType";
assert(it.offset_in_bytes == 3296, "OrtApi.EpAssignedNode_GetOperatorType has unexpected offset % instead of 3296", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.EpAssignedNode_GetOperatorType has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsSetSyncStream";
assert(it.offset_in_bytes == 3304, "OrtApi.RunOptionsSetSyncStream has unexpected offset % instead of 3304", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsSetSyncStream has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorElementTypeAndShapeDataReference";
assert(it.offset_in_bytes == 3312, "OrtApi.GetTensorElementTypeAndShapeDataReference has unexpected offset % instead of 3312", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetTensorElementTypeAndShapeDataReference has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsEnableProfiling";
assert(it.offset_in_bytes == 3320, "OrtApi.RunOptionsEnableProfiling has unexpected offset % instead of 3320", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsEnableProfiling has unexpected size % instead of 8", it.type.runtime_size);
case "RunOptionsDisableProfiling";
assert(it.offset_in_bytes == 3328, "OrtApi.RunOptionsDisableProfiling has unexpected offset % instead of 3328", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.RunOptionsDisableProfiling has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfoGetAttributeArray_string";
assert(it.offset_in_bytes == 3336, "OrtApi.KernelInfoGetAttributeArray_string has unexpected offset % instead of 3336", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelInfoGetAttributeArray_string has unexpected size % instead of 8", it.type.runtime_size);
case "SetPerSessionThreadPoolCallbacks";
assert(it.offset_in_bytes == 3344, "OrtApi.SetPerSessionThreadPoolCallbacks has unexpected offset % instead of 3344", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SetPerSessionThreadPoolCallbacks has unexpected size % instead of 8", it.type.runtime_size);
case "GetMemPatternEnabled";
assert(it.offset_in_bytes == 3352, "OrtApi.GetMemPatternEnabled has unexpected offset % instead of 3352", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetMemPatternEnabled has unexpected size % instead of 8", it.type.runtime_size);
case "GetSessionExecutionMode";
assert(it.offset_in_bytes == 3360, "OrtApi.GetSessionExecutionMode has unexpected offset % instead of 3360", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetSessionExecutionMode has unexpected size % instead of 8", it.type.runtime_size);
case "SessionReleaseCapturedGraph";
assert(it.offset_in_bytes == 3368, "OrtApi.SessionReleaseCapturedGraph has unexpected offset % instead of 3368", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionReleaseCapturedGraph has unexpected size % instead of 8", it.type.runtime_size);
case "GetExperimentalFunction";
assert(it.offset_in_bytes == 3376, "OrtApi.GetExperimentalFunction has unexpected offset % instead of 3376", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.GetExperimentalFunction has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetSyncStream";
assert(it.offset_in_bytes == 3384, "OrtApi.KernelContext_GetSyncStream has unexpected offset % instead of 3384", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetSyncStream has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsSetWeightlessSourceModelBuffer";
assert(it.offset_in_bytes == 3392, "OrtApi.SessionOptionsSetWeightlessSourceModelBuffer has unexpected offset % instead of 3392", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.SessionOptionsSetWeightlessSourceModelBuffer has unexpected size % instead of 8", it.type.runtime_size);
case "KernelContext_GetPreallocatedOutput";
assert(it.offset_in_bytes == 3400, "OrtApi.KernelContext_GetPreallocatedOutput has unexpected offset % instead of 3400", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtApi.KernelContext_GetPreallocatedOutput has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtApi) == 3408, "OrtApi has size % instead of 3408", size_of(OrtApi));
}
{
info := type_info(OrtCustomOp);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtCustomOp.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtCustomOp.version has unexpected size % instead of 4", it.type.runtime_size);
case "CreateKernel";
assert(it.offset_in_bytes == 8, "OrtCustomOp.CreateKernel has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.CreateKernel has unexpected size % instead of 8", it.type.runtime_size);
case "GetName";
assert(it.offset_in_bytes == 16, "OrtCustomOp.GetName has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetName has unexpected size % instead of 8", it.type.runtime_size);
case "GetExecutionProviderType";
assert(it.offset_in_bytes == 24, "OrtCustomOp.GetExecutionProviderType has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetExecutionProviderType has unexpected size % instead of 8", it.type.runtime_size);
case "GetInputType";
assert(it.offset_in_bytes == 32, "OrtCustomOp.GetInputType has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetInputType has unexpected size % instead of 8", it.type.runtime_size);
case "GetInputTypeCount";
assert(it.offset_in_bytes == 40, "OrtCustomOp.GetInputTypeCount has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetInputTypeCount has unexpected size % instead of 8", it.type.runtime_size);
case "GetOutputType";
assert(it.offset_in_bytes == 48, "OrtCustomOp.GetOutputType has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetOutputType has unexpected size % instead of 8", it.type.runtime_size);
case "GetOutputTypeCount";
assert(it.offset_in_bytes == 56, "OrtCustomOp.GetOutputTypeCount has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetOutputTypeCount has unexpected size % instead of 8", it.type.runtime_size);
case "KernelCompute";
assert(it.offset_in_bytes == 64, "OrtCustomOp.KernelCompute has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.KernelCompute has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDestroy";
assert(it.offset_in_bytes == 72, "OrtCustomOp.KernelDestroy has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.KernelDestroy has unexpected size % instead of 8", it.type.runtime_size);
case "GetInputCharacteristic";
assert(it.offset_in_bytes == 80, "OrtCustomOp.GetInputCharacteristic has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetInputCharacteristic has unexpected size % instead of 8", it.type.runtime_size);
case "GetOutputCharacteristic";
assert(it.offset_in_bytes == 88, "OrtCustomOp.GetOutputCharacteristic has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetOutputCharacteristic has unexpected size % instead of 8", it.type.runtime_size);
case "GetInputMemoryType";
assert(it.offset_in_bytes == 96, "OrtCustomOp.GetInputMemoryType has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetInputMemoryType has unexpected size % instead of 8", it.type.runtime_size);
case "GetVariadicInputMinArity";
assert(it.offset_in_bytes == 104, "OrtCustomOp.GetVariadicInputMinArity has unexpected offset % instead of 104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetVariadicInputMinArity has unexpected size % instead of 8", it.type.runtime_size);
case "GetVariadicInputHomogeneity";
assert(it.offset_in_bytes == 112, "OrtCustomOp.GetVariadicInputHomogeneity has unexpected offset % instead of 112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetVariadicInputHomogeneity has unexpected size % instead of 8", it.type.runtime_size);
case "GetVariadicOutputMinArity";
assert(it.offset_in_bytes == 120, "OrtCustomOp.GetVariadicOutputMinArity has unexpected offset % instead of 120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetVariadicOutputMinArity has unexpected size % instead of 8", it.type.runtime_size);
case "GetVariadicOutputHomogeneity";
assert(it.offset_in_bytes == 128, "OrtCustomOp.GetVariadicOutputHomogeneity has unexpected offset % instead of 128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetVariadicOutputHomogeneity has unexpected size % instead of 8", it.type.runtime_size);
case "CreateKernelV2";
assert(it.offset_in_bytes == 136, "OrtCustomOp.CreateKernelV2 has unexpected offset % instead of 136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.CreateKernelV2 has unexpected size % instead of 8", it.type.runtime_size);
case "KernelComputeV2";
assert(it.offset_in_bytes == 144, "OrtCustomOp.KernelComputeV2 has unexpected offset % instead of 144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.KernelComputeV2 has unexpected size % instead of 8", it.type.runtime_size);
case "InferOutputShapeFn";
assert(it.offset_in_bytes == 152, "OrtCustomOp.InferOutputShapeFn has unexpected offset % instead of 152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.InferOutputShapeFn has unexpected size % instead of 8", it.type.runtime_size);
case "GetStartVersion";
assert(it.offset_in_bytes == 160, "OrtCustomOp.GetStartVersion has unexpected offset % instead of 160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetStartVersion has unexpected size % instead of 8", it.type.runtime_size);
case "GetEndVersion";
assert(it.offset_in_bytes == 168, "OrtCustomOp.GetEndVersion has unexpected offset % instead of 168", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetEndVersion has unexpected size % instead of 8", it.type.runtime_size);
case "GetMayInplace";
assert(it.offset_in_bytes == 176, "OrtCustomOp.GetMayInplace has unexpected offset % instead of 176", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetMayInplace has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseMayInplace";
assert(it.offset_in_bytes == 184, "OrtCustomOp.ReleaseMayInplace has unexpected offset % instead of 184", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.ReleaseMayInplace has unexpected size % instead of 8", it.type.runtime_size);
case "GetAliasMap";
assert(it.offset_in_bytes == 192, "OrtCustomOp.GetAliasMap has unexpected offset % instead of 192", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.GetAliasMap has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseAliasMap";
assert(it.offset_in_bytes == 200, "OrtCustomOp.ReleaseAliasMap has unexpected offset % instead of 200", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCustomOp.ReleaseAliasMap has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtCustomOp) == 208, "OrtCustomOp has size % instead of 208", size_of(OrtCustomOp));
}
{
info := type_info(OrtModelEditorApi);
for info.members {
if it.name == {
case "CreateTensorTypeInfo";
assert(it.offset_in_bytes == 0, "OrtModelEditorApi.CreateTensorTypeInfo has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateTensorTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSparseTensorTypeInfo";
assert(it.offset_in_bytes == 8, "OrtModelEditorApi.CreateSparseTensorTypeInfo has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateSparseTensorTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateMapTypeInfo";
assert(it.offset_in_bytes == 16, "OrtModelEditorApi.CreateMapTypeInfo has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateMapTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSequenceTypeInfo";
assert(it.offset_in_bytes == 24, "OrtModelEditorApi.CreateSequenceTypeInfo has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateSequenceTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateOptionalTypeInfo";
assert(it.offset_in_bytes == 32, "OrtModelEditorApi.CreateOptionalTypeInfo has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateOptionalTypeInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateValueInfo";
assert(it.offset_in_bytes == 40, "OrtModelEditorApi.CreateValueInfo has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateValueInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateNode";
assert(it.offset_in_bytes == 48, "OrtModelEditorApi.CreateNode has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateNode has unexpected size % instead of 8", it.type.runtime_size);
case "CreateGraph";
assert(it.offset_in_bytes == 56, "OrtModelEditorApi.CreateGraph has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateGraph has unexpected size % instead of 8", it.type.runtime_size);
case "SetGraphInputs";
assert(it.offset_in_bytes == 64, "OrtModelEditorApi.SetGraphInputs has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.SetGraphInputs has unexpected size % instead of 8", it.type.runtime_size);
case "SetGraphOutputs";
assert(it.offset_in_bytes == 72, "OrtModelEditorApi.SetGraphOutputs has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.SetGraphOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "AddInitializerToGraph";
assert(it.offset_in_bytes == 80, "OrtModelEditorApi.AddInitializerToGraph has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.AddInitializerToGraph has unexpected size % instead of 8", it.type.runtime_size);
case "AddNodeToGraph";
assert(it.offset_in_bytes == 88, "OrtModelEditorApi.AddNodeToGraph has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.AddNodeToGraph has unexpected size % instead of 8", it.type.runtime_size);
case "CreateModel";
assert(it.offset_in_bytes == 96, "OrtModelEditorApi.CreateModel has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateModel has unexpected size % instead of 8", it.type.runtime_size);
case "AddGraphToModel";
assert(it.offset_in_bytes == 104, "OrtModelEditorApi.AddGraphToModel has unexpected offset % instead of 104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.AddGraphToModel has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSessionFromModel";
assert(it.offset_in_bytes == 112, "OrtModelEditorApi.CreateSessionFromModel has unexpected offset % instead of 112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateSessionFromModel has unexpected size % instead of 8", it.type.runtime_size);
case "CreateModelEditorSession";
assert(it.offset_in_bytes == 120, "OrtModelEditorApi.CreateModelEditorSession has unexpected offset % instead of 120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateModelEditorSession has unexpected size % instead of 8", it.type.runtime_size);
case "CreateModelEditorSessionFromArray";
assert(it.offset_in_bytes == 128, "OrtModelEditorApi.CreateModelEditorSessionFromArray has unexpected offset % instead of 128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.CreateModelEditorSessionFromArray has unexpected size % instead of 8", it.type.runtime_size);
case "SessionGetOpsetForDomain";
assert(it.offset_in_bytes == 136, "OrtModelEditorApi.SessionGetOpsetForDomain has unexpected offset % instead of 136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.SessionGetOpsetForDomain has unexpected size % instead of 8", it.type.runtime_size);
case "ApplyModelToModelEditorSession";
assert(it.offset_in_bytes == 144, "OrtModelEditorApi.ApplyModelToModelEditorSession has unexpected offset % instead of 144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.ApplyModelToModelEditorSession has unexpected size % instead of 8", it.type.runtime_size);
case "FinalizeModelEditorSession";
assert(it.offset_in_bytes == 152, "OrtModelEditorApi.FinalizeModelEditorSession has unexpected offset % instead of 152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtModelEditorApi.FinalizeModelEditorSession has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtModelEditorApi) == 160, "OrtModelEditorApi has size % instead of 160", size_of(OrtModelEditorApi));
}
{
info := type_info(OrtCompileApi);
for info.members {
if it.name == {
case "ReleaseModelCompilationOptions";
assert(it.offset_in_bytes == 0, "OrtCompileApi.ReleaseModelCompilationOptions has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ReleaseModelCompilationOptions has unexpected size % instead of 8", it.type.runtime_size);
case "CreateModelCompilationOptionsFromSessionOptions";
assert(it.offset_in_bytes == 8, "OrtCompileApi.CreateModelCompilationOptionsFromSessionOptions has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.CreateModelCompilationOptionsFromSessionOptions has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetInputModelPath";
assert(it.offset_in_bytes == 16, "OrtCompileApi.ModelCompilationOptions_SetInputModelPath has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetInputModelPath has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetInputModelFromBuffer";
assert(it.offset_in_bytes == 24, "OrtCompileApi.ModelCompilationOptions_SetInputModelFromBuffer has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetInputModelFromBuffer has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetOutputModelPath";
assert(it.offset_in_bytes == 32, "OrtCompileApi.ModelCompilationOptions_SetOutputModelPath has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetOutputModelPath has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetOutputModelExternalInitializersFile";
assert(it.offset_in_bytes == 40, "OrtCompileApi.ModelCompilationOptions_SetOutputModelExternalInitializersFile has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetOutputModelExternalInitializersFile has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetOutputModelBuffer";
assert(it.offset_in_bytes == 48, "OrtCompileApi.ModelCompilationOptions_SetOutputModelBuffer has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetOutputModelBuffer has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetEpContextEmbedMode";
assert(it.offset_in_bytes == 56, "OrtCompileApi.ModelCompilationOptions_SetEpContextEmbedMode has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetEpContextEmbedMode has unexpected size % instead of 8", it.type.runtime_size);
case "CompileModel";
assert(it.offset_in_bytes == 64, "OrtCompileApi.CompileModel has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.CompileModel has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetFlags";
assert(it.offset_in_bytes == 72, "OrtCompileApi.ModelCompilationOptions_SetFlags has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetFlags has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetEpContextBinaryInformation";
assert(it.offset_in_bytes == 80, "OrtCompileApi.ModelCompilationOptions_SetEpContextBinaryInformation has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetEpContextBinaryInformation has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetGraphOptimizationLevel";
assert(it.offset_in_bytes == 88, "OrtCompileApi.ModelCompilationOptions_SetGraphOptimizationLevel has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetGraphOptimizationLevel has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetOutputModelWriteFunc";
assert(it.offset_in_bytes == 96, "OrtCompileApi.ModelCompilationOptions_SetOutputModelWriteFunc has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetOutputModelWriteFunc has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetOutputModelGetInitializerLocationFunc";
assert(it.offset_in_bytes == 104, "OrtCompileApi.ModelCompilationOptions_SetOutputModelGetInitializerLocationFunc has unexpected offset % instead of 104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetOutputModelGetInitializerLocationFunc has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetInputModel";
assert(it.offset_in_bytes == 112, "OrtCompileApi.ModelCompilationOptions_SetInputModel has unexpected offset % instead of 112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetInputModel has unexpected size % instead of 8", it.type.runtime_size);
case "ModelCompilationOptions_SetWeightlessEnabled";
assert(it.offset_in_bytes == 120, "OrtCompileApi.ModelCompilationOptions_SetWeightlessEnabled has unexpected offset % instead of 120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtCompileApi.ModelCompilationOptions_SetWeightlessEnabled has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtCompileApi) == 128, "OrtCompileApi has size % instead of 128", size_of(OrtCompileApi));
}
{
info := type_info(OrtInteropApi);
for info.members {
if it.name == {
case "CreateExternalResourceImporterForDevice";
assert(it.offset_in_bytes == 0, "OrtInteropApi.CreateExternalResourceImporterForDevice has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.CreateExternalResourceImporterForDevice has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseExternalResourceImporter";
assert(it.offset_in_bytes == 8, "OrtInteropApi.ReleaseExternalResourceImporter has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.ReleaseExternalResourceImporter has unexpected size % instead of 8", it.type.runtime_size);
case "CanImportMemory";
assert(it.offset_in_bytes == 16, "OrtInteropApi.CanImportMemory has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.CanImportMemory has unexpected size % instead of 8", it.type.runtime_size);
case "ImportMemory";
assert(it.offset_in_bytes == 24, "OrtInteropApi.ImportMemory has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.ImportMemory has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseExternalMemoryHandle";
assert(it.offset_in_bytes == 32, "OrtInteropApi.ReleaseExternalMemoryHandle has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.ReleaseExternalMemoryHandle has unexpected size % instead of 8", it.type.runtime_size);
case "CreateTensorFromMemory";
assert(it.offset_in_bytes == 40, "OrtInteropApi.CreateTensorFromMemory has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.CreateTensorFromMemory has unexpected size % instead of 8", it.type.runtime_size);
case "CanImportSemaphore";
assert(it.offset_in_bytes == 48, "OrtInteropApi.CanImportSemaphore has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.CanImportSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "ImportSemaphore";
assert(it.offset_in_bytes == 56, "OrtInteropApi.ImportSemaphore has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.ImportSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseExternalSemaphoreHandle";
assert(it.offset_in_bytes == 64, "OrtInteropApi.ReleaseExternalSemaphoreHandle has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.ReleaseExternalSemaphoreHandle has unexpected size % instead of 8", it.type.runtime_size);
case "WaitSemaphore";
assert(it.offset_in_bytes == 72, "OrtInteropApi.WaitSemaphore has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.WaitSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "SignalSemaphore";
assert(it.offset_in_bytes == 80, "OrtInteropApi.SignalSemaphore has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.SignalSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "InitGraphicsInteropForEpDevice";
assert(it.offset_in_bytes == 88, "OrtInteropApi.InitGraphicsInteropForEpDevice has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.InitGraphicsInteropForEpDevice has unexpected size % instead of 8", it.type.runtime_size);
case "DeinitGraphicsInteropForEpDevice";
assert(it.offset_in_bytes == 96, "OrtInteropApi.DeinitGraphicsInteropForEpDevice has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtInteropApi.DeinitGraphicsInteropForEpDevice has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtInteropApi) == 104, "OrtInteropApi has size % instead of 104", size_of(OrtInteropApi));
}
{
info := type_info(OrtExternalMemoryHandle);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtExternalMemoryHandle.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalMemoryHandle.version has unexpected size % instead of 4", it.type.runtime_size);
case "ep_device";
assert(it.offset_in_bytes == 8, "OrtExternalMemoryHandle.ep_device has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalMemoryHandle.ep_device has unexpected size % instead of 8", it.type.runtime_size);
case "descriptor";
assert(it.offset_in_bytes == 16, "OrtExternalMemoryHandle.descriptor has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 32, "OrtExternalMemoryHandle.descriptor has unexpected size % instead of 32", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 48, "OrtExternalMemoryHandle.Release has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalMemoryHandle.Release has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtExternalMemoryHandle) == 56, "OrtExternalMemoryHandle has size % instead of 56", size_of(OrtExternalMemoryHandle));
}
{
info := type_info(OrtExternalSemaphoreHandle);
for info.members {
if it.name == {
case "version";
assert(it.offset_in_bytes == 0, "OrtExternalSemaphoreHandle.version has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalSemaphoreHandle.version has unexpected size % instead of 4", it.type.runtime_size);
case "ep_device";
assert(it.offset_in_bytes == 8, "OrtExternalSemaphoreHandle.ep_device has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalSemaphoreHandle.ep_device has unexpected size % instead of 8", it.type.runtime_size);
case "descriptor";
assert(it.offset_in_bytes == 16, "OrtExternalSemaphoreHandle.descriptor has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 16, "OrtExternalSemaphoreHandle.descriptor has unexpected size % instead of 16", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 32, "OrtExternalSemaphoreHandle.Release has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalSemaphoreHandle.Release has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtExternalSemaphoreHandle) == 40, "OrtExternalSemaphoreHandle has size % instead of 40", size_of(OrtExternalSemaphoreHandle));
}
{
info := type_info(OrtDataTransferImpl);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtDataTransferImpl.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtDataTransferImpl.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 8, "OrtDataTransferImpl.Release has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtDataTransferImpl.Release has unexpected size % instead of 8", it.type.runtime_size);
case "CanCopy";
assert(it.offset_in_bytes == 16, "OrtDataTransferImpl.CanCopy has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtDataTransferImpl.CanCopy has unexpected size % instead of 8", it.type.runtime_size);
case "CopyTensors";
assert(it.offset_in_bytes == 24, "OrtDataTransferImpl.CopyTensors has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtDataTransferImpl.CopyTensors has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtDataTransferImpl) == 32, "OrtDataTransferImpl has size % instead of 32", size_of(OrtDataTransferImpl));
}
{
info := type_info(OrtSyncNotificationImpl);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtSyncNotificationImpl.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtSyncNotificationImpl.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 8, "OrtSyncNotificationImpl.Release has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncNotificationImpl.Release has unexpected size % instead of 8", it.type.runtime_size);
case "Activate";
assert(it.offset_in_bytes == 16, "OrtSyncNotificationImpl.Activate has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncNotificationImpl.Activate has unexpected size % instead of 8", it.type.runtime_size);
case "WaitOnDevice";
assert(it.offset_in_bytes == 24, "OrtSyncNotificationImpl.WaitOnDevice has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncNotificationImpl.WaitOnDevice has unexpected size % instead of 8", it.type.runtime_size);
case "WaitOnHost";
assert(it.offset_in_bytes == 32, "OrtSyncNotificationImpl.WaitOnHost has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncNotificationImpl.WaitOnHost has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtSyncNotificationImpl) == 40, "OrtSyncNotificationImpl has size % instead of 40", size_of(OrtSyncNotificationImpl));
}
{
info := type_info(OrtSyncStreamImpl);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtSyncStreamImpl.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtSyncStreamImpl.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 8, "OrtSyncStreamImpl.Release has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncStreamImpl.Release has unexpected size % instead of 8", it.type.runtime_size);
case "GetHandle";
assert(it.offset_in_bytes == 16, "OrtSyncStreamImpl.GetHandle has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncStreamImpl.GetHandle has unexpected size % instead of 8", it.type.runtime_size);
case "CreateNotification";
assert(it.offset_in_bytes == 24, "OrtSyncStreamImpl.CreateNotification has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncStreamImpl.CreateNotification has unexpected size % instead of 8", it.type.runtime_size);
case "Flush";
assert(it.offset_in_bytes == 32, "OrtSyncStreamImpl.Flush has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncStreamImpl.Flush has unexpected size % instead of 8", it.type.runtime_size);
case "OnSessionRunEnd";
assert(it.offset_in_bytes == 40, "OrtSyncStreamImpl.OnSessionRunEnd has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtSyncStreamImpl.OnSessionRunEnd has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtSyncStreamImpl) == 48, "OrtSyncStreamImpl has size % instead of 48", size_of(OrtSyncStreamImpl));
}
{
info := type_info(OrtExternalResourceImporterImpl);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtExternalResourceImporterImpl.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtExternalResourceImporterImpl.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "CanImportMemory";
assert(it.offset_in_bytes == 8, "OrtExternalResourceImporterImpl.CanImportMemory has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.CanImportMemory has unexpected size % instead of 8", it.type.runtime_size);
case "ImportMemory";
assert(it.offset_in_bytes == 16, "OrtExternalResourceImporterImpl.ImportMemory has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.ImportMemory has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseMemory";
assert(it.offset_in_bytes == 24, "OrtExternalResourceImporterImpl.ReleaseMemory has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.ReleaseMemory has unexpected size % instead of 8", it.type.runtime_size);
case "CreateTensorFromMemory";
assert(it.offset_in_bytes == 32, "OrtExternalResourceImporterImpl.CreateTensorFromMemory has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.CreateTensorFromMemory has unexpected size % instead of 8", it.type.runtime_size);
case "CanImportSemaphore";
assert(it.offset_in_bytes == 40, "OrtExternalResourceImporterImpl.CanImportSemaphore has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.CanImportSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "ImportSemaphore";
assert(it.offset_in_bytes == 48, "OrtExternalResourceImporterImpl.ImportSemaphore has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.ImportSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseSemaphore";
assert(it.offset_in_bytes == 56, "OrtExternalResourceImporterImpl.ReleaseSemaphore has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.ReleaseSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "WaitSemaphore";
assert(it.offset_in_bytes == 64, "OrtExternalResourceImporterImpl.WaitSemaphore has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.WaitSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "SignalSemaphore";
assert(it.offset_in_bytes == 72, "OrtExternalResourceImporterImpl.SignalSemaphore has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.SignalSemaphore has unexpected size % instead of 8", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 80, "OrtExternalResourceImporterImpl.Release has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtExternalResourceImporterImpl.Release has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtExternalResourceImporterImpl) == 88, "OrtExternalResourceImporterImpl has size % instead of 88", size_of(OrtExternalResourceImporterImpl));
}
{
info := type_info(OrtEpProfilerImpl);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtEpProfilerImpl.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtEpProfilerImpl.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 8, "OrtEpProfilerImpl.Release has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpProfilerImpl.Release has unexpected size % instead of 8", it.type.runtime_size);
case "StartProfiling";
assert(it.offset_in_bytes == 16, "OrtEpProfilerImpl.StartProfiling has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpProfilerImpl.StartProfiling has unexpected size % instead of 8", it.type.runtime_size);
case "StartEvent";
assert(it.offset_in_bytes == 24, "OrtEpProfilerImpl.StartEvent has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpProfilerImpl.StartEvent has unexpected size % instead of 8", it.type.runtime_size);
case "StopEvent";
assert(it.offset_in_bytes == 32, "OrtEpProfilerImpl.StopEvent has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpProfilerImpl.StopEvent has unexpected size % instead of 8", it.type.runtime_size);
case "EndProfiling";
assert(it.offset_in_bytes == 40, "OrtEpProfilerImpl.EndProfiling has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpProfilerImpl.EndProfiling has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtEpProfilerImpl) == 48, "OrtEpProfilerImpl has size % instead of 48", size_of(OrtEpProfilerImpl));
}
{
info := type_info(OrtNodeFusionOptions);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtNodeFusionOptions.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtNodeFusionOptions.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "drop_constant_initializers";
assert(it.offset_in_bytes == 4, "OrtNodeFusionOptions.drop_constant_initializers has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 1, "OrtNodeFusionOptions.drop_constant_initializers has unexpected size % instead of 1", it.type.runtime_size);
}
}
assert(size_of(OrtNodeFusionOptions) == 8, "OrtNodeFusionOptions has size % instead of 8", size_of(OrtNodeFusionOptions));
}
{
info := type_info(OrtNodeComputeInfo);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtNodeComputeInfo.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtNodeComputeInfo.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "CreateState";
assert(it.offset_in_bytes == 8, "OrtNodeComputeInfo.CreateState has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtNodeComputeInfo.CreateState has unexpected size % instead of 8", it.type.runtime_size);
case "Compute";
assert(it.offset_in_bytes == 16, "OrtNodeComputeInfo.Compute has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtNodeComputeInfo.Compute has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseState";
assert(it.offset_in_bytes == 24, "OrtNodeComputeInfo.ReleaseState has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtNodeComputeInfo.ReleaseState has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtNodeComputeInfo) == 32, "OrtNodeComputeInfo has size % instead of 32", size_of(OrtNodeComputeInfo));
}
{
info := type_info(OrtKernelImpl);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtKernelImpl.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtKernelImpl.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "flags";
assert(it.offset_in_bytes == 4, "OrtKernelImpl.flags has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtKernelImpl.flags has unexpected size % instead of 4", it.type.runtime_size);
case "Compute";
assert(it.offset_in_bytes == 8, "OrtKernelImpl.Compute has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtKernelImpl.Compute has unexpected size % instead of 8", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 16, "OrtKernelImpl.Release has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtKernelImpl.Release has unexpected size % instead of 8", it.type.runtime_size);
case "PrePackWeight";
assert(it.offset_in_bytes == 24, "OrtKernelImpl.PrePackWeight has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtKernelImpl.PrePackWeight has unexpected size % instead of 8", it.type.runtime_size);
case "SetSharedPrePackedWeight";
assert(it.offset_in_bytes == 32, "OrtKernelImpl.SetSharedPrePackedWeight has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtKernelImpl.SetSharedPrePackedWeight has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtKernelImpl) == 40, "OrtKernelImpl has size % instead of 40", size_of(OrtKernelImpl));
}
{
info := type_info(OrtLoopKernelHelper);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtLoopKernelHelper.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtLoopKernelHelper.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 8, "OrtLoopKernelHelper.Release has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtLoopKernelHelper.Release has unexpected size % instead of 8", it.type.runtime_size);
case "ConcatOutput";
assert(it.offset_in_bytes == 16, "OrtLoopKernelHelper.ConcatOutput has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtLoopKernelHelper.ConcatOutput has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtLoopKernelHelper) == 24, "OrtLoopKernelHelper has size % instead of 24", size_of(OrtLoopKernelHelper));
}
{
info := type_info(OrtScanKernelHelper);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtScanKernelHelper.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtScanKernelHelper.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "Release";
assert(it.offset_in_bytes == 8, "OrtScanKernelHelper.Release has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtScanKernelHelper.Release has unexpected size % instead of 8", it.type.runtime_size);
case "Transpose";
assert(it.offset_in_bytes == 16, "OrtScanKernelHelper.Transpose has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtScanKernelHelper.Transpose has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtScanKernelHelper) == 24, "OrtScanKernelHelper has size % instead of 24", size_of(OrtScanKernelHelper));
}
{
info := type_info(OrtResourceCount);
for info.members {
if it.name == {
case "kind";
assert(it.offset_in_bytes == 0, "OrtResourceCount.kind has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtResourceCount.kind has unexpected size % instead of 4", it.type.runtime_size);
case "reserved";
assert(it.offset_in_bytes == 4, "OrtResourceCount.reserved has unexpected offset % instead of 4", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtResourceCount.reserved has unexpected size % instead of 4", it.type.runtime_size);
case "value";
assert(it.offset_in_bytes == 8, "OrtResourceCount.value has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 48, "OrtResourceCount.value has unexpected size % instead of 48", it.type.runtime_size);
}
}
assert(size_of(OrtResourceCount) == 56, "OrtResourceCount has size % instead of 56", size_of(OrtResourceCount));
}
{
info := type_info(OrtEpApi);
for info.members {
if it.name == {
case "CreateEpDevice";
assert(it.offset_in_bytes == 0, "OrtEpApi.CreateEpDevice has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateEpDevice has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseEpDevice";
assert(it.offset_in_bytes == 8, "OrtEpApi.ReleaseEpDevice has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseEpDevice has unexpected size % instead of 8", it.type.runtime_size);
case "EpGraphSupportInfo_AddNodesToFuse";
assert(it.offset_in_bytes == 16, "OrtEpApi.EpGraphSupportInfo_AddNodesToFuse has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.EpGraphSupportInfo_AddNodesToFuse has unexpected size % instead of 8", it.type.runtime_size);
case "EpGraphSupportInfo_AddSingleNode";
assert(it.offset_in_bytes == 24, "OrtEpApi.EpGraphSupportInfo_AddSingleNode has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.EpGraphSupportInfo_AddSingleNode has unexpected size % instead of 8", it.type.runtime_size);
case "NodeComputeContext_NodeName";
assert(it.offset_in_bytes == 32, "OrtEpApi.NodeComputeContext_NodeName has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.NodeComputeContext_NodeName has unexpected size % instead of 8", it.type.runtime_size);
case "EpDevice_AddAllocatorInfo";
assert(it.offset_in_bytes == 40, "OrtEpApi.EpDevice_AddAllocatorInfo has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.EpDevice_AddAllocatorInfo has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryInfo_GetMemoryDevice";
assert(it.offset_in_bytes == 48, "OrtEpApi.MemoryInfo_GetMemoryDevice has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.MemoryInfo_GetMemoryDevice has unexpected size % instead of 8", it.type.runtime_size);
case "Value_GetMemoryDevice";
assert(it.offset_in_bytes == 56, "OrtEpApi.Value_GetMemoryDevice has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.Value_GetMemoryDevice has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryDevice_AreEqual";
assert(it.offset_in_bytes == 64, "OrtEpApi.MemoryDevice_AreEqual has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.MemoryDevice_AreEqual has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryDevice_GetDeviceType";
assert(it.offset_in_bytes == 72, "OrtEpApi.MemoryDevice_GetDeviceType has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.MemoryDevice_GetDeviceType has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryDevice_GetMemoryType";
assert(it.offset_in_bytes == 80, "OrtEpApi.MemoryDevice_GetMemoryType has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.MemoryDevice_GetMemoryType has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryDevice_GetVendorId";
assert(it.offset_in_bytes == 88, "OrtEpApi.MemoryDevice_GetVendorId has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.MemoryDevice_GetVendorId has unexpected size % instead of 8", it.type.runtime_size);
case "MemoryDevice_GetDeviceId";
assert(it.offset_in_bytes == 96, "OrtEpApi.MemoryDevice_GetDeviceId has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.MemoryDevice_GetDeviceId has unexpected size % instead of 8", it.type.runtime_size);
case "SyncStream_GetImpl";
assert(it.offset_in_bytes == 104, "OrtEpApi.SyncStream_GetImpl has unexpected offset % instead of 104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.SyncStream_GetImpl has unexpected size % instead of 8", it.type.runtime_size);
case "SyncStream_GetSyncId";
assert(it.offset_in_bytes == 112, "OrtEpApi.SyncStream_GetSyncId has unexpected offset % instead of 112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.SyncStream_GetSyncId has unexpected size % instead of 8", it.type.runtime_size);
case "GetSyncIdForLastWaitOnSyncStream";
assert(it.offset_in_bytes == 120, "OrtEpApi.GetSyncIdForLastWaitOnSyncStream has unexpected offset % instead of 120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.GetSyncIdForLastWaitOnSyncStream has unexpected size % instead of 8", it.type.runtime_size);
case "CreateHardwareDevice";
assert(it.offset_in_bytes == 128, "OrtEpApi.CreateHardwareDevice has unexpected offset % instead of 128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateHardwareDevice has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseHardwareDevice";
assert(it.offset_in_bytes == 136, "OrtEpApi.ReleaseHardwareDevice has unexpected offset % instead of 136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseHardwareDevice has unexpected size % instead of 8", it.type.runtime_size);
case "CreateKernelRegistry";
assert(it.offset_in_bytes == 144, "OrtEpApi.CreateKernelRegistry has unexpected offset % instead of 144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateKernelRegistry has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseKernelRegistry";
assert(it.offset_in_bytes == 152, "OrtEpApi.ReleaseKernelRegistry has unexpected offset % instead of 152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseKernelRegistry has unexpected size % instead of 8", it.type.runtime_size);
case "KernelRegistry_AddKernel";
assert(it.offset_in_bytes == 160, "OrtEpApi.KernelRegistry_AddKernel has unexpected offset % instead of 160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelRegistry_AddKernel has unexpected size % instead of 8", it.type.runtime_size);
case "CreateKernelDefBuilder";
assert(it.offset_in_bytes == 168, "OrtEpApi.CreateKernelDefBuilder has unexpected offset % instead of 168", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateKernelDefBuilder has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseKernelDefBuilder";
assert(it.offset_in_bytes == 176, "OrtEpApi.ReleaseKernelDefBuilder has unexpected offset % instead of 176", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseKernelDefBuilder has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_SetOperatorType";
assert(it.offset_in_bytes == 184, "OrtEpApi.KernelDefBuilder_SetOperatorType has unexpected offset % instead of 184", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_SetOperatorType has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_SetDomain";
assert(it.offset_in_bytes == 192, "OrtEpApi.KernelDefBuilder_SetDomain has unexpected offset % instead of 192", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_SetDomain has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_SetSinceVersion";
assert(it.offset_in_bytes == 200, "OrtEpApi.KernelDefBuilder_SetSinceVersion has unexpected offset % instead of 200", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_SetSinceVersion has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_SetExecutionProvider";
assert(it.offset_in_bytes == 208, "OrtEpApi.KernelDefBuilder_SetExecutionProvider has unexpected offset % instead of 208", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_SetExecutionProvider has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_SetInputMemType";
assert(it.offset_in_bytes == 216, "OrtEpApi.KernelDefBuilder_SetInputMemType has unexpected offset % instead of 216", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_SetInputMemType has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_SetOutputMemType";
assert(it.offset_in_bytes == 224, "OrtEpApi.KernelDefBuilder_SetOutputMemType has unexpected offset % instead of 224", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_SetOutputMemType has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_AddTypeConstraint";
assert(it.offset_in_bytes == 232, "OrtEpApi.KernelDefBuilder_AddTypeConstraint has unexpected offset % instead of 232", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_AddTypeConstraint has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_AddInputOutputAliases";
assert(it.offset_in_bytes == 240, "OrtEpApi.KernelDefBuilder_AddInputOutputAliases has unexpected offset % instead of 240", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_AddInputOutputAliases has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_AddInputOutputMutableAliases";
assert(it.offset_in_bytes == 248, "OrtEpApi.KernelDefBuilder_AddInputOutputMutableAliases has unexpected offset % instead of 248", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_AddInputOutputMutableAliases has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDefBuilder_Build";
assert(it.offset_in_bytes == 256, "OrtEpApi.KernelDefBuilder_Build has unexpected offset % instead of 256", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDefBuilder_Build has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseKernelDef";
assert(it.offset_in_bytes == 264, "OrtEpApi.ReleaseKernelDef has unexpected offset % instead of 264", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseKernelDef has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDef_GetOperatorType";
assert(it.offset_in_bytes == 272, "OrtEpApi.KernelDef_GetOperatorType has unexpected offset % instead of 272", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDef_GetOperatorType has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDef_GetDomain";
assert(it.offset_in_bytes == 280, "OrtEpApi.KernelDef_GetDomain has unexpected offset % instead of 280", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDef_GetDomain has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDef_GetSinceVersion";
assert(it.offset_in_bytes == 288, "OrtEpApi.KernelDef_GetSinceVersion has unexpected offset % instead of 288", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDef_GetSinceVersion has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDef_GetExecutionProvider";
assert(it.offset_in_bytes == 296, "OrtEpApi.KernelDef_GetExecutionProvider has unexpected offset % instead of 296", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDef_GetExecutionProvider has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDef_GetInputMemType";
assert(it.offset_in_bytes == 304, "OrtEpApi.KernelDef_GetInputMemType has unexpected offset % instead of 304", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDef_GetInputMemType has unexpected size % instead of 8", it.type.runtime_size);
case "KernelDef_GetOutputMemType";
assert(it.offset_in_bytes == 312, "OrtEpApi.KernelDef_GetOutputMemType has unexpected offset % instead of 312", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelDef_GetOutputMemType has unexpected size % instead of 8", it.type.runtime_size);
case "GetTensorDataType";
assert(it.offset_in_bytes == 320, "OrtEpApi.GetTensorDataType has unexpected offset % instead of 320", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.GetTensorDataType has unexpected size % instead of 8", it.type.runtime_size);
case "EpGraphSupportInfo_LookUpKernel";
assert(it.offset_in_bytes == 328, "OrtEpApi.EpGraphSupportInfo_LookUpKernel has unexpected offset % instead of 328", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.EpGraphSupportInfo_LookUpKernel has unexpected size % instead of 8", it.type.runtime_size);
case "SharedPrePackedWeightCache_StoreWeightData";
assert(it.offset_in_bytes == 336, "OrtEpApi.SharedPrePackedWeightCache_StoreWeightData has unexpected offset % instead of 336", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.SharedPrePackedWeightCache_StoreWeightData has unexpected size % instead of 8", it.type.runtime_size);
case "KernelInfo_GetEp";
assert(it.offset_in_bytes == 344, "OrtEpApi.KernelInfo_GetEp has unexpected offset % instead of 344", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.KernelInfo_GetEp has unexpected size % instead of 8", it.type.runtime_size);
case "DeviceEpIncompatibilityDetails_SetDetails";
assert(it.offset_in_bytes == 352, "OrtEpApi.DeviceEpIncompatibilityDetails_SetDetails has unexpected offset % instead of 352", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.DeviceEpIncompatibilityDetails_SetDetails has unexpected size % instead of 8", it.type.runtime_size);
case "CreateIfKernel";
assert(it.offset_in_bytes == 360, "OrtEpApi.CreateIfKernel has unexpected offset % instead of 360", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateIfKernel has unexpected size % instead of 8", it.type.runtime_size);
case "CreateLoopKernel";
assert(it.offset_in_bytes == 368, "OrtEpApi.CreateLoopKernel has unexpected offset % instead of 368", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateLoopKernel has unexpected size % instead of 8", it.type.runtime_size);
case "CreateScanKernel";
assert(it.offset_in_bytes == 376, "OrtEpApi.CreateScanKernel has unexpected offset % instead of 376", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateScanKernel has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseKernelImpl";
assert(it.offset_in_bytes == 384, "OrtEpApi.ReleaseKernelImpl has unexpected offset % instead of 384", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseKernelImpl has unexpected size % instead of 8", it.type.runtime_size);
case "GetEnvConfigEntries";
assert(it.offset_in_bytes == 392, "OrtEpApi.GetEnvConfigEntries has unexpected offset % instead of 392", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.GetEnvConfigEntries has unexpected size % instead of 8", it.type.runtime_size);
case "GetOpSchema";
assert(it.offset_in_bytes == 400, "OrtEpApi.GetOpSchema has unexpected offset % instead of 400", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.GetOpSchema has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseOpSchema";
assert(it.offset_in_bytes == 408, "OrtEpApi.ReleaseOpSchema has unexpected offset % instead of 408", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseOpSchema has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetSinceVersion";
assert(it.offset_in_bytes == 416, "OrtEpApi.OpSchema_GetSinceVersion has unexpected offset % instead of 416", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetSinceVersion has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetNumInputs";
assert(it.offset_in_bytes == 424, "OrtEpApi.OpSchema_GetNumInputs has unexpected offset % instead of 424", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetNumInputs has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetInputName";
assert(it.offset_in_bytes == 432, "OrtEpApi.OpSchema_GetInputName has unexpected offset % instead of 432", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetInputName has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetInputTypeConstraint";
assert(it.offset_in_bytes == 440, "OrtEpApi.OpSchema_GetInputTypeConstraint has unexpected offset % instead of 440", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetInputTypeConstraint has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetNumOutputs";
assert(it.offset_in_bytes == 448, "OrtEpApi.OpSchema_GetNumOutputs has unexpected offset % instead of 448", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetNumOutputs has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetOutputName";
assert(it.offset_in_bytes == 456, "OrtEpApi.OpSchema_GetOutputName has unexpected offset % instead of 456", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetOutputName has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetOutputTypeConstraint";
assert(it.offset_in_bytes == 464, "OrtEpApi.OpSchema_GetOutputTypeConstraint has unexpected offset % instead of 464", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetOutputTypeConstraint has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetTypeConstraintCount";
assert(it.offset_in_bytes == 472, "OrtEpApi.OpSchema_GetTypeConstraintCount has unexpected offset % instead of 472", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetTypeConstraintCount has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchema_GetTypeConstraint";
assert(it.offset_in_bytes == 480, "OrtEpApi.OpSchema_GetTypeConstraint has unexpected offset % instead of 480", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchema_GetTypeConstraint has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchemaTypeConstraint_GetTypeParamName";
assert(it.offset_in_bytes == 488, "OrtEpApi.OpSchemaTypeConstraint_GetTypeParamName has unexpected offset % instead of 488", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchemaTypeConstraint_GetTypeParamName has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchemaTypeConstraint_GetAllowedTypes";
assert(it.offset_in_bytes == 496, "OrtEpApi.OpSchemaTypeConstraint_GetAllowedTypes has unexpected offset % instead of 496", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchemaTypeConstraint_GetAllowedTypes has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchemaTypeConstraint_GetInputIndices";
assert(it.offset_in_bytes == 504, "OrtEpApi.OpSchemaTypeConstraint_GetInputIndices has unexpected offset % instead of 504", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchemaTypeConstraint_GetInputIndices has unexpected size % instead of 8", it.type.runtime_size);
case "OpSchemaTypeConstraint_GetOutputIndices";
assert(it.offset_in_bytes == 512, "OrtEpApi.OpSchemaTypeConstraint_GetOutputIndices has unexpected offset % instead of 512", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.OpSchemaTypeConstraint_GetOutputIndices has unexpected size % instead of 8", it.type.runtime_size);
case "CreateProfilingEvent";
assert(it.offset_in_bytes == 520, "OrtEpApi.CreateProfilingEvent has unexpected offset % instead of 520", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.CreateProfilingEvent has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseProfilingEvent";
assert(it.offset_in_bytes == 528, "OrtEpApi.ReleaseProfilingEvent has unexpected offset % instead of 528", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ReleaseProfilingEvent has unexpected size % instead of 8", it.type.runtime_size);
case "ProfilingEvent_GetCategory";
assert(it.offset_in_bytes == 536, "OrtEpApi.ProfilingEvent_GetCategory has unexpected offset % instead of 536", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ProfilingEvent_GetCategory has unexpected size % instead of 8", it.type.runtime_size);
case "ProfilingEvent_GetName";
assert(it.offset_in_bytes == 544, "OrtEpApi.ProfilingEvent_GetName has unexpected offset % instead of 544", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ProfilingEvent_GetName has unexpected size % instead of 8", it.type.runtime_size);
case "ProfilingEvent_GetTimestampUs";
assert(it.offset_in_bytes == 552, "OrtEpApi.ProfilingEvent_GetTimestampUs has unexpected offset % instead of 552", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ProfilingEvent_GetTimestampUs has unexpected size % instead of 8", it.type.runtime_size);
case "ProfilingEvent_GetDurationUs";
assert(it.offset_in_bytes == 560, "OrtEpApi.ProfilingEvent_GetDurationUs has unexpected offset % instead of 560", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ProfilingEvent_GetDurationUs has unexpected size % instead of 8", it.type.runtime_size);
case "ProfilingEvent_GetArgValue";
assert(it.offset_in_bytes == 568, "OrtEpApi.ProfilingEvent_GetArgValue has unexpected offset % instead of 568", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ProfilingEvent_GetArgValue has unexpected size % instead of 8", it.type.runtime_size);
case "ProfilingEventsContainer_AddEvents";
assert(it.offset_in_bytes == 576, "OrtEpApi.ProfilingEventsContainer_AddEvents has unexpected offset % instead of 576", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.ProfilingEventsContainer_AddEvents has unexpected size % instead of 8", it.type.runtime_size);
case "SessionOptionsGetWeightlessSourceModelBuffer";
assert(it.offset_in_bytes == 584, "OrtEpApi.SessionOptionsGetWeightlessSourceModelBuffer has unexpected offset % instead of 584", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpApi.SessionOptionsGetWeightlessSourceModelBuffer has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtEpApi) == 592, "OrtEpApi has size % instead of 592", size_of(OrtEpApi));
}
{
info := type_info(OrtEp);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtEp.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtEp.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "GetName";
assert(it.offset_in_bytes == 8, "OrtEp.GetName has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetName has unexpected size % instead of 8", it.type.runtime_size);
case "GetCapability";
assert(it.offset_in_bytes == 16, "OrtEp.GetCapability has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetCapability has unexpected size % instead of 8", it.type.runtime_size);
case "Compile";
assert(it.offset_in_bytes == 24, "OrtEp.Compile has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.Compile has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseNodeComputeInfos";
assert(it.offset_in_bytes == 32, "OrtEp.ReleaseNodeComputeInfos has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.ReleaseNodeComputeInfos has unexpected size % instead of 8", it.type.runtime_size);
case "GetPreferredDataLayout";
assert(it.offset_in_bytes == 40, "OrtEp.GetPreferredDataLayout has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetPreferredDataLayout has unexpected size % instead of 8", it.type.runtime_size);
case "ShouldConvertDataLayoutForOp";
assert(it.offset_in_bytes == 48, "OrtEp.ShouldConvertDataLayoutForOp has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.ShouldConvertDataLayoutForOp has unexpected size % instead of 8", it.type.runtime_size);
case "SetDynamicOptions";
assert(it.offset_in_bytes == 56, "OrtEp.SetDynamicOptions has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.SetDynamicOptions has unexpected size % instead of 8", it.type.runtime_size);
case "OnRunStart";
assert(it.offset_in_bytes == 64, "OrtEp.OnRunStart has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.OnRunStart has unexpected size % instead of 8", it.type.runtime_size);
case "OnRunEnd";
assert(it.offset_in_bytes == 72, "OrtEp.OnRunEnd has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.OnRunEnd has unexpected size % instead of 8", it.type.runtime_size);
case "CreateAllocator";
assert(it.offset_in_bytes == 80, "OrtEp.CreateAllocator has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.CreateAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSyncStreamForDevice";
assert(it.offset_in_bytes == 88, "OrtEp.CreateSyncStreamForDevice has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.CreateSyncStreamForDevice has unexpected size % instead of 8", it.type.runtime_size);
case "GetCompiledModelCompatibilityInfo";
assert(it.offset_in_bytes == 96, "OrtEp.GetCompiledModelCompatibilityInfo has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetCompiledModelCompatibilityInfo has unexpected size % instead of 8", it.type.runtime_size);
case "GetKernelRegistry";
assert(it.offset_in_bytes == 104, "OrtEp.GetKernelRegistry has unexpected offset % instead of 104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetKernelRegistry has unexpected size % instead of 8", it.type.runtime_size);
case "IsConcurrentRunSupported";
assert(it.offset_in_bytes == 112, "OrtEp.IsConcurrentRunSupported has unexpected offset % instead of 112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.IsConcurrentRunSupported has unexpected size % instead of 8", it.type.runtime_size);
case "Sync";
assert(it.offset_in_bytes == 120, "OrtEp.Sync has unexpected offset % instead of 120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.Sync has unexpected size % instead of 8", it.type.runtime_size);
case "CreateProfiler";
assert(it.offset_in_bytes == 128, "OrtEp.CreateProfiler has unexpected offset % instead of 128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.CreateProfiler has unexpected size % instead of 8", it.type.runtime_size);
case "IsGraphCaptureEnabled";
assert(it.offset_in_bytes == 136, "OrtEp.IsGraphCaptureEnabled has unexpected offset % instead of 136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.IsGraphCaptureEnabled has unexpected size % instead of 8", it.type.runtime_size);
case "IsGraphCaptured";
assert(it.offset_in_bytes == 144, "OrtEp.IsGraphCaptured has unexpected offset % instead of 144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.IsGraphCaptured has unexpected size % instead of 8", it.type.runtime_size);
case "ReplayGraph";
assert(it.offset_in_bytes == 152, "OrtEp.ReplayGraph has unexpected offset % instead of 152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.ReplayGraph has unexpected size % instead of 8", it.type.runtime_size);
case "GetGraphCaptureNodeAssignmentPolicy";
assert(it.offset_in_bytes == 160, "OrtEp.GetGraphCaptureNodeAssignmentPolicy has unexpected offset % instead of 160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetGraphCaptureNodeAssignmentPolicy has unexpected size % instead of 8", it.type.runtime_size);
case "GetAvailableResource";
assert(it.offset_in_bytes == 168, "OrtEp.GetAvailableResource has unexpected offset % instead of 168", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetAvailableResource has unexpected size % instead of 8", it.type.runtime_size);
case "OnSessionInitializationEnd";
assert(it.offset_in_bytes == 176, "OrtEp.OnSessionInitializationEnd has unexpected offset % instead of 176", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.OnSessionInitializationEnd has unexpected size % instead of 8", it.type.runtime_size);
case "GetDefaultMemoryDevice";
assert(it.offset_in_bytes == 184, "OrtEp.GetDefaultMemoryDevice has unexpected offset % instead of 184", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetDefaultMemoryDevice has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseCapturedGraph";
assert(it.offset_in_bytes == 192, "OrtEp.ReleaseCapturedGraph has unexpected offset % instead of 192", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.ReleaseCapturedGraph has unexpected size % instead of 8", it.type.runtime_size);
case "GetWeightlessSupport";
assert(it.offset_in_bytes == 200, "OrtEp.GetWeightlessSupport has unexpected offset % instead of 200", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEp.GetWeightlessSupport has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtEp) == 208, "OrtEp has size % instead of 208", size_of(OrtEp));
}
{
info := type_info(OrtEpFactory);
for info.members {
if it.name == {
case "ort_version_supported";
assert(it.offset_in_bytes == 0, "OrtEpFactory.ort_version_supported has unexpected offset % instead of 0", it.offset_in_bytes);
assert(it.type.runtime_size == 4, "OrtEpFactory.ort_version_supported has unexpected size % instead of 4", it.type.runtime_size);
case "GetName";
assert(it.offset_in_bytes == 8, "OrtEpFactory.GetName has unexpected offset % instead of 8", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetName has unexpected size % instead of 8", it.type.runtime_size);
case "GetVendor";
assert(it.offset_in_bytes == 16, "OrtEpFactory.GetVendor has unexpected offset % instead of 16", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetVendor has unexpected size % instead of 8", it.type.runtime_size);
case "GetSupportedDevices";
assert(it.offset_in_bytes == 24, "OrtEpFactory.GetSupportedDevices has unexpected offset % instead of 24", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetSupportedDevices has unexpected size % instead of 8", it.type.runtime_size);
case "CreateEp";
assert(it.offset_in_bytes == 32, "OrtEpFactory.CreateEp has unexpected offset % instead of 32", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.CreateEp has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseEp";
assert(it.offset_in_bytes == 40, "OrtEpFactory.ReleaseEp has unexpected offset % instead of 40", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.ReleaseEp has unexpected size % instead of 8", it.type.runtime_size);
case "GetVendorId";
assert(it.offset_in_bytes == 48, "OrtEpFactory.GetVendorId has unexpected offset % instead of 48", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetVendorId has unexpected size % instead of 8", it.type.runtime_size);
case "GetVersion";
assert(it.offset_in_bytes == 56, "OrtEpFactory.GetVersion has unexpected offset % instead of 56", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetVersion has unexpected size % instead of 8", it.type.runtime_size);
case "ValidateCompiledModelCompatibilityInfo";
assert(it.offset_in_bytes == 64, "OrtEpFactory.ValidateCompiledModelCompatibilityInfo has unexpected offset % instead of 64", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.ValidateCompiledModelCompatibilityInfo has unexpected size % instead of 8", it.type.runtime_size);
case "CreateAllocator";
assert(it.offset_in_bytes == 72, "OrtEpFactory.CreateAllocator has unexpected offset % instead of 72", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.CreateAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "ReleaseAllocator";
assert(it.offset_in_bytes == 80, "OrtEpFactory.ReleaseAllocator has unexpected offset % instead of 80", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.ReleaseAllocator has unexpected size % instead of 8", it.type.runtime_size);
case "CreateDataTransfer";
assert(it.offset_in_bytes == 88, "OrtEpFactory.CreateDataTransfer has unexpected offset % instead of 88", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.CreateDataTransfer has unexpected size % instead of 8", it.type.runtime_size);
case "IsStreamAware";
assert(it.offset_in_bytes == 96, "OrtEpFactory.IsStreamAware has unexpected offset % instead of 96", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.IsStreamAware has unexpected size % instead of 8", it.type.runtime_size);
case "CreateSyncStreamForDevice";
assert(it.offset_in_bytes == 104, "OrtEpFactory.CreateSyncStreamForDevice has unexpected offset % instead of 104", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.CreateSyncStreamForDevice has unexpected size % instead of 8", it.type.runtime_size);
case "GetHardwareDeviceIncompatibilityDetails";
assert(it.offset_in_bytes == 112, "OrtEpFactory.GetHardwareDeviceIncompatibilityDetails has unexpected offset % instead of 112", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetHardwareDeviceIncompatibilityDetails has unexpected size % instead of 8", it.type.runtime_size);
case "CreateExternalResourceImporterForDevice";
assert(it.offset_in_bytes == 120, "OrtEpFactory.CreateExternalResourceImporterForDevice has unexpected offset % instead of 120", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.CreateExternalResourceImporterForDevice has unexpected size % instead of 8", it.type.runtime_size);
case "GetNumCustomOpDomains";
assert(it.offset_in_bytes == 128, "OrtEpFactory.GetNumCustomOpDomains has unexpected offset % instead of 128", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetNumCustomOpDomains has unexpected size % instead of 8", it.type.runtime_size);
case "GetCustomOpDomains";
assert(it.offset_in_bytes == 136, "OrtEpFactory.GetCustomOpDomains has unexpected offset % instead of 136", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.GetCustomOpDomains has unexpected size % instead of 8", it.type.runtime_size);
case "InitGraphicsInterop";
assert(it.offset_in_bytes == 144, "OrtEpFactory.InitGraphicsInterop has unexpected offset % instead of 144", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.InitGraphicsInterop has unexpected size % instead of 8", it.type.runtime_size);
case "DeinitGraphicsInterop";
assert(it.offset_in_bytes == 152, "OrtEpFactory.DeinitGraphicsInterop has unexpected offset % instead of 152", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.DeinitGraphicsInterop has unexpected size % instead of 8", it.type.runtime_size);
case "SelectBestModelCandidate";
assert(it.offset_in_bytes == 160, "OrtEpFactory.SelectBestModelCandidate has unexpected offset % instead of 160", it.offset_in_bytes);
assert(it.type.runtime_size == 8, "OrtEpFactory.SelectBestModelCandidate has unexpected size % instead of 8", it.type.runtime_size);
}
}
assert(size_of(OrtEpFactory) == 168, "OrtEpFactory has size % instead of 168", size_of(OrtEpFactory));
}
}