Browse Source

Changing output format to dictionary objects for getStartPoint and loadSolutionFromDir

Andrej 2 years ago
parent
commit
88fdfb41a7
1 changed files with 51 additions and 18 deletions
  1. 51 18
      pythonScripts/runSolver.py

+ 51 - 18
pythonScripts/runSolver.py

@@ -21,7 +21,7 @@ defaultValues={\
       'project':'Analysis/Run',\
       'schema':'lists',\
       'query':'runs',\
-      'view':'withStrings'}
+      'view':'WithStrings'}
 
 def get(setup,par):
    try:
@@ -104,18 +104,23 @@ def main(parFiles,jobDir,startDir='NONE'):
    print('Using {}'.format(jobDir))
    if startDir!='NONE':
       print('Using solution from {}'.format(startDir))
-      t0,y0,s0,lut,lutSE=getStartPointFromDir(startDir)
+      #t0,y0,s0,lut,lutSE=getStartPointFromDir(startDir)
+      startPoint=getStartPointFromDir(startDir)
       print('t0={}'.format(t0))
    else:
-      t0,y0,s0,lut,lutSE=getStartPoint(setup)
+      #t0,y0,s0,lut,lutSE=getStartPoint(setup)
+      startPoint=getStartPoint(setup)
 
    #we should reorder S1 to match model.lutSE
    #S1 is nxm, so we should reorder columns
    sIn=numpy.zeros(s0.shape)
+   s0=startPoint['s0']
+   t0=startPoint['t0']
+   y0=startPoint['y0']
    if s0.size>0:
       for x in model.lutSE:
          #this could be modified for different ordering of lut as well
-         sIn[:,model.lutSE[x]]=s0[:,lutSE[x]]
+         sIn[:,model.lutSE[x]]=s0[:,startPoint['lutSE'][x]]
    #copy t0 to setup to help get the strides right
    setup['t0']=t0 
    strides=getStrides(setup)
@@ -241,8 +246,12 @@ def read3D(fName):
 def loadSolutionFromRef(setup, loadAll=False):
    
    if setup['startFromRef']=='None':
-      return 0,numpy.array([]),numpy.array([]),numpy.array([]),numpy.array([])
+      return {'t':0,'sol':numpy.array([]),'sOut':numpy.array([]),'x':numpy.array([]),'y':numpy.array([])}
 
+   ref=setup['startFromRef']
+   return loadSolutionFromRunRef(setup,ref,loadAll)
+
+def connect(setup):
    nixSuite=os.path.join(os.path.expanduser('~'),'software','src','nixSuite')
    sys.path.append(os.path.join(nixSuite,'wrapper'))
    import nixWrapper
@@ -250,7 +259,7 @@ def loadSolutionFromRef(setup, loadAll=False):
       
    import labkeyInterface
    import labkeyFileBrowser
-   #import labkeyDatabaseBrowser
+   import labkeyDatabaseBrowser
 
    net=labkeyInterface.labkeyInterface()
    fconfig=os.path.join(os.path.expanduser('~'),'.labkey',setup['network'])
@@ -258,15 +267,28 @@ def loadSolutionFromRef(setup, loadAll=False):
    #debug
    net.getCSRF()
 
-   #db=labkeyDatabaseBrowser.labkeyDB(net)
+   db=labkeyDatabaseBrowser.labkeyDB(net)
    fb=labkeyFileBrowser.labkeyFileBrowser(net)
+   return db,fb
 
-   ref=setup['startFromRef']
-   #refFilter={'variable':'runRef','value':ref,'oper':'eq'}
-   #ds=db.selectRows(setup['project'],setup['schema'],setup['query'],[refFilter],setup['view'])
+def getRunRef(setup,key):
+   #get solution from key rather than runRef (easier to copy, understand)
+   db,fb=connect(setup)
+   keyFilter={'variable':'Key','value':'{}'.format(key),'oper':'eq'}
+   ds=db.selectRows(setup['project'],setup['schema'],setup['query'],[keyFilter],setup['view'])
+   try:
+      if len(ds['rows'])==0:
+         return 'NONE'
+   except KeyError:
+      print(ds)
+      return 'NONE'
+   print('Found {} rows for {}'.format(len(ds['rows']),key))
+   return ds['rows'][0]['runRef']
+
+def loadSolutionFromRunRef(setup,ref,loadAll=False):
+
+   db,fb=connect(setup)
 
-   #parFileString=ds['rows'][0]['parameterFileString']
-   #parFiles=parFileString.split(';')
    remoteDir=fb.formatPathURL(setup['project'],'/'.join(['jobs',ref]))
 
    try:
@@ -330,17 +352,28 @@ def loadSolutionFromDir(jobDir,loadAll=False):
          except KeyError:
             data[f]=idata
       i+=1
-   return data['t'],data['sol'],data['se'],data['sOut'],data['qt'],lut,lutSE,setup
+   data['lut']=lut
+   data['lutSE']=lutSE
+   data['setup']=setup
+   return data
 
 def getStartPointFromDir(jobDir):
-   t,sol,se,sOut,qt,lut,lutSE,setup=loadSolutionFromDir(jobDir)
-   return t[-1],sol[-1],sOut[-1],lut,lutSE
+   data=loadSolutionFromDir(jobDir)
+   return startPointObject(data)
+
+def startPointObject(data):
+   vrs={'t':'t0','sol':'y0','sOut':'s0'}
+   out={vrs[x]:data[x][-1] for x in vrs}
+   addVrs=['lut','lutSE']
+   for x in addVrs:
+      out[x]=data[x]
+   return out
 
 def getStartPoint(setup):
    if setup['startFromRef']=='None':
-      return 0,numpy.array([]),numpy.array([]),[],[]
-   t,sol,se,sOut,qt,lut,lutSE,oldSetup=loadSolutionFromRef(setup)
-   return t[-1],sol[-1],sOut[-1],lut,lutSE
+      return {'t':0,'sol':numpy.array([]),'sOut':numpy.array([]),'lut':[],'lutSE':[]}
+   data=loadSolutionFromRef(setup)
+   return startPointObject(data)
 
 if __name__=="__main__":
     parFiles=sys.argv[1].split(';')