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, replaceinds, replaceinds_in_place, union_inds, unique_inds, ReplaceIndsError,
58};
59pub use smallstring::{SmallChar, SmallString, SmallStringError};
60pub use tagset::{Tag, TagSetError, TagSetLike};
61
62// Tensor (storage, tensor types)
63pub mod tensor_index;
64pub mod tensor_like;
65
66pub use tensor_index::TensorIndex;
67
68// Krylov subspace methods (GMRES, etc.)
69pub mod krylov;
70
71// Block tensor for block matrix GMRES
72pub mod block_tensor;
73
74// Backwards compatibility: re-export defaults::tensordynlen as tensor
75pub use defaults::tensordynlen as tensor;
76
77pub use any_scalar::AnyScalar;
78pub use defaults::tensordynlen::{
79    compute_permutation_from_indices, diag_tensor_dyn_len, unfold_split, TensorDynLen,
80};
81pub use tensor4all_tensorbackend::TensorElement;
82pub use tensor4all_tensorbackend::{
83    print_and_reset_native_einsum_profile, reset_native_einsum_profile,
84};
85pub use tensor_like::{
86    Canonical, DirectSumResult, FactorizeAlg, FactorizeError, FactorizeOptions, FactorizeResult,
87    LinearizationOrder, TensorConstructionLike, TensorContractionLike, TensorFactorizationLike,
88    TensorLike, TensorVectorSpace,
89};
90
91pub use defaults::contract::{
92    contract, contract_owned, contract_owned_with_options, contract_pair,
93    contract_pair_with_operand_options, contract_pair_with_options, contract_with_options,
94    outer_product, print_and_reset_contract_profile, reset_contract_profile, tensordot,
95    ContractionOptions, PairwiseContractionOptions,
96};
97pub use defaults::tensordynlen::{
98    print_and_reset_pairwise_contract_profile, reset_pairwise_contract_profile,
99};
100
101// Re-export linear algebra modules from defaults for backwards compatibility
102// This allows `tensor4all_core::svd::...`, `tensor4all_core::qr::...`, etc.
103pub mod direct_sum {
104    //! Re-export of direct sum operations.
105    pub use crate::defaults::direct_sum::*;
106}
107pub mod factorize {
108    //! Re-export of factorization operations.
109    pub use crate::defaults::factorize::*;
110}
111pub mod qr {
112    //! Re-export of QR decomposition operations.
113    pub use crate::defaults::qr::*;
114}
115pub mod svd {
116    //! Re-export of SVD decomposition operations.
117    pub use crate::defaults::svd::{
118        default_svd_truncation_policy, set_default_svd_truncation_policy, svd, svd_with, SvdError,
119        SvdOptions,
120    };
121}
122
123// Re-export linear algebra items for top-level access
124pub use defaults::direct_sum::direct_sum;
125pub use defaults::factorize::{factorize, factorize_full_rank};
126pub use defaults::qr::{default_qr_rtol, qr, qr_with, set_default_qr_rtol, QrError, QrOptions};
127pub use defaults::svd::{
128    default_svd_truncation_policy, set_default_svd_truncation_policy, svd, svd_with, SvdError,
129    SvdOptions,
130};
131
132// Global default and truncation utilities
133pub use global_default::{GlobalDefault, InvalidRtolError};
134pub use truncation::{
135    DecompositionAlg, InvalidThresholdError, SingularValueMeasure, SvdTruncationPolicy,
136    ThresholdScale, TruncationRule,
137};