t3variations_to_ut3variations#
- t3toolbox.backend.ufv_conversions.t3variations_to_ut3variations(variations_data, N=None, nU=None, nD=None, rL=None, rR=None)#
def t3variations_to_ut3variations( variations_data: typ.Tuple[ typ.Tuple[NDArray, ...], # tucker_variations, len=d, elm_shape=C+(nDi, Ni) typ.Tuple[NDArray, ...], # tt_variations, len=d, elm_shape=C+(rLi, nUi, rR(i+1)) ], N: typ.Optional[int] = None, # padded mode dim (default max(shape)) nU: typ.Optional[int] = None, # padded up rank (default max(up_ranks)) nD: typ.Optional[int] = None, # padded down rank (default max(down_ranks)) rL: typ.Optional[int] = None, # padded left rank (default max(left_ranks)) rR: typ.Optional[int] = None, # padded right rank (default max(right_ranks)) ) -> typ.Tuple[ NDArray, # tucker_variations supercore, (d,)+C+(nD, N) NDArray, # tt_variations supercore, (d,)+C+(rL, nU, rR) typ.Tuple[int, ...], # shape typ.Tuple[NDArray, NDArray, NDArray, NDArray], # (variations up, down, left, right) masks, all (d,)-leading ]:
Pack a ragged
T3Variationscore-tuple into uniform variation.data.Inverse of
ut3variations_to_t3variations(). The variation masks are all(d,)-leading (a variation occupies one TT slot, not a boundary edge), so the left/right ranks are the per-slot bondsrLi/rR(i+1)– NOT a(d+1,)edge sequence.ufv_make_frame_masksbuilds the prefix masks from whatever leading shape its rank args carry, so it serves here too.- Parameters:
variations_data (t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.typ.Tuple[NDArray, Ellipsis], t3toolbox.backend.common.typ.Tuple[NDArray, Ellipsis]])
N (t3toolbox.backend.common.typ.Optional[int])
nU (t3toolbox.backend.common.typ.Optional[int])
nD (t3toolbox.backend.common.typ.Optional[int])
rL (t3toolbox.backend.common.typ.Optional[int])
rR (t3toolbox.backend.common.typ.Optional[int])
- Return type:
t3toolbox.backend.common.typ.Tuple[NDArray, NDArray, t3toolbox.backend.common.typ.Tuple[int, Ellipsis], t3toolbox.backend.common.typ.Tuple[NDArray, NDArray, NDArray, NDArray]]