Source code for axon_sdk.networks.memory.signed_constant
from axon_sdk.primitives import (
SpikingNetworkModule,
DataEncoder,
)
import math
from typing import Optional
[docs]
class SignedConstantNetwork(SpikingNetworkModule):
def __init__(self, encoder: DataEncoder, value: float, module_name: Optional[str] = None) -> None:
super().__init__(module_name)
self.encoder = encoder
self.value = value
Vt = 10.0
tm = 100.0
tf = 20.0
we = Vt
Tsyn = 1.0
f_x = (math.fabs(value) * self.encoder.Tcod) + encoder.Tmin
# Create constant neuron
self.recall = self.add_neuron(
Vt=Vt, tm=tm, tf=tf, Vreset=0.0, neuron_name="recall"
)
self.output_plus = self.add_neuron(
Vt=Vt, tm=tm, tf=tf, Vreset=0.0, neuron_name="output_plus"
)
self.output_minus = self.add_neuron(
Vt=Vt, tm=tm, tf=tf, Vreset=0.0, neuron_name="output_minus"
)
# Connect constant neuron to itself with a delay
if value >= 0:
self.connect_neurons(self.recall, self.output_plus, "V", we, Tsyn)
self.connect_neurons(self.recall, self.output_plus, "V", we, Tsyn + f_x)
else:
self.connect_neurons(self.recall, self.output_minus, "V", we, Tsyn)
self.connect_neurons(self.recall, self.output_minus, "V", we, Tsyn + f_x)
if __name__ == "__main__":
from axon_sdk import Simulator
encoder = DataEncoder()
value = -1.0 # Constant value between 0–1
constant_network = SignedConstantNetwork(encoder, value)
sim = Simulator(constant_network, encoder)
sim.apply_input_spike(constant_network.recall, t=0)
sim.simulate(simulation_time=120)
output_spikes = sim.spike_log[constant_network.output_minus.uid]
print(f"Input value: {value}")
print(f"Output spikes: {output_spikes}")