def __str__(self):
# create local dictionary to convert node-numbers to node-labels
num2node_label = {num: name for name, num in self.node_label2num.items()}
# build message to print
msg = '------------------------\n'
msg += ' SpicePy.Network:\n'
msg += '------------------------\n'
for ele, nodes, val in zip(self.names, self.nodes, self.values):
# if val is a list --> ele is a transient source
if isinstance(val, list):
if self.source_type[ele] == 'pwl':
fmt = "{} {} {} {}(" + "{} " * (len(val[0]) - 1) + "{})\n"
msg += fmt.format(ele, num2node_label[nodes[0]], num2node_label[nodes[1]], self.source_type[ele], *val[0])
else:
fmt = "{} {} {} {}(" + "{} " * (len(val) - 1) + "{})\n"
msg += fmt.format(ele, num2node_label[nodes[0]], num2node_label[nodes[1]], self.source_type[ele], *val)
# if val is complex --> ele is a phasor
elif np.iscomplex(val):
msg += "{} {} {} {} {}\n".format(ele, num2node_label[nodes[0]], num2node_label[nodes[1]], np.abs(val), np.angle(val) * 180/np.pi)
# if ele is C or L
elif ele[0].upper() == 'C' or ele[0].upper() == 'L':
# check if an i.c. is present and print it
if ele in self.IC:
msg += "{} {} {} {} ic={}\n".format(ele, num2node_label[nodes[0]], num2node_label[nodes[1]], val, self.IC[ele])
# otherwise...
else:
msg += "{} {} {} {}\n".format(ele, num2node_label[nodes[0]], num2node_label[nodes[1]], val)
# otherwise...general case --> ele n+ n- val
else:
msg += "{} {} {} {}\n".format(ele, num2node_label[nodes[0]], num2node_label[nodes[1]], val)
# add analysis
msg += " ".join(self.analysis) + '\n'
# if a plot command is present, add it
if self.plot_cmd is not None:
msg += self.plot_cmd + '\n'
# add number of nodes (reference node is included) and number of branches
msg += '------------------------\n'
msg += '* number of nodes {}\n'.format(self.node_num + 1)
msg += '* number of branches {}\n'.format(len(self.names))
msg += '------------------------\n'
return msg
评论列表
文章目录