tensor4all_treetn/treetn/
operator_impl.rs1use 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 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;