From b798c3bb8008fea4b8a15c67f36fe8136ff6673b Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Thu, 21 Nov 2024 09:52:34 +0000 Subject: [PATCH] build based on dd25a16 --- previews/PR255/.documenter-siteinfo.json | 2 +- previews/PR255/tensors.html | 12 ++++++------ previews/PR255/transformations-29bd62b7.png | Bin 18030 -> 0 bytes previews/PR255/transformations-75427db6.png | Bin 0 -> 18024 bytes previews/PR255/transformations.html | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 previews/PR255/transformations-29bd62b7.png create mode 100644 previews/PR255/transformations-75427db6.png diff --git a/previews/PR255/.documenter-siteinfo.json b/previews/PR255/.documenter-siteinfo.json index ee8118fa..07921b83 100644 --- a/previews/PR255/.documenter-siteinfo.json +++ b/previews/PR255/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-11-21T09:52:23","documenter_version":"1.8.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.11.1","generation_timestamp":"2024-11-21T09:52:28","documenter_version":"1.8.0"}} \ No newline at end of file diff --git a/previews/PR255/tensors.html b/previews/PR255/tensors.html index 7555625a..04f5968d 100644 --- a/previews/PR255/tensors.html +++ b/previews/PR255/tensors.html @@ -1,11 +1,11 @@ Tensors · Tenet.jl

Tensors

There are many jokes[1] about how to define a tensor. The definition we are giving here might not be the most correct one, but it is good enough for our use case (don't kill me please, mathematicians). A tensor $T$ of order[2] $n$ is a multilinear[3] application between $n$ vector spaces over a field $\mathcal{F}$.

\[T : \mathcal{F}^{\dim(1)} \times \dots \times \mathcal{F}^{\dim(n)} \mapsto \mathcal{F}\]

In layman's terms, it is a linear function whose inputs are vectors and the output is a scalar number.

\[T(\mathbf{v}^{(1)}, \dots, \mathbf{v}^{(n)}) = c \in \mathcal{F} \qquad\qquad \forall i, \mathbf{v}^{(i)} \in \mathcal{F}^{\dim(i)}\]

Tensor algebra is a higher-order generalization of linear algebra, where scalar numbers can be viewed as order-0 tensors, vectors as order-1 tensors, matrices as order-2 tensors, ...

Letters are used to identify each of the vector spaces the tensor relates to. In computer science, you would intuitively think of tensors as "n-dimensional arrays with named dimensions".

\[T_{ijk} \iff \mathtt{T[i,j,k]}\]

The Tensor type

In Tenet, a tensor is represented by the Tensor type, which wraps an array and a list of symbols. As it subtypes AbstractArray, many array operations can be dispatched to it.

You can create a Tensor by passing an array and a list of Symbols that name indices.

julia> Tᵢⱼₖ = Tensor(rand(3,5,2), (:i,:j,:k))3×5×2 Tensor{Float64, 3, Array{Float64, 3}}:
 [:, :, 1] =
- 0.948613  0.829285  0.819368   0.381128   0.145871
- 0.886361  0.161633  0.0426221  0.0273748  0.570567
- 0.458981  0.620724  0.555383   0.0668311  0.630917
+ 0.591392  0.499633  0.675227  0.186081   0.505033
+ 0.361674  0.264754  0.556073  0.745471   0.655058
+ 0.834783  0.989294  0.981009  0.0563247  0.449567
 
 [:, :, 2] =
- 0.431614  0.494151   0.298355  0.393384  0.276856
- 0.885448  0.0992291  0.581982  0.954357  0.384265
- 0.834856  0.104122   0.442789  0.345902  0.335081

The dimensionality or size of each index can be consulted using the size function.

Base.sizeMethod
Base.size(::Tensor[, i])

Return the size of the underlying array or the dimension i (specified by Symbol or Integer).

source
julia> size(Tᵢⱼₖ)(3, 5, 2)
julia> size(Tᵢⱼₖ, :j)5
julia> length(Tᵢⱼₖ)30

Operations

Contraction

Graphs.LinAlg.contractMethod
contract(a::Tensor[, b::Tensor]; dims=nonunique([inds(a)..., inds(b)...]))

Perform tensor contraction operation.

source

Factorizations

LinearAlgebra.svdMethod
LinearAlgebra.svd(tensor::Tensor; left_inds, right_inds, virtualind, kwargs...)

Perform SVD factorization on a tensor.

Keyword arguments

  • left_inds: left indices to be used in the SVD factorization. Defaults to all indices of t except right_inds.
  • right_inds: right indices to be used in the SVD factorization. Defaults to all indices of t except left_inds.
  • virtualind: name of the virtual bond. Defaults to a random Symbol.
source
LinearAlgebra.qrMethod
LinearAlgebra.qr(tensor::Tensor; left_inds, right_inds, virtualind, kwargs...)

Perform QR factorization on a tensor.

Keyword arguments

  • left_inds: left indices to be used in the QR factorization. Defaults to all indices of t except right_inds.
  • right_inds: right indices to be used in the QR factorization. Defaults to all indices of t except left_inds.
  • virtualind: name of the virtual bond. Defaults to a random Symbol.
source
LinearAlgebra.luMethod
LinearAlgebra.lu(tensor::Tensor; left_inds, right_inds, virtualind, kwargs...)

Perform LU factorization on a tensor.

Keyword arguments

  • left_inds: left indices to be used in the LU factorization. Defaults to all indices of t except right_inds.
  • right_inds: right indices to be used in the LU factorization. Defaults to all indices of t except left_inds.
  • virtualind: name of the virtual bond. Defaults to a random Symbol.
source
  • 1For example, recursive definitions like a tensor is whatever that transforms as a tensor.
  • 2The order of a tensor may also be known as rank or dimensionality in other fields. However, these can be missleading, since it has nothing to do with the rank of linear algebra nor with the dimensionality of a vector space. We prefer to use word order.
  • 3Meaning that the relationships between the output and the inputs, and the inputs between them, are linear.
+ 0.365638 0.0552327 0.854676 0.958947 0.664245 + 0.904802 0.762236 0.534377 0.226843 0.752238 + 0.26818 0.989104 0.231947 0.167473 0.379442

The dimensionality or size of each index can be consulted using the size function.

Base.sizeMethod
Base.size(::Tensor[, i])

Return the size of the underlying array or the dimension i (specified by Symbol or Integer).

source
julia> size(Tᵢⱼₖ)(3, 5, 2)
julia> size(Tᵢⱼₖ, :j)5
julia> length(Tᵢⱼₖ)30

Operations

Contraction

Graphs.LinAlg.contractMethod
contract(a::Tensor[, b::Tensor]; dims=nonunique([inds(a)..., inds(b)...]))

Perform tensor contraction operation.

source

Factorizations

LinearAlgebra.svdMethod
LinearAlgebra.svd(tensor::Tensor; left_inds, right_inds, virtualind, kwargs...)

Perform SVD factorization on a tensor.

Keyword arguments

  • left_inds: left indices to be used in the SVD factorization. Defaults to all indices of t except right_inds.
  • right_inds: right indices to be used in the SVD factorization. Defaults to all indices of t except left_inds.
  • virtualind: name of the virtual bond. Defaults to a random Symbol.
source
LinearAlgebra.qrMethod
LinearAlgebra.qr(tensor::Tensor; left_inds, right_inds, virtualind, kwargs...)

Perform QR factorization on a tensor.

Keyword arguments

  • left_inds: left indices to be used in the QR factorization. Defaults to all indices of t except right_inds.
  • right_inds: right indices to be used in the QR factorization. Defaults to all indices of t except left_inds.
  • virtualind: name of the virtual bond. Defaults to a random Symbol.
source
LinearAlgebra.luMethod
LinearAlgebra.lu(tensor::Tensor; left_inds, right_inds, virtualind, kwargs...)

Perform LU factorization on a tensor.

Keyword arguments

  • left_inds: left indices to be used in the LU factorization. Defaults to all indices of t except right_inds.
  • right_inds: right indices to be used in the LU factorization. Defaults to all indices of t except left_inds.
  • virtualind: name of the virtual bond. Defaults to a random Symbol.
source
diff --git a/previews/PR255/transformations-29bd62b7.png b/previews/PR255/transformations-29bd62b7.png deleted file mode 100644 index 0775f1b09f301724726efe2c3eed44b6821c0c7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18030 zcmc({cQn@j|37}&5<(OrTLTfYM+qq-O7<#>G9r7El_E(gD@jJkNOo4rO0-DXDYD5X zd~a8;&-Z)2=lss^&)@lZo%7~>T(0Z+d_L}v`~9{aMe6FDprc`@ArJ_3CpA>h5C~-4 z__>*y6#tt##iWgIlovEls1mk_|2?kGiX#xX2`5#L>3bzl^?57kuWwP!cCa2_^1t=w zPBky%LCpgnSq#T^iMaKc^({S}%6w^8EwUWH>)?TxX3Vh;0wP^^GsNPVzkOv3Hx39) zp1E36lWiK6z&CVOyquLo_Z~dh8L2us>c75JQCX?3s%mwsz@l1QLgH3rq>G!| zPm80oe8ECS#22ej$7=BB)s0V1w!MG9xU_WXxwxccvaIVRA0N5pPr+QY%>U=?VRkVEm_>rWHy8i2bw||tH=j_?f3kwTH)=lheY>|oB?m=B zrds0mea_S#zMwE`U4KlG9-nLFgm%n(|uLLjnTs%9E7?XuG77; zSFc_@eY)e_1JRi5E9u3>aYwlq*zQx*?LHd37~=hRWlpsAuS%Nk^^lO=!bWvdGWht> z=2*U(nwnd?L@EO|Y1IFF52q+M1ed@yoQdGzAZuD^5;=Op)Q? z;U*>~hWTcC`uYxbcE2Yl-we+U4Gqnf?DA9G`}a@%yuQBvBL(jlzRS~mCvLyOr6?$v z>FLGxq!9>w&83b#vtEC@o|_(EZcUN*B&VRLNV(z2v~%Y({VO&$PoF;hS>-wN>eZ`} z_eo_J-|bRTQp(P+lV&^S`N4aevU1?jqet!R>@HmzL8+xG2ewbC5`tnc&X2qwZBMxs z9i5^a7+`3)yKK0SE>iW=*RK!m-BYD*X>BbnEv4DEjZ@KQ0q;9CHPx#_6~M1+wNcmG z*O#j3D|O||eof7HxLjv>dV-aWah1nZ*!JB&e*6g7T(y1ltVmT=_29vSxNim(FNK=) zbTS_Pg9mRm4CUnJR^UNu;6WB?C(9h(x6ii!l{XeaGhR5Dje|f)etD%c=hkjfL4JN2 zSy^`vk8ASudt~J0KaVXuJDbHDif47f+8WPdxG5$nG4ajYxBuSH>W;jqm3YF5n7w@^ z_7CFYyZWj;-QC?Qi0g7aG%QTSw6yK@YhEcS1C(WtOL$Ip_I@cTkBP45{7ffLpFXXj zkzG>K+0t?VSK0HiE{2>&xIZ>AvC{726Ks~j!NJw}QCH%vl1JXSVf4Z#G9lqx2-S`^ zZ{C!1MmU~2b&8jl_i09kqM~A0XlOYn74Z N<#&b9Q(4U;UF26Vp*2LN({5P_~nV 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 C(}$S= literal 0 HcmV?d00001 diff --git a/previews/PR255/transformations.html b/previews/PR255/transformations.html index 9edf1044..4cd01426 100644 --- a/previews/PR255/transformations.html +++ b/previews/PR255/transformations.html @@ -1,4 +1,4 @@ Transformations · Tenet.jl

Transformations

In tensor network computations, it is good practice to apply various transformations to simplify the network structure, reduce computational cost, or prepare the network for further operations. These transformations modify the network's structure locally by permuting, contracting, factoring or truncating tensors.

A crucial reason why these methods are indispensable lies in their ability to drastically reduce the problem size of the contraction path search and also the contraction. This doesn't necessarily involve reducing the maximum rank of the Tensor Network itself, but more importantly, it reduces the size (or rank) of the involved tensors.

Our approach is based in (Gray and Kourtis, 2021), which can also be found in quimb.

In Tenet, we provide a set of predefined transformations which you can apply to your TensorNetwork using both the transform/transform! functions.

Tenet.transformFunction
transform(tn::TensorNetwork, config::Transformation)
 transform(tn::TensorNetwork, configs)

Return a new TensorNetwork where some Transformation has been performed into it.

See also: transform!.

source
Tenet.transform!Function
transform!(tn::TensorNetwork, config::Transformation)
-transform!(tn::TensorNetwork, configs)

In-place version of transform.

source

Available transformations

Hyperindex converter

Tenet.HyperFlattenType
HyperFlatten <: Transformation

Convert hyperindices to COPY-tensors, represented by DeltaArrays. This transformation is always used by default when visualizing a TensorNetwork with plot.

See also: HyperGroup.

source

Contraction simplification

Example block output

Diagonal reduction

Tenet.DiagonalReductionType
DiagonalReduction <: Transformation

Reduce the dimension of a Tensor in a TensorNetwork when it has a pair of indices that fulfil a diagonal structure.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-12.
source
Example block output

Anti-diagonal reduction

Tenet.AntiDiagonalGaugingType
AntiDiagonalGauging <: Transformation

Reverse the order of tensor indices that fulfill the anti-diagonal condition. While this transformation doesn't directly enhance computational efficiency, it sets up the TensorNetwork for other operations that do.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-12.
  • skip List of indices to skip. Defaults to [].
source

Dimension truncation

Tenet.TruncateType
Truncate <: Transformation

Truncate the dimension of a Tensor in a TensorNetwork when it contains columns with all elements smaller than atol.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-12.
  • skip List of indices to skip. Defaults to [].
source
Example block output

Split simplification

Tenet.SplitSimplificationType
SplitSimplification <: Transformation

Reduce the rank of tensors in the TensorNetwork by decomposing them using the Singular Value Decomposition (SVD). Tensors whose factorization do not increase the maximum rank of the network are left decomposed.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-10.
source
Example block output
+transform!(tn::TensorNetwork, configs)

In-place version of transform.

source

Available transformations

Hyperindex converter

Tenet.HyperFlattenType
HyperFlatten <: Transformation

Convert hyperindices to COPY-tensors, represented by DeltaArrays. This transformation is always used by default when visualizing a TensorNetwork with plot.

See also: HyperGroup.

source

Contraction simplification

Example block output

Diagonal reduction

Tenet.DiagonalReductionType
DiagonalReduction <: Transformation

Reduce the dimension of a Tensor in a TensorNetwork when it has a pair of indices that fulfil a diagonal structure.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-12.
source
Example block output

Anti-diagonal reduction

Tenet.AntiDiagonalGaugingType
AntiDiagonalGauging <: Transformation

Reverse the order of tensor indices that fulfill the anti-diagonal condition. While this transformation doesn't directly enhance computational efficiency, it sets up the TensorNetwork for other operations that do.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-12.
  • skip List of indices to skip. Defaults to [].
source

Dimension truncation

Tenet.TruncateType
Truncate <: Transformation

Truncate the dimension of a Tensor in a TensorNetwork when it contains columns with all elements smaller than atol.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-12.
  • skip List of indices to skip. Defaults to [].
source
Example block output

Split simplification

Tenet.SplitSimplificationType
SplitSimplification <: Transformation

Reduce the rank of tensors in the TensorNetwork by decomposing them using the Singular Value Decomposition (SVD). Tensors whose factorization do not increase the maximum rank of the network are left decomposed.

Keyword Arguments

  • atol Absolute tolerance. Defaults to 1e-10.
source
Example block output