def main():
    if len(sys.argv) != 3:
        print "Usage:", sys.argv[0], "<train_data_file> <test_data_file>"
        exit(1)
    train_data_file = sys.argv[1]
    verify_file_exists(train_data_file)
    test_data_file = sys.argv[2]
    verify_file_exists(test_data_file)
    train_data_list = read_data_file(train_data_file, lambda x: int(x))
    mean = float(sum(train_data_list)) / len(train_data_list)
    test_data_list = read_data_file(test_data_file, lambda x: int(x))
    max_elem = max_pois_elem(mean)
    print '\n'.join(map(lambda elem: str(log_principal_anomaly(elem, mean, max_elem)), test_data_list))
def main():
    if len(sys.argv) != 3:
        print "Usage:", sys.argv[0], "<train_data_file> <test_data_file>"
        exit(1)
    train_data_file = sys.argv[1]
    verify_file_exists(train_data_file)
    test_data_file = sys.argv[2]
    verify_file_exists(test_data_file)
    train_data_list = read_data_file(train_data_file, lambda x: float(x))
    N = len(train_data_list)
    Q = reduce(lambda acc, x: acc + pow(x, 2), train_data_list)
    S = sum(train_data_list)
    test_data_list = read_data_file(test_data_file, lambda x: float(x))
    print '\n'.join(map(lambda elem: str(log_principal_anomaly(elem, N, Q, S)), test_data_list))
            false_negative_rate_clean_acc/float(iterations),
            false_positive_rate_merged_acc/float(iterations),
            false_positive_rate_clean_acc/float(iterations))

class RateCalculator(object):
    def __init__(self, data_spec, strategy, normal_entries_distr, threshold):
        self.data_spec = data_spec
        self.strategy = strategy
        self.normal_entries_distr = normal_entries_distr
        self.threshold = threshold
    def __call__(self, ignored):
        return generate_data_and_compute_rates(data_spec, strategy, normal_entries_distr, threshold)

if __name__ == '__main__':
    if len(sys.argv) != 6:
        print "Usage:", sys.argv[0], "<data_spec> <normal_entries_distr> <iterations> <threshold> <frequentist|bayesian>\n"
        print "Note that contents of <out_dir> will be wiped out!"
        exit(1)
    data_spec = sys.argv[1]
    normal_entries_distr = sys.argv[2]
    iterations = int(sys.argv[3])
    threshold = float(sys.argv[4])
    strategy = sys.argv[5]
    verify_file_exists(data_spec)
    averages = average_rates(data_spec, normal_entries_distr, threshold, iterations, strategy)
    output_format = '{0:.10f}'
    print (output_format.format(averages[0]),
           output_format.format(averages[1]),
           output_format.format(averages[2]),
           output_format.format(averages[3]))