Source code for nengo.spa.input
import nengo
from nengo.spa.module import Module
from nengo.utils.compat import iteritems
def make_parse_func(func, vocab):
"""Create a function that calls func and parses the output in vocab."""
def parse_func(t):
return vocab.parse(func(t)).v
return parse_func
[docs]class Input(Module):
"""A SPA module for providing external inputs to other modules.
The parameters passed to this module indicate the module input name
and the function to execute to generate inputs to that module.
The functions should always return strings, which will then be parsed
by the relevant vocabulary. For example::
def input1(t):
if t < 0.1:
return 'A'
else:
return '0'
spa_net.input = spa.Input(vision=input1, task='X')
will create two inputs:
1. an input to the ``vision`` module, which for the first 0.1 seconds
is the value associated with the ``'A'`` semantic pointer and then
a vector of all zeros, and
2. an input to the ``task`` module which is always the value associated
with the ``'X'`` semantic pointer.
Parameters
----------
label : str, optional (Default: None)
A name for the ensemble. Used for debugging and visualization.
seed : int, optional (Default: None)
The seed used for random number generation.
add_to_container : bool, optional (Default: None)
Determines if this Network will be added to the current container.
If None, will be true if currently in a Network context.
"""
def __init__(self, label=None, seed=None, add_to_container=None, **kwargs):
super(Input, self).__init__(label, seed, add_to_container)
self.kwargs = kwargs
self.input_nodes = {}
[docs] def on_add(self, spa):
"""Create the connections and nodes."""
Module.on_add(self, spa)
for name, value in iteritems(self.kwargs):
target, vocab = spa.get_module_input(name)
if callable(value):
val = make_parse_func(value, vocab)
else:
val = vocab.parse(value).v
with self:
node = nengo.Node(val, label='input_%s' % name)
self.input_nodes[name] = node
with spa:
nengo.Connection(node, target, synapse=None)