Module: Breakout

Defined in:
lib/breakout.rb,
lib/breakout/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.detect(series, min_size: 30, method: "multi", alpha: 2, beta: nil, degree: 1, percent: nil, exact: true) ⇒ Object

Raises:

  • (ArgumentError)


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/breakout.rb', line 8

def self.detect(series, min_size: 30, method: "multi", alpha: 2, beta: nil, degree: 1, percent: nil, exact: true)
  raise ArgumentError, "min_size must be at least 2" if min_size < 2
  raise ArgumentError, "beta and percent cannot be passed together" unless beta.nil? || percent.nil?
  raise ArgumentError, "alpha must be between 0 and 2" if alpha < 0 || alpha > 2
  raise ArgumentError, "degree must be 0, 1, or 2" unless [0, 1, 2].include?(degree)
  raise ArgumentError, "Bad method" unless ["amoc", "multi"].include?(method)

  return [] if series.size < min_size

  if series.is_a?(Hash)
    sorted = series.sort_by { |k, _| k }
    z = sorted.map(&:last)
  else
    z = series
  end

  res = _detect(z, min_size, method, alpha, beta, degree, percent, exact)
  res.map! { |i| sorted[i][0] } if series.is_a?(Hash)
  res
end