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

Function random_vector

cpp/base/random.hpp:91–135  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

89 */
90template <typename T>
91inline auto random_vector(uint64_t size, std::pair<T, T> range)
92{
93 auto& mersenne_engine = random_engine();
94 if constexpr (base::is_floating_point_v<T>) {
95 std::vector<T> ret;
96 ret.resize(size);
97 using actual_type = std::conditional_t<std::floating_point<T>, T, float>;
98 std::uniform_real_distribution<actual_type> value_dist{static_cast<actual_type>(range.first), static_cast<actual_type>(range.second)};
99 auto value_gen = [&value_dist, &mersenne_engine]() {
100 return value_dist(mersenne_engine);
101 };
102 std::generate(ret.begin(), ret.end(), value_gen);
103 return ret;
104 } else if constexpr (std::is_same_v<bool, T>) {
105 boost::container::vector<T> ret;
106 ret.resize(size);
107 std::bernoulli_distribution value_dist(0.5);
108 auto value_gen = [&value_dist, &mersenne_engine]() {
109 return value_dist(mersenne_engine);
110 };
111 std::generate(ret.begin(), ret.end(), value_gen);
112 return ret;
113 } else if constexpr (sizeof(T) == 1) {
114 std::vector<T> ret;
115 ret.resize(size);
116 // Handle 8-bit types separately
117 using dist_type = std::conditional_t<std::is_signed_v<T>, int, unsigned int>;
118 std::uniform_int_distribution<dist_type> value_dist{range.first, range.second};
119 auto value_gen = [&value_dist, &mersenne_engine]() {
120 return static_cast<T>(value_dist(mersenne_engine));
121 };
122 std::generate(ret.begin(), ret.end(), value_gen);
123 return ret;
124 } else {
125 std::vector<T> ret;
126 ret.resize(size);
127 std::uniform_int_distribution<T> value_dist{range.first, range.second};
128
129 auto value_gen = [&value_dist, &mersenne_engine]() {
130 return value_dist(mersenne_engine);
131 };
132 std::generate(ret.begin(), ret.end(), value_gen);
133 return ret;
134 }
135}
136
137/**
138 * @brief Generates a random vector of a given type and size.

Callers

nothing calls this directly

Calls 3

resizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected