def test_neuron_bayesian(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.bayesian.enable, False)
        neuron.bayesian.enable = True
        self.assertEqual(neuron.bayesian.enable, True)

        self.assertEqual(neuron.bayesian.connect_fire_vertical, False)
        neuron.bayesian.connect_fire_vertical = True
        self.assertEqual(neuron.bayesian.connect_fire_vertical, True)

        self.assertEqual(neuron.bayesian.connect_fire_to_right, False)
        neuron.bayesian.connect_fire_to_right = True
        self.assertEqual(neuron.bayesian.connect_fire_to_right, True)

        self.assertEqual(neuron.bayesian.connect_fire_from_right, False)
        neuron.bayesian.connect_fire_from_right = True
        self.assertEqual(neuron.bayesian.connect_fire_from_right, True)

        self.assertEqual(neuron.bayesian.enable_master, True)
        neuron.bayesian.enable_master = False
        self.assertEqual(neuron.bayesian.enable_master, False)

        self.assertEqual(neuron.bayesian.enable_slave, False)
        neuron.bayesian.enable_slave = True
        self.assertEqual(neuron.bayesian.enable_slave, True)

        self.assertEqual(neuron.bayesian.enable_0, False)
        neuron.bayesian.enable_0 = True
        self.assertEqual(neuron.bayesian.enable_0, True)

        self.assertEqual(neuron.bayesian.enable_1, False)
        neuron.bayesian.enable_1 = True
        self.assertEqual(neuron.bayesian.enable_1, True)
    def test_neuron_multicompartment(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.multicompartment.connect_soma, False)
        neuron.multicompartment.connect_soma = True
        self.assertEqual(neuron.multicompartment.connect_soma, True)

        self.assertEqual(neuron.multicompartment.connect_soma_right, False)
        neuron.multicompartment.connect_soma_right = True
        self.assertEqual(neuron.multicompartment.connect_soma_right, True)

        self.assertEqual(neuron.multicompartment.connect_right, False)
        neuron.multicompartment.connect_right = True
        self.assertEqual(neuron.multicompartment.connect_right, True)

        self.assertEqual(neuron.multicompartment.connect_vertical, False)
        neuron.multicompartment.connect_vertical = True
        self.assertEqual(neuron.multicompartment.connect_vertical, True)

        self.assertEqual(neuron.multicompartment.enable_conductance_division,
                         False)
        neuron.multicompartment.enable_conductance_division = True
        self.assertEqual(neuron.multicompartment.enable_conductance_division,
                         True)

        self.assertEqual(
            neuron.multicompartment.enable_conductance_multiplication, False)
        neuron.multicompartment.enable_conductance_multiplication = True
        self.assertEqual(
            neuron.multicompartment.enable_conductance_multiplication, True)
    def test_neuron_event_routing(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.event_routing.enable_analog, False)
        neuron.event_routing.enable_analog = True
        self.assertEqual(neuron.event_routing.enable_analog, True)

        self.assertEqual(neuron.event_routing.enable_digital, False)
        neuron.event_routing.enable_digital = True
        self.assertEqual(neuron.event_routing.enable_digital, True)

        self.assertEqual(neuron.event_routing.enable_bypass_excitatory, False)
        neuron.event_routing.enable_bypass_excitatory = True
        self.assertEqual(neuron.event_routing.enable_bypass_excitatory, True)

        self.assertEqual(neuron.event_routing.enable_bypass_inhibitory, False)
        neuron.event_routing.enable_bypass_inhibitory = True
        self.assertEqual(neuron.event_routing.enable_bypass_inhibitory, True)

        self.assertEqual(neuron.event_routing.enable_post_overwrite, False)
        neuron.event_routing.enable_post_overwrite = True
        self.assertEqual(neuron.event_routing.enable_post_overwrite, True)

        self.assertEqual(neuron.event_routing.address, 0)
        value = random_ranged(lola.AtomicNeuron.EventRouting.Address)
        neuron.event_routing.address = value
        self.assertEqual(neuron.event_routing.address, value)
    def test_neuron_adaptation(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.adaptation.enable, False)
        neuron.adaptation.enable = True
        self.assertEqual(neuron.adaptation.enable, True)

        self.assertEqual(neuron.adaptation.enable_capacitor, False)
        neuron.adaptation.enable_capacitor = True
        self.assertEqual(neuron.adaptation.enable_capacitor, True)

        self.assertEqual(neuron.adaptation.invert_a, False)
        neuron.adaptation.invert_a = True
        self.assertEqual(neuron.adaptation.invert_a, True)

        self.assertEqual(neuron.adaptation.invert_b, False)
        neuron.adaptation.invert_b = True
        self.assertEqual(neuron.adaptation.invert_b, True)

        self.assertEqual(neuron.adaptation.i_w, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.adaptation.i_w = value
        self.assertEqual(neuron.adaptation.i_w, value)

        self.assertEqual(neuron.adaptation.i_bias_sd, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.adaptation.i_bias_sd = value
        self.assertEqual(neuron.adaptation.i_bias_sd, value)

        self.assertEqual(neuron.adaptation.i_bias_res, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.adaptation.i_bias_res = value
        self.assertEqual(neuron.adaptation.i_bias_res, value)
    def test_neuron_exponential(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.exponential.enable, False)
        neuron.exponential.enable = True
        self.assertEqual(neuron.exponential.enable, True)

        self.assertEqual(neuron.exponential.strength, 0)
        value = random_ranged(lola.AtomicNeuron.Exponential.Strength)
        neuron.exponential.strength = value
        self.assertEqual(neuron.exponential.strength, value)
    def test_neuron_constant(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.constant_current.i_offset, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.constant_current.i_offset = value
        self.assertEqual(neuron.constant_current.i_offset, value)

        self.assertEqual(neuron.constant_current.enable, False)
        neuron.constant_current.enable = True
        self.assertEqual(neuron.constant_current.enable, True)
    def test_neuron_threshold(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.threshold.v_threshold, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.threshold.v_threshold = value
        self.assertEqual(neuron.threshold.v_threshold, value)

        self.assertEqual(neuron.threshold.enable, False)
        neuron.threshold.enable = True
        self.assertEqual(neuron.threshold.enable, True)
    def test_neuron_membrane(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.membrane_capacitance.enable_merge, False)
        neuron.membrane_capacitance.enable_merge = True
        self.assertEqual(neuron.membrane_capacitance.enable_merge, True)

        self.assertEqual(neuron.membrane_capacitance.capacitance, 0)
        value = random_ranged(
            lola.AtomicNeuron.MembraneCapacitance.CapacitorSize)
        neuron.membrane_capacitance.capacitance = value
        self.assertEqual(neuron.membrane_capacitance.capacitance, value)
    def test_neuron_readout(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.readout.enable_buffered_access, False)
        neuron.readout.enable_buffered_access = True
        self.assertEqual(neuron.readout.enable_buffered_access, True)

        self.assertEqual(neuron.readout.enable_amplifier, False)
        neuron.readout.enable_amplifier = True
        self.assertEqual(neuron.readout.enable_amplifier, True)

        self.assertEqual(neuron.readout.enable_unbuffered_access, False)
        neuron.readout.enable_unbuffered_access = True
        self.assertEqual(neuron.readout.enable_unbuffered_access, True)

        self.assertEqual(neuron.readout.source, neuron.Readout.Source.membrane)
        value = lola.AtomicNeuron.Readout.Source.adaptation
        neuron.readout.source = value
        self.assertEqual(neuron.readout.source, value)
    def test_neuron_synaptic_inputs(self):
        neuron = lola.AtomicNeuron()

        # excitatory
        self.assertEqual(neuron.excitatory_input.enable, False)
        neuron.excitatory_input.enable = True
        self.assertEqual(neuron.excitatory_input.enable, True)

        self.assertEqual(neuron.excitatory_input.i_bias_res, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.excitatory_input.i_bias_res = value
        self.assertEqual(neuron.excitatory_input.i_bias_res, value)

        self.assertEqual(neuron.excitatory_input.i_bias_gm, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.excitatory_input.i_bias_gm = value
        self.assertEqual(neuron.excitatory_input.i_bias_gm, value)

        self.assertEqual(neuron.excitatory_input.v_syn, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.excitatory_input.v_syn = value
        self.assertEqual(neuron.excitatory_input.v_syn, value)

        # inhibitory
        self.assertEqual(neuron.inhibitory_input.enable, False)
        neuron.inhibitory_input.enable = True
        self.assertEqual(neuron.inhibitory_input.enable, True)

        self.assertEqual(neuron.inhibitory_input.i_bias_res, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.inhibitory_input.i_bias_res = value
        self.assertEqual(neuron.inhibitory_input.i_bias_res, value)

        self.assertEqual(neuron.inhibitory_input.i_bias_gm, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.inhibitory_input.i_bias_gm = value
        self.assertEqual(neuron.inhibitory_input.i_bias_gm, value)

        self.assertEqual(neuron.inhibitory_input.v_syn, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.inhibitory_input.v_syn = value
        self.assertEqual(neuron.inhibitory_input.v_syn, value)
    def test_neuron_refractory_period(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.refractory_period.refractory_time,
                         neuron.RefractoryPeriod.RefractoryTime())
        value = random_ranged(
            lola.AtomicNeuron.RefractoryPeriod.RefractoryTime)
        neuron.refractory_period.refractory_time = value
        self.assertEqual(neuron.refractory_period.refractory_time, value)

        self.assertEqual(neuron.refractory_period.reset_holdoff,
                         neuron.RefractoryPeriod.ResetHoldoff())
        value = random_ranged(lola.AtomicNeuron.RefractoryPeriod.ResetHoldoff)
        neuron.refractory_period.reset_holdoff = value
        self.assertEqual(neuron.refractory_period.reset_holdoff, value)

        self.assertEqual(neuron.refractory_period.input_clock,
                         lola.AtomicNeuron.RefractoryPeriod.InputClock())
        value = random_ranged(lola.AtomicNeuron.RefractoryPeriod.InputClock)
        neuron.refractory_period.input_clock = value
        self.assertEqual(neuron.refractory_period.input_clock, value)
    def test_neuron_reset(self):
        neuron = lola.AtomicNeuron()

        self.assertEqual(neuron.leak_reset.reset.v_reset, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.leak_reset.reset.v_reset = value
        self.assertEqual(neuron.leak_reset.reset.v_reset, value)

        self.assertEqual(neuron.leak_reset.reset.i_bias, 0)
        value = random_ranged(lola.AtomicNeuron.AnalogValue)
        neuron.leak_reset.reset.i_bias = value
        self.assertEqual(neuron.leak_reset.reset.i_bias, value)

        self.assertEqual(neuron.leak_reset.reset.enable_degeneration, False)
        neuron.leak_reset.reset.enable_degeneration = True
        self.assertEqual(neuron.leak_reset.reset.enable_degeneration, True)

        self.assertEqual(neuron.leak_reset.reset.enable_division, False)
        neuron.leak_reset.reset.enable_division = True
        self.assertEqual(neuron.leak_reset.reset.enable_division, True)

        self.assertEqual(neuron.leak_reset.reset.enable_multiplication, False)
        neuron.leak_reset.reset.enable_multiplication = True
        self.assertEqual(neuron.leak_reset.reset.enable_multiplication, True)