def regridFunc(self, regridTool, regridMethod): """ Run the regrid method from selected variables and store on the command line @param regridTool ESMF, LibCF, Regrid2 @param regridMethod Conserve, Linear, Patch """ import systemCommands import __main__ from gui.application import get_vistrails_application from api import get_current_project_controller _app = get_vistrails_application() QText = QtGui.QTextEdit() QLine = QtGui.QLineEdit() prj_controller = get_current_project_controller() useVars=self.root.dockVariable.widget().getSelectedDefinedVariables() sV = self.root.dockVariable.widget().varList.selectedItems() if len(useVars) > 2: print "\nOnly two variables can be selected to regrid" return argsStr = "regridTool = %s, regridMethod = %s" % (regridTool, regridMethod) # Get the variables vSrc = sV[0] vDst = sV[1] vSrcName = vSrc.varName vDstName = vDst.varName useSrc = useVars.pop(0) useDst = useVars.pop(0) varname = "regrid_%s_%s" % (vSrcName, vDstName) # varname = "regridVar" rhsCommand = "%s.regrid(%s.getGrid(), %s)" % \ (vSrcName, vDstName, argsStr) pycommand = "%s = %s" % (varname, rhsCommand) QLine.setText(QtCore.QString(pycommand.strip())) QText.setTextColor(QtGui.QColor(0,0,0)) commandLine = ">>> " + pycommand + "\n" QText.insertPlainText(commandLine) systemCommands.commandHistory.append(pycommand) systemCommands.command_num = 0 exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ ) regridVar = eval(rhsCommand, __main__.__dict__) res = self.root.stick_main_dict_into_defvar(None) regridVar.id = varname _app.uvcdatWindow.dockVariable.widget().addVariable(regridVar) self.root.record("## Regrid command sent from PCMDITools->Regridding->%s>%s" % \ (regridTool, regridMethod)) self.root.record(pycommand) prj_controller.process_typed_calculator_command(varname, rhsCommand) prj_controller.calculator_command(sV, "REGRID", varname, rhsCommand.strip()) QLine.setFocus()
def getDatabase(): import api global moduleStoreDatabase page_id = 0 try: prj_controller = api.get_current_project_controller() page_id = prj_controller.name except: pass return moduleStoreDatabase.setdefault(page_id, {})
def getCdmsDatabase(): import api global cdmsStoreDatabase page_id = 0 prj_controller = api.get_current_project_controller() try: page_id = prj_controller.name except: pass return cdmsStoreDatabase.setdefault(page_id, {})
def executeCurrentWorkflow( self, moduleId ): import api if self.isServer: ( vistrailName, versionName, dimensions ) = self.cells[ moduleId ] print " *** ExecuteWorkflow--> cell: %s" % str( moduleId ) sheetTabWidget = getSheetTabWidget() sheetName = sheetTabWidget.getSheetName() proj_controller = api.get_current_project_controller() ( col, row ) = ( dimensions[0], dimensions[1] ) cell = proj_controller.sheet_map[ sheetName ][ ( row, col ) ] pipeline = proj_controller.vt_controller.vistrail.getPipeline( cell.current_parent_version ) self.server.executePipeline( pipeline, self.deviceName, vistrailName, versionName, moduleId, dimensions )
def seasons(self,action): menu = str(action.parentWidget().title()) nm = str(action.text()) rec = "## Computing " ## First which season ? if nm == "Annual Means": func = cdutil.times.YEAR funcnm = 'cdutil.times.YEAR' elif nm == "Seasonal Means": func = cdutil.times.SEASONALCYCLE funcnm = 'cdutil.times.SEASONALCYCLE' elif nm == "Monthly Means": func = cdutil.times.ANNUALCYCLE funcnm = 'cdutil.times.ANNUALCYCLE' else: func = getattr(cdutil.times,nm) funcnm = "cdutil.times.%s" % nm vtdesc = nm ## Now which operator? if menu == "Climatology": func = func.climatology funcnm+=".climatology" rec = "climatological " vtdesc = "climatological " + nm.lower() elif menu == "Departures": func=func.departures funcnm+=".departures" rec = "departures from " vtdesc = "departures from " + nm.lower() rec += nm.lower() selectedVars=self.root.dockVariable.widget().getSelectedDefinedVariables() for v in selectedVars: #tmp = func(v) ext = "".join(nm.lower().split()) newid = "%s_%s" % (v.id,ext) if menu != "Extract": newid+=menu.lower() #tmp.id = newid #self.root.dockVariable.widget().addVariable(tmp) self.root.record(rec) self.root.record("%s = %s(%s)" % (newid,funcnm,v.id)) #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() vtfuncnm = "%s(%s)"%(funcnm,v.id) prj_controller.calculator_command([v.id], vtdesc, vtfuncnm, newid) tmp = prj_controller.create_exec_new_variable_pipeline(newid) if tmp is not None: tmp.id = newid self.root.dockVariable.widget().addVariable(tmp)
def extractRegions(self,action): nm = str(action.text()) import gui rec = "## Computing" if nm == "Transcom Regions": func = gui.uvcdat.regionExtractor.REGIONS_1 funcnm = 'gui.uvcdat.regionExtractor.REGIONS_1' elif nm == "Koeppen-Geiger": func = gui.uvcdat.regionExtractor.REGIONS_2; funcnm = 'gui.uvcdat.regionExtractor.REGIONS_2' elif nm == "Dominant \"pure\" PFT": func = gui.uvcdat.regionExtractor.REGIONS_3 funcnm = 'gui.uvcdat.regionExtractor.REGIONS_3' elif nm == "Vegetated Mask": func = gui.uvcdat.regionExtractor.REGIONS_4 funcnm = 'gui.uvcdat.regionExtractor.REGIONS_4' self.bDialog = QtGui.QInputDialog() regions = func.getRegions(); region,ok = self.bDialog.getItem(self, nm, 'Choose Region: ', regions, editable=False); if ok is False: return region = str(region) vtdesc = nm rec += nm.lower() selectedVars=self.root.dockVariable.widget().getSelectedDefinedVariables() for v in selectedVars: #create new variable #tmp = func(v, region) ext = "".join(region.lower().split()) newid = "%s_%s" % (v.id,ext) #tmp.id = newid #save new variable #self.root.dockVariable.widget().addVariable(tmp) self.root.record(rec) self.root.record("%s = %s(%s, '%s')" % (newid, funcnm, v.id, str(regions))) #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() vtfuncnm = "%s(%s, '%s')"%(funcnm,v.id, region) prj_controller.calculator_command([v.id], vtdesc, vtfuncnm, newid) tmp = prj_controller.create_exec_new_variable_pipeline(newid) if tmp is not None: tmp.id = newid self.root.dockVariable.widget().addVariable(tmp)
def executeCurrentWorkflow(self, moduleId): import api if self.isServer: (vistrailName, versionName, dimensions) = self.cells[moduleId] print " *** ExecuteWorkflow--> cell: %s" % str(moduleId) sheetTabWidget = getSheetTabWidget() sheetName = sheetTabWidget.getSheetName() proj_controller = api.get_current_project_controller() (col, row) = (dimensions[0], dimensions[1]) cell = proj_controller.sheet_map[sheetName][(row, col)] pipeline = proj_controller.vt_controller.vistrail.getPipeline( cell.current_parent_version) self.server.executePipeline(pipeline, self.deviceName, vistrailName, versionName, moduleId, dimensions)
def setBounds(self,action): nm = str(action.text()) if nm == "Set Bounds For X-Daily Data": self.bDialog = QtGui.QInputDialog() ## self.bDialog.setInputMode(QtGui.QInputDialog.DoubleInput) val,ok = self.bDialog.getDouble(self,"Reset Time Bounds to X-Hourly", "Frequency (# of samples per day)") if ok is False or val <= 0.: return selectedVars=self.root.dockVariable.widget().getSelectedDefinedVariables() for v in selectedVars: vtnm = nm if nm == "Set Bounds For Yearly Data": #cdutil.times.setTimeBoundsYearly(v) self.root.record("## Set Bounds For Yearly Data") self.root.record("cdutil.times.setTimeBoundsYearly(%s)" % v.id) elif nm == "Set Bounds For Monthly Data": #cdutil.times.setTimeBoundsMonthly(v) self.root.record("## Set Bounds For Monthly Data") self.root.record("cdutil.times.setTimeBoundsMonthly(%s)" % v.id) elif nm == "Set Bounds For Daily Data": #cdutil.times.setTimeBoundsDaily(v) self.root.record("## Set Bounds For Daily Data") self.root.record("cdutil.times.setTimeBoundsDaily(%s)" % v.id) elif nm == "Set Bounds For Twice-daily Data": #cdutil.times.setTimeBoundsDaily(v,2) self.root.record("## Set Bounds For Twice-daily Data") self.root.record("cdutil.times.setTimeBoundsDaily(%s,2)" % v.id) elif nm == "Set Bounds For 6-Hourly Data": #cdutil.times.setTimeBoundsDaily(v,4) self.root.record("## Set Bounds For 6-Hourly Data") self.root.record("cdutil.times.setTimeBoundsDaily(%s,4)" % v.id) elif nm == "Set Bounds For Hourly Data": #cdutil.times.setTimeBoundsDaily(v,24) self.root.record("## Set Bounds For Hourly Data") self.root.record("cdutil.times.setTimeBoundsDaily(%s,24)" % v.id) elif nm == "Set Bounds For X-Daily Data": #cdutil.times.setTimeBoundsDaily(v,val) self.root.record("## Set Bounds For X-Daily Data") self.root.record("cdutil.times.setTimeBoundsDaily(%s,%g)" % (v.id,val)) vtnm = "%s:%g"%(nm,val) #send command to project controller to be stored as provenance prj_controller = get_current_project_controller() prj_controller.change_defined_variable_time_bounds(v.id, vtnm)
def ok(self): ## First construct the args list ## starting with the sleected vars args = self.root.dockVariable.widget().getSelectedDefinedVariables() vtvars = [] for arg in args: vtvars.append(arg.id) kargs = {} ## now do we have an axis option if self.defs.get("axes", True): ## single axis or multi? if self.defs.get("multiAxes", True): nms = "" for c in self.selAxes: if c.isChecked(): nms += "(%s)" % str(c.text()) else: nms = "(%s)" % str(self.selAxes.currentText()) if nms == "": self.parent.errorMsg.showMessage( "%s requires at least one axis to be checked" % (self.defs["func"].__name__)) return kargs["axis"] = nms ## Now the Options for c in self.choices: if isinstance(c, uvcdatCommons.QRadioButtonFrame): val = eval(str(c.buttonGroup.checkedButton().text())) nm = str(c.label.text()) elif isinstance(c, QtGui.QComboBox): val = eval(str(c.itemText(c.currentIndex()))) nm = str(c.label.text()) elif isinstance(c, QtGui.QCheckBox): nm = str(c.text()) if c.isChecked(): val = 1 else: val = 0 kargs[nm] = val ## Entries section for e in self.entries: if isinstance(e, QFileOpener): nm = str(e.label.text()) val = str(e.fileEntry.text()) else: nm = str(e.label.text()) try: val = eval(str(e.text())) except: val = str(e.text()) kargs[nm] = val fnm = str(self.windowTitle()) c = self.cursor() self.setCursor(QtCore.Qt.BusyCursor) # try: # tmp = self.defs["func"](*args,**kargs) # except Exception, err: # self.parent.errorMsg.showMessage("The following exception was raised while runnning %s:\n%s" % (self.defs["func"].__name__,str(err))) # self.setCursor(c) # self.accept() # return # resobjs = [] # if isinstance(tmp,cdms2.tvariable.TransientVariable): # tmp.id="%s_%s" % (tmp.id,fnm.replace(".","_")) # self.root.dockVariable.widget().addVariable(tmp) # res = ", %s" % tmp.id # resobjs.append(tmp) # else: # res = self.processList(tmp,"%s_%s" % (args[0].id,fnm.replace(".","_")),"",resobjs) varname = "%s_%s" % (args[0].id, fnm.replace(".", "_")) self.root.record("## %s" % fnm) cargs = args[0].id for a in args[1:]: cargs += ", %s" % a.id ckargs = "" for k in kargs.keys(): ckargs += ", %s=%s" % (k, repr(kargs[k])) cmd = "%s = %s(%s%s)" % (varname, fnm, cargs, ckargs) self.root.record(cmd) #vistrails # newvars = [] # for o in resobjs: # if isinstance(o,cdms2.tvariable.TransientVariable): # newvars.append(o.id) vtcmd = "%s(%s%s)" % (fnm, cargs, ckargs) # if len(newvars) > 1: # debug.warning("Function: '%s' returns more than one variable and is not supported yet." %fnm) # else: #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() prj_controller.calculator_command(vtvars, fnm, vtcmd, varname) tmp = prj_controller.create_exec_new_variable_pipeline(varname) if tmp is not None: tmp.id = varname self.root.dockVariable.widget().addVariable(tmp) self.setCursor(c) self.accept()
def issueCmd(self, button): st = "" nm = "" vars = [] txt = str(button.text()) pressEnter = False selected = self.root.dockVariable.widget().varList.selectedItems() # Funcs that can take many many many variables if txt in ["*", "+", "/", "-"]: if len(selected) == 0: st = txt elif len(selected) == 1: if len(str(self.le.text())) == 0: st = selected[0].varName + txt else: st = txt + selected[0].varName else: if txt == "+": nm = "add_" elif txt == "-": nm = "sub_" elif txt == "/": nm = "div_" elif txt == "*": nm = "mul_" st = selected[0].varName nm += selected[0].varName for s in selected[1:]: st += txt + s.varName nm += "_%s" % s.varName nm += " = " #self.root.dockVariable.widget().unselectItems(selected) #vistrails for s in selected: vars.append(s.varName) if str(self.le.text()) == "": pressEnter = True # 2 variable commands elif txt in ["x<y", "x>y", "x<>y", "x==y"]: if len(selected) != 2: st = txt[1:-1] else: vars = [selected[0].varName, selected[1].varName] st = selected[0].varName + txt[1:-1] + selected[1].varName if txt[1:-1] == "<": nm = "less_" if txt[1:-1] == ">": nm = "greater_" if txt[1:-1] == "<>": nm = "notequal_" if txt[1:-1] == "==": nm = "equal_" nm += selected[0].varName + "_" + selected[1].varName + " = " #self.root.dockVariable.widget().unselectItems(selected) if str(self.le.text()) == "": pressEnter = True elif txt == "x^y": if len(selected) != 2: st = "MV2.power(" else: vars = [selected[0].varName, selected[1].varName] st = "MV2.power(%s,%s)" % (selected[0].varName, selected[1].varName) #self.root.dockVariable.widget().unselectItems(selected) nm = "power_" + selected[0].varName + "_" + selected[ 1].varName + " = " if str(self.le.text()) == "": pressEnter = True elif txt == "REGRID": if len(selected) == 0: st = ".regrid(" if len(selected) == 1: vars = [selected[0].varName] st = "StandardGrid.regrid(%s)" % (selected[0].varName) self.root.dockVariable.widget().unselectItems(selected) nm = "regrid_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: vars = [selected[0].varName, selected[1].varName] st = "%s.regrid(%s.getGrid())" % (selected[0].varName, selected[1].varName) #self.root.dockVariable.widget().unselectItems(selected) nm = "regrid_" + selected[0].varName + "_" + selected[ 1].varName + " = " if str(self.le.text()) == "": pressEnter = True elif txt == "MASK": if len(selected) != 2: st = "MV2.masked_where(" else: vars = [selected[0].varName, selected[1].varName] st = "MV2.masked_where(%s,%s)" % (selected[0].varName, selected[1].varName) #self.root.dockVariable.widget().unselectItems(selected) nm = "maskedwhere_" + selected[0].varName + "_" + selected[ 1].varName + " = " if str(self.le.text()) == "": pressEnter = True elif txt == "GET_MASK": if len(selected) == 1: vars = [selected[0].varName] st = "MV2.getmask(%s)" % (selected[0].varName) nm = selected[0].varName + "_mask = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.getmask(" elif txt == "GROWER": if len(selected) != 2: st = "genutil.grower(" else: vars = [selected[0].varName, selected[1].varName] st = "genutil.grower(%s,%s)" % (selected[0].varName, selected[1].varName) #self.root.dockVariable.widget().unselectItems(selected) nm = "%s_grown_to_%s, %s_grown_to_%s = " % (vars[0], vars[1], vars[1], vars[0]) if str(self.le.text()) == "": pressEnter = True # ! variable only elif txt == "x^2": if len(selected) == 1: vars = [selected[0].varName] st = "%s**2" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "square_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "**2" elif txt == "sqRT": if len(selected) == 1: vars = [selected[0].varName] st = "MV2.sqrt(%s)" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "sqrt_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.sqrt(" elif txt == "1/x": if len(selected) == 1: vars = [selected[0].varName] st = "1/%s" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "invert_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "1/" elif txt == "LN": if len(selected) == 1: vars = [selected[0].varName] st = "MV2.log(%s)" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "ln_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.log(" elif txt == "LOG": if len(selected) == 1: vars = [selected[0].varName] st = "MV2.log10(%s)" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "log10_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.log10(" elif txt == "e^x": if len(selected) == 1: vars = [selected[0].varName] st = "MV2.exp(%s)" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "exp_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.exp(" elif txt == "10^x": if len(selected) == 1: vars = [selected[0].varName] st = "MV2.power(10,%s)" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "power10_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.power(10," elif txt == "ABS": if len(selected) == 1: vars = [selected[0].varName] st = "MV2.absolute(%s)" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) nm = "abs_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.absolute(," elif txt in ["SIN", "ARCSIN", "COS", "ARCCOS", "TAN", "ARCTAN"]: if len(selected) == 1: vars = [selected[0].varName] st = "MV2.%s(%s)" % (txt.lower(), selected[0].varName) #self.root.dockVariable.widget().unselectItems(selected) nm = txt.lower() + "_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "MV2.%s(," % (txt.lower()) elif txt == "STD": if len(selected) == 1: vars = [selected[0].varName] st = "genutil.statistics.std(%s)" % (txt.lower(), selected[0].varName) #self.root.dockVariable.widget().unselectItems(selected) nm = "std_" + selected[0].varName + " = " if str(self.le.text()) == "": pressEnter = True else: st = "genutil.statistics.std(," % (txt.lower()) elif txt == "Clear": self.le.clear() elif txt == "Del": st = str(self.le.text())[:-1] self.le.clear() elif txt == "Enter": pressEnter = True elif txt == "Plot": if len(str(self.le.text())) != 0: res = self.run_command() self.root.dockVariable.widget().unselectItems(selected) self.root.dockVariable.widget().selectVariableFromName(res) self.root.tabView.widget(1).plot() elif len(selected) != 0: self.root.tabView.widget(1).plot() elif txt == "=": if len(selected) == 1: st = "%s =" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) else: st = "=" elif txt == "PI": st = "numpy.pi" elif txt == "e": st = "numpy.e" elif txt == "+/-": st = str(self.le.text()) if st[:2] == "-(" and st[-1] == ")" and st.count("(") == st.count( ")"): st = st[2:-1] else: if len(st) == 0 and len(selected) == 1: st = "-%s" % selected[0].varName #self.root.dockVariable.widget().unselectItems(selected) else: st = "-(%s)" % st self.le.clear() else: st = txt #make sure name is unique newname = nm[:-3].strip() items = self.root.dockVariable.widget().getItems(project=False) varNameSet = set([str(it.text()).split()[1] for it in items]) suffix = "" if newname in varNameSet: suffix = 1 while (newname + str(suffix)) in varNameSet: suffix += 1 newname = newname + str(suffix) nm = newname + nm[-3:] if st != "": if pressEnter: orst = st st = "%s%s" % (nm, st) self.le.setText(str(self.le.text()) + st) if pressEnter: self.run_command(processed=True) #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() varname = nm[:-3].strip() prj_controller.calculator_command(vars, txt, orst, varname) varnames = varname.split(',') varname = varnames[0].strip() tmp = prj_controller.create_exec_new_variable_pipeline(varname) if tmp is not None: tmp.id = varname self.root.dockVariable.widget().addVariable(tmp) if len(varnames) == 2: varname2 = varnames[1].strip() tmp2 = prj_controller.create_exec_new_variable_pipeline( varname2) if tmp2 is not None: tmp2.id = varname2 self.root.dockVariable.widget().addVariable(tmp2) self.le.setFocus()
def run_command(self, processed=False): self.dumpToWindow = True """ Event that processes the CDAT/Python command and displays the stdout or stderr in the text editor window. """ #----------------------------------------------------------------------- # isolate the command and display it in the text editor window #----------------------------------------------------------------------- command = str(self.le.text()) # read the command # strip leading and/or trailing whitespaces from the command command = command.strip() if command == "": return # set the text editor output window text to black self.te.setTextColor(QtGui.QColor(0, 0, 0)) commandLine = ">>> " + command + "\n" # display the command in the text window self.te.insertPlainText(commandLine) #----------------------------------------------------------------------- # append the command to the list and rest the list number to 0 #----------------------------------------------------------------------- if command != "": systemCommands.commandHistory.append(command) systemCommands.command_num = 0 #----------------------------------------------------------------------- # execute the command and clear the line entry if no error occurs #----------------------------------------------------------------------- # results = "temp_results_holder" # acommand = "temp_results_holder = %s" % command # exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ ) # self.le.clear() # try: # exec( command, __main__.__dict__ ) # except Exception: # #print exception to the command window # errorText = StringIO.StringIO() # errorText.write('Your command produced an error.\n') # errorText.write('-'*60+'\n') # traceback.print_exc(file=errorText) # errorText.write('-'*60) # self.te.insertPlainText(errorText.getvalue()) # res = self.root.stick_main_dict_into_defvar(None) #----------------------------------------------------------------------- # record the command for reproducibility #----------------------------------------------------------------------- clist = command.split("=", 1) varname = clist[0].strip() self.root.record("## Command sent from prompt by user") if len(clist) > 1: self.root.record(command) else: self.root.record("%s = %s" % (varname, command)) if not processed and len(clist) > 1 and isidentifier(varname): pycommand = clist[1].strip() # project controller will only capture the results that return # a variable #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() # returns if we have existing variables involved, otherwise # we assume it's a generic command if prj_controller.process_typed_calculator_command( varname, pycommand): tmp = prj_controller.create_exec_new_variable_pipeline(varname) if tmp is not None: tmp.id = varname self.root.dockVariable.widget().addVariable(tmp) processed = True if not processed: # try to run things "normally" try: exec(compile(command, "<string>", "single"), __main__.__dict__) except Exception: traceback.print_exc(file=sys.stderr) self.le.clear() self.dumpToWindow = False return varname
def ok(self): ## First construct the args list ## starting with the sleected vars args = self.root.dockVariable.widget().getSelectedDefinedVariables() vtvars = [] for arg in args: vtvars.append(arg.id) kargs = {} ## now do we have an axis option if self.defs.get("axes",True): ## single axis or multi? if self.defs.get("multiAxes",True): nms = "" for c in self.selAxes: if c.isChecked(): nms+="(%s)" % str(c.text()) else: nms = "(%s)" % str(self.selAxes.currentText()) if nms == "": self.parent.errorMsg.showMessage("%s requires at least one axis to be checked" % (self.defs["func"].__name__)) return kargs["axis"]=nms ## Now the Options for c in self.choices: if isinstance(c,uvcdatCommons.QRadioButtonFrame): val = eval(str(c.buttonGroup.checkedButton().text())) nm = str(c.label.text()) elif isinstance(c,QtGui.QComboBox): val = eval(str(c.itemText(c.currentIndex()))) nm = str(c.label.text()) elif isinstance(c,QtGui.QCheckBox): nm = str(c.text()) if c.isChecked(): val = 1 else: val = 0 kargs[nm]=val ## Entries section for e in self.entries: if isinstance(e,QFileOpener): nm = str(e.label.text()) val = str(e.fileEntry.text()) else: nm = str(e.label.text()) try: val = eval(str(e.text())) except: val = str(e.text()) kargs[nm]=val fnm = str(self.windowTitle()) c = self.cursor() self.setCursor(QtCore.Qt.BusyCursor) # try: # tmp = self.defs["func"](*args,**kargs) # except Exception, err: # self.parent.errorMsg.showMessage("The following exception was raised while runnning %s:\n%s" % (self.defs["func"].__name__,str(err))) # self.setCursor(c) # self.accept() # return # resobjs = [] # if isinstance(tmp,cdms2.tvariable.TransientVariable): # tmp.id="%s_%s" % (tmp.id,fnm.replace(".","_")) # self.root.dockVariable.widget().addVariable(tmp) # res = ", %s" % tmp.id # resobjs.append(tmp) # else: # res = self.processList(tmp,"%s_%s" % (args[0].id,fnm.replace(".","_")),"",resobjs) varname = "%s_%s" % (args[0].id, fnm.replace(".","_")) self.root.record("## %s" % fnm) cargs=args[0].id for a in args[1:]: cargs+=", %s" % a.id ckargs = "" for k in kargs.keys(): ckargs+=", %s=%s" % (k,repr(kargs[k])) cmd="%s = %s(%s%s)" % (varname,fnm,cargs,ckargs) self.root.record(cmd) #vistrails # newvars = [] # for o in resobjs: # if isinstance(o,cdms2.tvariable.TransientVariable): # newvars.append(o.id) vtcmd = "%s(%s%s)" % (fnm,cargs,ckargs) # if len(newvars) > 1: # debug.warning("Function: '%s' returns more than one variable and is not supported yet." %fnm) # else: #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() prj_controller.calculator_command(vtvars, fnm, vtcmd, varname) tmp = prj_controller.create_exec_new_variable_pipeline(varname) if tmp is not None: tmp.id = varname self.root.dockVariable.widget().addVariable(tmp) self.setCursor(c) self.accept()
def run_command(self,processed=False): """ Event that processes the CDAT/Python command and displays the stdout or stderr in the text editor window. """ #----------------------------------------------------------------------- # isolate the command and display it in the text editor window #----------------------------------------------------------------------- command = str(self.le.text()) # read the command # strip leading and/or trailing whitespaces from the command command = command.strip() if command == "": return # set the text editor output window text to black self.te.setTextColor( QtGui.QColor(0,0,0)) commandLine = ">>> " + command + "\n" # display the command in the text window self.te.insertPlainText( commandLine ) #----------------------------------------------------------------------- # append the command to the list and rest the list number to 0 #----------------------------------------------------------------------- if command != "": systemCommands.commandHistory.append( command ) systemCommands.command_num = 0 #----------------------------------------------------------------------- # execute the command and clear the line entry if no error occurs #----------------------------------------------------------------------- results = "temp_results_holder" acommand = "temp_results_holder = %s" % command exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ ) self.le.clear() try: exec( command, __main__.__dict__ ) except Exception: #print exception to the command window errorText = StringIO.StringIO() errorText.write('Your command produced an error.\n') errorText.write('-'*60+'\n') traceback.print_exc(file=errorText) errorText.write('-'*60) self.te.insertPlainText(errorText.getvalue()) res = self.root.stick_main_dict_into_defvar(None) #----------------------------------------------------------------------- # record the command for preproducibility #----------------------------------------------------------------------- self.root.record("## Command sent from prompt by user") if res == command.split("=")[0] or res is None: self.root.record(command) else: self.root.record("%s = %s" % (res,command)) clist = command.split("=", 1) if not processed and len(clist) > 1 and isidentifier(clist[0]): varname = clist[0].strip() pycommand = clist[1].strip() # project controller will only capture the results that return # a variable #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() prj_controller.process_typed_calculator_command(varname,pycommand) return res
def issueCmd(self,button): st="" nm="" vars = [] txt = str(button.text()) pressEnter=False selected = self.root.dockVariable.widget().varList.selectedItems() # Funcs that can take many many many variables if txt in ["*","+","/","-"]: if len(selected)==0: st=txt elif len(selected)==1: if len(str(self.le.text()))==0: st = selected[0].varName+txt else: st = txt+selected[0].varName else: if txt == "+": nm="add_" elif txt == "-": nm="sub_" elif txt == "/": nm="div_" elif txt == "*": nm="mul_" st = selected[0].varName nm+=selected[0].varName for s in selected[1:]: st+=txt+s.varName nm+="_%s" % s.varName nm+=" = " self.root.dockVariable.widget().unselectItems(selected) #vistrails for s in selected: vars.append(s.varName) if str(self.le.text())=="" : pressEnter=True # 2 variable commands elif txt in ["x<y","x>y","x<>y","x==y"]: if len(selected)!=2: st=txt[1:-1] else: vars = [selected[0].varName,selected[1].varName] st=selected[0].varName+txt[1:-1]+selected[1].varName if txt[1:-1]=="<": nm="less_" if txt[1:-1]==">": nm="greater_" if txt[1:-1]=="<>": nm="notequal_" if txt[1:-1]=="==": nm="equal_" nm+=selected[0].varName+"_"+selected[1].varName+" = " self.root.dockVariable.widget().unselectItems(selected) if str(self.le.text())=="" : pressEnter=True elif txt == "x^y": if len(selected)!=2: st="MV2.power(" else: vars = [selected[0].varName,selected[1].varName] st="MV2.power(%s,%s)" % (selected[0].varName,selected[1].varName) self.root.dockVariable.widget().unselectItems(selected) nm="power_"+selected[0].varName+"_"+selected[1].varName+" = " if str(self.le.text())=="" : pressEnter=True elif txt == "REGRID": if len(selected)!=2: st=".regrid(" else: vars = [selected[0].varName,selected[1].varName] st="%s.regrid(%s.getGrid())" % ( selected[0].varName,selected[1].varName) self.root.dockVariable.widget().unselectItems(selected) nm="regrid_"+selected[0].varName+"_"+selected[1].varName+" = " if str(self.le.text())=="" : pressEnter=True elif txt == "MASK": if len(selected)!=2: st="MV2.masked_where(" else: vars = [selected[0].varName,selected[1].varName] st="MV2.masked_where(%s,%s)" % ( selected[0].varName,selected[1].varName) self.root.dockVariable.widget().unselectItems(selected) nm="maskedwhere_"+selected[0].varName+"_"+selected[1].varName+" = " if str(self.le.text())=="" : pressEnter=True elif txt == "GET_MASK": if len(selected)==1: vars = [selected[0].varName] st="MV2.getmask(%s)" % (selected[0].varName) nm=selected[0].varName+"_mask = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.getmask(" elif txt == "GROWER": if len(selected)!=2: st="genutil.grower(" else: vars = [selected[0].varName,selected[1].varName] st="genutil.grower(%s,%s)" % ( selected[0].varName,selected[1].varName) self.root.dockVariable.widget().unselectItems(selected) nm=selected[0].varName+", "+selected[1].varName+" = " if str(self.le.text())=="" : pressEnter=True # ! variable only elif txt == "x^2": if len(selected)==1: vars = [selected[0].varName] st="%s**2" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="square_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="**2" elif txt == "sqRT": if len(selected)==1: vars = [selected[0].varName] st="MV2.sqrt(%s)" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="sqrt_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.sqrt(" elif txt == "1/x": if len(selected)==1: vars = [selected[0].varName] st="1/%s" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="invert_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="1/" elif txt == "LN": if len(selected)==1: vars = [selected[0].varName] st="MV2.log(%s)" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="ln_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.log(" elif txt == "LOG": if len(selected)==1: vars = [selected[0].varName] st="MV2.log10(%s)" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="log10_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.log10(" elif txt == "e^x": if len(selected)==1: vars = [selected[0].varName] st="MV2.exp(%s)" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="exp_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.exp(" elif txt == "10^x": if len(selected)==1: vars = [selected[0].varName] st="MV2.power(10,%s)" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="power10_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.power(10," elif txt == "ABS": if len(selected)==1: vars = [selected[0].varName] st="MV2.absolute(%s)" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) nm="abs_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.absolute(," elif txt in ["SIN","ARCSIN","COS","ARCOS","TAN","ARCTAN"]: if len(selected)==1: vars = [selected[0].varName] st="MV2.%s(%s)" % (txt.lower(),selected[0].varName) self.root.dockVariable.widget().unselectItems(selected) nm=txt.lower()+"_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="MV2.%s(," % (txt.lower()) elif txt == "STD": if len(selected)==1: vars = [selected[0].varName] st="genutil.statistics.std(%s)" % ( txt.lower(),selected[0].varName) self.root.dockVariable.widget().unselectItems(selected) nm="std_"+selected[0].varName+" = " if str(self.le.text())=="" : pressEnter=True else: st="genutil.statistics.std(," % (txt.lower()) elif txt == "Clear": self.le.clear() elif txt == "Del": st = str(self.le.text())[:-1] self.le.clear() elif txt == "Enter": pressEnter = True elif txt == "Plot": if len(str(self.le.text()))!=0: res = self.run_command() self.root.dockVariable.widget().unselectItems(selected) self.root.dockVariable.widget().selectVariableFromName(res) self.root.tabView.widget(1).plot() elif len(selected)!=0: self.root.tabView.widget(1).plot() elif txt == "=": if len(selected)==1: st = "%s =" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) else: st="=" elif txt == "PI": st="numpy.pi" elif txt=="e": st="numpy.e" elif txt == "+/-": st = str(self.le.text()) if st[:2]=="-(" and st[-1]==")" and st.count("(")==st.count(")"): st=st[2:-1] else: if len(st)==0 and len(selected)==1: st = "-%s" % selected[0].varName self.root.dockVariable.widget().unselectItems(selected) else: st="-(%s)" % st self.le.clear() else: st=txt if st!="": if pressEnter: orst = st st="%s%s" % (nm,st) self.le.setText(str(self.le.text())+st) if pressEnter: self.run_command(processed=True) #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() prj_controller.calculator_command(vars, txt, orst, nm[:-3].strip()) self.le.setFocus()
def redo(self): get_current_project_controller().redo()
def undo(self): get_current_project_controller().undo()
def regridFunc(self, regridTool, regridMethod): """ Run the regrid method from selected variables and store on the command line @param regridTool ESMF, LibCF, Regrid2 @param regridMethod Conserve, Linear, Patch """ import systemCommands import __main__ from gui.application import get_vistrails_application from api import get_current_project_controller _app = get_vistrails_application() QText = QtGui.QTextEdit() QLine = QtGui.QLineEdit() prj_controller = get_current_project_controller() useVars=self.root.dockVariable.widget().getSelectedDefinedVariables() sV = self.root.dockVariable.widget().varList.selectedItems() if len(useVars) > 2: print "\nOnly two variables can be selected to regrid" return argsStr = "regridTool = %s, regridMethod = %s" % (regridTool, regridMethod) # Get the variables vSrc = sV[0] vDst = sV[1] vSrcName = vSrc.varName vDstName = vDst.varName useSrc = useVars.pop(0) useDst = useVars.pop(0) varname = "regrid_%s_%s" % (vSrcName, vDstName) # varname = "regridVar" rhsCommand = "%s.regrid(%s.getGrid(), %s)" % \ (vSrcName, vDstName, argsStr) pycommand = "%s = %s" % (varname, rhsCommand) QLine.setText(QtCore.QString(pycommand.strip())) QText.setTextColor(QtGui.QColor(0,0,0)) commandLine = ">>> " + pycommand + "\n" QText.insertPlainText(commandLine) systemCommands.commandHistory.append(pycommand) systemCommands.command_num = 0 #exec( "import MV2,genutil,cdms2,vcs,cdutil,numpy", __main__.__dict__ ) #regridVar = eval(rhsCommand, __main__.__dict__) #res = self.root.stick_main_dict_into_defvar(None) #regridVar.id = varname #_app.uvcdatWindow.dockVariable.widget().addVariable(regridVar) self.root.record("## Regrid command sent from PCMDITools->Regridding->%s>%s" % \ (regridTool, regridMethod)) self.root.record(pycommand) prj_controller.process_typed_calculator_command(varname, rhsCommand) prj_controller.calculator_command(sV, "REGRID", varname, rhsCommand.strip()) QLine.setFocus() tmp = prj_controller.create_exec_new_variable_pipeline(varname) if tmp is not None: tmp.id = varname _app.uvcdatWindow.dockVariable.widget().addVariable(tmp)
self.root.record(cmd) #vistrails newvars = [] for o in resobjs: if isinstance(o,cdms2.tvariable.TransientVariable): newvars.append(o.id) vtcmd = "%s(%s%s)" % (fnm,cargs,ckargs) if len(newvars) > 1: debug.warning("Function: '%s' returns more than one variable and is not supported yet." %fnm) else: #send command to project controller to be stored as provenance from api import get_current_project_controller prj_controller = get_current_project_controller() prj_controller.calculator_command(vtvars, fnm, vtcmd, newvars[0]) self.accept() def processList(self,myList,fnm,res,resobjs): for v in myList: if isinstance(v,cdms2.tvariable.TransientVariable): v.id="%s.%s" % (v.id,fnm) res+=", %s" %v.id self.root.dockVariable.widget().addVariable(v) resobjs.append(v) elif isinstance(v,(list,tuple)): res+=", (%s)" % self.processList(v,fnm,"",resobjs)[2:] else: res+=", nonvar"