Represents the Tensor formed by the outer product of two tensors.
More...
#include <OuterProd.hpp>
Public Member Functions | |
| OuterProd (const LHS &l, const RHS &r) | |
| template<int L, CacheMode Mode> | |
| auto | vectorReadImpl (const Vec< int, Rank > &dims) const |
| sp::Vec< int, Rank > | dimsImpl () const |
Public Member Functions inherited from sp::TensorTensorOp< OuterProd< LHS, RHS >, LHS::Rank+RHS::Rank, LHS, RHS > | |
| TensorTensorOp (Children... args) | |
| auto | dimsImpl () const |
Delegate dims() to the first subexpression. A helpful default. More... | |
| int | totalSizeImpl () const |
Delegate totalSize() to the first child. More... | |
Public Member Functions inherited from sp::TensorOp< Subtype, ExprRank, Children > | |
| constexpr | TensorOp (Children... args) |
Public Member Functions inherited from sp::Operator< Subtype, Children... > | |
| constexpr auto & | child () |
| Access children. More... | |
| constexpr const auto & | child () const |
| constexpr auto & | lhs () |
| Get the first subexpression if this is a binary operation. More... | |
| constexpr const auto & | lhs () const |
| constexpr auto & | rhs () |
| Get the second subexpression if this is a binary operation. More... | |
| constexpr const auto & | rhs () const |
| constexpr void | forEachChild (F &lambda) |
| Run a lambda function on each child. More... | |
Public Member Functions inherited from sp::TensorLike< Subtype, ExprRank==INHERIT_RANK ? sp::deduce_rank_v< __type_pack_element< 0, Children... > > :ExprRank > | |
| auto | dims () const |
| bool | boundsCheck (const Vec< int, Rank > &pos) const |
| auto | vectorRead (const Vec< int, Rank > &pos) const |
| auto | vectorOffsetRead (const Vec< int, Rank > &base, const Vec< int, Rank > &offset) const |
| auto | maskedVectorRead (const Vec< int, Rank > &pos) const |
| void | vectorWrite (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| void | maskedVectorWrite (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| int | sizeQuantisation () const |
| int | totalSize () const |
Get the total memory occupied by the Tensor, in terms of elements. More... | |
| auto | getView (const sp::Vec< int, Rank > &start, const sp::Vec< int, Rank > &size) |
| Get an object that represents (and aliases) a portion of this object. More... | |
| int | dim (int d) const |
| Behaviour common to all TensorLikes ///. More... | |
| auto | read (const Vec< int, Rank > &pos) const |
| Get the element at a given position. More... | |
| void | write (const Vec< int, Rank > &pos, const T &value) |
| Set a single element. More... | |
| int | size () const |
| void | boundsCheckAccess (Vec< int, Rank > pos) const |
Bounds-check an L-element vector read at pos. More... | |
Static Public Attributes | |
| static constexpr int | Rank = LHS::Rank + RHS::Rank |
Static Public Attributes inherited from sp::TensorTensorOp< OuterProd< LHS, RHS >, LHS::Rank+RHS::Rank, LHS, RHS > | |
| static constexpr int | Arity |
| static constexpr int | MaxVectorSize |
Static Public Attributes inherited from sp::Operator< Subtype, Children... > | |
| static constexpr int | Arity |
Static Public Attributes inherited from sp::TensorLike< Subtype, ExprRank==INHERIT_RANK ? sp::deduce_rank_v< __type_pack_element< 0, Children... > > :ExprRank > | |
| constexpr static int | Rank |
Additional Inherited Members | |
Public Types inherited from sp::TensorTensorOp< OuterProd< LHS, RHS >, LHS::Rank+RHS::Rank, LHS, RHS > | |
| using | ValueType = sp::value_type_or_common_t< OuterProd< LHS, RHS >, typename Children::ValueType... > |
| using | Opts = typename sp::MergeTensorOpts< typename Children::Opts... >::type |
Public Types inherited from sp::Operator< Subtype, Children... > | |
| using | Traits = f::Traits< void > |
Static Public Member Functions inherited from sp::Operator< Subtype, Children... > | |
| constexpr static bool | commutative () |
| constexpr static bool | associative () |
| constexpr static bool | total () |
| constexpr static bool | hasIdentity () |
| constexpr static bool | invertible () |
| constexpr static auto | getIdentityImpl () |
| constexpr static auto | getIdentity () |
Protected Member Functions inherited from sp::Operator< Subtype, Children... > | |
| constexpr | Operator (Children... args) |
| constexpr void | forEachChild (F &lambda, sp::int_sequence< I... > &) |
Protected Member Functions inherited from sp::TensorLike< Subtype, ExprRank==INHERIT_RANK ? sp::deduce_rank_v< __type_pack_element< 0, Children... > > :ExprRank > | |
| auto | dimsImpl () const |
Get an sp::Vec<int, X> representing the dimensions of the object. More... | |
| bool | boundsCheckImpl (const sp::Vec< int, Rank > &) const |
| Return true iff the given coordinates are inside the object (Default implementation below) More... | |
| int | sizeQuantisationImpl () const |
| The last dimension is rounded up to the next multiple of this value for the purposes of bounds checks. More... | |
| auto | vectorReadImpl (const Vec< int, Rank > &) const |
| Read L elements, adjacent in the last dimension, starting at the given position. More... | |
| auto | vectorOffsetReadImpl (const Vec< int, Rank > &base, const Vec< int, Rank > &offset) const |
Read L elements, adjacent in the last dimension, from position base + offset. More... | |
| auto | maskedVectorReadImpl (const Vec< int, Rank > &pos) const |
| Do a vectorRead that copes with the possibility of part of the vector being out of bounds. More... | |
| void | maskedVectorWriteImpl (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| Do a vectorWrite that copes with the possibility of part of the vector being out of bounds. More... | |
| void | vectorWriteImpl (const Vec< int, Rank > &pos, const Vec< T, L > &values) |
| Write L elements, adjacent in the last dimension, starting at the given position. More... | |
| auto | getViewImpl (const sp::Vec< int, Rank > &start, const sp::Vec< int, Rank > &size) |
The default implementation just makes a TensorView. Not hugely fast, but always works. More... | |
Protected Attributes inherited from sp::Operator< Subtype, Children... > | |
| std::tuple< Children... > | children |
Represents the Tensor formed by the outer product of two tensors.
When applied to two rank-1 Tensors, or Vectors, produces the matrix given by the first multiplied by the transpose of the second.
Lazily generates the elements on demand.