#!/usr/bin/env python3

import pickle
import pandas as pd
from prettytable import PrettyTable, PLAIN_COLUMNS

def save_object(obj, filename):
	with open(filename, 'wb') as output:
		pickle.dump(obj, output, protocol=2)

def load_object(filename):
	with open(filename, 'rb') as f:
		return pickle.load(f)

def print_hyperparameter_search_stats(t):
	print(" *** params: ",{ p:(v if len(v)<200 else [v[0],v[1],v[2],'...',v[-1]]) for p,v in t['params'].items()})
	print()
	#print(" *** peak_epochs_df ",type(t['peak_epochs_df']),len(t['peak_epochs_df'].index))
	#print(t['peak_epochs_df'].to_string())
	#print()
	print(" *** data ",type(t['data']),len(t['data']))
	print(t['data'].sort_values('val_acc',ascending=False).to_string())
	print()
	distinct_data=t['data']
	nunique = distinct_data.apply(pd.Series.nunique)
	cols_to_drop = nunique[nunique == 1].index
	distinct_data = distinct_data.drop(cols_to_drop, axis=1)
	print(nunique,cols_to_drop)
	print(" *** distinct data ",type(distinct_data),len(distinct_data))
	print(distinct_data.sort_values('val_acc',ascending=False).to_string())
	print()
	print(" *** details ",type(t['details']),len(t['details']))
	print(t['details'])
	print()

tt = load_object('example.pickle')

print(tt['details'])

for ttt in tt['round_history']:
	table = PrettyTable()
	table.set_style(PLAIN_COLUMNS)
	iterations=max([len(x) for x in ttt.values()])
	table.add_column('epoch',range(1,iterations+1))
	for key,val in sorted(ttt.items()):
	  table.add_column(key, sorted(val))

	print(table)

print_hyperparameter_search_stats(tt)



