Note: In this file, LiblineaR refers to this R package, while LIBLINEAR refers to the original C/C++ library.

2.10.25
	- Bug fixing: predict() sent a stale feature count to the C code whenever newx had extra columns beyond those used at training time (e.g. an ID or label column left in by mistake): the count was computed before newx was subset down to the training features, not after, misaligning every row after the first once the mismatch hit the compiled predictor. Found while adding a regression test for predict()'s column-reordering support, not by inspection alone. Fixed by recomputing the count after subsetting.
	- Behavior change: default value of 'epsilon' changed from the literal 0.01 to NULL, so omitting 'epsilon' now reaches LIBLINEAR's own per-solver default (0.01 for primal solvers, 0.1 for dual solvers) as documented, instead of always 0.01. This changes convergence (and resulting coefficients) for existing callers who omit 'epsilon' on a dual solver (type 1, 3, 4, 7, 12 or 13). Explicit epsilon=0 now also routes to the solver default rather than an effectively unsatisfiable stopping criterion.
	- Bug fixing: class-weight argument 'wi' validation was inverted, requiring every class to be named instead of validating that supplied names are legitimate class labels; the documented "partial wi" usage (not all classes need weights) always failed with "Mismatch between provided names for 'wi' and class labels." Fixed.
	- Bug fixing: predict() now accepts a plain vector for 'newx' (converted to an n x 1 matrix), as documented; it previously failed with an unrelated "argument is of length zero" error.
	- Bug fixing: 'cost', 'bias', 'epsilon' and 'svr_eps' are now validated at the R level before training; invalid values (e.g. cost<=0) previously reached the C code silently and returned a model with an all-zero weight matrix instead of an error.
	- Bug fixing (C code): a training call rejected by internal parameter validation (e.g. cost<=0) leaked its input buffers; fixed.
	- Bug fixing (C code): predicting with a corrupted/invalid model object could crash the R session (NULL pointer dereference in predictLinear); it now raises a clean R error instead.
	- Bug fixing (C code): the dense-data allocation-size computation in the training C code used 32-bit arithmetic that could silently overflow for very large datasets (n*p approaching 2^31), risking memory corruption; it is now computed safely and errors clearly if the dataset is too large.
	- Added a testthat-based test suite (tests/testthat/) alongside the existing tests/testLiblineaR.R: regression tests for all of the above, plus CORE numeric-correctness tests (reference coefficients, solver-equivalence and sparse/dense-equivalence checks).
	- Added Chih-Jen Lin as copyright holder (cph) in Authors@R for the bundled LIBLINEAR C/C++ code, and a LICENSE.note file reproducing its BSD-3-Clause notice.
	- Added src/Makevars (Unix), mirroring src/Makevars.win, to link BLAS/Fortran symbols explicitly instead of relying on implicit resolution.
	- Simplified inst/CITATION to derive the author list from DESCRIPTION's Authors@R instead of a hand-maintained copy.
	- Updated DESCRIPTION's URL field: the old one (dnalytics.com/software/liblinear/) is dead; now points to www.dnalytics.com/publications.
	- Migrated the parameter sweep in tests/testLiblineaR.R (every classification type x weighting x row order x target encoding, every regression type x row order) into tests/testthat/test-train-types-classification.R and test-train-types-regression.R: the diagnostics that sweep always computed (dimOK, perfOK, sumOK, biasOK, levelsOK) are now actually asserted instead of sitting in an unused data frame. Doing so for the first time surfaced that two of the original pass thresholds (0.9 for weighted-perfNeg, 0.6 for weighted-multiclass perf) had never actually been achievable and were recalibrated against observed behavior; the rest held.
	- Added tests for findC, predict(proba=), predict(decisionValues=), predict() column alignment, and cross-validation (dense and regression); migrated the sparse-matrix cross-validation smoke test to an asserted comparison against dense. tests/testLiblineaR.R and tests/RSquared.R removed, fully superseded by tests/testthat/.
	- Test suite: 0 assertions -> 855, across 11 testthat files.
	- Added a vignette (vignettes/LiblineaR-intro.Rmd): solver-type selection, what bias/epsilon/svr_eps actually default to, sparse input, class weighting with wi, and heuristicC()/cross/findC for choosing cost. Adds knitr and rmarkdown to Suggests, VignetteBuilder: knitr.

2.10.24
	- Updated calls in cpp files to match RS.h headers (Free -> R_Free, Realloc -> R_Realloc, Calloc -> R_Calloc). 
	
2.10.23
	- Security patch: Better format input of Rprintf by providing a string literal in tron.cpp and linear.cpp
	- Update in CITATION and DESCRIPTION to comply with new formatting specifications 

2.10.22
	- Added compatibility with sparse matrices of class gdTMatrix from package Matrix. Tests updated accordingly.
	- Added compatibility with sparse matrices of class matrix.csc and matrix.coo from package SparseM. Tests updated accordingly.
        - Updating CITATION to reflect contributions from all co-autors.
        - Update in C code: Corrected declaration of two C prototypes; Replacement of sprintf by vsnprintf. 
	- Bug fixing: Removed two unwanted calls to browser() in R tests; 
	- Reformatting this NEWS file.

2.10.12
	- Added compatibility with sparse matrices of class gdCMatrix and dgRMatrix from package Matrix. As a consequence, package Matrix has been added to 'Suggests' in DESCRIPTION file. Compatibility with matrix.csr from package SparseM is still supported. The type of matrix (dense or either type of sparse matrix) is detected automatically. Signatures of functions LiblineaR and predict are unchanged.
	- Package now imports methods package (to support use of 'as' function in order to convert from some matrix formats to others).
	- Corrected a few typos in comments

2.10.8 
	- Upgraded to LIBLINEAR version 2.10, including cross-validation procedure to find parameter C.
	- Two extra arguments in the LiblineaR function.
	- Argument bias from LiblineaR function can now be given as a numeric, allowing to tune the value of the additional bias feature. This change is backwards-compatible with the previous use of booleans.

1.94.2
	- Cleaned DESCRIPTION
	- library(SparseM) replaced by 'require' or 'requireNamespace' as appropriate.

1.94.1
	- Upgraded to LIBLINEAR version 1.94, including support vector *regression*
	- argument labels of function LiblineaR was renamed as target. The old naming is still accepted with a warning
	- argument type of function LiblineaR may take extra values (11,12,13)
	- extra argument svr_eps of function LiblineaR for the tolerance of regression loss
	- if class labels are -1 and 1, ensure that positive decision values represent the class 1
	- enriched examples, with cases of regression
	- Fix CITATION file format to satisfy CRAN requirements
	- Cleaning and reformatting of man pages
	- Fixing a bug in class labels ordering 
	
1.80.11
	- Refactored C code in order to facilitate upgrades of LIBLINEAR.
	- Fix memory leak in predictLinear (the buffer x wasn't freed)
	
1.80.10
	- Shortened examples runtime.
	- Uniformized notations in DESCRIPTION file for LiblineaR (this package) and LIBLINEAR (the C/C++ library wrapped by this package). 

1.80.9
	- Replaced all expressions: rand()%(a-b); by GetRNGstate(); (int) (unif_rand()*(a - b))%(a - b);PutRNGstate(); in linear.cpp, where a and b might take different values.

1.80.8
	- Corrected a bug in memory allocation for sparse matrices: src/trainLinear.c. These changes are to be credited to Christian Wolf.
	- Added a PACKAGE argument to speed up call to .C(...)

1.80.7
	- Modification of various files in order to support sparse matrices. These changes are mainly to be credited to Kai-Hsiang Hsu, from the Department of Computer Science of the National Taiwan University.
	- Addition of examples to reflect the use of sparse matrices in LiblineaR.Rd

1.80.6
	- Corrected a memory mapping bug in predictLinear.c

1.80.5
	- Suppress printing to stdout in linear.cpp, tron.cpp
	- Suppress the use of exit(1); in predictLinear.c
	- Correct a bug when retrieving weights from C to R for multi-class models
 
1.80.4
	- Correct bugs in linear.cpp (update of solve_l1r_l2_svc and solve_l1r_lr)

1.80.3
	- Cleaning of C code

1.80.2
	- Incorporate changes from LIBLINEAR versions 1.51 to 1.80
	- Use set_print_string_function to set the print function
	- Add free_model_content and free_and_destroy_model functions (avoid memory problem if users declare a model variable)
	- Add check_probability_model (consistent with libsvm)
	- A new solver: coordinate descent for dual logistic regression
	- New optimization method for l1-regularized logistic regression
	- linear.cpp: Use 1-norm stopping condition for l1-regularized solvers; newton_iter < l/10 replaced by newton_iter <= l/10 in l2r_lr_dual (for l < 10).
	- predict.LiblineaR function can return additional information: probabilities (only for logistic regression models) or decision values

