class XCKnife::StreamParser::PartitionResult

Constants

TimeImbalances

Attributes

stats[R]
test_maps[R]
test_time_for_partitions[R]
test_time_imbalances[R]
test_times[R]
total_test_time[R]

Public Class Methods

new(stats, partition_sets, test_time_for_partitions) click to toggle source
# File lib/xcknife/stream_parser.rb, line 43
def initialize(stats, partition_sets, test_time_for_partitions)
  @stats = stats
  @partition_sets = partition_sets
  @test_maps = partition_sets_map(&:test_time_map)
  @test_times = partition_sets_map(&:total_time)
  @total_test_time = test_times.flatten.inject(:+)
  @test_time_imbalances = compute_test_time_imbalances
  @test_time_for_partitions = test_time_for_partitions.inject(&:merge)
end

Private Instance Methods

compute_test_time_imbalances() click to toggle source

Yields the imbalances ratios of the partition sets, and the internal imbalance ratio of the respective partitions

# File lib/xcknife/stream_parser.rb, line 56
def compute_test_time_imbalances
  times = test_times
  average_partition_size = times.map { |l| l.inject(:+).to_f / l.size }
  ideal_partition_set_avg = average_partition_size.inject(:+) / @partition_sets.size
  partition_set_imbalance = average_partition_size.map { |avg| avg / ideal_partition_set_avg }

  internal_partition_imbalance = times.map do |partition_times|
    internal_total =  partition_times.inject(:+)
    partition_times.map do |partition_time|
      (partition_time * partition_times.size).to_f / internal_total
    end
  end
  TimeImbalances.new partition_set_imbalance, internal_partition_imbalance
end
partition_sets_map(&block) click to toggle source
# File lib/xcknife/stream_parser.rb, line 71
def partition_sets_map(&block)
  @partition_sets.map { |assignemnt_list| assignemnt_list.map(&block) }
end