t3m_inplace_fused#
- t3toolbox.backend.t3_linalg.t3m_inplace_fused(x, y, max_tucker_ranks=None, max_tt_ranks=None, rtol=None, atol=None)#
def t3m_inplace_fused( x: typ.Tuple[typ.Sequence[NDArray], typ.Sequence[NDArray]], # (tucker_cores_x, tt_cores_x) y: typ.Tuple[typ.Sequence[NDArray], typ.Sequence[NDArray]], # (tucker_cores_y, tt_cores_y) max_tucker_ranks: typ.Union[int, typ.Sequence[int], None] = None, # scalar caps all, or len=d max_tt_ranks: typ.Union[int, typ.Sequence[int], None] = None, # scalar caps all, or len=d+1 rtol: typ.Optional[float] = None, # requires unstacked (enforced by the frontend) atol: typ.Optional[float] = None, ) -> typ.Tuple[ typ.Tuple[NDArray, ...], # x_times_y tucker_cores typ.Tuple[NDArray, ...], # x_times_y tt_cores ]:
Elementwise product
x ⊙ y– method (b): a fused left-to-right sweep that truncates as it goes, never materializing the full product (the workhorse; seedocs/ttm_t3m_ht_note.tex).Right-orthogonalizes the two central TTs separately (the Kronecker of right-canonical cores is right-canonical, so the product’s central TT is right-canonical without being formed), then sweeps left to right carrying the separate
(r_x, r_y)bonds. At each mode it builds the product core on the fly, then does the joint per-site T3 truncation (the Tucker rank, weighted by the canonical environment, then the TT bond) – both truncations are optimal because the right side is right-canonical.O(d·r⁴), memoryO(r̃·n²·r²)(one site). Stack-aware with max-rank truncation;rtol/atolrequire unstacked. No truncation requested -> the exact full product.- Parameters:
x (t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.typ.Sequence[NDArray], t3toolbox.backend.common.typ.Sequence[NDArray]])
y (t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.typ.Sequence[NDArray], t3toolbox.backend.common.typ.Sequence[NDArray]])
max_tucker_ranks (t3toolbox.backend.common.typ.Union[int, t3toolbox.backend.common.typ.Sequence[int], None])
max_tt_ranks (t3toolbox.backend.common.typ.Union[int, t3toolbox.backend.common.typ.Sequence[int], None])
rtol (t3toolbox.backend.common.typ.Optional[float])
atol (t3toolbox.backend.common.typ.Optional[float])
- Return type:
t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.typ.Tuple[NDArray, Ellipsis], t3toolbox.backend.common.typ.Tuple[NDArray, Ellipsis]]