Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Public Attributes | Static Public Attributes | List of all members
uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank > Struct Template Reference

Canonical contracted and surviving axes for two fixed-rank operands. More...

#include <contraction_axes.hpp>

Public Attributes

std::array< std::size_t, contracted_rank > lhs_contracted {}
 
std::array< std::size_t, lhs_surviving_rank > lhs_surviving {}
 
std::array< std::size_t, contracted_rank > rhs_contracted {}
 
std::array< std::size_t, rhs_surviving_rank > rhs_surviving {}
 

Static Public Attributes

static constexpr std::size_t contracted_rank = ContractedRank
 
static constexpr std::size_t lhs_rank = LhsRank
 
static constexpr std::size_t lhs_surviving_rank = lhs_rank - contracted_rank
 
static constexpr std::size_t output_rank = lhs_surviving_rank + rhs_surviving_rank
 
static constexpr std::size_t rhs_rank = RhsRank
 
static constexpr std::size_t rhs_surviving_rank = rhs_rank - contracted_rank
 

Detailed Description

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
struct uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >

Canonical contracted and surviving axes for two fixed-rank operands.

Contracted pairs are ordered by the left operand axis. Surviving axes retain their original order. The corresponding output order is all surviving left axes followed by all surviving right axes.

Member Data Documentation

◆ contracted_rank

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
constexpr std::size_t uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::contracted_rank = ContractedRank
staticconstexpr

◆ lhs_contracted

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
std::array<std::size_t, contracted_rank> uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::lhs_contracted {}

◆ lhs_rank

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
constexpr std::size_t uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::lhs_rank = LhsRank
staticconstexpr

◆ lhs_surviving

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
std::array<std::size_t, lhs_surviving_rank> uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::lhs_surviving {}

◆ lhs_surviving_rank

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
constexpr std::size_t uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::lhs_surviving_rank = lhs_rank - contracted_rank
staticconstexpr

◆ output_rank

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
constexpr std::size_t uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::output_rank = lhs_surviving_rank + rhs_surviving_rank
staticconstexpr

◆ rhs_contracted

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
std::array<std::size_t, contracted_rank> uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::rhs_contracted {}

◆ rhs_rank

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
constexpr std::size_t uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::rhs_rank = RhsRank
staticconstexpr

◆ rhs_surviving

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
std::array<std::size_t, rhs_surviving_rank> uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::rhs_surviving {}

◆ rhs_surviving_rank

template<std::size_t LhsRank, std::size_t RhsRank, std::size_t ContractedRank>
constexpr std::size_t uni20::linalg::ContractionAxes< LhsRank, RhsRank, ContractedRank >::rhs_surviving_rank = rhs_rank - contracted_rank
staticconstexpr

The documentation for this struct was generated from the following file: