pub struct ProjectedState<T, V>{
pub rhs: TreeTN<T, V>,
pub envs: EnvironmentCache<T, V>,
}Expand description
ProjectedState: Manages 2-chain environments for RHS computation.
This computes <b|x_local> for each local region during the sweep.
For Tree Tensor Networks, the environment is computed by contracting all tensors outside the “open region” into environment tensors. The open region consists of nodes being updated in the current sweep step.
§Structure
For each edge (from, to) pointing towards the open region, we cache:
env[(from, to)] = contraction of:
- bra tensor at `from` (conjugated RHS)
- ket tensor at `from` (current solution)
- all child environments (edges pointing away from `to`)This forms a “2-chain” overlap: <b|x> contracted over
all nodes except the open region.
Fields§
§rhs: TreeTN<T, V>The RHS state |b⟩
envs: EnvironmentCache<T, V>Environment cache
Implementations§
Source§impl<T, V> ProjectedState<T, V>
impl<T, V> ProjectedState<T, V>
Sourcepub fn local_constant_term<NT: NetworkTopology<V>>(
&mut self,
region: &[V],
reference_state: &TreeTN<T, V>,
topology: &NT,
) -> Result<T>
pub fn local_constant_term<NT: NetworkTopology<V>>( &mut self, region: &[V], reference_state: &TreeTN<T, V>, topology: &NT, ) -> Result<T>
Compute the local constant term (local RHS) for the given region.
This returns the local RHS tensors contracted with environments.
For the square case, the reference_state is used as the bra (conjugated),
and rhs is used as the ket, i.e. environments are constructed for <ref|b>.
§Arguments
region- The nodes in the local update regionreference_state- The current solution state (used as reference for environments)topology- The network topology
Sourcepub fn invalidate<NT: NetworkTopology<V>>(
&mut self,
region: &[V],
topology: &NT,
)
pub fn invalidate<NT: NetworkTopology<V>>( &mut self, region: &[V], topology: &NT, )
Invalidate caches affected by updates to the given region.
Auto Trait Implementations§
impl<T, V> Freeze for ProjectedState<T, V>
impl<T, V> RefUnwindSafe for ProjectedState<T, V>where
<T as TensorIndex>::Index: RefUnwindSafe,
V: RefUnwindSafe,
T: RefUnwindSafe,
<<T as TensorIndex>::Index as IndexLike>::Id: RefUnwindSafe,
impl<T, V> Send for ProjectedState<T, V>
impl<T, V> Sync for ProjectedState<T, V>
impl<T, V> Unpin for ProjectedState<T, V>
impl<T, V> UnsafeUnpin for ProjectedState<T, V>
impl<T, V> UnwindSafe for ProjectedState<T, V>where
<T as TensorIndex>::Index: UnwindSafe,
V: UnwindSafe,
T: UnwindSafe,
<<T as TensorIndex>::Index as IndexLike>::Id: UnwindSafe,
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read moreSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> Twhere
Self: Distribution<T>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more