c_api.h 51.6 KB
Newer Older
1
/*!
2
3
4
5
6
7
8
9
10
11
 * \file c_api.h
 * \copyright Copyright (c) 2016 Microsoft Corporation. All rights reserved.
 *            Licensed under the MIT License. See LICENSE file in the project root for license information.
 * \note
 * To avoid type conversion on large data, the most of our exposed interface supports both float32 and float64,
 * except the following:
 *   1. gradient and Hessian;
 *   2. current score for training and validation data.
 *   .
 * The reason is that they are called frequently, and the type conversion on them may be time-cost.
12
 */
Guolin Ke's avatar
Guolin Ke committed
13
14
#ifndef LIGHTGBM_C_API_H_
#define LIGHTGBM_C_API_H_
ww's avatar
ww committed
15

16
#include <cstdint>
17
#include <cstdio>
wxchan's avatar
wxchan committed
18
19
#include <cstring>

20
21
#include <LightGBM/export.h>

22

23
24
typedef void* DatasetHandle;  /*!< \brief Handle of dataset. */
typedef void* BoosterHandle;  /*!< \brief Handle of booster. */
Guolin Ke's avatar
Guolin Ke committed
25

26
27
28
29
#define C_API_DTYPE_FLOAT32 (0)  /*!< \brief float32 (single precision float). */
#define C_API_DTYPE_FLOAT64 (1)  /*!< \brief float64 (double precision float). */
#define C_API_DTYPE_INT32   (2)  /*!< \brief int32. */
#define C_API_DTYPE_INT64   (3)  /*!< \brief int64. */
Guolin Ke's avatar
Guolin Ke committed
30

31
32
33
34
#define C_API_PREDICT_NORMAL     (0)  /*!< \brief Normal prediction, with transform (if needed). */
#define C_API_PREDICT_RAW_SCORE  (1)  /*!< \brief Predict raw score. */
#define C_API_PREDICT_LEAF_INDEX (2)  /*!< \brief Predict leaf index. */
#define C_API_PREDICT_CONTRIB    (3)  /*!< \brief Predict feature contributions (SHAP values). */
35

Guolin Ke's avatar
Guolin Ke committed
36
/*!
37
 * \brief Get string message of the last error.
38
39
 * \return Error information
 */
40
LIGHTGBM_C_EXPORT const char* LGBM_GetLastError();
Guolin Ke's avatar
Guolin Ke committed
41

42
43
44
45
46
47
48
/*!
 * \brief Register a callback function for log redirecting. 
 * \param callback The callback function to register
 * \return 0 when succeed, -1 when failure happens
 */
LIGHTGBM_C_EXPORT int LGBM_RegisterLogCallback(void (*callback)(const char*));

Guolin Ke's avatar
Guolin Ke committed
49
// --- start Dataset interface
Guolin Ke's avatar
Guolin Ke committed
50
51

/*!
52
53
54
55
56
57
 * \brief Load dataset from file (like LightGBM CLI version does).
 * \param filename The name of the file
 * \param parameters Additional parameters
 * \param reference Used to align bin mapper with other dataset, nullptr means isn't used
 * \param[out] out A loaded dataset
 * \return 0 when succeed, -1 when failure happens
58
 */
59
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateFromFile(const char* filename,
60
61
62
                                                 const char* parameters,
                                                 const DatasetHandle reference,
                                                 DatasetHandle* out);
Guolin Ke's avatar
Guolin Ke committed
63

64
/*!
65
66
 * \brief Allocate the space for dataset and bucket feature bins according to sampled data.
 * \param sample_data Sampled data, grouped by the column
67
68
69
70
71
72
73
74
 * \param sample_indices Indices of sampled data
 * \param ncol Number of columns
 * \param num_per_col Size of each sampling column
 * \param num_sample_row Number of sampled rows
 * \param num_total_row Number of total rows
 * \param parameters Additional parameters
 * \param[out] out Created dataset
 * \return 0 when succeed, -1 when failure happens
75
 */
76
77
78
79
80
81
82
83
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateFromSampledColumn(double** sample_data,
                                                          int** sample_indices,
                                                          int32_t ncol,
                                                          const int* num_per_col,
                                                          int32_t num_sample_row,
                                                          int32_t num_total_row,
                                                          const char* parameters,
                                                          DatasetHandle* out);
Guolin Ke's avatar
Guolin Ke committed
84
85

/*!
86
 * \brief Allocate the space for dataset and bucket feature bins according to reference dataset.
87
88
89
90
 * \param reference Used to align bin mapper with other dataset
 * \param num_total_row Number of total rows
 * \param[out] out Created dataset
 * \return 0 when succeed, -1 when failure happens
91
 */
Guolin Ke's avatar
Guolin Ke committed
92
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateByReference(const DatasetHandle reference,
93
94
                                                    int64_t num_total_row,
                                                    DatasetHandle* out);
Guolin Ke's avatar
Guolin Ke committed
95
96

/*!
97
 * \brief Push data to existing dataset, if ``nrow + start_row == num_total_row``, will call ``dataset->FinishLoad``.
98
99
 * \param dataset Handle of dataset
 * \param data Pointer to the data space
100
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
101
102
103
104
 * \param nrow Number of rows
 * \param ncol Number of columns
 * \param start_row Row start index
 * \return 0 when succeed, -1 when failure happens
105
 */
Guolin Ke's avatar
Guolin Ke committed
106
LIGHTGBM_C_EXPORT int LGBM_DatasetPushRows(DatasetHandle dataset,
107
108
109
110
111
                                           const void* data,
                                           int data_type,
                                           int32_t nrow,
                                           int32_t ncol,
                                           int32_t start_row);
Guolin Ke's avatar
Guolin Ke committed
112
113

/*!
114
 * \brief Push data to existing dataset, if ``nrow + start_row == num_total_row``, will call ``dataset->FinishLoad``.
115
116
 * \param dataset Handle of dataset
 * \param indptr Pointer to row headers
117
 * \param indptr_type Type of ``indptr``, can be ``C_API_DTYPE_INT32`` or ``C_API_DTYPE_INT64``
118
119
 * \param indices Pointer to column indices
 * \param data Pointer to the data space
120
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
121
122
123
124
125
 * \param nindptr Number of rows in the matrix + 1
 * \param nelem Number of nonzero elements in the matrix
 * \param num_col Number of columns
 * \param start_row Row start index
 * \return 0 when succeed, -1 when failure happens
126
 */
Guolin Ke's avatar
Guolin Ke committed
127
LIGHTGBM_C_EXPORT int LGBM_DatasetPushRowsByCSR(DatasetHandle dataset,
128
129
130
131
132
133
134
135
136
                                                const void* indptr,
                                                int indptr_type,
                                                const int32_t* indices,
                                                const void* data,
                                                int data_type,
                                                int64_t nindptr,
                                                int64_t nelem,
                                                int64_t num_col,
                                                int64_t start_row);
Guolin Ke's avatar
Guolin Ke committed
137

Guolin Ke's avatar
Guolin Ke committed
138
/*!
139
140
 * \brief Create a dataset from CSR format.
 * \param indptr Pointer to row headers
141
 * \param indptr_type Type of ``indptr``, can be ``C_API_DTYPE_INT32`` or ``C_API_DTYPE_INT64``
142
143
 * \param indices Pointer to column indices
 * \param data Pointer to the data space
144
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
145
146
147
148
149
150
151
 * \param nindptr Number of rows in the matrix + 1
 * \param nelem Number of nonzero elements in the matrix
 * \param num_col Number of columns
 * \param parameters Additional parameters
 * \param reference Used to align bin mapper with other dataset, nullptr means isn't used
 * \param[out] out Created dataset
 * \return 0 when succeed, -1 when failure happens
152
 */
153
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateFromCSR(const void* indptr,
154
155
156
157
158
159
160
161
162
163
                                                int indptr_type,
                                                const int32_t* indices,
                                                const void* data,
                                                int data_type,
                                                int64_t nindptr,
                                                int64_t nelem,
                                                int64_t num_col,
                                                const char* parameters,
                                                const DatasetHandle reference,
                                                DatasetHandle* out);
Guolin Ke's avatar
Guolin Ke committed
164

165
/*!
166
 * \brief Create a dataset from CSR format through callbacks.
167
168
 * \param get_row_funptr Pointer to ``std::function<void(int idx, std::vector<std::pair<int, double>>& ret)>``
 *                       (called for every row and expected to clear and fill ``ret``)
169
170
171
172
173
174
 * \param num_rows Number of rows
 * \param num_col Number of columns
 * \param parameters Additional parameters
 * \param reference Used to align bin mapper with other dataset, nullptr means isn't used
 * \param[out] out Created dataset
 * \return 0 when succeed, -1 when failure happens
175
 */
176
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateFromCSRFunc(void* get_row_funptr,
177
178
179
180
181
                                                    int num_rows,
                                                    int64_t num_col,
                                                    const char* parameters,
                                                    const DatasetHandle reference,
                                                    DatasetHandle* out);
182

Guolin Ke's avatar
Guolin Ke committed
183
/*!
184
185
 * \brief Create a dataset from CSC format.
 * \param col_ptr Pointer to column headers
186
 * \param col_ptr_type Type of ``col_ptr``, can be ``C_API_DTYPE_INT32`` or ``C_API_DTYPE_INT64``
187
188
 * \param indices Pointer to row indices
 * \param data Pointer to the data space
189
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
190
191
192
193
194
195
196
 * \param ncol_ptr Number of columns in the matrix + 1
 * \param nelem Number of nonzero elements in the matrix
 * \param num_row Number of rows
 * \param parameters Additional parameters
 * \param reference Used to align bin mapper with other dataset, nullptr means isn't used
 * \param[out] out Created dataset
 * \return 0 when succeed, -1 when failure happens
197
 */
198
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateFromCSC(const void* col_ptr,
199
200
201
202
203
204
205
206
207
208
                                                int col_ptr_type,
                                                const int32_t* indices,
                                                const void* data,
                                                int data_type,
                                                int64_t ncol_ptr,
                                                int64_t nelem,
                                                int64_t num_row,
                                                const char* parameters,
                                                const DatasetHandle reference,
                                                DatasetHandle* out);
Guolin Ke's avatar
Guolin Ke committed
209
210

/*!
211
212
 * \brief Create dataset from dense matrix.
 * \param data Pointer to the data space
213
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
214
215
216
217
218
219
220
 * \param nrow Number of rows
 * \param ncol Number of columns
 * \param is_row_major 1 for row-major, 0 for column-major
 * \param parameters Additional parameters
 * \param reference Used to align bin mapper with other dataset, nullptr means isn't used
 * \param[out] out Created dataset
 * \return 0 when succeed, -1 when failure happens
221
 */
222
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateFromMat(const void* data,
223
224
225
226
227
228
229
                                                int data_type,
                                                int32_t nrow,
                                                int32_t ncol,
                                                int is_row_major,
                                                const char* parameters,
                                                const DatasetHandle reference,
                                                DatasetHandle* out);
Guolin Ke's avatar
Guolin Ke committed
230

231
/*!
232
233
234
 * \brief Create dataset from array of dense matrices.
 * \param nmat Number of dense matrices
 * \param data Pointer to the data space
235
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
236
237
238
239
240
241
242
 * \param nrow Number of rows
 * \param ncol Number of columns
 * \param is_row_major 1 for row-major, 0 for column-major
 * \param parameters Additional parameters
 * \param reference Used to align bin mapper with other dataset, nullptr means isn't used
 * \param[out] out Created dataset
 * \return 0 when succeed, -1 when failure happens
243
 */
244
245
246
247
248
249
250
251
252
253
LIGHTGBM_C_EXPORT int LGBM_DatasetCreateFromMats(int32_t nmat,
                                                 const void** data,
                                                 int data_type,
                                                 int32_t* nrow,
                                                 int32_t ncol,
                                                 int is_row_major,
                                                 const char* parameters,
                                                 const DatasetHandle reference,
                                                 DatasetHandle* out);

wxchan's avatar
wxchan committed
254
/*!
255
256
257
 * \brief Create subset of a data.
 * \param handle Handle of full dataset
 * \param used_row_indices Indices used in subset
258
 * \param num_used_row_indices Length of ``used_row_indices``
259
260
261
 * \param parameters Additional parameters
 * \param[out] out Subset of data
 * \return 0 when succeed, -1 when failure happens
262
 */
263
264
265
266
267
LIGHTGBM_C_EXPORT int LGBM_DatasetGetSubset(const DatasetHandle handle,
                                            const int32_t* used_row_indices,
                                            int32_t num_used_row_indices,
                                            const char* parameters,
                                            DatasetHandle* out);
wxchan's avatar
wxchan committed
268

Guolin Ke's avatar
Guolin Ke committed
269
/*!
270
271
272
273
274
 * \brief Save feature names to dataset.
 * \param handle Handle of dataset
 * \param feature_names Feature names
 * \param num_feature_names Number of feature names
 * \return 0 when succeed, -1 when failure happens
275
 */
276
277
278
LIGHTGBM_C_EXPORT int LGBM_DatasetSetFeatureNames(DatasetHandle handle,
                                                  const char** feature_names,
                                                  int num_feature_names);
Guolin Ke's avatar
Guolin Ke committed
279

280
/*!
281
282
283
284
285
 * \brief Get feature names of dataset.
 * \param handle Handle of dataset
 * \param[out] feature_names Feature names, should pre-allocate memory
 * \param[out] num_feature_names Number of feature names
 * \return 0 when succeed, -1 when failure happens
286
 */
287
288
289
LIGHTGBM_C_EXPORT int LGBM_DatasetGetFeatureNames(DatasetHandle handle,
                                                  char** feature_names,
                                                  int* num_feature_names);
290

Guolin Ke's avatar
Guolin Ke committed
291
/*!
292
293
294
 * \brief Free space for dataset.
 * \param handle Handle of dataset to be freed
 * \return 0 when succeed, -1 when failure happens
295
 */
296
LIGHTGBM_C_EXPORT int LGBM_DatasetFree(DatasetHandle handle);
Guolin Ke's avatar
Guolin Ke committed
297
298

/*!
299
300
 * \brief Save dataset to binary file.
 * \param handle Handle of dataset
301
 * \param filename The name of the file
302
 * \return 0 when succeed, -1 when failure happens
303
 */
304
LIGHTGBM_C_EXPORT int LGBM_DatasetSaveBinary(DatasetHandle handle,
305
                                             const char* filename);
Guolin Ke's avatar
Guolin Ke committed
306

307
/*!
308
309
 * \brief Save dataset to text file, intended for debugging use only.
 * \param handle Handle of dataset
310
 * \param filename The name of the file
311
 * \return 0 when succeed, -1 when failure happens
312
 */
313
314
315
LIGHTGBM_C_EXPORT int LGBM_DatasetDumpText(DatasetHandle handle,
                                           const char* filename);

Guolin Ke's avatar
Guolin Ke committed
316
/*!
317
 * \brief Set vector to a content in info.
318
319
320
 * \note
 * - \a group only works for ``C_API_DTYPE_INT32``;
 * - \a label and \a weight only work for ``C_API_DTYPE_FLOAT32``;
321
 * - \a init_score only works for ``C_API_DTYPE_FLOAT64``.
322
 * \param handle Handle of dataset
323
 * \param field_name Field name, can be \a label, \a weight, \a init_score, \a group
324
 * \param field_data Pointer to data vector
325
 * \param num_element Number of elements in ``field_data``
326
 * \param type Type of ``field_data`` pointer, can be ``C_API_DTYPE_INT32``, ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
327
 * \return 0 when succeed, -1 when failure happens
328
 */
329
LIGHTGBM_C_EXPORT int LGBM_DatasetSetField(DatasetHandle handle,
330
331
332
333
                                           const char* field_name,
                                           const void* field_data,
                                           int num_element,
                                           int type);
Guolin Ke's avatar
Guolin Ke committed
334
335

/*!
336
337
338
339
340
 * \brief Get info vector from dataset.
 * \param handle Handle of dataset
 * \param field_name Field name
 * \param[out] out_len Used to set result length
 * \param[out] out_ptr Pointer to the result
341
 * \param[out] out_type Type of result pointer, can be ``C_API_DTYPE_INT32``, ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
342
 * \return 0 when succeed, -1 when failure happens
343
 */
344
LIGHTGBM_C_EXPORT int LGBM_DatasetGetField(DatasetHandle handle,
345
346
347
348
                                           const char* field_name,
                                           int* out_len,
                                           const void** out_ptr,
                                           int* out_type);
Guolin Ke's avatar
Guolin Ke committed
349

350
/*!
351
352
353
354
 * \brief Raise errors for attempts to update dataset parameters.
 * \param old_parameters Current dataset parameters
 * \param new_parameters New dataset parameters
 * \return 0 when succeed, -1 when failure happens
355
 */
356
357
LIGHTGBM_C_EXPORT int LGBM_DatasetUpdateParamChecking(const char* old_parameters,
                                                      const char* new_parameters);
358

Guolin Ke's avatar
Guolin Ke committed
359
/*!
360
361
362
363
 * \brief Get number of data points.
 * \param handle Handle of dataset
 * \param[out] out The address to hold number of data points
 * \return 0 when succeed, -1 when failure happens
364
 */
365
LIGHTGBM_C_EXPORT int LGBM_DatasetGetNumData(DatasetHandle handle,
366
                                             int* out);
Guolin Ke's avatar
Guolin Ke committed
367
368

/*!
369
370
371
372
 * \brief Get number of features.
 * \param handle Handle of dataset
 * \param[out] out The address to hold number of features
 * \return 0 when succeed, -1 when failure happens
373
 */
374
LIGHTGBM_C_EXPORT int LGBM_DatasetGetNumFeature(DatasetHandle handle,
375
                                                int* out);
Guolin Ke's avatar
Guolin Ke committed
376

377
/*!
378
 * \brief Add features from ``source`` to ``target``.
379
380
381
 * \param target The handle of the dataset to add features to
 * \param source The handle of the dataset to take features from
 * \return 0 when succeed, -1 when failure happens
382
 */
383
384
385
LIGHTGBM_C_EXPORT int LGBM_DatasetAddFeaturesFrom(DatasetHandle target,
                                                  DatasetHandle source);

Guolin Ke's avatar
Guolin Ke committed
386
387
388
// --- start Booster interfaces

/*!
389
390
 * \brief Create a new boosting learner.
 * \param train_data Training dataset
391
 * \param parameters Parameters in format 'key1=value1 key2=value2'
392
 * \param[out] out Handle of created booster
393
394
 * \return 0 when succeed, -1 when failure happens
 */
395
LIGHTGBM_C_EXPORT int LGBM_BoosterCreate(const DatasetHandle train_data,
396
397
                                         const char* parameters,
                                         BoosterHandle* out);
Guolin Ke's avatar
Guolin Ke committed
398
399

/*!
400
401
402
403
404
 * \brief Load an existing booster from model file.
 * \param filename Filename of model
 * \param[out] out_num_iterations Number of iterations of this booster
 * \param[out] out Handle of created booster
 * \return 0 when succeed, -1 when failure happens
405
 */
406
407
408
LIGHTGBM_C_EXPORT int LGBM_BoosterCreateFromModelfile(const char* filename,
                                                      int* out_num_iterations,
                                                      BoosterHandle* out);
Guolin Ke's avatar
Guolin Ke committed
409

410
/*!
411
412
413
414
415
 * \brief Load an existing booster from string.
 * \param model_str Model string
 * \param[out] out_num_iterations Number of iterations of this booster
 * \param[out] out Handle of created booster
 * \return 0 when succeed, -1 when failure happens
416
 */
417
418
419
LIGHTGBM_C_EXPORT int LGBM_BoosterLoadModelFromString(const char* model_str,
                                                      int* out_num_iterations,
                                                      BoosterHandle* out);
wxchan's avatar
wxchan committed
420

Guolin Ke's avatar
Guolin Ke committed
421
/*!
422
423
424
 * \brief Free space for booster.
 * \param handle Handle of booster to be freed
 * \return 0 when succeed, -1 when failure happens
425
 */
426
LIGHTGBM_C_EXPORT int LGBM_BoosterFree(BoosterHandle handle);
Guolin Ke's avatar
Guolin Ke committed
427

428
/*!
429
430
431
432
433
 * \brief Shuffle models.
 * \param handle Handle of booster
 * \param start_iter The first iteration that will be shuffled
 * \param end_iter The last iteration that will be shuffled
 * \return 0 when succeed, -1 when failure happens
434
 */
435
436
437
LIGHTGBM_C_EXPORT int LGBM_BoosterShuffleModels(BoosterHandle handle,
                                                int start_iter,
                                                int end_iter);
438

wxchan's avatar
wxchan committed
439
/*!
440
 * \brief Merge model from ``other_handle`` into ``handle``.
441
442
443
 * \param handle Handle of booster, will merge another booster into this one
 * \param other_handle Other handle of booster
 * \return 0 when succeed, -1 when failure happens
444
 */
445
LIGHTGBM_C_EXPORT int LGBM_BoosterMerge(BoosterHandle handle,
446
                                        BoosterHandle other_handle);
wxchan's avatar
wxchan committed
447
448

/*!
449
450
451
452
 * \brief Add new validation data to booster.
 * \param handle Handle of booster
 * \param valid_data Validation dataset
 * \return 0 when succeed, -1 when failure happens
453
 */
454
LIGHTGBM_C_EXPORT int LGBM_BoosterAddValidData(BoosterHandle handle,
455
                                               const DatasetHandle valid_data);
wxchan's avatar
wxchan committed
456
457

/*!
458
459
460
461
 * \brief Reset training data for booster.
 * \param handle Handle of booster
 * \param train_data Training dataset
 * \return 0 when succeed, -1 when failure happens
462
 */
463
LIGHTGBM_C_EXPORT int LGBM_BoosterResetTrainingData(BoosterHandle handle,
464
                                                    const DatasetHandle train_data);
wxchan's avatar
wxchan committed
465
466

/*!
467
468
 * \brief Reset config for booster.
 * \param handle Handle of booster
469
 * \param parameters Parameters in format 'key1=value1 key2=value2'
470
 * \return 0 when succeed, -1 when failure happens
471
 */
472
473
LIGHTGBM_C_EXPORT int LGBM_BoosterResetParameter(BoosterHandle handle,
                                                 const char* parameters);
wxchan's avatar
wxchan committed
474
475

/*!
476
477
478
479
 * \brief Get number of classes.
 * \param handle Handle of booster
 * \param[out] out_len Number of classes
 * \return 0 when succeed, -1 when failure happens
480
 */
481
482
LIGHTGBM_C_EXPORT int LGBM_BoosterGetNumClasses(BoosterHandle handle,
                                                int* out_len);
wxchan's avatar
wxchan committed
483

Guolin Ke's avatar
Guolin Ke committed
484
/*!
485
486
 * \brief Update the model for one iteration.
 * \param handle Handle of booster
487
 * \param[out] is_finished 1 means the update was successfully finished (cannot split any more), 0 indicates failure
488
 * \return 0 when succeed, -1 when failure happens
489
 */
490
491
LIGHTGBM_C_EXPORT int LGBM_BoosterUpdateOneIter(BoosterHandle handle,
                                                int* is_finished);
Guolin Ke's avatar
Guolin Ke committed
492

Guolin Ke's avatar
Guolin Ke committed
493
/*!
494
495
496
 * \brief Refit the tree model using the new data (online learning).
 * \param handle Handle of booster
 * \param leaf_preds Pointer to predicted leaf indices
497
498
 * \param nrow Number of rows of ``leaf_preds``
 * \param ncol Number of columns of ``leaf_preds``
499
 * \return 0 when succeed, -1 when failure happens
500
 */
501
502
503
504
LIGHTGBM_C_EXPORT int LGBM_BoosterRefit(BoosterHandle handle,
                                        const int32_t* leaf_preds,
                                        int32_t nrow,
                                        int32_t ncol);
Guolin Ke's avatar
Guolin Ke committed
505

Guolin Ke's avatar
Guolin Ke committed
506
/*!
507
508
509
510
511
 * \brief Update the model by specifying gradient and Hessian directly
 *        (this can be used to support customized loss functions).
 * \param handle Handle of booster
 * \param grad The first order derivative (gradient) statistics
 * \param hess The second order derivative (Hessian) statistics
512
 * \param[out] is_finished 1 means the update was successfully finished (cannot split any more), 0 indicates failure
513
 * \return 0 when succeed, -1 when failure happens
514
 */
515
LIGHTGBM_C_EXPORT int LGBM_BoosterUpdateOneIterCustom(BoosterHandle handle,
516
517
518
                                                      const float* grad,
                                                      const float* hess,
                                                      int* is_finished);
Guolin Ke's avatar
Guolin Ke committed
519
520

/*!
521
522
523
 * \brief Rollback one iteration.
 * \param handle Handle of booster
 * \return 0 when succeed, -1 when failure happens
524
 */
525
LIGHTGBM_C_EXPORT int LGBM_BoosterRollbackOneIter(BoosterHandle handle);
wxchan's avatar
wxchan committed
526
527

/*!
528
529
530
531
 * \brief Get index of the current boosting iteration.
 * \param handle Handle of booster
 * \param[out] out_iteration Index of the current boosting iteration
 * \return 0 when succeed, -1 when failure happens
532
 */
533
534
LIGHTGBM_C_EXPORT int LGBM_BoosterGetCurrentIteration(BoosterHandle handle,
                                                      int* out_iteration);
Guolin Ke's avatar
Guolin Ke committed
535

536
/*!
537
538
539
540
 * \brief Get number of trees per iteration.
 * \param handle Handle of booster
 * \param[out] out_tree_per_iteration Number of trees per iteration
 * \return 0 when succeed, -1 when failure happens
541
 */
542
543
LIGHTGBM_C_EXPORT int LGBM_BoosterNumModelPerIteration(BoosterHandle handle,
                                                       int* out_tree_per_iteration);
544
545

/*!
546
547
548
549
 * \brief Get number of weak sub-models.
 * \param handle Handle of booster
 * \param[out] out_models Number of weak sub-models
 * \return 0 when succeed, -1 when failure happens
550
 */
551
552
LIGHTGBM_C_EXPORT int LGBM_BoosterNumberOfTotalModel(BoosterHandle handle,
                                                     int* out_models);
553

Guolin Ke's avatar
Guolin Ke committed
554
/*!
555
556
557
558
 * \brief Get number of evaluation datasets.
 * \param handle Handle of booster
 * \param[out] out_len Total number of evaluation datasets
 * \return 0 when succeed, -1 when failure happens
559
 */
560
561
LIGHTGBM_C_EXPORT int LGBM_BoosterGetEvalCounts(BoosterHandle handle,
                                                int* out_len);
wxchan's avatar
wxchan committed
562
563

/*!
564
565
 * \brief Get names of evaluation datasets.
 * \param handle Handle of booster
566
567
 * \param len Number of ``char*`` pointers stored at ``out_strs``.
 *            If smaller than the max size, only this many strings are copied
568
 * \param[out] out_len Total number of evaluation datasets
569
570
571
 * \param buffer_len Size of pre-allocated strings. 
 *                   Content is copied up to ``buffer_len - 1`` and null-terminated
 * \param[out] out_buffer_len String sizes required to do the full string copies
572
573
 * \param[out] out_strs Names of evaluation datasets, should pre-allocate memory
 * \return 0 when succeed, -1 when failure happens
574
 */
575
LIGHTGBM_C_EXPORT int LGBM_BoosterGetEvalNames(BoosterHandle handle,
576
                                               const int len,
577
                                               int* out_len,
578
579
                                               const size_t buffer_len,
                                               size_t* out_buffer_len,
580
                                               char** out_strs);
wxchan's avatar
wxchan committed
581

wxchan's avatar
wxchan committed
582
/*!
583
584
 * \brief Get names of features.
 * \param handle Handle of booster
585
586
 * \param len Number of ``char*`` pointers stored at ``out_strs``.
 *            If smaller than the max size, only this many strings are copied
587
 * \param[out] out_len Total number of features
588
589
590
 * \param buffer_len Size of pre-allocated strings.
 *                   Content is copied up to ``buffer_len - 1`` and null-terminated
 * \param[out] out_buffer_len String sizes required to do the full string copies
591
592
 * \param[out] out_strs Names of features, should pre-allocate memory
 * \return 0 when succeed, -1 when failure happens
593
 */
594
LIGHTGBM_C_EXPORT int LGBM_BoosterGetFeatureNames(BoosterHandle handle,
595
                                                  const int len,
596
                                                  int* out_len,
597
598
                                                  const size_t buffer_len,
                                                  size_t* out_buffer_len,
599
                                                  char** out_strs);
wxchan's avatar
wxchan committed
600
601

/*!
602
603
604
605
 * \brief Get number of features.
 * \param handle Handle of booster
 * \param[out] out_len Total number of features
 * \return 0 when succeed, -1 when failure happens
606
 */
607
608
LIGHTGBM_C_EXPORT int LGBM_BoosterGetNumFeature(BoosterHandle handle,
                                                int* out_len);
wxchan's avatar
wxchan committed
609

wxchan's avatar
wxchan committed
610
/*!
611
 * \brief Get evaluation for training data and validation data.
612
613
614
 * \note
 *   1. You should call ``LGBM_BoosterGetEvalNames`` first to get the names of evaluation datasets.
 *   2. You should pre-allocate memory for ``out_results``, you can get its length by ``LGBM_BoosterGetEvalCounts``.
615
616
617
 * \param handle Handle of booster
 * \param data_idx Index of data, 0: training data, 1: 1st validation data, 2: 2nd validation data and so on
 * \param[out] out_len Length of output result
618
 * \param[out] out_results Array with evaluation results
619
 * \return 0 when succeed, -1 when failure happens
620
 */
621
LIGHTGBM_C_EXPORT int LGBM_BoosterGetEval(BoosterHandle handle,
622
623
624
                                          int data_idx,
                                          int* out_len,
                                          double* out_results);
Guolin Ke's avatar
Guolin Ke committed
625
626

/*!
627
628
 * \brief Get number of predictions for training data and validation data
 *        (this can be used to support customized evaluation functions).
629
630
631
632
 * \param handle Handle of booster
 * \param data_idx Index of data, 0: training data, 1: 1st validation data, 2: 2nd validation data and so on
 * \param[out] out_len Number of predictions
 * \return 0 when succeed, -1 when failure happens
633
 */
634
LIGHTGBM_C_EXPORT int LGBM_BoosterGetNumPredict(BoosterHandle handle,
635
636
                                                int data_idx,
                                                int64_t* out_len);
Guolin Ke's avatar
Guolin Ke committed
637

Guolin Ke's avatar
Guolin Ke committed
638
/*!
639
 * \brief Get prediction for training data and validation data.
640
641
 * \note
 * You should pre-allocate memory for ``out_result``, its length is equal to ``num_class * num_data``.
642
643
644
645
646
 * \param handle Handle of booster
 * \param data_idx Index of data, 0: training data, 1: 1st validation data, 2: 2nd validation data and so on
 * \param[out] out_len Length of output result
 * \param[out] out_result Pointer to array with predictions
 * \return 0 when succeed, -1 when failure happens
647
 */
648
LIGHTGBM_C_EXPORT int LGBM_BoosterGetPredict(BoosterHandle handle,
649
650
651
                                             int data_idx,
                                             int64_t* out_len,
                                             double* out_result);
Guolin Ke's avatar
Guolin Ke committed
652

653
/*!
654
655
656
657
658
 * \brief Make prediction for file.
 * \param handle Handle of booster
 * \param data_filename Filename of file with data
 * \param data_has_header Whether file has header or not
 * \param predict_type What should be predicted
659
660
661
662
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
663
 * \param num_iteration Number of iterations for prediction, <= 0 means no limit
664
 * \param parameter Other parameters for prediction, e.g. early stopping for prediction
665
666
 * \param result_filename Filename of result file in which predictions will be written
 * \return 0 when succeed, -1 when failure happens
667
 */
668
LIGHTGBM_C_EXPORT int LGBM_BoosterPredictForFile(BoosterHandle handle,
669
670
671
672
                                                 const char* data_filename,
                                                 int data_has_header,
                                                 int predict_type,
                                                 int num_iteration,
673
                                                 const char* parameter,
674
                                                 const char* result_filename);
675

Guolin Ke's avatar
Guolin Ke committed
676
/*!
677
678
679
680
 * \brief Get number of predictions.
 * \param handle Handle of booster
 * \param num_row Number of rows
 * \param predict_type What should be predicted
681
682
683
684
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
685
686
687
 * \param num_iteration Number of iterations for prediction, <= 0 means no limit
 * \param[out] out_len Length of prediction
 * \return 0 when succeed, -1 when failure happens
688
 */
689
LIGHTGBM_C_EXPORT int LGBM_BoosterCalcNumPredict(BoosterHandle handle,
690
691
692
693
                                                 int num_row,
                                                 int predict_type,
                                                 int num_iteration,
                                                 int64_t* out_len);
Guolin Ke's avatar
Guolin Ke committed
694

Guolin Ke's avatar
Guolin Ke committed
695
/*!
696
 * \brief Make prediction for a new dataset in CSR format.
697
698
699
700
701
 * \note
 * You should pre-allocate memory for ``out_result``:
 *   - for normal and raw score, its length is equal to ``num_class * num_data``;
 *   - for leaf index, its length is equal to ``num_class * num_data * num_iteration``;
 *   - for feature contributions, its length is equal to ``num_class * num_data * (num_feature + 1)``.
702
703
 * \param handle Handle of booster
 * \param indptr Pointer to row headers
704
 * \param indptr_type Type of ``indptr``, can be ``C_API_DTYPE_INT32`` or ``C_API_DTYPE_INT64``
705
706
 * \param indices Pointer to column indices
 * \param data Pointer to the data space
707
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
708
709
 * \param nindptr Number of rows in the matrix + 1
 * \param nelem Number of nonzero elements in the matrix
710
 * \param num_col Number of columns
711
 * \param predict_type What should be predicted
712
713
714
715
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
716
717
718
719
720
 * \param num_iteration Number of iterations for prediction, <= 0 means no limit
 * \param parameter Other parameters for prediction, e.g. early stopping for prediction
 * \param[out] out_len Length of output result
 * \param[out] out_result Pointer to array with predictions
 * \return 0 when succeed, -1 when failure happens
721
 */
722
LIGHTGBM_C_EXPORT int LGBM_BoosterPredictForCSR(BoosterHandle handle,
723
724
725
726
727
728
729
730
731
732
                                                const void* indptr,
                                                int indptr_type,
                                                const int32_t* indices,
                                                const void* data,
                                                int data_type,
                                                int64_t nindptr,
                                                int64_t nelem,
                                                int64_t num_col,
                                                int predict_type,
                                                int num_iteration,
733
                                                const char* parameter,
734
735
                                                int64_t* out_len,
                                                double* out_result);
Guolin Ke's avatar
Guolin Ke committed
736

737
/*!
738
 * \brief Make prediction for a new dataset in CSR format. This method re-uses the internal predictor structure
739
 *        from previous calls and is optimized for single row invocation.
740
741
742
743
744
 * \note
 * You should pre-allocate memory for ``out_result``:
 *   - for normal and raw score, its length is equal to ``num_class * num_data``;
 *   - for leaf index, its length is equal to ``num_class * num_data * num_iteration``;
 *   - for feature contributions, its length is equal to ``num_class * num_data * (num_feature + 1)``.
745
746
 * \param handle Handle of booster
 * \param indptr Pointer to row headers
747
 * \param indptr_type Type of ``indptr``, can be ``C_API_DTYPE_INT32`` or ``C_API_DTYPE_INT64``
748
749
 * \param indices Pointer to column indices
 * \param data Pointer to the data space
750
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
751
752
 * \param nindptr Number of rows in the matrix + 1
 * \param nelem Number of nonzero elements in the matrix
753
 * \param num_col Number of columns
754
 * \param predict_type What should be predicted
755
756
757
758
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
759
 * \param num_iteration Number of iterations for prediction, <= 0 means no limit
760
 * \param parameter Other parameters for prediction, e.g. early stopping for prediction
761
762
763
 * \param[out] out_len Length of output result
 * \param[out] out_result Pointer to array with predictions
 * \return 0 when succeed, -1 when failure happens
764
 */
765
LIGHTGBM_C_EXPORT int LGBM_BoosterPredictForCSRSingleRow(BoosterHandle handle,
766
767
768
769
770
771
772
773
774
775
776
777
778
                                                         const void* indptr,
                                                         int indptr_type,
                                                         const int32_t* indices,
                                                         const void* data,
                                                         int data_type,
                                                         int64_t nindptr,
                                                         int64_t nelem,
                                                         int64_t num_col,
                                                         int predict_type,
                                                         int num_iteration,
                                                         const char* parameter,
                                                         int64_t* out_len,
                                                         double* out_result);
779

Guolin Ke's avatar
Guolin Ke committed
780
/*!
781
 * \brief Make prediction for a new dataset in CSC format.
782
783
784
785
786
 * \note
 * You should pre-allocate memory for ``out_result``:
 *   - for normal and raw score, its length is equal to ``num_class * num_data``;
 *   - for leaf index, its length is equal to ``num_class * num_data * num_iteration``;
 *   - for feature contributions, its length is equal to ``num_class * num_data * (num_feature + 1)``.
787
788
 * \param handle Handle of booster
 * \param col_ptr Pointer to column headers
789
 * \param col_ptr_type Type of ``col_ptr``, can be ``C_API_DTYPE_INT32`` or ``C_API_DTYPE_INT64``
790
791
 * \param indices Pointer to row indices
 * \param data Pointer to the data space
792
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
793
794
795
796
 * \param ncol_ptr Number of columns in the matrix + 1
 * \param nelem Number of nonzero elements in the matrix
 * \param num_row Number of rows
 * \param predict_type What should be predicted
797
798
799
800
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
801
 * \param num_iteration Number of iteration for prediction, <= 0 means no limit
802
 * \param parameter Other parameters for prediction, e.g. early stopping for prediction
803
804
805
 * \param[out] out_len Length of output result
 * \param[out] out_result Pointer to array with predictions
 * \return 0 when succeed, -1 when failure happens
806
 */
807
LIGHTGBM_C_EXPORT int LGBM_BoosterPredictForCSC(BoosterHandle handle,
808
809
810
811
812
813
814
815
816
817
                                                const void* col_ptr,
                                                int col_ptr_type,
                                                const int32_t* indices,
                                                const void* data,
                                                int data_type,
                                                int64_t ncol_ptr,
                                                int64_t nelem,
                                                int64_t num_row,
                                                int predict_type,
                                                int num_iteration,
818
                                                const char* parameter,
819
820
                                                int64_t* out_len,
                                                double* out_result);
Guolin Ke's avatar
Guolin Ke committed
821
822

/*!
823
 * \brief Make prediction for a new dataset.
824
825
826
827
828
 * \note
 * You should pre-allocate memory for ``out_result``:
 *   - for normal and raw score, its length is equal to ``num_class * num_data``;
 *   - for leaf index, its length is equal to ``num_class * num_data * num_iteration``;
 *   - for feature contributions, its length is equal to ``num_class * num_data * (num_feature + 1)``.
829
830
 * \param handle Handle of booster
 * \param data Pointer to the data space
831
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
832
833
834
835
 * \param nrow Number of rows
 * \param ncol Number of columns
 * \param is_row_major 1 for row-major, 0 for column-major
 * \param predict_type What should be predicted
836
837
838
839
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
840
 * \param num_iteration Number of iteration for prediction, <= 0 means no limit
841
 * \param parameter Other parameters for prediction, e.g. early stopping for prediction
842
843
844
 * \param[out] out_len Length of output result
 * \param[out] out_result Pointer to array with predictions
 * \return 0 when succeed, -1 when failure happens
845
 */
846
LIGHTGBM_C_EXPORT int LGBM_BoosterPredictForMat(BoosterHandle handle,
847
848
849
850
851
852
853
                                                const void* data,
                                                int data_type,
                                                int32_t nrow,
                                                int32_t ncol,
                                                int is_row_major,
                                                int predict_type,
                                                int num_iteration,
854
                                                const char* parameter,
855
856
                                                int64_t* out_len,
                                                double* out_result);
Guolin Ke's avatar
Guolin Ke committed
857

858
/*!
859
 * \brief Make prediction for a new dataset. This method re-uses the internal predictor structure
860
 *        from previous calls and is optimized for single row invocation.
861
862
863
864
865
 * \note
 * You should pre-allocate memory for ``out_result``:
 *   - for normal and raw score, its length is equal to ``num_class * num_data``;
 *   - for leaf index, its length is equal to ``num_class * num_data * num_iteration``;
 *   - for feature contributions, its length is equal to ``num_class * num_data * (num_feature + 1)``.
866
867
 * \param handle Handle of booster
 * \param data Pointer to the data space
868
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
869
 * \param ncol Number columns
870
 * \param is_row_major 1 for row-major, 0 for column-major
871
 * \param predict_type What should be predicted
872
873
874
875
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
876
 * \param num_iteration Number of iteration for prediction, <= 0 means no limit
877
 * \param parameter Other parameters for prediction, e.g. early stopping for prediction
878
879
880
 * \param[out] out_len Length of output result
 * \param[out] out_result Pointer to array with predictions
 * \return 0 when succeed, -1 when failure happens
881
 */
882
LIGHTGBM_C_EXPORT int LGBM_BoosterPredictForMatSingleRow(BoosterHandle handle,
883
884
885
886
887
888
889
890
891
                                                         const void* data,
                                                         int data_type,
                                                         int ncol,
                                                         int is_row_major,
                                                         int predict_type,
                                                         int num_iteration,
                                                         const char* parameter,
                                                         int64_t* out_len,
                                                         double* out_result);
892
893
894

/*!
 * \brief Make prediction for a new dataset presented in a form of array of pointers to rows.
895
896
897
898
899
 * \note
 * You should pre-allocate memory for ``out_result``:
 *   - for normal and raw score, its length is equal to ``num_class * num_data``;
 *   - for leaf index, its length is equal to ``num_class * num_data * num_iteration``;
 *   - for feature contributions, its length is equal to ``num_class * num_data * (num_feature + 1)``.
900
901
 * \param handle Handle of booster
 * \param data Pointer to the data space
902
 * \param data_type Type of ``data`` pointer, can be ``C_API_DTYPE_FLOAT32`` or ``C_API_DTYPE_FLOAT64``
903
904
905
 * \param nrow Number of rows
 * \param ncol Number columns
 * \param predict_type What should be predicted
906
907
908
909
 *   - ``C_API_PREDICT_NORMAL``: normal prediction, with transform (if needed);
 *   - ``C_API_PREDICT_RAW_SCORE``: raw score;
 *   - ``C_API_PREDICT_LEAF_INDEX``: leaf index;
 *   - ``C_API_PREDICT_CONTRIB``: feature contributions (SHAP values)
910
 * \param num_iteration Number of iteration for prediction, <= 0 means no limit
911
 * \param parameter Other parameters for prediction, e.g. early stopping for prediction
912
913
914
 * \param[out] out_len Length of output result
 * \param[out] out_result Pointer to array with predictions
 * \return 0 when succeed, -1 when failure happens
915
 */
916
917
918
919
920
921
922
923
924
925
LIGHTGBM_C_EXPORT int LGBM_BoosterPredictForMats(BoosterHandle handle,
                                                 const void** data,
                                                 int data_type,
                                                 int32_t nrow,
                                                 int32_t ncol,
                                                 int predict_type,
                                                 int num_iteration,
                                                 const char* parameter,
                                                 int64_t* out_len,
                                                 double* out_result);
926

Guolin Ke's avatar
Guolin Ke committed
927
/*!
928
929
930
931
 * \brief Save model into file.
 * \param handle Handle of booster
 * \param start_iteration Start index of the iteration that should be saved
 * \param num_iteration Index of the iteration that should be saved, <= 0 means save all
932
 * \param filename The name of the file
933
 * \return 0 when succeed, -1 when failure happens
934
 */
935
LIGHTGBM_C_EXPORT int LGBM_BoosterSaveModel(BoosterHandle handle,
936
                                            int start_iteration,
937
938
                                            int num_iteration,
                                            const char* filename);
Guolin Ke's avatar
Guolin Ke committed
939

940
/*!
941
942
943
944
 * \brief Save model to string.
 * \param handle Handle of booster
 * \param start_iteration Start index of the iteration that should be saved
 * \param num_iteration Index of the iteration that should be saved, <= 0 means save all
945
 * \param buffer_len String buffer length, if ``buffer_len < out_len``, you should re-allocate buffer
946
947
948
 * \param[out] out_len Actual output length
 * \param[out] out_str String of model, should pre-allocate memory
 * \return 0 when succeed, -1 when failure happens
949
 */
950
LIGHTGBM_C_EXPORT int LGBM_BoosterSaveModelToString(BoosterHandle handle,
951
                                                    int start_iteration,
952
                                                    int num_iteration,
953
954
                                                    int64_t buffer_len,
                                                    int64_t* out_len,
955
                                                    char* out_str);
956

wxchan's avatar
wxchan committed
957
/*!
958
959
960
 * \brief Dump model to JSON.
 * \param handle Handle of booster
 * \param start_iteration Start index of the iteration that should be dumped
961
962
 * \param num_iteration Index of the iteration that should be dumped, <= 0 means dump all
 * \param buffer_len String buffer length, if ``buffer_len < out_len``, you should re-allocate buffer
963
964
965
 * \param[out] out_len Actual output length
 * \param[out] out_str JSON format string of model, should pre-allocate memory
 * \return 0 when succeed, -1 when failure happens
966
 */
967
LIGHTGBM_C_EXPORT int LGBM_BoosterDumpModel(BoosterHandle handle,
968
                                            int start_iteration,
969
                                            int num_iteration,
970
971
                                            int64_t buffer_len,
                                            int64_t* out_len,
972
                                            char* out_str);
973

Guolin Ke's avatar
Guolin Ke committed
974
/*!
975
976
977
978
979
980
 * \brief Get leaf value.
 * \param handle Handle of booster
 * \param tree_idx Index of tree
 * \param leaf_idx Index of leaf
 * \param[out] out_val Output result from the specified leaf
 * \return 0 when succeed, -1 when failure happens
981
 */
982
LIGHTGBM_C_EXPORT int LGBM_BoosterGetLeafValue(BoosterHandle handle,
983
984
985
                                               int tree_idx,
                                               int leaf_idx,
                                               double* out_val);
Guolin Ke's avatar
Guolin Ke committed
986
987

/*!
988
989
990
991
992
993
 * \brief Set leaf value.
 * \param handle Handle of booster
 * \param tree_idx Index of tree
 * \param leaf_idx Index of leaf
 * \param val Leaf value
 * \return 0 when succeed, -1 when failure happens
994
 */
995
LIGHTGBM_C_EXPORT int LGBM_BoosterSetLeafValue(BoosterHandle handle,
996
997
998
                                               int tree_idx,
                                               int leaf_idx,
                                               double val);
999

1000
/*!
1001
1002
1003
1004
 * \brief Get model feature importance.
 * \param handle Handle of booster
 * \param num_iteration Number of iterations for which feature importance is calculated, <= 0 means use all
 * \param importance_type Method of importance calculation:
1005
1006
 *   - 0 for split, result contains numbers of times the feature is used in a model;
 *   - 1 for gain, result contains total gains of splits which use the feature
1007
1008
 * \param[out] out_results Result array with feature importance
 * \return 0 when succeed, -1 when failure happens
1009
 */
1010
1011
1012
1013
1014
LIGHTGBM_C_EXPORT int LGBM_BoosterFeatureImportance(BoosterHandle handle,
                                                    int num_iteration,
                                                    int importance_type,
                                                    double* out_results);

1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
/*!
 * \brief Get model upper bound value.
 * \param handle Handle of booster
 * \param[out] out_results Result pointing to max value
 * \return 0 when succeed, -1 when failure happens
 */
LIGHTGBM_C_EXPORT int LGBM_BoosterGetUpperBoundValue(BoosterHandle handle,
                                                     double* out_results);

/*!
 * \brief Get model lower bound value.
 * \param handle Handle of booster
 * \param[out] out_results Result pointing to min value
 * \return 0 when succeed, -1 when failure happens
 */
LIGHTGBM_C_EXPORT int LGBM_BoosterGetLowerBoundValue(BoosterHandle handle,
                                                     double* out_results);

1033
/*!
1034
1035
1036
1037
1038
1039
 * \brief Initialize the network.
 * \param machines List of machines in format 'ip1:port1,ip2:port2'
 * \param local_listen_port TCP listen port for local machines
 * \param listen_time_out Socket time-out in minutes
 * \param num_machines Total number of machines
 * \return 0 when succeed, -1 when failure happens
1040
 */
1041
1042
1043
1044
1045
1046
LIGHTGBM_C_EXPORT int LGBM_NetworkInit(const char* machines,
                                       int local_listen_port,
                                       int listen_time_out,
                                       int num_machines);

/*!
1047
1048
 * \brief Finalize the network.
 * \return 0 when succeed, -1 when failure happens
1049
 */
1050
1051
LIGHTGBM_C_EXPORT int LGBM_NetworkFree();

1052
1053
1054
1055
1056
1057
1058
/*!
 * \brief Initialize the network with external collective functions.
 * \param num_machines Total number of machines
 * \param rank Rank of local machine
 * \param reduce_scatter_ext_fun The external reduce-scatter function
 * \param allgather_ext_fun The external allgather function
 * \return 0 when succeed, -1 when failure happens
1059
1060
1061
 */
LIGHTGBM_C_EXPORT int LGBM_NetworkInitWithFunctions(int num_machines,
                                                    int rank,
1062
                                                    void* reduce_scatter_ext_fun,
1063
                                                    void* allgather_ext_fun);
1064

Guolin Ke's avatar
Guolin Ke committed
1065
#if defined(_MSC_VER)
1066
#define THREAD_LOCAL __declspec(thread)  /*!< \brief Thread local specifier. */
Guolin Ke's avatar
Guolin Ke committed
1067
#else
1068
#define THREAD_LOCAL thread_local  /*!< \brief Thread local specifier. */
Guolin Ke's avatar
Guolin Ke committed
1069
#endif
1070
1071
1072
1073
1074

/*!
 * \brief Handle of error message.
 * \return Error message
 */
1075
static char* LastErrorMsg() { static THREAD_LOCAL char err_msg[512] = "Everything is fine"; return err_msg; }
1076

1077
1078
1079
#ifdef _MSC_VER
  #pragma warning(disable : 4996)
#endif
1080
1081
1082
1083
/*!
 * \brief Set string message of the last error.
 * \param msg Error message
 */
1084
inline void LGBM_SetLastError(const char* msg) {
1085
1086
  const int err_buf_len = 512;
  snprintf(LastErrorMsg(), err_buf_len, "%s", msg);
1087
1088
}

1089
#endif  // LIGHTGBM_C_API_H_