tensor4all_core/
lib.rs

1//! Core tensor operations and types for tensor4all-rs.
2//!
3//! This crate provides the foundational types and operations for tensor networks:
4//!
5//! - **Index types**: [`DynIndex`], [`Index`], [`DynId`] for tensor indices
6//! - **Tag sets**: [`TagSet`], [`TagSetLike`] for metadata tagging
7//! - **Tensors**: [`TensorDynLen`] for dynamic-rank dense tensors
8//! - **Operations**: Contraction, SVD, QR decomposition, factorization
9//!
10//! # Example
11//!
12//! ```
13//! use tensor4all_core::{Index, DynIndex, TensorDynLen};
14//!
15//! // Create indices with dynamic identity
16//! let i = Index::new_dyn(2);
17//! let j = Index::new_dyn(3);
18//!
19//! // Create a tensor
20//! let data = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0];
21//! let t = TensorDynLen::from_dense(vec![i.clone(), j.clone()], data).unwrap();
22//! ```
23
24#![warn(missing_docs)]
25
26pub mod col_major_array;
27pub use col_major_array::{ColMajorArray, ColMajorArrayMut, ColMajorArrayRef};
28
29// Common (tags, utilities, scalar)
30pub mod global_default;
31pub mod index_like;
32pub mod scalar;
33/// Stack-allocated fixed-capacity string types for ITensors.jl compatibility.
34pub mod smallstring;
35/// Tag set types for tensor metadata.
36pub mod tagset;
37pub mod truncation;
38
39pub use scalar::CommonScalar;
40
41// Default concrete type implementations (index, tensor, linalg, etc.)
42pub mod defaults;
43
44// Backwards compatibility: re-export defaults submodules as top-level modules
45// This allows `tensor4all_core::index::...` to work
46pub use defaults::index;
47
48pub use defaults::{DefaultIndex, DefaultTagSet, DynId, DynIndex, Index, TagSet};
49pub use index_like::{ConjState, IndexLike};
50
51/// Index operations (replacement, set operations, contraction preparation).
52pub mod index_ops;
53pub use index_ops::{
54    check_unique_indices, common_ind_positions, common_inds, hascommoninds, hasind, hasinds,
55    noncommon_inds, prepare_contraction, prepare_contraction_pairs, replaceinds,
56    replaceinds_in_place, union_inds, unique_inds, ContractionError, ContractionSpec,
57    ReplaceIndsError,
58};
59pub use smallstring::{SmallChar, SmallString, SmallStringError};
60pub use tagset::{Tag, TagSetError, TagSetLike};
61
62// Tensor (storage, tensor types) - re-exported from tensor4all-tensorbackend
63pub mod any_scalar {
64    //! Re-export of dynamic scalar utilities.
65    pub use tensor4all_tensorbackend::AnyScalar;
66}
67pub mod storage {
68    //! Re-export of snapshot storage utilities.
69    pub use tensor4all_tensorbackend::{
70        make_mut_storage, mindim, AnyScalar, Storage, StorageScalar, StructuredStorage,
71        SumFromStorage,
72    };
73}
74pub mod tensor_index;
75pub mod tensor_like;
76
77pub use tensor_index::TensorIndex;
78
79// Krylov subspace methods (GMRES, etc.)
80pub mod krylov;
81
82// Block tensor for block matrix GMRES
83pub mod block_tensor;
84
85// Backwards compatibility: re-export defaults::tensordynlen as tensor
86pub use defaults::tensordynlen as tensor;
87
88pub use any_scalar::AnyScalar;
89pub use defaults::tensordynlen::{
90    compute_permutation_from_indices, diag_tensor_dyn_len, unfold_split, RandomScalar,
91    TensorAccess, TensorDynLen,
92};
93pub use storage::{make_mut_storage, mindim, Storage, StructuredStorage, SumFromStorage};
94pub use tensor4all_tensorbackend::TensorElement;
95pub use tensor4all_tensorbackend::{
96    print_and_reset_native_einsum_profile, reset_native_einsum_profile,
97};
98pub use tensor_like::{
99    AllowedPairs, Canonical, DirectSumResult, FactorizeAlg, FactorizeError, FactorizeOptions,
100    FactorizeResult, TensorLike,
101};
102
103// Contraction - backwards compatibility
104pub use defaults::contract;
105pub use defaults::contract::{
106    contract_connected, contract_multi, print_and_reset_contract_profile, reset_contract_profile,
107};
108
109// Re-export linear algebra modules from defaults for backwards compatibility
110// This allows `tensor4all_core::svd::...`, `tensor4all_core::qr::...`, etc.
111pub mod direct_sum {
112    //! Re-export of direct sum operations.
113    pub use crate::defaults::direct_sum::*;
114}
115pub mod factorize {
116    //! Re-export of factorization operations.
117    pub use crate::defaults::factorize::*;
118}
119pub mod qr {
120    //! Re-export of QR decomposition operations.
121    pub use crate::defaults::qr::*;
122}
123pub mod svd {
124    //! Re-export of SVD decomposition operations.
125    pub use crate::defaults::svd::*;
126}
127
128// Re-export linear algebra items for top-level access
129pub use defaults::direct_sum::direct_sum;
130pub use defaults::factorize::factorize;
131pub use defaults::qr::{default_qr_rtol, qr, qr_with, set_default_qr_rtol, QrError, QrOptions};
132pub use defaults::svd::{
133    default_svd_rtol, set_default_svd_rtol, svd, svd_with, SvdError, SvdOptions,
134};
135
136// Global default and truncation utilities
137pub use global_default::{GlobalDefault, InvalidRtolError};
138pub use truncation::{DecompositionAlg, HasTruncationParams, TruncationParams};