import sys
import multiprocessing 
import pidly
import numpy as np

def setup_idl_environment(idl):	  
    """
    Setup test environment before all tests
    """
    # idl("paths = ['+/usr/local/itt/idl/external/']")
    # idl("paths = [ paths, '+/home/katkov/sci/IDL_libs/']")
    # idl("paths = [ paths, '+/usr/local/itt/idl/external/idlutils/goddard/pro/']")
    # idl("paths = [ paths, '+/usr/local/itt/idl/external/idlutils/pro/']")
    # idl("paths = [ paths, '+/usr/local/itt/idl/external/izi/']")
    # idl("paths = [ paths, '+/home/katkov/sci/IDL_libs/Spextool/'    ]")
    # idl("paths = [ paths, '+~/sci/IDL_libs/astron_v55/']")
    # idl("paths = [ paths, '+~/sci/IDL_libs/mpfit/']")
    # idl("paths = [ paths, '+~/sci/IDL_libs/libCOYOTE/']")
    # idl("paths = [ paths, '+~/sci/IDL_libs/ULySS/v1.3/']")
    # idl("paths = [ paths, '+~/sci/IDL_libs/izi/']")
    # idl("paths = [ paths, '+~/sci/IDL_libs/local_nburst/']")
    # idl("paths = [ paths, '+~/sci/IDL_libs/my_pro/']")
    # idl("paths = [ paths, '+~/sci/IDL_libs/scorpio_reduction/']")
    # idl("for i=0,n_elements(paths)-1 do !path=!path+':'+EXPAND_PATH(paths[i])")
    idl('.compile calc_errors_nonp_profile.pro')
    idl('.compile emis_line_fitting_nonpar.pro')
    idl('.compile adaptive_window.pro')
    idl('.compile calc_flux_losvd.pro')
    idl('.compile regularization_matrix.pro')
    


def f(x):
	idl = pidly.IDL()
	return idl.ev('{} * {}'.format(x,x))

def chunks(list,n):
	# chunksize = np.int( np.ceil( len(list)/float(ncpu) ) )
	# list_chunked = [ list[i:i + chunksize] for i in xrange(0, len(list), chunksize) ]
	for i in range(0, len(list), n):
		yield list[i:i + n]

def fit_lines_nonpar(args):
	idl = pidly.IDL()
	setup_idl_environment(idl)	
	idl_command = "emis_line_fitting_nonpar, '{}', cpu=[{},{}], /logging".format(args[2],args[0]+1,args[1])	
	idl( idl_command )
	# print idl_command
	# emis_line_fitting_nonpar,'flist_checks.txt',tablines='../../emission-line-fitting/emission_lines_sdss_air.tab',/plot
	idl.close()	
	return

def err_prof_mc_sim(args):
	idl = pidly.IDL()
	setup_idl_environment(idl)	
	idl_command = "emis_line_fitting_nonpar, '{}', cpu=[{},{}], /logging".format(args[2],args[0]+1,args[1])	
	idl( idl_command )
	# print idl_command
	# emis_line_fitting_nonpar,'flist_checks.txt',tablines='../../emission-line-fitting/emission_lines_sdss_air.tab',/plot
	idl.close()	
	return

def profile_decompose(args):
	idl = pidly.IDL()
	setup_idl_environment(idl)	
	idl_command = "sc_fit_profiles, '{}', cpu=[{},{}], /logging".format(args[2],args[0]+1,args[1])	
	idl( idl_command )
	# print idl_command
	# emis_line_fitting_nonpar,'flist_checks.txt',tablines='../../emission-line-fitting/emission_lines_sdss_air.tab',/plot
	idl.close()	
	return

if __name__ == '__main__':
	"""
    Setup test environment before all tests
    """
	proc_n = multiprocessing.cpu_count()
	
	p = multiprocessing.Pool( proc_n )

	file_list = '../agn_bh/fit_agn/flist_checks.txt'	
	proc_ids = range( proc_n )
	
	args = zip( proc_ids, [proc_n] * proc_n, [file_list] * proc_n )
	
	res = p.map(fit_lines_nonpar, args)
	# res = p.map(err_prof_mc_sim, args)
	# res = p.map(profile_decompose, args)
	# filename = sys.argv[1]	
    
	
