Beispiel #1
0
    def test_general_test(self):
        """
        One mothafacka test to rule them all.

        :return:
        """

        sim = Simulation()
        sim.load_file("sample")
        n1 = sim.add_neuron(0.03125, .95, 300)
        sim.run()
        sim.plot_weight_distributions()
        sim.plot_membrane_potential()
Beispiel #2
0
 def setUp(self):
     """
     Creates a Simulation to test on.
     :return: None.
     """
     # Generate Simulation
     self.simulation = Simulation()
Beispiel #3
0
    def get_simulation(self, _id, return_object=False):
        """
        Fetches a simulation by _id.
        :param _id: _id of simulation to fetch.
        :return: Simulation.
        """

        sim = self.collection.find_one({'_id': ObjectId(_id)})
        duration = sim['duration']
        patterns = sim["start_positions"]
        p_plots = []

        # Plot first second if available.
        if duration >= 1000:
            p_plots.append(self.plot_membrane_potential(sim, 0, 1000))

        # Plot last second if over two seconds long.
        if duration >= 2000:
            p_plots.append(
                self.plot_membrane_potential(sim, (duration - 1000), duration))

        sim['potential_plots'] = p_plots
        wd_plots = self.plot_weight_distributions(sim)
        for i in range(len(sim['neurons'])):
            sim['neurons'][i]['weight_distribution_plot'] = wd_plots[i]

        if len(patterns) > 0:
            spike_info = self.get_neuron_info(sim)

            # Currently we only get spike-timing info
            # for the first neuron for one pattern.
            # TODO: Expand to all neurons.
            sim['neurons'][0]['spike_info'] = spike_info

        if return_object:
            description = sim['description']
            training = True

            s = Simulation(description, training)

            return s

        return sim
Beispiel #4
0
    def run_simulation(self,
                       sample,
                       cursor,
                       num_neurons,
                       description,
                       a_plus,
                       a_ratio,
                       theta,
                       weights,
                       training,
                       return_object=False):

        sim = Simulation(description, training)

        sim.load_sample(sample, cursor)

        # Add the post-synaptic neurons and connect them.
        neurons = []
        for i in range(num_neurons):
            if weights is not None:
                weight = weights[i]
            else:
                weight = None
            n = sim.add_neuron(a_plus, a_ratio, theta, weight)
            for neuron in neurons:
                n.connect(neuron)
            neurons.append(n)

        sim.run()

        # Allow for simulations run on generated samples.
        if 'animation_id' not in sample:
            sample['animation_id'] = None

        if 'estmd_id' not in sample:
            sample['estmd_id'] = None

        _id = self.save(sim, sample['animation_id'], sample['estmd_id'],
                        sample['_id'])
        return _id
Beispiel #5
0
    def run_simulation(self,
                       sample,
                       cursor,
                       num_neurons,
                       description,
                       a_plus,
                       a_ratio,
                       theta,
                       weights,
                       training,
                       return_object=False):

        sim = Simulation(description, training)

        sim.load_sample(sample, cursor)

        # Add the post-synaptic neurons and connect them.
        neurons = []
        for i in range(num_neurons):
            if weights is not None:
                weight = weights[i]
            else:
                weight = None
            n = sim.add_neuron(a_plus, a_ratio, theta, weight)
            for neuron in neurons:
                n.connect(neuron)
            neurons.append(n)

        sim.run()

        # Allow for simulations run on generated samples.
        if 'animation_id' not in sample:
            sample['animation_id'] = None

        if 'estmd_id' not in sample:
            sample['estmd_id'] = None

        _id = self.save(sim,
                        sample['animation_id'],
                        sample['estmd_id'],
                        sample['_id'])
        return _id
Beispiel #6
0
    def run(self):
        """
        Run stuff and save stuff.

        :return:
        """

        out_dir = "out_directories"
        name = "test1.avi"
        out_path = os.path.abspath(os.path.join(out_dir, name))

        self.make_temp_directory(out_dir)

        self.ani.run(out_path, 10, 10)

        self.estmd.open_movie(out_path)
        self.estmd.run(by_frame=True)
        self.estmd.run(by_frame=True)
        frame_array = self.estmd.create_list_of_arrays()
        n = len(frame_array)
        for i in range(n):
            frame_array[i] = {'frame': frame_array[i].flatten()}

        self.cstmd.input = frame_array
        self.cstmd.spike_trains = cstmd.run()[1]

        # Adding simulation

        sim = Simulation("Test", True)

        sim.spike_trains = self.cstmd.spike_trains
        sim.start_positions = 0
        sim.pattern_duration = self.cstmd.duration
        sim.num_afferents = self.cstmd.spike_trains.shape[0]
        sim.duration = self.cstmd.spike_trains.shape[1]
        sim.sampling_interval = math.ceil(self.cstmd.duration / 5)

        n1 = sim.add_neuron(0.03125, .95, 300)
        n2 = sim.add_neuron(0.03125, 0.91, 125)
        n3 = sim.add_neuron(0.03125, 0.91, 125)
        n1.connect(n2)
        n1.connect(n3)
        n2.connect(n3)

        sim.run()

        # Adding ActionSelection

        pattern_input = []
        for neuron in sim.neurons:
            pattern_input.append(neuron.spike_times)

        print "================================"
        print pattern_input
        print "================================"

        a_s = ActionSelection(pattern_input=pattern_input,
                              pattern_duration=self.ani.total_frames,
                              animation=self.ani)
        a_s.run(show_plots=False)
Beispiel #7
0
    def test_general_test(self):
        """
        One mothafacka test to rule them all.

        :return:
        """

        sim = Simulation()
        sim.load_file("sample")
        n1 = sim.add_neuron(0.03125, .95, 300)
        sim.run()
        sim.plot_weight_distributions()
        sim.plot_membrane_potential()