diff options
author | maddy-2 | 2019-05-27 12:32:49 +0530 |
---|---|---|
committer | nilshah98 | 2019-06-07 11:03:14 +0530 |
commit | 28d8fd378bf717e8daba8a564708856769f24b98 (patch) | |
tree | ee8cc6592c690708d5f35cb5304feeae3d014c97 /src/kicadtoNgspice/Processing.py | |
parent | 7e7b6d372aac718f857fcad5c49faf019ff83bb4 (diff) | |
download | eSim-28d8fd378bf717e8daba8a564708856769f24b98.tar.gz eSim-28d8fd378bf717e8daba8a564708856769f24b98.tar.bz2 eSim-28d8fd378bf717e8daba8a564708856769f24b98.zip |
initialise pep8 compliance, using autopep8
Diffstat (limited to 'src/kicadtoNgspice/Processing.py')
-rw-r--r-- | src/kicadtoNgspice/Processing.py | 487 |
1 files changed, 264 insertions, 223 deletions
diff --git a/src/kicadtoNgspice/Processing.py b/src/kicadtoNgspice/Processing.py index f9d1b4a8..a175ac8b 100644 --- a/src/kicadtoNgspice/Processing.py +++ b/src/kicadtoNgspice/Processing.py @@ -3,221 +3,244 @@ import os from xml.etree import ElementTree as ET - class PrcocessNetlist: """ - This class include all the function required for pre-proccessing of netlist + This class include all the function required for pre-proccessing of netlist before converting to Ngspice Netlist. """ modelxmlDIR = '../modelParamXML' + def __init__(self): pass - - def readNetlist(self,filename): + + def readNetlist(self, filename): f = open(filename) - data=f.read() + data = f.read() f.close() return data.splitlines() - def readParamInfo(self,kicadNetlis): + def readParamInfo(self, kicadNetlis): """Read Parameter information and store it into dictionary""" - param={} + param = {} for eachline in kicadNetlis: print(eachline) - eachline=eachline.strip() - if len(eachline)>1: - words=eachline.split() - option=words[0].lower() - if option=='.param': + eachline = eachline.strip() + if len(eachline) > 1: + words = eachline.split() + option = words[0].lower() + if option == '.param': for i in range(1, len(words), 1): - paramList=words[i].split('=') - param[paramList[0]]=paramList[1] + paramList = words[i].split('=') + param[paramList[0]] = paramList[1] return param - - def preprocessNetlist(self,kicadNetlis,param): + + def preprocessNetlist(self, kicadNetlis, param): """Preprocess netlist (replace parameters)""" - netlist=[] + netlist = [] for eachline in kicadNetlis: - # Remove leading and trailing blanks spaces from line - eachline=eachline.strip() + # Remove leading and trailing blanks spaces from line + eachline = eachline.strip() # Remove special character $ - eachline=eachline.replace('$','') + eachline = eachline.replace('$', '') # Replace parameter with values for subParam in eachline.split(): if '}' in subParam: - key=subParam.split()[0] - key=key.strip('{') - key=key.strip('}') + key = subParam.split()[0] + key = key.strip('{') + key = key.strip('}') if key in param: - eachline=eachline.replace('{'+key+'}',param[key]) + eachline = eachline.replace( + '{' + key + '}', param[key]) else: - print("Parameter " + key +" does not exists") - value=input('Enter parameter value: ') - eachline=eachline.replace('{'+key+'}',value) - #Convert netlist into lower case letter - eachline=eachline.lower() + print("Parameter " + key + " does not exists") + value = input('Enter parameter value: ') + eachline = eachline.replace('{' + key + '}', value) + # Convert netlist into lower case letter + eachline = eachline.lower() # Construct netlist - if len(eachline)>1: - if eachline[0]=='+': - netlist.append(netlist.pop()+eachline.replace('+',' ')) + if len(eachline) > 1: + if eachline[0] == '+': + netlist.append(netlist.pop() + eachline.replace('+', ' ')) else: netlist.append(eachline) - #Copy information line - infoline=netlist[0] + # Copy information line + infoline = netlist[0] netlist.remove(netlist[0]) - return netlist,infoline - - def separateNetlistInfo(self,netlist): - optionInfo=[] - schematicInfo=[] + return netlist, infoline + + def separateNetlistInfo(self, netlist): + optionInfo = [] + schematicInfo = [] for eachline in netlist: - if eachline[0]=='*': + if eachline[0] == '*': continue - elif eachline[0]=='.': + elif eachline[0] == '.': optionInfo.append(eachline) else: schematicInfo.append(eachline) - return optionInfo,schematicInfo - - - def insertSpecialSourceParam(self,schematicInfo,sourcelist): - #Inser Special source parameter - schematicInfo1=[] - + return optionInfo, schematicInfo + + def insertSpecialSourceParam(self, schematicInfo, sourcelist): + # Inser Special source parameter + schematicInfo1 = [] + print("Reading schematic info for source details") - + for compline in schematicInfo: - words=compline.split() - compName=words[0] + words = compline.split() + compName = words[0] # Ask for parameters of source - if compName[0]=='v' or compName[0]=='i': + if compName[0] == 'v' or compName[0] == 'i': # Find the index component from circuit - index=schematicInfo.index(compline) - if words[3]=="pulse": - Title="Add parameters for pulse source "+compName - v1=' Enter initial value(Volts/Amps): ' - v2=' Enter pulsed value(Volts/Amps): ' - td=' Enter delay time (seconds): ' - tr=' Enter rise time (seconds): ' - tf=' Enter fall time (seconds): ' - pw=' Enter pulse width (seconds): ' - tp=' Enter period (seconds): ' - sourcelist.append([index,compline,words[3],Title,v1,v2,td,tr,tf,pw,tp]) - - elif words[3]=="sine": - Title="Add parameters for sine source "+compName - vo=' Enter offset value (Volts/Amps): ' - va=' Enter amplitude (Volts/Amps): ' - freq=' Enter frequency (Hz): ' - td=' Enter delay time (seconds): ' - theta=' Enter damping factor (1/seconds): ' - sourcelist.append([index,compline,words[3],Title,vo,va,freq,td,theta]) - - elif words[3]=="pwl": - Title="Add parameters for pwl source "+compName - t_v=' Enter in pwl format without bracket i.e t1 v1 t2 v2.... ' - sourcelist.append([index,compline,words[3],Title,t_v]) - - elif words[3]=="ac": - Title="Add parameters for ac source "+compName - v_a=' Enter amplitude (Volts/Amps): ' - p_a =' Enter Phase Shift: ' - sourcelist.append([index,compline,words[3],Title,v_a,p_a]) - - elif words[3]=="exp": - Title="Add parameters for exponential source "+compName - v1=' Enter initial value(Volts/Amps): ' - v2=' Enter pulsed value(Volts/Amps): ' - td1=' Enter rise delay time (seconds): ' - tau1=' Enter rise time constant (seconds): ' - td2=' Enter fall time (seconds): ' - tau2=' Enter fall time constant (seconds): ' - sourcelist.append([index,compline,words[3],Title,v1,v2,td1,tau1,td2,tau2]) - - elif words[3]=="dc": - Title="Add parameters for DC source "+compName - v1=' Enter value(Volts/Amps): ' - v2=' Enter zero frequency: ' - sourcelist.append([index,compline,words[3],Title,v1,v2]) - - elif compName[0]=='h' or compName[0]=='f': + index = schematicInfo.index(compline) + if words[3] == "pulse": + Title = "Add parameters for pulse source " + compName + v1 = ' Enter initial value(Volts/Amps): ' + v2 = ' Enter pulsed value(Volts/Amps): ' + td = ' Enter delay time (seconds): ' + tr = ' Enter rise time (seconds): ' + tf = ' Enter fall time (seconds): ' + pw = ' Enter pulse width (seconds): ' + tp = ' Enter period (seconds): ' + sourcelist.append( + [index, compline, words[3], Title, v1, v2, td, tr, tf, pw, tp]) + + elif words[3] == "sine": + Title = "Add parameters for sine source " + compName + vo = ' Enter offset value (Volts/Amps): ' + va = ' Enter amplitude (Volts/Amps): ' + freq = ' Enter frequency (Hz): ' + td = ' Enter delay time (seconds): ' + theta = ' Enter damping factor (1/seconds): ' + sourcelist.append( + [index, compline, words[3], Title, vo, va, freq, td, theta]) + + elif words[3] == "pwl": + Title = "Add parameters for pwl source " + compName + t_v = ' Enter in pwl format without bracket i.e t1 v1 t2 v2.... ' + sourcelist.append([index, compline, words[3], Title, t_v]) + + elif words[3] == "ac": + Title = "Add parameters for ac source " + compName + v_a = ' Enter amplitude (Volts/Amps): ' + p_a = ' Enter Phase Shift: ' + sourcelist.append( + [index, compline, words[3], Title, v_a, p_a]) + + elif words[3] == "exp": + Title = "Add parameters for exponential source " + compName + v1 = ' Enter initial value(Volts/Amps): ' + v2 = ' Enter pulsed value(Volts/Amps): ' + td1 = ' Enter rise delay time (seconds): ' + tau1 = ' Enter rise time constant (seconds): ' + td2 = ' Enter fall time (seconds): ' + tau2 = ' Enter fall time constant (seconds): ' + sourcelist.append( + [index, compline, words[3], Title, v1, v2, td1, tau1, td2, tau2]) + + elif words[3] == "dc": + Title = "Add parameters for DC source " + compName + v1 = ' Enter value(Volts/Amps): ' + v2 = ' Enter zero frequency: ' + sourcelist.append( + [index, compline, words[3], Title, v1, v2]) + + elif compName[0] == 'h' or compName[0] == 'f': # Find the index component from the circuit - index=schematicInfo.index(compline) + index = schematicInfo.index(compline) schematicInfo.remove(compline) - schematicInfo.insert(index,"* "+compName) - schematicInfo1.append("V"+compName+" "+words[3]+" "+words[4]+" 0") - schematicInfo1.append(compName+" "+words[1]+" "+words[2]+" "+"V"+compName+" "+words[5]) - - schematicInfo=schematicInfo+schematicInfo1 - print("Source List : ",sourcelist) + schematicInfo.insert(index, "* " + compName) + schematicInfo1.append( + "V" + compName + " " + words[3] + " " + words[4] + " 0") + schematicInfo1.append( + compName + + " " + + words[1] + + " " + + words[2] + + " " + + "V" + + compName + + " " + + words[5]) + + schematicInfo = schematicInfo + schematicInfo1 + print("Source List : ", sourcelist) #print schematicInfo - return schematicInfo,sourcelist - - - def convertICintoBasicBlocks(self,schematicInfo,outputOption,modelList,plotText): + return schematicInfo, sourcelist + + def convertICintoBasicBlocks( + self, schematicInfo, outputOption, modelList, plotText): print("Reading Schematic info for Model") - #Insert details of Ngspice model + # Insert details of Ngspice model unknownModelList = [] multipleModelList = [] - plotList = ['plot_v1','plot_v2','plot_i2','plot_log','plot_db','plot_phase'] - interMediateNodeCount=1 + plotList = [ + 'plot_v1', + 'plot_v2', + 'plot_i2', + 'plot_log', + 'plot_db', + 'plot_phase'] + interMediateNodeCount = 1 k = 1 for compline in schematicInfo: words = compline.split() compName = words[0] #print "Compline----------------->",compline #print "compName-------------->",compName - # Find the IC from schematic - if compName[0]=='u' or compName[0] == 'U': + # Find the IC from schematic + if compName[0] == 'u' or compName[0] == 'U': # Find the component from the circuit - index=schematicInfo.index(compline) - compType=words[len(words)-1]; + index = schematicInfo.index(compline) + compType = words[len(words) - 1] schematicInfo.remove(compline) paramDict = {} - #e.g compLine : u1 1 2 gain - #compType : gain - #compName : u1 - #print "Compline",compline + # e.g compLine : u1 1 2 gain + # compType : gain + # compName : u1 + #print "Compline",compline #print "CompType",compType #print "Words",words #print "compName",compName - #Looking if model file is present + # Looking if model file is present if compType != "port" and compType != "ic" and compType not in plotList and compType != 'transfo': - xmlfile = compType+".xml" #XML Model File - count = 0 #Check if model of same name is present + xmlfile = compType + ".xml" # XML Model File + count = 0 # Check if model of same name is present modelPath = [] - all_dir = [x[0] for x in os.walk(PrcocessNetlist.modelxmlDIR)] + all_dir = [x[0] + for x in os.walk(PrcocessNetlist.modelxmlDIR)] for each_dir in all_dir: all_file = os.listdir(each_dir) if xmlfile in all_file: count += 1 - modelPath.append(os.path.join(each_dir,xmlfile)) - + modelPath.append(os.path.join(each_dir, xmlfile)) + if count > 1: multipleModelList.append(modelPath) elif count == 0: unknownModelList.append(compType) elif count == 1: try: - print("Start Parsing Previous Values XML for ngspice model :",modelPath) + print( + "Start Parsing Previous Values XML for ngspice model :", modelPath) tree = ET.parse(modelPath[0]) - + root = tree.getroot() - #Getting number of nodes for model and title + # Getting number of nodes for model and title for child in tree.iter(): if child.tag == 'node_number': num_of_nodes = int(child.text) elif child.tag == 'title': - title = child.text+" "+compName + title = child.text + " " + compName elif child.tag == 'name': modelname = child.text elif child.tag == 'type': - #Checking for Analog and Digital + # Checking for Analog and Digital type = child.text elif child.tag == 'split': splitDetail = child.text - - + for param in tree.findall('param'): for item in param: #print "Tags ",item.tag @@ -226,155 +249,173 @@ class PrcocessNetlist: #print "Tag having vector attribute",item.tag,item.attrib['vector'] temp_count = 1 temp_list = [] - for i in range(0,int(item.attrib['vector'])): - temp_list.append(item.text+" "+str(temp_count)) + for i in range(0, int( + item.attrib['vector'])): + temp_list.append( + item.text + " " + str(temp_count)) temp_count += 1 if 'default' in item.attrib: - paramDict[item.tag+":"+item.attrib['default']] = temp_list + paramDict[item.tag + ":" + + item.attrib['default']] = temp_list else: paramDict[item.tag] = item.text - + else: if 'default' in item.attrib: - paramDict[item.tag+":"+item.attrib['default']] = item.text + paramDict[item.tag + ":" + + item.attrib['default']] = item.text else: paramDict[item.tag] = item.text - - + #print "Number of Nodes : ",num_of_nodes #print "Title : ",title #print "Parameters",paramDict - #Creating line for adding model line in schematic + # Creating line for adding model line in schematic if splitDetail == 'None': - modelLine = "a"+str(k)+" " - for i in range(1,num_of_nodes+1): - modelLine += words[i]+" " + modelLine = "a" + str(k) + " " + for i in range(1, num_of_nodes + 1): + modelLine += words[i] + " " modelLine += compName - + else: - print("Split Details :",splitDetail) - modelLine = "a"+str(k)+" " + print("Split Details :", splitDetail) + modelLine = "a" + str(k) + " " vectorDetail = splitDetail.split(':') #print "Vector Details",vectorDetail - pos = 1 #Node position + pos = 1 # Node position for item in vectorDetail: try: if item.split("-")[1] == 'V': #print "Vector" if compType == "aswitch": modelLine += "(" - for i in range(0,int(item.split("-")[0])): - modelLine += words[pos]+" " + for i in range(0, int( + item.split("-")[0])): + modelLine += words[pos] + " " pos += 1 modelLine += ") " else: modelLine += "[" - for i in range(0,int(item.split("-")[0])): - modelLine += words[pos]+" " + for i in range(0, int( + item.split("-")[0])): + modelLine += words[pos] + " " pos += 1 - modelLine += "] " + modelLine += "] " elif item.split("-")[1] == 'NV': - #print "Non Vector" - for i in range(0,int(item.split("-")[0])): - modelLine += words[pos]+" " + #print "Non Vector" + for i in range(0, int( + item.split("-")[0])): + modelLine += words[pos] + " " pos += 1 - - except: - print("There is error while processing Vector Details") + + except BaseException: + print( + "There is error while processing Vector Details") sys.exit(2) - modelLine += compName - + modelLine += compName + #print "Final Model Line :",modelLine try: schematicInfo.append(modelLine) - k=k+1 + k = k + 1 except Exception as e: - print("Error while appending ModelLine ",modelLine) - print("Exception Message : ",str(e)) - #Insert comment at remove line - schematicInfo.insert(index,"* "+compline) - comment = "* Schematic Name: "+compType+", NgSpice Name: "+modelname - #Here instead of adding compType(use for XML), added modelName(Unique Model Name) - modelList.append([index,compline,modelname,compName,comment,title,type,paramDict]) + print( + "Error while appending ModelLine ", modelLine) + print("Exception Message : ", str(e)) + # Insert comment at remove line + schematicInfo.insert(index, "* " + compline) + comment = "* Schematic Name: " + compType + ", NgSpice Name: " + modelname + # Here instead of adding compType(use for XML), + # added modelName(Unique Model Name) + modelList.append( + [index, compline, modelname, compName, comment, title, type, paramDict]) except Exception as e: - print("Unable to parse the model, Please check your your XML file") - print("Exception Message : ",str(e)) + print( + "Unable to parse the model, Please check your your XML file") + print("Exception Message : ", str(e)) sys.exit(2) elif compType == "ic": - schematicInfo.insert(index,"* "+compline) + schematicInfo.insert(index, "* " + compline) modelname = "ic" - comment = "* "+compline - title = "Initial Condition for "+compName - type = "NA" #Its is not model - text = "Enter initial voltage at node for "+compline + comment = "* " + compline + title = "Initial Condition for " + compName + type = "NA" # Its is not model + text = "Enter initial voltage at node for " + compline paramDict[title] = text - modelList.append([index,compline,modelname,compName,comment,title,type,paramDict]) - + modelList.append( + [index, compline, modelname, compName, comment, title, type, paramDict]) + elif compType in plotList: - schematicInfo.insert(index,"* "+compline) + schematicInfo.insert(index, "* " + compline) if compType == 'plot_v1': words = compline.split() - plotText.append("plot v("+words[1]+")") + plotText.append("plot v(" + words[1] + ")") elif compType == 'plot_v2': words = compline.split() - plotText.append("plot v("+words[1]+","+words[2]+")") + plotText.append( + "plot v(" + words[1] + "," + words[2] + ")") elif compType == 'plot_i2': words = compline.split() - #Adding zero voltage source to netlist - schematicInfo.append("v_"+words[0]+" "+words[1]+" "+words[2]+" "+"0") - plotText.append("plot i(v_"+words[0]+")") + # Adding zero voltage source to netlist + schematicInfo.append( + "v_" + words[0] + " " + words[1] + " " + words[2] + " " + "0") + plotText.append("plot i(v_" + words[0] + ")") elif compType == 'plot_log': words = compline.split() - plotText.append("plot log("+words[1]+")") + plotText.append("plot log(" + words[1] + ")") elif compType == 'plot_db': words = compline.split() - plotText.append("plot db("+words[1]+")") + plotText.append("plot db(" + words[1] + ")") elif compType == 'plot_phase': words = compline.split() - plotText.append("plot phase("+words[1]+")") - + plotText.append("plot phase(" + words[1] + ")") + elif compType == 'transfo': - schematicInfo.insert(index,"* "+compline) - - #For Primary Couple - modelLine = "a"+str(k)+" ("+words[1]+" "+words[2]+") (interNode_"+str(interMediateNodeCount)+" "+words[3]+") " - modelLine += compName+"_primary" + schematicInfo.insert(index, "* " + compline) + + # For Primary Couple + modelLine = "a" + str(k) + " (" + words[1] + " " + words[2] + ") (interNode_" + str( + interMediateNodeCount) + " " + words[3] + ") " + modelLine += compName + "_primary" schematicInfo.append(modelLine) - k=k+1 - #For iron core - modelLine = "a"+str(k)+" ("+words[4]+" "+words[2]+") (interNode_"+str(interMediateNodeCount+1)+" "+words[3]+") " - modelLine += compName+"_secondary" + k = k + 1 + # For iron core + modelLine = "a" + str(k) + " (" + words[4] + " " + words[2] + ") (interNode_" + str( + interMediateNodeCount + 1) + " " + words[3] + ") " + modelLine += compName + "_secondary" schematicInfo.append(modelLine) - k=k+1 - #For Secondary Couple - modelLine = "a"+str(k)+" (interNode_"+str(interMediateNodeCount)+" interNode_"+str(interMediateNodeCount+1)+") " - modelLine += compName+"_iron_core" + k = k + 1 + # For Secondary Couple + modelLine = "a" + str(k) + " (interNode_" + str( + interMediateNodeCount) + " interNode_" + str(interMediateNodeCount + 1) + ") " + modelLine += compName + "_iron_core" schematicInfo.append(modelLine) - k=k+1 + k = k + 1 interMediateNodeCount += 2 - + modelname = "transfo" - comment = "* "+compline - title = "Transformer details for model "+compName - type = "NA" #It is model but do not load from xml and lib file + comment = "* " + compline + title = "Transformer details for model " + compName + type = "NA" # It is model but do not load from xml and lib file paramDict['h1_array'] = "Enter the H1 array " paramDict['primary_turns'] = "Enter the primary number of turns (default=310) " paramDict['area'] = "Enter iron core area (default=1)" paramDict['secondar_turns'] = "Enter the secondary number of turns (default=620)" paramDict['length'] = "Enter iron core length (default=0.01)" paramDict['b1_array'] = "Enter the B1 array " - - - modelList.append([index,compline,modelname,compName,comment,title,type,paramDict]) - + + modelList.append( + [index, compline, modelname, compName, comment, title, type, paramDict]) + else: - schematicInfo.insert(index,"* "+compline) - - print("UnknownModelList Used in the Schematic",unknownModelList) - print("Multiple Model XML file with same name ",multipleModelList) - print("Model List Details : ",modelList) - - return schematicInfo,outputOption,modelList,unknownModelList,multipleModelList,plotText - - - + schematicInfo.insert(index, "* " + compline) + + print( + "UnknownModelList Used in the Schematic", + unknownModelList) + print( + "Multiple Model XML file with same name ", + multipleModelList) + print("Model List Details : ", modelList) + + return schematicInfo, outputOption, modelList, unknownModelList, multipleModelList, plotText |