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')
# 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
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)))