from scipy.stats import norm
import numpy as np
import argparse
import sys


parser = argparse.ArgumentParser()
parser.add_argument('--bidders', type=int, default=2, help='number of bidders')
parser.add_argument('--rows', type=int, default=100, help='number of generated auction results')  # noqa: 501
parser.add_argument('--std', type=float, default=np.nan, help='standard deviation of private values')  # noqa: 501
parser.add_argument('--mean', type=float, default=np.nan, help='average of private values')  # noqa: 501
parser.add_argument('--private', type=float, default=np.nan, help='your private value')  # noqa: 501

args = parser.parse_args()
bidders = args.bidders

if np.isnan(args.std):
    args.std = np.abs(np.random.randn())
if np.isnan(args.mean):
    args.mean = (5 + np.abs(np.random.randn())) * args.std
if np.isnan(args.private):
    args.private = args.mean + args.std * np.abs(np.random.randn())

samples = norm.rvs(loc=args.mean, scale=args.std, size=(args.rows, bidders))
payments = np.partition(samples, bidders - 2, axis=1)[:, bidders - 2]

assert np.all(samples >= 0), "Negative sample generated!"

print(args.private, bidders)
np.savetxt(sys.stdout, payments, fmt="%.5f")
