Module: Lda::Backends

Defined in:
lib/lda-ruby/backends.rb,
lib/lda-ruby/backends/base.rb,
lib/lda-ruby/backends/rust.rb,
lib/lda-ruby/backends/native.rb,
lib/lda-ruby/backends/pure_ruby.rb

Defined Under Namespace

Classes: Base, Native, PureRuby, Rust

Class Method Summary collapse

Class Method Details

.build(host:, requested: nil, random_seed: nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/lda-ruby/backends.rb', line 11

def build(host:, requested: nil, random_seed: nil)
  mode = normalize_mode(requested)

  case mode
  when :auto
    if Rust.available?
      Rust.new(random_seed: random_seed)
    elsif Native.available?(host)
      Native.new(host, random_seed: random_seed)
    else
      PureRuby.new(random_seed: random_seed)
    end
  when :rust
    raise LoadError, "Rust backend is unavailable for this environment" unless Rust.available?

    Rust.new(random_seed: random_seed)
  when :native
    raise LoadError, "Native backend is unavailable for this environment" unless Native.available?(host)

    Native.new(host, random_seed: random_seed)
  when :pure
    PureRuby.new(random_seed: random_seed)
  else
    raise ArgumentError, "Unknown backend mode: #{requested.inspect}"
  end
end