tomoto 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/ext/tomoto/ct.cpp +8 -4
  4. data/ext/tomoto/dmr.cpp +10 -4
  5. data/ext/tomoto/dt.cpp +13 -4
  6. data/ext/tomoto/extconf.rb +1 -1
  7. data/ext/tomoto/gdmr.cpp +14 -6
  8. data/ext/tomoto/hdp.cpp +9 -4
  9. data/ext/tomoto/hlda.cpp +9 -4
  10. data/ext/tomoto/hpa.cpp +9 -4
  11. data/ext/tomoto/lda.cpp +8 -4
  12. data/ext/tomoto/llda.cpp +8 -4
  13. data/ext/tomoto/mglda.cpp +11 -1
  14. data/ext/tomoto/pa.cpp +9 -4
  15. data/ext/tomoto/plda.cpp +8 -4
  16. data/ext/tomoto/slda.cpp +13 -5
  17. data/lib/tomoto/gdmr.rb +2 -2
  18. data/lib/tomoto/version.rb +1 -1
  19. data/vendor/EigenRand/EigenRand/Core.h +6 -1107
  20. data/vendor/EigenRand/EigenRand/Dists/Basic.h +490 -43
  21. data/vendor/EigenRand/EigenRand/Dists/Discrete.h +916 -285
  22. data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +85 -36
  23. data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +1038 -290
  24. data/vendor/EigenRand/EigenRand/EigenRand +2 -2
  25. data/vendor/EigenRand/EigenRand/Macro.h +4 -4
  26. data/vendor/EigenRand/EigenRand/MorePacketMath.h +54 -22
  27. data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +222 -0
  28. data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +492 -0
  29. data/vendor/EigenRand/EigenRand/PacketFilter.h +2 -2
  30. data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +2 -2
  31. data/vendor/EigenRand/EigenRand/RandUtils.h +65 -11
  32. data/vendor/EigenRand/EigenRand/doc.h +142 -25
  33. data/vendor/EigenRand/LICENSE +1 -1
  34. data/vendor/EigenRand/README.md +109 -24
  35. data/vendor/tomotopy/README.kr.rst +27 -6
  36. data/vendor/tomotopy/README.rst +29 -8
  37. data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +60 -12
  38. data/vendor/tomotopy/src/Labeling/FoRelevance.h +2 -2
  39. data/vendor/tomotopy/src/Labeling/Phraser.hpp +33 -21
  40. data/vendor/tomotopy/src/TopicModel/CT.h +8 -5
  41. data/vendor/tomotopy/src/TopicModel/CTModel.cpp +2 -6
  42. data/vendor/tomotopy/src/TopicModel/CTModel.hpp +29 -23
  43. data/vendor/tomotopy/src/TopicModel/DMR.h +33 -4
  44. data/vendor/tomotopy/src/TopicModel/DMRModel.cpp +2 -6
  45. data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +231 -57
  46. data/vendor/tomotopy/src/TopicModel/DT.h +24 -5
  47. data/vendor/tomotopy/src/TopicModel/DTModel.cpp +2 -8
  48. data/vendor/tomotopy/src/TopicModel/DTModel.hpp +41 -28
  49. data/vendor/tomotopy/src/TopicModel/GDMR.h +31 -5
  50. data/vendor/tomotopy/src/TopicModel/GDMRModel.cpp +2 -7
  51. data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +211 -104
  52. data/vendor/tomotopy/src/TopicModel/HDP.h +11 -2
  53. data/vendor/tomotopy/src/TopicModel/HDPModel.cpp +2 -6
  54. data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +52 -45
  55. data/vendor/tomotopy/src/TopicModel/HLDA.h +11 -2
  56. data/vendor/tomotopy/src/TopicModel/HLDAModel.cpp +2 -6
  57. data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +13 -16
  58. data/vendor/tomotopy/src/TopicModel/HPA.h +5 -2
  59. data/vendor/tomotopy/src/TopicModel/HPAModel.cpp +2 -6
  60. data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +51 -21
  61. data/vendor/tomotopy/src/TopicModel/LDA.h +9 -2
  62. data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +8 -8
  63. data/vendor/tomotopy/src/TopicModel/LDAModel.cpp +2 -6
  64. data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +70 -28
  65. data/vendor/tomotopy/src/TopicModel/LLDA.h +1 -2
  66. data/vendor/tomotopy/src/TopicModel/LLDAModel.cpp +2 -6
  67. data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +22 -12
  68. data/vendor/tomotopy/src/TopicModel/MGLDA.h +12 -3
  69. data/vendor/tomotopy/src/TopicModel/MGLDAModel.cpp +2 -10
  70. data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +42 -19
  71. data/vendor/tomotopy/src/TopicModel/PA.h +9 -4
  72. data/vendor/tomotopy/src/TopicModel/PAModel.cpp +2 -6
  73. data/vendor/tomotopy/src/TopicModel/PAModel.hpp +48 -25
  74. data/vendor/tomotopy/src/TopicModel/PLDA.h +13 -2
  75. data/vendor/tomotopy/src/TopicModel/PLDAModel.cpp +2 -6
  76. data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +27 -19
  77. data/vendor/tomotopy/src/TopicModel/PT.h +12 -5
  78. data/vendor/tomotopy/src/TopicModel/PTModel.cpp +2 -3
  79. data/vendor/tomotopy/src/TopicModel/PTModel.hpp +29 -14
  80. data/vendor/tomotopy/src/TopicModel/SLDA.h +18 -6
  81. data/vendor/tomotopy/src/TopicModel/SLDAModel.cpp +2 -10
  82. data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +93 -43
  83. data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +58 -23
  84. data/vendor/tomotopy/src/Utils/AliasMethod.hpp +6 -6
  85. data/vendor/tomotopy/src/Utils/Dictionary.h +11 -0
  86. data/vendor/tomotopy/src/Utils/SharedString.hpp +26 -1
  87. data/vendor/tomotopy/src/Utils/Trie.hpp +46 -21
  88. data/vendor/tomotopy/src/Utils/Utils.hpp +99 -14
  89. data/vendor/tomotopy/src/Utils/exception.h +1 -1
  90. data/vendor/tomotopy/src/Utils/math.h +5 -7
  91. data/vendor/tomotopy/src/Utils/serializer.hpp +329 -201
  92. data/vendor/tomotopy/src/Utils/text.hpp +8 -0
  93. data/vendor/tomotopy/src/Utils/tvector.hpp +49 -7
  94. metadata +9 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b1cb95a96851ccd3d499ed38c9da531ce48588cf44c37ccc92bbfdc9277e0962
4
- data.tar.gz: cadee081b1f0ea9cc37b75afd97e8ecebb32796cc335da2ff50e844c955a0e4a
3
+ metadata.gz: 1044b496120cf955a03d6dd184056c40572501a68043c3bd3d4cc17334caba3d
4
+ data.tar.gz: 7078dd4bdc562cae748ca89aa9b73d38d209d6a40a1e6d2acff0d8fba0c5a18b
5
5
  SHA512:
6
- metadata.gz: f5154bfb71c0b8891953b97c8edf37a7fb70fcb2ab09c3f51126e14262c729dcdc4b82d2727a8601131e090a05efcd1958851d77b5e8e95b922fc9b1f44cedf6
7
- data.tar.gz: f975f505493d41bc425e0d288762e97c83ffdb6c1812792bc2dca517c550f1508efef79a24bdde992d7acd3994d6566c27745b9bed806ea64dfa072d22c692a0
6
+ metadata.gz: ef9944cc3820397ef18bbca2e42d4a1a0d4b43dd283f3fac8e066478ecc78e74b4a2d32a6f3304203e22fad048ebdacc60637b7f51a42cf6fc73053613a3e77e
7
+ data.tar.gz: 8409a754f890f788b6bc33938420311917418cf62f7cfde572db307a85f4473835caa342583ee6e3a6d03f517d89f75714b468351fa50011dbd156a9547c4918
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.2.0 (2021-05-23)
2
+
3
+ - Updated tomoto to 0.12.0
4
+ - Dropped support for Ruby < 2.6
5
+
1
6
  ## 0.1.4 (2021-03-14)
2
7
 
3
8
  - Added `docs` method
data/ext/tomoto/ct.cpp CHANGED
@@ -8,11 +8,15 @@ void init_ct(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::ICTModel, tomoto::ILDAModel>(m, "CT")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, size_t seed) {
12
+ tomoto::CTArgs args;
13
+ args.k = k;
14
+ args.alpha = {alpha};
15
+ args.eta = eta;
16
+ if (seed >= 0) {
17
+ args.seed = seed;
14
18
  }
15
- return tomoto::ICTModel::create((tomoto::TermWeight)tw, k, alpha, eta, seed);
19
+ return tomoto::ICTModel::create((tomoto::TermWeight)tw, args);
16
20
  })
17
21
  .define_method(
18
22
  "_correlations",
data/ext/tomoto/dmr.cpp CHANGED
@@ -9,11 +9,17 @@ void init_dmr(Rice::Module& m) {
9
9
  Rice::define_class_under<tomoto::IDMRModel, tomoto::ILDAModel>(m, "DMR")
10
10
  .define_singleton_method(
11
11
  "_new",
12
- *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float sigma, tomoto::Float eta, tomoto::Float alpha_epsilon, int seed) {
13
- if (seed < 0) {
14
- seed = std::random_device{}();
12
+ *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float sigma, tomoto::Float eta, tomoto::Float alpha_epsilon, size_t seed) {
13
+ tomoto::DMRArgs args;
14
+ args.k = k;
15
+ args.alpha = {alpha};
16
+ args.sigma = sigma;
17
+ args.eta = eta;
18
+ args.alphaEps = alpha_epsilon;
19
+ if (seed >= 0) {
20
+ args.seed = seed;
15
21
  }
16
- return tomoto::IDMRModel::create((tomoto::TermWeight)tw, k, alpha, sigma, eta, alpha_epsilon, seed);
22
+ return tomoto::IDMRModel::create((tomoto::TermWeight)tw, args);
17
23
  })
18
24
  .define_method(
19
25
  "_add_doc",
data/ext/tomoto/dt.cpp CHANGED
@@ -10,11 +10,20 @@ void init_dt(Rice::Module& m) {
10
10
  "_new",
11
11
  *[](size_t tw, size_t k, size_t t, tomoto::Float alphaVar, tomoto::Float etaVar, tomoto::Float phiVar, tomoto::Float shapeA, tomoto::Float shapeB, tomoto::Float shapeC) {
12
12
  // Rice only supports 10 arguments
13
- int seed = -1;
14
- if (seed < 0) {
15
- seed = std::random_device{}();
13
+ size_t seed = -1;
14
+ tomoto::DTArgs args;
15
+ args.k = k;
16
+ args.t = t;
17
+ args.alpha = {alphaVar};
18
+ args.eta = etaVar;
19
+ args.phi = phiVar;
20
+ args.shapeA = shapeA;
21
+ args.shapeB = shapeB;
22
+ args.shapeC = shapeC;
23
+ if (seed >= 0) {
24
+ args.seed = seed;
16
25
  }
17
- return tomoto::IDTModel::create((tomoto::TermWeight)tw, k, t, alphaVar, etaVar, phiVar, shapeA, shapeB, shapeC, 0, seed);
26
+ return tomoto::IDTModel::create((tomoto::TermWeight)tw, args);
18
27
  })
19
28
  .define_method(
20
29
  "_add_doc",
@@ -2,7 +2,7 @@ require "mkmf-rice"
2
2
 
3
3
  abort "Missing stdc++" unless have_library("stdc++")
4
4
 
5
- $CXXFLAGS += " -std=c++11 -DEIGEN_MPL2_ONLY"
5
+ $CXXFLAGS += " -std=c++14 -DEIGEN_MPL2_ONLY"
6
6
 
7
7
  $CXXFLAGS += " -march=native"
8
8
 
data/ext/tomoto/gdmr.cpp CHANGED
@@ -8,17 +8,25 @@ void init_gdmr(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::IGDMRModel, tomoto::IDMRModel>(m, "GDMR")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t k, std::vector<uint64_t> degrees, tomoto::Float alpha, tomoto::Float sigma, tomoto::Float sigma0, tomoto::Float eta, tomoto::Float alpha_epsilon, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t k, std::vector<uint64_t> degrees, tomoto::Float alpha, tomoto::Float sigma, tomoto::Float sigma0, tomoto::Float eta, tomoto::Float alpha_epsilon, size_t seed) {
12
+ tomoto::GDMRArgs args;
13
+ args.k = k;
14
+ args.degrees = degrees;
15
+ args.alpha = {alpha};
16
+ args.sigma = sigma;
17
+ args.sigma0 = sigma0;
18
+ args.eta = eta;
19
+ args.alphaEps = alpha_epsilon;
20
+ if (seed >= 0) {
21
+ args.seed = seed;
14
22
  }
15
- return tomoto::IGDMRModel::create((tomoto::TermWeight)tw, k, degrees, alpha, sigma, sigma0, eta, alpha_epsilon, seed);
23
+ return tomoto::IGDMRModel::create((tomoto::TermWeight)tw, args);
16
24
  })
17
25
  .define_method(
18
26
  "_add_doc",
19
- *[](tomoto::IGDMRModel& self, std::vector<std::string> words, std::vector<tomoto::Float> metadata) {
27
+ *[](tomoto::IGDMRModel& self, std::vector<std::string> words, std::vector<tomoto::Float> numeric_metadata) {
20
28
  auto doc = buildDoc(words);
21
- doc.misc["metadata"] = metadata;
29
+ doc.misc["numeric_metadata"] = numeric_metadata;
22
30
  return self.addDoc(doc);
23
31
  })
24
32
  .define_method(
data/ext/tomoto/hdp.cpp CHANGED
@@ -8,11 +8,16 @@ void init_hdp(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::IHDPModel, tomoto::ILDAModel>(m, "HDP")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, tomoto::Float gamma, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, tomoto::Float gamma, size_t seed) {
12
+ tomoto::HDPArgs args;
13
+ args.k = k;
14
+ args.alpha = {alpha};
15
+ args.eta = eta;
16
+ args.gamma = gamma;
17
+ if (seed >= 0) {
18
+ args.seed = seed;
14
19
  }
15
- return tomoto::IHDPModel::create((tomoto::TermWeight)tw, k, alpha, eta, gamma, seed);
20
+ return tomoto::IHDPModel::create((tomoto::TermWeight)tw, args);
16
21
  })
17
22
  .define_method(
18
23
  "alpha",
data/ext/tomoto/hlda.cpp CHANGED
@@ -8,11 +8,16 @@ void init_hlda(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::IHLDAModel, tomoto::ILDAModel>(m, "HLDA")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t levelDepth, tomoto::Float alpha, tomoto::Float eta, tomoto::Float gamma, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t levelDepth, tomoto::Float alpha, tomoto::Float eta, tomoto::Float gamma, size_t seed) {
12
+ tomoto::HLDAArgs args;
13
+ args.k = levelDepth;
14
+ args.alpha = {alpha};
15
+ args.eta = eta;
16
+ args.gamma = gamma;
17
+ if (seed >= 0) {
18
+ args.seed = seed;
14
19
  }
15
- return tomoto::IHLDAModel::create((tomoto::TermWeight)tw, levelDepth, alpha, eta, gamma, seed);
20
+ return tomoto::IHLDAModel::create((tomoto::TermWeight)tw, args);
16
21
  })
17
22
  .define_method(
18
23
  "alpha",
data/ext/tomoto/hpa.cpp CHANGED
@@ -8,11 +8,16 @@ void init_hpa(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::IHPAModel, tomoto::IPAModel>(m, "HPA")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t k1, size_t k2, tomoto::Float alpha, tomoto::Float eta, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t k1, size_t k2, tomoto::Float alpha, tomoto::Float eta, size_t seed) {
12
+ tomoto::HPAArgs args;
13
+ args.k = k1;
14
+ args.k2 = k2;
15
+ args.alpha = {alpha};
16
+ args.eta = eta;
17
+ if (seed >= 0) {
18
+ args.seed = seed;
14
19
  }
15
- return tomoto::IHPAModel::create((tomoto::TermWeight)tw, false, k1, k2, alpha, eta, seed);
20
+ return tomoto::IHPAModel::create((tomoto::TermWeight)tw, false, args);
16
21
  })
17
22
  .define_method(
18
23
  "alpha",
data/ext/tomoto/lda.cpp CHANGED
@@ -34,11 +34,15 @@ void init_lda(Rice::Module& m) {
34
34
  Rice::define_class_under<tomoto::ILDAModel>(m, "LDA")
35
35
  .define_singleton_method(
36
36
  "_new",
37
- *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, int seed) {
38
- if (seed < 0) {
39
- seed = std::random_device{}();
37
+ *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, size_t seed) {
38
+ tomoto::LDAArgs args;
39
+ args.k = k;
40
+ args.alpha = {alpha};
41
+ args.eta = eta;
42
+ if (seed >= 0) {
43
+ args.seed = seed;
40
44
  }
41
- return tomoto::ILDAModel::create((tomoto::TermWeight)tw, k, alpha, eta, seed);
45
+ return tomoto::ILDAModel::create((tomoto::TermWeight)tw, args);
42
46
  })
43
47
  .define_method(
44
48
  "_add_doc",
data/ext/tomoto/llda.cpp CHANGED
@@ -8,11 +8,15 @@ void init_llda(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::ILLDAModel, tomoto::ILDAModel>(m, "LLDA")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t k, tomoto::Float alpha, tomoto::Float eta, size_t seed) {
12
+ tomoto::LDAArgs args;
13
+ args.k = k;
14
+ args.alpha = {alpha};
15
+ args.eta = eta;
16
+ if (seed >= 0) {
17
+ args.seed = seed;
14
18
  }
15
- return tomoto::ILLDAModel::create((tomoto::TermWeight)tw, k, alpha, eta, seed);
19
+ return tomoto::ILLDAModel::create((tomoto::TermWeight)tw, args);
16
20
  })
17
21
  .define_method(
18
22
  "_add_doc",
data/ext/tomoto/mglda.cpp CHANGED
@@ -9,7 +9,17 @@ void init_mglda(Rice::Module& m) {
9
9
  .define_singleton_method(
10
10
  "_new",
11
11
  *[](size_t tw, size_t k_g, size_t k_l, size_t t, tomoto::Float alpha_g, tomoto::Float alpha_l, tomoto::Float alpha_mg, tomoto::Float alpha_ml, tomoto::Float eta_g) {
12
- return tomoto::IMGLDAModel::create((tomoto::TermWeight)tw, k_g, k_l, t, alpha_g, alpha_l, alpha_mg, alpha_ml, eta_g);
12
+ tomoto::MGLDAArgs args;
13
+ args.k = k_g;
14
+ args.kL = k_l;
15
+ args.t = t;
16
+ args.alpha = {alpha_g};
17
+ args.alphaL = {alpha_l};
18
+ args.alphaMG = alpha_mg;
19
+ args.alphaML = alpha_ml;
20
+ args.eta = eta_g;
21
+ // TODO more args
22
+ return tomoto::IMGLDAModel::create((tomoto::TermWeight)tw, args);
13
23
  })
14
24
  .define_method(
15
25
  "_add_doc",
data/ext/tomoto/pa.cpp CHANGED
@@ -8,11 +8,16 @@ void init_pa(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::IPAModel, tomoto::ILDAModel>(m, "PA")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t k1, size_t k2, tomoto::Float alpha, tomoto::Float eta, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t k1, size_t k2, tomoto::Float alpha, tomoto::Float eta, size_t seed) {
12
+ tomoto::PAArgs args;
13
+ args.k = k1;
14
+ args.k2 = k2;
15
+ args.alpha = {alpha};
16
+ args.eta = eta;
17
+ if (seed >= 0) {
18
+ args.seed = seed;
14
19
  }
15
- return tomoto::IPAModel::create((tomoto::TermWeight)tw, k1, k2, alpha, eta, seed);
20
+ return tomoto::IPAModel::create((tomoto::TermWeight)tw, args);
16
21
  })
17
22
  .define_method(
18
23
  "k1",
data/ext/tomoto/plda.cpp CHANGED
@@ -8,11 +8,15 @@ void init_plda(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::IPLDAModel, tomoto::ILLDAModel>(m, "PLDA")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t latent_topics, tomoto::Float alpha, tomoto::Float eta, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
11
+ *[](size_t tw, size_t latent_topics, tomoto::Float alpha, tomoto::Float eta, size_t seed) {
12
+ tomoto::PLDAArgs args;
13
+ args.numLatentTopics = latent_topics;
14
+ args.alpha = {alpha};
15
+ args.eta = eta;
16
+ if (seed >= 0) {
17
+ args.seed = seed;
14
18
  }
15
- return tomoto::IPLDAModel::create((tomoto::TermWeight)tw, latent_topics, 1, alpha, eta, seed);
19
+ return tomoto::IPLDAModel::create((tomoto::TermWeight)tw, args);
16
20
  })
17
21
  .define_method(
18
22
  "_add_doc",
data/ext/tomoto/slda.cpp CHANGED
@@ -8,16 +8,24 @@ void init_slda(Rice::Module& m) {
8
8
  Rice::define_class_under<tomoto::ISLDAModel, tomoto::ILDAModel>(m, "SLDA")
9
9
  .define_singleton_method(
10
10
  "_new",
11
- *[](size_t tw, size_t k, Array rb_vars, tomoto::Float alpha, tomoto::Float eta, std::vector<tomoto::Float> mu, std::vector<tomoto::Float> nu_sq, std::vector<tomoto::Float> glm_param, int seed) {
12
- if (seed < 0) {
13
- seed = std::random_device{}();
14
- }
11
+ *[](size_t tw, size_t k, Array rb_vars, tomoto::Float alpha, tomoto::Float eta, std::vector<tomoto::Float> mu, std::vector<tomoto::Float> nu_sq, std::vector<tomoto::Float> glm_param, size_t seed) {
15
12
  std::vector<tomoto::ISLDAModel::GLM> vars;
16
13
  vars.reserve(rb_vars.size());
17
14
  for (auto const& v : rb_vars) {
18
15
  vars.push_back((tomoto::ISLDAModel::GLM) from_ruby<int>(v));
19
16
  }
20
- return tomoto::ISLDAModel::create((tomoto::TermWeight)tw, k, vars, alpha, eta, mu, nu_sq, glm_param, seed);
17
+ tomoto::SLDAArgs args;
18
+ args.k = k;
19
+ args.vars = vars;
20
+ args.alpha = {alpha};
21
+ args.eta = eta;
22
+ args.mu = mu;
23
+ args.nuSq = nu_sq;
24
+ args.glmParam = glm_param;
25
+ if (seed >= 0) {
26
+ args.seed = seed;
27
+ }
28
+ return tomoto::ISLDAModel::create((tomoto::TermWeight)tw, args);
21
29
  })
22
30
  .define_method(
23
31
  "_add_doc",
data/lib/tomoto/gdmr.rb CHANGED
@@ -8,8 +8,8 @@ module Tomoto
8
8
  init_params(model, binding)
9
9
  end
10
10
 
11
- def add_doc(doc, metadata: [])
12
- _add_doc(prepare_doc(doc), metadata)
11
+ def add_doc(doc, numeric_metadata: [])
12
+ _add_doc(prepare_doc(doc), numeric_metadata)
13
13
  end
14
14
  end
15
15
  end
@@ -1,3 +1,3 @@
1
1
  module Tomoto
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -2,8 +2,8 @@
2
2
  * @file Core.h
3
3
  * @author bab2min (bab2min@gmail.com)
4
4
  * @brief
5
- * @version 0.2.0
6
- * @date 2020-06-22
5
+ * @version 0.3.0
6
+ * @date 2020-10-07
7
7
  *
8
8
  * @copyright Copyright (c) 2020
9
9
  *
@@ -14,11 +14,15 @@
14
14
  #define EIGENRAND_CORE_H
15
15
 
16
16
  #include <EigenRand/RandUtils.h>
17
+
17
18
  #include <EigenRand/Dists/Basic.h>
18
19
  #include <EigenRand/Dists/Discrete.h>
19
20
  #include <EigenRand/Dists/NormalExp.h>
20
21
  #include <EigenRand/Dists/GammaPoisson.h>
21
22
 
23
+ #include <EigenRand/MvDists/MvNormal.h>
24
+ #include <EigenRand/MvDists/Multinomial.h>
25
+
22
26
  namespace Eigen
23
27
  {
24
28
  /**
@@ -27,1112 +31,7 @@ namespace Eigen
27
31
  */
28
32
  namespace Rand
29
33
  {
30
- template<typename Derived, typename Urng>
31
- using RandBitsType = CwiseNullaryOp<internal::scalar_randbits_op<typename Derived::Scalar, Urng>, const Derived>;
32
-
33
- /**
34
- * @brief generates integers with random bits
35
- *
36
- * @tparam Derived
37
- * @tparam Urng
38
- * @param rows the number of rows being generated
39
- * @param cols the number of columns being generated
40
- * @param urng c++11-style random number generator
41
- * @return a random matrix expression with a shape (`rows`, `cols`)
42
- */
43
- template<typename Derived, typename Urng>
44
- inline const RandBitsType<Derived, Urng>
45
- randBits(Index rows, Index cols, Urng&& urng)
46
- {
47
- return {
48
- rows, cols, internal::scalar_randbits_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
49
- };
50
- }
51
-
52
- /**
53
- * @brief generates integers with random bits
54
- *
55
- * @tparam Derived
56
- * @tparam Urng
57
- * @param o an instance of any type of Eigen::DenseBase
58
- * @param urng c++11-style random number generator
59
- * @return a random matrix expression of the same shape as `o`
60
- */
61
- template<typename Derived, typename Urng>
62
- inline const RandBitsType<Derived, Urng>
63
- randBitsLike(Derived& o, Urng&& urng)
64
- {
65
- return {
66
- o.rows(), o.cols(), internal::scalar_randbits_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
67
- };
68
- }
69
-
70
- template<typename Derived, typename Urng>
71
- using UniformIntType = CwiseNullaryOp<internal::scalar_uniform_int_op<typename Derived::Scalar, Urng>, const Derived>;
72
-
73
- /**
74
- * @brief generates integers with a given range `[min, max]`
75
- *
76
- * @tparam Derived a type of Eigen::DenseBase
77
- * @tparam Urng
78
- * @param rows the number of rows being generated
79
- * @param cols the number of columns being generated
80
- * @param urng c++11-style random number generator
81
- * @param min, max the range of integers being generated
82
- * @return a random matrix expression with a shape (`rows`, `cols`)
83
- */
84
- template<typename Derived, typename Urng>
85
- inline const UniformIntType<Derived, Urng>
86
- uniformInt(Index rows, Index cols, Urng&& urng, typename Derived::Scalar min, typename Derived::Scalar max)
87
- {
88
- return {
89
- rows, cols, internal::scalar_uniform_int_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), min, max)
90
- };
91
- }
92
-
93
- /**
94
- * @brief generates integers with a given range `[min, max]`
95
- *
96
- * @tparam Derived
97
- * @tparam Urng
98
- * @param o an instance of any type of Eigen::DenseBase
99
- * @param urng c++11-style random number generator
100
- * @param min, max the range of integers being generated
101
- * @return a random matrix expression of the same shape as `o`
102
- */
103
- template<typename Derived, typename Urng>
104
- inline const UniformIntType<Derived, Urng>
105
- uniformIntLike(Derived& o, Urng&& urng, typename Derived::Scalar min, typename Derived::Scalar max)
106
- {
107
- return {
108
- o.rows(), o.cols(), internal::scalar_uniform_int_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), min, max)
109
- };
110
- }
111
-
112
- template<typename Derived, typename Urng>
113
- using BalancedType = CwiseNullaryOp<internal::scalar_balanced_op<typename Derived::Scalar, Urng>, const Derived>;
114
-
115
- /**
116
- * @brief generates reals in a range `[-1, 1]`
117
- *
118
- * @tparam Derived a type of Eigen::DenseBase
119
- * @tparam Urng
120
- * @param rows the number of rows being generated
121
- * @param cols the number of columns being generated
122
- * @param urng c++11-style random number generator
123
- * @return a random matrix expression with a shape (`rows`, `cols`)
124
- */
125
- template<typename Derived, typename Urng>
126
- inline const BalancedType<Derived, Urng>
127
- balanced(Index rows, Index cols, Urng&& urng)
128
- {
129
- return {
130
- rows, cols, internal::scalar_balanced_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
131
- };
132
- }
133
-
134
- /**
135
- * @brief generates reals in a range `[-1, 1]`
136
- *
137
- * @tparam Derived
138
- * @tparam Urng
139
- * @param o an instance of any type of Eigen::DenseBase
140
- * @param urng c++11-style random number generator
141
- * @return a random matrix expression of the same shape as `o`
142
- */
143
- template<typename Derived, typename Urng>
144
- inline const BalancedType<Derived, Urng>
145
- balancedLike(const Derived& o, Urng&& urng)
146
- {
147
- return {
148
- o.rows(), o.cols(), internal::scalar_balanced_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
149
- };
150
- }
151
-
152
- template<typename Derived, typename Urng>
153
- using UniformRealType = CwiseNullaryOp<internal::scalar_uniform_real_op<typename Derived::Scalar, Urng>, const Derived>;
154
-
155
- /**
156
- * @brief generates reals in a range `[0, 1)`
157
- *
158
- * @tparam Derived a type of Eigen::DenseBase
159
- * @tparam Urng
160
- * @param rows the number of rows being generated
161
- * @param cols the number of columns being generated
162
- * @param urng c++11-style random number generator
163
- * @return a random matrix expression with a shape (`rows`, `cols`)
164
- */
165
- template<typename Derived, typename Urng>
166
- inline const UniformRealType<Derived, Urng>
167
- uniformReal(Index rows, Index cols, Urng&& urng)
168
- {
169
- return {
170
- rows, cols, internal::scalar_uniform_real_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
171
- };
172
- }
173
-
174
- /**
175
- * @brief generates reals in a range `[0, 1)`
176
- *
177
- * @tparam Derived
178
- * @tparam Urng
179
- * @param o an instance of any type of Eigen::DenseBase
180
- * @param urng c++11-style random number generator
181
- * @return a random matrix expression of the same shape as `o`
182
- */
183
- template<typename Derived, typename Urng>
184
- inline const UniformRealType<Derived, Urng>
185
- uniformRealLike(Derived& o, Urng&& urng)
186
- {
187
- return {
188
- o.rows(), o.cols(), internal::scalar_uniform_real_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
189
- };
190
- }
191
-
192
- template<typename Derived, typename Urng>
193
- using NormalType = CwiseNullaryOp<internal::scalar_norm_dist_op<typename Derived::Scalar, Urng>, const Derived>;
194
-
195
- /**
196
- * @brief generates reals on a standard normal distribution (`mean` = 0, `stdev`=1)
197
- *
198
- * @tparam Derived a type of Eigen::DenseBase
199
- * @tparam Urng
200
- * @param rows the number of rows being generated
201
- * @param cols the number of columns being generated
202
- * @param urng c++11-style random number generator
203
- * @return a random matrix expression with a shape (`rows`, `cols`)
204
- */
205
- template<typename Derived, typename Urng>
206
- inline const NormalType<Derived, Urng>
207
- normal(Index rows, Index cols, Urng&& urng)
208
- {
209
- return {
210
- rows, cols, internal::scalar_norm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
211
- };
212
- }
213
-
214
- /**
215
- * @brief generates reals on a standard normal distribution (`mean` = 0, `stdev`=1)
216
- *
217
- * @tparam Derived
218
- * @tparam Urng
219
- * @param o an instance of any type of Eigen::DenseBase
220
- * @param urng c++11-style random number generator
221
- * @return a random matrix expression of the same shape as `o`
222
- */
223
- template<typename Derived, typename Urng>
224
- inline const NormalType<Derived, Urng>
225
- normalLike(Derived& o, Urng&& urng)
226
- {
227
- return {
228
- o.rows(), o.cols(), internal::scalar_norm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng))
229
- };
230
- }
231
-
232
- template<typename Derived, typename Urng>
233
- using Normal2Type = CwiseNullaryOp<internal::scalar_norm_dist2_op<typename Derived::Scalar, Urng>, const Derived>;
234
-
235
- /**
236
- * @brief generates reals on a normal distribution with arbitrary `mean` and `stdev`.
237
- *
238
- * @tparam Derived
239
- * @tparam Urng
240
- * @param rows the number of rows being generated
241
- * @param cols the number of columns being generated
242
- * @param urng c++11-style random number generator
243
- * @param mean a mean value of the distribution
244
- * @param stdev a standard deviation value of the distribution
245
- * @return a random matrix expression with a shape (`rows`, `cols`)
246
- */
247
- template<typename Derived, typename Urng>
248
- inline const Normal2Type<Derived, Urng>
249
- normal(Index rows, Index cols, Urng&& urng, typename Derived::Scalar mean, typename Derived::Scalar stdev = 1)
250
- {
251
- return {
252
- rows, cols, internal::scalar_norm_dist2_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
253
- };
254
- }
255
-
256
- /**
257
- * @brief generates reals on a normal distribution with arbitrary `mean` and `stdev`.
258
- *
259
- * @tparam Derived
260
- * @tparam Urng
261
- * @param o an instance of any type of Eigen::DenseBase
262
- * @param urng c++11-style random number generator
263
- * @param mean a mean value of the distribution
264
- * @param stdev a standard deviation value of the distribution
265
- * @return a random matrix expression of the same shape as `o`
266
- */
267
- template<typename Derived, typename Urng>
268
- inline const Normal2Type<Derived, Urng>
269
- normalLike(Derived& o, Urng&& urng, typename Derived::Scalar mean, typename Derived::Scalar stdev = 1)
270
- {
271
- return {
272
- o.rows(), o.cols(), internal::scalar_norm_dist2_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
273
- };
274
- }
275
-
276
- template<typename Derived, typename Urng>
277
- using LognormalType = CwiseNullaryOp<internal::scalar_lognorm_dist_op<typename Derived::Scalar, Urng>, const Derived>;
278
-
279
- /**
280
- * @brief generates reals on a lognormal distribution with arbitrary `mean` and `stdev`.
281
- *
282
- * @tparam Derived
283
- * @tparam Urng
284
- * @param rows the number of rows being generated
285
- * @param cols the number of columns being generated
286
- * @param urng c++11-style random number generator
287
- * @param mean a mean value of the distribution
288
- * @param stdev a standard deviation value of the distribution
289
- * @return a random matrix expression with a shape (`rows`, `cols`)
290
- */
291
- template<typename Derived, typename Urng>
292
- inline const LognormalType<Derived, Urng>
293
- lognormal(Index rows, Index cols, Urng&& urng, typename Derived::Scalar mean = 0, typename Derived::Scalar stdev = 1)
294
- {
295
- return {
296
- rows, cols, internal::scalar_lognorm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
297
- };
298
- }
299
-
300
- /**
301
- * @brief generates reals on a lognormal distribution with arbitrary `mean` and `stdev`.
302
- *
303
- * @tparam Derived
304
- * @tparam Urng
305
- * @param o an instance of any type of Eigen::DenseBase
306
- * @param urng c++11-style random number generator
307
- * @param mean a mean value of the distribution
308
- * @param stdev a standard deviation value of the distribution
309
- * @return a random matrix expression of the same shape as `o`
310
- */
311
- template<typename Derived, typename Urng>
312
- inline const LognormalType<Derived, Urng>
313
- lognormalLike(Derived& o, Urng&& urng, typename Derived::Scalar mean = 0, typename Derived::Scalar stdev = 1)
314
- {
315
- return {
316
- o.rows(), o.cols(), internal::scalar_lognorm_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean, stdev)
317
- };
318
- }
319
-
320
- template<typename Derived, typename Urng>
321
- using StudentTType = CwiseNullaryOp<internal::scalar_student_t_dist_op<typename Derived::Scalar, Urng>, const Derived>;
322
-
323
- /**
324
- * @brief generates reals on the Student's t distribution with arbirtrary degress of freedom.
325
- *
326
- * @tparam Derived a type of Eigen::DenseBase
327
- * @tparam Urng
328
- * @param rows the number of rows being generated
329
- * @param cols the number of columns being generated
330
- * @param urng c++11-style random number generator
331
- * @param n degrees of freedom
332
- * @return a random matrix expression with a shape (`rows`, `cols`)
333
- */
334
- template<typename Derived, typename Urng>
335
- inline const StudentTType<Derived, Urng>
336
- studentT(Index rows, Index cols, Urng&& urng, typename Derived::Scalar n = 1)
337
- {
338
- return {
339
- rows, cols, internal::scalar_student_t_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), n)
340
- };
341
- }
342
-
343
- /**
344
- * @brief generates reals on the Student's t distribution with arbirtrary degress of freedom.
345
- *
346
- * @tparam Derived
347
- * @tparam Urng
348
- * @param o an instance of any type of Eigen::DenseBase
349
- * @param urng c++11-style random number generator
350
- * @param n degrees of freedom
351
- * @return a random matrix expression of the same shape as `o`
352
- */
353
- template<typename Derived, typename Urng>
354
- inline const StudentTType<Derived, Urng>
355
- studentTLike(Derived& o, Urng&& urng, typename Derived::Scalar n = 1)
356
- {
357
- return {
358
- o.rows(), o.cols(), internal::scalar_student_t_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), n)
359
- };
360
- }
361
-
362
- template<typename Derived, typename Urng>
363
- using ExponentialType = CwiseNullaryOp<internal::scalar_exp_dist_op<typename Derived::Scalar, Urng>, const Derived>;
364
-
365
- /**
366
- * @brief generates reals on an exponential distribution with arbitrary scale parameter.
367
- *
368
- * @tparam Derived
369
- * @tparam Urng
370
- * @param rows the number of rows being generated
371
- * @param cols the number of columns being generated
372
- * @param urng c++11-style random number generator
373
- * @param lambda a scale parameter of the distribution
374
- * @return a random matrix expression with a shape (`rows`, `cols`)
375
- */
376
- template<typename Derived, typename Urng>
377
- inline const ExponentialType<Derived, Urng>
378
- exponential(Index rows, Index cols, Urng&& urng, typename Derived::Scalar lambda = 1)
379
- {
380
- return {
381
- rows, cols, internal::scalar_exp_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), lambda)
382
- };
383
- }
384
-
385
- /**
386
- * @brief generates reals on an exponential distribution with arbitrary scale parameter.
387
- *
388
- * @tparam Derived
389
- * @tparam Urng
390
- * @param o an instance of any type of Eigen::DenseBase
391
- * @param urng c++11-style random number generator
392
- * @param lambda a scale parameter of the distribution
393
- * @return a random matrix expression of the same shape as `o`
394
- */
395
- template<typename Derived, typename Urng>
396
- inline const ExponentialType<Derived, Urng>
397
- exponentialLike(Derived& o, Urng&& urng, typename Derived::Scalar lambda = 1)
398
- {
399
- return {
400
- o.rows(), o.cols(), internal::scalar_exp_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), lambda)
401
- };
402
- }
403
-
404
- template<typename Derived, typename Urng>
405
- using GammaType = CwiseNullaryOp<internal::scalar_gamma_dist_op<typename Derived::Scalar, Urng>, const Derived>;
406
-
407
- /**
408
- * @brief generates reals on a gamma distribution with arbitrary shape and scale parameter.
409
- *
410
- * @tparam Derived
411
- * @tparam Urng
412
- * @param rows the number of rows being generated
413
- * @param cols the number of columns being generated
414
- * @param urng c++11-style random number generator
415
- * @param alpha a shape parameter of the distribution
416
- * @param beta a scale parameter of the distribution
417
- * @return a random matrix expression with a shape (`rows`, `cols`)
418
- */
419
- template<typename Derived, typename Urng>
420
- inline const GammaType<Derived, Urng>
421
- gamma(Index rows, Index cols, Urng&& urng, typename Derived::Scalar alpha = 1, typename Derived::Scalar beta = 1)
422
- {
423
- return {
424
- rows, cols, internal::scalar_gamma_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), alpha, beta)
425
- };
426
- }
427
-
428
- /**
429
- * @brief generates reals on a gamma distribution with arbitrary shape and scale parameter.
430
- *
431
- * @tparam Derived
432
- * @tparam Urng
433
- * @param o an instance of any type of Eigen::DenseBase
434
- * @param urng c++11-style random number generator
435
- * @param alpha a shape parameter of the distribution
436
- * @param beta a scale parameter of the distribution
437
- * @return a random matrix expression of the same shape as `o`
438
- */
439
- template<typename Derived, typename Urng>
440
- inline const GammaType<Derived, Urng>
441
- gammaLike(Derived& o, Urng&& urng, typename Derived::Scalar alpha = 1, typename Derived::Scalar beta = 1)
442
- {
443
- return {
444
- o.rows(), o.cols(), internal::scalar_gamma_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), alpha, beta)
445
- };
446
- }
447
-
448
- template<typename Derived, typename Urng>
449
- using WeibullType = CwiseNullaryOp<internal::scalar_weibull_dist_op<typename Derived::Scalar, Urng>, const Derived>;
450
-
451
- /**
452
- * @brief generates reals on a Weibull distribution with arbitrary shape and scale parameter.
453
- *
454
- * @tparam Derived
455
- * @tparam Urng
456
- * @param rows the number of rows being generated
457
- * @param cols the number of columns being generated
458
- * @param urng c++11-style random number generator
459
- * @param a a shape parameter of the distribution
460
- * @param b a scale parameter of the distribution
461
- * @return a random matrix expression with a shape (`rows`, `cols`)
462
- */
463
- template<typename Derived, typename Urng>
464
- inline const WeibullType<Derived, Urng>
465
- weibull(Index rows, Index cols, Urng&& urng, typename Derived::Scalar a = 1, typename Derived::Scalar b = 1)
466
- {
467
- return {
468
- rows, cols, internal::scalar_weibull_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
469
- };
470
- }
471
-
472
- /**
473
- * @brief generates reals on a Weibull distribution with arbitrary shape and scale parameter.
474
- *
475
- * @tparam Derived
476
- * @tparam Urng
477
- * @param o an instance of any type of Eigen::DenseBase
478
- * @param urng c++11-style random number generator
479
- * @param a a shape parameter of the distribution
480
- * @param b a scale parameter of the distribution
481
- * @return a random matrix expression of the same shape as `o`
482
- */
483
- template<typename Derived, typename Urng>
484
- inline const WeibullType<Derived, Urng>
485
- weibullLike(Derived& o, Urng&& urng, typename Derived::Scalar a = 1, typename Derived::Scalar b = 1)
486
- {
487
- return {
488
- o.rows(), o.cols(), internal::scalar_weibull_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
489
- };
490
- }
491
-
492
- template<typename Derived, typename Urng>
493
- using ExtremeValueType = CwiseNullaryOp<internal::scalar_extreme_value_dist_op<typename Derived::Scalar, Urng>, const Derived>;
494
-
495
- /**
496
- * @brief generates reals on an extreme value distribution
497
- * (a.k.a Gumbel Type I, log-Weibull, Fisher-Tippett Type I) with arbitrary shape and scale parameter.
498
- *
499
- * @tparam Derived
500
- * @tparam Urng
501
- * @param rows the number of rows being generated
502
- * @param cols the number of columns being generated
503
- * @param urng c++11-style random number generator
504
- * @param a a location parameter of the distribution
505
- * @param b a scale parameter of the distribution
506
- * @return a random matrix expression with a shape (`rows`, `cols`)
507
- */
508
- template<typename Derived, typename Urng>
509
- inline const ExtremeValueType<Derived, Urng>
510
- extremeValue(Index rows, Index cols, Urng&& urng, typename Derived::Scalar a = 0, typename Derived::Scalar b = 1)
511
- {
512
- return {
513
- rows, cols, internal::scalar_extreme_value_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
514
- };
515
- }
516
-
517
- /**
518
- * @brief generates reals on an extreme value distribution
519
- * (a.k.a Gumbel Type I, log-Weibull, Fisher-Tippett Type I) with arbitrary shape and scale parameter.
520
- *
521
- * @tparam Derived
522
- * @tparam Urng
523
- * @param o an instance of any type of Eigen::DenseBase
524
- * @param urng c++11-style random number generator
525
- * @param a a location parameter of the distribution
526
- * @param b a scale parameter of the distribution
527
- * @return a random matrix expression of the same shape as `o`
528
- */
529
- template<typename Derived, typename Urng>
530
- inline const ExtremeValueType<Derived, Urng>
531
- extremeValueLike(Derived& o, Urng&& urng, typename Derived::Scalar a = 0, typename Derived::Scalar b = 1)
532
- {
533
- return {
534
- o.rows(), o.cols(), internal::scalar_extreme_value_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
535
- };
536
- }
537
-
538
- template<typename Derived, typename Urng>
539
- using ChiSquaredType = CwiseNullaryOp<internal::scalar_chi_squared_dist_op<typename Derived::Scalar, Urng>, const Derived>;
540
-
541
- /**
542
- * @brief generates reals on the Chi-squared distribution with arbitrary degrees of freedom.
543
- *
544
- * @tparam Derived
545
- * @tparam Urng
546
- * @param rows the number of rows being generated
547
- * @param cols the number of columns being generated
548
- * @param urng c++11-style random number generator
549
- * @param n the degrees of freedom of the distribution
550
- * @return a random matrix expression with a shape (`rows`, `cols`)
551
- */
552
- template<typename Derived, typename Urng>
553
- inline const ChiSquaredType<Derived, Urng>
554
- chiSquared(Index rows, Index cols, Urng&& urng, typename Derived::Scalar n = 1)
555
- {
556
- return {
557
- rows, cols, internal::scalar_chi_squared_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), n)
558
- };
559
- }
560
-
561
- /**
562
- * @brief generates reals on the Chi-squared distribution with arbitrary degrees of freedom.
563
- *
564
- * @tparam Derived
565
- * @tparam Urng
566
- * @param o an instance of any type of Eigen::DenseBase
567
- * @param urng c++11-style random number generator
568
- * @param n the degrees of freedom of the distribution
569
- * @return a random matrix expression of the same shape as `o`
570
- */
571
- template<typename Derived, typename Urng>
572
- inline const ChiSquaredType<Derived, Urng>
573
- chiSquaredLike(Derived& o, Urng&& urng, typename Derived::Scalar n = 1)
574
- {
575
- return {
576
- o.rows(), o.cols(), internal::scalar_chi_squared_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), n)
577
- };
578
- }
579
-
580
- template<typename Derived, typename Urng>
581
- using CauchyType = CwiseNullaryOp<internal::scalar_cauchy_dist_op<typename Derived::Scalar, Urng>, const Derived>;
582
-
583
- /**
584
- * @brief generates reals on the Cauchy distribution.
585
- *
586
- * @tparam Derived
587
- * @tparam Urng
588
- * @param rows the number of rows being generated
589
- * @param cols the number of columns being generated
590
- * @param urng c++11-style random number generator
591
- * @param a a location parameter of the distribution
592
- * @param b a scale parameter of the distribution
593
- * @return a random matrix expression with a shape (`rows`, `cols`)
594
- */
595
- template<typename Derived, typename Urng>
596
- inline const CauchyType<Derived, Urng>
597
- cauchy(Index rows, Index cols, Urng&& urng, typename Derived::Scalar a = 0, typename Derived::Scalar b = 1)
598
- {
599
- return {
600
- rows, cols, internal::scalar_cauchy_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
601
- };
602
- }
603
-
604
- /**
605
- * @brief generates reals on the Cauchy distribution.
606
- *
607
- * @tparam Derived
608
- * @tparam Urng
609
- * @param o an instance of any type of Eigen::DenseBase
610
- * @param urng c++11-style random number generator
611
- * @param a a location parameter of the distribution
612
- * @param b a scale parameter of the distribution
613
- * @return a random matrix expression of the same shape as `o`
614
- */
615
- template<typename Derived, typename Urng>
616
- inline const CauchyType<Derived, Urng>
617
- cauchyLike(Derived& o, Urng&& urng, typename Derived::Scalar a = 0, typename Derived::Scalar b = 1)
618
- {
619
- return {
620
- o.rows(), o.cols(), internal::scalar_cauchy_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
621
- };
622
- }
623
-
624
- template<typename Derived, typename Urng>
625
- using FisherFType = CwiseNullaryOp<internal::scalar_fisher_f_dist_op<typename Derived::Scalar, Urng>, const Derived>;
626
-
627
- /**
628
- * @brief generates reals on the Fisher's F distribution.
629
- *
630
- * @tparam Derived
631
- * @tparam Urng
632
- * @param rows the number of rows being generated
633
- * @param cols the number of columns being generated
634
- * @param urng c++11-style random number generator
635
- * @param m degrees of freedom
636
- * @param n degrees of freedom
637
- * @return a random matrix expression with a shape (`rows`, `cols`)
638
- */
639
- template<typename Derived, typename Urng>
640
- inline const FisherFType<Derived, Urng>
641
- fisherF(Index rows, Index cols, Urng&& urng, typename Derived::Scalar m = 1, typename Derived::Scalar n = 1)
642
- {
643
- return {
644
- rows, cols, internal::scalar_fisher_f_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), m, n)
645
- };
646
- }
647
-
648
- /**
649
- * @brief generates reals on the Fisher's F distribution.
650
- *
651
- * @tparam Derived
652
- * @tparam Urng
653
- * @param o an instance of any type of Eigen::DenseBase
654
- * @param urng c++11-style random number generator
655
- * @param m degrees of freedom
656
- * @param n degrees of freedom
657
- * @return a random matrix expression of the same shape as `o`
658
- */
659
- template<typename Derived, typename Urng>
660
- inline const FisherFType<Derived, Urng>
661
- fisherFLike(Derived& o, Urng&& urng, typename Derived::Scalar m = 1, typename Derived::Scalar n = 1)
662
- {
663
- return {
664
- o.rows(), o.cols(), internal::scalar_fisher_f_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), m, n)
665
- };
666
- }
667
-
668
- template<typename Derived, typename Urng>
669
- using BetaType = CwiseNullaryOp<internal::scalar_beta_dist_op<typename Derived::Scalar, Urng>, const Derived>;
670
-
671
- /**
672
- * @brief generates reals on the beta distribution.
673
- *
674
- * @tparam Derived
675
- * @tparam Urng
676
- * @param rows the number of rows being generated
677
- * @param cols the number of columns being generated
678
- * @param urng c++11-style random number generator
679
- * @param a,b shape parameter
680
- * @return a random matrix expression with a shape (`rows`, `cols`)
681
- */
682
- template<typename Derived, typename Urng>
683
- inline const BetaType<Derived, Urng>
684
- beta(Index rows, Index cols, Urng&& urng, typename Derived::Scalar a = 1, typename Derived::Scalar b = 1)
685
- {
686
- return {
687
- rows, cols, internal::scalar_beta_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
688
- };
689
- }
690
-
691
- /**
692
- * @brief generates reals on the beta distribution.
693
- *
694
- * @tparam Derived
695
- * @tparam Urng
696
- * @param o an instance of any type of Eigen::DenseBase
697
- * @param urng c++11-style random number generator
698
- * @param a,b shape parameter
699
- * @return a random matrix expression of the same shape as `o`
700
- */
701
- template<typename Derived, typename Urng>
702
- inline const BetaType<Derived, Urng>
703
- betaLike(Derived& o, Urng&& urng, typename Derived::Scalar a = 1, typename Derived::Scalar b = 1)
704
- {
705
- return {
706
- o.rows(), o.cols(), internal::scalar_beta_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), a, b)
707
- };
708
- }
709
-
710
- template<typename Derived, typename Urng>
711
- using DiscreteFType = CwiseNullaryOp<internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, float>, const Derived>;
712
-
713
- /**
714
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
715
- * The data type used for calculation of probabilities is float(23bit precision).
716
- *
717
- * @tparam Derived
718
- * @tparam Urng
719
- * @param rows the number of rows being generated
720
- * @param cols the number of columns being generated
721
- * @param urng c++11-style random number generator
722
- * @param first, last the range of elements defining the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
723
- * @return a random matrix expression with a shape (`rows`, `cols`)
724
- */
725
- template<typename Derived, typename Urng, typename RealIter>
726
- inline const DiscreteFType<Derived, Urng>
727
- discreteF(Index rows, Index cols, Urng&& urng, RealIter first, RealIter last)
728
- {
729
- return {
730
- rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), first, last)
731
- };
732
- }
733
-
734
- /**
735
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
736
- * The data type used for calculation of probabilities is float(23bit precision).
737
- *
738
- * @tparam Derived
739
- * @tparam Urng
740
- * @param o an instance of any type of Eigen::DenseBase
741
- * @param urng c++11-style random number generator
742
- * @param first, last the range of elements defining the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
743
- * @return a random matrix expression of the same shape as `o`
744
- */
745
- template<typename Derived, typename Urng, typename RealIter>
746
- inline const DiscreteFType<Derived, Urng>
747
- discreteFLike(Derived& o, Urng&& urng, RealIter first, RealIter last)
748
- {
749
- return {
750
- o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), first, last)
751
- };
752
- }
753
-
754
- /**
755
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
756
- * The data type used for calculation of probabilities is float(23bit precision).
757
- *
758
- * @tparam Derived
759
- * @tparam Urng
760
- * @param rows the number of rows being generated
761
- * @param cols the number of columns being generated
762
- * @param urng c++11-style random number generator
763
- * @param il an instance of `initializer_list` containing the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
764
- * @return a random matrix expression with a shape (`rows`, `cols`)
765
- */
766
- template<typename Derived, typename Urng, typename Real>
767
- inline const DiscreteFType<Derived, Urng>
768
- discreteF(Index rows, Index cols, Urng&& urng, const std::initializer_list<Real>& il)
769
- {
770
- return {
771
- rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), il.begin(), il.end())
772
- };
773
- }
774
-
775
- /**
776
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
777
- * The data type used for calculation of probabilities is float(23bit precision).
778
- *
779
- * @tparam Derived
780
- * @tparam Urng
781
- * @param o an instance of any type of Eigen::DenseBase
782
- * @param urng c++11-style random number generator
783
- * @param il an instance of `initializer_list` containing the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
784
- * @return a random matrix expression of the same shape as `o`
785
- */
786
- template<typename Derived, typename Urng, typename Real>
787
- inline const DiscreteFType<Derived, Urng>
788
- discreteFLike(Derived& o, Urng&& urng, const std::initializer_list<Real>& il)
789
- {
790
- return {
791
- o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), il.begin(), il.end())
792
- };
793
- }
794
-
795
- template<typename Derived, typename Urng>
796
- using DiscreteDType = CwiseNullaryOp<internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>, const Derived>;
797
-
798
- /**
799
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
800
- * The data type used for calculation of probabilities is double(52bit precision).
801
- *
802
- * @tparam Derived
803
- * @tparam Urng
804
- * @param rows the number of rows being generated
805
- * @param cols the number of columns being generated
806
- * @param urng c++11-style random number generator
807
- * @param first, last the range of elements defining the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
808
- * @return a random matrix expression with a shape (`rows`, `cols`)
809
- */
810
- template<typename Derived, typename Urng, typename RealIter>
811
- inline const DiscreteDType<Derived, Urng>
812
- discreteD(Index rows, Index cols, Urng&& urng, RealIter first, RealIter last)
813
- {
814
- return {
815
- rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), first, last)
816
- };
817
- }
818
-
819
- /**
820
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
821
- * The data type used for calculation of probabilities is double(52bit precision).
822
- *
823
- * @tparam Derived
824
- * @tparam Urng
825
- * @param o an instance of any type of Eigen::DenseBase
826
- * @param urng c++11-style random number generator
827
- * @param first, last the range of elements defining the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
828
- * @return a random matrix expression of the same shape as `o`
829
- */
830
- template<typename Derived, typename Urng, typename RealIter>
831
- inline const DiscreteDType<Derived, Urng>
832
- discreteDLike(Derived& o, Urng&& urng, RealIter first, RealIter last)
833
- {
834
- return {
835
- o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), first, last)
836
- };
837
- }
838
-
839
- /**
840
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
841
- * The data type used for calculation of probabilities is double(52bit precision).
842
- *
843
- * @tparam Derived
844
- * @tparam Urng
845
- * @param rows the number of rows being generated
846
- * @param cols the number of columns being generated
847
- * @param urng c++11-style random number generator
848
- * @param il an instance of `initializer_list` containing the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
849
- * @return a random matrix expression with a shape (`rows`, `cols`)
850
- */
851
- template<typename Derived, typename Urng, typename Real>
852
- inline const DiscreteDType<Derived, Urng>
853
- discreteD(Index rows, Index cols, Urng&& urng, const std::initializer_list<Real>& il)
854
- {
855
- return {
856
- rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), il.begin(), il.end())
857
- };
858
- }
859
-
860
- /**
861
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
862
- * The data type used for calculation of probabilities is double(52bit precision).
863
- *
864
- * @tparam Derived
865
- * @tparam Urng
866
- * @param o an instance of any type of Eigen::DenseBase
867
- * @param urng c++11-style random number generator
868
- * @param il an instance of `initializer_list` containing the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
869
- * @return a random matrix expression of the same shape as `o`
870
- */
871
- template<typename Derived, typename Urng, typename Real>
872
- inline const DiscreteDType<Derived, Urng>
873
- discreteDLike(Derived& o, Urng&& urng, const std::initializer_list<Real>& il)
874
- {
875
- return {
876
- o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, double>(std::forward<Urng>(urng), il.begin(), il.end())
877
- };
878
- }
879
-
880
- template<typename Derived, typename Urng>
881
- using DiscreteType = CwiseNullaryOp<internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>, const Derived>;
882
-
883
- /**
884
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
885
- * The data type used for calculation of probabilities is int32(32bit precision).
886
- *
887
- * @tparam Derived
888
- * @tparam Urng
889
- * @param rows the number of rows being generated
890
- * @param cols the number of columns being generated
891
- * @param urng c++11-style random number generator
892
- * @param first, last the range of elements defining the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
893
- * @return a random matrix expression with a shape (`rows`, `cols`)
894
- */
895
- template<typename Derived, typename Urng, typename RealIter>
896
- inline const DiscreteType<Derived, Urng>
897
- discrete(Index rows, Index cols, Urng&& urng, RealIter first, RealIter last)
898
- {
899
- return {
900
- rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), first, last)
901
- };
902
- }
903
-
904
- /**
905
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
906
- * The data type used for calculation of probabilities is int32(32bit precision).
907
- *
908
- * @tparam Derived
909
- * @tparam Urng
910
- * @param o an instance of any type of Eigen::DenseBase
911
- * @param urng c++11-style random number generator
912
- * @param first, last the range of elements defining the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
913
- * @return a random matrix expression of the same shape as `o`
914
- */
915
- template<typename Derived, typename Urng, typename RealIter>
916
- inline const DiscreteType<Derived, Urng>
917
- discreteLike(Derived& o, Urng&& urng, RealIter first, RealIter last)
918
- {
919
- return {
920
- o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), first, last)
921
- };
922
- }
923
-
924
- /**
925
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
926
- * The data type used for calculation of probabilities is int32(32bit precision).
927
- *
928
- * @tparam Derived
929
- * @tparam Urng
930
- * @param rows the number of rows being generated
931
- * @param cols the number of columns being generated
932
- * @param urng c++11-style random number generator
933
- * @param il an instance of `initializer_list` containing the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
934
- * @return a random matrix expression with a shape (`rows`, `cols`)
935
- */
936
- template<typename Derived, typename Urng, typename Real>
937
- inline const DiscreteType<Derived, Urng>
938
- discrete(Index rows, Index cols, Urng&& urng, const std::initializer_list<Real>& il)
939
- {
940
- return {
941
- rows, cols, internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), il.begin(), il.end())
942
- };
943
- }
944
-
945
- /**
946
- * @brief generates random integers on the interval `[0, n)`, where the probability of each individual integer `i` is proportional to `w(i)`.
947
- * The data type used for calculation of probabilities is int32(32bit precision).
948
- *
949
- * @tparam Derived
950
- * @tparam Urng
951
- * @param o an instance of any type of Eigen::DenseBase
952
- * @param urng c++11-style random number generator
953
- * @param il an instance of `initializer_list` containing the numbers to use as weights. The type of the elements referred by `RealIter` must be convertible to `double`.
954
- * @return a random matrix expression of the same shape as `o`
955
- */
956
- template<typename Derived, typename Urng, typename Real>
957
- inline const DiscreteType<Derived, Urng>
958
- discreteLike(Derived& o, Urng&& urng, const std::initializer_list<Real>& il)
959
- {
960
- return {
961
- o.rows(), o.cols(), internal::scalar_discrete_dist_op<typename Derived::Scalar, Urng, int32_t>(std::forward<Urng>(urng), il.begin(), il.end())
962
- };
963
- }
964
-
965
- template<typename Derived, typename Urng>
966
- using PoissonType = CwiseNullaryOp<internal::scalar_poisson_dist_op<typename Derived::Scalar, Urng>, const Derived>;
967
-
968
- /**
969
- * @brief generates reals on the Poisson distribution.
970
- *
971
- * @tparam Derived
972
- * @tparam Urng
973
- * @param rows the number of rows being generated
974
- * @param cols the number of columns being generated
975
- * @param urng c++11-style random number generator
976
- * @param mean rate parameter
977
- * @return a random matrix expression with a shape (`rows`, `cols`)
978
- */
979
- template<typename Derived, typename Urng>
980
- inline const PoissonType<Derived, Urng>
981
- poisson(Index rows, Index cols, Urng&& urng, double mean = 1)
982
- {
983
- return {
984
- rows, cols, internal::scalar_poisson_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean)
985
- };
986
- }
987
-
988
- /**
989
- * @brief generates reals on the Poisson distribution.
990
- *
991
- * @tparam Derived
992
- * @tparam Urng
993
- * @param o an instance of any type of Eigen::DenseBase
994
- * @param urng c++11-style random number generator
995
- * @param mean rate parameter
996
- * @return a random matrix expression of the same shape as `o`
997
- */
998
- template<typename Derived, typename Urng>
999
- inline const PoissonType<Derived, Urng>
1000
- poissonLike(Derived& o, Urng&& urng, double mean = 1)
1001
- {
1002
- return {
1003
- o.rows(), o.cols(), internal::scalar_poisson_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), mean)
1004
- };
1005
- }
1006
-
1007
- template<typename Derived, typename Urng>
1008
- using BinomialType = CwiseNullaryOp<internal::scalar_binomial_dist_op<typename Derived::Scalar, Urng>, const Derived>;
1009
-
1010
- /**
1011
- * @brief generates reals on the binomial distribution.
1012
- *
1013
- * @tparam Derived
1014
- * @tparam Urng
1015
- * @param rows the number of rows being generated
1016
- * @param cols the number of columns being generated
1017
- * @param urng c++11-style random number generator
1018
- * @param trials the number of trials
1019
- * @param p probability of a trial generating true
1020
- * @return a random matrix expression with a shape (`rows`, `cols`)
1021
- */
1022
- template<typename Derived, typename Urng>
1023
- inline const BinomialType<Derived, Urng>
1024
- binomial(Index rows, Index cols, Urng&& urng, typename Derived::Scalar trials = 1, double p = 0.5)
1025
- {
1026
- return {
1027
- rows, cols, internal::scalar_binomial_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), trials, p)
1028
- };
1029
- }
1030
-
1031
- /**
1032
- * @brief generates reals on the binomial distribution.
1033
- *
1034
- * @tparam Derived
1035
- * @tparam Urng
1036
- * @param o an instance of any type of Eigen::DenseBase
1037
- * @param urng c++11-style random number generator
1038
- * @param trials the number of trials
1039
- * @param p probability of a trial generating true
1040
- * @return a random matrix expression of the same shape as `o`
1041
- */
1042
- template<typename Derived, typename Urng>
1043
- inline const BinomialType<Derived, Urng>
1044
- binomialLike(Derived& o, Urng&& urng, typename Derived::Scalar trials = 1, double p = 0.5)
1045
- {
1046
- return {
1047
- o.rows(), o.cols(), internal::scalar_binomial_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), trials, p)
1048
- };
1049
- }
1050
-
1051
- template<typename Derived, typename Urng>
1052
- using NegativeBinomialType = CwiseNullaryOp<internal::scalar_negative_binomial_dist_op<typename Derived::Scalar, Urng>, const Derived>;
1053
-
1054
- /**
1055
- * @brief generates reals on the negative binomial distribution.
1056
- *
1057
- * @tparam Derived
1058
- * @tparam Urng
1059
- * @param rows the number of rows being generated
1060
- * @param cols the number of columns being generated
1061
- * @param urng c++11-style random number generator
1062
- * @param trials the number of trial successes
1063
- * @param p probability of a trial generating true
1064
- * @return a random matrix expression with a shape (`rows`, `cols`)
1065
- */
1066
- template<typename Derived, typename Urng>
1067
- inline const NegativeBinomialType<Derived, Urng>
1068
- negativeBinomial(Index rows, Index cols, Urng&& urng, typename Derived::Scalar trials = 1, double p = 0.5)
1069
- {
1070
- return {
1071
- rows, cols, internal::scalar_negative_binomial_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), trials, p)
1072
- };
1073
- }
1074
-
1075
- /**
1076
- * @brief generates reals on the negative binomial distribution.
1077
- *
1078
- * @tparam Derived
1079
- * @tparam Urng
1080
- * @param o an instance of any type of Eigen::DenseBase
1081
- * @param urng c++11-style random number generator
1082
- * @param trials the number of trial successes
1083
- * @param p probability of a trial generating true
1084
- * @return a random matrix expression of the same shape as `o`
1085
- */
1086
- template<typename Derived, typename Urng>
1087
- inline const NegativeBinomialType<Derived, Urng>
1088
- negativeBinomialLike(Derived& o, Urng&& urng, typename Derived::Scalar trials = 1, double p = 0.5)
1089
- {
1090
- return {
1091
- o.rows(), o.cols(), internal::scalar_negative_binomial_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), trials, p)
1092
- };
1093
- }
1094
-
1095
- template<typename Derived, typename Urng>
1096
- using GeometricType = CwiseNullaryOp<internal::scalar_geometric_dist_op<typename Derived::Scalar, Urng>, const Derived>;
1097
-
1098
- /**
1099
- * @brief generates reals on the geometric distribution.
1100
- *
1101
- * @tparam Derived
1102
- * @tparam Urng
1103
- * @param rows the number of rows being generated
1104
- * @param cols the number of columns being generated
1105
- * @param urng c++11-style random number generator
1106
- * @param p probability of a trial generating true
1107
- * @return a random matrix expression with a shape (`rows`, `cols`)
1108
- */
1109
- template<typename Derived, typename Urng>
1110
- inline const GeometricType<Derived, Urng>
1111
- geometric(Index rows, Index cols, Urng&& urng, double p = 0.5)
1112
- {
1113
- return {
1114
- rows, cols, internal::scalar_geometric_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), p)
1115
- };
1116
- }
1117
34
 
1118
- /**
1119
- * @brief generates reals on the geometric distribution.
1120
- *
1121
- * @tparam Derived
1122
- * @tparam Urng
1123
- * @param o an instance of any type of Eigen::DenseBase
1124
- * @param urng c++11-style random number generator
1125
- * @param p probability of a trial generating true
1126
- * @return a random matrix expression of the same shape as `o`
1127
- */
1128
- template<typename Derived, typename Urng>
1129
- inline const GeometricType<Derived, Urng>
1130
- geometricLike(Derived& o, Urng&& urng, double p = 0.5)
1131
- {
1132
- return {
1133
- o.rows(), o.cols(), internal::scalar_geometric_dist_op<typename Derived::Scalar, Urng>(std::forward<Urng>(urng), p)
1134
- };
1135
- }
1136
35
  }
1137
36
  }
1138
37