Welcome    Usage    Browse    Find CID    Search     Log in

cM API Documentation

module.py

Go to the documentation of this file.
00001 #
00002 # Collective Mind
00003 #
00004 # See cM LICENSE.txt for licensing details.
00005 # See cM Copyright.txt for copyright details.
00006 #
00007 # Developer(s): (C) Grigori Fursin, started on 2011.09
00008 #
00009 
00010 # Should always be here
00011 ini={}
00012 cm_kernel=None
00013 
00014 # Local settings
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 #                 dt="%d"
00068               elif t=='float': 
00069                  dv=float(vv)
00070 #                 dt="%f"
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               # FGG: should move to more sophisticated statistical analysis from scipy or R
00094               # to detect if gaussian distribution or if there are spikes (usually mean that
00095               # there is some characterizing property missing that should be added to cM)
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               # Check if can use R
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                     # Reading files
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}

Generated on Wed May 28 02:49:01 2014 for Collective Mind Framework by DoxyGen 1.6.1
Concept, design and coordination: Grigori Fursin (C) 1993-2013