From a0f738ba15264b69d9d51755569408bdd8e383b5 Mon Sep 17 00:00:00 2001 From: nilshah98 Date: Fri, 7 Jun 2019 18:54:35 +0530 Subject: pep8 fixes and list models bug fixed --- src/frontEnd/ProjectExplorer.py | 19 ++- src/kicadtoNgspice/Analysis.py | 65 ++++++++- src/kicadtoNgspice/Convert.py | 7 +- src/kicadtoNgspice/KicadtoNgspice.py | 65 ++++++--- src/kicadtoNgspice/Model.py | 19 +-- src/kicadtoNgspice/Processing.py | 84 +++++++++-- src/kicadtoNgspice/Source.py | 25 +++- src/kicadtoNgspice/TrackWidget.py | 8 +- src/modelEditor/ModelEditor.py | 59 +------- src/ngspiceSimulation/NgspiceWidget.py | 2 +- src/ngspiceSimulation/pythonPlotting.py | 11 +- src/ngspicetoModelica/ModelicaUI.py | 4 +- src/ngspicetoModelica/NgspicetoModelica.py | 218 ++++++++++++++--------------- src/projManagement/Kicad.py | 2 + src/projManagement/Validation.py | 4 + src/projManagement/Worker.py | 3 + src/projManagement/newProject.py | 1 + src/projManagement/openProject.py | 1 + 18 files changed, 368 insertions(+), 229 deletions(-) diff --git a/src/frontEnd/ProjectExplorer.py b/src/frontEnd/ProjectExplorer.py index 77b3f124..3ee66cd3 100644 --- a/src/frontEnd/ProjectExplorer.py +++ b/src/frontEnd/ProjectExplorer.py @@ -132,14 +132,19 @@ class ProjectExplorer(QtGui.QWidget): else: self.obj_appconfig.current_project["ProjectName"] = str( self.filePath) - self.obj_appconfig.proc_dict - [self.obj_appconfig.current_project['ProjectName']] = [ - ] - if self.obj_appconfig.current_project['ProjectName'] \ - not in self.obj_appconfig.dock_dict: + ( + self.obj_appconfig. + proc_dict[self.obj_appconfig.current_project['ProjectName']] + ) = [] + if ( + self.obj_appconfig.current_project['ProjectName'] not in self.obj_appconfig.dock_dict - [self.obj_appconfig.current_project['ProjectName']] = [ - ] + ): + ( + self.obj_appconfig. + dock_dict[ + self.obj_appconfig.current_project['ProjectName']] + ) = [] def enable_save(self): self.save.setEnabled(True) diff --git a/src/kicadtoNgspice/Analysis.py b/src/kicadtoNgspice/Analysis.py index cde39f8f..a60a2286 100644 --- a/src/kicadtoNgspice/Analysis.py +++ b/src/kicadtoNgspice/Analysis.py @@ -8,7 +8,17 @@ import json class Analysis(QtGui.QWidget): """ - This class create Analysis Tab in KicadtoNgspice Window. + - This class create Analysis Tab in KicadtoNgspice Window. + - Set various track widget options here + - AC_entry_var + - AC_Parameter + - DC_entry_var + - DC_Parameter + - TRAN_entry_var + - TRAN_Parameter + - set_Checkbox + - AC_type + - op_check """ def __init__(self, clarg1): @@ -40,7 +50,9 @@ class Analysis(QtGui.QWidget): analysisfile = open(os.path.join(projpath, 'analysis')) content = analysisfile.readline() + print("=========================================================") print("Content of Analysis file :", content) + print("=========================================================") contentlist = content.split() if contentlist[0] == '.ac': @@ -88,6 +100,12 @@ class Analysis(QtGui.QWidget): self.setLayout(self.grid) self.show() + ''' + - Create the checkboxes for analysis type, under analysis tab + - checkbox > checkgrid > checkgroupbtn > checkAC | checkDC | checkTRAN + - Trigger enableBox on clicking + ''' + def createCheckBox(self): self.checkbox = QtGui.QGroupBox() self.checkbox.setTitle("Select Analysis Type") @@ -111,6 +129,11 @@ class Analysis(QtGui.QWidget): return self.checkbox + ''' + - Activate deactive analysis areas according to type + - Add analysis data to track_obj from TrackWidget + ''' + def enableBox(self): if self.checkAC.isChecked(): self.acbox.setDisabled(False) @@ -130,6 +153,14 @@ class Analysis(QtGui.QWidget): self.dcbox.setDisabled(True) self.track_obj.set_CheckBox["ITEMS"] = "TRAN" + ''' + - Designing of AC group in analysis tab + - 3 radio buttons - Lin | Dec | Oct + - 3 input boxes, with top 2 combos\ + - If previous values exist then fill default values from + previous value json file + ''' + def createACgroup(self): kicadFile = self.clarg1 (projpath, filename) = os.path.split(kicadFile) @@ -202,12 +233,14 @@ class Analysis(QtGui.QWidget): self.acgrid.addWidget(self.start_fre_combo, 2, 2) self.ac_parameter[0] = "Hz" + # Try setting to default value from anaylsis file try: self.ac_parameter[self.parameter_cnt] = str( json_data["analysis"]["ac"]["Start Fre Combo"]) except BaseException: self.ac_parameter[self.parameter_cnt] = "Hz" + # Event listener for combo action self.start_fre_combo.activated[str].connect(self.start_combovalue) self.parameter_cnt = self.parameter_cnt + 1 @@ -274,12 +307,23 @@ class Analysis(QtGui.QWidget): return self.acbox + ''' + - Below 2 functions handle combo value event listeners for + - - start frequency for ac + - - stop frequency for ac + - And accordingly set the ac_parameters + ''' + def start_combovalue(self, text): self.ac_parameter[0] = str(text) def stop_combovalue(self, text): self.ac_parameter[1] = str(text) + ''' + - Set track object for AC, according to the type of radio box selected + ''' + def set_ac_type(self): self.parameter_cnt = 0 @@ -292,6 +336,10 @@ class Analysis(QtGui.QWidget): else: pass + ''' + - Create DC area under analysis tab + ''' + def createDCgroup(self): kicadFile = self.clarg1 (projpath, filename) = os.path.split(kicadFile) @@ -564,6 +612,10 @@ class Analysis(QtGui.QWidget): return self.dcbox + ''' + - Below 6 functions to handle combo boxes for the DC group + ''' + def start_changecombo(self, text): self.dc_parameter[0] = str(text) @@ -582,12 +634,20 @@ class Analysis(QtGui.QWidget): def stop_changecombo2(self, text): self.dc_parameter[5] = str(text) + ''' + - Handles the Operating point analysis checkbox + ''' + def setflag(self): if self.check.isChecked(): self.track_obj.op_check.append(1) else: self.track_obj.op_check.append(0) + ''' + - Creating transient group under analysis and creating it's components + ''' + def createTRANgroup(self): kicadFile = self.clarg1 (projpath, filename) = os.path.split(kicadFile) @@ -717,6 +777,9 @@ class Analysis(QtGui.QWidget): print("Transient Analysis JSON Parse Error") return self.trbox + ''' + - Below 3 functions handle event for the combo box in transient group + ''' def start_combo_change(self, text): self.tran_parameter[0] = str(text) diff --git a/src/kicadtoNgspice/Convert.py b/src/kicadtoNgspice/Convert.py index 38234fed..51daa1de 100644 --- a/src/kicadtoNgspice/Convert.py +++ b/src/kicadtoNgspice/Convert.py @@ -39,7 +39,7 @@ class Convert: str(self.entry_var[self.start].text())) > 0 else '0' va_val = str( self.entry_var[self.start + 1].text() - ) if len( + ) if len( str(self.entry_var[self.start + 1].text())) \ > 0 else '0' freq_val = str(self.entry_var[self.start + 2].text()) \ @@ -440,7 +440,10 @@ class Convert: param = key default = 0 # Cheking if value is iterable.its for vector - if hasattr(value, '__iter__'): + if ( + hasattr(value, '__iter__') + and type(value) is not str + ): addmodelLine += param + "=[" for lineVar in value: if str( diff --git a/src/kicadtoNgspice/KicadtoNgspice.py b/src/kicadtoNgspice/KicadtoNgspice.py index dfc7cff8..833bd6cc 100644 --- a/src/kicadtoNgspice/KicadtoNgspice.py +++ b/src/kicadtoNgspice/KicadtoNgspice.py @@ -33,11 +33,13 @@ import json class MainWindow(QtGui.QWidget): """ - This class create KicadtoNgspice window. - And Call Convert function if convert button is pressed. - The convert function takes all the value entered by user and create - a final netlist "*.cir.out". - This final netlist is compatible with NgSpice. + - This class create KicadtoNgspice window. + - And Call Convert function if convert button is pressed. + - The convert function takes all the value entered by user and create + a final netlist "*.cir.out". + - This final netlist is compatible with NgSpice. + - clarg1 is the path to the .cir file + - clarg2 is either None or "sub" depending on the analysis type """ def __init__(self, clarg1, clarg2=None): @@ -52,6 +54,7 @@ class MainWindow(QtGui.QWidget): self.clarg2 = clarg2 # Create object of track widget + # Track the dynamically created widget of KicadtoNgSpice Window self.obj_track = TrackWidget.TrackWidget() # Clear Dictionary/List item of sub circuit and ngspice model @@ -65,9 +68,9 @@ class MainWindow(QtGui.QWidget): # Object of Processing obj_proc = PrcocessNetlist() - # Read the netlist + # Read the netlist, ie the .cir file kicadNetlist = obj_proc.readNetlist(self.kicadFile) - + print("=============================================================") print("Given Kicad Schematic Netlist Info :", kicadNetlist) # Construct parameter information @@ -75,13 +78,13 @@ class MainWindow(QtGui.QWidget): # Replace parameter with values netlist, infoline = obj_proc.preprocessNetlist(kicadNetlist, param) - + print("=============================================================") print("Schematic Info after processing Kicad Netlist: ", netlist) # print "INFOLINE",infoline # Separate option and schematic information optionInfo, schematicInfo = obj_proc.separateNetlistInfo(netlist) - + print("=============================================================") print("OPTIONINFO in the Netlist", optionInfo) # List for storing source and its value @@ -92,15 +95,23 @@ class MainWindow(QtGui.QWidget): schematicInfo, sourcelist) # List storing model detail - global modelList, outputOption, unknownModelList, multipleModelList, plotText + global modelList, outputOption,\ + unknownModelList, multipleModelList, plotText modelList = [] outputOption = [] plotText = [] - schematicInfo, outputOption, modelList, unknownModelList, multipleModelList, plotText = obj_proc.convertICintoBasicBlocks( - schematicInfo, outputOption, modelList, plotText - ) - + ( + schematicInfo, + outputOption, + modelList, + unknownModelList, + multipleModelList, + plotText + ) = obj_proc.convertICintoBasicBlocks( + schematicInfo, outputOption, modelList, plotText + ) + print("=======================================") print("Model available in the Schematic :", modelList) """ @@ -128,11 +139,11 @@ class MainWindow(QtGui.QWidget): else: self.createMainWindow() - def createMainWindow(self): - """ - This function create main window of Kicad to Ngspice converter - """ + """ + This function create main window of Kicad to Ngspice converter + """ + def createMainWindow(self): self.vbox = QtGui.QVBoxLayout(self) self.hbox = QtGui.QHBoxLayout(self) self.hbox.addStretch(1) @@ -450,7 +461,11 @@ class MainWindow(QtGui.QWidget): json_data["model"][line[3]]["values"] = [] for key, value in line[7].items(): - if hasattr(value, '__iter__') and i <= end: + if( + hasattr(value, '__iter__') and + i <= end and type(value) is not + str + ): for item in value: fields = { item: str( @@ -503,21 +518,24 @@ class MainWindow(QtGui.QWidget): self.obj_track.sourcelisttrack["ITEMS"], self.obj_track.source_entry_var["ITEMS"], store_schematicInfo, self.clarg1 - ) + ) try: # Adding Source Value to Schematic Info store_schematicInfo = self.obj_convert.addSourceParameter() + print("=========================================================") print("Netlist After Adding Source details :", store_schematicInfo) # Adding Model Value to store_schematicInfo store_schematicInfo = self.obj_convert.addModelParameter( store_schematicInfo) + print("=========================================================") print("Netlist After Adding Ngspice Model :", store_schematicInfo) # Adding Device Library to SchematicInfo store_schematicInfo = self.obj_convert.addDeviceLibrary( store_schematicInfo, self.kicadFile) + print("=========================================================") print( "Netlist After Adding Device Model Library :", store_schematicInfo) @@ -525,6 +543,7 @@ class MainWindow(QtGui.QWidget): # Adding Subcircuit Library to SchematicInfo store_schematicInfo = self.obj_convert.addSubcircuit( store_schematicInfo, self.kicadFile) + print("=========================================================") print("Netlist After Adding subcircuits :", store_schematicInfo) analysisoutput = self.obj_convert.analysisInsertor( @@ -538,7 +557,7 @@ class MainWindow(QtGui.QWidget): self.obj_track.AC_type["ITEMS"], self.obj_track.op_check ) - + print("=========================================================") print("Analysis OutPut ", analysisoutput) # Calling netlist file generation function @@ -561,6 +580,7 @@ class MainWindow(QtGui.QWidget): self.createSubFile(subPath) def createNetlistFile(self, store_schematicInfo, plotText): + print("=============================================================") print("Creating Final netlist") # print "INFOLINE",infoline # print "OPTIONINFO",optionInfo @@ -588,6 +608,7 @@ class MainWindow(QtGui.QWidget): Please check it") sys.exit() else: + print("========================================================") print(analysisFileLoc + " does not exist") sys.exit() @@ -673,6 +694,7 @@ class MainWindow(QtGui.QWidget): except BaseException: print("Error in opening .cir.out file.") else: + print("=========================================================") print( self.projName + ".cir.out does not exist. Please create a spice netlist.") @@ -732,4 +754,5 @@ class MainWindow(QtGui.QWidget): out.writelines('\n') out.writelines('.ends ' + self.projName) + print("=============================================================") print("The subcircuit has been written in " + self.projName + ".sub") diff --git a/src/kicadtoNgspice/Model.py b/src/kicadtoNgspice/Model.py index e9b5822a..9af7cbfb 100644 --- a/src/kicadtoNgspice/Model.py +++ b/src/kicadtoNgspice/Model.py @@ -7,8 +7,8 @@ import os class Model(QtGui.QWidget): """ - This class creates Model Tab of KicadtoNgspice window. - The widgets are created dynamically in the Model Tab. + - This class creates Model Tab of KicadtoNgspice window. + The widgets are created dynamically in the Model Tab. """ def __init__(self, schematicInfo, modelList, clarg1): @@ -62,7 +62,7 @@ class Model(QtGui.QWidget): # print "Key : ",key # print "Value : ",value # Check if value is iterable - if hasattr(value, '__iter__'): + if hasattr(value, '__iter__') and type(value) is not str: # For tag having vector value temp_tag = [] for item in value: @@ -78,7 +78,7 @@ class Model(QtGui.QWidget): try: for mod in json_data["model"]: if json_data["model"][mod]["type"] ==\ - line[2] and mod == line[3]: + line[2] and mod == line[3]: self.obj_trac.model_entry_var [self.nextcount].setText( str(list( @@ -96,17 +96,18 @@ class Model(QtGui.QWidget): else: paramLabel = QtGui.QLabel(value) modelgrid.addWidget(paramLabel, self.nextrow, 0) - self.obj_trac.model_entry_var - [self.nextcount] = QtGui.QLineEdit( + self.obj_trac.model_entry_var[self.nextcount] = ( + QtGui.QLineEdit() ) modelgrid.addWidget( - self.obj_trac.model_entry_var - [self.nextcount], self.nextrow, 1) + self.obj_trac.model_entry_var[self.nextcount], + self.nextrow, 1 + ) try: for mod in json_data["model"]: if json_data["model"][mod]["type"] ==\ - line[2] and mod == line[3]: + line[2] and mod == line[3]: self.obj_trac.model_entry_var [self.nextcount].setText( str(list(json_data diff --git a/src/kicadtoNgspice/Processing.py b/src/kicadtoNgspice/Processing.py index 63847761..bd1b45dc 100644 --- a/src/kicadtoNgspice/Processing.py +++ b/src/kicadtoNgspice/Processing.py @@ -13,15 +13,29 @@ class PrcocessNetlist: def __init__(self): pass + """ + - Read the circuit file and return splitted lines + """ + def readNetlist(self, filename): f = open(filename) data = f.read() f.close() + print("=============================================================") + print("readNetList called, from Processing") + print("=============================================================") + print("NETLIST", data.splitlines()) + print("=============================================================") return data.splitlines() + """ + - Read Parameter information and store it into dictionary + - kicadNetlis is the .cir file content + """ + def readParamInfo(self, kicadNetlis): - """Read Parameter information and store it into dictionary""" param = {} + print("=========================KICADNETLIST========================") for eachline in kicadNetlis: print(eachline) eachline = eachline.strip() @@ -32,10 +46,18 @@ class PrcocessNetlist: for i in range(1, len(words), 1): paramList = words[i].split('=') param[paramList[0]] = paramList[1] + print("=============================================================") + print("readParamInfo called, from Processing") + print("=============================================================") + print("PARAM", param) + print("=============================================================") return param + """ + - Preprocess netlist (replace parameters) + """ + def preprocessNetlist(self, kicadNetlis, param): - """Preprocess netlist (replace parameters)""" netlist = [] for eachline in kicadNetlis: # Remove leading and trailing blanks spaces from line @@ -66,6 +88,12 @@ class PrcocessNetlist: # Copy information line infoline = netlist[0] netlist.remove(netlist[0]) + print("=============================================================") + print("preprocessNetList called, from Processing") + print("=============================================================") + print("NETLIST", netlist) + print("INFOLINE", infoline) + print("=============================================================") return netlist, infoline def separateNetlistInfo(self, netlist): @@ -78,14 +106,24 @@ class PrcocessNetlist: optionInfo.append(eachline) else: schematicInfo.append(eachline) + print("=============================================================") + print("separateNetlistInfo called, from Processing") + print("=============================================================") + print("OPTIONINFO", optionInfo) + print("SCHEMATICINFO", schematicInfo) + print("=============================================================") return optionInfo, schematicInfo + """ + - Insert Special source parameter + - As per the parameters passed create source list + """ + def insertSpecialSourceParam(self, schematicInfo, sourcelist): - # Inser Special source parameter schematicInfo1 = [] - + print("=============================================================") print("Reading schematic info for source details") - + print("=============================================================") for compline in schematicInfo: words = compline.split() compName = words[0] @@ -171,10 +209,17 @@ class PrcocessNetlist: schematicInfo = schematicInfo + schematicInfo1 print("Source List : ", sourcelist) # print schematicInfo + print("=============================================================") + print("insertSpecialSourceParam called, from Processing") + print("=============================================================") + print("SCHEMATICINFO", schematicInfo) + print("SOURCELIST", sourcelist) + print("=============================================================") return schematicInfo, sourcelist def convertICintoBasicBlocks( self, schematicInfo, outputOption, modelList, plotText): + print("=============================================================") print("Reading Schematic info for Model") # Insert details of Ngspice model unknownModelList = [] @@ -228,6 +273,8 @@ class PrcocessNetlist: unknownModelList.append(compType) elif count == 1: try: + print("==========================================\ + ===========================") print( "Start Parsing Previous Values XML\ for ngspice model :", modelPath) @@ -265,7 +312,7 @@ class PrcocessNetlist: if 'default' in item.attrib: paramDict[item.tag + ":" + item.attrib['default']] \ - = temp_list + = temp_list else: paramDict[item.tag] = item.text @@ -273,7 +320,7 @@ class PrcocessNetlist: if 'default' in item.attrib: paramDict[item.tag + ":" + item.attrib['default']]\ - = item.text + = item.text else: paramDict[item.tag] = item.text @@ -288,6 +335,8 @@ class PrcocessNetlist: modelLine += compName else: + print("=====================================\ + ================================") print("Split Details :", splitDetail) modelLine = "a" + str(k) + " " vectorDetail = splitDetail.split(':') @@ -302,7 +351,7 @@ class PrcocessNetlist: for i in range(0, int( item.split("-")[0])): modelLine += words[pos] +\ - " " + " " pos += 1 modelLine += ") " else: @@ -310,7 +359,7 @@ class PrcocessNetlist: for i in range(0, int( item.split("-")[0])): modelLine += words[pos] + \ - " " + " " pos += 1 modelLine += "] " elif item.split("-")[1] == 'NV': @@ -436,16 +485,27 @@ class PrcocessNetlist: else: schematicInfo.insert(index, "* " + compline) - + print("=====================================================") print( "UnknownModelList Used in the Schematic", unknownModelList) + print("=====================================================") print( "Multiple Model XML file with same name ", multipleModelList) + print("=====================================================") print("Model List Details : ", modelList) - + print("=============================================================") + print("convertICIntoBasicBlocks called, from Processing") + print("=============================================================") + print("SCHEMATICINFO", schematicInfo) + print("OUTPUTOPTION", outputOption) + print("MODELLIST", modelList) + print("UNKOWNMODELLIST", unknownModelList) + print("MULTIPLEMODELLIST", multipleModelList) + print("PLOTTEST", plotText) + print("=============================================================") return ( schematicInfo, outputOption, modelList, unknownModelList, multipleModelList, plotText - ) + ) diff --git a/src/kicadtoNgspice/Source.py b/src/kicadtoNgspice/Source.py index 8649ce93..d8e39af4 100644 --- a/src/kicadtoNgspice/Source.py +++ b/src/kicadtoNgspice/Source.py @@ -25,11 +25,23 @@ class Source(QtGui.QWidget): # Creating Source Widget self.createSourceWidget(sourcelist, sourcelisttrack) + """ + - This function dynamically create source widget in the + Source tab of KicadtoNgSpice window + - Depending on the type of source, ac, dc, sine, pwl, etc... + source tab is created + - All the entry fields, are kept into the entry_var + tracked by self.count + - Finally after each of the sourcelist is mapped to its input component + we move to adding these to the track widget + - Also check if any default values present from previous analysis and add + them by default + """ + def createSourceWidget(self, sourcelist, sourcelisttrack): - """ - This function dynamically create source widget in the - Source tab of KicadtoNgSpice window - """ + print("============================================================") + print("SOURCELISTTRACK", sourcelisttrack) + print("============================================================") kicadFile = self.clarg1 (projpath, filename) = os.path.split(kicadFile) project_name = os.path.basename(projpath) @@ -328,8 +340,8 @@ class Source(QtGui.QWidget): list( json_data["source"][key] ["values"][it - 4].values())[0] - ) - ) + ) + ) except BaseException: pass @@ -353,6 +365,7 @@ class Source(QtGui.QWidget): else: print("No source is present in your circuit") + print("============================================================") # This is used to keep the track of dynamically created widget self.obj_track.sourcelisttrack["ITEMS"] = sourcelisttrack self.obj_track.source_entry_var["ITEMS"] = self.entry_var diff --git a/src/kicadtoNgspice/TrackWidget.py b/src/kicadtoNgspice/TrackWidget.py index dcf85dca..ec5c2c81 100644 --- a/src/kicadtoNgspice/TrackWidget.py +++ b/src/kicadtoNgspice/TrackWidget.py @@ -1,6 +1,12 @@ class TrackWidget: """ - This Class track the dynamically created widget of KicadtoNgSpice Window. + - This Class track the dynamically created widget of KicadtoNgSpice Window. + - Tracks using dictionary and lists ==> + - - Sources + - - Parameters + - - References + - - Model Details + - - ... etc """ # Track widget list for Source details sourcelisttrack = {"ITEMS": "None"} diff --git a/src/modelEditor/ModelEditor.py b/src/modelEditor/ModelEditor.py index 464ad17f..0d5ff0cf 100644 --- a/src/modelEditor/ModelEditor.py +++ b/src/modelEditor/ModelEditor.py @@ -37,12 +37,8 @@ class ModelEditorclass(QtGui.QWidget): self.splitter = QtGui.QSplitter() self.grid = QtGui.QGridLayout() self.splitter.setOrientation(QtCore.Qt.Vertical) -<<<<<<< HEAD - -======= # Initialise the table view ->>>>>>> 357fd69... pep8 done, model editor documentation self.modeltable = QtGui.QTableWidget() self.newbtn = QtGui.QPushButton('New') @@ -112,18 +108,12 @@ class ModelEditorclass(QtGui.QWidget): self.grid.addWidget(self.magnetic, 8, 1) self.setLayout(self.grid) self.show() -<<<<<<< HEAD - - '''To create New Model file ''' - -======= ''' - To create New Model file - Change state of other buttons accordingly, ex. enable diode, bjt, ... - Validate filename created, to check if one already exists ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def opennew(self): self.addbtn.setHidden(True) try: @@ -146,15 +136,7 @@ class ModelEditorclass(QtGui.QWidget): self.modelname = (str(text)) else: pass -<<<<<<< HEAD - - self.validation(text) - - def diode_click(self): - self.openfiletype('Diode') - self.types.setHidden(True) - -======= + # Validate if the file created exists already or not # Show error accordingly self.validation(text) @@ -176,7 +158,6 @@ class ModelEditorclass(QtGui.QWidget): - Open the default type in the table - Add an event listener for type-selection event ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def bjt_click(self): self.types.setHidden(False) self.types.clear() @@ -209,9 +190,6 @@ class ModelEditorclass(QtGui.QWidget): filetype = str(self.types.currentText()) self.openfiletype(filetype) self.types.activated[str].connect(self.setfiletype) -<<<<<<< HEAD - -======= ''' - Set states for other elements @@ -221,7 +199,6 @@ class ModelEditorclass(QtGui.QWidget): - Open the default type in the table - Add an event listener for type-selection event ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def jfet_click(self): self.types.setHidden(False) self.types.clear() @@ -230,10 +207,8 @@ class ModelEditorclass(QtGui.QWidget): filetype = str(self.types.currentText()) self.openfiletype(filetype) self.types.activated[str].connect(self.setfiletype) -<<<<<<< HEAD - -======= - ''' + + ''' - Set states for other elements - Initialise types combo box elements - - N-IGBT @@ -241,7 +216,6 @@ class ModelEditorclass(QtGui.QWidget): - Open the default type in the table - Add an event listener for type-selection event ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def igbt_click(self): self.types.setHidden(False) self.types.clear() @@ -250,9 +224,7 @@ class ModelEditorclass(QtGui.QWidget): filetype = str(self.types.currentText()) self.openfiletype(filetype) self.types.activated[str].connect(self.setfiletype) -<<<<<<< HEAD - -======= + ''' - Set states for other elements - Initialise types combo box elements @@ -260,7 +232,6 @@ class ModelEditorclass(QtGui.QWidget): - Add an event listener for type-selection event - No types here, only one view ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def magnetic_click(self): self.openfiletype('Magnetic Core') self.types.setHidden(True) @@ -331,9 +302,6 @@ class ModelEditorclass(QtGui.QWidget): self.createtable(path) else: pass -<<<<<<< HEAD - -======= ''' - When `Edit` button clicked, this function called @@ -343,7 +311,6 @@ class ModelEditorclass(QtGui.QWidget): - Create table for the selected .lib file using `self.createtable(path)` - Handle exception of no file selected ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def openedit(self): os.chdir(self.savepathtest) self.newflag = 0 @@ -366,9 +333,6 @@ class ModelEditorclass(QtGui.QWidget): except BaseException: print("No File selected for edit") pass -<<<<<<< HEAD - -======= ''' - Set states for other components @@ -381,7 +345,6 @@ class ModelEditorclass(QtGui.QWidget): - Show the extracted data in QTableWidget - Can edit QTable inplace, connect `edit_modeltable` function for editing ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def createtable(self, modelfile): self.savebtn.setDisabled(False) self.addbtn.setHidden(False) @@ -425,9 +388,6 @@ class ModelEditorclass(QtGui.QWidget): QtCore.QString("Parameters;Values").split(";")) self.modeltable.show() self.modeltable.itemChanged.connect(self.edit_modeltable) -<<<<<<< HEAD - -======= ''' - Called when editing model inplace in QTableWidget @@ -436,7 +396,6 @@ class ModelEditorclass(QtGui.QWidget): - Edit name and value as per needed - Add the val name pair in the modeldict ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def edit_modeltable(self): self.savebtn.setDisabled(False) try: @@ -448,8 +407,6 @@ class ModelEditorclass(QtGui.QWidget): self.modeldict[val] = name except BaseException: pass -<<<<<<< HEAD -======= ''' - Called when `Add` button clicked beside QTableWidget @@ -458,7 +415,6 @@ class ModelEditorclass(QtGui.QWidget): - Accordingly add parameter and value in modeldict as well as table - text1 => parameter, text2 => value ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def addparameters(self): text1, ok = QtGui.QInputDialog.getText( self, 'Parameter', 'Enter Parameter') @@ -483,15 +439,12 @@ class ModelEditorclass(QtGui.QWidget): pass else: pass -<<<<<<< HEAD -======= ''' - Called when save functon clicked - If new file created, call `createXML` file - Else call `savethefile` ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def savemodelfile(self): if self.newflag == 1: self.createXML(self.model_name) @@ -703,9 +656,6 @@ class ModelEditorclass(QtGui.QWidget): remove_item = self.modeltable.item(index.row(), 0).text() self.modeltable.removeRow(index.row()) del self.modeldict[str(remove_item)] -<<<<<<< HEAD - -======= ''' - Called when upload button clicked @@ -716,7 +666,6 @@ class ModelEditorclass(QtGui.QWidget): - Save it in `User Libraries` with the given name, and input from uploaded file ''' ->>>>>>> 357fd69... pep8 done, model editor documentation def converttoxml(self): os.chdir(self.savepathtest) self.addbtn.setHidden(True) diff --git a/src/ngspiceSimulation/NgspiceWidget.py b/src/ngspiceSimulation/NgspiceWidget.py index 695bfa50..def1d4e9 100644 --- a/src/ngspiceSimulation/NgspiceWidget.py +++ b/src/ngspiceSimulation/NgspiceWidget.py @@ -31,7 +31,7 @@ class NgspiceWidget(QtGui.QWidget): ( self.obj_appconfig.proc_dict [self.obj_appconfig.current_project['ProjectName']].append( - self.process.pid()) + self.process.pid()) ) # For Windows OS diff --git a/src/ngspiceSimulation/pythonPlotting.py b/src/ngspiceSimulation/pythonPlotting.py index 848d9d54..7cff21ef 100644 --- a/src/ngspiceSimulation/pythonPlotting.py +++ b/src/ngspiceSimulation/pythonPlotting.py @@ -175,10 +175,10 @@ class plotWindow(QtGui.QMainWindow): "List of Branches:") self.funcLabel.setText("Function:") self.funcName.setText( - "Standard functions\ + "Standard functions\

Addition:
Subtraction:
\ Multiplication:
Division:
Comparison:" - ) + ) self.funcExample.setText( "\n\nNode1 + Node2\nNode1 - Node2\nNode1 * Node2\nNode1 / Node2\ \nNode1 vs Node2") @@ -507,7 +507,12 @@ class plotWindow(QtGui.QMainWindow): loc_x += 50 loc_y += 50 # Adding object of multimeter to dictionary - self.obj_appconfig.dock_dict[self.obj_appconfig.current_project['ProjectName']].append(self.obj[j]) + ( + self.obj_appconfig. + dock_dict[ + self.obj_appconfig.current_project['ProjectName']]. + append(self.obj[j]) + ) if boxCheck == 0: QtGui.QMessageBox.about( diff --git a/src/ngspicetoModelica/ModelicaUI.py b/src/ngspicetoModelica/ModelicaUI.py index 1d860fb7..e523da8b 100644 --- a/src/ngspicetoModelica/ModelicaUI.py +++ b/src/ngspicetoModelica/ModelicaUI.py @@ -52,7 +52,7 @@ class OpenModelicaEditor(QtGui.QWidget): def callConverter(self): try: - self.cmd1 = "python3 ../ngspicetoModelica/NgspicetoModelica.py " + \ + self.cmd1 = "python3 ../ngspicetoModelica/NgspicetoModelica.py" + \ self.ngspiceNetlist + ' ' + self.map_json # self.obj_workThread1 = Worker.WorkerThread(self.cmd1) # self.obj_workThread1.start() @@ -72,7 +72,7 @@ class OpenModelicaEditor(QtGui.QWidget): self.obj_appconfig.print_info( "Ngspice netlist successfully converted to OpenModelica" + "netlist" - ) + ) self.msg.exec_() else: diff --git a/src/ngspicetoModelica/NgspicetoModelica.py b/src/ngspicetoModelica/NgspicetoModelica.py index 007c5a74..3efee506 100644 --- a/src/ngspicetoModelica/NgspicetoModelica.py +++ b/src/ngspicetoModelica/NgspicetoModelica.py @@ -421,11 +421,11 @@ class NgMoConverter: # If parameter is not mapped then it will just pass try: actualModelicaParam = ( - self.mappingData["Devices"] - [deviceName] - ["mapping"] - [key] - ) + self.mappingData["Devices"] + [deviceName] + ["mapping"] + [key] + ) tempstatList.append( actualModelicaParam + "=" + @@ -473,13 +473,13 @@ class NgMoConverter: if trans == 'npn': start = ( self.mappingData["Devices"][deviceName]["import"] - ) + ".NPN" + ) + ".NPN" elif trans == 'pnp': start = self.mappingData( - ["Devices"] - [deviceName] - ["import"] - ) + ".PNP" + ["Devices"] + [deviceName] + ["import"] + ) + ".PNP" else: print("Transistor " + str(trans) + " Not found") sys.exit(1) @@ -501,12 +501,12 @@ class NgMoConverter: userDeviceParamList.append(str("Vak")) else: actualModelicaParam = ( - self.mappingData - ["Devices"] - [deviceName] - ["mapping"] - [key] - ) + self.mappingData + ["Devices"] + [deviceName] + ["mapping"] + [key] + ) tempstatList.append( actualModelicaParam + "=" + @@ -519,21 +519,21 @@ class NgMoConverter: pass # Running loop over default parameter of OpenModelica for default in ( - self.mappingData - ["Devices"] - [deviceName] - ["default"] - ): + self.mappingData + ["Devices"] + [deviceName] + ["default"] + ): if default in userDeviceParamList: continue else: defaultValue = ( - self.mappingData - ["Devices"] - [deviceName] - ["default"] - [default] - ) + self.mappingData + ["Devices"] + [deviceName] + ["default"] + [default] + ) tempstatList.append( default + "=" + self.getUnitVal(defaultValue) + " ") @@ -563,18 +563,18 @@ class NgMoConverter: if trans == 'nmos': start = ( - self.mappingData - ["Devices"] - [deviceName] - ["import"] - ) + ".Mn" + self.mappingData + ["Devices"] + [deviceName] + ["import"] + ) + ".Mn" elif trans == 'pmos': start = ( - self.mappingData - ["Devices"] - [deviceName] - ["import"] - ) + ".Mp" + self.mappingData + ["Devices"] + [deviceName] + ["import"] + ) + ".Mp" else: print("MOSFET " + str(trans) + " not found") sys.exit(1) @@ -597,12 +597,12 @@ class NgMoConverter: userDeviceParamList.append(str("U0")) else: actualModelicaParam = ( - self.mappingData - ["Devices"] - [deviceName] - ["mapping"] - [key] - ) + self.mappingData + ["Devices"] + [deviceName] + ["mapping"] + [key] + ) tempstatList.append( actualModelicaParam + "=" + @@ -616,24 +616,24 @@ class NgMoConverter: # Running loop over default parameter of OpenModelica for default in ( - self.mappingData - ["Devices"] - [deviceName] - ["default"] - ): + self.mappingData + ["Devices"] + [deviceName] + ["default"] + ): if default in userDeviceParamList: continue else: defaultValue = ( - self.mappingData - ["Devices"] - [deviceName] - ["default"] - [default] - ) + self.mappingData + ["Devices"] + [deviceName] + ["default"] + [default] + ) tempstatList.append( default + "=" + self.getUnitVal(defaultValue) + " " - ) + ) # Adding LEVEL(This is constant not the device level) tempstatList.append("Level=1" + " ") @@ -697,11 +697,11 @@ class NgMoConverter: # If parameter is not mapped then it will just pass try: actualModelicaParam = self.mappingData( - ["Devices"] - [deviceName] - ["mapping"] - [key] - ) + ["Devices"] + [deviceName] + ["mapping"] + [key] + ) tempstatList.append( actualModelicaParam + "=" + @@ -713,24 +713,24 @@ class NgMoConverter: pass # Running loop over default parameter of OpenModelica for default in ( - self.mappingData - ["Devices"] - [deviceName] - ["default"] - ): + self.mappingData + ["Devices"] + [deviceName] + ["default"] + ): if default in userDeviceParamList: continue else: defaultValue = ( - self.mappingData - ["Devices"] - [deviceName] - ["default"] - [default] - ) + self.mappingData + ["Devices"] + [deviceName] + ["default"] + [default] + ) tempstatList.append( default + "=" + self.getUnitVal(defaultValue) + " " - ) + ) stat += ",".join(str(item) for item in tempstatList) + "));" modelicaCompInit.append(stat) @@ -779,12 +779,12 @@ class NgMoConverter: # If parameter is not mapped then it will just pass try: actualModelicaParam = ( - self.mappingData - ["Models"] - [actualModelName] - ["mapping"] - [key] - ) + self.mappingData + ["Models"] + [actualModelName] + ["mapping"] + [key] + ) tempstatList.append( actualModelicaParam + "=" + @@ -797,24 +797,24 @@ class NgMoConverter: # Running loop over default parameter of OpenModelica for default in ( - self.mappingData - ["Models"] - [actualModelName] - ["default"] - ): + self.mappingData + ["Models"] + [actualModelName] + ["default"] + ): if default in userModelParamList: continue else: defaultValue = ( - self.mappingData - ["Models"] - [actualModelName] - ["default"] - [default] - ) + self.mappingData + ["Models"] + [actualModelName] + ["default"] + [default] + ) tempstatList.append( default + "=" + self.getUnitVal(defaultValue) + " " - ) + ) stat += ",".join(str(item) for item in tempstatList) + ");" modelicaCompInit.append(stat) @@ -1180,7 +1180,7 @@ class NgMoConverter: dir_name, subtransInfo, subInbuiltModelDict - ) + ) # print "modelicaSubCompInit------------>",modelicaSubCompInit # print "numNodesSubsub---------------------->",numNodesSubsub modelicaSubParamNew = self.getSubParamLine( @@ -1195,7 +1195,7 @@ class NgMoConverter: nodeDicSub, numNodesSubsub, subcktName - ) + ) # print "connSubInfo----------------->",connSubInfo newname = basename.split('.') newfilename = newname[0] @@ -1242,21 +1242,21 @@ class NgMoConverter: out.close() return ( - data, - subOptionInfo, - subSchemInfo, - subModel, - subModelInfo, - subsubName, - subParamInfo, - modelicaSubCompInit, - modelicaSubParam, - nodeSubInterface, - nodeSub, - nodeDicSub, - pinInitSub, - connSubInfo - ) + data, + subOptionInfo, + subSchemInfo, + subModel, + subModelInfo, + subsubName, + subParamInfo, + modelicaSubCompInit, + modelicaSubParam, + nodeSubInterface, + nodeSub, + nodeDicSub, + pinInitSub, + connSubInfo + ) def main(args): @@ -1347,7 +1347,7 @@ def main(args): dir_name, transInfo, inbuiltModelDict - ) + ) # print "ModelicaComponents # : modelicaCompInit----------->",modelicaCompInit # print "SubcktNumNodes @@ -1365,7 +1365,7 @@ def main(args): nodeSubInterface, nodeSub, nodeDicSub, pinInitSub, connSubInfo = ( obj_NgMoConverter.procesSubckt( subcktName, numNodesSub, dir_name - ) + ) ) # Adding 'numNodesSub' by Fahim # Creating Final Output file diff --git a/src/projManagement/Kicad.py b/src/projManagement/Kicad.py index 8b20112e..9aaac46d 100644 --- a/src/projManagement/Kicad.py +++ b/src/projManagement/Kicad.py @@ -53,6 +53,7 @@ class Kicad: @return """ + def openSchematic(self): print("Function : Open Kicad Schematic") self.projDir = self.obj_appconfig.current_project["ProjectName"] @@ -158,6 +159,7 @@ class Kicad: @return """ + def openKicadToNgspice(self): """ This function create command to call kicad to Ngspice converter. diff --git a/src/projManagement/Validation.py b/src/projManagement/Validation.py index b0cfb5a1..9fcac9a2 100644 --- a/src/projManagement/Validation.py +++ b/src/projManagement/Validation.py @@ -42,6 +42,7 @@ class Validation: True => If the folder contains the projName.proj file False => If the folder doesn't contain projName.proj file """ + def __init__(self): pass @@ -69,6 +70,7 @@ class Validation: :"CHECKNAME" => If space is there in name :"VALID" => If valid project name given """ + def validateNewproj(self, projDir): """ This Project Validate New Project Information @@ -97,6 +99,7 @@ class Validation: True False """ + def validateKicad(self, projDir): """ This function validate if Kicad components are present @@ -118,6 +121,7 @@ class Validation: True False """ + def validateCir(self, projDir): """ This function checks if ".cir" file is present. diff --git a/src/projManagement/Worker.py b/src/projManagement/Worker.py index 4cfeefe9..f40fd724 100644 --- a/src/projManagement/Worker.py +++ b/src/projManagement/Worker.py @@ -52,6 +52,7 @@ class WorkerThread(QtCore.QThread): @return None """ + def __del__(self): self.wait() @@ -65,6 +66,7 @@ class WorkerThread(QtCore.QThread): @return None """ + def run(self): print("Worker Thread Calling Command :", self.args) self.call_system(self.args) @@ -80,6 +82,7 @@ class WorkerThread(QtCore.QThread): be executed in different child processes (see subproces.Popen()) """ + def call_system(self, command): procThread = Appconfig() proc = subprocess.Popen(command.split()) diff --git a/src/projManagement/newProject.py b/src/projManagement/newProject.py index ef2440d7..c8cd4078 100644 --- a/src/projManagement/newProject.py +++ b/src/projManagement/newProject.py @@ -45,6 +45,7 @@ class NewProjectInfo(QtGui.QWidget): :dirs => The directories inside the project folder :filelist => The files inside the project folder """ + def createProject(self, projName): """ This function create Project related directories and files diff --git a/src/projManagement/openProject.py b/src/projManagement/openProject.py index d12f4d8a..100cf12c 100644 --- a/src/projManagement/openProject.py +++ b/src/projManagement/openProject.py @@ -43,6 +43,7 @@ class OpenProjectInfo(QtGui.QWidget): :dirs => The directories inside the project folder :filelist => The files inside the project folder """ + def body(self): self.obj_Appconfig = Appconfig() self.openDir = self.obj_Appconfig.default_workspace["workspace"] -- cgit