pub struct CompositeTensor(/* private fields */);Expand description
A composite tensor that has other tensors as children, similar to a tensor network.
Implementations§
Source§impl CompositeTensor
impl CompositeTensor
Sourcepub fn new<T>(tensors: T) -> Selfwhere
T: TensorList,
pub fn new<T>(tensors: T) -> Selfwhere
T: TensorList,
Creates a new composite tensor with the given nested tensors.
Sourcepub fn tensors(&self) -> &Vec<Tensor>
pub fn tensors(&self) -> &Vec<Tensor>
Returns the children tensors.
§Examples
let bond_dims = FxHashMap::from_iter([(0, 17), (1, 19), (2, 8)]);
let v1 = LeafTensor::new_from_map(vec![0, 1], &bond_dims);
let v2 = LeafTensor::new_from_map(vec![1, 2], &bond_dims);
let tn = CompositeTensor::new(vec![v1.clone(), v2.clone()]);
for (tensor, ref_tensor) in std::iter::zip(tn.tensors(), vec![v1, v2]){
assert_abs_diff_eq!(tensor, ref_tensor.as_tensor());
}Sourcepub fn tensor(&self, i: TensorIndex) -> &Tensor
pub fn tensor(&self, i: TensorIndex) -> &Tensor
Get the ith tensor.
§Examples
let bond_dims = FxHashMap::from_iter([(0, 17), (1, 19), (2, 8)]);
let v1 = LeafTensor::new_from_map(vec![0, 1], &bond_dims);
let v2 = LeafTensor::new_from_map(vec![1, 2], &bond_dims);
let tn = CompositeTensor::new(vec![v1.clone(), v2]);
assert_abs_diff_eq!(tn.tensor(0), v1.as_tensor());Sourcepub fn into_tensors(self) -> Vec<Tensor>
pub fn into_tensors(self) -> Vec<Tensor>
Converts this tensor into the vec of its children.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the tensor is empty. This means, it doesn’t have any children.
§Examples
let tensor = CompositeTensor::default();
assert_eq!(tensor.is_empty(), true);Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of direct children of this tensor.
§Examples
let tensor = CompositeTensor::default();
assert_eq!(tensor.len(), 0);Sourcepub fn nested_tensor(&self, nested_indices: &[usize]) -> &Tensor
pub fn nested_tensor(&self, nested_indices: &[usize]) -> &Tensor
Gets a nested Tensor based on the nested_indices which specify the
index of the tensor at each level of the hierarchy.
§Examples
let bond_dims = FxHashMap::from_iter([(0, 17), (1, 19), (2, 8), (3, 2), (4, 1)]);
let mut v1 = LeafTensor::new_from_map(vec![0, 1], &bond_dims);
let mut v2 = LeafTensor::new_from_map(vec![1, 2], &bond_dims);
let mut v3 = LeafTensor::new_from_map(vec![2, 3], &bond_dims);
let mut v4 = LeafTensor::new_from_map(vec![3, 4], &bond_dims);
let tn1 = CompositeTensor::new(vec![v1, v2]);
let tn2 = CompositeTensor::new(vec![v3.clone(), v4]);
let nested_tn = CompositeTensor::new(vec![tn1, tn2]);
let found = nested_tn.nested_tensor(&[1, 0]);
assert!(found.is_leaf());
let found = found.as_leaf().unwrap();
assert_eq!(found.legs(), v3.legs());Sourcepub fn total_num_tensors(&self) -> usize
pub fn total_num_tensors(&self) -> usize
Returns the total number of leaf tensors in the hierarchy.
Sourcepub fn push_tensor<T>(&mut self, tensor: T)
pub fn push_tensor<T>(&mut self, tensor: T)
Pushes additional tensor into this composite tensor.
Sourcepub fn push_tensors<T>(&mut self, tensors: T)where
T: TensorList,
pub fn push_tensors<T>(&mut self, tensors: T)where
T: TensorList,
Pushes additional tensors into this composite tensor.
Sourcepub fn reserve(&mut self, additional: usize)
pub fn reserve(&mut self, additional: usize)
Reserves space for at least additional more tensors to be pushed to this
composite tensor without reallocation.
Sourcepub fn is_connected(&self) -> bool
pub fn is_connected(&self) -> bool
Returns whether all tensors inside this tensor are connected. This currently requires all children to be leaf tensors.
§Examples
// Create a tensor network with two connected tensors
let bond_dims = FxHashMap::from_iter([(0, 17), (1, 19), (2, 8), (3, 5)]);
let v1 = LeafTensor::new_from_map(vec![0, 1], &bond_dims);
let v2 = LeafTensor::new_from_map(vec![1, 2], &bond_dims);
let mut tn = CompositeTensor::new(vec![v1, v2]);
assert!(tn.is_connected());
// Introduce a new tensor that is not connected
let v3 = LeafTensor::new_from_map(vec![3], &bond_dims);
tn.push_tensor(v3);
assert!(!tn.is_connected());Sourcepub fn external_tensor(&self) -> LeafTensor
pub fn external_tensor(&self) -> LeafTensor
Get output legs after tensor contraction.
Trait Implementations§
Source§impl AbsDiffEq for CompositeTensor
impl AbsDiffEq for CompositeTensor
Source§fn default_epsilon() -> Self::Epsilon
fn default_epsilon() -> Self::Epsilon
Source§fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
§fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
AbsDiffEq::abs_diff_eq].Source§impl Clone for CompositeTensor
impl Clone for CompositeTensor
Source§fn clone(&self) -> CompositeTensor
fn clone(&self) -> CompositeTensor
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CompositeTensor
impl Debug for CompositeTensor
Source§impl Default for CompositeTensor
impl Default for CompositeTensor
Source§impl<'de> Deserialize<'de> for CompositeTensor
impl<'de> Deserialize<'de> for CompositeTensor
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl From<CompositeTensor> for Tensor
impl From<CompositeTensor> for Tensor
Source§fn from(value: CompositeTensor) -> Self
fn from(value: CompositeTensor) -> Self
Source§impl PartialEq for CompositeTensor
impl PartialEq for CompositeTensor
Source§fn eq(&self, other: &CompositeTensor) -> bool
fn eq(&self, other: &CompositeTensor) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for CompositeTensor
impl Serialize for CompositeTensor
Source§impl TransparentWrapper<TensorRepr> for CompositeTensor
impl TransparentWrapper<TensorRepr> for CompositeTensor
§fn wrap_ref(s: &Inner) -> &Self
fn wrap_ref(s: &Inner) -> &Self
§fn wrap_mut(s: &mut Inner) -> &mut Self
fn wrap_mut(s: &mut Inner) -> &mut Self
§fn wrap_slice(s: &[Inner]) -> &[Self]where
Self: Sized,
fn wrap_slice(s: &[Inner]) -> &[Self]where
Self: Sized,
§fn wrap_slice_mut(s: &mut [Inner]) -> &mut [Self]where
Self: Sized,
fn wrap_slice_mut(s: &mut [Inner]) -> &mut [Self]where
Self: Sized,
§fn peel_ref(s: &Self) -> &Inner
fn peel_ref(s: &Self) -> &Inner
§fn peel_mut(s: &mut Self) -> &mut Inner
fn peel_mut(s: &mut Self) -> &mut Inner
§fn peel_slice(s: &[Self]) -> &[Inner]where
Self: Sized,
fn peel_slice(s: &[Self]) -> &[Inner]where
Self: Sized,
§fn peel_slice_mut(s: &mut [Self]) -> &mut [Inner]where
Self: Sized,
fn peel_slice_mut(s: &mut [Self]) -> &mut [Inner]where
Self: Sized,
impl StructuralPartialEq for CompositeTensor
Auto Trait Implementations§
impl Freeze for CompositeTensor
impl RefUnwindSafe for CompositeTensor
impl Send for CompositeTensor
impl Sync for CompositeTensor
impl Unpin for CompositeTensor
impl UnsafeUnpin for CompositeTensor
impl UnwindSafe for CompositeTensor
Blanket Implementations§
§impl<T> AnyExt for T
impl<T> AnyExt for T
§fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
fn downcast_ref<T>(this: &Self) -> Option<&T>where
T: Any,
T behind reference§fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
fn downcast_mut<T>(this: &mut Self) -> Option<&mut T>where
T: Any,
T behind mutable reference§fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
fn downcast_rc<T>(this: Rc<Self>) -> Result<Rc<T>, Rc<Self>>where
T: Any,
T behind Rc pointer§fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
fn downcast_arc<T>(this: Arc<Self>) -> Result<Arc<T>, Arc<Self>>where
T: Any,
T behind Arc pointer§fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
fn downcast_box<T>(this: Box<Self>) -> Result<Box<T>, Box<Self>>where
T: Any,
T behind Box pointer§fn downcast_move<T>(this: Self) -> Option<T>
fn downcast_move<T>(this: Self) -> Option<T>
Self to T,
useful only in generic context as a workaround for specialization§impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
impl<Src, Scheme> ApproxFrom<Src, Scheme> for Srcwhere
Scheme: ApproxScheme,
§fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
fn approx_from(src: Src) -> Result<Src, <Src as ApproxFrom<Src, Scheme>>::Err>
§impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
impl<Dst, Src, Scheme> ApproxInto<Dst, Scheme> for Srcwhere
Dst: ApproxFrom<Src, Scheme>,
Scheme: ApproxScheme,
§fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
fn approx_into(self) -> Result<Dst, <Src as ApproxInto<Dst, Scheme>>::Err>
Source§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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
impl<T, X> CoerceTo<T> for Xwhere
T: CoerceFrom<X> + ?Sized,
fn coerce_rc_to(self: Rc<X>) -> Rc<T>
fn coerce_box_to(self: Box<X>) -> Box<T>
fn coerce_ref_to(&self) -> &T
fn coerce_mut_to(&mut self) -> &mut T
§impl<T, Dst> ConvAsUtil<Dst> for T
impl<T, Dst> ConvAsUtil<Dst> for T
§impl<T> ConvUtil for T
impl<T> ConvUtil for T
§fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
fn approx_as<Dst>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst>,
§fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst, Scheme>,
Scheme: ApproxScheme,
fn approx_as_by<Dst, Scheme>(self) -> Result<Dst, Self::Err>where
Self: Sized + ApproxInto<Dst, Scheme>,
Scheme: ApproxScheme,
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§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Serialize for T
impl<T> Serialize for T
fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>
fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>
§impl<I, T> TransparentWrapperAlloc<I> for T
impl<I, T> TransparentWrapperAlloc<I> for T
§fn wrap_vec(s: Vec<Inner>) -> Vec<Self>where
Self: Sized,
fn wrap_vec(s: Vec<Inner>) -> Vec<Self>where
Self: Sized,
§fn wrap_box(s: Box<Inner>) -> Box<Self>
fn wrap_box(s: Box<Inner>) -> Box<Self>
§fn wrap_rc(s: Rc<Inner>) -> Rc<Self>
fn wrap_rc(s: Rc<Inner>) -> Rc<Self>
Rc to the inner type into an Rc to the wrapper type.§fn wrap_arc(s: Arc<Inner>) -> Arc<Self> ⓘ
fn wrap_arc(s: Arc<Inner>) -> Arc<Self> ⓘ
Arc to the inner type into an Arc to the wrapper type.