1#ifndef TATOOINE_RANDOM_H
2#define TATOOINE_RANDOM_H
5#include <tatooine/real.h>
8#include <boost/range/algorithm/generate.hpp>
14template <
typename ValueType,
typename Engine = std::mt19937_64>
16 static_assert(is_arithmetic<ValueType>);
21 std::conditional_t<is_floating_point<ValueType>,
22 std::uniform_real_distribution<ValueType>,
23 std::uniform_int_distribution<ValueType>>;
44 template <convertible_to<Engine> EngineArg>
48 template <convertible_to<Engine> EngineArg>
64template <
typename ValueType>
68template <
typename ValueType,
typename Engine>
72template <
typename ValueType,
typename Engine = std::mt19937_64>
74 ValueType b = ValueType(1),
75 Engine&& engine = Engine{std::random_device{}()}) {
76 uniform rand(a, b, std::forward<Engine>(engine));
78 std::vector<ValueType> rand_data(n);
79 boost::generate(rand_data, [&] {
return rand(); });
84 static constexpr auto char_set = std::string_view{
86 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
87 "abcdefghijklmnopqrstuvwxyz"};
89 auto str = std::string(
size,
' ');
91 c = char_set[
index()];
96template <
typename ValueType,
typename Engine = std::mt19937_64>
122 normal(
const Engine& _engine, ValueType mean, ValueType stddev)
125 normal(Engine&& _engine, ValueType mean, ValueType stddev)
128 normal(ValueType mean, ValueType stddev,
const Engine& _engine)
131 normal(ValueType mean, ValueType stddev, Engine&& _engine)
147template <
typename Engine>
150template <
typename ValueType>
153template <
typename Iterator,
typename RandomEngine>
159 std::uniform_int_distribution<std::size_t> rand{0,
size - 1};
163template <
typename Range,
typename RandomEngine>
169template <
typename RandomEngine>
171 std::uniform_int_distribution<std::size_t>
coin{0, 1};
179template <
typename ValueType>
181template <
typename ValueType,
typename Engine>
184template <
typename ValueType,
typename Engine>
187template <
typename ValueType>
190template <
typename ValueType>
192 is_random_number_generator<std::decay_t<ValueType>>;
Definition: concepts.h:84
auto uniform_vector(std::size_t n, ValueType a=ValueType(0), ValueType b=ValueType(1), Engine &&engine=Engine{std::random_device{}()})
Definition: random.h:73
auto alpha_numeric_string(std::size_t const size)
Definition: random.h:83
auto flip_coin(RandomEngine &&eng)
Definition: random.h:170
auto random_elem(Iterator begin, Iterator end, RandomEngine &eng)
Definition: random.h:154
coin
Definition: random.h:168
@ TAILS
Definition: random.h:168
@ HEADS
Definition: random.h:168
Definition: algorithm.h:6
constexpr auto distance(Iter const &it0, Iter const &it1)
Definition: iterator_facade.h:372
void normal(base_tensor< Tensor, GiNaC::ex, Dims... > &m)
Definition: tensor_symbolic.h:75
auto begin(Range &&range)
Definition: iterator_facade.h:318
auto end(Range &&range)
Definition: iterator_facade.h:322
auto constexpr index(handle< Child, Int > const h)
Definition: handle.h:119
static auto constexpr is_random_number_generator
Definition: random.h:188
constexpr auto max(A &&a, B &&b)
Definition: math.h:20
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148
auto next(Iter iter)
Definition: iterator_facade.h:325
constexpr auto min(A &&a, B &&b)
Definition: math.h:15
static constexpr forward_tag forward
Definition: tags.h:9
normal(Engine &&_engine)
Definition: random.h:116
std::normal_distribution< ValueType > distribution_type
Definition: random.h:100
auto get()
Definition: random.h:141
normal(Engine &&_engine, ValueType mean, ValueType stddev)
Definition: random.h:125
normal()
Definition: random.h:103
distribution_type distribution
Definition: random.h:137
Engine engine_type
Definition: random.h:98
normal(ValueType mean, ValueType stddev)
Definition: random.h:119
Engine engine
Definition: random.h:136
normal(const normal &)=default
auto operator()()
Definition: random.h:142
normal(normal &&) noexcept=default
ValueType real_type
Definition: random.h:99
normal(const Engine &_engine, ValueType mean, ValueType stddev)
Definition: random.h:122
normal(ValueType mean, ValueType stddev, Engine &&_engine)
Definition: random.h:131
normal(ValueType mean, ValueType stddev, const Engine &_engine)
Definition: random.h:128