#![allow(clippy::new_without_default)]
#![allow(clippy::needless_return)]
#![allow(clippy::manual_slice_size_calculation)]
#![allow(clippy::unwrap_or_default)]
#![allow(clippy::single_char_add_str)]
#![allow(clippy::needless_borrow)]
#![allow(clippy::manual_is_multiple_of)]
#![allow(clippy::extend_with_drain)]
#![allow(clippy::vec_init_then_push)]
#![allow(clippy::match_like_matches_macro)]
#![allow(clippy::manual_clamp)]
#![allow(clippy::for_kv_map)]
#![allow(clippy::derivable_impls)]
pub mod error;
pub use error::{LinalgError, LinalgResult};
pub mod compat;
pub mod auto_precision;
pub mod attention;
mod basic;
pub mod batch;
pub mod broadcast;
pub mod complex;
pub mod convolution;
mod decomposition;
pub mod decomposition_advanced;
pub mod decomposition_enhanced;
pub mod eigen;
pub use self::eigen::{
advanced_precision_eig, eig, eig_gen, eigh, eigh_gen, eigvals, eigvals_gen, eigvalsh,
eigvalsh_gen, power_iteration,
};
pub mod eigen_specialized;
pub mod extended_precision;
pub mod factorization;
pub mod generic;
pub mod gradient;
pub mod hierarchical;
mod iterative_solvers;
pub mod kronecker;
pub mod large_scale;
pub mod lowrank;
pub mod matrix_calculus;
pub mod matrix_dynamics;
pub mod matrix_equations;
pub mod matrix_factorization;
pub mod matrix_functions;
pub mod matrix_functions_extended;
pub mod matrixfree;
pub mod mixed_precision;
pub mod mixed_cpu_gpu_solver;
mod norm;
pub mod optim;
pub mod parallel;
pub mod parallel_dispatch;
pub mod perf_opt;
pub mod preconditioners;
pub mod procrustes;
pub mod projection;
pub mod quantization;
pub use self::quantization::calibration::{
calibrate_matrix, calibrate_vector, get_activation_calibration_config,
get_weight_calibration_config, CalibrationConfig, CalibrationMethod,
};
pub mod random;
pub mod random_matrices;
pub mod randomized;
pub mod circulant_toeplitz;
mod diagnostics;
pub mod fft;
pub mod scalable;
pub mod schur_enhanced;
pub mod simd_ops;
mod solve;
pub mod solvers;
pub mod sparse_dense;
pub mod special;
pub mod specialized;
pub mod stats;
pub mod structured;
pub mod structured_solvers;
#[cfg(feature = "tensor_contraction")]
pub mod tensor_contraction;
pub mod tensor_ops;
pub mod tensor_train;
mod validation;
pub mod block_krylov;
pub mod distrib_algorithms;
pub mod eigensolvers;
pub mod gpu_accel;
pub mod gpu_gemm;
pub mod gpu_eigen;
pub mod hmatrix_h2;
pub mod hmatrix;
pub mod matrix_functions_zolotarev;
pub mod precision;
pub mod sss_matrix;
pub mod structured_flat;
#[cfg(any(
feature = "cuda",
feature = "opencl",
feature = "rocm",
feature = "metal"
))]
pub mod gpu;
#[cfg(feature = "gpu")]
pub mod gpu_linalg;
#[cfg(feature = "autograd")]
pub mod autograd;
pub mod compat_wrappers;
pub mod blas_accelerated;
pub mod lapack_accelerated;
pub mod blas;
pub mod lapack;
pub mod accelerated {
pub use super::blas_accelerated::*;
pub use super::lapack_accelerated::*;
}
pub use self::auto_precision::{
auto_precision_solve, estimate_condition_number, select_precision, Precision, PrecisionPolicy,
};
pub use self::gpu_eigen::{
householder_tridiagonalize, qr_iteration_tridiagonal, EigenTarget, GpuEigenConfig,
GpuEigensolver,
};
pub use self::mixed_cpu_gpu_solver::{MixedSolver, SolverStats};
pub use self::basic::{det, inv, matrix_power, trace as basic_trace};
pub use self::basic::{det_f64_lapack, inv_f64_lapack};
pub use self::decomposition::{
cholesky_f64_lapack, eig_f64_lapack, eigh_f64_lapack, lu_f64_lapack, qr_f64_lapack,
svd_f64_lapack,
};
pub use self::eigen_specialized::{
banded_eigen, banded_eigh, banded_eigvalsh, circulant_eigenvalues, largest_k_eigh,
partial_eigen, smallest_k_eigh, tridiagonal_eigen, tridiagonal_eigh, tridiagonal_eigvalsh,
};
pub use self::solve::solve_f64_lapack;
pub use self::complex::enhanced_ops::{
det as complex_det, frobenius_norm, hermitian_part, inner_product, is_hermitian, is_unitary,
matrix_exp, matvec, polar_decomposition, power_method, rank as complex_rank,
schur as complex_schur, skew_hermitian_part, trace,
};
pub use self::complex::{complex_inverse, complex_matmul, hermitian_transpose};
pub use self::decomposition::{cholesky, lu, qr, schur, svd};
pub use self::decomposition::{cholesky_default, lu_default, qr_default, svd_default};
pub use self::decomposition_advanced::{
jacobi_svd, polar_decomposition as advanced_polar_decomposition, polar_decomposition_newton,
qr_with_column_pivoting,
};
pub use self::decomposition_enhanced::{
generalized_svd, polar_decomp_halley, polar_decomp_newton_schulz, polar_decomp_svd, GsvdResult,
PolarResult,
};
pub use self::batch::operations::{
batch_cholesky, batch_det, batch_frobenius_norm, batch_inverse, batch_matmul_pairwise,
batch_solve, batch_solve_matrix, batch_trace, batch_transpose,
};
pub use self::basic::{det_default, inv_default, matrix_power_default};
pub use self::iterative_solvers::conjugate_gradient_default;
pub use self::extended_precision::*;
pub use self::iterative_solvers::*;
pub use self::matrix_equations::{
solve_continuous_lyapunov, solve_continuous_riccati, solve_discrete_lyapunov,
solve_discrete_riccati, solve_generalized_sylvester, solve_stein, solve_sylvester,
};
pub use self::matrix_factorization::{
cur_decomposition, interpolative_decomposition, nmf, rank_revealing_qr, utv_decomposition,
};
pub use self::matrix_functions::{
acosm, asinm, atanm, coshm, cosm, expm, geometric_mean_spd, logm, logm_parallel, nuclear_norm,
signm, sinhm, sinm, spectral_condition_number, spectral_radius, sqrtm, sqrtm_parallel, tanhm,
tanm, tikhonov_regularization,
};
pub use self::matrix_functions_extended::{
logm_iss, matrix_function_condition, pth_root, sign_roberts, sqrt_denman_beavers, sqrt_schur,
MatrixPthRootResult, MatrixSignResult, MatrixSqrtResult,
};
pub use self::matrixfree::{
block_diagonal_operator, conjugate_gradient as matrix_free_conjugate_gradient,
diagonal_operator, gmres as matrix_free_gmres, jacobi_preconditioner,
preconditioned_conjugate_gradient as matrix_free_preconditioned_conjugate_gradient,
LinearOperator, MatrixFreeOp,
};
pub use self::norm::*;
pub use self::procrustes::{
extended_procrustes, generalized_procrustes, oblique_procrustes, orthogonal_procrustes,
procrustes_distance, ExtendedProcrustesResult, GeneralizedProcrustesResult,
ObliqueProcrustesResult, OrthogonalProcrustesResult,
};
pub use self::randomized::{
pca_inverse_transform, pca_transform, randomized_pca, RandomizedConfig, RandomizedPcaResult,
};
pub use self::tensor_ops::{
cp_als, fold, khatri_rao, n_mode_product, tensor_norm_frobenius, tensor_norm_l1,
tensor_norm_max, tucker_hosvd, unfold, CpResult, Tensor, TuckerResult,
};
pub use self::solve::{lstsq, solve, solve_multiple, solve_triangular, LstsqResult};
pub use self::solve::{lstsq_default, solve_default, solve_multiple_default};
pub use self::solvers::iterative::{
bicgstab, conjugate_gradient as cg_solver, gmres,
preconditioned_conjugate_gradient as pcg_solver, IterativeSolverOptions, IterativeSolverResult,
};
pub use self::specialized::{
specialized_to_operator, BandedMatrix, SpecializedMatrix, SymmetricMatrix, TridiagonalMatrix,
};
pub use self::stats::*;
pub use self::hmatrix::{
aca_approximate, hmatrix_compress, hmatrix_frobenius_norm, hmatrix_matvec, BlockClusterTree,
DenseBlock as HDenseBlock, HBlock, HMatrix as HMatrixKernel, LowRankBlock as HLowRankBlock,
};
pub use self::structured::{
structured_to_operator, CirculantMatrix, HankelMatrix, StructuredMatrix, ToeplitzMatrix,
};
pub use self::structured_solvers::{
solve_banded as structured_solve_banded, solve_symmetric, solve_symmetric_multiple,
solve_toeplitz_levinson, solve_tridiagonal,
};
#[cfg(feature = "tensor_contraction")]
pub use self::tensor_contraction::{batch_matmul, contract, einsum, hosvd};
pub mod prelude {
pub use approx::{AbsDiffEq, RelativeEq, UlpsEq};
pub use super::attention::{
attention, attention_with_alibi, attention_with_rpe, causal_attention, flash_attention,
grouped_query_attention, linear_attention, masked_attention, multi_head_attention,
relative_position_attention, rotary_embedding, scaled_dot_product_attention,
sparse_attention, AttentionConfig, AttentionMask,
};
pub use super::basic::{det, inv};
pub use super::batch::attention::{
batch_flash_attention, batch_multi_head_attention, batch_multi_query_attention,
};
pub use super::batch::operations::{
batch_cholesky, batch_det, batch_frobenius_norm, batch_inverse, batch_matmul_pairwise,
batch_solve, batch_solve_matrix, batch_trace, batch_transpose,
};
pub use super::broadcast::{
broadcast_matmul, broadcast_matmul_3d, broadcast_matvec, BroadcastExt,
};
pub use super::complex::enhanced_ops::{
det as complex_det, frobenius_norm as complex_frobenius_norm, hermitian_part,
inner_product as complex_inner_product, is_hermitian, is_unitary,
matrix_exp as complex_exp, matvec as complex_matvec, polar_decomposition as complex_polar,
schur as complex_schur, skew_hermitian_part,
};
pub use super::complex::{
complex_inverse, complex_matmul, complex_norm_frobenius, hermitian_transpose,
};
pub use super::convolution::{
col2im, compute_conv_indices, conv2d_backward_bias, conv2d_backward_input,
conv2d_backward_kernel, conv2d_im2col, conv_transpose2d, im2col, max_pool2d,
max_pool2d_backward,
};
pub use super::decomposition::{cholesky, lu, qr, schur, svd};
pub use super::decomposition_advanced::{
jacobi_svd, polar_decomposition as advanced_polar_decomposition,
polar_decomposition_newton, qr_with_column_pivoting,
};
pub use super::decomposition_enhanced::{
generalized_svd, polar_decomp_halley, polar_decomp_newton_schulz, polar_decomp_svd,
GsvdResult, PolarResult,
};
pub use super::eigen::{
advanced_precision_eig, eig, eig_gen, eigh, eigh_gen, eigvals, eigvals_gen, eigvalsh,
eigvalsh_gen, power_iteration,
};
pub use super::eigen_specialized::{
banded_eigen, banded_eigh, banded_eigvalsh, circulant_eigenvalues, largest_k_eigh,
partial_eigen, smallest_k_eigh, tridiagonal_eigen, tridiagonal_eigh, tridiagonal_eigvalsh,
};
pub use super::extended_precision::eigen::{
extended_eig, extended_eigh, extended_eigvals, extended_eigvalsh,
};
pub use super::extended_precision::factorizations::{
extended_cholesky, extended_lu, extended_qr, extended_svd,
};
pub use super::extended_precision::{
extended_det, extended_matmul, extended_matvec, extended_solve,
};
pub use super::hierarchical::{
adaptive_block_lowrank, build_cluster_tree, BlockType, ClusterNode, HMatrix, HMatrixBlock,
HMatrixMemoryInfo, HSSMatrix, HSSNode,
};
pub use super::iterative_solvers::{
bicgstab, conjugate_gradient, gauss_seidel, geometric_multigrid, jacobi_method, minres,
successive_over_relaxation,
};
pub use super::kronecker::{
advanced_kfac_step, kfac_factorization, kfac_update, kron, kron_factorize, kron_matmul,
kron_matvec, BlockDiagonalFisher, BlockFisherMemoryInfo, KFACOptimizer,
};
pub use super::large_scale::{
block_krylov_solve, ca_gmres, incremental_svd, randomized_block_lanczos,
randomized_least_squares, randomized_norm,
};
pub use super::lowrank::{
cur_decomposition, nmf as lowrank_nmf, pca, randomized_svd, truncated_svd,
};
pub use super::solvers::iterative::{
bicgstab as iterative_bicgstab, conjugate_gradient as iterative_cg,
gmres as iterative_gmres, preconditioned_conjugate_gradient as iterative_pcg,
IterativeSolverOptions, IterativeSolverResult,
};
pub use super::matrix_dynamics::{
lyapunov_solve, matrix_exp_action, matrix_ode_solve, quantum_evolution, riccati_solve,
stability_analysis, DynamicsConfig, ODEResult,
};
pub use super::matrix_factorization::{
interpolative_decomposition, nmf, rank_revealing_qr, utv_decomposition,
};
pub use super::matrix_functions::{
acosm, asinm, atanm, coshm, cosm, expm, geometric_mean_spd, logm, logm_parallel,
matrix_power, nuclear_norm, polar_decomposition, signm, sinhm, sinm,
spectral_condition_number, spectral_radius, sqrtm, sqrtm_parallel, tanhm, tanm,
tikhonov_regularization,
};
pub use super::matrixfree::{
block_diagonal_operator, conjugate_gradient as matrix_free_conjugate_gradient,
diagonal_operator, gmres as matrix_free_gmres, jacobi_preconditioner,
preconditioned_conjugate_gradient as matrix_free_preconditioned_conjugate_gradient,
LinearOperator, MatrixFreeOp,
};
pub use super::mixed_precision::{
convert, convert_2d, iterative_refinement_solve, mixed_precision_cond,
mixed_precision_dot_f32, mixed_precision_matmul, mixed_precision_matvec,
mixed_precision_qr, mixed_precision_solve, mixed_precision_svd,
};
pub use super::norm::{cond, matrix_norm, matrix_rank, vector_norm, vector_norm_parallel};
pub use super::optim::{block_matmul, strassen_matmul, tiled_matmul};
pub use super::perf_opt::{
blocked_matmul, inplace_add, inplace_scale, matmul_benchmark, optimized_transpose,
OptAlgorithm, OptConfig,
};
pub use super::preconditioners::{
analyze_preconditioner, create_preconditioner, preconditioned_conjugate_gradient,
preconditioned_gmres, AdaptivePreconditioner, BlockJacobiPreconditioner,
DiagonalPreconditioner, IncompleteCholeskyPreconditioner, IncompleteLUPreconditioner,
PolynomialPreconditioner, PreconditionerAnalysis, PreconditionerConfig, PreconditionerOp,
PreconditionerType,
};
pub use super::projection::{
gaussian_randommatrix, johnson_lindenstrauss_min_dim, johnson_lindenstrauss_transform,
project, sparse_randommatrix, very_sparse_randommatrix,
};
pub use super::quantization::calibration::{
calibrate_matrix, calibrate_vector, CalibrationConfig, CalibrationMethod,
};
#[cfg(feature = "simd")]
pub use super::quantization::simd::{
simd_quantized_dot, simd_quantized_matmul, simd_quantized_matvec,
};
pub use super::quantization::{
dequantize_matrix, dequantize_vector, fake_quantize, fake_quantize_vector, quantize_matrix,
quantize_matrix_per_channel, quantize_vector, quantized_dot, quantized_matmul,
quantized_matvec, QuantizationMethod, QuantizationParams, QuantizedDataType,
QuantizedMatrix, QuantizedVector,
};
pub use super::random::{
banded, diagonal, hilbert, low_rank, normal, orthogonal, permutation, random_correlation,
sparse, spd, toeplitz, uniform, vandermonde, with_condition_number, with_eigenvalues,
};
pub use super::random_matrices::{
random_complexmatrix, random_hermitian, randommatrix, Distribution1D, MatrixType,
};
pub use super::fft::{
apply_window, dct_1d, dst_1d, fft_1d, fft_2d, fft_3d, fft_convolve, fft_frequencies,
idct_1d, irfft_1d, periodogram_psd, rfft_1d, welch_psd, Complex32, Complex64, FFTAlgorithm,
FFTPlan, WindowFunction,
};
pub use super::generic::{
gdet, geig, gemm, gemv, ginv, gnorm, gqr, gsolve, gsvd, GenericEigen, GenericQR,
GenericSVD, LinalgScalar, PrecisionSelector,
};
pub use super::scalable::{
adaptive_decomposition, blocked_matmul as scalable_blocked_matmul, classify_aspect_ratio,
lq_decomposition, randomized_svd as scalable_randomized_svd, tsqr, AdaptiveResult,
AspectRatio, ScalableConfig,
};
#[cfg(feature = "simd")]
pub use super::simd_ops::{
simd_axpy_f32,
simd_axpy_f64,
simd_dot_f32,
simd_dot_f64,
simd_frobenius_norm_f32,
simd_frobenius_norm_f64,
simd_gemm_f32,
simd_gemm_f64,
simd_gemv_f32,
simd_gemv_f64,
simd_matmul_f32,
simd_matmul_f64,
simd_matmul_optimized_f32,
simd_matmul_optimized_f64,
simd_matvec_f32,
simd_matvec_f64,
simd_transpose_f32,
simd_transpose_f64,
simd_vector_norm_f32,
simd_vector_norm_f64,
simdmatrix_max_f32,
simdmatrix_max_f64,
simdmatrix_min_f32,
simdmatrix_min_f64,
GemmBlockSizes,
};
pub use super::solve::{lstsq, solve, solve_multiple, solve_triangular};
pub use super::sparse_dense::{
dense_sparse_matmul, dense_sparse_matvec, sparse_dense_add, sparse_dense_elementwise_mul,
sparse_dense_matmul, sparse_dense_matvec, sparse_dense_sub, sparse_from_ndarray,
SparseMatrixView,
};
pub use super::special::block_diag;
pub use super::specialized::{
specialized_to_operator, BandedMatrix, BlockTridiagonalMatrix, SpecializedMatrix,
SymmetricMatrix, TridiagonalMatrix,
};
pub use super::stats::{correlationmatrix, covariancematrix};
pub use super::structured::{
solve_circulant, solve_toeplitz, structured_to_operator, CirculantMatrix, HankelMatrix,
StructuredMatrix, ToeplitzMatrix,
};
pub use super::structured_solvers::{
solve_banded as structured_solve_banded, solve_symmetric, solve_symmetric_multiple,
solve_toeplitz_levinson, solve_tridiagonal,
};
#[cfg(feature = "tensor_contraction")]
pub use super::tensor_contraction::{batch_matmul, contract, einsum, hosvd};
pub use super::tensor_train::{tt_add, tt_decomposition, tt_hadamard, TTTensor};
#[cfg(feature = "autograd")]
pub mod autograd {
pub use super::super::autograd::*;
}
pub mod accelerated {
pub use super::super::blas_accelerated::{
dot, gemm, gemv, inv as fast_inv, matmul, norm, solve as fast_solve,
};
pub use super::super::lapack_accelerated::{
cholesky as fast_cholesky, eig as fast_eig, eigh as fast_eigh, lu as fast_lu,
qr as fast_qr, svd as fast_svd,
};
}
pub mod scipy_compat {
pub use super::super::compat::{
block_diag,
cholesky,
compat_solve as solve,
cond,
cosm,
det,
eig,
eig_banded,
eigh,
eigh_tridiagonal,
eigvals,
eigvals_banded,
eigvalsh,
eigvalsh_tridiagonal,
expm,
fractionalmatrix_power,
funm,
inv,
logm,
lstsq,
lu,
matrix_rank,
norm,
pinv,
polar,
qr,
rq,
schur,
sinm,
solve_banded,
solve_triangular,
sqrtm,
svd,
tanm,
vector_norm,
SvdResult,
};
}
}