MCPcopy Create free account
hub / github.com/activeloopai/deeplake / random_array

Function random_array

cpp/base/random.hpp:48–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

46 */
47template <typename T, int size>
48inline std::array<T, size> random_array()
49{
50 std::array<T, size> ret;
51 auto& mersenne_engine = random_engine();
52 if constexpr (base::is_floating_point_v<T>) {
53 using actual_type = std::conditional_t<std::floating_point<T>, T, float>;
54 std::uniform_real_distribution<actual_type> value_dist{std::numeric_limits<T>::min(), std::numeric_limits<T>::max()};
55 auto value_gen = [&value_dist, &mersenne_engine]() {
56 return value_dist(mersenne_engine);
57 };
58 std::generate(ret.begin(), ret.end(), value_gen);
59 } else if constexpr (std::is_same_v<bool, T>) {
60 std::bernoulli_distribution value_dist(0.5);
61 auto value_gen = [&value_dist, &mersenne_engine]() {
62 return value_dist(mersenne_engine);
63 };
64 std::generate(ret.begin(), ret.end(), value_gen);
65 } else if constexpr (sizeof(T) == 1) {
66 // Handle 8-bit types separately
67 using dist_type = std::conditional_t<std::is_signed_v<T>, int, unsigned int>;
68 std::uniform_int_distribution<unsigned int> value_dist{std::numeric_limits<T>::min(), std::numeric_limits<T>::max()};
69 auto value_gen = [&value_dist, &mersenne_engine]() {
70 return static_cast<T>(value_dist(mersenne_engine));
71 };
72 std::generate(ret.begin(), ret.end(), value_gen);
73 } else {
74 std::uniform_int_distribution<T> value_dist{std::numeric_limits<T>::min(), std::numeric_limits<T>::max()};
75 auto value_gen = [&value_dist, &mersenne_engine]() {
76 return value_dist(mersenne_engine);
77 };
78 std::generate(ret.begin(), ret.end(), value_gen);
79 }
80 return ret;
81}
82
83/**
84 * @brief Generates a random vector of a given type, size, and range.

Callers

nothing calls this directly

Calls 2

beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected