1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
/* automatically generated by rust-bindgen */

#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_t {
    _unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_args_t {
    _unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_autotune_t {
    _unused: [u8; 0],
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_prediction_t {
    pub prob: f32,
    pub label: *mut ::std::os::raw::c_char,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_predictions_t {
    pub predictions: *mut fasttext_prediction_t,
    pub length: usize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_tokens_t {
    pub tokens: *mut *mut ::std::os::raw::c_char,
    pub length: usize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_words_t {
    pub words: *const i32,
    pub length: usize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_vocab_t {
    pub words: *mut *mut ::std::os::raw::c_char,
    pub freqs: *const i64,
    pub length: usize,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct fasttext_labels_t {
    pub labels: *mut *mut ::std::os::raw::c_char,
    pub freqs: *const i64,
    pub length: usize,
}
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum model_name_t {
    MODEL_CBOW = 1,
    MODEL_SG = 2,
    MODEL_SUP = 3,
}
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum loss_name_t {
    LOSS_HS = 1,
    LOSS_NS = 2,
    LOSS_SOFTMAX = 3,
    LOSS_OVA = 4,
}
#[repr(u32)]
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum metric_name_t {
    F1_SCORE = 1,
    LABEL_F1_SCORE = 2,
}

extern "C" {
    pub fn cft_str_free(s: *mut ::std::os::raw::c_char);
    pub fn cft_args_new() -> *mut fasttext_args_t;
    pub fn cft_args_parse(
        handle: *mut fasttext_args_t,
        argc: ::std::os::raw::c_int,
        argv: *mut *mut ::std::os::raw::c_char,
    );
    pub fn cft_args_free(handle: *mut fasttext_args_t);
    pub fn cft_args_get_input(handle: *mut fasttext_args_t) -> *const ::std::os::raw::c_char;
    pub fn cft_args_set_input(handle: *mut fasttext_args_t, input: *const ::std::os::raw::c_char);
    pub fn cft_args_get_output(handle: *mut fasttext_args_t) -> *const ::std::os::raw::c_char;
    pub fn cft_args_set_output(handle: *mut fasttext_args_t, output: *const ::std::os::raw::c_char);
    pub fn cft_args_get_lr(handle: *mut fasttext_args_t) -> ::std::os::raw::c_double;
    pub fn cft_args_set_lr(handle: *mut fasttext_args_t, lr: ::std::os::raw::c_double);
    pub fn cft_args_get_lr_update_rate(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_lr_update_rate(handle: *mut fasttext_args_t, lr: ::std::os::raw::c_int);
    pub fn cft_args_get_dim(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_dim(handle: *mut fasttext_args_t, dim: ::std::os::raw::c_int);
    pub fn cft_args_get_ws(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_ws(handle: *mut fasttext_args_t, ws: ::std::os::raw::c_int);
    pub fn cft_args_get_epoch(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_epoch(handle: *mut fasttext_args_t, epoch: ::std::os::raw::c_int);
    pub fn cft_args_get_thread(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_thread(handle: *mut fasttext_args_t, thread: ::std::os::raw::c_int);
    pub fn cft_args_get_model(handle: *mut fasttext_args_t) -> model_name_t;
    pub fn cft_args_set_model(handle: *mut fasttext_args_t, model: model_name_t);
    pub fn cft_args_get_loss(handle: *mut fasttext_args_t) -> loss_name_t;
    pub fn cft_args_set_loss(handle: *mut fasttext_args_t, loss: loss_name_t);
    pub fn cft_args_get_min_count(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_min_count(handle: *mut fasttext_args_t, min_count: ::std::os::raw::c_int);
    pub fn cft_args_get_min_count_label(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_min_count_label(
        handle: *mut fasttext_args_t,
        min_count: ::std::os::raw::c_int,
    );
    pub fn cft_args_get_neg(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_neg(handle: *mut fasttext_args_t, neg: ::std::os::raw::c_int);
    pub fn cft_args_get_word_ngrams(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_word_ngrams(handle: *mut fasttext_args_t, ngrams: ::std::os::raw::c_int);
    pub fn cft_args_get_bucket(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_bucket(handle: *mut fasttext_args_t, bucket: ::std::os::raw::c_int);
    pub fn cft_args_get_minn(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_minn(handle: *mut fasttext_args_t, minn: ::std::os::raw::c_int);
    pub fn cft_args_get_maxn(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_maxn(handle: *mut fasttext_args_t, maxn: ::std::os::raw::c_int);
    pub fn cft_args_get_t(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_t(handle: *mut fasttext_args_t, t: ::std::os::raw::c_int);
    pub fn cft_args_get_verbose(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_verbose(handle: *mut fasttext_args_t, verbose: ::std::os::raw::c_int);
    pub fn cft_args_get_label(handle: *mut fasttext_args_t) -> *const ::std::os::raw::c_char;
    pub fn cft_args_set_label(handle: *mut fasttext_args_t, label: *const ::std::os::raw::c_char);
    pub fn cft_args_get_save_output(handle: *mut fasttext_args_t) -> bool;
    pub fn cft_args_set_save_output(handle: *mut fasttext_args_t, save_output: bool);
    pub fn cft_args_get_qout(handle: *mut fasttext_args_t) -> bool;
    pub fn cft_args_set_qout(handle: *mut fasttext_args_t, qout: bool);
    pub fn cft_args_get_retrain(handle: *mut fasttext_args_t) -> bool;
    pub fn cft_args_set_retrain(handle: *mut fasttext_args_t, retrain: bool);
    pub fn cft_args_get_qnorm(handle: *mut fasttext_args_t) -> bool;
    pub fn cft_args_set_qnorm(handle: *mut fasttext_args_t, qnorm: bool);
    pub fn cft_args_get_cutoff(handle: *mut fasttext_args_t) -> usize;
    pub fn cft_args_set_cutoff(handle: *mut fasttext_args_t, cutoff: usize);
    pub fn cft_args_get_dsub(handle: *mut fasttext_args_t) -> usize;
    pub fn cft_args_set_dsub(handle: *mut fasttext_args_t, dsub: usize);
    pub fn cft_args_get_pretrained_vectors(
        handle: *mut fasttext_args_t,
    ) -> *const ::std::os::raw::c_char;
    pub fn cft_args_set_pretrained_vectors(
        handle: *mut fasttext_args_t,
        vectors: *const ::std::os::raw::c_char,
    );
    pub fn cft_args_get_seed(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_seed(handle: *mut fasttext_args_t, seed: ::std::os::raw::c_int);
    pub fn cft_args_get_autotune_validation_file(
        handle: *mut fasttext_args_t,
    ) -> *const ::std::os::raw::c_char;
    pub fn cft_args_set_autotune_validation_file(
        handle: *mut fasttext_args_t,
        autotune_validation_file: *const ::std::os::raw::c_char,
    );
    pub fn cft_args_get_autotune_metric(handle: *mut fasttext_args_t) -> metric_name_t;
    pub fn cft_args_get_autotune_metric_label(
        handle: *mut fasttext_args_t,
    ) -> *const ::std::os::raw::c_char;
    pub fn cft_args_get_autotune_model_size(handle: *mut fasttext_args_t) -> i64;
    pub fn cft_args_has_autotune(handle: *mut fasttext_args_t) -> bool;
    pub fn cft_args_get_autotune_predictions(handle: *mut fasttext_args_t)
        -> ::std::os::raw::c_int;
    pub fn cft_args_set_autotune_predictions(
        handle: *mut fasttext_args_t,
        autotune_predictions: ::std::os::raw::c_int,
    );
    pub fn cft_args_get_autotune_duration(handle: *mut fasttext_args_t) -> ::std::os::raw::c_int;
    pub fn cft_args_set_autotune_duration(
        handle: *mut fasttext_args_t,
        autotune_duration: ::std::os::raw::c_int,
    );
    pub fn cft_args_print_help(handle: *mut fasttext_args_t);
    pub fn cft_args_print_basic_help(handle: *mut fasttext_args_t);
    pub fn cft_args_print_dictionary_help(handle: *mut fasttext_args_t);
    pub fn cft_args_print_training_help(handle: *mut fasttext_args_t);
    pub fn cft_args_print_quantization_help(handle: *mut fasttext_args_t);

    pub fn cft_fasttext_new() -> *mut fasttext_t;
    pub fn cft_fasttext_free(handle: *mut fasttext_t);
    pub fn cft_fasttext_get_args(handle: *mut fasttext_t) -> *mut fasttext_args_t;
    pub fn cft_fasttext_load_model(
        handle: *mut fasttext_t,
        filename: *const ::std::os::raw::c_char,
        errptr: *mut *mut ::std::os::raw::c_char,
    );
    pub fn cft_fasttext_save_model(
        handle: *mut fasttext_t,
        filename: *const ::std::os::raw::c_char,
        errptr: *mut *mut ::std::os::raw::c_char,
    );
    pub fn cft_fasttext_save_output(
        handle: *mut fasttext_t,
        filename: *const ::std::os::raw::c_char,
        errptr: *mut *mut ::std::os::raw::c_char,
    );
    pub fn cft_fasttext_save_vectors(
        handle: *mut fasttext_t,
        filename: *const ::std::os::raw::c_char,
        errptr: *mut *mut ::std::os::raw::c_char,
    );
    pub fn cft_fasttext_get_dimension(handle: *mut fasttext_t) -> ::std::os::raw::c_int;
    pub fn cft_fasttext_get_word_id(
        handle: *mut fasttext_t,
        word: *const ::std::os::raw::c_char,
    ) -> i32;
    pub fn cft_fasttext_get_subword_id(
        handle: *mut fasttext_t,
        word: *const ::std::os::raw::c_char,
    ) -> i32;
    pub fn cft_fasttext_is_quant(handle: *mut fasttext_t) -> bool;
    pub fn cft_fasttext_train(
        handle: *mut fasttext_t,
        args: *mut fasttext_args_t,
        errptr: *mut *mut ::std::os::raw::c_char,
    );
    pub fn cft_fasttext_predict(
        handle: *mut fasttext_t,
        text: *const ::std::os::raw::c_char,
        k: i32,
        threshold: f32,
        errptr: *mut *mut ::std::os::raw::c_char,
    ) -> *mut fasttext_predictions_t;
    pub fn cft_fasttext_predict_on_words(
        handle: *mut fasttext_t,
        words: *const fasttext_words_t,
        k: i32,
        threshold: f32,
        errptr: *mut *mut ::std::os::raw::c_char,
    ) -> *mut fasttext_predictions_t;
    pub fn cft_fasttext_predictions_free(predictions: *mut fasttext_predictions_t);
    pub fn cft_fasttext_get_vocab(handle: *mut fasttext_t) -> *mut fasttext_vocab_t;
    pub fn cft_fasttext_vocab_free(labels: *mut fasttext_vocab_t);
    pub fn cft_fasttext_get_labels(handle: *mut fasttext_t) -> *mut fasttext_labels_t;
    pub fn cft_fasttext_labels_free(labels: *mut fasttext_labels_t);
    pub fn cft_fasttext_quantize(
        handle: *mut fasttext_t,
        args: *mut fasttext_args_t,
        errptr: *mut *mut ::std::os::raw::c_char,
    );
    pub fn cft_fasttext_get_word_vector(
        handle: *mut fasttext_t,
        word: *const ::std::os::raw::c_char,
        buf: *mut ::std::os::raw::c_float,
    );
    pub fn cft_fasttext_get_sentence_vector(
        handle: *mut fasttext_t,
        sentence: *const ::std::os::raw::c_char,
        buf: *mut ::std::os::raw::c_float,
    );
    pub fn cft_fasttext_abort(handle: *mut fasttext_t);
    pub fn cft_fasttext_tokenize(
        handle: *mut fasttext_t,
        text: *const ::std::os::raw::c_char,
    ) -> *mut fasttext_tokens_t;
    pub fn cft_fasttext_tokens_free(tokens: *mut fasttext_tokens_t);
    pub fn cft_autotune_new(handle: *mut fasttext_t) -> *mut fasttext_autotune_t;
    pub fn cft_autotune_free(handle: *mut fasttext_autotune_t);
    pub fn cft_autotune_train(
        handle: *mut fasttext_autotune_t,
        args: *mut fasttext_args_t,
        errptr: *mut *mut ::std::os::raw::c_char,
    );
}