Skip to content

support for general tensor products #224

@evaleev

Description

@evaleev

General tensor product is a binary multiplication operation that can contain the following 3 types of indices:

  • fused indices that appear in each argument and in the result
  • contracted indices that appear in each argument but not in the result
  • free indices that appear once on the RHS; clearly, free indices also appear in the result
    For example, consider the following product:
  c("i,j,k") = a("i,j,o") * b("k,j,o")

Index j is fused, index o is contracted, and indices i and k are free.

N.B. Here we exclude the cases where duplicate indices appear in one of the arguments. Products involving such operations can be composed efficiently from unary add reductions (i.e., traces), thus will not be considered here. We only consider general products that are irreducible parts of an efficient computational basis.

Currently TA supports 2 types of tensor products:

  • Hadamard product, in which all indices are fused; e.g., c("i,j") = a("i,j") * b("j,i"), and
  • covariant contraction that involves zero or more contracted and one or more free indices; e.g., c("i,j") = a("i,k") * b("j,k") (the covariant contraction where no free indices appear is efficiently implemented as a binary multiply-add reduction)

The purpose of this issue is to track implementation of support for general tensor products.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions