Ejemplo n.º 1
0
    def swi_javaviz(self, filename, code):
        if self.user is None: return
        code = code.replace('\r\n', '\n')

        locals = {}
        exec(code, locals)

        model = locals['model']
        cfg = locals.get('gui', None)
        if cfg is None:
            cfg = nengo_gui.Config()

        model_config = locals.get('config', None)

        nf = nengo_gui.namefinder.NameFinder(locals, model)

        jv = javaviz.View(model,
                          default_labels=nf.known_name,
                          filename=filename,
                          realtime=self.realtime_simulator)
        if model_config is not None:
            sim = self.simulator_class(model, config=model_config)
        else:
            sim = self.simulator_class(model)
        jv.update_model(sim)
        jv.view(config=cfg)
        try:
            if self.realtime_simulator:
                sim.run()
            else:
                while True:
                    try:
                        sim.run(1)
                    except javaviz.VisualizerResetException:
                        sim.reset()
        except javaviz.VisualizerExitException:
            print('Finished running JavaViz simulation')
Ejemplo n.º 2
0
    # Connect the input node to ensemble A
    nengo.Connection(input_node, A)

    # Shut off learning by inhibiting the error population
    stop_learning = nengo.Node(output=lambda t: t >= 15, label="stop learning")
    nengo.Connection(stop_learning,
                     error.neurons,
                     transform=-20 * np.ones((error.n_neurons, 1)))

    input_node_probe = nengo.Probe(input_node)
    A_probe = nengo.Probe(A, synapse=0.01)
    A_squared_probe = nengo.Probe(A_squared, synapse=0.01)
    error_probe = nengo.Probe(error, synapse=0.01)
    learn_probe = nengo.Probe(stop_learning, synapse=None)

import nengo_gui
gui = nengo_gui.Config()
gui[model].scale = 1.169342373157824
gui[model].offset = 119.41827203911265, 59.133560955504436
gui[A].pos = 175.000, 50.000
gui[A].scale = 1.000
gui[A_squared].pos = 279.965, 48.215
gui[A_squared].scale = 1.000
gui[error].pos = 280.284, 136.393
gui[error].scale = 1.000
gui[input_node].pos = 50.000, 50.000
gui[input_node].scale = 1.000
gui[stop_learning].pos = 148.212, 139.535
gui[stop_learning].scale = 1.000
Ejemplo n.º 3
0
    def swi_graph_json(self, code, feedforward=False, graph_mode='normal'):
        if self.user is None: return
        if feedforward == "true":
            feedforward = True
        code = code.replace('\r\n', '\n')

        try:
            index = code.index('\nimport nengo_gui\n')
            code_gui = code[index:]
            code = code[:index]
        except ValueError:
            code_gui = ''

        codefile, code_fn = tempfile.mkstemp(suffix='nengo_gui_temp.py')
        with os.fdopen(codefile, 'w') as f:
            f.write(code)

        try:
            c = compile(code, code_fn, 'exec')
            locals = {}
            exec(c, locals)
        except (SyntaxError, Exception):
            try:
                e_type, e_value, e_traceback = sys.exc_info()
                tb = traceback.extract_tb(e_traceback)

                if e_type is SyntaxError:
                    error_line = e_value.lineno
                elif e_type is IndentationError:
                    error_line = e_value.lineno
                else:
                    for (fn, line, funcname, text) in reversed(tb):
                        if fn == code_fn:
                            error_line = line
                            break
                    else:
                        print('Unknown Error')
                        error_line = 0

                print(tb)
                traceback.print_exc()

                os.remove(code_fn)

                return json.dumps(
                    dict(error_line=error_line, text=str(e_value)))
            except:
                traceback.print_exc()
        os.remove(code_fn)

        # run gui code lines, skipping ones that cause name errors
        for i, line in enumerate(code_gui.splitlines()):
            try:
                exec(line, globals(), locals)
            except NameError:
                # this is generally caused by having a gui[x].pos statement
                #  for something that has been deleted
                pass
            except AttributeError:
                # this is generally caused by having a gui[a.x].pos statement
                #  for something that has been deleted
                pass
            except IndexError:
                # this is generally caused by having a statement like
                # gui[model.ensemble[i]].pos statement for something that has
                # been deleted
                pass
            except KeyError:
                # this is generally caused by having a gui[input].pos statement
                #  for something that has been deleted but happened to have
                #  the same name as a builtin
                pass

        model = locals.get('model', None)
        if model is None:
            return json.dumps(
                dict(error_line=1,
                     text='The top-level nengo.Network must be named "model"'))

        if graph_mode == 'normal':
            if feedforward:
                cfg = nengo_gui.Config()

                conv = nengo_gui.converter.Converter(model, code.splitlines(),
                                                     locals, cfg)
                feedforward_layout(model, cfg, locals, conv.links,
                                   conv.objects)
                conv.global_scale = 1.0
                conv.global_offset = 0.0, 0.0
            else:
                cfg = locals.get('gui', None)
                if cfg is None:
                    cfg = nengo_gui.Config()

                gui_layout = nengo_gui.layout.Layout(model, cfg)
                conv = nengo_gui.converter.Converter(model, code.splitlines(),
                                                     locals, cfg)

            return conv.to_json()
        else:
            return json.dumps(
                dict(nodes=[],
                     links=[],
                     global_scale=1.0,
                     global_offset=(0, 0)))