13 #ifndef EIGENRAND_CORE_H
14 #define EIGENRAND_CORE_H
17 #include <EigenRand/Dists/Basic.h>
18 #include <EigenRand/Dists/Discrete.h>
19 #include <EigenRand/Dists/NormalExp.h>
29 template<
typename Derived,
typename Urng>
30 using RandBitsType = CwiseNullaryOp<internal::scalar_randbits_op<typename Derived::Scalar, Urng>,
const Derived>;
42 template<
typename Derived,
typename Urng>
43 inline const RandBitsType<Derived, Urng>
47 rows, cols, internal::scalar_randbits_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
60 template<
typename Derived,
typename Urng>
61 inline const RandBitsType<Derived, Urng>
65 o.rows(), o.cols(), internal::scalar_randbits_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
69 template<
typename Derived,
typename Urng>
70 using UniformIntType = CwiseNullaryOp<internal::scalar_uniform_int_op<typename Derived::Scalar, Urng>,
const Derived>;
83 template<
typename Derived,
typename Urng>
84 inline const UniformIntType<Derived, Urng>
85 uniformInt(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar min,
typename Derived::Scalar max)
88 rows, cols, internal::scalar_uniform_int_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), min, max)
102 template<
typename Derived,
typename Urng>
103 inline const UniformIntType<Derived, Urng>
104 uniformIntLike(Derived& o, Urng&& urng,
typename Derived::Scalar min,
typename Derived::Scalar max)
107 o.rows(), o.cols(), internal::scalar_uniform_int_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), min, max)
111 template<
typename Derived,
typename Urng>
112 using BalancedType = CwiseNullaryOp<internal::scalar_balanced_op<typename Derived::Scalar, Urng>,
const Derived>;
124 template<
typename Derived,
typename Urng>
125 inline const BalancedType<Derived, Urng>
129 rows, cols, internal::scalar_balanced_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
142 template<
typename Derived,
typename Urng>
143 inline const BalancedType<Derived, Urng>
147 o.rows(), o.cols(), internal::scalar_balanced_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
151 template<
typename Derived,
typename Urng>
152 using UniformRealType = CwiseNullaryOp<internal::scalar_uniform_real_op<typename Derived::Scalar, Urng>,
const Derived>;
164 template<
typename Derived,
typename Urng>
165 inline const UniformRealType<Derived, Urng>
169 rows, cols, internal::scalar_uniform_real_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
182 template<
typename Derived,
typename Urng>
183 inline const UniformRealType<Derived, Urng>
187 o.rows(), o.cols(), internal::scalar_uniform_real_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
191 template<
typename Derived,
typename Urng>
192 using NormalType = CwiseNullaryOp<internal::scalar_norm_dist_op<typename Derived::Scalar, Urng>,
const Derived>;
204 template<
typename Derived,
typename Urng>
205 inline const NormalType<Derived, Urng>
206 normal(Index rows, Index cols, Urng&& urng)
209 rows, cols, internal::scalar_norm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
222 template<
typename Derived,
typename Urng>
223 inline const NormalType<Derived, Urng>
227 o.rows(), o.cols(), internal::scalar_norm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
231 template<
typename Derived,
typename Urng>
232 using Normal2Type = CwiseNullaryOp<internal::scalar_norm_dist2_op<typename Derived::Scalar, Urng>,
const Derived>;
246 template<
typename Derived,
typename Urng>
247 inline const Normal2Type<Derived, Urng>
248 normal(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar mean,
typename Derived::Scalar stdev = 1)
251 rows, cols, internal::scalar_norm_dist2_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
266 template<
typename Derived,
typename Urng>
267 inline const Normal2Type<Derived, Urng>
268 normalLike(Derived& o, Urng&& urng,
typename Derived::Scalar mean,
typename Derived::Scalar stdev = 1)
271 o.rows(), o.cols(), internal::scalar_norm_dist2_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
275 template<
typename Derived,
typename Urng>
276 using LognormalType = CwiseNullaryOp<internal::scalar_lognorm_dist_op<typename Derived::Scalar, Urng>,
const Derived>;
290 template<
typename Derived,
typename Urng>
291 inline const LognormalType<Derived, Urng>
292 lognormal(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar mean = 0,
typename Derived::Scalar stdev = 1)
295 rows, cols, internal::scalar_lognorm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
310 template<
typename Derived,
typename Urng>
311 inline const LognormalType<Derived, Urng>
312 lognormalLike(Derived& o, Urng&& urng,
typename Derived::Scalar mean = 0,
typename Derived::Scalar stdev = 1)
315 o.rows(), o.cols(), internal::scalar_lognorm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
319 template<
typename Derived,
typename Urng>
320 using ExponentialType = CwiseNullaryOp<internal::scalar_exp_dist_op<typename Derived::Scalar, Urng>,
const Derived>;
333 template<
typename Derived,
typename Urng>
334 inline const ExponentialType<Derived, Urng>
335 exponential(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar lambda = 1)
338 rows, cols, internal::scalar_exp_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), lambda)
352 template<
typename Derived,
typename Urng>
353 inline const ExponentialType<Derived, Urng>
357 o.rows(), o.cols(), internal::scalar_exp_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), lambda)
361 template<
typename Derived,
typename Urng>
362 using GammaType = CwiseNullaryOp<internal::scalar_gamma_dist_op<typename Derived::Scalar, Urng>,
const Derived>;
376 template<
typename Derived,
typename Urng>
377 inline const GammaType<Derived, Urng>
378 gamma(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar alpha = 1,
typename Derived::Scalar beta = 1)
381 rows, cols, internal::scalar_gamma_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), alpha, beta)
396 template<
typename Derived,
typename Urng>
397 inline const GammaType<Derived, Urng>
398 gammaLike(Derived& o, Urng&& urng,
typename Derived::Scalar alpha = 1,
typename Derived::Scalar beta = 1)
401 o.rows(), o.cols(), internal::scalar_gamma_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), alpha, beta)
405 template<
typename Derived,
typename Urng>
406 using WeibullType = CwiseNullaryOp<internal::scalar_weibull_dist_op<typename Derived::Scalar, Urng>,
const Derived>;
420 template<
typename Derived,
typename Urng>
421 inline const WeibullType<Derived, Urng>
422 weibull(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar a = 1,
typename Derived::Scalar b = 1)
425 rows, cols, internal::scalar_weibull_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
440 template<
typename Derived,
typename Urng>
441 inline const WeibullType<Derived, Urng>
442 weibullLike(Derived& o, Urng&& urng,
typename Derived::Scalar a = 1,
typename Derived::Scalar b = 1)
445 o.rows(), o.cols(), internal::scalar_weibull_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
449 template<
typename Derived,
typename Urng>
450 using ExtremeValueType = CwiseNullaryOp<internal::scalar_extreme_value_dist_op<typename Derived::Scalar, Urng>,
const Derived>;
465 template<
typename Derived,
typename Urng>
466 inline const ExtremeValueType<Derived, Urng>
467 extremeValue(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar a = 0,
typename Derived::Scalar b = 1)
470 rows, cols, internal::scalar_extreme_value_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
486 template<
typename Derived,
typename Urng>
487 inline const ExtremeValueType<Derived, Urng>
488 extremeValueLike(Derived& o, Urng&& urng,
typename Derived::Scalar a = 0,
typename Derived::Scalar b = 1)
491 o.rows(), o.cols(), internal::scalar_extreme_value_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
495 template<
typename Derived,
typename Urng>
496 using ChiSquaredType = CwiseNullaryOp<internal::scalar_chi_squared_dist_op<typename Derived::Scalar, Urng>,
const Derived>;
509 template<
typename Derived,
typename Urng>
510 inline const ChiSquaredType<Derived, Urng>
511 chiSquared(Index rows, Index cols, Urng&& urng,
typename Derived::Scalar n = 1)
514 rows, cols, internal::scalar_chi_squared_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), n)
528 template<
typename Derived,
typename Urng>
529 inline const ChiSquaredType<Derived, Urng>
533 o.rows(), o.cols(), internal::scalar_chi_squared_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), n)
537 template<
typename Derived,
typename Urng>
538 using DiscreteFType = CwiseNullaryOp<internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, float>,
const Derived>;
552 template<
typename Derived,
typename Urng,
typename RealIter>
553 inline const DiscreteFType<Derived, Urng>
554 discreteF(Index rows, Index cols, Urng&& urng, RealIter first, RealIter last)
557 rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), first, last)
572 template<
typename Derived,
typename Urng,
typename RealIter>
573 inline const DiscreteFType<Derived, Urng>
577 o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), first, last)
593 template<
typename Derived,
typename Urng,
typename Real>
594 inline const DiscreteFType<Derived, Urng>
595 discreteF(Index rows, Index cols, Urng&& urng,
const std::initializer_list<Real>& il)
598 rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), il.begin(), il.end())
613 template<
typename Derived,
typename Urng,
typename Real>
614 inline const DiscreteFType<Derived, Urng>
615 discreteFLike(Derived& o, Urng&& urng,
const std::initializer_list<Real>& il)
618 o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), il.begin(), il.end())
622 template<
typename Derived,
typename Urng>
623 using DiscreteDType = CwiseNullaryOp<internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>,
const Derived>;
637 template<
typename Derived,
typename Urng,
typename RealIter>
638 inline const DiscreteDType<Derived, Urng>
639 discreteD(Index rows, Index cols, Urng&& urng, RealIter first, RealIter last)
642 rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), first, last)
657 template<
typename Derived,
typename Urng,
typename RealIter>
658 inline const DiscreteDType<Derived, Urng>
662 o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), first, last)
678 template<
typename Derived,
typename Urng,
typename Real>
679 inline const DiscreteDType<Derived, Urng>
680 discreteD(Index rows, Index cols, Urng&& urng,
const std::initializer_list<Real>& il)
683 rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), il.begin(), il.end())
698 template<
typename Derived,
typename Urng,
typename Real>
699 inline const DiscreteDType<Derived, Urng>
700 discreteDLike(Derived& o, Urng&& urng,
const std::initializer_list<Real>& il)
703 o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), il.begin(), il.end())
707 template<
typename Derived,
typename Urng>
708 using DiscreteType = CwiseNullaryOp<internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>,
const Derived>;
722 template<
typename Derived,
typename Urng,
typename RealIter>
723 inline const DiscreteType<Derived, Urng>
724 discrete(Index rows, Index cols, Urng&& urng, RealIter first, RealIter last)
727 rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), first, last)
742 template<
typename Derived,
typename Urng,
typename RealIter>
743 inline const DiscreteType<Derived, Urng>
747 o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), first, last)
763 template<
typename Derived,
typename Urng,
typename Real>
764 inline const DiscreteType<Derived, Urng>
765 discrete(Index rows, Index cols, Urng&& urng,
const std::initializer_list<Real>& il)
768 rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), il.begin(), il.end())
783 template<
typename Derived,
typename Urng,
typename Real>
784 inline const DiscreteType<Derived, Urng>
785 discreteLike(Derived& o, Urng&& urng,
const std::initializer_list<Real>& il)
788 o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), il.begin(), il.end())