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 NormalExp.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
|
|
|
@@ -132,6 +132,33 @@ namespace Eigen
|
|
|
132
132
|
}
|
|
133
133
|
};
|
|
134
134
|
|
|
135
|
+
template<typename _Scalar>
|
|
136
|
+
class NormalVGen : public BinaryGenBase<NormalVGen<_Scalar>, _Scalar, _Scalar, _Scalar>
|
|
137
|
+
{
|
|
138
|
+
static_assert(std::is_floating_point<_Scalar>::value, "normalDist needs floating point types.");
|
|
139
|
+
StdNormalGen<_Scalar> stdnorm;
|
|
140
|
+
|
|
141
|
+
public:
|
|
142
|
+
using Scalar = _Scalar;
|
|
143
|
+
|
|
144
|
+
template<typename Rng>
|
|
145
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar mean, _Scalar stdev)
|
|
146
|
+
{
|
|
147
|
+
using namespace Eigen::internal;
|
|
148
|
+
return stdnorm(std::forward<Rng>(rng)) * stdev + mean;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
template<typename Packet, typename Rng>
|
|
152
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& mean, const Packet& stdev)
|
|
153
|
+
{
|
|
154
|
+
using namespace Eigen::internal;
|
|
155
|
+
return padd(pmul(
|
|
156
|
+
stdnorm.template packetOp<Packet>(std::forward<Rng>(rng)),
|
|
157
|
+
stdev
|
|
158
|
+
), mean);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
135
162
|
/**
|
|
136
163
|
* @brief Generator of reals on a lognormal distribution
|
|
137
164
|
*
|
|
@@ -178,6 +205,30 @@ namespace Eigen
|
|
|
178
205
|
}
|
|
179
206
|
};
|
|
180
207
|
|
|
208
|
+
template<typename _Scalar>
|
|
209
|
+
class LognormalVGen : public BinaryGenBase<LognormalVGen<_Scalar>, _Scalar, _Scalar, _Scalar>
|
|
210
|
+
{
|
|
211
|
+
static_assert(std::is_floating_point<_Scalar>::value, "lognormalDist needs floating point types.");
|
|
212
|
+
NormalVGen<_Scalar> norm;
|
|
213
|
+
|
|
214
|
+
public:
|
|
215
|
+
using Scalar = _Scalar;
|
|
216
|
+
|
|
217
|
+
template<typename Rng>
|
|
218
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar mean, _Scalar stdev)
|
|
219
|
+
{
|
|
220
|
+
using namespace Eigen::internal;
|
|
221
|
+
return std::exp(norm(std::forward<Rng>(rng), mean, stdev));
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
template<typename Packet, typename Rng>
|
|
225
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& mean, const Packet& stdev)
|
|
226
|
+
{
|
|
227
|
+
using namespace Eigen::internal;
|
|
228
|
+
return pexp(norm.template packetOp<Packet>(std::forward<Rng>(rng), mean, stdev));
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
181
232
|
/**
|
|
182
233
|
* @brief Generator of reals on a Student's t distribution
|
|
183
234
|
*
|
|
@@ -246,6 +297,51 @@ namespace Eigen
|
|
|
246
297
|
}
|
|
247
298
|
};
|
|
248
299
|
|
|
300
|
+
template<typename _Scalar>
|
|
301
|
+
class StudentTVGen : public UnaryGenBase<StudentTVGen<_Scalar>, _Scalar, _Scalar>
|
|
302
|
+
{
|
|
303
|
+
static_assert(std::is_floating_point<_Scalar>::value, "studentT needs floating point types.");
|
|
304
|
+
StdUniformRealGen<_Scalar> ur;
|
|
305
|
+
|
|
306
|
+
public:
|
|
307
|
+
using Scalar = _Scalar;
|
|
308
|
+
|
|
309
|
+
template<typename Rng>
|
|
310
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar n)
|
|
311
|
+
{
|
|
312
|
+
using namespace Eigen::internal;
|
|
313
|
+
_Scalar v1, v2, sx;
|
|
314
|
+
for (int _i = 0; ; ++_i)
|
|
315
|
+
{
|
|
316
|
+
EIGENRAND_CHECK_INFINITY_LOOP();
|
|
317
|
+
v1 = 2 * ur(rng) - 1;
|
|
318
|
+
v2 = 2 * ur(rng) - 1;
|
|
319
|
+
sx = v1 * v1 + v2 * v2;
|
|
320
|
+
if (sx && sx < 1) break;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
_Scalar fx = std::sqrt(n * (std::pow(sx, -2 / n) - 1) / sx);
|
|
324
|
+
return fx * v1;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
template<typename Packet, typename Rng>
|
|
328
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& n)
|
|
329
|
+
{
|
|
330
|
+
using namespace Eigen::internal;
|
|
331
|
+
Packet u1 = ur.template packetOp<Packet>(rng),
|
|
332
|
+
u2 = ur.template packetOp<Packet>(rng);
|
|
333
|
+
|
|
334
|
+
u1 = psub(pset1<Packet>(1), u1);
|
|
335
|
+
auto radius = psqrt(pmul(n,
|
|
336
|
+
psub(pexp(pmul(plog(u1), pdiv(pset1<Packet>(-2), n))), pset1<Packet>(1))
|
|
337
|
+
));
|
|
338
|
+
auto theta = pmul(pset1<Packet>(2 * constant::pi), u2);
|
|
339
|
+
//Packet sintheta, costheta;
|
|
340
|
+
//psincos(theta, sintheta, costheta);
|
|
341
|
+
return pmul(radius, psin(theta));
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
|
|
249
345
|
template<typename> class GammaGen;
|
|
250
346
|
|
|
251
347
|
/**
|
|
@@ -297,6 +393,32 @@ namespace Eigen
|
|
|
297
393
|
}
|
|
298
394
|
};
|
|
299
395
|
|
|
396
|
+
template<typename _Scalar>
|
|
397
|
+
class ExponentialVGen : public UnaryGenBase<ExponentialVGen<_Scalar>, _Scalar, _Scalar>
|
|
398
|
+
{
|
|
399
|
+
static_assert(std::is_floating_point<_Scalar>::value, "expDist needs floating point types.");
|
|
400
|
+
StdUniformRealGen<_Scalar> ur;
|
|
401
|
+
|
|
402
|
+
public:
|
|
403
|
+
using Scalar = _Scalar;
|
|
404
|
+
|
|
405
|
+
template<typename Rng>
|
|
406
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar lambda)
|
|
407
|
+
{
|
|
408
|
+
using namespace Eigen::internal;
|
|
409
|
+
return -std::log(1 - ur(std::forward<Rng>(rng))) / lambda;
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
template<typename Packet, typename Rng>
|
|
413
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& lambda)
|
|
414
|
+
{
|
|
415
|
+
using namespace Eigen::internal;
|
|
416
|
+
return pnegate(pdiv(plog(
|
|
417
|
+
psub(pset1<Packet>(1), ur.template packetOp<Packet>(std::forward<Rng>(rng)))
|
|
418
|
+
), lambda));
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
|
|
300
422
|
template<typename> class NegativeBinomialGen;
|
|
301
423
|
|
|
302
424
|
/**
|
|
@@ -527,6 +649,32 @@ namespace Eigen
|
|
|
527
649
|
}
|
|
528
650
|
};
|
|
529
651
|
|
|
652
|
+
template<typename _Scalar>
|
|
653
|
+
class WeibullVGen : public BinaryGenBase<WeibullGen<_Scalar>, _Scalar, _Scalar, _Scalar>
|
|
654
|
+
{
|
|
655
|
+
static_assert(std::is_floating_point<_Scalar>::value, "weilbullDist needs floating point types.");
|
|
656
|
+
StdUniformRealGen<_Scalar> ur;
|
|
657
|
+
|
|
658
|
+
public:
|
|
659
|
+
using Scalar = _Scalar;
|
|
660
|
+
|
|
661
|
+
template<typename Rng>
|
|
662
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar a, _Scalar b)
|
|
663
|
+
{
|
|
664
|
+
using namespace Eigen::internal;
|
|
665
|
+
return std::pow(-std::log(1 - ur(std::forward<Rng>(rng))), 1 / a) * b;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
template<typename Packet, typename Rng>
|
|
669
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& a, const Packet& b)
|
|
670
|
+
{
|
|
671
|
+
using namespace Eigen::internal;
|
|
672
|
+
return pmul(pexp(pmul(plog(pnegate(plog(
|
|
673
|
+
psub(pset1<Packet>(1), ur.template packetOp<Packet>(std::forward<Rng>(rng)))
|
|
674
|
+
))), pdiv(pset1<Packet>(1), a))), b);
|
|
675
|
+
}
|
|
676
|
+
};
|
|
677
|
+
|
|
530
678
|
/**
|
|
531
679
|
* @brief Generator of reals on an extreme value distribution
|
|
532
680
|
*
|
|
@@ -577,6 +725,33 @@ namespace Eigen
|
|
|
577
725
|
}
|
|
578
726
|
};
|
|
579
727
|
|
|
728
|
+
template<typename _Scalar>
|
|
729
|
+
class ExtremeValueVGen : public BinaryGenBase<ExtremeValueVGen<_Scalar>, _Scalar, _Scalar, _Scalar>
|
|
730
|
+
{
|
|
731
|
+
static_assert(std::is_floating_point<_Scalar>::value, "extremeValueDist needs floating point types.");
|
|
732
|
+
StdUniformRealGen<_Scalar> ur;
|
|
733
|
+
|
|
734
|
+
public:
|
|
735
|
+
using Scalar = _Scalar;
|
|
736
|
+
|
|
737
|
+
template<typename Rng>
|
|
738
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar a, _Scalar b)
|
|
739
|
+
{
|
|
740
|
+
using namespace Eigen::internal;
|
|
741
|
+
return (a - b * std::log(-std::log(ur.nzur_scalar(std::forward<Rng>(rng)))));
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
template<typename Packet, typename Rng>
|
|
745
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& a, const Packet& b)
|
|
746
|
+
{
|
|
747
|
+
using namespace Eigen::internal;
|
|
748
|
+
using RUtils = RandUtils<Packet, Rng>;
|
|
749
|
+
return psub(a,
|
|
750
|
+
pmul(plog(pnegate(plog(RUtils{}.nonzero_uniform_real(std::forward<Rng>(rng))))), b)
|
|
751
|
+
);
|
|
752
|
+
}
|
|
753
|
+
};
|
|
754
|
+
|
|
580
755
|
/**
|
|
581
756
|
* @brief Generator of reals on a chi-squared distribution
|
|
582
757
|
*
|
|
@@ -672,6 +847,36 @@ namespace Eigen
|
|
|
672
847
|
}
|
|
673
848
|
};
|
|
674
849
|
|
|
850
|
+
template<typename _Scalar>
|
|
851
|
+
class CauchyVGen : public BinaryGenBase<CauchyVGen<_Scalar>, _Scalar, _Scalar, _Scalar>
|
|
852
|
+
{
|
|
853
|
+
static_assert(std::is_floating_point<_Scalar>::value, "cauchyDist needs floating point types.");
|
|
854
|
+
StdUniformRealGen<_Scalar> ur;
|
|
855
|
+
|
|
856
|
+
public:
|
|
857
|
+
using Scalar = _Scalar;
|
|
858
|
+
|
|
859
|
+
template<typename Rng>
|
|
860
|
+
EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng, _Scalar a, _Scalar b)
|
|
861
|
+
{
|
|
862
|
+
using namespace Eigen::internal;
|
|
863
|
+
return a + b * std::tan(constant::pi * (ur(std::forward<Rng>(rng)) - 0.5));
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
template<typename Packet, typename Rng>
|
|
867
|
+
EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng, const Packet& a, const Packet& b)
|
|
868
|
+
{
|
|
869
|
+
using namespace Eigen::internal;
|
|
870
|
+
Packet s, c;
|
|
871
|
+
psincos(pmul(pset1<Packet>(constant::pi),
|
|
872
|
+
psub(ur.template packetOp<Packet>(std::forward<Rng>(rng)), pset1<Packet>(0.5))
|
|
873
|
+
), s, c);
|
|
874
|
+
return padd(a,
|
|
875
|
+
pmul(b, pdiv(s, c))
|
|
876
|
+
);
|
|
877
|
+
}
|
|
878
|
+
};
|
|
879
|
+
|
|
675
880
|
template<typename> class FisherFGen;
|
|
676
881
|
|
|
677
882
|
/**
|
|
@@ -904,6 +1109,69 @@ namespace Eigen
|
|
|
904
1109
|
};
|
|
905
1110
|
}
|
|
906
1111
|
|
|
1112
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1113
|
+
using CauchyVVType = CwiseBinaryOp<
|
|
1114
|
+
internal::scalar_binary_rng_adaptor<CauchyVGen<typename Lhs::Scalar>, typename Lhs::Scalar, typename Lhs::Scalar, typename Rhs::Scalar, Urng, true>,
|
|
1115
|
+
const Lhs, const Rhs
|
|
1116
|
+
>;
|
|
1117
|
+
|
|
1118
|
+
/**
|
|
1119
|
+
* @brief generates reals on the Cauchy distribution.
|
|
1120
|
+
*
|
|
1121
|
+
* @tparam Lhs, Rhs
|
|
1122
|
+
* @tparam Urng
|
|
1123
|
+
* @param urng c++11-style random number generator
|
|
1124
|
+
* @param a a location parameter of the distribution
|
|
1125
|
+
* @param b a scale parameter of the distribution
|
|
1126
|
+
* @return a random matrix expression with the same shape as `a` and `b`
|
|
1127
|
+
* @note `a` and `b` should have the same shape and scalar type.
|
|
1128
|
+
*
|
|
1129
|
+
* @see Eigen::Rand::CauchyGen
|
|
1130
|
+
*/
|
|
1131
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1132
|
+
inline const CauchyVVType<Lhs, Rhs, Urng>
|
|
1133
|
+
cauchy(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
1134
|
+
{
|
|
1135
|
+
return {
|
|
1136
|
+
static_cast<const Lhs&>(a), static_cast<const Rhs&>(b),
|
|
1137
|
+
{ std::forward<Urng>(urng), CauchyVGen<typename Lhs::Scalar>{} }
|
|
1138
|
+
};
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
template<typename Derived, typename Urng>
|
|
1142
|
+
using CauchyVSType = CwiseBinaryOp<
|
|
1143
|
+
internal::scalar_binary_rng_adaptor<CauchyVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1144
|
+
const Derived, CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>
|
|
1145
|
+
>;
|
|
1146
|
+
|
|
1147
|
+
template<typename Lhs, typename Urng>
|
|
1148
|
+
inline const CauchyVSType<Lhs, Urng>
|
|
1149
|
+
cauchy(Urng&& urng, const ArrayBase<Lhs>& a, typename Lhs::Scalar b)
|
|
1150
|
+
{
|
|
1151
|
+
return {
|
|
1152
|
+
static_cast<const Lhs&>(a),
|
|
1153
|
+
{ a.rows(), a.cols(), internal::scalar_constant_op<typename Lhs::Scalar>{ b } },
|
|
1154
|
+
{ std::forward<Urng>(urng), CauchyVGen<typename Lhs::Scalar>{} }
|
|
1155
|
+
};
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
template<typename Derived, typename Urng>
|
|
1159
|
+
using CauchySVType = CwiseBinaryOp<
|
|
1160
|
+
internal::scalar_binary_rng_adaptor<CauchyVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1161
|
+
CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>, const Derived
|
|
1162
|
+
>;
|
|
1163
|
+
|
|
1164
|
+
template<typename Rhs, typename Urng>
|
|
1165
|
+
inline const CauchySVType<Rhs, Urng>
|
|
1166
|
+
cauchy(Urng&& urng, typename Rhs::Scalar a, const ArrayBase<Rhs>& b)
|
|
1167
|
+
{
|
|
1168
|
+
return {
|
|
1169
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<typename Rhs::Scalar>{ a } },
|
|
1170
|
+
static_cast<const Rhs&>(b),
|
|
1171
|
+
{ std::forward<Urng>(urng), CauchyVGen<typename Rhs::Scalar>{} }
|
|
1172
|
+
};
|
|
1173
|
+
}
|
|
1174
|
+
|
|
907
1175
|
template<typename Derived, typename Urng>
|
|
908
1176
|
using NormalType = CwiseNullaryOp<internal::scalar_rng_adaptor<StdNormalGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
909
1177
|
|
|
@@ -996,6 +1264,69 @@ namespace Eigen
|
|
|
996
1264
|
};
|
|
997
1265
|
}
|
|
998
1266
|
|
|
1267
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1268
|
+
using NormalVVType = CwiseBinaryOp<
|
|
1269
|
+
internal::scalar_binary_rng_adaptor<NormalVGen<typename Lhs::Scalar>, typename Lhs::Scalar, typename Lhs::Scalar, typename Rhs::Scalar, Urng, true>,
|
|
1270
|
+
const Lhs, const Rhs
|
|
1271
|
+
>;
|
|
1272
|
+
|
|
1273
|
+
/**
|
|
1274
|
+
* @brief generates reals on a normal distribution with arbitrary `mean` and `stdev`.
|
|
1275
|
+
*
|
|
1276
|
+
* @tparam Lhs, Rhs
|
|
1277
|
+
* @tparam Urng
|
|
1278
|
+
* @param urng c++11-style random number generator
|
|
1279
|
+
* @param mean a mean value of the distribution
|
|
1280
|
+
* @param stdev a standard deviation value of the distribution
|
|
1281
|
+
* @return a random matrix expression with the same shape as `mean` and `stdev`
|
|
1282
|
+
* @note `mean` and `stdev` should have the same shape and scalar type.
|
|
1283
|
+
*
|
|
1284
|
+
* @see Eigen::Rand::NormalGen
|
|
1285
|
+
*/
|
|
1286
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1287
|
+
inline const NormalVVType<Lhs, Rhs, Urng>
|
|
1288
|
+
normal(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
1289
|
+
{
|
|
1290
|
+
return {
|
|
1291
|
+
static_cast<const Lhs&>(a), static_cast<const Rhs&>(b),
|
|
1292
|
+
{ std::forward<Urng>(urng), NormalVGen<typename Lhs::Scalar>{} }
|
|
1293
|
+
};
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
template<typename Derived, typename Urng>
|
|
1297
|
+
using NormalVSType = CwiseBinaryOp<
|
|
1298
|
+
internal::scalar_binary_rng_adaptor<NormalVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1299
|
+
const Derived, CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>
|
|
1300
|
+
>;
|
|
1301
|
+
|
|
1302
|
+
template<typename Lhs, typename Urng>
|
|
1303
|
+
inline const NormalVSType<Lhs, Urng>
|
|
1304
|
+
normal(Urng&& urng, const ArrayBase<Lhs>& a, typename Lhs::Scalar b)
|
|
1305
|
+
{
|
|
1306
|
+
return {
|
|
1307
|
+
static_cast<const Lhs&>(a),
|
|
1308
|
+
{ a.rows(), a.cols(), internal::scalar_constant_op<typename Lhs::Scalar>{ b } },
|
|
1309
|
+
{ std::forward<Urng>(urng), NormalVGen<typename Lhs::Scalar>{} }
|
|
1310
|
+
};
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
template<typename Derived, typename Urng>
|
|
1314
|
+
using NormalSVType = CwiseBinaryOp<
|
|
1315
|
+
internal::scalar_binary_rng_adaptor<NormalVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1316
|
+
CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>, const Derived
|
|
1317
|
+
>;
|
|
1318
|
+
|
|
1319
|
+
template<typename Rhs, typename Urng>
|
|
1320
|
+
inline const NormalSVType<Rhs, Urng>
|
|
1321
|
+
normal(Urng&& urng, typename Rhs::Scalar a, const ArrayBase<Rhs>& b)
|
|
1322
|
+
{
|
|
1323
|
+
return {
|
|
1324
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<typename Rhs::Scalar>{ a } },
|
|
1325
|
+
static_cast<const Rhs&>(b),
|
|
1326
|
+
{ std::forward<Urng>(urng), NormalVGen<typename Rhs::Scalar>{} }
|
|
1327
|
+
};
|
|
1328
|
+
}
|
|
1329
|
+
|
|
999
1330
|
template<typename Derived, typename Urng>
|
|
1000
1331
|
using LognormalType = CwiseNullaryOp<internal::scalar_rng_adaptor<LognormalGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
1001
1332
|
|
|
@@ -1044,6 +1375,68 @@ namespace Eigen
|
|
|
1044
1375
|
};
|
|
1045
1376
|
}
|
|
1046
1377
|
|
|
1378
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1379
|
+
using LognormalVVType = CwiseBinaryOp<
|
|
1380
|
+
internal::scalar_binary_rng_adaptor<LognormalVGen<typename Lhs::Scalar>, typename Lhs::Scalar, typename Lhs::Scalar, typename Rhs::Scalar, Urng, true>,
|
|
1381
|
+
const Lhs, const Rhs
|
|
1382
|
+
>;
|
|
1383
|
+
/**
|
|
1384
|
+
* @brief generates reals on a lognormal distribution with arbitrary `mean` and `stdev`.
|
|
1385
|
+
*
|
|
1386
|
+
* @tparam Lhs, Rhs
|
|
1387
|
+
* @tparam Urng
|
|
1388
|
+
* @param urng c++11-style random number generator
|
|
1389
|
+
* @param mean a mean value of the distribution
|
|
1390
|
+
* @param stdev a standard deviation value of the distribution
|
|
1391
|
+
* @return a random matrix expression with the same shape as `mean` and `stdev`
|
|
1392
|
+
* @note `mean` and `stdev` should have the same shape and scalar type.
|
|
1393
|
+
*
|
|
1394
|
+
* @see Eigen::Rand::LognormalGen
|
|
1395
|
+
*/
|
|
1396
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1397
|
+
inline const LognormalVVType<Lhs, Rhs, Urng>
|
|
1398
|
+
lognormal(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
1399
|
+
{
|
|
1400
|
+
return {
|
|
1401
|
+
static_cast<const Lhs&>(a), static_cast<const Rhs&>(b),
|
|
1402
|
+
{ std::forward<Urng>(urng), LognormalVGen<typename Lhs::Scalar>{} }
|
|
1403
|
+
};
|
|
1404
|
+
}
|
|
1405
|
+
|
|
1406
|
+
template<typename Derived, typename Urng>
|
|
1407
|
+
using LognormalVSType = CwiseBinaryOp<
|
|
1408
|
+
internal::scalar_binary_rng_adaptor<LognormalVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1409
|
+
const Derived, CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>
|
|
1410
|
+
>;
|
|
1411
|
+
|
|
1412
|
+
template<typename Lhs, typename Urng>
|
|
1413
|
+
inline const LognormalVSType<Lhs, Urng>
|
|
1414
|
+
lognormal(Urng&& urng, const ArrayBase<Lhs>& a, typename Lhs::Scalar b)
|
|
1415
|
+
{
|
|
1416
|
+
return {
|
|
1417
|
+
static_cast<const Lhs&>(a),
|
|
1418
|
+
{ a.rows(), a.cols(), internal::scalar_constant_op<typename Lhs::Scalar>{ b } },
|
|
1419
|
+
{ std::forward<Urng>(urng), LognormalVGen<typename Lhs::Scalar>{} }
|
|
1420
|
+
};
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
template<typename Derived, typename Urng>
|
|
1424
|
+
using LognormalSVType = CwiseBinaryOp<
|
|
1425
|
+
internal::scalar_binary_rng_adaptor<LognormalVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1426
|
+
CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>, const Derived
|
|
1427
|
+
>;
|
|
1428
|
+
|
|
1429
|
+
template<typename Rhs, typename Urng>
|
|
1430
|
+
inline const LognormalSVType<Rhs, Urng>
|
|
1431
|
+
lognormal(Urng&& urng, typename Rhs::Scalar a, const ArrayBase<Rhs>& b)
|
|
1432
|
+
{
|
|
1433
|
+
return {
|
|
1434
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<typename Rhs::Scalar>{ a } },
|
|
1435
|
+
static_cast<const Rhs&>(b),
|
|
1436
|
+
{ std::forward<Urng>(urng), LognormalVGen<typename Rhs::Scalar>{} }
|
|
1437
|
+
};
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1047
1440
|
template<typename Derived, typename Urng>
|
|
1048
1441
|
using StudentTType = CwiseNullaryOp<internal::scalar_rng_adaptor<StudentTGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
1049
1442
|
|
|
@@ -1090,6 +1483,32 @@ namespace Eigen
|
|
|
1090
1483
|
};
|
|
1091
1484
|
}
|
|
1092
1485
|
|
|
1486
|
+
template<typename Lhs, typename Urng>
|
|
1487
|
+
using StudentTVType = CwiseUnaryOp<
|
|
1488
|
+
internal::scalar_unary_rng_adaptor<StudentTVGen<typename Lhs::Scalar>, typename Lhs::Scalar, typename Lhs::Scalar, Urng, true>,
|
|
1489
|
+
const Lhs
|
|
1490
|
+
>;
|
|
1491
|
+
/**
|
|
1492
|
+
* @brief generates reals on the Student's t distribution with arbirtrary degress of freedom.
|
|
1493
|
+
*
|
|
1494
|
+
* @tparam Lhs
|
|
1495
|
+
* @tparam Urng
|
|
1496
|
+
* @param urng c++11-style random number generator
|
|
1497
|
+
* @param n degrees of freedom
|
|
1498
|
+
* @return a random matrix expression with the same shape as `n`
|
|
1499
|
+
*
|
|
1500
|
+
* @see Eigen::Rand::StudentTGen
|
|
1501
|
+
*/
|
|
1502
|
+
template<typename Lhs, typename Urng>
|
|
1503
|
+
inline const StudentTVType<Lhs, Urng>
|
|
1504
|
+
studentT(Urng&& urng, const ArrayBase<Lhs>& a)
|
|
1505
|
+
{
|
|
1506
|
+
return StudentTVType<Lhs, Urng> {
|
|
1507
|
+
static_cast<const Lhs&>(a),
|
|
1508
|
+
{ std::forward<Urng>(urng), StudentTVGen<typename Lhs::Scalar>{} }
|
|
1509
|
+
};
|
|
1510
|
+
}
|
|
1511
|
+
|
|
1093
1512
|
template<typename Derived, typename Urng>
|
|
1094
1513
|
using ExponentialType = CwiseNullaryOp<internal::scalar_rng_adaptor<ExponentialGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
1095
1514
|
|
|
@@ -1136,6 +1555,32 @@ namespace Eigen
|
|
|
1136
1555
|
};
|
|
1137
1556
|
}
|
|
1138
1557
|
|
|
1558
|
+
template<typename Lhs, typename Urng>
|
|
1559
|
+
using ExponentialVType = CwiseUnaryOp<
|
|
1560
|
+
internal::scalar_unary_rng_adaptor<ExponentialVGen<typename Lhs::Scalar>, typename Lhs::Scalar, typename Lhs::Scalar, Urng, true>,
|
|
1561
|
+
const Lhs
|
|
1562
|
+
>;
|
|
1563
|
+
/**
|
|
1564
|
+
* @brief generates reals on an exponential distribution with arbitrary scale parameter.
|
|
1565
|
+
*
|
|
1566
|
+
* @tparam Lhs, Rhs
|
|
1567
|
+
* @tparam Urng
|
|
1568
|
+
* @param urng c++11-style random number generator
|
|
1569
|
+
* @param lambda a scale parameter of the distribution
|
|
1570
|
+
* @return a random matrix expression with the same shape as `lambda`
|
|
1571
|
+
*
|
|
1572
|
+
* @see Eigen::Rand::ExponentialGen
|
|
1573
|
+
*/
|
|
1574
|
+
template<typename Lhs, typename Urng>
|
|
1575
|
+
inline const ExponentialVType<Lhs, Urng>
|
|
1576
|
+
exponential(Urng&& urng, const ArrayBase<Lhs>& a)
|
|
1577
|
+
{
|
|
1578
|
+
return ExponentialVType<Lhs, Urng> {
|
|
1579
|
+
static_cast<const Lhs&>(a),
|
|
1580
|
+
{ std::forward<Urng>(urng), ExponentialVGen<typename Lhs::Scalar>{} }
|
|
1581
|
+
};
|
|
1582
|
+
}
|
|
1583
|
+
|
|
1139
1584
|
template<typename Derived, typename Urng>
|
|
1140
1585
|
using GammaType = CwiseNullaryOp<internal::scalar_rng_adaptor<GammaGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
1141
1586
|
|
|
@@ -1232,6 +1677,69 @@ namespace Eigen
|
|
|
1232
1677
|
};
|
|
1233
1678
|
}
|
|
1234
1679
|
|
|
1680
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1681
|
+
using WeibullVVType = CwiseBinaryOp<
|
|
1682
|
+
internal::scalar_binary_rng_adaptor<WeibullVGen<typename Lhs::Scalar>, typename Lhs::Scalar, typename Lhs::Scalar, typename Rhs::Scalar, Urng, true>,
|
|
1683
|
+
const Lhs, const Rhs
|
|
1684
|
+
>;
|
|
1685
|
+
|
|
1686
|
+
/**
|
|
1687
|
+
* @brief generates reals on a Weibull distribution with arbitrary shape and scale parameter.
|
|
1688
|
+
*
|
|
1689
|
+
* @tparam Lhs, Rhs
|
|
1690
|
+
* @tparam Urng
|
|
1691
|
+
* @param urng c++11-style random number generator
|
|
1692
|
+
* @param a a shape parameter of the distribution
|
|
1693
|
+
* @param b a scale parameter of the distribution
|
|
1694
|
+
* @return a random matrix expression with the same shape as `a` and `b`
|
|
1695
|
+
* @note `a` and `b` should have the same shape and scalar type.
|
|
1696
|
+
*
|
|
1697
|
+
* @see Eigen::Rand::WeibullGen
|
|
1698
|
+
*/
|
|
1699
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1700
|
+
inline const WeibullVVType<Lhs, Rhs, Urng>
|
|
1701
|
+
weibull(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
1702
|
+
{
|
|
1703
|
+
return {
|
|
1704
|
+
static_cast<const Lhs&>(a), static_cast<const Rhs&>(b),
|
|
1705
|
+
{ std::forward<Urng>(urng), WeibullVGen<typename Lhs::Scalar>{} }
|
|
1706
|
+
};
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
template<typename Derived, typename Urng>
|
|
1710
|
+
using WeibullVSType = CwiseBinaryOp<
|
|
1711
|
+
internal::scalar_binary_rng_adaptor<WeibullVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1712
|
+
const Derived, CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>
|
|
1713
|
+
>;
|
|
1714
|
+
|
|
1715
|
+
template<typename Lhs, typename Urng>
|
|
1716
|
+
inline const WeibullVSType<Lhs, Urng>
|
|
1717
|
+
weibull(Urng&& urng, const ArrayBase<Lhs>& a, typename Lhs::Scalar b)
|
|
1718
|
+
{
|
|
1719
|
+
return {
|
|
1720
|
+
static_cast<const Lhs&>(a),
|
|
1721
|
+
{ a.rows(), a.cols(), internal::scalar_constant_op<typename Lhs::Scalar>{ b } },
|
|
1722
|
+
{ std::forward<Urng>(urng), WeibullVGen<typename Lhs::Scalar>{} }
|
|
1723
|
+
};
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1726
|
+
template<typename Derived, typename Urng>
|
|
1727
|
+
using WeibullSVType = CwiseBinaryOp<
|
|
1728
|
+
internal::scalar_binary_rng_adaptor<WeibullVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1729
|
+
CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>, const Derived
|
|
1730
|
+
>;
|
|
1731
|
+
|
|
1732
|
+
template<typename Rhs, typename Urng>
|
|
1733
|
+
inline const WeibullSVType<Rhs, Urng>
|
|
1734
|
+
weibull(Urng&& urng, typename Rhs::Scalar a, const ArrayBase<Rhs>& b)
|
|
1735
|
+
{
|
|
1736
|
+
return {
|
|
1737
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<typename Rhs::Scalar>{ a } },
|
|
1738
|
+
static_cast<const Rhs&>(b),
|
|
1739
|
+
{ std::forward<Urng>(urng), WeibullVGen<typename Rhs::Scalar>{} }
|
|
1740
|
+
};
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1235
1743
|
template<typename Derived, typename Urng>
|
|
1236
1744
|
using ExtremeValueType = CwiseNullaryOp<internal::scalar_rng_adaptor<ExtremeValueGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
1237
1745
|
|
|
@@ -1282,6 +1790,70 @@ namespace Eigen
|
|
|
1282
1790
|
};
|
|
1283
1791
|
}
|
|
1284
1792
|
|
|
1793
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1794
|
+
using ExtremeValueVVType = CwiseBinaryOp<
|
|
1795
|
+
internal::scalar_binary_rng_adaptor<ExtremeValueVGen<typename Lhs::Scalar>, typename Lhs::Scalar, typename Lhs::Scalar, typename Rhs::Scalar, Urng, true>,
|
|
1796
|
+
const Lhs, const Rhs
|
|
1797
|
+
>;
|
|
1798
|
+
|
|
1799
|
+
/**
|
|
1800
|
+
* @brief generates reals on an extreme value distribution
|
|
1801
|
+
* (a.k.a Gumbel Type I, log-Weibull, Fisher-Tippett Type I) with arbitrary shape and scale parameter.
|
|
1802
|
+
*
|
|
1803
|
+
* @tparam Lhs, Rhs
|
|
1804
|
+
* @tparam Urng
|
|
1805
|
+
* @param urng c++11-style random number generator
|
|
1806
|
+
* @param a a location parameter of the distribution
|
|
1807
|
+
* @param b a scale parameter of the distribution
|
|
1808
|
+
* @return a random matrix expression with the same shape as `a` and `b`
|
|
1809
|
+
* @note `a` and `b` should have the same shape and scalar type.
|
|
1810
|
+
*
|
|
1811
|
+
* @see Eigen::Rand::WeibullGen
|
|
1812
|
+
*/
|
|
1813
|
+
template<typename Lhs, typename Rhs, typename Urng>
|
|
1814
|
+
inline const ExtremeValueVVType<Lhs, Rhs, Urng>
|
|
1815
|
+
extremeValue(Urng&& urng, const ArrayBase<Lhs>& a, const ArrayBase<Rhs>& b)
|
|
1816
|
+
{
|
|
1817
|
+
return {
|
|
1818
|
+
static_cast<const Lhs&>(a), static_cast<const Rhs&>(b),
|
|
1819
|
+
{ std::forward<Urng>(urng), ExtremeValueVGen<typename Lhs::Scalar>{} }
|
|
1820
|
+
};
|
|
1821
|
+
}
|
|
1822
|
+
|
|
1823
|
+
template<typename Derived, typename Urng>
|
|
1824
|
+
using ExtremeValueVSType = CwiseBinaryOp<
|
|
1825
|
+
internal::scalar_binary_rng_adaptor<ExtremeValueVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1826
|
+
const Derived, CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>
|
|
1827
|
+
>;
|
|
1828
|
+
|
|
1829
|
+
template<typename Lhs, typename Urng>
|
|
1830
|
+
inline const ExtremeValueVSType<Lhs, Urng>
|
|
1831
|
+
extremeValue(Urng&& urng, const ArrayBase<Lhs>& a, typename Lhs::Scalar b)
|
|
1832
|
+
{
|
|
1833
|
+
return {
|
|
1834
|
+
static_cast<const Lhs&>(a),
|
|
1835
|
+
{ a.rows(), a.cols(), internal::scalar_constant_op<typename Lhs::Scalar>{ b } },
|
|
1836
|
+
{ std::forward<Urng>(urng), ExtremeValueVGen<typename Lhs::Scalar>{} }
|
|
1837
|
+
};
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1840
|
+
template<typename Derived, typename Urng>
|
|
1841
|
+
using ExtremeValueSVType = CwiseBinaryOp<
|
|
1842
|
+
internal::scalar_binary_rng_adaptor<ExtremeValueVGen<typename Derived::Scalar>, typename Derived::Scalar, typename Derived::Scalar, typename Derived::Scalar, Urng, true>,
|
|
1843
|
+
CwiseNullaryOp<internal::scalar_constant_op<typename Derived::Scalar>, const Derived>, const Derived
|
|
1844
|
+
>;
|
|
1845
|
+
|
|
1846
|
+
template<typename Rhs, typename Urng>
|
|
1847
|
+
inline const ExtremeValueSVType<Rhs, Urng>
|
|
1848
|
+
extremeValue(Urng&& urng, typename Rhs::Scalar a, const ArrayBase<Rhs>& b)
|
|
1849
|
+
{
|
|
1850
|
+
return {
|
|
1851
|
+
{ b.rows(), b.cols(), internal::scalar_constant_op<typename Rhs::Scalar>{ a } },
|
|
1852
|
+
static_cast<const Rhs&>(b),
|
|
1853
|
+
{ std::forward<Urng>(urng), ExtremeValueVGen<typename Rhs::Scalar>{} }
|
|
1854
|
+
};
|
|
1855
|
+
}
|
|
1856
|
+
|
|
1285
1857
|
template<typename Derived, typename Urng>
|
|
1286
1858
|
using ChiSquaredType = CwiseNullaryOp<internal::scalar_rng_adaptor<ChiSquaredGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
|
|
1287
1859
|
|