Skip to main content

svd_with_in

Function svd_with_in 

Source
pub fn svd_with_in<T>(
    t: &IdxTensor,
    left_inds: &[DynIndex],
    options: &SvdOptions,
    context: &ExecutionContext,
) -> Result<(IdxTensor, IdxTensor, IdxTensor), SvdError>
Expand description

Compute SVD decomposition in a caller-owned execution context.

The factorization, truncation slicing, and result assembly all execute in context. With a CUDA context only the singular-value decision vector crosses the explicit readback boundary; with a CPU context the decision uses the same host read as svd_with.

§Arguments

  • t - Input tensor, which must belong to context.
  • left_inds - Indices to place on the left (row) side of the unfolded matrix.
  • options - SVD options including truncation policy and bond cap.
  • context - Caller-owned execution context owning the input and results.

§Examples

use std::sync::Arc;
use tensor4all_core::svd::{SvdOptions, svd_with_in};
use tensor4all_core::{DynIndex, ExecutionContext, IdxTensor, SvdTruncationPolicy};
use tensor4all_tensorbackend::CpuExecutionContext;
use tensor4all_tensorbackend::CpuBackend;

let context = ExecutionContext::Cpu(Arc::new(
    CpuExecutionContext::from_backend(CpuBackend::new()),
));
let i = DynIndex::new_dyn(4);
let j = DynIndex::new_dyn(4);
let mut data = vec![0.0_f64; 16];
data[0] = 1.0;
let tensor = IdxTensor::from_dense_in(&context, vec![i.clone(), j.clone()], data)?;
let opts = SvdOptions::new().with_policy(SvdTruncationPolicy::new(1e-10));
let (u, s, _v) = svd_with_in::<f64>(&tensor, &[i.clone()], &opts, &context)?;
assert_eq!(s.dims()[0], 1);
assert_eq!(u.dims()[0], 4);

§Errors

Returns SvdError when the tensor does not belong to context, when the indices or options are invalid, or when the factorization or explicit decision readback fails. When this build cannot execute in context, the rejection carries IdxTensorError::UnsupportedExecutionContext as its source.