def checkSolverScip(self,modelMatrix,predVal,delta=1e-3):
     lp = LPSolver()
     lp.setModel(modelMatrix)
     lp.runIntOpt()
     scipPredVal = lp.getMipPredictionMap()
     (testRows,badRows) = self.checkValues(modelMatrix.data,scipPredVal,modelMatrix.getRowLimits())
     if self.verbose: print "--Debug: number of failed rows %s" % (len(badRows))
     lp.clear()
     solverDiff = self.debugCompareFluxes(predVal,scipPredVal)
     if self.verbose: print "--Debug: difference in glpk / scip %s" % (len(solverDiff))
     
     return (testRows,badRows,solverDiff)
def productionLevels(originalModel,options,minBio=0.20,verbose=False):
    naturalObjectiveName  = options.bioObj
    syntheticObjectiveName = options.synthObj
    
    cellularObjective = {naturalObjectiveName:-1.0}
    syntheticObjective = {syntheticObjectiveName:-1.0}
    
    lo = LPSolver()
    lo.setModel(originalModel)
    oPredVal = lo.run(objective = cellularObjective)
    oBioVal = oPredVal[naturalObjectiveName]
    oSynthVal = oPredVal[syntheticObjectiveName]

    if verbose: print "Max cellular: Biological [%s] Synthetic: [%s]" % (oBioVal, oSynthVal)
    
    #---------------------------------------
    # Values for Max Synthetic Objective
    #---------------------------------------
    
    sPredVal = lo.run(objective = syntheticObjective)
    sBioVal = sPredVal[naturalObjectiveName]
    sSynthVal = sPredVal[syntheticObjectiveName]
    lo.clear()
    
    if verbose: print "Max synthetic: Biological [%s] Synthetic: [%s]" % (sBioVal, sSynthVal)

    #-----------------------------------
    # Values for minimum Natural objective
    #-----------------------------------
    
    minObjVal = oBioVal*0.20
    originalModel.addColumnLimit(naturalObjectiveName,(minObjVal,None))
    lo = LPSolver()
    s2PredVal = lo.run(model=originalModel,objective = syntheticObjective)
    s2BioVal = s2PredVal[naturalObjectiveName]
    s2SynthVal = s2PredVal[syntheticObjectiveName]
    
    lo.clear()
    
    return (oPredVal,sPredVal,s2PredVal)