Skip to main content

TCI2Options

Struct TCI2Options 

Source
pub struct TCI2Options {
Show 13 fields pub tolerance: f64, pub max_iter: usize, pub max_bond_dim: usize, pub pivot_search: PivotSearchStrategy, pub normalize_error: bool, pub verbosity: usize, pub max_nglobal_pivot: usize, pub nsearch: usize, pub sweep_strategy: Sweep2Strategy, pub ncheck_history: usize, pub strictly_nested: bool, pub tol_margin_global_search: f64, pub seed: Option<u64>,
}
Expand description

Configuration for the TCI2 algorithm (crossinterpolate2).

Controls convergence criteria, bond dimension limits, pivot search strategy, and global pivot search parameters.

For most problems the defaults work well. The fields you will most commonly adjust are:

FieldTypical rangePurpose
tolerance1e-61e-12Relative convergence threshold
max_bond_dim50500Hard cap on bond dimension
max_iter20100Maximum number of half-sweeps
seedSome(42)Fix seed for reproducibility

§Convergence criterion

The algorithm stops when all of the following hold for ncheck_history consecutive iterations:

  1. The normalized bond error is below tolerance.
  2. No global pivots were added.
  3. The rank is stable.

Alternatively, it stops when the rank reaches max_bond_dim.

§Examples

use tensor4all_tensorci::TCI2Options;

// Default options
let opts = TCI2Options::default();
assert!((opts.tolerance - 1e-8).abs() < 1e-15);
assert_eq!(opts.max_iter, 20);
assert_eq!(opts.max_bond_dim, usize::MAX);
assert_eq!(opts.verbosity, 0);

// Custom options via struct update syntax
let custom = TCI2Options {
    tolerance: 1e-12,
    max_bond_dim: 100,
    seed: Some(42),
    ..TCI2Options::default()
};
assert!((custom.tolerance - 1e-12).abs() < 1e-20);
assert_eq!(custom.max_bond_dim, 100);
assert_eq!(custom.seed, Some(42));

Fields§

§tolerance: f64

Convergence tolerance (default: 1e-8).

When normalize_error is enabled (the default), this is the relative threshold: the bond error is divided by the maximum absolute function value seen so far. Typical choices are 1e-8 for moderate accuracy and 1e-12 for high accuracy.

§max_iter: usize

Maximum number of half-sweep iterations (default: 20).

Each iteration performs one forward or backward two-site sweep followed by a global pivot search. Increase if the function is difficult to converge.

§max_bond_dim: usize

Hard upper bound on bond dimension (default: usize::MAX, i.e. no limit).

The algorithm stops early once the rank reaches this value. For expensive functions, setting this to 50500 avoids runaway computation.

§pivot_search: PivotSearchStrategy

Pivot search strategy (default: PivotSearchStrategy::Full).

Full materializes the entire candidate matrix and finds the best pivot exactly. Rook uses lazy block-rook search and is faster for very large local dimensions but may miss some pivots.

§normalize_error: bool

Whether to normalize the bond error by the maximum observed sample value (default: true).

When enabled, tolerance acts as a relative threshold. Disable to use tolerance as an absolute threshold.

§verbosity: usize

Verbosity level (default: 0 = silent).

1 prints per-iteration summaries, 2 adds per-bond details.

§max_nglobal_pivot: usize

Maximum number of global pivots to add per iteration (default: 5).

§nsearch: usize

Number of random starting points for global pivot search (default: 5).

Each starting point undergoes local optimization to find regions of high interpolation error.

§sweep_strategy: Sweep2Strategy

Sweep strategy for 2-site sweeps (default: Sweep2Strategy::BackAndForth).

§ncheck_history: usize

Number of recent iterations checked for convergence (default: 3).

The algorithm requires ncheck_history consecutive converged iterations before declaring convergence.

§strictly_nested: bool

Whether to use strictly nested index sets (default: false).

When false, the algorithm keeps a history of previous index sets and merges them during sweeps, which generally improves convergence.

§tol_margin_global_search: f64

Tolerance margin for global pivot search (default: 10.0).

Global pivots are accepted when their error exceeds abs_tolerance * tol_margin_global_search.

§seed: Option<u64>

Random seed for reproducibility (default: None = OS entropy).

Set to Some(seed) for deterministic results.

Trait Implementations§

Source§

impl Clone for TCI2Options

Source§

fn clone(&self) -> TCI2Options

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TCI2Options

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for TCI2Options

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<U> As for U

§

fn as_<T>(self) -> T
where T: CastFrom<U>,

Casts 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 more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> ByRef<T> for T

§

fn by_ref(&self) -> &T

§

impl<T> ByRef<T> for T

§

fn by_ref(&self) -> &T

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> DistributionExt for T
where T: ?Sized,

§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

§

impl<T> DistributionExt for T
where T: ?Sized,

§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

§

impl<T> MaybeSend for T

§

impl<T> MaybeSendSync for T

§

impl<T> MaybeSync for T