Skip to main content

tensor4all_core/
lib.rs

1#![warn(missing_docs)]
2//! Core tensor operations and types for tensor4all-rs.
3//!
4//! This crate provides the foundational types and operations for tensor networks:
5//!
6//! - **Index types**: [`DynIndex`], [`Index`], [`DynId`] for tensor indices
7//! - **Tag sets**: [`TagSet`], [`TagSetLike`] for metadata tagging
8//! - **Tensors**: [`IdxTensor`] for dynamic-rank dense tensors
9//! - **Operations**: Contraction, SVD, QR decomposition, factorization
10//!
11//! # Example
12//!
13//! ```
14//! use tensor4all_core::{Index, DynIndex, IdxTensor};
15//!
16//! // Create indices with dynamic identity
17//! let i = Index::new_dyn(2);
18//! let j = Index::new_dyn(3);
19//!
20//! // Create a tensor
21//! let data = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0];
22//! let t = IdxTensor::from_dense(vec![i.clone(), j.clone()], data).unwrap();
23//! ```
24
25#[cfg(doctest)]
26#[doc = include_str!("../README.md")]
27pub struct ReadmeDoctests;
28
29pub mod prelude;
30
31pub mod col_major_array;
32pub use col_major_array::{ColMajorArray, ColMajorArrayMut, ColMajorArrayRef};
33
34// Common (tags, utilities, scalar)
35/// Dynamic scalar compatibility wrapper built on rank-0 `IdxTensor`.
36pub mod any_scalar;
37pub mod global_default;
38/// Bit-packed integer keys for multi-index maps.
39pub mod index_key;
40pub mod index_like;
41pub mod scalar;
42/// Stack-allocated fixed-capacity string types for ITensors.jl compatibility.
43pub mod smallstring;
44/// Tag set types for tensor metadata.
45pub mod tagset;
46pub mod truncation;
47
48// TCI substrate absorbed from tensor4all-tcicore (dissolved, #639): matrix
49// cross interpolation (LU/LUCI/ACA), common scalar trait, floating-zone
50// pivot search, caching, and index sets.
51pub mod cached_function;
52pub mod error;
53pub mod floating_zone;
54pub mod indexset;
55mod matrix_luci;
56pub mod matrixaca;
57pub mod matrixlu;
58pub mod matrixluci;
59pub mod traits;
60
61pub use self::matrixluci::MatrixLuciScalar;
62pub use cached_function::cache_key::CacheKey;
63pub use cached_function::error::CacheKeyError;
64pub use cached_function::index_int::IndexInt;
65pub use cached_function::multi_index_cache::{MultiIndexCache, DEFAULT_RETAINED_BYTE_LIMIT};
66pub use cached_function::CachedFunction;
67pub use error::{MatrixCIError, Result};
68pub use floating_zone::floating_zone_walk;
69pub use indexset::{IndexSet, LocalIndex, MultiIndex};
70pub use matrix_luci::{
71    matrix_luci_factors_from_blocks, matrix_luci_factors_from_matrix,
72    matrix_luci_factors_from_matrix_owned, MatrixLUCI, MatrixLuciFactors,
73};
74pub use matrixaca::MatrixACA;
75pub use matrixlu::{rrlu, rrlu_mut, RrLU, RrLUOptions};
76pub use scalar::Scalar;
77pub use traits::AbstractMatrixCI;
78
79pub use scalar::Scalar as CommonScalar;
80
81// Default concrete type implementations (index, tensor, linalg, etc.)
82pub mod defaults;
83
84// Backwards compatibility: re-export defaults submodules as top-level modules
85// This allows `tensor4all_core::index::...` to work
86pub use defaults::index;
87
88pub use defaults::{DefaultIndex, DefaultTagSet, DynId, DynIndex, Index, TagSet};
89pub use index_like::{sort_indices_deterministic, ConjState, IndexLike};
90
91/// Index operations (replacement, set operations, contraction preparation).
92pub mod index_ops;
93pub use index_ops::{
94    check_unique_indices, common_ind_positions, common_inds, has_common_inds, has_inds, hasind,
95    noncommon_inds, replace_indices, replace_indices_mut, union_inds, unique_inds,
96    ReplaceIndsError,
97};
98pub use smallstring::{SmallChar, SmallString, SmallStringError};
99pub use tagset::{Tag, TagSetError, TagSetLike};
100
101// Tensor (storage, tensor types)
102pub mod tensor_index;
103pub mod tensor_like;
104
105pub use tensor_index::TensorIndex;
106
107// Krylov subspace methods (GMRES, etc.)
108pub mod krylov;
109
110// Block tensor for block matrix GMRES
111pub mod block_tensor;
112
113// Backwards compatibility: re-export defaults::idx_tensor as tensor
114pub use defaults::idx_tensor as tensor;
115
116pub use any_scalar::{AnyScalar, AnyScalarError};
117pub use defaults::idx_tensor::{
118    compute_permutation_from_indices, diag_idx_tensor, unfold_split, IdxTensor, IdxTensorError,
119    StructuredSelectorError, TensorStorageError,
120};
121#[cfg(feature = "tenferro-cuda")]
122pub use defaults::IdxTensorCudaError;
123#[cfg(feature = "backend-tenferro")]
124pub use tensor4all_tensorbackend::ExecutionContext;
125pub use tensor4all_tensorbackend::TensorElement;
126pub use tensor4all_tensorbackend::{
127    print_and_reset_native_einsum_profile, reset_native_einsum_profile,
128};
129#[cfg(feature = "tenferro-cuda")]
130pub use tensor4all_tensorbackend::{CudaExecutionContext, CudaExecutionContextError, CUDA_ORDINAL};
131pub use tensor_like::{
132    Canonical, DirectSumResult, FactorizeAlg, FactorizeError, FactorizeOptions, FactorizeResult,
133    LinearizationOrder, TensorConstructionLike, TensorContractionLike, TensorFactorizationLike,
134    TensorLike, TensorVectorSpace, TensorVectorSpaceError,
135};
136
137pub use defaults::contract::{
138    contract, contract_owned, contract_owned_with_options, contract_pair,
139    contract_pair_with_operand_options, contract_pair_with_options, contract_with_options,
140    outer_product, print_and_reset_contract_profile, reset_contract_profile, tensordot,
141    ContractionOptions, PairwiseContractionOptions, PreparedContraction,
142};
143pub use defaults::idx_tensor::{
144    print_and_reset_pairwise_contract_profile, reset_pairwise_contract_profile,
145};
146
147// Re-export linear algebra modules from defaults for backwards compatibility
148// This allows `tensor4all_core::svd::...`, `tensor4all_core::qr::...`, etc.
149pub mod direct_sum {
150    //! Re-export of direct sum operations.
151    pub use crate::defaults::direct_sum::*;
152}
153pub mod factorize {
154    //! Re-export of factorization operations.
155    pub use crate::defaults::factorize::*;
156}
157pub mod qr {
158    //! Re-export of QR decomposition operations.
159    pub use crate::defaults::qr::*;
160}
161pub mod svd {
162    //! Re-export of SVD decomposition operations.
163    pub use crate::defaults::svd::{
164        default_svd_truncation_policy, set_default_svd_truncation_policy, svd, svd_with,
165        svd_with_in, SvdError, SvdOptions,
166    };
167}
168
169// Re-export linear algebra items for top-level access
170pub use defaults::direct_sum::direct_sum;
171pub use defaults::factorize::{
172    factorize, factorize_full_rank, factorize_full_rank_in, factorize_in,
173};
174pub use defaults::qr::{default_qr_rtol, qr, qr_with, set_default_qr_rtol, QrError, QrOptions};
175pub use defaults::svd::{
176    default_svd_truncation_policy, set_default_svd_truncation_policy, svd, svd_with, SvdError,
177    SvdOptions,
178};
179
180// Global default and truncation utilities
181pub use global_default::{GlobalDefault, InvalidRtolError};
182pub use truncation::{
183    validate_svd_truncation_options, DecompositionAlg, InvalidThresholdError, SingularValueMeasure,
184    SvdTruncationOptionsError, SvdTruncationPolicy, ThresholdScale, TruncationRule,
185};