#ifndef CFASTTEXT_CFASTTEXT_H
#define CFASTTEXT_CFASTTEXT_H
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef CFASTTEXT_API
# if defined(_WIN32) || defined(_WIN64)
# define CFASTTEXT_API __declspec(dllimport)
# else
# define CFASTTEXT_API extern
# endif
#endif
typedef struct fasttext_t fasttext_t;
typedef struct fasttext_args_t fasttext_args_t;
typedef struct fasttext_autotune_t fasttext_autotune_t;
typedef struct {
float prob;
char* label;
} fasttext_prediction_t;
typedef struct {
fasttext_prediction_t* predictions;
size_t length;
} fasttext_predictions_t;
typedef struct {
char** tokens;
size_t length;
} fasttext_tokens_t;
typedef struct {
int32_t* words;
size_t length;
} fasttext_words_t;
typedef struct {
char** words;
int64_t* freqs;
size_t length;
} fasttext_vocab_t;
typedef struct {
char** labels;
int64_t* freqs;
size_t length;
} fasttext_labels_t;
typedef enum {
MODEL_CBOW = 1,
MODEL_SG,
MODEL_SUP,
} model_name_t;
typedef enum {
LOSS_HS = 1,
LOSS_NS,
LOSS_SOFTMAX,
LOSS_OVA,
} loss_name_t;
typedef enum {
F1_SCORE = 1,
LABEL_F1_SCORE,
} metric_name_t;
CFASTTEXT_API void cft_str_free(char* s);
CFASTTEXT_API fasttext_args_t* cft_args_new(void);
CFASTTEXT_API void cft_args_parse(fasttext_args_t* handle, int argc, char** argv);
CFASTTEXT_API void cft_args_free(fasttext_args_t* handle);
CFASTTEXT_API const char* cft_args_get_input(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_input(fasttext_args_t* handle, const char* input);
CFASTTEXT_API const char* cft_args_get_output(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_output(fasttext_args_t* handle, const char* output);
CFASTTEXT_API double cft_args_get_lr(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_lr(fasttext_args_t* handle, double lr);
CFASTTEXT_API int cft_args_get_lr_update_rate(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_lr_update_rate(fasttext_args_t* handle, int rate);
CFASTTEXT_API int cft_args_get_dim(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_dim(fasttext_args_t* handle, int dim);
CFASTTEXT_API int cft_args_get_ws(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_ws(fasttext_args_t* handle, int ws);
CFASTTEXT_API int cft_args_get_epoch(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_epoch(fasttext_args_t* handle, int epoch);
CFASTTEXT_API int cft_args_get_thread(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_thread(fasttext_args_t* handle, int thread);
CFASTTEXT_API model_name_t cft_args_get_model(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_model(fasttext_args_t* handle, model_name_t model);
CFASTTEXT_API loss_name_t cft_args_get_loss(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_loss(fasttext_args_t* handle, loss_name_t loss);
CFASTTEXT_API int cft_args_get_min_count(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_min_count(fasttext_args_t* handle, int min_count);
CFASTTEXT_API int cft_args_get_min_count_label(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_min_count_label(fasttext_args_t* handle, int min_count);
CFASTTEXT_API int cft_args_get_neg(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_neg(fasttext_args_t* handle, int neg);
CFASTTEXT_API int cft_args_get_word_ngrams(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_word_ngrams(fasttext_args_t* handle, int ngrams);
CFASTTEXT_API int cft_args_get_bucket(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_bucket(fasttext_args_t* handle, int bucket);
CFASTTEXT_API int cft_args_get_minn(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_minn(fasttext_args_t* handle, int minn);
CFASTTEXT_API int cft_args_get_maxn(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_maxn(fasttext_args_t* handle, int maxn);
CFASTTEXT_API int cft_args_get_t(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_t(fasttext_args_t* handle, int t);
CFASTTEXT_API int cft_args_get_verbose(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_verbose(fasttext_args_t* handle, int verbose);
CFASTTEXT_API const char* cft_args_get_label(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_label(fasttext_args_t* handle, const char* label);
CFASTTEXT_API bool cft_args_get_save_output(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_save_output(fasttext_args_t* handle, bool save_output);
CFASTTEXT_API bool cft_args_get_qout(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_qout(fasttext_args_t* handle, bool qout);
CFASTTEXT_API bool cft_args_get_retrain(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_retrain(fasttext_args_t* handle, bool retrain);
CFASTTEXT_API bool cft_args_get_qnorm(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_qnorm(fasttext_args_t* handle, bool qnorm);
CFASTTEXT_API size_t cft_args_get_cutoff(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_cutoff(fasttext_args_t* handle, size_t cutoff);
CFASTTEXT_API size_t cft_args_get_dsub(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_dsub(fasttext_args_t* handle, size_t dsub);
CFASTTEXT_API const char* cft_args_get_pretrained_vectors(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_pretrained_vectors(fasttext_args_t* handle, const char* pretrained_vectors);
CFASTTEXT_API int cft_args_get_seed(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_seed(fasttext_args_t* handle, int seed);
CFASTTEXT_API const char* cft_args_get_autotune_validation_file(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_autotune_validation_file(fasttext_args_t* handle, const char* autotune_validation_file);
CFASTTEXT_API metric_name_t cft_args_get_autotune_metric(fasttext_args_t* handle);
CFASTTEXT_API const char* cft_args_get_autotune_metric_label(fasttext_args_t *handle);
CFASTTEXT_API int cft_args_get_autotune_predictions(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_autotune_predictions(fasttext_args_t* handle, int autotune_predictions);
CFASTTEXT_API int cft_args_get_autotune_duration(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_set_autotune_duration(fasttext_args_t* handle, int autotune_duration);
CFASTTEXT_API int64_t cft_args_get_autotune_model_size(fasttext_args_t* handle);
CFASTTEXT_API bool cft_args_has_autotune(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_print_help(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_print_basic_help(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_print_dictionary_help(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_print_training_help(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_print_quantization_help(fasttext_args_t* handle);
CFASTTEXT_API void cft_args_print_autotune_help(fasttext_args_t* handle);
CFASTTEXT_API fasttext_t* cft_fasttext_new(void);
CFASTTEXT_API void cft_fasttext_free(fasttext_t* handle);
CFASTTEXT_API void cft_fasttext_load_model(fasttext_t* handle, const char* filename, char** errptr);
CFASTTEXT_API void cft_fasttext_save_model(fasttext_t* handle, const char* filename, char** errptr);
CFASTTEXT_API void cft_fasttext_save_output(fasttext_t* handle, const char* filename, char** errptr);
CFASTTEXT_API void cft_fasttext_save_vectors(fasttext_t* handle, const char* filename, char** errptr);
CFASTTEXT_API int cft_fasttext_get_dimension(fasttext_t* handle);
CFASTTEXT_API int32_t cft_fasttext_get_word_id(fasttext_t* handle, const char* word);
CFASTTEXT_API int32_t cft_fasttext_get_subword_id(fasttext_t* handle, const char* word);
CFASTTEXT_API bool cft_fasttext_is_quant(fasttext_t* handle);
CFASTTEXT_API void cft_fasttext_train(fasttext_t* handle, fasttext_args_t* args, char** errptr);
CFASTTEXT_API fasttext_predictions_t* cft_fasttext_predict(fasttext_t* handle, const char* text, int32_t k, float threshold, char** errptr);
CFASTTEXT_API fasttext_predictions_t* cft_fasttext_predict_on_words(fasttext_t* handle, fasttext_words_t* words, int32_t k, float threshold, char** errptr);
CFASTTEXT_API void cft_fasttext_predictions_free(fasttext_predictions_t* predictions);
CFASTTEXT_API fasttext_vocab_t* cft_fasttext_get_vocab(fasttext_t* handle);
CFASTTEXT_API void cft_fasttext_vocab_free(fasttext_vocab_t* labels);
CFASTTEXT_API fasttext_labels_t* cft_fasttext_get_labels(fasttext_t* handle);
CFASTTEXT_API void cft_fasttext_labels_free(fasttext_labels_t* labels);
CFASTTEXT_API void cft_fasttext_quantize(fasttext_t* handle, fasttext_args_t* args, char** errptr);
CFASTTEXT_API fasttext_tokens_t* cft_fasttext_tokenize(fasttext_t* handle, const char* text);
CFASTTEXT_API void cft_fasttext_abort(fasttext_t* handle);
CFASTTEXT_API void cft_fasttext_tokens_free(fasttext_tokens_t* tokens);
CFASTTEXT_API fasttext_args_t* cft_fasttext_get_args(fasttext_t* handle);
CFASTTEXT_API void cft_fasttext_get_word_vector(fasttext_t* handle, const char* word, float* buf);
CFASTTEXT_API void cft_fasttext_get_sentence_vector(fasttext_t* handle, const char* sentence, float* buf);
CFASTTEXT_API fasttext_autotune_t* cft_autotune_new(fasttext_t *handle);
CFASTTEXT_API void cft_autotune_free(fasttext_autotune_t* handle);
CFASTTEXT_API void cft_autotune_train(fasttext_autotune_t* handle, fasttext_args_t* args, char** errptr);
#ifdef __cplusplus
}
#endif
#endif