1#ifndef TATOOINE_TENSOR_OPERATIONS_UNARY_OPERATION_H
2#define TATOOINE_TENSOR_OPERATIONS_UNARY_OPERATION_H
8template <dynamic_tensor Tensor>
13 for (std::size_t i = 0; i < t.
data().
size(); ++i) {
14 t_out.data()[i] = op(t.
data()[i]);
19template <
typename Op, static_tensor
Tensor, std::size_t... Seq>
21 std::index_sequence<Seq...> ) {
22 using TOut = std::invoke_result_t<Op, typename Tensor::value_type>;
25 if constexpr (
rank == 1) {
27 }
else if constexpr (
rank == 2) {
33 t_out.for_indices([&](
auto const... is) {
34 t_out(is...) = op(t(is...));
39template <
typename Op, static_tensor Tensor>
constexpr auto data() -> ValueType *
Definition: static_multidim_array.h:260
Definition: concepts.h:121
Definition: algorithm.h:6
typename value_type_impl< T >::type value_type
Definition: type_traits.h:280
tensor< real_number, Dimensions... > Tensor
Definition: tensor.h:184
constexpr auto unary_operation(invocable< tatooine::value_type< Tensor > > auto &&op, Tensor const &t)
Definition: unary_operation.h:9
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148
constexpr auto rank()
Definition: rank.h:10
static auto constexpr dimensions()
Definition: base_tensor.h:47
auto constexpr dimension() const
Definition: contracted_dynamic_tensor.h:36
static auto constexpr rank()
Definition: base_tensor.h:41
static constexpr auto zeros()
Definition: tensor.h:144