source: CMIP6dreqbuild/trunk/srcMisc/dreq_consol_tables.py @ 374

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/srcMisc/dreq_consol_tables.py@374
Revision 374, 22.3 KB checked in by mjuckes, 5 years ago (diff)

update

Line 
1"""Parsing adjusted CMIP5 tables.
2"""
3import string, shelve, uuid
4from fcc_utils2 import snlist
5import xlrd, string, shelve, os, re, sys, stat
6import collections, hashlib
7import xlutils, xlwt
8import xlutils.copy
9####
10import dreq_cfg
11from utils_wb import wbcp, workbook, uniCleanFunc
12
13vdate = '20150827'
14
15nt__deckrq = collections.namedtuple( 'dckrq', ['control','AMIP','abrupt4xCO2','rq_1pctCO2','historical'] )
16nt__grptbl = collections.namedtuple( 'grptbl', ['grp','var','srcTable','freq','description','shape','levels','timeProc','mask','priority','mip','id'] )
17nt__newtbl = collections.namedtuple( 'newtbl', ['var','sn','stat','grid','units','long_name','description','priority','obs','mip','id'] )
18dd_rq = collections.defaultdict( dict )
19dd_tbl = collections.defaultdict( int )
20
21def md5sum(filename, blocksize=65536):
22    hash = hashlib.md5()
23    with open(filename, "r+b") as f:
24        for block in iter(lambda: f.read(blocksize), ""):
25            hash.update(block)
26    return hash.hexdigest()
27
28#### shelve to record file access times and checksums
29shr1 = shelve.open( 'shref01/shr1_md5' )
30
31class tupsort:
32   def __init__(self,k=0):
33     self.k = k
34   def cmp(self,x,y):
35     return cmp( x[self.k], y[self.k] )
36
37def uniquify( ll ):
38  ll.sort()
39  l0 = [ll[0],]
40  for l in ll[1:]:
41    if l != l0[-1]:
42      l0.append(l)
43  return l0
44
45def getRowValues( ll, minLen=0 ):
46  oo = []
47  for i in ll:
48    oo.append( i.value )
49  if len(oo) >= minLen:
50    return oo[:minLen]
51  for i in range(minLen+1):
52    if len(oo) == minLen:
53      return oo
54    oo.append( '' )
55  return oo
56
57
58clabs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
59def clab(n):
60  i = n/26
61  assert i < 26, 'Not ready for row number greater than 26*26'
62  if i == 0:
63    return clabs[n]
64  else:
65    return clabs[i-1] + clabs[ n - i*26]
66
67def getRow(sht):
68  ee = {}
69  for i in range(sht.nrows):
70    if sht.row(i)[0].ctype == 2 and str( sht.row(i)[0].value ) != '0.0':
71      l = map( lambda x: str( x.value ), sht.row(i) )
72      k = l[5]
73      try:
74        ee[k] = l
75      except:
76        print l
77        raise
78  return ee
79   
80def outvSer( ov ):
81  ll = []
82  for i in ov:
83    ll.append( '%s|%s|%s' % tuple( map( str, i) ) )
84  return string.join(ll, '; ' )
85def joinRec( rl, tab='\t', omit=[],lmax=None ):
86    l1 = len(rl)
87    if lmax != None and l1 > lmax:
88      l1 = lmax
89    rl0 = []
90    for i in range(l1):
91      if i not in omit:
92        rl0.append(string.strip(str(rl[i])))
93    return string.join( map( str, rl0), tab )
94 
95
96def lennbl(ll):
97  i = 0
98  ii = 0
99  for l in ll:
100    i+= 1
101    if l != '':
102      ii = i
103  return ii
104
105def  matchVals( thisv, valset ):
106  ll1 = []
107  ll2 = []
108  lk0 = []
109  kk = 0
110  for vals in valset:
111    l1 = min( [lennbl(thisv), lennbl(vals)] )
112    l2 = max( [lennbl(thisv), lennbl(vals)] )
113    ll = []
114    for i in range(l1):
115      ll.append( vals[i] == thisv[i] )
116    for i in range(l2-l1):
117      ll.append(False)
118    if all(ll):
119      return ll
120    k = 0
121    for l in ll:
122      if l:
123        k+=1
124    if ll[0]:
125      lk0.append( kk )
126     
127    ll1.append(k)
128    ll2.append(ll)
129    kk += 1
130  k0 = max( ll1 )
131  if len(lk0) > 0:
132    k0 = lk0[0]
133    return ll2[ k0 ]
134  return ll2[ ll1.index(k0) ]
135   
136class mipTable(object):
137
138  def __init__(self,id):
139     self.vars = collections.defaultdict( list )
140
141class s0(object):
142  def __init__(self):
143    self.a = collections.defaultdict( list )
144class s1(object):
145  def __init__(self):
146    self.a = collections.defaultdict( s0 )
147
148class rqsummary(object):
149  __doc__ = """Create a request summary table, by MIP and variable table.
150Creates a list of default dictionaries, one for each table. An entry for each MIP in each dictionary.
151"""
152
153  def __init__(self,exptInfo=None):
154    self.tablist = []
155    self.tabindx = {}
156    self.mips = collections.defaultdict( int )
157    self.vars = collections.defaultdict( list )
158    self.t = {}
159    self.records = []
160    self.recordProv = {}
161    self.exptInfo = exptInfo
162    self.ref1 = collections.defaultdict( s1 )
163    for k in shr1.keys():
164      r = shr1[k]
165## index on mip/file name/md5
166      self.ref1[r[-1]].a[r[0]].a[k] = r
167    for k in self.ref1.keys():
168      for k1 in self.ref1[k].a.keys():
169        if len( self.ref1[k].a[k1].a.keys() ) > 1:
170          ll = {}
171          for k2 in self.ref1[k].a[k1].a.keys():
172            ee[  self.ref1[k].a[k1].a[k2][2] ] = k2
173          ks = ee.keys()
174          ks.sort()
175          self.ref1[k].a[k1].latest = self.ref1[k].a[k1].a[ ks[-1] ]
176        else:
177          self.ref1[k].a[k1].latest  =  self.ref1[k].a[k1].a[ self.ref1[k].a[k1].a.keys()[0] ]
178
179  def addTab(self,tab):
180    self.t[tab] = mipTable( tab )
181
182  def add(self,mip,path,tab,tabmode='uid'):
183    self.tab = tab
184## rq will add a reference to parent
185    ##print '######',mip, path, tab
186    return rq(mip,path,parent=self,tab=tab,tabmode=tabmode)
187
188  def addItem( self, mip, tab, nn ):
189    if not self.tabindx.has_key( tab ):
190      self.tabindx[tab] = len(self.tablist)
191      self.tablist.append( collections.defaultdict( int ) )
192    ix = self.tabindx[tab]
193    self.tablist[ix][mip] = nn
194    self.mips[mip] += 1
195
196  def checkVars(self):
197    keys = self.vars.keys()
198    keys.sort()
199    for k in keys:
200      if len( self.vars[k] ) == 1:
201        print k, 'singleton'
202      else:
203        li = self.vars[k]
204## getting a bit intricate here -- 3rd element is index of record row
205        ll = [self.records[li[0][2]], ]
206        aa = collections.defaultdict( list )
207        aa[0].append[0]
208       
209  def prep(self,mode='vars',tab=None):
210    if tab != None:
211      self.tab = tab
212    kk = 0
213    mips = self.mips.keys()
214    mips.sort()
215    keys = self.tabindx.keys()
216    keys.sort()
217    self.oorecs = []
218    if mode == 'vars':
219      keys = self.t[self.tab].vars.keys()
220      keys.sort()
221      for k in keys:
222        rec = [k,]
223        ee1 = collections.defaultdict( list )
224        ee2 = {}
225        for t in self.t[self.tab].vars[k]:
226          k0 = joinRec( self.records[t[2]], tab=',', omit=[7,16,23] )
227          ee1[k0].append( t )
228###
229### differences in records found as multiple entries in collection here ...
230###
231        if len(ee1.keys()) <= 1:
232          pass
233          ##print 'INFO.003: NO CHANGE AT %s (%s)' % (k,len(self.t[self.tab].vars[k]) )
234        else:
235          print 'INFO.003: DUPLICATES AT %s (%s)' % (k,len(ee1.keys()) )
236          for k1 in ee1.keys():
237              for t in ee1[k1]:
238                ee2[t[0]] = k1
239          k1 = ee1.keys()
240          ee3 = collections.defaultdict( list )
241          for t in self.t[self.tab].vars[k]:
242            ee3[k1.index( ee2[t[0]] ) ].append( '%s[%s]' % (t[0],t[1]) )
243            rec.append( '%s[%s]{%s}' % (t[0],t[1],k1.index( ee2[t[0]]) ) )
244          ##self.oorecs.append(rec)
245          for kkk in k1:
246            ix = ee1[kkk][0][2]
247            ik = k1.index(kkk)
248            rec = [k, string.join(ee3[ik],';'),]   + list(self.records[ix])
249            self.oorecs.append(rec)
250         
251           
252  def showXls(self,wb,r0=3,offset=0):
253    r = r0
254    thisStj = 2
255    for rec in self.oorecs:
256      i = offset
257      for item in rec:
258        wb.putValue2( r,i, item )
259        i+= 1
260      thisStj = 5 - thisStj
261      r+= 1
262   
263  def show(self,oo,mode='vars',tab=None):
264    if tab != None:
265      self.tab = tab
266    kk = 0
267    mips = self.mips.keys()
268    mips.sort()
269    keys = self.tabindx.keys()
270    keys.sort()
271    if mode == 'vars':
272      for rec in self.oorecs:
273            srec = joinRec( rec) + '\t' 
274            oo.write( srec + '\n' )
275
276    elif mode == 'oldvars':
277      keys = self.t[self.tab].vars.keys()
278      keys.sort()
279      for k in keys:
280        rec = '%s\t' % k
281        ee1 = collections.defaultdict( list )
282        ee2 = {}
283        for t in self.t[self.tab].vars[k]:
284          k0 = joinRec( self.records[t[2]], tab=',', omit=[7,16,23] )
285          ee1[k0].append( t )
286        if len(ee1.keys()) > 1:
287          for k1 in ee1.keys():
288              for t in ee1[k1]:
289                ee2[t[0]] = k1
290          k1 = ee1.keys()
291          for t in self.t[self.tab].vars[k]:
292            rec += '%s[%s]{%s}\t' % (t[0],t[1],k1.index( ee2[t[0]]) )
293          oo.write( rec + '\n' )
294          for kkk in k1:
295            ix = ee1[kkk][0][2]
296            rec = '--%s--\t' % k1.index(kkk) + joinRec( self.records[ix] ) + '\t' 
297            oo.write( rec + '\n' )
298    else:
299     oo.write( ',' + string.join(mips, ',') + ',\n' )
300     for k in keys:
301      r = []
302      ix = self.tabindx[k]
303      for m in mips:
304        r.append( self.tablist[ix][m] )
305      if max(r) > 0:
306        rec = '%s,' % k
307        for i in r:
308          rec += '%s,' %  i
309        oo.write( rec + '\n' )
310
311#dd_rq = collections.defaultdict( dict )
312#dd_tbl = collections.defaultdict( int )
313class rq(object):
314
315  def __init__(self, mip,path, parent=None,tab=u'Omon',tabmode='uid' ):
316
317    self.mip = mip
318    self.parent = parent
319    self.nn = 0
320    self.fn = string.split( path, '/' )[-1]
321    stt = os.stat( path )
322    self.ctime = stt[stat.ST_CTIME]
323    self.fsize = stt[stat.ST_SIZE]
324    print '>>>> %s: %s' % (self.fn,self.ctime)
325    if self.parent.ref1[mip].a.has_key(self.fn):
326       tt = self.parent.ref1[mip].a[self.fn].latest
327       if self.ctime == tt[2] and self.fsize == tt[3]:
328         print '%s unchanged' % self.fn
329         md5 = tt[4]
330       else:
331         md5 = md5sum( path )
332         if md5 == tt[4]:
333           print 'md5 unchanged: %s' % self.fn
334         else:
335           shr1[md5] = (self.fn,path,self.ctime, self.fsize, md5,mip )
336    else:
337       md5 = md5sum( path )
338       shr1[md5] = (self.fn,path,self.ctime, self.fsize, md5,mip )
339    self.md5 = md5
340    self.wk1 = wbcp( inbook=path )
341    if tab in  self.wk1.sns:
342      self.tab = tab
343      if tabmode == 'tab' or mip == 'CMIP5':
344            self.tabid = tab
345      else:
346            self.tabid = '%s.%s' %  (mip,tab)
347      self.wk1.focus( tab)
348      if not self.parent.t.has_key(self.tabid):
349        self.parent.addTab(self.tabid)
350      self.ok = self.parse01()
351    else:
352      self.ok = False
353
354  def parse01(self):
355
356    ee1 = collections.defaultdict( list )
357    for j in range(3,self.wk1.currentSi.nrows):
358      if self.wk1.currentSi.row(j)[0].ctype == 2:
359        v = string.strip( str( self.wk1.currentSi.row(j)[5].value ) )
360        ee1[v].append(j)
361    for j in range(3,self.wk1.currentSi.nrows):
362      rv = map( lambda x: x.value, self.wk1.currentSi.row(j) )
363      lr0 = len(rv)
364      for i in range(10):
365        if len(rv) < 26:
366           rv.append('')
367      if self.wk1.currentSi.row(j)[0].ctype == 2:
368        v = string.strip( str( self.wk1.currentSi.row(j)[5].value ) )
369        if v not in ['0.0','']:
370          if len(ee1[v]) > 1:
371             v += '__%s' % ['a','b'][ee1[v].index(j)]
372          ixr = len(self.parent.records )
373## add record
374          self.parent.records.append( tuple(rv[1:]) )
375          kr = len( self.parent.records )
376          self.parent.recordProv[kr] = self.md5
377          p = int( rv[0] + 0.001 )
378          if lr0 > 24:
379            if self.wk1.currentSi.row(j)[24].ctype == 2:
380              yv = int( rv[24] + 0.001 )
381              assert yv in [0,1,2], 'Invalid value in column Y, j=%s,v=%s' % (j,v)
382              if yv == 0:
383                p = None
384              elif yv == 2:
385                p = 1
386            elif rv[24] != '':
387              print 'WARNING[1]:', self.mip, v, p, rv[24]
388         
389          if p != None:
390            self.parent.t[self.tabid].vars[v].append( (self.mip,p,ixr) ) 
391            self.nn += 1
392
393    return True
394
395class main(object):
396  def __init__(self):
397    kk=3
398    self.idx = 0
399    self.sh = shelve.open( 'dreq_consol_tables_shelve_v%s' % vdate, 'n' )
400    self.shnv = shelve.open( 'dreq_consol_tables_nv_shelve_v%s' % vdate, 'n' )
401    self.shold = shelve.open( 'dreq_consol_tables_old_shelve_v%s' % vdate, 'n' )
402
403    base = '/home/martin/2014/wip/dreq/'
404    self.dir0 = '/home/martin/2014/wip/dreq/input/'
405    file = 'PMIP/CMIP6DataRequestCompilationTemplate_20141218_PMIP_v150228_final.xls'
406    file = 'C4MIP/CMIP6DataRequestCompilationTemplate_C4MIP_06March2015_submitted.xls'
407    fileTmpl = 'CMIP6DataRequestCompilationTemplate_20141218.xls'
408    self.newVars = 'CMIP6DataRequest_ConsolidatedNewVariables_20150708.xls'
409    self.nvd = {}
410
411    wk0 = wbcp( inbook=base+fileTmpl )
412    self.cfg = dreq_cfg.rqcfg()
413    wk0.focus( u'Experiments')
414    mlist = collections.defaultdict( list )
415    for i in range(2,wk0.currentSi.nrows):
416      mip = str(wk0.currentSi.row(i)[3].value)
417      vals = map( lambda x: x.value, wk0.currentSi.row(i) )
418      if mip != '':
419        mlist[mip].append( vals )
420   
421    self.mips = mlist.keys()
422    self.mips.sort()
423   
424    mipTrans ={ 'geoMIP':'GeoMIP' }
425    diagMips = ['DynVar','SIMIP']
426    k2 = self.cfg.ff.keys()
427    k2.sort()
428    nn = 0
429    for k in k2:
430      k = mipTrans.get( k,k)
431      if k not in self.mips and k not in diagMips:
432         print '%s not found' % k
433         nn += 1
434    assert nn == 0, 'MIP naming error?'
435
436    exptList = '/home/martin/Documents/CMIP6_ExpermentList_draft01April2015.xls'
437    wke = wbcp( exptList )
438    wke.focus( 'Experiments' )
439    expgs = collections.defaultdict( int )
440    expgsEns = collections.defaultdict( int )
441    expgsYpe = collections.defaultdict( int )
442    for k in range(2,wke.currentSi.nrows):
443      vals = map( lambda x: x.value, wke.currentSi.row(k) )
444      g = string.strip( vals[1] )
445      if g[:5] == 'DAMIP':
446        print '######',g,vals[12],vals[13]
447      expgs[g] += vals[13]
448      expgsEns[g] = vals[12]
449
450    for k in expgs.keys():
451      if expgsEns[k] == 0:
452        expgsYpe[k] = 0
453      else:
454        try:
455          expgsYpe[k] = expgs[k]/expgsEns[k]
456        except:
457          print k, expgs[k], expgsEns[k]
458          raise
459   
460    self.rqs= rqsummary(exptInfo=(expgs,expgsEns,expgsYpe))
461    self.exptInfo=(expgs,expgsEns,expgsYpe)
462
463  def loadNewVars(self):
464    assert os.path.isfile( self.newVars ), '%s not found' % self.newVars
465    wb = workbook(self.newVars)
466    sh = wb.book.sheet_by_name( 'New variables' )
467    oo = open( '/tmp/newvars.txt', 'w' )
468    for i in range(3,sh.nrows):
469      r = map( lambda x: x.value, sh.row(i) )
470      try:
471        oo.write( string.join(map(str,r) ) + '\n' )
472      except:
473        oo.write( r[0] + '  --- rest missing --- \n' )
474      if r[0] != '' and r[4] != '':
475        v = string.strip( str( r[4] ) )
476        if v[0] != '#':
477          bits = string.split(v,' ')
478          if len(bits) == 1:
479            m = str( r[0] )
480            p = 0
481            try:
482              if m == 'LUMIP':
483                p = int( r[12] )
484              else:
485                p = int( r[11] )
486            except:
487              print '!!!!!! Failed to read priority: ',v,m
488            if v[-2:] == '**':
489               v = v[:-2]
490            elif v[-1] == '!':
491               v = v[:-1]
492            if self.nvd.has_key(v):
493              print '#########',v,self.nvd[v],m,p
494            self.nvd[v] = [p,] + r
495    for v in self.nvd.keys():
496        k = str( uuid.uuid1() )
497        self.shnv[k] = self.nvd[v][:] + [k,]
498    oo.close()
499
500  def groups(self, vl3=None):
501    print self.cfg.ee.keys()
502    omit = ['ALL VARIABLES', 'Objectives','Experiments','Experiment Groups','Request scoping','New variables','__lists__']
503    keys = self.cfg.ee.keys()
504    keys.sort()
505    ee = {}
506    self.glist = []
507    for k in keys:
508        fn = self.cfg.ee[k]
509        path = '%s%s/%s' % (self.dir0,k,fn)
510        wb = workbook( path )
511        ss = []
512        for s in wb.sns:
513          if s not in omit:
514            ss.append(s)
515        for s in ss:
516          e1 = collections.defaultdict( int )
517          if s[:5] != 'CMIP5':
518           sh = wb.book.sheet_by_name( s ) 
519           ll = []
520           for i in range(sh.nrows):
521             thisr = sh.row(i)
522             tv = thisr[0].value
523             if tv[:10] == 'Short name':
524               ll.append(i)
525           assert len(ll) in [1,2], 'Could not parse sheet  %s, %s, %s' % (path,k,s)
526           if len(ll) == 1:
527## nt__grptbl = collections.namedtuple( 'grptbl', ['grp','var','srcTable','freq','description','shape','levels','timeProc','mask'] )
528             iv = 1
529             it = 0
530           else:
531             print '*************',k,s
532             iv = 0
533             it = -1
534             tv = sh.row(2)[1].value
535           irsh = 5
536           for i in range(ll[-1]+1,sh.nrows):
537             thisr = sh.row(i)
538             if iv == 1:
539                 ##self.ntr = nt__grptbl._make( getRowValues( thisr, minLen=9 ) + [105,k,''] )
540                lll = getRowValues( thisr, minLen=9 ) + [105,k,'']
541             else:
542                lll = getRowValues( thisr, minLen=10 ) + [k,'']
543                lll[1] = lll[0]
544                lll[0] = tv
545             if it >= 0:
546               tv = thisr[it].value
547             v = thisr[iv].value
548             bits = string.split(v, ' ')
549             if len(bits) > 1:
550               v = bits[0]
551             t = thisr[2].value
552             if t[:6] == "CMIP5_":
553               t = t[6:]
554             if len(string.split(t, ' ')) > 1:
555               t2 = string.split(t, ' ')[1]
556               t = string.split(t, ' ')[0]
557             else: 
558               t2 = None
559             if t in ['OImon','day','Omon'] and t2 != None:
560               v2 = string.strip(t2)[1:-1]
561             else:
562               v2 = None
563
564             if v == '*':
565               if t in self.cmip5sns:
566                 print 'INFO[1a]: bulk copy of external sheet %s' % t
567               elif t in ss:
568                 print 'INFO[1b]: bulk copy of internal sheet %s' % t
569
570             elif len(v) == 0 or v[0] == '#':
571               pass
572             else:
573
574               if vl3 != None:
575                 if vl3.has_key(v):
576                   id = vl3[v][7]
577                 elif v2 != None and vl3.has_key(v2):
578                   id = vl3[v2][7]
579                 else:
580                   id = None
581
582               if t in self.cmip5sns:
583                 p = 9
584                 if self.rqs.t.has_key(t):
585                   if self.rqs.t[t].vars.has_key(v):
586                     p = self.rqs.t[t].vars[v][0][1]
587                   elif v2 != None and self.rqs.t[t].vars.has_key(v2):
588                     p = self.rqs.t[t].vars[v2][0][1]
589                     ##print '%s old name for %s' % (v2,v)
590                   else:
591                     p = 8
592                 
593               else:
594                 if string.lower(t)[:3] == 'new' or t == '':
595                   p = self.nvd.get( v, [0,7] )[1]
596                   if p == 7:
597                     p = self.nvd.get( v + '!', [0,7] )[1]
598                   if p != 7:
599                     self.idx += 1
600                     id = 'mv.010.%4.4i' % self.idx
601               if id == None and p < 7:
602                  print 'WARNING[1]: no id for %s' % v
603               elif id == None:
604                  print 'WARNING[2]: no id, no variable defn for %s' % v
605               elif p > 6:
606                  print 'WARNING[3.%s]: no variable defn for %s ' % (p,v)
607               ts = string.strip(thisr[irsh].value)
608               if string.strip(tv) != '':
609                 e1['%s:%s' % (ts,p)] += 1
610
611### complete ntr and save to shelf.
612             lll[9] = p
613             self.ntr = nt__grptbl._make( lll )
614             ku = str( uuid.uuid1() )
615             lll[11] = ku
616             self.sh[ku] = tuple( lll )
617###   MIP, group, size, dictionary -- # items in each shape.
618           self.glist.append( (k, s, ll, e1) )
619
620  def run1(self,nmip=0,kmip=0,clear=False,tabmode='uid'):
621    if clear:
622      self.rqs.t = {}
623    self.cfg.ff['CMIP5'] = ['/data/work/documents/CMIP5_standard_output.xls']
624    wb = workbook( self.cfg.ff['CMIP5'][0] )
625    wb.sns.sort()
626    omit1 = [u'dims', u'general', u'other output',u'CFMIP output']
627    sns = []
628    for s in wb.sns:
629      if s not in omit1:
630        sns.append(s)
631
632    self.cmip5sns = sns[:]
633    k2 = self.cfg.ff.keys()
634    k2.sort()
635    k2.append( 'CMIP5' )
636
637    amips = ['CMIP5'] + self.mips
638    if nmip > 0:
639       amips = amips[kmip:kmip+nmip]
640    for s in sns:
641     for k in amips:
642      if k in k2:
643        for fn in self.cfg.ff[k]:
644          if k == 'CMIP5':
645            path = fn
646          else:
647            path = '%s%s/%s' % (self.dir0,k,fn)
648          thisrq = self.rqs.add( k, path,s,tabmode=tabmode )
649          if thisrq.ok:
650            print 'INFO.002:',k,path,s,thisrq.ok, thisrq.nn
651          else:
652            print 'WARN.002:',k,path,s,thisrq.ok
653
654  def run2(self):
655    init=False
656    if init:
657      wbx = wbcp( '/home/martin/Documents/MIPTableSheetTemplate.xls' )
658    else:
659      wbx = wbcp( 'CMIP6_DataRequest_CMIP5changes_blank.xls' )
660
661    print self.rqs.t.keys()
662    for s in wbx.sns:
663     if s != u'Template':
664      keys = self.rqs.t[s].vars.keys()
665      keys.sort()
666      ##for k in keys:
667         ##print k, self.rqs.t[s].vars[k]
668      self.rqs.prep( tab=s )
669      print 'INFO.001:', s, len(self.rqs.oorecs)
670      if len(self.rqs.oorecs) > 0:
671         if init:
672           wbx.copy_sheet( 0, s )
673           wbx.focus( s, old='Template' )
674         else:
675           wbx.focus( s )
676           self.rqs.showXls(wbx,r0=2,offset=0)
677   
678         for i in range( min( 5, len( self.rqs.oorecs) ) ):
679           print self.rqs.oorecs[i]
680   
681         oo = open( 'dreq2/request2_%s.csv' % s, 'w' )
682         self.rqs.show( oo, tab=s )
683         oo.close()
684
685    wbx.write( 'CMIP6_DataRequest_CMIP5changes.xls' )
686
687vl3 = {}
688##wb3 = workbook( 'vlsc5b_v20150714.xls' )
689wb3 = workbook( 'vlsc5b_v20150826.xls' )
690sh = wb3.book.sheet_by_name( 'Sheet1' )
691m = main()
692
693opt = 2
694if opt == 1:
695  for i in range(sh.nrows):
696    r = map( lambda x: string.strip(str(uniCleanFunc(x.value))), sh.row(i) )
697    if len(r) < 9 or r[8] == '':
698      vl3[r[1]] = tuple( r[:8] )
699    m.shold[r[0]] = r
700
701
702  m.run1(nmip=1)
703  m.loadNewVars()
704  m.groups( vl3=vl3)
705  k = m.sh.keys()[4]
706  print '##############################################'
707  print k
708  print m.sh[k]
709  m.sh.close()
710  m.shnv.close()
711  m.shold.close()
712 
713  m.run1( clear=True)
714  keys = sorted( m.rqs.t )
715  sh = shelve.open( 'dreq_consol_tables_reviewed_a_v%s' % vdate, 'n' )
716  sh['records'] = m.rqs.records[:] 
717  sh['recordProv'] = m.rqs.recordProv.copy()
718  sh.close()
719  sh = shelve.open( 'dreq_consol_tables_reviewed_b_v%s' % vdate, 'n' )
720  sh['__keys__'] = map( str, keys[:] )
721  for k in keys:
722    vs = sorted( m.rqs.t[k].vars)
723    ee = {}
724    print '#############',k,len(vs),'#################'
725    m.rqs.vn = {}
726    for v in vs:
727      for mip,p,ix in m.rqs.t[k].vars[v]:
728        this = m.rqs.records[ix]
729        if this[16] in ['','0.0',0.0]:
730          vn = this[4]
731        else:
732          vn = this[16]
733        if ee.has_key(vn):
734          print '***********************DUPLICATE',vn
735          print m.rqs.t[k].vars[v]
736          print m.rqs.records[ee[vn][0]]
737          print m.rqs.records[ix]
738        ee[vn] = (ix,p)
739    k2 = str(k)
740    m.rqs.vn[k2] = ee
741    sh[k2] = ee.copy()
742  sh.close()
743  shr1.close()
744   
745  print m.idx
746elif opt == 2:
747  m.run1(tabmode='tab')
748  m.run2()
749  shr1.close()
Note: See TracBrowser for help on using the repository browser.