tensor4all_simplett/mpo/mod.rs
1//! MPO (Matrix Product Operator) contraction algorithms
2//!
3//! This module provides algorithms for contracting two Matrix Product Operators (MPOs),
4//! which are tensor trains with 4D site tensors of shape (left_bond, site_dim_1, site_dim_2, right_bond).
5//!
6//! # Main Types
7//!
8//! - [`MPO`]: Basic Matrix Product Operator representation
9//! - [`SiteMPO`]: Center-canonical form with orthogonality center
10//! - [`VidalMPO`]: Vidal canonical form with explicit singular values
11//! - [`InverseMPO`]: Inverse form for efficient local updates
12//!
13//! # Contraction Algorithms
14//!
15//! - [`fn@contract_naive`]: Naive contraction (exact but memory-intensive)
16//! - [`fn@contract_zipup`]: Zip-up contraction with on-the-fly compression
17//! - [`fn@contract_fit`]: Variational fitting algorithm
18//!
19//! # Example
20//!
21//! ```
22//! use tensor4all_simplett::mpo::{MPO, contract_naive, ContractionOptions};
23//!
24//! let mpo_a = MPO::constant(&[(2, 2), (2, 2)], 1.0_f64);
25//! let mpo_b = MPO::constant(&[(2, 2), (2, 2)], 2.0_f64);
26//! let result = contract_naive(&mpo_a, &mpo_b, Some(ContractionOptions::default())).unwrap();
27//!
28//! assert_eq!(result.len(), 2);
29//! assert_eq!(result.site_dims(), vec![(2, 2), (2, 2)]);
30//! ```
31
32/// Type alias for 2D matrix.
33pub type Matrix2<T> = crate::tensor::Tensor2<T>;
34
35/// Helper function to create a zero-filled 2D tensor.
36///
37/// This is a shared utility used across multiple MPO modules.
38#[inline]
39pub(crate) fn matrix2_zeros<T: crate::traits::TTScalar + Default>(
40 rows: usize,
41 cols: usize,
42) -> Matrix2<T> {
43 crate::tensor::Tensor::from_elem([rows, cols], T::default())
44}
45
46pub mod contract_fit;
47pub mod contract_naive;
48pub mod contract_zipup;
49pub mod contraction;
50pub mod dispatch;
51pub mod environment;
52pub mod error;
53pub mod factorize;
54pub mod inverse_mpo;
55#[allow(clippy::module_inception)]
56pub mod mpo;
57pub mod site_mpo;
58pub mod tt_contraction;
59pub mod types;
60pub mod vidal_mpo;
61
62// Re-export main types and functions
63pub use contract_fit::{contract_fit, FitOptions};
64pub use contract_naive::contract_naive;
65pub use contract_zipup::contract_zipup;
66pub use contraction::{Contraction, ContractionOptions};
67pub use dispatch::{contract, ContractionAlgorithm};
68pub use error::{MPOError, Result};
69pub use factorize::{factorize, FactorizeMethod, FactorizeOptions, FactorizeResult};
70pub use inverse_mpo::InverseMPO;
71pub use mpo::MPO;
72pub use site_mpo::SiteMPO;
73pub use types::{tensor4_from_data, tensor4_zeros, Tensor4, Tensor4Ops};
74pub use vidal_mpo::VidalMPO;