Tatooine
Public Types | Public Member Functions | Static Public Member Functions | List of all members
tatooine::tensor< T > Struct Template Reference

#include <dynamic_tensor.h>

Inheritance diagram for tatooine::tensor< T >:
[legend]
Collaboration diagram for tatooine::tensor< T >:
[legend]

Public Types

using this_type = tensor< T >
 
using parent_type = dynamic_multidim_array< T >
 
template<einstein_notation::index... Is>
using const_indexed_type = einstein_notation::indexed_dynamic_tensor< this_type const &, Is... >
 
template<einstein_notation::index... Is>
using indexed_type = einstein_notation::indexed_dynamic_tensor< this_type &, Is... >
 
- Public Types inherited from tatooine::dynamic_multidim_array< T >
using value_type = T
 
using index_order = x_fastest
 
using this_type = dynamic_multidim_array< value_type, index_order >
 
using parent_type = dynamic_multidim_size< index_order >
 
using container_type = std::vector< value_type >
 
- Public Types inherited from tatooine::dynamic_multidim_size< IndexOrder >
using this_type = dynamic_multidim_size< IndexOrder >
 
using index_order_type = IndexOrder
 

Public Member Functions

 tensor ()=default
 
 tensor (tensor const &other)=default
 
 tensor (tensor &&other) noexcept=default
 
auto operator= (tensor const &other) -> tensor &=default
 
auto operator= (tensor &&other) noexcept -> tensor &=default
 
 ~tensor ()=default
 
 tensor (dynamic_tensor auto &&other)
 
 tensor (integral auto const ... dimensions)
 
 tensor (tag::ones_t tag, integral auto... dimensions)
 
 tensor (tag::ones_t tag, integral_range auto &&dimensions)
 
 tensor (tag::zeros_t tag, integral auto... dimensions)
 
 tensor (tag::zeros_t tag, integral_range auto &&dimensions)
 
template<random_number_generator Rand>
 tensor (Rand &&rand, integral auto const ... dimensions)
 
template<random_number_generator Rand, integral_range Dimensions>
 tensor (Rand &&rand, Dimensions &&dimensions)
 
template<general_tensor OtherTensor>
 tensor (OtherTensor const &other)
 
template<convertible_to< T >... Components>
requires ( (!integral<std::decay_t<Components>> && ...))
 tensor (Components &&... components)
 Constructs a rank 1 tensor aka vector. More...
 
template<floating_point_range Components>
 tensor (Components &&components)
 Constructs a rank 1 tensor aka vector. More...
 
template<arithmetic_or_complex... Rows, std::size_t N>
 tensor (Rows(&&... rows)[N])
 Constructs a rank 2 tensor aka matrix. More...
 
template<general_tensor OtherTensor>
auto operator= (OtherTensor const &other) -> tensor< T > &
 
auto assing_self_transposed (general_tensor auto const &other)
 
auto assign (general_tensor auto const &other)
 
auto dimensions () const
 
auto dimension (std::size_t const i) const
 
auto rank () const
 
template<einstein_notation::index... Is>
auto at (Is const ...)
 
template<einstein_notation::index... Is>
auto at (Is const ...) const
 
auto operator() (einstein_notation::index auto const ... is) const
 
auto operator() (einstein_notation::index auto const ... is)
 
auto at (integral auto const ... is) -> auto &
 
auto at (integral auto const ... is) const -> auto const &
 
auto operator() (integral auto const ... is) -> auto &
 
auto operator() (integral auto const ... is) const -> auto const &
 
- Public Member Functions inherited from tatooine::dynamic_multidim_array< T >
 dynamic_multidim_array ()=default
 
 dynamic_multidim_array (dynamic_multidim_array const &other)=default
 
 dynamic_multidim_array (dynamic_multidim_array &&other) noexcept=default
 
constexpr dynamic_multidim_array (dynamic_multidim_array< OtherT, OtherIndexing > const &other)
 
 dynamic_multidim_array (integral auto const ... size)
 
 dynamic_multidim_array (tag::fill< S > const &f, integral auto const ... size)
 
 dynamic_multidim_array (tag::zeros_t const &, integral auto const ... size)
 
 dynamic_multidim_array (tag::ones_t const &, integral auto const ... size)
 
 dynamic_multidim_array (std::vector< value_type > const &data, integral auto const ... size)
 
 dynamic_multidim_array (std::vector< value_type > &&data, integral auto const ... size)
 
 dynamic_multidim_array (Size &&size)
 
 dynamic_multidim_array (tag::fill< S > const &f, Size &&size)
 
 dynamic_multidim_array (tag::zeros_t const &, Size &&size)
 
 dynamic_multidim_array (tag::ones_t const &, Size &&size)
 
 dynamic_multidim_array (std::vector< value_type > const &data, Size &&size)
 
 dynamic_multidim_array (Data &&data, Size &&size)
 
 dynamic_multidim_array (Rand &&rand, Size &&size)
 
 dynamic_multidim_array (Rand &&rand, integral auto const ... size)
 
auto operator= (dynamic_multidim_array const &other) -> dynamic_multidim_array &=default
 
auto operator= (dynamic_multidim_array &&other) noexcept -> dynamic_multidim_array &=default
 
auto operator= (dynamic_multidim_array< OtherT, OtherIndexing > const &other) -> dynamic_multidim_array &
 
 ~dynamic_multidim_array ()=default
 
auto at (Int const ... is) -> auto &
 
auto at (Int const ... is) const -> auto const &
 
auto at (integral_range auto const &indices) -> auto &
 
auto at (integral_range auto const &indices) const -> auto const &
 
auto operator() (integral_range auto const &indices) -> auto &
 
auto operator() (integral_range auto const &indices) const -> auto const &
 
auto operator() (Int const ... is) -> auto &
 
auto operator() (Int const ... is) const -> auto const &
 
auto operator[] (std::size_t i) const -> auto const &
 
auto operator[] (std::size_t i) -> auto &
 
auto resize (integral auto const ... size) -> void
 
auto resize (integral_range auto const &res, value_type const value=value_type{}) -> void
 
constexpr auto internal_container () -> auto &
 
constexpr auto internal_container () const -> auto const &
 
constexpr auto data (std::size_t const i) -> auto &
 
constexpr auto data (std::size_t const i) const -> auto const &
 
constexpr auto data ()
 
constexpr auto data () const
 
void unary_operation (F &&f)
 
constexpr void binary_operation (F &&f, dynamic_multidim_array< OtherT, OtherIndexing > const &other)
 
auto constexpr in_range (integral auto const ... indices) const
 
auto constexpr in_range (integral_range auto const &indices) const
 
auto indices () const
 
auto num_components () const
 
auto num_dimensions () const
 
auto constexpr plain_index (integral auto const ... indices) const
 
auto constexpr plain_index (integral_range auto const &indices) const
 
auto size () const -> auto const &
 
auto size (std::size_t const i) const
 
- Public Member Functions inherited from tatooine::dynamic_multidim_size< IndexOrder >
 dynamic_multidim_size ()=default
 
 dynamic_multidim_size (dynamic_multidim_size const &other)=default
 
 dynamic_multidim_size (dynamic_multidim_size &&other) noexcept=default
 
auto operator= (dynamic_multidim_size const &other) -> dynamic_multidim_size &=default
 
auto operator= (dynamic_multidim_size &&other) noexcept -> dynamic_multidim_size &=default
 
 ~dynamic_multidim_size ()=default
 
template<typename OtherIndexing >
 dynamic_multidim_size (dynamic_multidim_size< OtherIndexing > const &other)
 
template<typename OtherIndexing >
 dynamic_multidim_size (dynamic_multidim_size< OtherIndexing > &&other)
 
template<typename OtherIndexing >
auto operator= (dynamic_multidim_size< OtherIndexing > const &other) -> dynamic_multidim_size &
 
template<typename OtherIndexing >
auto operator= (dynamic_multidim_size< OtherIndexing > &&other) -> dynamic_multidim_size &
 
 dynamic_multidim_size (integral auto const ... size)
 
 dynamic_multidim_size (std::vector< std::size_t > &&size)
 
 dynamic_multidim_size (integral_range auto const &size)
 
template<typename OtherIndexing >
auto operator== (dynamic_multidim_size< OtherIndexing > const &other) const
 
template<typename OtherIndexing >
auto operator!= (dynamic_multidim_size< OtherIndexing > const &other) const
 
auto num_dimensions () const
 
auto size () const -> auto const &
 
auto size (std::size_t const i) const
 
auto num_components () const
 
auto resize (integral auto const ... size) -> void
 
auto resize (integral_range auto const &size) -> void
 
auto resize (std::vector< std::size_t > &&size) -> void
 
auto resize (std::vector< std::size_t > const &size) -> void
 
auto constexpr in_range (integral auto const ... indices) const
 
auto constexpr in_range (integral_range auto const &indices) const
 
auto constexpr plain_index (integral auto const ... indices) const
 
auto constexpr plain_index (integral_range auto const &indices) const
 
auto constexpr multi_index (std::size_t const gi) const
 
auto begin_indices () const
 
auto end_indices () const
 
auto indices () const
 

Static Public Member Functions

static auto constexpr is_tensor ()
 
static auto constexpr is_dynamic ()
 
static auto zeros (integral auto const ... size)
 
static auto zeros (integral_range auto const &size)
 
static auto ones (integral auto... size)
 
static auto ones (integral_range auto const &size)
 
template<typename RandEng = std::mt19937_64>
static auto randu (T const min, T const max, integral_range auto const &size, RandEng &&eng=RandEng{std::random_device{}()})
 
template<typename RandEng = std::mt19937_64>
static auto randu (integral_range auto const &size, T min=0, T max=1, RandEng &&eng=RandEng{std::random_device{}()})
 
template<typename RandEng = std::mt19937_64>
static auto randu (integral auto const ... is)
 
template<typename RandEng = std::mt19937_64>
static auto randn (T const mean, T const stddev, integral_range auto const &size, RandEng &&eng=RandEng{std::random_device{}()})
 
template<typename RandEng = std::mt19937_64>
static auto randn (integral_range auto const &size, T mean=0, T stddev=1, RandEng &&eng=RandEng{std::random_device{}()})
 
template<typename RandEng = std::mt19937_64>
static auto randn (integral auto const ... is)
 
template<random_number_generator Rand, integral_range Size>
static auto rand (Rand &&rand, Size &&size)
 
template<random_number_generator Rand>
static auto rand (Rand &&rand, integral auto const ... size)
 
static auto vander (arithmetic_range auto const &v)
 
template<arithmetic Real_, std::size_t N>
static auto vander (vec< Real_, N > const &v)
 
static auto vander (arithmetic_range auto const &v, integral auto const degree)
 
- Static Public Member Functions inherited from tatooine::dynamic_multidim_array< T >
static auto zeros (integral auto const ... size)
 
static auto zeros (Size &&size)
 
static auto ones (integral auto const ... size)
 
static auto ones (Size &&size)
 
static auto randu (value_type const min, value_type const max, Size &&size, RandEng &&eng=RandEng{std::random_device{}()})
 
static auto randu (Size &&size, value_type const min=0, value_type const max=1, RandEng &&eng=RandEng{std::random_device{}()})
 
static auto randu (integral auto const ... is)
 
static auto randn (value_type const mean, value_type const stddev, Size &&size, RandEng &&eng=RandEng{std::random_device{}()})
 
static auto randn (Size &&size, value_type const mean, value_type const stddev, RandEng &&eng=RandEng{std::random_device{}()})
 
static auto randn (integral auto const ... is)
 
static auto rand (Rand &&rand, Size &&size)
 
static auto rand (Rand &&rand, integral auto const ... size)
 

Additional Inherited Members

- Public Attributes inherited from tatooine::dynamic_multidim_array< T >
container_type m_data_container
 

Member Typedef Documentation

◆ const_indexed_type

template<arithmetic_or_complex T>
template<einstein_notation::index... Is>
using tatooine::tensor< T >::const_indexed_type = einstein_notation::indexed_dynamic_tensor<this_type const&, Is...>

◆ indexed_type

template<arithmetic_or_complex T>
template<einstein_notation::index... Is>
using tatooine::tensor< T >::indexed_type = einstein_notation::indexed_dynamic_tensor<this_type&, Is...>

◆ parent_type

template<arithmetic_or_complex T>
using tatooine::tensor< T >::parent_type = dynamic_multidim_array<T>

◆ this_type

template<arithmetic_or_complex T>
using tatooine::tensor< T >::this_type = tensor<T>

Constructor & Destructor Documentation

◆ tensor() [1/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( )
default

◆ tensor() [2/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( tensor< T > const &  other)
default

◆ tensor() [3/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( tensor< T > &&  other)
defaultnoexcept

◆ ~tensor()

template<arithmetic_or_complex T>
tatooine::tensor< T >::~tensor ( )
default

◆ tensor() [4/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( dynamic_tensor< T > auto &&  other)
inlineexplicit

◆ tensor() [5/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( integral auto const ...  dimensions)
inlineexplicit

Resizes Tensor to given dimensions and initializes values to 0. Only works if value_type is non-integral.

◆ tensor() [6/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( tag::ones_t  tag,
integral auto...  dimensions 
)
inline

◆ tensor() [7/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( tag::ones_t  tag,
integral_range auto &&  dimensions 
)
inline

◆ tensor() [8/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( tag::zeros_t  tag,
integral auto...  dimensions 
)
inline

◆ tensor() [9/15]

template<arithmetic_or_complex T>
tatooine::tensor< T >::tensor ( tag::zeros_t  tag,
integral_range auto &&  dimensions 
)
inline

◆ tensor() [10/15]

template<arithmetic_or_complex T>
template<random_number_generator Rand>
tatooine::tensor< T >::tensor ( Rand &&  rand,
integral auto const ...  dimensions 
)
inline

◆ tensor() [11/15]

template<arithmetic_or_complex T>
template<random_number_generator Rand, integral_range Dimensions>
tatooine::tensor< T >::tensor ( Rand &&  rand,
Dimensions &&  dimensions 
)
inline

◆ tensor() [12/15]

template<arithmetic_or_complex T>
template<general_tensor OtherTensor>
tatooine::tensor< T >::tensor ( OtherTensor const &  other)
inline

◆ tensor() [13/15]

template<arithmetic_or_complex T>
template<convertible_to< T >... Components>
requires ( (!integral<std::decay_t<Components>> && ...))
tatooine::tensor< T >::tensor ( Components &&...  components)
inlineexplicit

Constructs a rank 1 tensor aka vector.

◆ tensor() [14/15]

template<arithmetic_or_complex T>
template<floating_point_range Components>
tatooine::tensor< T >::tensor ( Components &&  components)
inlineexplicit

Constructs a rank 1 tensor aka vector.

◆ tensor() [15/15]

template<arithmetic_or_complex T>
template<arithmetic_or_complex... Rows, std::size_t N>
tatooine::tensor< T >::tensor ( Rows(&&... rows)  [N])
inlineexplicit

Constructs a rank 2 tensor aka matrix.

Member Function Documentation

◆ assign()

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::assign ( general_tensor< T > auto const &  other)
inline

◆ assing_self_transposed()

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::assing_self_transposed ( general_tensor< T > auto const &  other)
inline

◆ at() [1/4]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::at ( integral auto const ...  is) -> auto&
inline

◆ at() [2/4]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::at ( integral auto const ...  is) const -> auto const&
inline

◆ at() [3/4]

template<arithmetic_or_complex T>
template<einstein_notation::index... Is>
auto tatooine::tensor< T >::at ( Is  const ...)
inline

◆ at() [4/4]

template<arithmetic_or_complex T>
template<einstein_notation::index... Is>
auto tatooine::tensor< T >::at ( Is  const ...) const
inline

◆ dimension()

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::dimension ( std::size_t const  i) const
inline

◆ dimensions()

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::dimensions ( ) const
inline

◆ is_dynamic()

template<arithmetic_or_complex T>
static auto constexpr tatooine::tensor< T >::is_dynamic ( )
inlinestaticconstexpr

◆ is_tensor()

template<arithmetic_or_complex T>
static auto constexpr tatooine::tensor< T >::is_tensor ( )
inlinestaticconstexpr

◆ ones() [1/2]

template<arithmetic_or_complex T>
static auto tatooine::tensor< T >::ones ( integral auto...  size)
inlinestatic

◆ ones() [2/2]

template<arithmetic_or_complex T>
static auto tatooine::tensor< T >::ones ( integral_range auto const &  size)
inlinestatic

◆ operator()() [1/4]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::operator() ( einstein_notation::index auto const ...  is)
inline

◆ operator()() [2/4]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::operator() ( einstein_notation::index auto const ...  is) const
inline

◆ operator()() [3/4]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::operator() ( integral auto const ...  is) -> auto&
inline

◆ operator()() [4/4]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::operator() ( integral auto const ...  is) const -> auto const&
inline

◆ operator=() [1/3]

template<arithmetic_or_complex T>
template<general_tensor OtherTensor>
auto tatooine::tensor< T >::operator= ( OtherTensor const &  other) -> tensor<T>&
inline

◆ operator=() [2/3]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::operator= ( tensor< T > &&  other) -> tensor &=default
defaultnoexcept

◆ operator=() [3/3]

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::operator= ( tensor< T > const &  other) -> tensor &=default
default

◆ rand() [1/2]

template<arithmetic_or_complex T>
template<random_number_generator Rand>
static auto tatooine::tensor< T >::rand ( Rand &&  rand,
integral auto const ...  size 
)
inlinestatic

◆ rand() [2/2]

template<arithmetic_or_complex T>
template<random_number_generator Rand, integral_range Size>
static auto tatooine::tensor< T >::rand ( Rand &&  rand,
Size &&  size 
)
inlinestatic

◆ randn() [1/3]

template<arithmetic_or_complex T>
template<typename RandEng = std::mt19937_64>
static auto tatooine::tensor< T >::randn ( integral auto const ...  is)
inlinestatic

◆ randn() [2/3]

template<arithmetic_or_complex T>
template<typename RandEng = std::mt19937_64>
static auto tatooine::tensor< T >::randn ( integral_range auto const &  size,
mean = 0,
stddev = 1,
RandEng &&  eng = RandEng{std::random_device{}()} 
)
inlinestatic

◆ randn() [3/3]

template<arithmetic_or_complex T>
template<typename RandEng = std::mt19937_64>
static auto tatooine::tensor< T >::randn ( T const  mean,
T const  stddev,
integral_range auto const &  size,
RandEng &&  eng = RandEng{std::random_device{}()} 
)
inlinestatic

◆ randu() [1/3]

template<arithmetic_or_complex T>
template<typename RandEng = std::mt19937_64>
static auto tatooine::tensor< T >::randu ( integral auto const ...  is)
inlinestatic

◆ randu() [2/3]

template<arithmetic_or_complex T>
template<typename RandEng = std::mt19937_64>
static auto tatooine::tensor< T >::randu ( integral_range auto const &  size,
min = 0,
max = 1,
RandEng &&  eng = RandEng{std::random_device{}()} 
)
inlinestatic

◆ randu() [3/3]

template<arithmetic_or_complex T>
template<typename RandEng = std::mt19937_64>
static auto tatooine::tensor< T >::randu ( T const  min,
T const  max,
integral_range auto const &  size,
RandEng &&  eng = RandEng{std::random_device{}()} 
)
inlinestatic

◆ rank()

template<arithmetic_or_complex T>
auto tatooine::tensor< T >::rank ( ) const
inline

◆ vander() [1/3]

template<arithmetic_or_complex T>
static auto tatooine::tensor< T >::vander ( arithmetic_range auto const &  v)
inlinestatic

◆ vander() [2/3]

template<arithmetic_or_complex T>
static auto tatooine::tensor< T >::vander ( arithmetic_range auto const &  v,
integral auto const  degree 
)
inlinestatic

◆ vander() [3/3]

template<arithmetic_or_complex T>
template<arithmetic Real_, std::size_t N>
static auto tatooine::tensor< T >::vander ( vec< Real_, N > const &  v)
inlinestatic

◆ zeros() [1/2]

template<arithmetic_or_complex T>
static auto tatooine::tensor< T >::zeros ( integral auto const ...  size)
inlinestatic

◆ zeros() [2/2]

template<arithmetic_or_complex T>
static auto tatooine::tensor< T >::zeros ( integral_range auto const &  size)
inlinestatic

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