def create_csv()

in generate_result_table.py [0:0]


def create_csv(args):
    results = pickle.load(open(os.path.join(args.result_dir, args.result_file), 'rb'))
    results = results['violation_detection_results_no_intent']
    
    if args.pipeline == 'deterministic':
        method_list = ['exact', 'bijaccard', 'edit_distance',
                       'roberta_mnli', 'roberta_mnli_0.2', 'average_three', 'average_three_0.5']
    elif args.pipeline == 'probabilistic':
        method_list = ['bijaccard', 'edit_distance_norm',
                       'roberta_mnli', 'roberta_mnli_0.2',
                       'average_three', 'average_three_0.5']
    else:
        raise Exception(f"Unrecognized pipeline name: {args.pipeline}")
        
    if "fastfood" in args.task:
        constraints = ['food_item-ingredient', 'drink_item-ingredient', 'food_item-size', 'drink_item-size']
    elif "insurance" in args.task:
        constraints = ['car_model_brand', 'closedType_car_brand', 'closedType_car_model', 'closedType_car_year']
    else:
        raise Exception(f"Unsupported task: {args.task}; Support only fastfood and insurance")
        
    rows = []
    for met in method_list:
        row = {'method_name': met}
        for m in ['conversation_correct','exact_match','iou']: # exact match = turn correct
            try:
                row[m] = f'{results[met][m]:.3f}'
            except TypeError:
                row[m] = str(results[met][m])
        for m in ['f1', 'precision', 'recall']:
            try:
                row[m] = f'{results[met]["independent"][m]:.3f}'
            except TypeError:
                row[m] = str(results[met]["independent"][m])
        for cname in constraints:
            try:
                row[cname] = f'{results[met]["independent"]["constraint_stats"][cname]["f1"]:.3f}'
            except TypeError:
                row[cname] = str(results[met]["independent"]["constraint_stats"][cname]["f1"])
        rows.append(row)
        
    filename = args.result_file[:-7] + '.csv'
    with open(os.path.join(args.result_dir, filename), 'w', newline='\n', encoding='utf-8') as csv_file:
        fieldnames = ['method_name','conversation_correct','exact_match','iou', 'f1', 'precision', 'recall'] + constraints
        writer = csv.DictWriter(csv_file, fieldnames=fieldnames, delimiter = ',')
        writer.writeheader()
        writer.writerows(rows)