Skip to main content

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)
30/// Dynamic scalar compatibility wrapper built on rank-0 `TensorDynLen`.
31pub mod any_scalar;
32pub mod global_default;
33pub mod index_like;
34pub mod scalar;
35/// Stack-allocated fixed-capacity string types for ITensors.jl compatibility.
36pub mod smallstring;
37/// Tag set types for tensor metadata.
38pub mod tagset;
39pub mod truncation;
40
41pub use scalar::CommonScalar;
42
43// Default concrete type implementations (index, tensor, linalg, etc.)
44pub mod defaults;
45
46// Backwards compatibility: re-export defaults submodules as top-level modules
47// This allows `tensor4all_core::index::...` to work
48pub use defaults::index;
49
50pub use defaults::{DefaultIndex, DefaultTagSet, DynId, DynIndex, Index, TagSet};
51pub use index_like::{ConjState, IndexLike};
52
53/// Index operations (replacement, set operations, contraction preparation).
54pub mod index_ops;
55pub use index_ops::{
56    check_unique_indices, common_ind_positions, common_inds, hascommoninds, hasind, hasinds,
57    noncommon_inds, prepare_contraction, prepare_contraction_pairs, replaceinds,
58    replaceinds_in_place, union_inds, unique_inds, ContractionError, ContractionSpec,
59    ReplaceIndsError,
60};
61pub use smallstring::{SmallChar, SmallString, SmallStringError};
62pub use tagset::{Tag, TagSetError, TagSetLike};
63
64// Tensor (storage, tensor types)
65pub mod storage {
66    //! Re-export of snapshot storage utilities.
67    pub use tensor4all_tensorbackend::{
68        make_mut_storage, mindim, AnyScalar, Storage, StorageKind, StorageScalar,
69        StructuredStorage, SumFromStorage,
70    };
71}
72pub mod tensor_index;
73pub mod tensor_like;
74
75pub use tensor_index::TensorIndex;
76
77// Krylov subspace methods (GMRES, etc.)
78pub mod krylov;
79
80// Block tensor for block matrix GMRES
81pub mod block_tensor;
82
83// Backwards compatibility: re-export defaults::tensordynlen as tensor
84pub use defaults::tensordynlen as tensor;
85
86pub use any_scalar::AnyScalar;
87pub use defaults::tensordynlen::{
88    compute_permutation_from_indices, diag_tensor_dyn_len, unfold_split, RandomScalar,
89    TensorAccess, TensorDynLen,
90};
91pub use storage::{
92    make_mut_storage, mindim, Storage, StorageKind, StructuredStorage, SumFromStorage,
93};
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, LinearizationOrder, TensorLike,
101};
102
103// Contraction - backwards compatibility
104pub use defaults::contract;
105pub use defaults::contract::{
106    contract_connected, contract_connected_with_options, contract_multi, contract_multi_owned,
107    contract_multi_with_options, print_and_reset_contract_profile, reset_contract_profile,
108    ContractionOptions,
109};
110
111// Re-export linear algebra modules from defaults for backwards compatibility
112// This allows `tensor4all_core::svd::...`, `tensor4all_core::qr::...`, etc.
113pub mod direct_sum {
114    //! Re-export of direct sum operations.
115    pub use crate::defaults::direct_sum::*;
116}
117pub mod factorize {
118    //! Re-export of factorization operations.
119    pub use crate::defaults::factorize::*;
120}
121pub mod qr {
122    //! Re-export of QR decomposition operations.
123    pub use crate::defaults::qr::*;
124}
125pub mod svd {
126    //! Re-export of SVD decomposition operations.
127    pub use crate::defaults::svd::{
128        default_svd_truncation_policy, set_default_svd_truncation_policy, svd, svd_with, SvdError,
129        SvdOptions,
130    };
131}
132
133// Re-export linear algebra items for top-level access
134pub use defaults::direct_sum::direct_sum;
135pub use defaults::factorize::{factorize, factorize_full_rank};
136pub use defaults::qr::{default_qr_rtol, qr, qr_with, set_default_qr_rtol, QrError, QrOptions};
137pub use defaults::svd::{
138    default_svd_truncation_policy, set_default_svd_truncation_policy, svd, svd_with, SvdError,
139    SvdOptions,
140};
141
142// Global default and truncation utilities
143pub use global_default::{GlobalDefault, InvalidRtolError};
144pub use truncation::{
145    DecompositionAlg, InvalidThresholdError, SingularValueMeasure, SvdTruncationPolicy,
146    ThresholdScale, TruncationRule,
147};