예제 #1
0
def test_get_heatmaps():
    position = np.vstack([
        np.arange(0, 10, 1),
        np.hstack((np.arange(0, 10, 2), np.arange(10, 0, -2)))
    ]),
    position = nept.Position(position, np.arange(0, 30, 3))

    neuron_list = [0, 2, 3]

    spikes = [
        nept.SpikeTrain(np.array([19.9, 20., 20.1]), 'test'),
        nept.SpikeTrain(np.array([8.]), 'test'),
        nept.SpikeTrain(np.array([0., 15., 27.]), 'test'),
        nept.SpikeTrain(np.array([9., 10., 11., 15., 16.]), 'test')
    ]

    heatmaps = nept.get_heatmaps(neuron_list, spikes, position, num_bins=5)

    assert np.allclose(len(heatmaps), 3)
    assert np.allclose(np.max(heatmaps[0]), 3.)
    assert np.allclose(np.mean(heatmaps[0]), 0.12)
    assert np.allclose(np.max(heatmaps[2]), 1.)
    assert np.allclose(np.mean(heatmaps[2]), 0.12)
    assert np.allclose(np.max(heatmaps[3]), 2.)
    assert np.allclose(np.mean(heatmaps[3]), 0.2)
예제 #2
0
def test_spiketrain_sort_times():
    spikes = [
        nept.SpikeTrain(np.array([9., 7., 5., 3., 1.])),
        nept.SpikeTrain(np.array([1.3, 5.3, 3.3]))
    ]

    assert np.allclose(spikes[0].time, np.array([1., 3., 5., 7., 9.]))
    assert np.allclose(spikes[1].time, np.array([1.3, 3.3, 5.3]))
예제 #3
0
def test_spiketrain_labels():
    spikes = [
        nept.SpikeTrain(np.array([1., 3., 5., 7., 9.])),
        nept.SpikeTrain(np.array([1.3, 3.3, 5.3]), 'check_label')
    ]

    assert spikes[0].label == None
    assert spikes[1].label == 'check_label'
예제 #4
0
def test_spiketrain_n_spikes_simple():
    spikes = [
        nept.SpikeTrain(np.array([1., 3., 5., 7., 9.])),
        nept.SpikeTrain(np.array([1.3, 3.3, 5.3]))
    ]

    assert np.allclose(spikes[0].n_spikes, 5)
    assert np.allclose(spikes[1].n_spikes, 3)
예제 #5
0
def test_neurons_get_tuning_shape():
    spikes = np.array([
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ])

    tuning = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.]])

    neurons = nept.Neurons(spikes, tuning)

    assert np.allclose(neurons.tuning_shape, tuning[0].shape)
예제 #6
0
def test_spike_counts_window():
    intervals = nept.Epoch([2., 7.], [6., 10.])

    spikes = [
        nept.SpikeTrain(np.array([0., 3.4, 6., 8.]), 'test'),
        nept.SpikeTrain(np.array([0., 3.5, 6., 8.]), 'test'),
        nept.SpikeTrain(np.array([1., 7., 11.]))
    ]

    count_matrix = nept.spike_counts(spikes, intervals, window=1)

    assert np.allclose(count_matrix, np.array([[0., 1.], [1., 1.], [0., 0.]]))
예제 #7
0
def test_neurons_basic():
    spikes = np.array([
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ])

    tuning = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.]])

    neurons = nept.Neurons(spikes, tuning)

    assert np.allclose(neurons.spikes[0].time, spikes[0].time)
    assert np.allclose(neurons.tuning_curves, tuning)
예제 #8
0
def test_spiketrain_time_slices():
    spikes = [
        nept.SpikeTrain(np.array([1., 3., 5., 7., 9.])),
        nept.SpikeTrain(np.array([1.3, 3.3, 5.3]))
    ]

    starts = np.array([1., 7.])
    stops = np.array([4., 10.])

    sliced_spikes = [spike.time_slice(starts, stops) for spike in spikes]

    assert np.allclose(sliced_spikes[0].time, np.array([1., 3., 7., 9.]))
    assert np.allclose(sliced_spikes[1].time, np.array([1.3, 3.3]))
예제 #9
0
def test_simple_tc():
    linear = nept.Position(np.linspace(0, 10, 4), np.linspace(0, 3, 4))

    spikes = [
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ]

    tuning = nept.tuning_curve_1d(linear, spikes, binsize=3, gaussian_std=None)

    assert np.allclose(tuning,
                       ([1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.]))
예제 #10
0
def test_sort_idx():
    linear = nept.Position(np.linspace(0, 10, 4), np.linspace(0, 3, 4))

    spikes = [
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ]

    tuning = nept.tuning_curve_1d(linear, spikes, binsize=3, gaussian_std=None)
    sort_idx = nept.get_sort_idx(tuning)

    assert np.allclose(sort_idx, [1, 0, 2])
예제 #11
0
def test_multi_in_epochs_mult():
    epochs = nept.Epoch([1.0, 4.0, 6.0], [2.0, 5.0, 7.0])

    spikes = [
        nept.SpikeTrain(np.array([1.1, 6.5])),
        nept.SpikeTrain(np.array([1.3, 4.1])),
        nept.SpikeTrain(np.array([1.7, 4.3]))
    ]

    min_involved = 2
    multi_epochs = nept.find_multi_in_epochs(spikes, epochs, min_involved)

    assert np.allclose(multi_epochs.starts, np.array([1., 4.]))
    assert np.allclose(multi_epochs.stops, np.array([2., 5.]))
예제 #12
0
def test_spike_counts():
    intervals = nept.Epoch([2., 7.], [6., 10.])

    spikes = [
        nept.SpikeTrain(np.array([0., 3., 4., 8.]), 'test'),
        nept.SpikeTrain(np.array([0., 3., 4., 8.]), 'test'),
        nept.SpikeTrain(np.array([1., 7., 11.])),
        nept.SpikeTrain(np.array([0., 3., 4., 8.]), 'test')
    ]

    count_matrix = nept.spike_counts(spikes, intervals)

    assert np.allclose(np.mean(count_matrix), 1.25)
    assert np.allclose(count_matrix[0], count_matrix[1], count_matrix[3])
예제 #13
0
def test_tuning_curve_1d_gaussian():
    linear = nept.Position(np.linspace(0, 9, 4), np.linspace(0, 3, 4))

    spikes = [
        nept.SpikeTrain(np.array([0.0]), 'test'),
        nept.SpikeTrain(np.array([1.0]), 'test'),
        nept.SpikeTrain(np.array([2.0]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ]

    tuning = nept.tuning_curve_1d(linear, spikes, binsize=3, gaussian_std=1.5)

    assert np.allclose(tuning, ([0.78698604, 0.10650698, 0.0], [
        0.10650698, 0.78698604, 0.10650698
    ], [0.0, 0.05325349, 0.39349302], [0.0, 0.05325349, 0.39349302]))
예제 #14
0
def test_simple_tc1():
    """Time spent in each bin not the same."""
    linear = nept.Position(np.linspace(0, 9, 4), np.linspace(0, 3, 4))

    spikes = [
        nept.SpikeTrain(np.array([0.0]), 'test'),
        nept.SpikeTrain(np.array([1.0]), 'test'),
        nept.SpikeTrain(np.array([2.0]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ]

    tuning = nept.tuning_curve_1d(linear, spikes, binsize=3, gaussian_std=None)

    assert np.allclose(
        tuning, ([1., 0., 0.], [0., 1., 0.], [0., 0., 0.5], [0., 0., 0.5]))
예제 #15
0
def test_neurons_n_wrong():
    spikes = np.array([
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ])

    tuning = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.]])

    with pytest.raises(ValueError) as excinfo:
        neurons = nept.Neurons(spikes, tuning)

    assert str(
        excinfo.value
    ) == 'spikes and tuning curves must have the same number of neurons'
예제 #16
0
def test_get_tetrode_mask():
    spikes = [
        nept.SpikeTrain([1., 2., 3.], 'a'),
        nept.SpikeTrain([1., 2., 3.], 'b'),
        nept.SpikeTrain([1., 2., 3.], 'a'),
        nept.SpikeTrain([1., 2., 3.], 'b'),
        nept.SpikeTrain([1., 2., 3.], 'c')
    ]

    tetrode_mask = nept.get_tetrode_mask(spikes)

    true_compare = np.array([[1, 0, 1, 0, 0], [0, 1, 0, 1, 0], [1, 0, 1, 0, 0],
                             [0, 1, 0, 1, 0], [0, 0, 0, 0, 1]])

    assert np.all(true_compare == tetrode_mask)
예제 #17
0
def test_neurons_getitem_single():
    spikes = np.array([
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ])

    tuning = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.]])

    neurons = nept.Neurons(spikes, tuning)

    sliced = neurons[1]

    assert np.allclose(sliced.spikes[0].time, np.array([1.5]))
    assert np.allclose(sliced.tuning_curves[0], np.array([0., 1., 0., 0.]))
예제 #18
0
def test_get_heatmaps_1d_position():
    position = nept.Position(np.arange(0, 10, 1), np.arange(0, 30, 3))

    neuron_list = [0, 2, 3]

    spikes = [
        nept.SpikeTrain(np.array([19.9, 20., 20.1]), 'test'),
        nept.SpikeTrain(np.array([8.]), 'test'),
        nept.SpikeTrain(np.array([0., 15., 27.]), 'test'),
        nept.SpikeTrain(np.array([9., 10., 11., 15., 16.]), 'test')
    ]

    with pytest.raises(ValueError) as excinfo:
        heatmaps = nept.get_heatmaps(neuron_list, spikes, position, num_bins=5)

    assert str(excinfo.value) == 'pos must be two-dimensional'
예제 #19
0
def test_bin_spikes_mult_neurons_adjust_window():
    spikes = [
        nept.SpikeTrain([0.8, 1.1, 1.2, 1.2, 2.1, 3.1]),
        nept.SpikeTrain([0.8, 1.1, 1.2, 1.2, 2.1, 3.1])
    ]

    counts = nept.bin_spikes(spikes,
                             0.0,
                             4.0,
                             dt=0.5,
                             window=2.5,
                             gaussian_std=None)

    assert np.allclose(
        counts.data,
        np.array([[0.8, 0.8], [0.8, 0.8], [1.0, 1.0], [1.0, 1.0], [1.0, 1.0],
                  [0.4, 0.4], [0.4, 0.4]]))
예제 #20
0
def test_spiketrain_timeslice_none_list_start():
    spikes = nept.SpikeTrain(np.array([1., 2., 3., 4., 5., 6.]), 'test')

    starts = [None, 4.5]
    stops = [3., 5.]
    sliced_spikes = spikes.time_slice(starts, stops)

    assert np.allclose(sliced_spikes.time, np.array([1., 2., 3., 5.]))
예제 #21
0
def test_spiketrain_timeslice_single():
    spikes = nept.SpikeTrain(np.array([1., 2., 3., 4., 5., 6.]), 'test')

    starts = 2.
    stops = 5.
    sliced_spikes = spikes.time_slice(starts, stops)

    assert np.allclose(sliced_spikes.time, np.array([2., 3., 4., 5.]))
예제 #22
0
def test_neurons_slicing_specified_stop():
    spikes = np.array([
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ])

    tuning = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.]])

    neurons = nept.Neurons(spikes, tuning)

    t_stop = 2.0

    sliced_neurons = neurons.time_slice(None, t_stop)

    assert np.allclose(sliced_neurons.spikes[0].time, np.array([0.5]))
    assert np.allclose(sliced_neurons.spikes[1].time, np.array([1.5]))
    assert np.allclose(sliced_neurons.spikes[2].time, np.array([]))
    assert np.allclose(neurons.tuning_curves, tuning)
예제 #23
0
def test_spiketrain_timeslice_uneven_startstop():
    spikes = nept.SpikeTrain(np.array([1., 2., 3., 4., 5., 6.]), 'test')

    starts = [0.1]
    stops = [1.5, 6.]
    with pytest.raises(ValueError) as excinfo:
        sliced_spikes = spikes.time_slice(starts, stops)

    assert str(
        excinfo.value) == "must have same number of start and stop times"
예제 #24
0
def test_neurons_slicing_mult():
    spikes = np.array([
        nept.SpikeTrain(np.array([0.5]), 'test'),
        nept.SpikeTrain(np.array([1.5]), 'test'),
        nept.SpikeTrain(np.array([2.5]), 'test')
    ])

    tuning = np.array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.]])

    neurons = nept.Neurons(spikes, tuning)

    t_starts = [0.0, 2.0]
    t_stops = [1.0, 3.0]

    sliced_neurons = neurons.time_slice(t_starts, t_stops)

    assert np.allclose(sliced_neurons.spikes[0].time, np.array([0.5]))
    assert np.allclose(sliced_neurons.spikes[1].time, np.array([]))
    assert np.allclose(sliced_neurons.spikes[2].time, np.array([2.5]))
    assert np.allclose(neurons.tuning_curves, tuning)
예제 #25
0
def test_bin_spikes_no_window():
    spikes = np.hstack((np.arange(0, 10, 1.4), np.arange(0.2, 5, 0.3)))
    spikes = [nept.SpikeTrain(np.sort(spikes), 'test')]

    counts = nept.bin_spikes(spikes,
                             0.0,
                             10.0,
                             dt=4.,
                             gaussian_std=None,
                             normalized=False)

    assert np.allclose(counts.data, np.array([[16.], [6.]]))
예제 #26
0
def test_bin_spikes_actual():
    spikes = [nept.SpikeTrain([0.8, 1.1, 1.2, 1.2, 2.1, 3.1])]

    counts = nept.bin_spikes(spikes,
                             0.0,
                             4.0,
                             dt=0.5,
                             window=2.,
                             gaussian_std=None,
                             normalized=False)

    assert np.allclose(counts.data,
                       np.array([[1.], [4.], [4.], [5.], [4.], [2.], [2.]]))
예제 #27
0
def test_spiketrain_time_slice():
    spikes_a = nept.SpikeTrain(np.arange(1, 100, 5), 'test')
    spikes_b = nept.SpikeTrain(np.arange(24, 62, 1), 'test')
    spikes_c = nept.SpikeTrain(
        np.hstack((np.arange(0, 24, 3), np.arange(61, 100, 3))), 'test')

    t_start = 25.
    t_stop = 60.

    sliced_spikes_a = spikes_a.time_slice(t_start, t_stop)
    sliced_spikes_b = spikes_b.time_slice(t_start, t_stop)
    sliced_spikes_c = spikes_c.time_slice(t_start, t_stop)

    assert np.allclose(sliced_spikes_a.time,
                       np.array([26, 31, 36, 41, 46, 51, 56]))
    assert np.allclose(
        sliced_spikes_b.time,
        np.array([
            25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
            42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
            59, 60
        ]))
    assert np.allclose(sliced_spikes_c.time, np.array([]))
예제 #28
0
def test_bin_spikes_normalized():
    spikes = [nept.SpikeTrain([0.8, 1.1, 1.2, 1.2, 2.1, 3.1])]

    counts = nept.bin_spikes(spikes,
                             0.0,
                             4.0,
                             dt=0.5,
                             window=2.,
                             gaussian_std=None,
                             normalized=True)

    assert np.allclose(
        counts.data, np.array([[0.25], [1.], [1.], [1.25], [1.], [0.5],
                               [0.5]]))
예제 #29
0
def get_spiketrain(spike_times, label):
    """Converts spike times to nept.SpikeTrain.

    Parameters
    ----------
    spike_times: np.array
    label: str

    Returns
    -------
    spiketrain: nept.SpikeTrain

    """

    return nept.SpikeTrain(spike_times, label)
예제 #30
0
def test_tuning_curve_1d_with_2d_position():
    position = nept.Position(
        np.hstack([
            np.array([2, 4, 6, 8])[..., np.newaxis],
            np.array([7, 5, 3, 1])[..., np.newaxis]
        ]), np.array([0., 1., 2., 3.]))

    binsize = 2

    spikes = [nept.SpikeTrain(np.array([0., 3., 3., 3.]), 'test')]

    with pytest.raises(ValueError) as excinfo:
        nept.tuning_curve_1d(position, spikes, binsize=binsize)

    assert str(excinfo.value) == 'position must be linear'