def save_files(self): stamps = {} children = self.model_stamp.root_item.children() for n, item in enumerate(children): page_size = item.data('Page size') ps = page_size.strip().split() stamp_name = '__stamp' + str(n) + '__.pdf' circle_stamp( stamp_name, ( float(ps[0]), float(ps[2]) ), ( self.ui.doubleSpinBox_width.value(), self.ui.doubleSpinBox_height.value() ), ( float(item.data('x'))/300.0*72.0, (float(item.data('height'))-float(item.data('y')))/300.0*72.0 ), self.stamp_texts() ) stamps[page_size] = stamp_name # stamp to pdfs children = self.model_file.root_item.children() for item in children: file_path = Path(item.data('Path')) stamp_path = Path(stamps[item.data('Page size')]) stamp(file_path, stamp_path, Path('output/')) # delete stamps for key in stamps: Path(stamps[key]).unlink()
def Main(): stamp.write_report() stamp.stamp(1) cyclic() looking_for_key()
def tran(mycircuit, elements, start, stop, step): result = [] previous_result = [] t = 0 show_t = [] while True: show_t += [t] vpulse_cur_value = None for element in elements: element = element[0] if element.is_v_pulse: vpulse_cur_value = v_pulse_tran(t, element) if t == 0: if mycircuit.has_nonlinear: previous_result = \ mos_iter(mycircuit=mycircuit, elements=elements, t=t, vpulse_cur_value=vpulse_cur_value) else: mna, rhs = stamp.stamp(mycircuit=mycircuit, elements=elements, t=t, vpulse_cur_value=vpulse_cur_value) previous_result = op(mna, rhs) if t >= start: result += [previous_result] else: pass elif t <= stop: if mycircuit.has_nonlinear: previous_result = mos_iter(mycircuit=mycircuit, elements=elements, vpulse_cur_value=vpulse_cur_value, t=t, v_t_minus_h=previous_result, i_t_minus_h=previous_result) else: mna, rhs = stamp.stamp(mycircuit=mycircuit, vgs=0, vds=0, elements=elements, vpulse_cur_value=vpulse_cur_value, t=t, v_t_minus_h=previous_result, i_t_minus_h=previous_result) previous_result = op(mna, rhs) if t >= start: result += [previous_result] else: pass else: break t += step return show_t, result
def main(): c = Config() reddit = c.praw() dbconn = DB(c) dbconn.drop_all() dbconn.create_all() sess = dbconn.session() source = sys.argv[1] regions = Region.create_from_json(sess, json_file=source) stamp()
def cyclic(): global prev_state,state hDesktop = OpenDesktop ("default", 0, False, DESKTOP_SWITCHDESKTOP) #state = SwitchDesktop (hDesktop) stamp.stamp(state) if exit_flag(): stamp.stamp(0) stamp.write_report() sys.exit() prev_state = state threading.Timer(1, cyclic).start()
def diode_iter(mycircuit, elements, dc_sweep_source=None, dc_sweep_v_value=None, ac=False, s=None, tran=False, vpulse_cur_value=None, t=0, v_t_minus_h=None, i_t_minus_h=None): node_num = mycircuit.get_nodes_number() result = np.zeros(node_num) # set initial value for element in elements: element = element[0] name = element.name.lower() if name: if name[0] == 'd': result[element.n1] = 1 pre_result = 1 cur_result = 0 delta = 1e-12 VD = 0 ID = 0 while True: if abs(pre_result - cur_result) < delta: break pre_result = cur_result for element in elements: element = element[0] name = element.name.lower() if name: if name[0] == 'd': VD = result[element.n1] - result[element.n2] ID = math.exp(40 * np.real(VD)) - 1 mna, rhs = stamp.stamp(mycircuit=mycircuit, elements=elements, ID=ID, VD=VD, vgs=0, vds=0, dc_sweep_source=dc_sweep_source, dc_sweep_v_value=dc_sweep_v_value, ac=ac, s=s, tran=tran, vpulse_cur_value=vpulse_cur_value, t=t, v_t_minus_h=v_t_minus_h, i_t_minus_h=i_t_minus_h) result = op(mna, rhs) cur_result = ID return result
def main(): c = Config() reddit = c.praw() dbconn = DB(c) dbconn.drop_all() dbconn.create_all() sess = dbconn.session() source = sys.argv[1] regions = Region.create_from_json(sess, json_file=source) # Create team DB entries TeamInfo.create_defaults(sess, c) stamp()
def stamp(cmdline): survey = model.survey.Survey.load(cmdline['project']) import stamp if cmdline['output'] is None: output = survey.new_path('stamped_%i.pdf') else: output = cmdline['output'] return stamp.stamp(survey, output, cmdline)
def ac(mycircuit, elements, start, stop, point_number, sweep_type=None): omega = None result = [] if sweep_type.upper() == 'LOG': omega = 2 * np.pi * log_sweep( start=start, stop=stop, point_number=point_number) # type: float elif sweep_type.upper() == 'LIN': omega = 2 * np.pi * lin_sweep( start=start, stop=stop, point_number=point_number) else: pass if omega.all(): for omg in omega: s = 1j * omg mna, rhs = stamp.stamp(mycircuit=mycircuit, elements=elements, s=s, ac=True) result += [op(mna=mna, rhs=rhs)] return result
def dc_sweep(mycircuit, elements, start, stop, point_number, source, sweep_type='LIN'): sweep_v = None result = [] if sweep_type: if sweep_type.upper() == 'LOG': sweep_v = log_sweep(start=start, stop=stop, point_number=point_number) elif sweep_type.upper() == 'LIN': sweep_v = lin_sweep(start=start, stop=stop, point_number=point_number) else: sweep_v = lin_sweep(start=start, stop=stop, point_number=point_number) for dc_sweep_v_value in sweep_v: if mycircuit.has_nonlinear: result += [ diode_iter(mycircuit=mycircuit, elements=elements, dc_sweep_source=source, dc_sweep_v_value=dc_sweep_v_value) ] else: mna, rhs = stamp.stamp(mycircuit=mycircuit, elements=elements, dc_sweep_source=source, dc_sweep_v_value=dc_sweep_v_value) result += [op(mna=mna, rhs=rhs)] return result
def log_write_cycle(): global state stamp.stamp(state) print state threading.Timer(2, log_write_cycle).start()
def mos_iter(mycircuit, elements, dc_sweep_source=None, dc_sweep_v_value=None, ac=False, s=None, tran=False, vpulse_cur_value=None, t=0, v_t_minus_h=None, i_t_minus_h=None): node_num = mycircuit.get_nodes_number() result = np.zeros(node_num + 1) # ??? # set initial value for element in elements: element = element[0] name = element.name.lower() if name: if name[0] == 'm': result[element.ng] = 1 result[element.nd] = 1 pre_vgs = 1 pre_vds = 1 cur_vgs = 0 cur_vds = 0 delta = 1e-12 i = 0 while True: print('mos iter round %d' % i) i += 1 if (abs(np.real(pre_vgs - cur_vgs)) < delta) and (abs( np.real(pre_vds - cur_vds)) < delta): break pre_vgs = cur_vgs pre_vds = cur_vds for element in elements: element = element[0] name = element.name.lower() if name: if name[0] == 'm': cur_vgs = result[element.ng] - result[element.ns] cur_vds = result[element.nd] - result[element.ns] mna, rhs = stamp.stamp(mycircuit=mycircuit, elements=elements, ID=0, VD=0, vgs=cur_vgs, vds=cur_vds, dc_sweep_source=dc_sweep_source, dc_sweep_v_value=dc_sweep_v_value, ac=ac, s=s, tran=tran, vpulse_cur_value=vpulse_cur_value, t=t, v_t_minus_h=v_t_minus_h, i_t_minus_h=i_t_minus_h) result = op(mna, rhs) print(result) return result
def simulate(): mycircuit, elements = parser.parse('netlist_example_1.sp') if mycircuit.op: mna, rhs = stamp.stamp(mycircuit=mycircuit, elements=elements, s=None, ac=None) op_result = analysis.op(mna=mna, rhs=rhs) print("Operating Point:\n", op_result, "\n") if mycircuit.dc: dc_result = analysis.dc_sweep(mycircuit=mycircuit, elements=elements, start=mycircuit.dc_start, stop=mycircuit.dc_stop, point_number=mycircuit.dc_point_number, source=mycircuit.dc_source, sweep_type=mycircuit.dc_type) x = np.linspace(mycircuit.dc_start, mycircuit.dc_stop, mycircuit.dc_point_number, endpoint=True) rslt_num = len(dc_result) y = np.zeros(len(x)) for i in range(len(dc_result[0]) - 1): for j in range(rslt_num): # y[j] = dc_result[j][i][0] y[j] = math.exp( 40 * np.real(dc_result[j][i][0])) - 1 # i of diode plt.plot(x, y, linewidth=1.0, linestyle="-") plt.xlim(mycircuit.dc_start, mycircuit.dc_stop) plt.xticks( np.linspace(mycircuit.dc_start, mycircuit.dc_stop, 5, endpoint=True)) ymax = max(y, key=lambda a: a) ymin = min(y, key=lambda a: a) plt.yticks(np.linspace(ymax, ymin, 5, endpoint=True)) plt.xlabel('x') plt.ylabel('y') # plt.title('Node %d DC sweep result\n' % (i+1), fontsize=12) plt.title('i-v of diode\n', fontsize=12) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) # plt.savefig("Node %d DC sweep result.png" % (i+1), dpi=288) plt.savefig('i-v of diode\n', dpi=288) plt.show() if mycircuit.ac: ac_result = analysis.ac(mycircuit=mycircuit, elements=elements, start=mycircuit.ac_start, stop=mycircuit.ac_stop, point_number=mycircuit.ac_point_number, sweep_type=mycircuit.ac_type) if mycircuit.ac_type.upper() == 'LIN': x = np.linspace(mycircuit.ac_start, mycircuit.ac_stop, mycircuit.ac_point_number, endpoint=True) elif mycircuit.ac_type.upper() == 'LOG': x = 10**(np.linspace(np.log10(mycircuit.ac_start), np.log10(mycircuit.ac_stop), mycircuit.ac_point_number)) else: pass rslt_num = len(ac_result) y = np.zeros(len(x)) for i in range(len(ac_result[0]) - 1): for j in range(rslt_num): y[j] = get_complex_magnitude(ac_result[j][i][0]) plt.plot(x, y, linewidth=1.0, linestyle="-") plt.xlim(mycircuit.ac_start, mycircuit.ac_stop) plt.xticks( np.linspace(mycircuit.ac_start, mycircuit.ac_stop, 5, endpoint=True)) ymax = max(y, key=lambda a: a) ymin = min(y, key=lambda a: a) plt.yticks(np.linspace(ymax, ymin, 5, endpoint=True)) plt.xlabel('x') plt.ylabel('y') plt.title('Node %d AC result (/V)\n' % (i + 1), fontsize=12) plt.savefig("Node %d AC result.png" % (i + 1), dpi=288) plt.show() if mycircuit.tran: t, tran_result = analysis.tran(mycircuit=mycircuit, elements=elements, start=mycircuit.tran_start, stop=mycircuit.tran_stop, step=mycircuit.tran_step) rslt_num = len(tran_result) y = np.zeros(len(t)) for i in range(len(tran_result[0]) - 1): for j in range(rslt_num): y[j] = np.real(tran_result[j][i][0]) plt.plot(t, y, linewidth=1.0, linestyle="-") plt.xlim(mycircuit.tran_start, mycircuit.tran_stop) plt.xticks( np.linspace(mycircuit.tran_start, mycircuit.tran_stop, 5, endpoint=True)) ymax = max(y, key=lambda a: a) ymin = min(y, key=lambda a: a) plt.yticks(np.linspace(ymax, ymin, 5, endpoint=True)) plt.xlabel('x') plt.ylabel('y') plt.title('Node %d TRAN result\n' % (i + 1), fontsize=12) ax = plt.gca() ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data', 0)) ax.yaxis.set_ticks_position('left') ax.spines['left'].set_position(('data', 0)) plt.savefig("Node %d TRAN result.png" % (i + 1), dpi=288) plt.show()