[package]
edition = "2024"
rust-version = "1.87.0"
name = "basin"
version = "1.11.0"
authors = ["Johan Larsson <johan@jolars.co>"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Numerical optimization in pure Rust, with pluggable linear-algebra backends and WASM support."
homepage = "https://basin.rs"
documentation = "https://docs.rs/basin"
readme = "README.md"
keywords = [
"optimization",
"math",
"numerics",
"solver",
"nonlinear",
]
categories = [
"mathematics",
"science",
"algorithms",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/jolars/basin"
[package.metadata.docs.rs]
features = [
"faer_latest",
"nalgebra_latest-lapack",
"ndarray_latest-blas",
"parallel",
"problems",
"serde",
]
rustdoc-args = [
"--cfg",
"docsrs",
]
[features]
default = ["problems"]
faer = ["faer_v0_24"]
faer_all = []
faer_latest = ["faer_v0_24"]
faer_v0_22 = [
"faer_all",
"dep:faer_0_22",
"dep:faer_traits_0_22",
"dep:generativity",
]
faer_v0_23 = [
"faer_all",
"dep:faer_0_23",
"dep:faer_traits_0_23",
"dep:generativity",
]
faer_v0_24 = [
"faer_all",
"dep:faer",
"dep:faer-traits",
"dep:generativity",
]
nalgebra = ["nalgebra_v0_34"]
nalgebra-lapack = ["nalgebra_v0_34-lapack"]
nalgebra_all = []
nalgebra_latest = ["nalgebra_v0_35"]
nalgebra_latest-lapack = ["nalgebra_v0_35-lapack"]
nalgebra_v0_32 = [
"nalgebra_all",
"dep:nalgebra_0_32",
"dep:nalgebra_sparse_0_9",
]
nalgebra_v0_32-lapack = [
"nalgebra_v0_32",
"dep:nalgebra_lapack_0_24",
]
nalgebra_v0_33 = [
"nalgebra_all",
"dep:nalgebra_0_33",
"dep:nalgebra_sparse_0_10",
]
nalgebra_v0_33-lapack = [
"nalgebra_v0_33",
"dep:nalgebra_lapack_0_25",
]
nalgebra_v0_34 = [
"nalgebra_all",
"dep:nalgebra_0_34",
"dep:nalgebra_sparse_0_11",
]
nalgebra_v0_34-lapack = [
"nalgebra_v0_34",
"dep:nalgebra_lapack_0_27",
"nalgebra_lapack_0_27/lapack-custom",
]
nalgebra_v0_35 = [
"nalgebra_all",
"dep:nalgebra",
"dep:nalgebra-sparse",
]
nalgebra_v0_35-lapack = [
"nalgebra_v0_35",
"dep:nalgebra-lapack",
"nalgebra-lapack/lapack-custom",
]
ndarray = ["ndarray_v0_17"]
ndarray-blas = ["ndarray_v0_17-blas"]
ndarray_all = []
ndarray_latest = ["ndarray_v0_17"]
ndarray_latest-blas = ["ndarray_v0_17-blas"]
ndarray_v0_15 = [
"ndarray_all",
"dep:ndarray_0_15",
]
ndarray_v0_15-blas = [
"ndarray_v0_15",
"ndarray_0_15/blas",
]
ndarray_v0_16 = [
"ndarray_all",
"dep:ndarray_0_16",
]
ndarray_v0_16-blas = [
"ndarray_v0_16",
"ndarray_0_16/blas",
]
ndarray_v0_17 = [
"ndarray_all",
"dep:ndarray",
]
ndarray_v0_17-blas = [
"ndarray_v0_17",
"ndarray/blas",
]
parallel = [
"dep:rayon",
"faer?/rayon",
"faer_0_22?/rayon",
"faer_0_23?/rayon",
]
problems = []
serde = [
"dep:serde",
"dep:bincode",
"rand_chacha/serde",
"nalgebra?/serde-serialize",
"nalgebra_0_32?/serde-serialize",
"nalgebra_0_33?/serde-serialize",
"nalgebra_0_34?/serde-serialize",
"ndarray?/serde",
"ndarray_0_15?/serde",
"ndarray_0_16?/serde",
]
[lib]
name = "basin"
path = "src/lib.rs"
[[example]]
name = "favicon"
path = "examples/favicon.rs"
[[example]]
name = "logo"
path = "examples/logo.rs"
[[example]]
name = "nelder_mead"
path = "examples/nelder_mead.rs"
[[example]]
name = "rosenbrock"
path = "examples/rosenbrock.rs"
[[example]]
name = "simulated_annealing_tsp"
path = "examples/simulated_annealing_tsp.rs"
[[test]]
name = "augmented_lagrangian_faer"
path = "tests/augmented_lagrangian_faer.rs"
[[test]]
name = "augmented_lagrangian_nalgebra"
path = "tests/augmented_lagrangian_nalgebra.rs"
[[test]]
name = "augmented_lagrangian_ndarray"
path = "tests/augmented_lagrangian_ndarray.rs"
[[test]]
name = "augmented_lagrangian_vec"
path = "tests/augmented_lagrangian_vec.rs"
[[test]]
name = "barrier_method_faer"
path = "tests/barrier_method_faer.rs"
[[test]]
name = "barrier_method_nalgebra"
path = "tests/barrier_method_nalgebra.rs"
[[test]]
name = "barrier_method_ndarray"
path = "tests/barrier_method_ndarray.rs"
[[test]]
name = "barrier_method_vec"
path = "tests/barrier_method_vec.rs"
[[test]]
name = "basin_hopping_vec"
path = "tests/basin_hopping_vec.rs"
[[test]]
name = "bfgs"
path = "tests/bfgs.rs"
[[test]]
name = "bfgs_faer"
path = "tests/bfgs_faer.rs"
[[test]]
name = "bfgs_ndarray"
path = "tests/bfgs_ndarray.rs"
[[test]]
name = "bfgs_vec"
path = "tests/bfgs_vec.rs"
[[test]]
name = "bounded_cma_es_faer"
path = "tests/bounded_cma_es_faer.rs"
[[test]]
name = "bounded_cma_es_nalgebra"
path = "tests/bounded_cma_es_nalgebra.rs"
[[test]]
name = "bounded_cma_es_ndarray"
path = "tests/bounded_cma_es_ndarray.rs"
[[test]]
name = "bounded_cma_es_vec"
path = "tests/bounded_cma_es_vec.rs"
[[test]]
name = "bounded_cma_inject_lbfgsb_faer"
path = "tests/bounded_cma_inject_lbfgsb_faer.rs"
[[test]]
name = "bounded_cma_inject_lbfgsb_nalgebra"
path = "tests/bounded_cma_inject_lbfgsb_nalgebra.rs"
[[test]]
name = "bounded_cma_inject_lbfgsb_ndarray"
path = "tests/bounded_cma_inject_lbfgsb_ndarray.rs"
[[test]]
name = "bounded_cma_inject_lbfgsb_vec"
path = "tests/bounded_cma_inject_lbfgsb_vec.rs"
[[test]]
name = "bounded_nelder_mead"
path = "tests/bounded_nelder_mead.rs"
[[test]]
name = "brent_root"
path = "tests/brent_root.rs"
[[test]]
name = "cancellation"
path = "tests/cancellation.rs"
[[test]]
name = "checkpoint"
path = "tests/checkpoint.rs"
[[test]]
name = "cma_es_faer"
path = "tests/cma_es_faer.rs"
[[test]]
name = "cma_es_nalgebra"
path = "tests/cma_es_nalgebra.rs"
[[test]]
name = "cma_es_ndarray"
path = "tests/cma_es_ndarray.rs"
[[test]]
name = "cma_es_vec"
path = "tests/cma_es_vec.rs"
[[test]]
name = "cma_inject_faer"
path = "tests/cma_inject_faer.rs"
[[test]]
name = "cma_inject_lm_nalgebra"
path = "tests/cma_inject_lm_nalgebra.rs"
[[test]]
name = "cma_inject_nalgebra"
path = "tests/cma_inject_nalgebra.rs"
[[test]]
name = "cma_inject_ndarray"
path = "tests/cma_inject_ndarray.rs"
[[test]]
name = "cma_inject_solver_failed_bubbles"
path = "tests/cma_inject_solver_failed_bubbles.rs"
[[test]]
name = "cma_inject_vec"
path = "tests/cma_inject_vec.rs"
[[test]]
name = "cobyla_full_constraints"
path = "tests/cobyla_full_constraints.rs"
[[test]]
name = "cobyla_public"
path = "tests/cobyla_public.rs"
[[test]]
name = "convergence_api"
path = "tests/convergence_api.rs"
[[test]]
name = "de"
path = "tests/de.rs"
[[test]]
name = "de_inject_lbfgsb_nalgebra"
path = "tests/de_inject_lbfgsb_nalgebra.rs"
[[test]]
name = "de_inject_nalgebra"
path = "tests/de_inject_nalgebra.rs"
[[test]]
name = "de_inject_solver_failed_bubbles"
path = "tests/de_inject_solver_failed_bubbles.rs"
[[test]]
name = "exact_checkpoint"
path = "tests/exact_checkpoint.rs"
[[test]]
name = "example_bounded_cma_inject_lm"
path = "tests/example_bounded_cma_inject_lm.rs"
[[test]]
name = "example_observer"
path = "tests/example_observer.rs"
[[test]]
name = "f32_round_trip"
path = "tests/f32_round_trip.rs"
[[test]]
name = "from_start_round_trip"
path = "tests/from_start_round_trip.rs"
[[test]]
name = "fused_problem"
path = "tests/fused_problem.rs"
[[test]]
name = "gauss_newton_faer"
path = "tests/gauss_newton_faer.rs"
[[test]]
name = "gauss_newton_faer_sparse"
path = "tests/gauss_newton_faer_sparse.rs"
[[test]]
name = "gauss_newton_nalgebra"
path = "tests/gauss_newton_nalgebra.rs"
[[test]]
name = "gauss_newton_nalgebra_sparse"
path = "tests/gauss_newton_nalgebra_sparse.rs"
[[test]]
name = "gauss_newton_ndarray"
path = "tests/gauss_newton_ndarray.rs"
[[test]]
name = "gauss_newton_vec"
path = "tests/gauss_newton_vec.rs"
[[test]]
name = "gbnm"
path = "tests/gbnm.rs"
[[test]]
name = "gbnm_backends"
path = "tests/gbnm_backends.rs"
[[test]]
name = "gbnm_resume"
path = "tests/gbnm_resume.rs"
[[test]]
name = "global_best_pso"
path = "tests/global_best_pso.rs"
[[test]]
name = "global_best_pso_backends"
path = "tests/global_best_pso_backends.rs"
[[test]]
name = "global_best_pso_resume"
path = "tests/global_best_pso_resume.rs"
[[test]]
name = "hager_zhang"
path = "tests/hager_zhang.rs"
[[test]]
name = "hager_zhang_backends"
path = "tests/hager_zhang_backends.rs"
[[test]]
name = "inner_executor"
path = "tests/inner_executor.rs"
[[test]]
name = "lapack_nalgebra"
path = "tests/lapack_nalgebra.rs"
[[test]]
name = "lbfgs_line_search_evaluations"
path = "tests/lbfgs_line_search_evaluations.rs"
[[test]]
name = "lbfgs_unbounded"
path = "tests/lbfgs_unbounded.rs"
[[test]]
name = "lbfgsb_faer"
path = "tests/lbfgsb_faer.rs"
[[test]]
name = "lbfgsb_iter_parity"
path = "tests/lbfgsb_iter_parity.rs"
[[test]]
name = "lbfgsb_line_search_bounds"
path = "tests/lbfgsb_line_search_bounds.rs"
[[test]]
name = "lbfgsb_nalgebra"
path = "tests/lbfgsb_nalgebra.rs"
[[test]]
name = "lbfgsb_ndarray"
path = "tests/lbfgsb_ndarray.rs"
[[test]]
name = "lbfgsb_vec"
path = "tests/lbfgsb_vec.rs"
[[test]]
name = "levenberg_marquardt_damping"
path = "tests/levenberg_marquardt_damping.rs"
[[test]]
name = "levenberg_marquardt_faer"
path = "tests/levenberg_marquardt_faer.rs"
[[test]]
name = "levenberg_marquardt_faer_sparse"
path = "tests/levenberg_marquardt_faer_sparse.rs"
[[test]]
name = "levenberg_marquardt_nalgebra"
path = "tests/levenberg_marquardt_nalgebra.rs"
[[test]]
name = "levenberg_marquardt_nalgebra_sparse"
path = "tests/levenberg_marquardt_nalgebra_sparse.rs"
[[test]]
name = "levenberg_marquardt_ndarray"
path = "tests/levenberg_marquardt_ndarray.rs"
[[test]]
name = "levenberg_marquardt_no_progress"
path = "tests/levenberg_marquardt_no_progress.rs"
[[test]]
name = "levenberg_marquardt_qr"
path = "tests/levenberg_marquardt_qr.rs"
[[test]]
name = "levenberg_marquardt_stopping"
path = "tests/levenberg_marquardt_stopping.rs"
[[test]]
name = "levenberg_marquardt_vec"
path = "tests/levenberg_marquardt_vec.rs"
[[test]]
name = "lincoa_public"
path = "tests/lincoa_public.rs"
[[test]]
name = "ma_ls_ch_cma_faer"
path = "tests/ma_ls_ch_cma_faer.rs"
[[test]]
name = "ma_ls_ch_cma_nalgebra"
path = "tests/ma_ls_ch_cma_nalgebra.rs"
[[test]]
name = "ma_ls_ch_cma_ndarray"
path = "tests/ma_ls_ch_cma_ndarray.rs"
[[test]]
name = "ma_ls_ch_cma_vec"
path = "tests/ma_ls_ch_cma_vec.rs"
[[test]]
name = "ma_ls_ch_sw_faer"
path = "tests/ma_ls_ch_sw_faer.rs"
[[test]]
name = "ma_ls_ch_sw_nalgebra"
path = "tests/ma_ls_ch_sw_nalgebra.rs"
[[test]]
name = "ma_ls_ch_sw_ndarray"
path = "tests/ma_ls_ch_sw_ndarray.rs"
[[test]]
name = "ma_ls_ch_sw_vec"
path = "tests/ma_ls_ch_sw_vec.rs"
[[test]]
name = "mads_bounded"
path = "tests/mads_bounded.rs"
[[test]]
name = "mads_constrained"
path = "tests/mads_constrained.rs"
[[test]]
name = "mads_public"
path = "tests/mads_public.rs"
[[test]]
name = "nelder_mead"
path = "tests/nelder_mead.rs"
[[test]]
name = "nelder_mead_bound_clones"
path = "tests/nelder_mead_bound_clones.rs"
[[test]]
name = "newuoa_public"
path = "tests/newuoa_public.rs"
[[test]]
name = "numdiff"
path = "tests/numdiff.rs"
[[test]]
name = "observers"
path = "tests/observers.rs"
[[test]]
name = "pivoted_qr"
path = "tests/pivoted_qr.rs"
[[test]]
name = "population_parallel_reproducibility"
path = "tests/population_parallel_reproducibility.rs"
[[test]]
name = "projected_gradient_descent_faer"
path = "tests/projected_gradient_descent_faer.rs"
[[test]]
name = "projected_gradient_descent_nalgebra"
path = "tests/projected_gradient_descent_nalgebra.rs"
[[test]]
name = "projected_gradient_descent_ndarray"
path = "tests/projected_gradient_descent_ndarray.rs"
[[test]]
name = "projected_gradient_descent_vec"
path = "tests/projected_gradient_descent_vec.rs"
[[test]]
name = "random_search_faer"
path = "tests/random_search_faer.rs"
[[test]]
name = "random_search_nalgebra"
path = "tests/random_search_nalgebra.rs"
[[test]]
name = "random_search_ndarray"
path = "tests/random_search_ndarray.rs"
[[test]]
name = "random_search_vec"
path = "tests/random_search_vec.rs"
[[test]]
name = "rosenbrock"
path = "tests/rosenbrock.rs"
[[test]]
name = "rosenbrock_faer"
path = "tests/rosenbrock_faer.rs"
[[test]]
name = "rosenbrock_nalgebra"
path = "tests/rosenbrock_nalgebra.rs"
[[test]]
name = "rosenbrock_ndarray"
path = "tests/rosenbrock_ndarray.rs"
[[test]]
name = "simulated_annealing"
path = "tests/simulated_annealing.rs"
[[test]]
name = "simulated_annealing_backends"
path = "tests/simulated_annealing_backends.rs"
[[test]]
name = "simulated_annealing_resume"
path = "tests/simulated_annealing_resume.rs"
[[test]]
name = "solis_wets_faer"
path = "tests/solis_wets_faer.rs"
[[test]]
name = "solis_wets_nalgebra"
path = "tests/solis_wets_nalgebra.rs"
[[test]]
name = "solis_wets_ndarray"
path = "tests/solis_wets_ndarray.rs"
[[test]]
name = "solis_wets_vec"
path = "tests/solis_wets_vec.rs"
[[test]]
name = "ssga"
path = "tests/ssga.rs"
[[test]]
name = "starter_observers"
path = "tests/starter_observers.rs"
[[test]]
name = "stepper"
path = "tests/stepper.rs"
[[test]]
name = "stochastic_exact_resume"
path = "tests/stochastic_exact_resume.rs"
[[test]]
name = "termination"
path = "tests/termination.rs"
[[test]]
name = "test"
path = "tests/test.rs"
[[test]]
name = "trf_custom_jacobian"
path = "tests/trf_custom_jacobian.rs"
[[test]]
name = "trf_faer"
path = "tests/trf_faer.rs"
[[test]]
name = "trf_faer_sparse"
path = "tests/trf_faer_sparse.rs"
[[test]]
name = "trf_nalgebra"
path = "tests/trf_nalgebra.rs"
[[test]]
name = "trf_nalgebra_sparse"
path = "tests/trf_nalgebra_sparse.rs"
[[test]]
name = "trf_ndarray"
path = "tests/trf_ndarray.rs"
[[test]]
name = "trf_vec"
path = "tests/trf_vec.rs"
[[test]]
name = "typed_error_hard_abort"
path = "tests/typed_error_hard_abort.rs"
[[bench]]
name = "lm_backends"
path = "benches/lm_backends.rs"
harness = false
required-features = [
"nalgebra_all",
"faer_all",
"problems",
]
[[bench]]
name = "rosenbrock"
path = "benches/rosenbrock.rs"
harness = false
[[bench]]
name = "solver_backends"
path = "benches/solver_backends.rs"
harness = false
required-features = [
"nalgebra_all",
"ndarray_all",
"faer_all",
"problems",
]
[dependencies.bincode]
version = "2"
features = ["serde"]
optional = true
[dependencies.faer]
version = "0.24"
features = [
"std",
"linalg",
]
optional = true
default-features = false
[dependencies.faer-traits]
version = "0.24"
optional = true
default-features = false
[dependencies.faer_0_22]
version = "0.22"
features = [
"std",
"linalg",
]
optional = true
default-features = false
package = "faer"
[dependencies.faer_0_23]
version = "0.23"
features = [
"std",
"linalg",
]
optional = true
default-features = false
package = "faer"
[dependencies.faer_traits_0_22]
version = "0.22"
optional = true
default-features = false
package = "faer-traits"
[dependencies.faer_traits_0_23]
version = "0.23"
optional = true
default-features = false
package = "faer-traits"
[dependencies.generativity]
version = "1"
optional = true
[dependencies.nalgebra]
version = "0.35"
optional = true
[dependencies.nalgebra-lapack]
version = "0.28"
optional = true
default-features = false
[dependencies.nalgebra-sparse]
version = "0.12"
optional = true
[dependencies.nalgebra_0_32]
version = "0.32"
optional = true
package = "nalgebra"
[dependencies.nalgebra_0_33]
version = "0.33"
optional = true
package = "nalgebra"
[dependencies.nalgebra_0_34]
version = "0.34"
optional = true
package = "nalgebra"
[dependencies.nalgebra_lapack_0_24]
version = "0.24"
optional = true
default-features = false
package = "nalgebra-lapack"
[dependencies.nalgebra_lapack_0_25]
version = "0.25"
optional = true
default-features = false
package = "nalgebra-lapack"
[dependencies.nalgebra_lapack_0_27]
version = "0.27"
optional = true
default-features = false
package = "nalgebra-lapack"
[dependencies.nalgebra_sparse_0_10]
version = "0.10"
optional = true
package = "nalgebra-sparse"
[dependencies.nalgebra_sparse_0_11]
version = "0.11"
optional = true
package = "nalgebra-sparse"
[dependencies.nalgebra_sparse_0_9]
version = "0.9"
optional = true
package = "nalgebra-sparse"
[dependencies.ndarray]
version = "0.17"
optional = true
default-features = false
[dependencies.ndarray_0_15]
version = "0.15"
optional = true
default-features = false
package = "ndarray"
[dependencies.ndarray_0_16]
version = "0.16"
optional = true
default-features = false
package = "ndarray"
[dependencies.num-traits]
version = "0.2"
features = ["std"]
default-features = false
[dependencies.rand]
version = "0.10"
default-features = false
[dependencies.rand_chacha]
version = "0.10"
default-features = false
[dependencies.rand_distr]
version = "0.6"
default-features = false
[dependencies.rayon]
version = "1"
optional = true
[dependencies.serde]
version = "1"
features = ["derive"]
optional = true
default-features = false
[dependencies.web-time]
version = "1"
[dev-dependencies.criterion]
version = "0.8"
features = ["cargo_bench_support"]
default-features = false