tomoto 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/LICENSE.txt +1 -1
- data/ext/tomoto/ct.cpp +1 -1
- data/ext/tomoto/dmr.cpp +1 -1
- data/ext/tomoto/dt.cpp +1 -1
- data/ext/tomoto/extconf.rb +4 -8
- data/ext/tomoto/gdmr.cpp +1 -1
- data/ext/tomoto/hdp.cpp +1 -1
- data/ext/tomoto/hlda.cpp +1 -1
- data/ext/tomoto/hpa.cpp +1 -1
- data/ext/tomoto/lda.cpp +29 -3
- data/ext/tomoto/llda.cpp +1 -1
- data/ext/tomoto/mglda.cpp +1 -1
- data/ext/tomoto/pa.cpp +1 -1
- data/ext/tomoto/plda.cpp +1 -1
- data/ext/tomoto/slda.cpp +1 -1
- data/lib/tomoto/lda.rb +1 -0
- data/lib/tomoto/version.rb +1 -1
- data/vendor/EigenRand/EigenRand/Core.h +6 -4
- data/vendor/EigenRand/EigenRand/CwiseHeteroBinaryOp.h +265 -0
- data/vendor/EigenRand/EigenRand/Dists/Basic.h +345 -12
- data/vendor/EigenRand/EigenRand/Dists/Discrete.h +381 -7
- data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +4 -4
- data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +576 -4
- data/vendor/EigenRand/EigenRand/EigenRand +4 -4
- data/vendor/EigenRand/EigenRand/Macro.h +3 -3
- data/vendor/EigenRand/EigenRand/MorePacketMath.h +31 -30
- data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +41 -29
- data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +19 -7
- data/vendor/EigenRand/EigenRand/PacketFilter.h +8 -5
- data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +3 -3
- data/vendor/EigenRand/EigenRand/RandUtils.h +180 -5
- data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +42 -3
- data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +3 -3
- data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +3 -3
- data/vendor/EigenRand/EigenRand/arch/AVX512/MorePacketMath.h +312 -0
- data/vendor/EigenRand/EigenRand/arch/AVX512/PacketFilter.h +79 -0
- data/vendor/EigenRand/EigenRand/arch/AVX512/RandUtils.h +147 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +118 -3
- data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +3 -3
- data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +21 -3
- data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +32 -4
- data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +3 -3
- data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +3 -3
- data/vendor/EigenRand/EigenRand/doc.h +108 -157
- data/vendor/EigenRand/README.md +60 -272
- data/vendor/tomotopy/README.kr.rst +27 -5
- data/vendor/tomotopy/README.rst +27 -5
- data/vendor/tomotopy/README_pypi.rst +583 -0
- data/vendor/tomotopy/licenses_bundled/EigenRand +21 -0
- data/vendor/tomotopy/src/TopicModel/CT.h +1 -1
- data/vendor/tomotopy/src/TopicModel/CTModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/DMR.h +1 -1
- data/vendor/tomotopy/src/TopicModel/DMRModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/DT.h +1 -1
- data/vendor/tomotopy/src/TopicModel/DTModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/GDMR.h +1 -1
- data/vendor/tomotopy/src/TopicModel/GDMRModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/HDP.h +1 -1
- data/vendor/tomotopy/src/TopicModel/HDPModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/HLDA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/HLDAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/HPA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/HPAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/LDA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/LDAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +6 -6
- data/vendor/tomotopy/src/TopicModel/LLDA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/LLDAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/MGLDA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/PA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/PAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/PLDA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/PLDAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/PT.h +1 -1
- data/vendor/tomotopy/src/TopicModel/PTModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/SLDA.h +1 -1
- data/vendor/tomotopy/src/TopicModel/SLDAModel.cpp +1 -1
- data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +6 -6
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +41 -0
- data/vendor/tomotopy/src/Utils/ThreadPool.hpp +6 -6
- data/vendor/tomotopy/src/Utils/Utils.hpp +3 -3
- data/vendor/tomotopy/src/Utils/avx512_gamma.h +46 -0
- data/vendor/tomotopy/src/Utils/avx512_mathfun.h +99 -0
- metadata +10 -9
- data/vendor/variant/LICENSE +0 -25
- data/vendor/variant/LICENSE_1_0.txt +0 -23
- data/vendor/variant/README.md +0 -102
- data/vendor/variant/include/mapbox/optional.hpp +0 -74
- data/vendor/variant/include/mapbox/recursive_wrapper.hpp +0 -122
- data/vendor/variant/include/mapbox/variant.hpp +0 -974
- data/vendor/variant/include/mapbox/variant_io.hpp +0 -45
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @file Basic.h
|
|
3
3
|
* @author bab2min (bab2min@gmail.com)
|
|
4
4
|
* @brief
|
|
5
|
-
* @version 0.
|
|
6
|
-
* @date
|
|
7
|
-
*
|
|
8
|
-
* @copyright Copyright (c) 2020-
|
|
5
|
+
* @version 0.5.1
|
|
6
|
+
* @date 2024-09-08
|
|
7
|
+
*
|
|
8
|
+
* @copyright Copyright (c) 2020-2024
|
|
9
9
|
*
|
|
10
10
|
*/
|
|
11
11
|
|
|
@@ -32,6 +32,11 @@ namespace Eigen
|
|
|
32
32
|
class GenBase
|
|
33
33
|
{
|
|
34
34
|
public:
|
|
35
|
+
/**
|
|
36
|
+
* @brief Return a reference to the derived type.
|
|
37
|
+
*/
|
|
38
|
+
DerivedGen &derived() { return static_cast<DerivedGen &>(*this); }
|
|
39
|
+
|
|
35
40
|
/**
|
|
36
41
|
* @brief generate random values from its distribution
|
|
37
42
|
*
|
|
@@ -48,7 +53,7 @@ namespace Eigen
|
|
|
48
53
|
generate(Index rows, Index cols, Urng&& urng)
|
|
49
54
|
{
|
|
50
55
|
return {
|
|
51
|
-
rows, cols, { std::forward<Urng>(urng),
|
|
56
|
+
rows, cols, { std::forward<Urng>(urng), derived() }
|
|
52
57
|
};
|
|
53
58
|
}
|
|
54
59
|
|
|
@@ -67,7 +72,93 @@ namespace Eigen
|
|
|
67
72
|
generateLike(const Derived& o, Urng&& urng)
|
|
68
73
|
{
|
|
69
74
|
return {
|
|
70
|
-
o.rows(), o.cols(), { std::forward<Urng>(urng),
|
|
75
|
+
o.rows(), o.cols(), { std::forward<Urng>(urng), derived() }
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
template<typename DerivedGen, typename Scalar, typename ScalarA>
|
|
81
|
+
class UnaryGenBase
|
|
82
|
+
{
|
|
83
|
+
public:
|
|
84
|
+
/**
|
|
85
|
+
* @brief Return a reference to the derived type.
|
|
86
|
+
*/
|
|
87
|
+
DerivedGen &derived() { return static_cast<DerivedGen &>(*this); }
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @brief generate random values from its distribution
|
|
91
|
+
*
|
|
92
|
+
* @tparam Lhs, Rhs
|
|
93
|
+
* @tparam Urng
|
|
94
|
+
* @param urng c++11-style random number generator
|
|
95
|
+
* @param a, b operands for the random distribution
|
|
96
|
+
* @return
|
|
97
|
+
* a random matrix expression with a shape `(rows, cols)`
|
|
98
|
+
*/
|
|
99
|
+
template<typename Lhs, typename Urng>
|
|
100
|
+
inline CwiseUnaryOp<
|
|
101
|
+
internal::scalar_unary_rng_adaptor<DerivedGen&, Scalar, typename Lhs::Scalar, Urng>,
|
|
102
|
+
const Lhs
|
|
103
|
+
> generate(Urng&& urng, const ArrayBase<Lhs>& a)
|
|
104
|
+
{
|
|
105
|
+
return {
|
|
106
|
+
a, { std::forward<Urng>(urng), derived() }
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
template<typename DerivedGen, typename Scalar, typename ScalarA, typename ScalarB>
|
|
112
|
+
class BinaryGenBase
|
|
113
|
+
{
|
|
114
|
+
public:
|
|
115
|
+
/**
|
|
116
|
+
* @brief Return a reference to the derived type.
|
|
117
|
+
*/
|
|
118
|
+
DerivedGen &derived() { return static_cast<DerivedGen &>(*this); }
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @brief generate random values from its distribution
|
|
122
|
+
*
|
|
123
|
+
* @tparam Lhs, Rhs
|
|
124
|
+
* @tparam Urng
|
|
125
|
+
* @param urng c++11-style random number generator
|
|
126
|
+
* @param a, b operands for the random distribution
|
|
127
|
+
* @return
|
|
128
|
+
* a random matrix expression with a shape `(rows, cols)`
|
|
129
|
+
*/
|
|
130
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
131
|
+
inline CwiseBinaryOp<
|
|
132
|
+
internal::scalar_binary_rng_adaptor<DerivedGen&, Scalar, typename Lhs::Scalar, typename Rhs::Scalar, Urng>,
|
|
133
|
+
const Lhs, const Rhs
|
|
134
|
+
> generate(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
135
|
+
{
|
|
136
|
+
return {
|
|
137
|
+
a, b, { std::forward<Urng>(urng), derived() }
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
142
|
+
inline CwiseBinaryOp<
|
|
143
|
+
internal::scalar_binary_rng_adaptor<DerivedGen&, Scalar, typename Lhs::Scalar, Rhs, Urng>,
|
|
144
|
+
const Lhs, CwiseNullaryOp<internal::scalar_constant_op<Rhs>, const Lhs>
|
|
145
|
+
> generate(Urng&& urng, const ArrayBase<Lhs>& a, Rhs b)
|
|
146
|
+
{
|
|
147
|
+
return {
|
|
148
|
+
a, { a.rows(), a.cols(), internal::scalar_constant_op<Rhs>{ b } },
|
|
149
|
+
{ std::forward<Urng>(urng), derived() }
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
154
|
+
inline CwiseBinaryOp<
|
|
155
|
+
internal::scalar_binary_rng_adaptor<DerivedGen&, Scalar, Lhs, typename Rhs::Scalar, Urng>,
|
|
156
|
+
CwiseNullaryOp<internal::scalar_constant_op<Lhs>, const Rhs>, const Rhs
|
|
157
|
+
> generate(Urng&& urng, Lhs a, const ArrayBase<Rhs>& b)
|
|
158
|
+
{
|
|
159
|
+
return {
|
|
160
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<Lhs>{ a } }, b,
|
|
161
|
+
{ std::forward<Urng>(urng), derived() }
|
|
71
162
|
};
|
|
72
163
|
}
|
|
73
164
|
};
|
|
@@ -83,10 +174,15 @@ namespace Eigen
|
|
|
83
174
|
class MvVecGenBase
|
|
84
175
|
{
|
|
85
176
|
public:
|
|
177
|
+
/**
|
|
178
|
+
* @brief Return a reference to the derived type.
|
|
179
|
+
*/
|
|
180
|
+
DerivedGen &derived() { return static_cast<DerivedGen &>(*this); }
|
|
181
|
+
|
|
86
182
|
/**
|
|
87
183
|
* @brief returns the dimensions of vectors to be generated
|
|
88
184
|
*/
|
|
89
|
-
Index dims() const { return
|
|
185
|
+
Index dims() const { return derived().dims(); }
|
|
90
186
|
|
|
91
187
|
/**
|
|
92
188
|
* @brief generates multiple samples at once
|
|
@@ -100,7 +196,7 @@ namespace Eigen
|
|
|
100
196
|
template<typename Urng>
|
|
101
197
|
inline Matrix<_Scalar, Dim, -1> generate(Urng&& urng, Index samples)
|
|
102
198
|
{
|
|
103
|
-
return
|
|
199
|
+
return derived().generate(std::forward<Urng>(urng), samples);
|
|
104
200
|
}
|
|
105
201
|
|
|
106
202
|
/**
|
|
@@ -113,7 +209,7 @@ namespace Eigen
|
|
|
113
209
|
template<typename Urng>
|
|
114
210
|
inline Matrix<_Scalar, Dim, 1> generate(Urng&& urng)
|
|
115
211
|
{
|
|
116
|
-
return
|
|
212
|
+
return derived().generate(std::forward<Urng>(urng));
|
|
117
213
|
}
|
|
118
214
|
};
|
|
119
215
|
|
|
@@ -128,10 +224,15 @@ namespace Eigen
|
|
|
128
224
|
class MvMatGenBase
|
|
129
225
|
{
|
|
130
226
|
public:
|
|
227
|
+
/**
|
|
228
|
+
* @brief Return a reference to the derived type.
|
|
229
|
+
*/
|
|
230
|
+
DerivedGen &derived() { return static_cast<DerivedGen &>(*this); }
|
|
231
|
+
|
|
131
232
|
/**
|
|
132
233
|
* @brief returns the dimensions of matrices to be generated
|
|
133
234
|
*/
|
|
134
|
-
Index dims() const { return
|
|
235
|
+
Index dims() const { return derived().dims(); }
|
|
135
236
|
|
|
136
237
|
/**
|
|
137
238
|
* @brief generates multiple samples at once
|
|
@@ -145,7 +246,7 @@ namespace Eigen
|
|
|
145
246
|
template<typename Urng>
|
|
146
247
|
inline Matrix<_Scalar, Dim, -1> generate(Urng&& urng, Index samples)
|
|
147
248
|
{
|
|
148
|
-
return
|
|
249
|
+
return derived().generate(std::forward<Urng>(urng), samples);
|
|
149
250
|
}
|
|
150
251
|
|
|
151
252
|
/**
|
|
@@ -158,7 +259,7 @@ namespace Eigen
|
|
|
158
259
|
template<typename Urng>
|
|
159
260
|
inline Matrix<_Scalar, Dim, Dim> generate(Urng&& urng)
|
|
160
261
|
{
|
|
161
|
-
return
|
|
262
|
+
return derived().generate(std::forward<Urng>(urng));
|
|
162
263
|
}
|
|
163
264
|
};
|
|
164
265
|
|
|
@@ -257,9 +358,13 @@ namespace Eigen
|
|
|
257
358
|
template<typename Packet>
|
|
258
359
|
auto operator()(Packet v) -> uint64_t
|
|
259
360
|
{
|
|
361
|
+
#ifdef EIGEN_VECTORIZE_AVX512
|
|
362
|
+
return Eigen::internal::pfirst(v);
|
|
363
|
+
#else
|
|
260
364
|
uint64_t arr[sizeof(Packet) / 8];
|
|
261
365
|
Eigen::internal::pstoreu((Packet*)arr, v);
|
|
262
366
|
return arr[0];
|
|
367
|
+
#endif
|
|
263
368
|
}
|
|
264
369
|
};
|
|
265
370
|
|
|
@@ -360,6 +465,30 @@ namespace Eigen
|
|
|
360
465
|
}
|
|
361
466
|
};
|
|
362
467
|
|
|
468
|
+
template<typename _Scalar>
|
|
469
|
+
class BalancedVGen : public BinaryGenBase<BalancedVGen<_Scalar>, _Scalar, _Scalar, _Scalar>
|
|
470
|
+
{
|
|
471
|
+
static_assert(std::is_floating_point<_Scalar>::value, "balanced needs floating point types.");
|
|
472
|
+
|
|
473
|
+
public:
|
|
474
|
+
using Scalar = _Scalar;
|
|
475
|
+
|
|
476
|
+
template<typename Rng>
|
|
477
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar a, _Scalar b)
|
|
478
|
+
{
|
|
479
|
+
using namespace Eigen::internal;
|
|
480
|
+
return ((_Scalar)((int32_t)pfirst(std::forward<Rng>(rng)()) & 0x7FFFFFFF) / 0x7FFFFFFF) * (b - a) + a;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
template<typename Packet, typename Rng>
|
|
484
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& a, const Packet& b)
|
|
485
|
+
{
|
|
486
|
+
using namespace Eigen::internal;
|
|
487
|
+
using RUtils = RandUtils<Packet, Rng>;
|
|
488
|
+
return padd(pmul(RUtils{}.zero_to_one(std::forward<Rng>(rng)), psub(b, a)), a);
|
|
489
|
+
}
|
|
490
|
+
};
|
|
491
|
+
|
|
363
492
|
namespace detail
|
|
364
493
|
{
|
|
365
494
|
template<size_t v>
|
|
@@ -501,6 +630,32 @@ namespace Eigen
|
|
|
501
630
|
}
|
|
502
631
|
};
|
|
503
632
|
|
|
633
|
+
template<typename _Scalar>
|
|
634
|
+
class UniformRealVGen : public BinaryGenBase<UniformRealVGen<_Scalar>, _Scalar, _Scalar, _Scalar>
|
|
635
|
+
{
|
|
636
|
+
static_assert(std::is_floating_point<_Scalar>::value, "uniformReal needs floating point types.");
|
|
637
|
+
|
|
638
|
+
public:
|
|
639
|
+
using Scalar = _Scalar;
|
|
640
|
+
|
|
641
|
+
template<typename Rng>
|
|
642
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar a, _Scalar b)
|
|
643
|
+
{
|
|
644
|
+
using namespace Eigen::internal;
|
|
645
|
+
return a + BitScalar<_Scalar>{}.to_ur(pfirst(std::forward<Rng>(rng)())) * (b - a);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
template<typename Packet, typename Rng>
|
|
649
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& a, const Packet& b)
|
|
650
|
+
{
|
|
651
|
+
using namespace Eigen::internal;
|
|
652
|
+
using RUtils = RandUtils<Packet, Rng>;
|
|
653
|
+
return padd(pmul(
|
|
654
|
+
RUtils{}.uniform_real(std::forward<Rng>(rng)), psub(b, a)
|
|
655
|
+
), a);
|
|
656
|
+
}
|
|
657
|
+
};
|
|
658
|
+
|
|
504
659
|
|
|
505
660
|
/**
|
|
506
661
|
* @brief Generator of Bernoulli distribution
|
|
@@ -547,6 +702,35 @@ namespace Eigen
|
|
|
547
702
|
}
|
|
548
703
|
};
|
|
549
704
|
|
|
705
|
+
template<typename _Scalar>
|
|
706
|
+
class BernoulliVGen : public UnaryGenBase<BernoulliVGen<_Scalar>, _Scalar, _Scalar>
|
|
707
|
+
{
|
|
708
|
+
static_assert(std::is_floating_point<_Scalar>::value, "vectorized `bernoulli` needs a float type.");
|
|
709
|
+
public:
|
|
710
|
+
using Scalar = _Scalar;
|
|
711
|
+
|
|
712
|
+
template<typename Rng>
|
|
713
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar a)
|
|
714
|
+
{
|
|
715
|
+
using namespace Eigen::internal;
|
|
716
|
+
uint32_t p = (uint32_t)(a * 0x80000000);
|
|
717
|
+
return (((uint32_t)pfirst(std::forward<Rng>(rng)()) & 0x7FFFFFFF) < p) ? 1 : 0;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
template<typename Packet, typename Rng>
|
|
721
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& a)
|
|
722
|
+
{
|
|
723
|
+
using namespace Eigen::internal;
|
|
724
|
+
using IPacket = decltype(reinterpret_to_int(std::declval<Packet>()));
|
|
725
|
+
using RUtils = RawbitsMaker<IPacket, Rng>;
|
|
726
|
+
auto one = pset1<Packet>(1);
|
|
727
|
+
auto zero = pset1<Packet>(0);
|
|
728
|
+
auto p = pcast<Packet, IPacket>(pmul(a, pset1<Packet>(0x80000000)));
|
|
729
|
+
auto r = RUtils{}.rawbits(std::forward<Rng>(rng));
|
|
730
|
+
r = pand(r, pset1<IPacket>(0x7FFFFFFF));
|
|
731
|
+
return pblendv(pcmplt(r, p), one, zero);
|
|
732
|
+
}
|
|
733
|
+
};
|
|
550
734
|
|
|
551
735
|
template<typename Derived, typename Urng>
|
|
552
736
|
using RandBitsType = CwiseNullaryOp<internal::scalar_rng_adaptor<RandbitsGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
@@ -682,6 +866,68 @@ namespace Eigen
|
|
|
682
866
|
};
|
|
683
867
|
}
|
|
684
868
|
|
|
869
|
+
template<typename Derived, typename Urng>
|
|
870
|
+
using BalancedVVType = CwiseBinaryOp<
|
|
871
|
+
internal::scalar_binary_rng_adaptor<BalancedVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
872
|
+
const Derived, const Derived
|
|
873
|
+
>;
|
|
874
|
+
|
|
875
|
+
/**
|
|
876
|
+
* @brief generates reals in a range `[a, b]`
|
|
877
|
+
*
|
|
878
|
+
* @tparam Lhs, Rhs ArrayBase type of lhs and rhs operands
|
|
879
|
+
* @tparam Urng
|
|
880
|
+
* @param urng c++11-style random number generator
|
|
881
|
+
* @param a,b left and right boundary
|
|
882
|
+
* @return a random matrix expression with the same shape as `a` and `b`
|
|
883
|
+
* @note `a` and `b` should have the same shape and scalar type.
|
|
884
|
+
*
|
|
885
|
+
*
|
|
886
|
+
* @see Eigen::Rand::BalancedGen
|
|
887
|
+
*/
|
|
888
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
889
|
+
inline const BalancedVVType<Lhs, Urng>
|
|
890
|
+
balanced(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
891
|
+
{
|
|
892
|
+
static_assert(std::is_same<typename Lhs::Scalar, typename Rhs::Scalar>::value, "`Lhs::Scalar` must be equal to `Rhs::Scalar`");
|
|
893
|
+
return {
|
|
894
|
+
static_cast<const Lhs&>(a), static_cast<const Rhs&>(b),
|
|
895
|
+
{ std::forward<Urng>(urng), BalancedVGen<typename Lhs::Scalar>{} }
|
|
896
|
+
};
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
template<typename Derived, typename Urng>
|
|
900
|
+
using BalancedVSType = CwiseBinaryOp<
|
|
901
|
+
internal::scalar_binary_rng_adaptor<BalancedVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
902
|
+
const Derived, CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>
|
|
903
|
+
>;
|
|
904
|
+
|
|
905
|
+
template<typename Lhs, typename Urng>
|
|
906
|
+
inline const BalancedVSType<Lhs, Urng>
|
|
907
|
+
balanced(Urng&& urng, const ArrayBase<Lhs>& a, typename Lhs::Scalar b)
|
|
908
|
+
{
|
|
909
|
+
return {
|
|
910
|
+
static_cast<const Lhs&>(a), { a.rows(), a.cols(), internal::scalar_constant_op<typename Lhs::Scalar>{ b } },
|
|
911
|
+
{ std::forward<Urng>(urng), BalancedVGen<typename Lhs::Scalar>{} }
|
|
912
|
+
};
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
template<typename Derived, typename Urng>
|
|
916
|
+
using BalancedSVType = CwiseBinaryOp<
|
|
917
|
+
internal::scalar_binary_rng_adaptor<BalancedVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
918
|
+
CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>, const Derived
|
|
919
|
+
>;
|
|
920
|
+
|
|
921
|
+
template<typename Rhs, typename Urng>
|
|
922
|
+
inline const BalancedSVType<Rhs, Urng>
|
|
923
|
+
balanced(Urng&& urng, typename Rhs::Scalar a, const ArrayBase<Rhs>& b)
|
|
924
|
+
{
|
|
925
|
+
return {
|
|
926
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<typename Rhs::Scalar>{ a } }, static_cast<const Rhs&>(b),
|
|
927
|
+
{ std::forward<Urng>(urng), BalancedVGen<typename Rhs::Scalar>{} }
|
|
928
|
+
};
|
|
929
|
+
}
|
|
930
|
+
|
|
685
931
|
template<typename Derived, typename Urng>
|
|
686
932
|
using StdUniformRealType = CwiseNullaryOp<internal::scalar_rng_adaptor<StdUniformRealGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
687
933
|
|
|
@@ -772,6 +1018,69 @@ namespace Eigen
|
|
|
772
1018
|
};
|
|
773
1019
|
}
|
|
774
1020
|
|
|
1021
|
+
template<typename Derived, typename Urng>
|
|
1022
|
+
using UniformRealVVType = CwiseBinaryOp<
|
|
1023
|
+
internal::scalar_binary_rng_adaptor<UniformRealVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1024
|
+
const Derived, const Derived
|
|
1025
|
+
>;
|
|
1026
|
+
|
|
1027
|
+
/**
|
|
1028
|
+
* @brief generates reals in a range `[a, b)`
|
|
1029
|
+
*
|
|
1030
|
+
* @tparam Lhs, Rhs ArrayBase type of lhs and rhs operands
|
|
1031
|
+
* @tparam Urng
|
|
1032
|
+
* @param urng c++11-style random number generator
|
|
1033
|
+
* @param a,b left and right boundary
|
|
1034
|
+
* @return a random matrix expression with the same shape as `a` and `b`
|
|
1035
|
+
* @note `a` and `b` should have the same shape and scalar type.
|
|
1036
|
+
*
|
|
1037
|
+
*
|
|
1038
|
+
* @see Eigen::Rand::UniformRealGen
|
|
1039
|
+
*/
|
|
1040
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1041
|
+
inline const UniformRealVVType<Lhs, Urng>
|
|
1042
|
+
uniformReal(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
1043
|
+
{
|
|
1044
|
+
static_assert(std::is_same<typename Lhs::Scalar, typename Rhs::Scalar>::value, "`Lhs::Scalar` must be equal to `Rhs::Scalar`");
|
|
1045
|
+
return {
|
|
1046
|
+
static_cast<const Lhs&>(a), static_cast<const Rhs&>(b),
|
|
1047
|
+
{ std::forward<Urng>(urng), UniformRealVGen<typename Lhs::Scalar>{} }
|
|
1048
|
+
};
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
template<typename Derived, typename Urng>
|
|
1052
|
+
using UniformRealVSType = CwiseBinaryOp<
|
|
1053
|
+
internal::scalar_binary_rng_adaptor<UniformRealVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1054
|
+
const Derived, CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>
|
|
1055
|
+
>;
|
|
1056
|
+
|
|
1057
|
+
template<typename Lhs, typename Urng>
|
|
1058
|
+
inline const UniformRealVSType<Lhs, Urng>
|
|
1059
|
+
uniformReal(Urng&& urng, const ArrayBase<Lhs>& a, typename Lhs::Scalar b)
|
|
1060
|
+
{
|
|
1061
|
+
return {
|
|
1062
|
+
static_cast<const Lhs&>(a), { a.rows(), a.cols(), internal::scalar_constant_op<typename Lhs::Scalar>{ b } },
|
|
1063
|
+
{ std::forward<Urng>(urng), UniformRealVGen<typename Lhs::Scalar>{} }
|
|
1064
|
+
};
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
|
|
1068
|
+
template<typename Derived, typename Urng>
|
|
1069
|
+
using UniformRealSVType = CwiseBinaryOp<
|
|
1070
|
+
internal::scalar_binary_rng_adaptor<UniformRealVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1071
|
+
CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>, const Derived
|
|
1072
|
+
>;
|
|
1073
|
+
|
|
1074
|
+
template<typename Rhs, typename Urng>
|
|
1075
|
+
inline const UniformRealSVType<Rhs, Urng>
|
|
1076
|
+
uniformReal(Urng&& urng, typename Rhs::Scalar a, const ArrayBase<Rhs>& b)
|
|
1077
|
+
{
|
|
1078
|
+
return {
|
|
1079
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<typename Rhs::Scalar>{ a } }, static_cast<const Rhs&>(b),
|
|
1080
|
+
{ std::forward<Urng>(urng), UniformRealVGen<typename Rhs::Scalar>{} }
|
|
1081
|
+
};
|
|
1082
|
+
}
|
|
1083
|
+
|
|
775
1084
|
template<typename Derived, typename Urng>
|
|
776
1085
|
using BernoulliType = CwiseNullaryOp<internal::scalar_rng_adaptor<BernoulliGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
777
1086
|
|
|
@@ -813,6 +1122,30 @@ namespace Eigen
|
|
|
813
1122
|
o.rows(), o.cols(), { std::forward<Urng>(urng), BernoulliGen<typename Derived::Scalar>{ p } }
|
|
814
1123
|
};
|
|
815
1124
|
}
|
|
1125
|
+
|
|
1126
|
+
template<typename Derived, typename Urng>
|
|
1127
|
+
using BernoulliVType = CwiseUnaryOp<
|
|
1128
|
+
internal::scalar_unary_rng_adaptor<BernoulliVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1129
|
+
const Derived
|
|
1130
|
+
>;
|
|
1131
|
+
|
|
1132
|
+
/**
|
|
1133
|
+
* @brief generates 1 with probability `p` and 0 with probability `1 - p`
|
|
1134
|
+
*
|
|
1135
|
+
* @tparam Lhs
|
|
1136
|
+
* @tparam Urng
|
|
1137
|
+
* @param urng c++11-style random number generator
|
|
1138
|
+
* @param p a probability of generating 1
|
|
1139
|
+
* @return a random matrix expression with the same shape as `p`
|
|
1140
|
+
*/
|
|
1141
|
+
template<typename Lhs, typename Urng>
|
|
1142
|
+
inline const BernoulliVType<Lhs, Urng>
|
|
1143
|
+
bernoulli(Urng&& urng, const ArrayBase<Lhs>& p)
|
|
1144
|
+
{
|
|
1145
|
+
return BernoulliVType<Lhs, Urng>{
|
|
1146
|
+
static_cast<const Lhs&>(p), { std::forward<Urng>(urng), BernoulliVGen<typename Lhs::Scalar>{} }
|
|
1147
|
+
};
|
|
1148
|
+
}
|
|
816
1149
|
}
|
|
817
1150
|
}
|
|
818
1151
|
|