Example #1
0
 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()
Example #2
0
def Main():
	
	stamp.write_report()
	stamp.stamp(1)	
	
	cyclic()
	looking_for_key()
Example #3
0
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
Example #4
0
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()
Example #5
0
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()
Example #6
0
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
Example #7
0
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()
Example #8
0
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)
Example #9
0
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)
Example #10
0
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
Example #11
0
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
Example #12
0
def log_write_cycle():
	global state
	stamp.stamp(state)
	print state
	threading.Timer(2, log_write_cycle).start()
Example #13
0
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
Example #14
0
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()