def run_eval()

in contactopt/run_eval.py [0:0]


def run_eval(args):
    in_file = 'data/optimized_{}.pkl'.format(args.split)
    runs = pickle.load(open(in_file, 'rb'))
    print('Loaded {} len {}'.format(in_file, len(runs)))

    # if args.vis or args.physics:
    #     print('Shuffling!!!')
    #     random.shuffle(runs)

    if args.partial > 0:
        runs = runs[:args.partial]

    do_parallel = not args.vis
    if do_parallel:
        all_data = Parallel(n_jobs=mp.cpu_count() - 2)(delayed(process_sample)(s, idx) for idx, s in enumerate(tqdm(runs)))
        in_all = [item[0] for item in all_data]
        out_all = [item[1] for item in all_data]
    else:
        all_data = []   # Do non-parallel
        for idx, s in enumerate(tqdm(runs)):
            all_data.append(process_sample(s, idx))

            if args.vis:
                print('In vs GT\n', pprint.pformat(all_data[-1][0]))
                print('Out vs GT\n', pprint.pformat(all_data[-1][1]))
                if args.split == 'im_pred_trans':
                    vis_sample(s['gt_ho'], s['in_ho'], s['out_ho'], mje_in=all_data[-1][0]['objalign_hand_joints'], mje_out=all_data[-1][1]['objalign_hand_joints'])
                else:
                    vis_sample(s['gt_ho'], s['in_ho'], s['out_ho'], mje_in=all_data[-1][0]['unalign_hand_joints'], mje_out=all_data[-1][1]['unalign_hand_joints'])

        in_all = [item[0] for item in all_data]
        out_all = [item[1] for item in all_data]

    mean_in = calc_mean_dicts(in_all, 'In vs GT')
    mean_out = calc_mean_dicts(out_all, 'Out vs GT')
    print('In vs GT\n', pprint.pformat(mean_in))
    print('Out vs GT\n', pprint.pformat(mean_out))