t3toolbox.manifold.tangent_to_dense =================================== .. py:function:: t3toolbox.manifold.tangent_to_dense(variation: t3toolbox.basis_coordinates_format.T3Variation, base: t3toolbox.basis_coordinates_format.T3Base, include_shift: bool = False, use_jax: bool = False) -> NDArray Convert Tangent vector to Tucker tensor train manifold into dense tensor. .. rubric:: Examples >>> import numpy as np >>> import t3toolbox.tucker_tensor_train as t3 >>> import t3toolbox.manifold as t3m >>> import t3toolbox.orthogonalization as orth >>> import t3toolbox.basis_coordinates_format as bvf >>> p = t3.t3_corewise_randn(((14,15,16), (4,5,6), (2,3,2,2))) >>> base, _ = orth.orthogonal_representations(p) >>> variation = t3m.tangent_randn(base) >>> v_dense = t3m.tangent_to_dense(variation, base) # Convert tangent to dense >>> ((U0,U1,U2), (L0,L1,L2), (R0,R1,R2), (O0,O1,O2)) = base >>> ((V0,V1,V2), (H0,H1,H2)) = variation >>> s1 = np.einsum('ai,bj,ck,xay,ybz,zcw->ijk', U0,U1,U2,H0,R1,R2) >>> s2 = np.einsum('ai,bj,ck,xay,ybz,zcw->ijk', U0,U1,U2,L0,H1,R2) >>> s3 = np.einsum('ai,bj,ck,xay,ybz,zcw->ijk', U0,U1,U2,L0,L1,H2) >>> s4 = np.einsum('ai,bj,ck,xay,ybz,zcw->ijk', V0,U1,U2,O0,R1,R2) >>> s5 = np.einsum('ai,bj,ck,xay,ybz,zcw->ijk', U0,V1,U2,L0,O1,R2) >>> s6 = np.einsum('ai,bj,ck,xay,ybz,zcw->ijk', U0,U1,V2,L0,L1,O2) >>> v_dense2 = s1 + s2 + s3 + s4 + s5 + s6 >>> print(np.linalg.norm(v_dense - v_dense2)) 1.2760924630140578e-14 >>> p_plus_v_dense = t3m.tangent_to_dense(variation, base, include_shift=True) # Convert shifted tangent, p+v, to dense >>> p_plus_v_dense2 = t3.t3_to_dense(p) + v_dense >>> print(np.linalg.norm(p_plus_v_dense - p_plus_v_dense2)) 1.2677102046134292e-12