Linear algebra =============== Currently, Cytnx supports the following linear algebra functions. See the :cytnx_latest_api:`API documentation<>` for more details. +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | func | Inplace | CPU | GPU | Called by Tn| Tn | CyTn (xlinalg) | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Add <#ac61bd0f99306496fae81f8601fa4070c>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Sub <#a9918295b0d2d78fa475390e91ccbf57b>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Mul <#a8705f85e347439577708173ab963f909>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Div <#affc6138760ac67505ae194edf14525e8>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Cpr <#aea125f2928934007725809426bb77e38>` | x | Y | Y | Y | Y | x | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Mod <#a56d73db3d0cdd3a2ca5ed5f88f0738ff>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_namespace:`+,+=[tn] <#ad1f97cdff6a9825441592b906d8ae330>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_namespace:`-,-=[tn] <#a64cab629757608840015fd955f53f961>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_namespace:`*,*=[tn] <#a0b23c5c933bf53cc25b8e94bf0e8cd80>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_namespace:`/,/=[tn] <#adf098bf65b5c3fb990065f0df05d087c>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_namespace:`==[tn] <#a6d2f2c308c9fbe7a791d981aa48ec5b6>` | x | Y | Y | Y | Y | x | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Svd <#a49a33a99468fba6213383b2f83ee7716>` | x | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`(\*)Svd_truncate <#a0d98109dac0a642fe635d19db262a12b>` | x | Y | Y | N | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`InvM <#af819d2fc4522d2a6287aa16dfbe3f787>` | \InvM_ | Y | Y | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Inv <#a8680f6a91b7110d68c1d9e9a4da700d6>` | \Inv_ | Y | Y | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Conj <#a470d0886432554a35ecaf961451c0806>` | \Conj_ | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Exp <#aac38382cbc0e8202411c96a0ff636471>` | \Exp_ | Y | Y | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Expf <#a5831918722e5d18f4eaf37834b8fbf77>` | \Expf_ | Y | Y | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Eigh <#a63fb9c9751ff27d22f84a52a876cc6fc>` | x | Y | Y | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`ExpH <#ae394378db613a244ad518504047669c0>` | x | Y | Y | N | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`ExpM <#ad5c478aa9da366c15ec7a2351dc99d93>` | x | Y | N | N | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Matmul <#a53feb441b4b1bd263714ed33e093728f>` | x | Y | Y | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Diag <#a5913f0bdd6cc130aeb927f42a874a149>` | x | Y | Y | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`(\*)Tensordot <#a242f1b9c1ee7938ba050121773ab4b55>` | x | Y | Y | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Outer <#a3e8edc89fdabb9c0f9b342198a31798b>` | x | Y | Y | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Vectordot <#aa69a91a5651fce55380cf800c6030d73>` | x | Y | Y | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Tridiag <#a5a502c7d0a6a46f0e695f211a42ab9dc>` | x | Y | N | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Kron <#abc22428de7f69d2afc9a27fca76bfe15>` | x | Y | N | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Norm <#a9cd2be179860bb4742ebe320fa063680>` | x | Y | Y | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`(\*)Dot <#a215dbfd2aa7ef898450de7afff726bca>` | x | Y | Y | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Eig <#a243ceac5dc7d4a8c983b0e7693b97489>` | x | Y | N | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Pow <#af2e15ace1ea23939174fdea1829430fd>` | \Pow_ | Y | Y | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Abs <#a3ded6435c7b47eb348d03783bfe72611>` | \Abs_ | Y | N | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Qr <#a194461432b34c60984a02569a4d9c903>` | x | Y | N | N | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Det <#a5fd73573057cda064a77f69c927a45dc>` | x | Y | N | N | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Min <#a25b5f2fdfb550aabc9cc41daa963e1fb>` | x | Y | N | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`Max <#a93ef263824e2dcdab4832ea628959d19>` | x | Y | N | Y | Y | N | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ | :cytnx_linalg:`(\*Trace) <#ad5acb5c8d20b164b52affdd2e747e46b>` | x | Y | N | Y | Y | Y | +-----------------------------------------------------------------------+---------+-----+------+-------------+----+----------------+ **Inplace**: If the function applies inplacely to the input tensor, and the corresponding function to use if it does. **CPU/GPU**: If it is supported for input tensors on that device. **Called by Tn**: If the function can be called as a member function of the tensor object, e.g. Tensor1.add(Tensor2) **Tn**: If the function supports the Cytnx.Tensor as input. **CyTn**: If the function supports the Cytnx.UniTensor as input. **(\*)**: This is a high level linalg. Many linear algebra functions can be used with Tensors and UniTensors. Most of the linear algebra algorithms take a matrix as an input. We use :ref:`rowrank` to specify how to cast the input UniTensor into a matrix. See :ref:`rowrank` as well for an example of how to calculate a singular value decomposition of a UniTensor. .. toctree:: :maxdepth: 3