pub fn replaceinds<I: IndexLike>(
indices: Vec<I>,
replacements: &[(I, I)],
) -> Result<Vec<I>, ReplaceIndsError>Expand description
Replace indices in a collection based on ID matching.
This corresponds to ITensors.jl’s replaceinds function. It replaces indices
in indices that match (by ID) any of the (old, new) pairs in replacements.
The replacement index must have the same dimension as the original.
§Arguments
indices- Collection of indices to modifyreplacements- Pairs of(old_index, new_index)where indices matchingold_index.idare replaced withnew_index
§Returns
A new vector with replacements applied, or an error if any replacement has a dimension mismatch.
§Errors
Returns ReplaceIndsError::SpaceMismatch if any replacement index has a different dimension than the original.
§Example
use tensor4all_core::index::{DefaultIndex as Index, DynId};
use tensor4all_core::index_ops::replaceinds;
let i = Index::new_dyn(2);
let j = Index::new_dyn(3);
let k = Index::new_dyn(4);
let new_j = Index::new_dyn(3); // Same size as j
let indices = vec![i.clone(), j.clone(), k.clone()];
let replacements = vec![(j.clone(), new_j.clone())];
let replaced = replaceinds(indices, &replacements).unwrap();
assert_eq!(replaced.len(), 3);
assert_eq!(replaced[1].id, new_j.id);