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 string
00017 import copy
00018 import json
00019 
00020 # ============================================================================
00021 def init(i):
00022     return {'cm_return':0}
00023 
00024 # ============================================================================
00025 def gen_docs(i):
00026 
00027     """
00028     Generate cM documentation
00029 
00030     Input:  {
00031             }
00032 
00033     Output: {
00034               cm_return  - return code >0 if error
00035             }
00036     """
00037 
00038     # Set default web style (either from kernel or from user)
00039     cm_default_web_uoa=''
00040     if 'cm_web_uoa' in i and i['cm_web_uoa']!='':
00041        cm_default_web_uoa=i['cm_web_uoa']
00042     else:
00043        cm_default_web_uoa=''
00044        if 'cm_default_web_uoa' in cm_kernel.ini['dcfg'] and cm_kernel.ini['dcfg']['cm_default_web_uoa']!='': 
00045           cm_default_web_uoa=cm_kernel.ini['dcfg']['cm_default_web_uoa']
00046 
00047     # Set and load
00048     if cm_default_web_uoa=='': cm_default_web_uoa=var_cm_cfg_default
00049 
00050     r=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['cm-web'],
00051                         'cm_action':'load',
00052                         'cm_data_uoa':cm_default_web_uoa})
00053     if r['cm_return']>0: return r
00054 
00055     web=r['cm_data_obj']['cfg']
00056 
00057     # Get documentation UOA
00058     du=cm_kernel.ini['dcfg'].get('cm_documentation_uoa','')
00059     if du=='':
00060        return {'cm_return':1, 'cm_error':'cm_documentation_uoa is not set in kernel configuration'}
00061 
00062     lp=[]
00063 
00064     # Find path to core
00065     ii={}
00066     ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['cm-module']
00067     ii['cm_action']='load'
00068     ii['cm_data_uoa']=ini['cfg']['cm_modules']['cm-core']
00069     r=cm_kernel.access(ii)
00070     if r['cm_return']>0: return r
00071 
00072     p=r['cm_path_module']
00073     lp.append(p)
00074 
00075     # Find path to internal data
00076     ii={}
00077     ii['cm_run_module_uoa']=ini['cm_module_uid']
00078     ii['cm_action']='load'
00079     ii['cm_data_uoa']=du
00080     r=cm_kernel.access(ii)
00081     if r['cm_return']>0: return r
00082 
00083     pt=r['cm_path']
00084 
00085     # Find path to source libs
00086     for q in ini['cfg']['source_libs']:
00087         ii={}
00088         ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['code.source']
00089         ii['cm_action']='load'
00090         ii['cm_data_uoa']=q
00091         r=cm_kernel.access(ii)
00092         if r['cm_return']==0: 
00093            p+=' '+r['cm_path']
00094            lp.append(r['cm_path'])
00095 
00096     p='"'+p+'"'
00097 
00098     # Generating docs for different directories
00099     cm_kernel.print_for_con('Path with modules to prepare documentation:')
00100     cm_kernel.print_for_con('   '+p)
00101     cm_kernel.print_for_con('')
00102     cm_kernel.print_for_con('Path for output:')
00103     cm_kernel.print_for_con('   '+pt)
00104     cm_kernel.print_for_con('')
00105 
00106     # Run script
00107     ii={}
00108     ii['cm_run_module_uoa']=ini['cfg']['cm_modules']['code']
00109     ii['cm_action']='run'
00110 
00111     ii['work_dir_module_uoa']=ini['cfg']['cm_modules']['os.script']
00112     ii['work_dir_data_uoa']=i['script_uoa_to_generate_doc']
00113 
00114     ii['run_script_uoa']=i['script_uoa_to_generate_doc']
00115     ii['run_script']='gen_docs'
00116 
00117     os.putenv('CM_DOC_PATH_INPUT','"'+p+'"')
00118     os.putenv('CM_DOC_PATH_OUTPUT',pt)
00119 
00120     r=cm_kernel.access(ii)
00121     if r['cm_return']>0: return r
00122 
00123     # Process all files (change url)
00124     pr='html'
00125     ext='.html'
00126     ext1='.out'
00127 
00128     s=du+'&cm_web_filename=html/'
00129 
00130     url0=web['http_prefix']+'cm_web_module_uoa=web&cm_web_action=show&cid=internal:'+s
00131     url=web['http_prefix']+'cm_menu=scenarios&cm_submenu=browse_cm_api&cid=internal:'+s
00132 
00133     pt1=os.path.join(pt,pr)
00134     dirList=os.listdir(pt1)
00135     for fn in dirList:
00136         p=os.path.join(pt1,fn)
00137         p1=os.path.join(pt1,fn+ext1)
00138 
00139         url1=url+fn+'#'
00140 
00141         print p
00142 
00143         if os.path.isfile(p) and p.endswith(ext):
00144            cm_kernel.print_for_con('Processing file '+p+' ...')
00145            f=file(p,'r')
00146            f1=file(p1,'wb')
00147 
00148            while True:
00149                line = f.readline()
00150                if not line: break
00151 
00152                line=line.replace(' href="#', ' href="#'+url1)
00153 
00154                if string.find(line, ' href="http')==-1:
00155                   line=line.replace(' href="', ' href="'+url)
00156                if string.find(line, ' src="http')==-1:
00157                   line=line.replace(' src="', ' src="'+url0)
00158                 
00159                f1.write(line)
00160 
00161            f1.close()
00162            f.close()
00163 
00164            os.remove(p)
00165 
00166            os.rename(p1,p)
00167 
00168     cm_kernel.print_for_con('')
00169     cm_kernel.print_for_con('Documentation was generated successfully!')
00170 
00171     return {'cm_return':0}
00172 
00173 # ============================================================================
00174 def gen_stats(i):
00175 
00176     """
00177     Generate cM statistics
00178 
00179     Input:  {
00180               (cm_repo_uoa) - repo where to create entry
00181             }
00182 
00183     Output: {
00184               cm_return  - return code >0 if error
00185             }
00186     """
00187 
00188     # Get statistics UOA
00189     su=cm_kernel.ini['dcfg'].get('cm_internal_statistics_uoa','')
00190     if su=='':
00191        return {'cm_return':1, 'cm_error':'cm_internal_statistics_uoa is not set in kernel configuration'}
00192 
00193     cru=i.get('cm_repo_uoa','')
00194 
00195     # Load statistics data with lock
00196     lock_uid=''
00197     d={}
00198     ii={}
00199     ii['cm_run_module_uoa']=ini['cm_module_uid']
00200     ii['cm_data_uoa']=su
00201     if cru!='': ii['cm_repo_uoa']=cru
00202     ii_copy=copy.deepcopy(ii)
00203     ii['cm_action']='load'
00204     ii['lock_acquire']='yes'
00205     r=cm_kernel.access(ii)
00206     if r['cm_return']==0: 
00207        d=r['cm_data_obj']['cfg']
00208        lock_uid=r['lock_uid']
00209 
00210     # Number of classes:
00211     dc=0
00212 
00213     r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['class'], 'cm_action':'list'})
00214     if r1['cm_return']==0: 
00215        dc=len(r1['cm_mixed'])
00216 
00217     d['number_of_classes']=str(dc)
00218 
00219     # Number of benchmarks:
00220     db=0
00221     db_unique_uid=[]
00222    
00223     rb=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['code.source'], 
00224                          'cm_action':'list',
00225                          'cm_classes_uoa':[i['benchmark_class_uoa']]})
00226     if rb['cm_return']==0: 
00227        # Check unique
00228        for q in rb['cm_mixed']:
00229            if q['cm_uid'] not in db_unique_uid:
00230               db_unique_uid.append(q['cm_uid'])
00231               db+=1
00232 
00233     d['number_of_benchmarks']=str(db)
00234 
00235     # Number of datasets:
00236     dd=0
00237 
00238     rd=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['dataset'], 
00239                          'cm_action':'list'})
00240     if rd['cm_return']==0: 
00241        dd=len(rd['cm_mixed'])
00242 
00243     d['number_of_datasets']=str(dd)
00244 
00245     # Number of combinations of benchmarks and datasets:
00246     dbd=0
00247     db_unique_uid=[]
00248 
00249     for q in rb['cm_mixed']:
00250         if q['cm_uid'] not in db_unique_uid:
00251            db_unique_uid.append(q['cm_uid'])
00252 
00253            di=q['cm_data_obj_cfg']
00254 
00255            found=False
00256            if len(di.get('run_cmds',{}))>0:
00257               for j in di['run_cmds']:
00258                   jj=di['run_cmds'][j]
00259                   if len(jj.get('dataset_classes_uoa',[]))>0:
00260                      for k in jj['dataset_classes_uoa']:
00261                          if k!='':
00262                             for l in rd['cm_mixed']:
00263                                 dx=l['cm_data_obj_cfg']
00264                                 if len(dx.get('cm_classes_uoa',[]))>0:
00265                                    dx1=dx['cm_classes_uoa']
00266                                    if k in dx1: 
00267                                       Found=True
00268                                       dbd+=1
00269 
00270            if not found: 
00271               # Count at least 1
00272               dbd+=1
00273 
00274     d['number_of_combinations_bench_dataset']=str(dbd)
00275 
00276     # Number of packages:
00277     dp=0
00278 
00279     r1=cm_kernel.access({'cm_run_module_uoa':ini['cfg']['cm_modules']['package'], 
00280                          'cm_action':'list'})
00281     if r1['cm_return']==0: 
00282        dp=len(r1['cm_mixed'])
00283 
00284     d['number_of_packages']=str(dp)
00285 
00286     diter=int(d.get('number_of_total_explored_points','0'))
00287     diter1=int(d.get('number_of_latest_explored_points','0'))
00288 
00289     if diter1!=0:
00290        diter+=diter1
00291        diter1=0
00292 
00293     d['number_of_total_explored_points']=str(diter)
00294     d['number_of_latest_explored_points']=str(diter1)
00295 
00296     # Update statistics
00297     ii=ii_copy
00298     ii['cm_array']=d
00299     ii['cm_action']='add'
00300     if cru!='': ii['cm_repo_uoa']=cru
00301     if lock_uid!='':
00302        ii['lock_uid']=lock_uid
00303        ii['cm_action']='update'
00304 
00305     r=cm_kernel.access(ii)
00306     if r['cm_return']>0: return r
00307 
00308     cm_kernel.print_for_con('')
00309     cm_kernel.print_for_con('Statistics was generated successfully!')
00310 
00311     return {'cm_return':0}
00312 
00313 # ============================================================================
00314 def view_stats(i):
00315 
00316     """
00317     View cM statistics (through web)
00318 
00319     Input:  {
00320             }
00321 
00322     Output: {
00323               cm_return  - return code >0 if error
00324             }
00325     """
00326 
00327     # Get web style
00328     if 'cfg' in cm_kernel.ini['web_style']: web=cm_kernel.ini['web_style']['cfg']
00329     else:
00330        return {'cm_return':1, 'cm_error':'web style is not defined'}
00331 
00332     # Get statistics UOA
00333     su=cm_kernel.ini['dcfg'].get('cm_internal_statistics_uoa','')
00334     if su=='':
00335        return {'cm_return':1, 'cm_error':'cm_internal_statistics_uoa is not set in kernel configuration'}
00336 
00337     # Load data
00338     ii={}
00339     ii['cm_run_module_uoa']=ini['cm_module_uid']
00340     ii['cm_action']='load'
00341     ii['cm_data_uoa']=su
00342     ii['cm_admin']='yes'
00343     r=cm_kernel.access(ii)
00344     if r['cm_return']>0: return r
00345     d=r['cm_data_obj']['cfg']
00346 
00347 #    c1='<span style="color: red; font-size: 14pt"><i>'
00348     c1='<span style="color: red;"><i>'
00349     c2='<i></span>'
00350 
00351     href='<a href="'+web['http_prefix']
00352 
00353     cm_kernel.print_for_web('<small><table border="0" cellpadding="0" cellspacing="0">')
00354 
00355     cm_kernel.print_for_web('</td></tr><tr><td><B>Number of shared codelets and benchmarks:</B></td><td>')
00356     cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['code.source']+'" target="_blank">')
00357     cm_kernel.print_for_web(c1+d.get('number_of_benchmarks','')+c2)
00358     cm_kernel.print_for_web('</a>')
00359 
00360     cm_kernel.print_for_web('</td></tr><tr><td><B>Number of shared datasets:</B></td><td>')
00361     cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['dataset']+'" target="_blank">')
00362     cm_kernel.print_for_web(c1+d.get('number_of_datasets','')+c2)
00363     cm_kernel.print_for_web('</a>')
00364 
00365     cm_kernel.print_for_web('</td></tr><tr><td><B>Number of shared tools:</B></td><td>')
00366     cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['package']+'" target="_blank">')
00367     cm_kernel.print_for_web(c1+d.get('number_of_packages','')+c2)
00368     cm_kernel.print_for_web('</a>')
00369 #    cm_kernel.print_for_web('</td></tr><tr><td></td><td>')
00370 #    cm_kernel.print_for_web('&nbsp;')
00371 
00372     cm_kernel.print_for_web('<tr><td><B>Number of classes:</B></td><td>')
00373     cm_kernel.print_for_web(href+'&cm_menu=browse&browse_module_uoa='+ini['cfg']['cm_modules']['class']+'" target="_blank">')
00374     cm_kernel.print_for_web(c1+d.get('number_of_classes','')+c2)
00375     cm_kernel.print_for_web('</a>')
00376 
00377 
00378     cm_kernel.print_for_web('</td></tr><tr><td><B>Number of combinations of benchmarks and datasets:</B></td><td>')
00379     cm_kernel.print_for_web(c1+d.get('number_of_combinations_bench_dataset','')+c2)
00380 #    cm_kernel.print_for_web('</td></tr><tr><td></td><td>')
00381 #    cm_kernel.print_for_web('&nbsp;')
00382 
00383     cm_kernel.print_for_web('</td></tr><tr><td><B>Number of total explored points in space:</B></td><td>')
00384     cm_kernel.print_for_web(c1+d.get('number_of_total_explored_points','')+c2)
00385 
00386     cm_kernel.print_for_web('</td></tr><tr><td><B>Number of latest explored points in space:</B></td><td>')
00387     cm_kernel.print_for_web(c1+d.get('number_of_latest_explored_points','')+c2)
00388     cm_kernel.print_for_web('</td></tr><tr><td></td><td>')
00389 
00390 
00391     cm_kernel.print_for_web('</td></tr></table></small>')
00392 
00393     return {'cm_return':0}

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