module.py
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 ini={}
00012 cm_kernel=None
00013
00014
00015 import os
00016 import csv
00017 import json
00018
00019
00020 def init(i):
00021 return {'cm_return':0}
00022
00023
00024 def process(i):
00025 """
00026 Run collective tuning pipeline
00027
00028 Input: {
00029 state - init state
00030 (state1) - state where to record characteristics - if empty, use 'state'
00031 desc - state description
00032 }
00033
00034 Output: {
00035 cm_return - if =0, success
00036 state - final state
00037 state1 - state1
00038 }
00039 """
00040
00041 state=i.get('state',{})
00042 desc=i.get('desc',{})
00043
00044 state1=state
00045 if 'state1' in i: state1=i.get('state1',{})
00046
00047 cm_kernel.print_for_con('')
00048 cm_kernel.print_for_con('********************* Performing statistical analysis of characteristics ...')
00049 cm_kernel.print_for_con('')
00050
00051 for q in desc:
00052 v=desc[q]
00053
00054 if v.get('characteristic','')=='yes' and v.get('stat_characteristic','')=='yes':
00055
00056 rg=cm_kernel.get_value_by_flattened_key({'cm_array':state, 'cm_key':q})
00057 if rg['cm_return']>0: return rg
00058 vv=rg['cm_value']
00059
00060 t=v.get('type','')
00061 if vv!=None and vv!='' and (t=='integer' or t=='float'):
00062
00063 cm_kernel.print_for_con('Processing '+q+' ...')
00064
00065 if t=='integer':
00066 dv=int(vv)
00067
00068 elif t=='float':
00069 dv=float(vv)
00070
00071
00072 q1='##cm_stat_characteristics'+q[1:]
00073 rg=cm_kernel.get_value_by_flattened_key({'cm_array':state1, 'cm_key':q1})
00074 if rg['cm_return']>0: return rg
00075 var=rg['cm_value']
00076
00077 if var==None: var={}
00078 if 'number' not in var: var['number']='0'
00079 if 'min' not in var: var['min']='-1'
00080 if 'max' not in var: var['max']='-1'
00081 if 'all' not in var: var['all']=[]
00082 if 'delta' not in var: var['delta']='0'
00083 if 'delta_percent' not in var: var['delta_percent']='0'
00084 if 'nortest_lillie' not in var: var['nortest_lillie']={}
00085 if 'nortest_cvm' not in var: var['nortest_cvm']={}
00086 if 'nortest_pearson' not in var: var['nortest_pearson']={}
00087
00088 dmin=float(var['min'])
00089 dmax=float(var['max'])
00090 ddelta=float(var['delta'])
00091 ddeltap=float(var['delta_percent'])
00092
00093
00094
00095
00096
00097 if dmin==-1: dmin=dv
00098 elif dv<dmin: dmin=dv
00099
00100 if dmax==-1: dmax=dv
00101 elif dv>dmax: dmax=dv
00102
00103 ddelta=dmax-dmin
00104
00105 if dmin!=0: ddeltap=ddelta/dmin
00106
00107 var['min']=str(dmin)
00108 var['max']=str(dmax)
00109 var['all'].append(vv)
00110 var['delta']=str(ddelta)
00111 var['delta_percent']="%.4f" % ddeltap
00112 var['number']=str(len(var['all']))
00113
00114
00115 if cm_kernel.ini['dcfg'].get('cm_use_r','')=='yes':
00116 if len(var['all'])>7:
00117 cm_kernel.print_for_con('')
00118 cm_kernel.print_for_con('Starting R script for normality test ...')
00119
00120 r=cm_kernel.gen_uid({})
00121 if r['cm_return']>0: return r
00122 cm_r_filename='tmp-r-filename-'+r['cm_uid']+'.dat'
00123
00124 fx=file(cm_r_filename,'w')
00125 for a in var['all']:
00126 fx.write(str(a)+'\n')
00127 fx.close()
00128
00129 os.putenv('CM_R_FILENAME', cm_r_filename)
00130
00131 m=os.path.join(ini['path'], ini['cfg']['cm_r_normtest'])
00132
00133 s='R < '+m+' --vanilla'
00134
00135 os.system(s)
00136
00137 os.remove(cm_r_filename)
00138
00139
00140 if os.path.isfile(cm_r_filename+'.1.out'):
00141 f=open(cm_r_filename+'.1.out', 'rb')
00142 c=csv.DictReader(f, delimiter=',')
00143 for a in c:
00144 for b in a:
00145 var['nortest_lillie'][b]="%.4f" % float(a[b])
00146 f.close()
00147 os.remove(cm_r_filename+'.1.out')
00148 if os.path.isfile(cm_r_filename+'.2.out'):
00149 f=open(cm_r_filename+'.2.out', 'rb')
00150 c=csv.DictReader(f, delimiter=',')
00151 for a in c:
00152 for b in a:
00153 var['nortest_cvm'][b]="%.4f" % float(a[b])
00154 f.close()
00155 os.remove(cm_r_filename+'.2.out')
00156 if os.path.isfile(cm_r_filename+'.3.out'):
00157 f=open(cm_r_filename+'.3.out', 'rb')
00158 c=csv.DictReader(f, delimiter=',')
00159 for a in c:
00160 for b in a:
00161 var['nortest_pearson'][b]="%.4f" % float(a[b])
00162 f.close()
00163 os.remove(cm_r_filename+'.3.out')
00164
00165 rx=cm_kernel.set_value_by_flattened_key({'cm_array':state1, 'cm_key':q1, 'cm_value':var})
00166 if rx['cm_return']>0: return rx
00167
00168 return {'cm_return':0, 'state':state, 'state1':state1}