#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
typedef enum DatumType {
TRACT_DATUM_TYPE_BOOL = 1,
TRACT_DATUM_TYPE_U8 = 17,
TRACT_DATUM_TYPE_U16 = 18,
TRACT_DATUM_TYPE_U32 = 20,
TRACT_DATUM_TYPE_U64 = 24,
TRACT_DATUM_TYPE_I8 = 33,
TRACT_DATUM_TYPE_I16 = 34,
TRACT_DATUM_TYPE_I32 = 36,
TRACT_DATUM_TYPE_I64 = 40,
TRACT_DATUM_TYPE_F16 = 50,
TRACT_DATUM_TYPE_F32 = 52,
TRACT_DATUM_TYPE_F64 = 56,
TRACT_DATUM_TYPE_COMPLEX_I16 = 66,
TRACT_DATUM_TYPE_COMPLEX_I32 = 68,
TRACT_DATUM_TYPE_COMPLEX_I64 = 72,
TRACT_DATUM_TYPE_COMPLEX_F16 = 82,
TRACT_DATUM_TYPE_COMPLEX_F32 = 84,
TRACT_DATUM_TYPE_COMPLEX_F64 = 88,
} DatumType;
typedef enum TRACT_RESULT {
TRACT_RESULT_OK = 0,
TRACT_RESULT_KO = 1,
} TRACT_RESULT;
typedef struct TractFact TractFact;
typedef struct TractInferenceFact TractInferenceFact;
typedef struct TractInferenceModel TractInferenceModel;
typedef struct TractModel TractModel;
typedef struct TractNnef TractNnef;
typedef struct TractOnnx TractOnnx;
typedef struct TractRunnable TractRunnable;
typedef struct TractState TractState;
typedef struct TractValue TractValue;
const char *tract_get_last_error(void);
const char *tract_version(void);
void tract_free_cstring(char *ptr);
enum TRACT_RESULT tract_nnef_create(struct TractNnef **nnef);
enum TRACT_RESULT tract_nnef_enable_tract_core(struct TractNnef *nnef);
enum TRACT_RESULT tract_nnef_enable_tract_extra(struct TractNnef *nnef);
enum TRACT_RESULT tract_nnef_enable_onnx(struct TractNnef *nnef);
enum TRACT_RESULT tract_nnef_enable_pulse(struct TractNnef *nnef);
enum TRACT_RESULT tract_nnef_enable_extended_identifier_syntax(struct TractNnef *nnef);
enum TRACT_RESULT tract_nnef_destroy(struct TractNnef **nnef);
enum TRACT_RESULT tract_nnef_model_for_path(const struct TractNnef *nnef,
const char *path,
struct TractModel **model);
enum TRACT_RESULT tract_nnef_write_model_to_tar(const struct TractNnef *nnef,
const char *path,
const struct TractModel *model);
enum TRACT_RESULT tract_nnef_write_model_to_tar_gz(const struct TractNnef *nnef,
const char *path,
const struct TractModel *model);
enum TRACT_RESULT tract_nnef_write_model_to_dir(const struct TractNnef *nnef,
const char *path,
const struct TractModel *model);
enum TRACT_RESULT tract_onnx_create(struct TractOnnx **onnx);
enum TRACT_RESULT tract_onnx_destroy(struct TractOnnx **onnx);
enum TRACT_RESULT tract_onnx_model_for_path(const struct TractOnnx *onnx,
const char *path,
struct TractInferenceModel **model);
enum TRACT_RESULT tract_inference_model_input_count(const struct TractInferenceModel *model,
uintptr_t *inputs);
enum TRACT_RESULT tract_inference_model_output_count(const struct TractInferenceModel *model,
uintptr_t *outputs);
enum TRACT_RESULT tract_inference_model_input_name(const struct TractInferenceModel *model,
uintptr_t input,
char **name);
enum TRACT_RESULT tract_inference_model_output_name(const struct TractInferenceModel *model,
uintptr_t output,
int8_t **name);
enum TRACT_RESULT tract_inference_model_input_fact(const struct TractInferenceModel *model,
uintptr_t input_id,
struct TractInferenceFact **fact);
enum TRACT_RESULT tract_inference_model_set_input_fact(struct TractInferenceModel *model,
uintptr_t input_id,
const struct TractInferenceFact *fact);
enum TRACT_RESULT tract_inference_model_set_output_names(struct TractInferenceModel *model,
uintptr_t len,
const char *const *names);
enum TRACT_RESULT tract_inference_model_output_fact(const struct TractInferenceModel *model,
uintptr_t output_id,
struct TractInferenceFact **fact);
enum TRACT_RESULT tract_inference_model_set_output_fact(struct TractInferenceModel *model,
uintptr_t output_id,
const struct TractInferenceFact *fact);
enum TRACT_RESULT tract_inference_model_analyse(struct TractInferenceModel *model);
enum TRACT_RESULT tract_inference_model_into_optimized(struct TractInferenceModel **model,
struct TractModel **optimized);
enum TRACT_RESULT tract_inference_model_into_typed(struct TractInferenceModel **model,
struct TractModel **typed);
enum TRACT_RESULT tract_inference_model_destroy(struct TractInferenceModel **model);
enum TRACT_RESULT tract_model_input_count(const struct TractModel *model, uintptr_t *inputs);
enum TRACT_RESULT tract_model_output_count(const struct TractModel *model, uintptr_t *outputs);
enum TRACT_RESULT tract_model_input_name(const struct TractModel *model,
uintptr_t input,
char **name);
enum TRACT_RESULT tract_model_input_fact(const struct TractModel *model,
uintptr_t input_id,
struct TractFact **fact);
enum TRACT_RESULT tract_model_output_name(const struct TractModel *model,
uintptr_t output,
char **name);
enum TRACT_RESULT tract_model_output_fact(const struct TractModel *model,
uintptr_t input_id,
struct TractFact **fact);
enum TRACT_RESULT tract_model_set_output_names(struct TractModel *model,
uintptr_t len,
const char *const *names);
enum TRACT_RESULT tract_model_concretize_symbols(struct TractModel *model,
uintptr_t nb_symbols,
const int8_t *const *symbols,
const int64_t *values);
enum TRACT_RESULT tract_model_pulse_simple(struct TractModel **model,
const int8_t *stream_symbol,
const int8_t *pulse_expr);
enum TRACT_RESULT tract_model_half(struct TractModel *model);
enum TRACT_RESULT tract_model_declutter(struct TractModel *model);
enum TRACT_RESULT tract_model_optimize(struct TractModel *model);
enum TRACT_RESULT tract_model_profile_json(struct TractModel *model,
struct TractValue **inputs,
int8_t **json);
enum TRACT_RESULT tract_model_into_runnable(struct TractModel **model,
struct TractRunnable **runnable);
enum TRACT_RESULT tract_model_property_count(const struct TractModel *model, uintptr_t *count);
enum TRACT_RESULT tract_model_property_names(const struct TractModel *model, int8_t **names);
enum TRACT_RESULT tract_model_property(const struct TractModel *model,
const int8_t *name,
struct TractValue **value);
enum TRACT_RESULT tract_model_destroy(struct TractModel **model);
enum TRACT_RESULT tract_runnable_spawn_state(struct TractRunnable *runnable,
struct TractState **state);
enum TRACT_RESULT tract_runnable_run(struct TractRunnable *runnable,
struct TractValue **inputs,
struct TractValue **outputs);
enum TRACT_RESULT tract_runnable_input_count(const struct TractRunnable *model, uintptr_t *inputs);
enum TRACT_RESULT tract_runnable_output_count(const struct TractRunnable *model,
uintptr_t *outputs);
enum TRACT_RESULT tract_runnable_release(struct TractRunnable **runnable);
enum TRACT_RESULT tract_value_from_bytes(DatumType datum_type,
uintptr_t rank,
const uintptr_t *shape,
void *data,
struct TractValue **value);
enum TRACT_RESULT tract_value_destroy(struct TractValue **value);
enum TRACT_RESULT tract_value_as_bytes(struct TractValue *value,
DatumType *datum_type,
uintptr_t *rank,
const uintptr_t **shape,
const void **data);
enum TRACT_RESULT tract_state_run(struct TractState *state,
struct TractValue **inputs,
struct TractValue **outputs);
enum TRACT_RESULT tract_state_input_count(const struct TractState *state, uintptr_t *inputs);
enum TRACT_RESULT tract_state_output_count(const struct TractState *state, uintptr_t *outputs);
enum TRACT_RESULT tract_state_destroy(struct TractState **state);
enum TRACT_RESULT tract_fact_parse(struct TractModel *model,
const char *spec,
struct TractFact **fact);
enum TRACT_RESULT tract_fact_dump(const struct TractFact *fact, char **spec);
enum TRACT_RESULT tract_fact_destroy(struct TractFact **fact);
enum TRACT_RESULT tract_inference_fact_parse(struct TractInferenceModel *model,
const char *spec,
struct TractInferenceFact **fact);
enum TRACT_RESULT tract_inference_fact_empty(struct TractInferenceFact **fact);
enum TRACT_RESULT tract_inference_fact_dump(const struct TractInferenceFact *fact, char **spec);
enum TRACT_RESULT tract_inference_fact_destroy(struct TractInferenceFact **fact);