lda-ruby 0.3.9 → 0.4.0

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.
Files changed (45) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG.md +8 -0
  3. data/Gemfile +9 -0
  4. data/README.md +123 -3
  5. data/VERSION.yml +3 -3
  6. data/docs/modernization-handoff.md +190 -0
  7. data/docs/porting-strategy.md +127 -0
  8. data/docs/precompiled-platform-policy.md +68 -0
  9. data/docs/release-runbook.md +157 -0
  10. data/ext/lda-ruby/extconf.rb +10 -6
  11. data/ext/lda-ruby/lda-inference.c +21 -5
  12. data/ext/lda-ruby-rust/Cargo.toml +12 -0
  13. data/ext/lda-ruby-rust/README.md +48 -0
  14. data/ext/lda-ruby-rust/extconf.rb +123 -0
  15. data/ext/lda-ruby-rust/src/lib.rs +456 -0
  16. data/lda-ruby.gemspec +0 -0
  17. data/lib/lda-ruby/backends/base.rb +129 -0
  18. data/lib/lda-ruby/backends/native.rb +158 -0
  19. data/lib/lda-ruby/backends/pure_ruby.rb +613 -0
  20. data/lib/lda-ruby/backends/rust.rb +226 -0
  21. data/lib/lda-ruby/backends.rb +58 -0
  22. data/lib/lda-ruby/corpus/corpus.rb +17 -15
  23. data/lib/lda-ruby/corpus/data_corpus.rb +2 -2
  24. data/lib/lda-ruby/corpus/directory_corpus.rb +2 -2
  25. data/lib/lda-ruby/corpus/text_corpus.rb +2 -2
  26. data/lib/lda-ruby/document/document.rb +6 -6
  27. data/lib/lda-ruby/document/text_document.rb +5 -4
  28. data/lib/lda-ruby/rust_build_policy.rb +21 -0
  29. data/lib/lda-ruby/version.rb +5 -0
  30. data/lib/lda-ruby.rb +293 -48
  31. data/test/backend_compatibility_test.rb +146 -0
  32. data/test/backends_selection_test.rb +100 -0
  33. data/test/gemspec_test.rb +27 -0
  34. data/test/lda_ruby_test.rb +49 -11
  35. data/test/packaged_gem_smoke_test.rb +33 -0
  36. data/test/release_scripts_test.rb +54 -0
  37. data/test/rust_build_policy_test.rb +23 -0
  38. data/test/simple_pipeline_test.rb +22 -0
  39. data/test/simple_yaml.rb +1 -7
  40. data/test/test_helper.rb +5 -6
  41. metadata +48 -38
  42. data/Rakefile +0 -61
  43. data/ext/lda-ruby/Makefile +0 -181
  44. data/test/data/.gitignore +0 -2
  45. data/test/simple_test.rb +0 -26
@@ -0,0 +1,158 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lda
4
+ module Backends
5
+ class Native < Base
6
+ REQUIRED_NATIVE_METHODS = %i[
7
+ __native_fast_load_corpus_from_file
8
+ __native_load_settings
9
+ __native_set_config
10
+ __native_em
11
+ __native_beta
12
+ __native_gamma
13
+ __native_compute_phi
14
+ __native_model
15
+ __native_set_corpus
16
+ __native_max_iter
17
+ __native_set_max_iter
18
+ __native_convergence
19
+ __native_set_convergence
20
+ __native_em_max_iter
21
+ __native_set_em_max_iter
22
+ __native_em_convergence
23
+ __native_set_em_convergence
24
+ __native_init_alpha
25
+ __native_set_init_alpha
26
+ __native_num_topics
27
+ __native_set_num_topics
28
+ __native_est_alpha
29
+ __native_set_est_alpha
30
+ __native_verbose
31
+ __native_set_verbose
32
+ ].freeze
33
+
34
+ def self.available?(host)
35
+ REQUIRED_NATIVE_METHODS.all? { |method_name| host.respond_to?(method_name, true) }
36
+ end
37
+
38
+ def initialize(host, random_seed: nil)
39
+ super(random_seed: random_seed)
40
+ @host = host
41
+ end
42
+
43
+ def name
44
+ "native"
45
+ end
46
+
47
+ def corpus=(corpus)
48
+ @corpus = corpus
49
+ @host.__send__(:__native_set_corpus, corpus)
50
+ end
51
+
52
+ def fast_load_corpus_from_file(filename)
53
+ @host.__send__(:__native_fast_load_corpus_from_file, filename)
54
+ end
55
+
56
+ def load_settings(settings_file)
57
+ @host.__send__(:__native_load_settings, settings_file)
58
+ end
59
+
60
+ def set_config(init_alpha, num_topics, max_iter, convergence, em_max_iter, em_convergence, est_alpha)
61
+ @host.__send__(
62
+ :__native_set_config,
63
+ init_alpha,
64
+ num_topics,
65
+ max_iter,
66
+ convergence,
67
+ em_max_iter,
68
+ em_convergence,
69
+ est_alpha
70
+ )
71
+ end
72
+
73
+ def max_iter
74
+ @host.__send__(:__native_max_iter)
75
+ end
76
+
77
+ def max_iter=(value)
78
+ @host.__send__(:__native_set_max_iter, Integer(value))
79
+ end
80
+
81
+ def convergence
82
+ @host.__send__(:__native_convergence)
83
+ end
84
+
85
+ def convergence=(value)
86
+ @host.__send__(:__native_set_convergence, Float(value))
87
+ end
88
+
89
+ def em_max_iter
90
+ @host.__send__(:__native_em_max_iter)
91
+ end
92
+
93
+ def em_max_iter=(value)
94
+ @host.__send__(:__native_set_em_max_iter, Integer(value))
95
+ end
96
+
97
+ def em_convergence
98
+ @host.__send__(:__native_em_convergence)
99
+ end
100
+
101
+ def em_convergence=(value)
102
+ @host.__send__(:__native_set_em_convergence, Float(value))
103
+ end
104
+
105
+ def init_alpha
106
+ @host.__send__(:__native_init_alpha)
107
+ end
108
+
109
+ def init_alpha=(value)
110
+ @host.__send__(:__native_set_init_alpha, Float(value))
111
+ end
112
+
113
+ def num_topics
114
+ @host.__send__(:__native_num_topics)
115
+ end
116
+
117
+ def num_topics=(value)
118
+ @host.__send__(:__native_set_num_topics, Integer(value))
119
+ end
120
+
121
+ def est_alpha
122
+ @host.__send__(:__native_est_alpha)
123
+ end
124
+
125
+ def est_alpha=(value)
126
+ @host.__send__(:__native_set_est_alpha, Integer(value))
127
+ end
128
+
129
+ def verbose
130
+ @host.__send__(:__native_verbose)
131
+ end
132
+
133
+ def verbose=(value)
134
+ @host.__send__(:__native_set_verbose, !!value)
135
+ end
136
+
137
+ def em(start)
138
+ @host.__send__(:__native_em, start)
139
+ end
140
+
141
+ def beta
142
+ @host.__send__(:__native_beta)
143
+ end
144
+
145
+ def gamma
146
+ @host.__send__(:__native_gamma)
147
+ end
148
+
149
+ def compute_phi
150
+ @host.__send__(:__native_compute_phi)
151
+ end
152
+
153
+ def model
154
+ @host.__send__(:__native_model)
155
+ end
156
+ end
157
+ end
158
+ end