Skip to main content

tensor4all_treetn/treetn/
operator_impl.rs

1//! Operator trait implementation for TreeTN.
2//!
3//! This module implements the Operator trait for TreeTN, allowing TreeTNs
4//! to be used with the operator composition infrastructure.
5
6use std::collections::HashSet;
7use std::hash::Hash;
8
9use tensor4all_core::{IndexLike, TensorLike};
10
11use crate::operator::Operator;
12use crate::site_index_network::SiteIndexNetwork;
13use crate::treetn::TreeTN;
14
15impl<T, V> Operator<T, V> for TreeTN<T, V>
16where
17    T: TensorLike,
18    T::Index: IndexLike + Clone + Hash + Eq,
19    V: Clone + Hash + Eq + Send + Sync + std::fmt::Debug,
20{
21    fn site_indices(&self) -> HashSet<T::Index> {
22        // Collect all site indices from all nodes
23        let mut result = HashSet::new();
24        for node_name in self.site_index_network.node_names() {
25            if let Some(site_space) = self.site_index_network.site_space(node_name) {
26                result.extend(site_space.iter().cloned());
27            }
28        }
29        result
30    }
31
32    fn site_index_network(&self) -> &SiteIndexNetwork<V, T::Index> {
33        &self.site_index_network
34    }
35
36    fn node_names(&self) -> HashSet<V> {
37        self.site_index_network
38            .node_names()
39            .into_iter()
40            .cloned()
41            .collect()
42    }
43}
44
45#[cfg(test)]
46mod tests;