Source code for nengo_extras.probe

import nengo
from nengo.utils.compat import is_iterable


[docs]def probe_all( # noqa: C901 net, recursive=False, probe_options=None, **probe_args): """Probes all objects in a network. Parameters ---------- net : nengo.Network recursive : bool, optional (Default: False) Probe subnetworks recursively. probe_options: dict, optional (Default: None) A dict of the form {nengo_object_class: [attributes_to_probe]}. If None, every probeable attribute of every object will be probed. Returns ------- A dictionary that maps objects and their attributes to their probes. Examples -------- Probe the decoded output and spikes in all ensembles in a network and its subnetworks:: with nengo.Network() as model: ens1 = nengo.Ensemble(n_neurons=1, dimensions=1) node1 = nengo.Node(output=[0]) conn = nengo.Connection(node1, ens1) subnet = nengo.Network(label='subnet') with subnet: ens2 = nengo.Ensemble(n_neurons=1, dimensions=1) node2 = nengo.Node(output=[0]) probe_options = {nengo.Ensemble: ['decoded_output', 'spikes']} probes = probe_all(model, recursive=True, probe_options=probe_options) """ probes = {} def all_probes(obj): if probe_options is not None and type(obj) in probe_options: attrs = probe_options[type(obj)] else: attrs = obj.probeable return {attr: nengo.Probe(obj, attr, **probe_args) for attr in attrs} ensembles = net.all_ensembles if recursive else net.ensembles nodes = net.all_nodes if recursive else net.nodes connections = net.all_connections if recursive else net.connections with net: if probe_options is None or nengo.Ensemble in probe_options: for ens in ensembles: probes[ens] = all_probes(ens) if probe_options is None or nengo.ensemble.Neurons in probe_options: for ens in ensembles: probes[ens.neurons] = all_probes(ens.neurons) if probe_options is None or nengo.Node in probe_options: for node in nodes: probes[node] = all_probes(node) if probe_options is None or nengo.Connection in probe_options: for conn in connections: probes[conn] = all_probes(conn) LearningRule = nengo.connection.LearningRule if probe_options is None or LearningRule in probe_options: for conn in connections: lr = conn.learning_rule if lr is None: continue if not is_iterable(lr): lr = [lr] for rule in lr: probes[rule] = all_probes(rule) return probes