class EvocCLI::Analyze

Public Instance Methods

aggregator_range() click to toggle source
# File lib/evoc_cli/analyze.rb, line 35
def aggregator_range
  a = Evoc::Analyze.new(options)
  a.aggregator_range
end
all() click to toggle source
# File lib/evoc_cli/analyze.rb, line 54
def all
  Evoc::Analyze.new(options).all
end
avg_changes_per_file() click to toggle source
# File lib/evoc_cli/analyze.rb, line 59
def avg_changes_per_file
  a = Evoc::Analyze.new(options)
  $stdout.puts __method__
  $stdout.puts a.average_changes_per_file
end
avg_commit_size() click to toggle source
# File lib/evoc_cli/analyze.rb, line 111
def avg_commit_size
  a = Evoc::Analyze.new(options)
  $stdout.puts __method__
  $stdout.puts a.average_commit_size
end
avg_time_between_commits() click to toggle source
# File lib/evoc_cli/analyze.rb, line 81
def avg_time_between_commits
  a = Evoc::Analyze.new(options)
  unit = 'hours'
  $stdout.puts "#{__method__}_#{unit}"
  $stdout.puts a.average_time_between_commits(unit: unit)
end
commit_size() click to toggle source
# File lib/evoc_cli/analyze.rb, line 105
def commit_size
  a = Evoc::Analyze.new(options)
  a.commit_size
end
commits() click to toggle source
# File lib/evoc_cli/analyze.rb, line 16
def commits
  a = Evoc::Analyze.new(options)
  a.commits
end
create_dict() click to toggle source
# File lib/evoc_cli/analyze.rb, line 118
def create_dict
  a = Evoc::Analyze.new(options)
  a.create_dict
end
evolution() click to toggle source
# File lib/evoc_cli/analyze.rb, line 10
def evolution
  a = Evoc::Analyze.new(options)
  a.evolution
end
file_frequency() click to toggle source
# File lib/evoc_cli/analyze.rb, line 97
def file_frequency
  a = Evoc::Analyze.new(options)
  a.file_frequency
end
measure_ranges() click to toggle source
# File lib/evoc_cli/analyze.rb, line 29
def measure_ranges
  a = Evoc::Analyze.new(options)
  a.measure_ranges
end
measure_values() click to toggle source
# File lib/evoc_cli/analyze.rb, line 23
def measure_values
  a = Evoc::Analyze.new(options)
  a.measure_values
end
num_commits() click to toggle source
# File lib/evoc_cli/analyze.rb, line 66
def num_commits
  a = Evoc::Analyze.new(options)
  $stdout.puts __method__
  $stdout.puts a.num_commits
end
num_unique_files() click to toggle source
# File lib/evoc_cli/analyze.rb, line 89
def num_unique_files
  a = Evoc::Analyze.new(options)
  $stdout.puts __method__
  $stdout.puts a.num_unique_files
end
recommendation_meta() click to toggle source
# File lib/evoc_cli/analyze.rb, line 124
def recommendation_meta

  int i = 1
  ARGF.each_line do |line|

    rec = JSON.parse(line)

    tx_id = rec["tx_id"]
    algorithm = rec["algorithm"]
    ap = rec["average_precision1000"]
    rank = nil
    if !ap.nil?
      if ap > 0
        rat = ap.rationalize
        # the rank is only valid if we obtained a 1 in the numerator
        if rat.numerator == 1
          rank = rat.denominator
        end
      end
    else
      $stderr.puts "AP was nil for #{tx_id}"
    end
    applicable = !rec["rules"].empty?
    positive_recommendation = !rank.nil?
    # find the confidence of the correct item
    expected_outcome = nil
    confidence_correct = nil
    rank_one = nil
    confidence_incorrect = nil
    discernibility = nil
    ordered_rec = unique_strongest_consequents(rec["rules"])
    if ordered_rec.size > 0
      if positive_recommendation
        expected_outcome = ordered_rec[rank-1][0]
        confidence_correct = ordered_rec[rank-1][1]
      else
        rank_one = ordered_rec[0][0]
        confidence_incorrect = ordered_rec[0][1]
      end
      discernibility = (ordered_rec.group_by{|(_,confidence)| confidence}.size).to_f/ordered_rec.size
    end


    # build output hash
    hash = {tx_id: tx_id,
      algorithm: algorithm,
      ap: ap,
      rank: rank,
      applicable: applicable,
      positive_recommendation: positive_recommendation,
      expected_outcome: expected_outcome,
      confidence_correct: confidence_correct,
      rank_one: rank_one,
      confidence_incorrect: confidence_incorrect,
      discernibility: discernibility}
    begin
      puts hash.to_json
    rescue JSON::GeneratorError => e
      $stderr.puts "Failed to convert hash to JSON, error was #{e}\n the hash was \n#{hash}\n\n"
      next
    end
  $stderr.print "#{i} lines processed"
  i += 1
  end
end
time_span() click to toggle source
# File lib/evoc_cli/analyze.rb, line 73
def time_span
  a = Evoc::Analyze.new(options)
  unit = 'years'
  $stdout.puts "#{__method__}_#{unit}"
  $stdout.puts a.time_span(unit: unit)
end
uniqueness() click to toggle source
# File lib/evoc_cli/analyze.rb, line 48
def uniqueness
  a = Evoc::Analyze.new(options)
  $stdout.puts a.uniqueness
end

Private Instance Methods

unique_strongest_consequents(rules) click to toggle source
# File lib/evoc_cli/analyze.rb, line 191
def unique_strongest_consequents(rules)
  selected_consequents = Hash.new{|h,k| h[k] = 0}
  rules.each do |rule|
    lhs = rule["lhs"]
    rhs = rule["rhs"]
    confidence = rule["measures"]["m_confidence"]
    if !confidence.nil?
      if confidence.to_r.to_f > selected_consequents[rhs]
        selected_consequents[rhs] = confidence.to_r.to_f
      end
    else
      $stderr.puts "Confidence was nil for rule #{lhs} -> #{rhs}"
    end
  end
  return selected_consequents.sort_by {|k,v| -v}
end