lava.proc.dense

lava.proc.dense.models

digraph inheritancebdfd5e01d7 { bgcolor=transparent; rankdir=TB; size=""; "ABC" [fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",tooltip="Helper class that provides a standard way to create an ABC using"]; "AbstractLearningConnection" [URL="../lava.magma.core.model.py.html#lava.magma.core.model.py.connection.AbstractLearningConnection",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base class for learning connection ProcessModels."]; "AbstractProcessModel" [URL="../lava.magma.core.model.html#lava.magma.core.model.model.AbstractProcessModel",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Represents a model that implements the behavior of a Process."]; "ABC" -> "AbstractProcessModel" [arrowsize=0.5,style="setlinewidth(0.5)"]; "AbstractPyDelayDenseModel" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.AbstractPyDelayDenseModel",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract Conn Process with Dense synaptic connections which incorporates"]; "PyLoihiProcessModel" -> "AbstractPyDelayDenseModel" [arrowsize=0.5,style="setlinewidth(0.5)"]; "AbstractPyDenseModelBitAcc" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.AbstractPyDenseModelBitAcc",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Implementation of Conn Process with Dense synaptic connections that is"]; "PyLoihiProcessModel" -> "AbstractPyDenseModelBitAcc" [arrowsize=0.5,style="setlinewidth(0.5)"]; "AbstractPyDenseModelFloat" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.AbstractPyDenseModelFloat",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Implementation of Conn Process with Dense synaptic connections in"]; "PyLoihiProcessModel" -> "AbstractPyDenseModelFloat" [arrowsize=0.5,style="setlinewidth(0.5)"]; "AbstractPyProcessModel" [URL="../lava.magma.core.model.py.html#lava.magma.core.model.py.model.AbstractPyProcessModel",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Abstract interface for Python ProcessModels."]; "AbstractProcessModel" -> "AbstractPyProcessModel" [arrowsize=0.5,style="setlinewidth(0.5)"]; "ABC" -> "AbstractPyProcessModel" [arrowsize=0.5,style="setlinewidth(0.5)"]; "LearningConnectionModelBitApproximate" [URL="../lava.magma.core.model.py.html#lava.magma.core.model.py.connection.LearningConnectionModelBitApproximate",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Fixed-point, bit-approximate implementation of the Connection base"]; "PyLearningConnection" -> "LearningConnectionModelBitApproximate" [arrowsize=0.5,style="setlinewidth(0.5)"]; "LearningConnectionModelFloat" [URL="../lava.magma.core.model.py.html#lava.magma.core.model.py.connection.LearningConnectionModelFloat",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Floating-point implementation of the Connection Process."]; "PyLearningConnection" -> "LearningConnectionModelFloat" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyDelayDenseModelBitAcc" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.PyDelayDenseModelBitAcc",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Implementation of Conn Process with Dense synaptic connections that is"]; "AbstractPyDelayDenseModel" -> "PyDelayDenseModelBitAcc" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyDelayDenseModelFloat" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.PyDelayDenseModelFloat",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Implementation of Conn Process with Dense synaptic connections in"]; "AbstractPyDelayDenseModel" -> "PyDelayDenseModelFloat" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyDenseModelBitAcc" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.PyDenseModelBitAcc",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "AbstractPyDenseModelBitAcc" -> "PyDenseModelBitAcc" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyDenseModelFloat" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.PyDenseModelFloat",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "AbstractPyDenseModelFloat" -> "PyDenseModelFloat" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyLearningConnection" [URL="../lava.magma.core.model.py.html#lava.magma.core.model.py.connection.PyLearningConnection",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base class for learning connection ProcessModels in Python / CPU."]; "AbstractLearningConnection" -> "PyLearningConnection" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyLearningDenseModelBitApproximate" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.PyLearningDenseModelBitApproximate",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Implementation of Conn Process with Dense synaptic connections that"]; "LearningConnectionModelBitApproximate" -> "PyLearningDenseModelBitApproximate" [arrowsize=0.5,style="setlinewidth(0.5)"]; "AbstractPyDenseModelBitAcc" -> "PyLearningDenseModelBitApproximate" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyLearningDenseModelFloat" [URL="../lava/lava.proc.dense.html#lava.proc.dense.models.PyLearningDenseModelFloat",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Implementation of Conn Process with Dense synaptic connections in"]; "LearningConnectionModelFloat" -> "PyLearningDenseModelFloat" [arrowsize=0.5,style="setlinewidth(0.5)"]; "AbstractPyDenseModelFloat" -> "PyLearningDenseModelFloat" [arrowsize=0.5,style="setlinewidth(0.5)"]; "PyLoihiProcessModel" [URL="../lava.magma.core.model.py.html#lava.magma.core.model.py.model.PyLoihiProcessModel",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="ProcessModel to simulate a Process on Loihi using CPU."]; "AbstractPyProcessModel" -> "PyLoihiProcessModel" [arrowsize=0.5,style="setlinewidth(0.5)"]; }
class lava.proc.dense.models.AbstractPyDelayDenseModel(proc_params=None)

Bases: PyLoihiProcessModel

Abstract Conn Process with Dense synaptic connections which incorporates delays into the Conn Process.

a_buff: ndarray = None
calc_act(s_in)

Calculate the activation matrix based on s_in by performing delay_wgts * s_in.

Return type:

ndarray

delays: ndarray = None
static get_delay_wgts_mat(weights, delays, max_delay)

Create a matrix where the synaptic weights are separated by their corresponding delays. The first matrix contains all the weights, where the delay is equal to zero. The second matrix contains all the weights, where the delay is equal to one and so on. These matrices are then stacked together vertically.

Returns 2D matrix of form :rtype: ndarray

(num_flat_output_neurons * max_delay + 1, num_flat_input_neurons) where delay_wgts[

k * num_flat_output_neurons : (k + 1) * num_flat_output_neurons, :

] contains the weights for all connections with a delay equal to k. This allows for the updating of the activation buffer and updating weights.

update_act(s_in)

Updates the activations for the connection. Clears first column of a_buff and rolls them to the last column. Finally, calculates the activations for the current time step and adds them to a_buff. This order of operations ensures that delays of 0 correspond to the next time step.

weights: ndarray = None
class lava.proc.dense.models.AbstractPyDenseModelBitAcc(proc_params)

Bases: PyLoihiProcessModel

Implementation of Conn Process with Dense synaptic connections that is bit-accurate with Loihi’s hardware implementation of Dense, which means, it mimics Loihi behavior bit-by-bit.

a_buff: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'numpy.int32'>, precision=16)
a_out: PyOutPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyOutPortVectorDense'>, d_type=<class 'numpy.int32'>, precision=16)
num_message_bits: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'int'>, precision=5)
run_spk()

Function that runs in Spiking Phase

s_in: PyInPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyInPortVectorDense'>, d_type=<class 'bool'>, precision=1)
weights: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'numpy.int32'>, precision=8)
class lava.proc.dense.models.AbstractPyDenseModelFloat(proc_params=None)

Bases: PyLoihiProcessModel

Implementation of Conn Process with Dense synaptic connections in floating point precision. This short and simple ProcessModel can be used for quick algorithmic prototyping, without engaging with the nuances of a fixed point implementation.

a_buff: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'float'>, precision=None)
a_out: PyOutPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyOutPortVectorDense'>, d_type=<class 'float'>, precision=None)
num_message_bits: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'int'>, precision=5)
run_spk()

Function that runs in Spiking Phase

s_in: PyInPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyInPortVectorDense'>, d_type=<class 'bool'>, precision=1)
weights: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'float'>, precision=None)
class lava.proc.dense.models.PyDelayDenseModelBitAcc(proc_params)

Bases: AbstractPyDelayDenseModel

Implementation of Conn Process with Dense synaptic connections that is bit-accurate with Loihi’s hardware implementation of Dense, which means, it mimics Loihi behaviour bit-by-bit. DelayDense incorporates delays into the Conn Process. Loihi 2 has a maximum of 6 bits for delays, meaning a spike can be delayed by 0 to 63 time steps.

a_buff: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'numpy.int32'>, precision=16)
a_out: PyOutPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyOutPortVectorDense'>, d_type=<class 'numpy.int32'>, precision=16)
delays: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'numpy.int32'>, precision=6)
implements_process

alias of DelayDense

implements_protocol

alias of LoihiProtocol

num_message_bits: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'int'>, precision=5)
required_resources: ty.List[ty.Type[AbstractResource]] = [<class 'lava.magma.core.resources.CPU'>]
run_spk()

Function that runs in Spiking Phase

s_in: PyInPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyInPortVectorDense'>, d_type=<class 'bool'>, precision=1)
tags: ty.List[str] = ['bit_accurate_loihi', 'fixed_pt']
weights: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'numpy.int32'>, precision=8)
class lava.proc.dense.models.PyDelayDenseModelFloat(proc_params=None)

Bases: AbstractPyDelayDenseModel

Implementation of Conn Process with Dense synaptic connections in floating point precision. This short and simple ProcessModel can be used for quick algorithmic prototyping, without engaging with the nuances of a fixed point implementation. DelayDense incorporates delays into the Conn Process.

a_buff: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'float'>, precision=None)
a_out: PyOutPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyOutPortVectorDense'>, d_type=<class 'float'>, precision=None)
delays: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'int'>, precision=None)
implements_process

alias of DelayDense

implements_protocol

alias of LoihiProtocol

num_message_bits: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'int'>, precision=5)
required_resources: ty.List[ty.Type[AbstractResource]] = [<class 'lava.magma.core.resources.CPU'>]
run_spk()

Function that runs in Spiking Phase

s_in: PyInPort = LavaPyType(cls=<class 'lava.magma.core.model.py.ports.PyInPortVectorDense'>, d_type=<class 'bool'>, precision=1)
tags: ty.List[str] = ['floating_pt']
weights: ndarray = LavaPyType(cls=<class 'numpy.ndarray'>, d_type=<class 'float'>, precision=None)
class lava.proc.dense.models.PyDenseModelBitAcc(proc_params)

Bases: AbstractPyDenseModelBitAcc

implements_process

alias of Dense

implements_protocol

alias of LoihiProtocol

required_resources: ty.List[ty.Type[AbstractResource]] = [<class 'lava.magma.core.resources.CPU'>]
tags: ty.List[str] = ['bit_accurate_loihi', 'fixed_pt']
class lava.proc.dense.models.PyDenseModelFloat(proc_params=None)

Bases: AbstractPyDenseModelFloat

implements_process

alias of Dense

implements_protocol

alias of LoihiProtocol

required_resources: ty.List[ty.Type[AbstractResource]] = [<class 'lava.magma.core.resources.CPU'>]
tags: ty.List[str] = ['floating_pt']
class lava.proc.dense.models.PyLearningDenseModelBitApproximate(proc_params)

Bases: LearningConnectionModelBitApproximate, AbstractPyDenseModelBitAcc

Implementation of Conn Process with Dense synaptic connections that uses similar constraints as Loihi’s hardware implementation of dense connectivity but does not reproduce Loihi bit-by-bit.

implements_process

alias of LearningDense

implements_protocol

alias of LoihiProtocol

required_resources: ty.List[ty.Type[AbstractResource]] = [<class 'lava.magma.core.resources.CPU'>]
run_spk()

Function that runs in Spiking Phase

tags: ty.List[str] = ['bit_approximate_loihi', 'fixed_pt']
class lava.proc.dense.models.PyLearningDenseModelFloat(proc_params)

Bases: LearningConnectionModelFloat, AbstractPyDenseModelFloat

Implementation of Conn Process with Dense synaptic connections in floating point precision. This short and simple ProcessModel can be used for quick algorithmic prototyping, without engaging with the nuances of a fixed point implementation.

implements_process

alias of LearningDense

implements_protocol

alias of LoihiProtocol

required_resources: ty.List[ty.Type[AbstractResource]] = [<class 'lava.magma.core.resources.CPU'>]
run_spk()

Function that runs in Spiking Phase

tags: ty.List[str] = ['floating_pt']

lava.proc.dense.process

digraph inheritancec88e876f76 { bgcolor=transparent; rankdir=TB; size=""; "AbstractProcess" [URL="../lava.magma.core.process.html#lava.magma.core.process.process.AbstractProcess",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="The notion of a Process is inspired by the Communicating Sequential"]; "DelayDense" [URL="../lava/lava.proc.dense.html#lava.proc.dense.process.DelayDense",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top"]; "Dense" -> "DelayDense" [arrowsize=0.5,style="setlinewidth(0.5)"]; "Dense" [URL="../lava/lava.proc.dense.html#lava.proc.dense.process.Dense",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Dense connections between neurons. Realizes the following abstract"]; "AbstractProcess" -> "Dense" [arrowsize=0.5,style="setlinewidth(0.5)"]; "LearningConnectionProcess" [URL="../lava.magma.core.process.html#lava.magma.core.process.connection.LearningConnectionProcess",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Base class for connection Processes."]; "AbstractProcess" -> "LearningConnectionProcess" [arrowsize=0.5,style="setlinewidth(0.5)"]; "LearningDense" [URL="../lava/lava.proc.dense.html#lava.proc.dense.process.LearningDense",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=10,height=0.25,shape=box,style="setlinewidth(0.5),filled",target="_top",tooltip="Dense connections between neurons. Realizes the following abstract"]; "LearningConnectionProcess" -> "LearningDense" [arrowsize=0.5,style="setlinewidth(0.5)"]; "Dense" -> "LearningDense" [arrowsize=0.5,style="setlinewidth(0.5)"]; }
class lava.proc.dense.process.DelayDense(*, weights, delays, max_delay=0, name=None, num_message_bits=0, log_config=None, **kwargs)

Bases: Dense

class lava.proc.dense.process.Dense(*, weights, name=None, num_message_bits=0, log_config=None, **kwargs)

Bases: AbstractProcess

Dense connections between neurons. Realizes the following abstract behavior: a_out = weights * s_in

Parameters:
  • weights (numpy.ndarray) – 2D connection weight matrix of form (num_flat_output_neurons, num_flat_input_neurons) in C-order (row major).

  • weight_exp (int, optional) – Shared weight exponent of base 2 used to scale magnitude of weights, if needed. Mostly for fixed point implementations. Unnecessary for floating point implementations. Default value is 0.

  • num_weight_bits (int, optional) – Shared weight width/precision used by weight. Mostly for fixed point implementations. Unnecessary for floating point implementations. Default is for weights to use full 8 bit precision.

  • sign_mode (SignMode, optional) –

    Shared indicator whether synapse is of type SignMode.NULL, SignMode.MIXED, SignMode.EXCITATORY, or SignMode.INHIBITORY. If SignMode.MIXED, the sign of the weight is included in the weight bits and the fixed point weight used for inference is scaled by 2. Unnecessary for floating point implementations.

    In the fixed point implementation, weights are scaled according to the following equations: w_scale = 8 - num_weight_bits + weight_exp + isMixed() weights = weights * (2 ** w_scale)

  • num_message_bits (int, optional) – Determines whether the Dense Process deals with the incoming spikes as binary spikes (num_message_bits = 0) or as graded spikes (num_message_bits > 0). Default is 0.

class lava.proc.dense.process.LearningDense(*, weights, name=None, num_message_bits=0, log_config=None, learning_rule=None, graded_spike_cfg=GradedSpikeCfg.USE_REGULAR_IMPULSE, **kwargs)

Bases: LearningConnectionProcess, Dense

Dense connections between neurons. Realizes the following abstract behavior: a_out = weights * s_in ‘

Parameters:
  • weights (numpy.ndarray) – 2D connection weight matrix of form (num_flat_output_neurons, num_flat_input_neurons) in C-order (row major).

  • weight_exp (int, optional) – Shared weight exponent of base 2 used to scale magnitude of weights, if needed. Mostly for fixed point implementations. Unnecessary for floating point implementations. Default value is 0.

  • num_weight_bits (int, optional) – Shared weight width/precision used by weight. Mostly for fixed point implementations. Unnecessary for floating point implementations. Default is for weights to use full 8 bit precision.

  • sign_mode (SignMode, optional) –

    Shared indicator whether synapse is of type SignMode.NULL, SignMode.MIXED, SignMode.EXCITATORY, or SignMode.INHIBITORY. If SignMode.MIXED, the sign of the weight is included in the weight bits and the fixed point weight used for inference is scaled by 2. Unnecessary for floating point implementations.

    In the fixed point implementation, weights are scaled according to the following equations: w_scale = 8 - num_weight_bits + weight_exp + isMixed() weights = weights * (2 ** w_scale)

  • num_message_bits (int, optional) – Determines whether the LearningDense Process deals with the incoming spikes as binary spikes (num_message_bits = 0) or as graded spikes (num_message_bits > 0). Default is 0.

  • learning_rule (LoihiLearningRule) – Learning rule which determines the parameters for online learning.

  • graded_spike_cfg (GradedSpikeCfg) –

    Indicates how to use incoming graded spike to update pre-synaptic traces

    (0) GradedSpikeCfg.USE_REGULAR_IMPULSE interprets the spike as a binary spike, adds regular impulses to pre-synaptic traces, at the end of the epoch. (1) GradedSpikeCfg.OVERWRITE interprets the spike as a graded spike, overwrites the value of the pre-synaptic trace x1 by payload/2, upon spiking. (2) GradedSpikeCfg.ADD_WITH_SATURATION interprets the spike as a graded spike, adds payload/2 to the pre-synaptic trace x1, upon spiking, saturates x1 to 127 (fixed-pt/hw only). (3) GradedSpikeCfg.ADD_WITHOUT_SATURATION interprets the spike as a graded spike, adds payload/2 to the pre-synaptic trace x1, upon spiking, keeps only overflow above 127 in x1 (fixed-pt/hw only), adds regular impulse to x2 on overflow. In addition, only pre-synaptic graded spikes that trigger overflow in x1 and regular impulse addition to x2 will be considered by the learning rule Products conditioned on x0.