def test_load_neuron(): nrn = utils.load_neuron(FILENAMES[0]) nt.assert_true(isinstance(NRN, Neuron)) nt.assert_equal(NRN.name, 'Neuron') _check_neurites_have_no_parent(nrn) # python2 only test, for unicode strings if sys.version_info < (3, 0): nrn = utils.load_neuron(unicode(FILENAMES[0])) nt.assert_true(isinstance(NRN, Neuron)) nt.assert_equal(NRN.name, 'Neuron') _check_neurites_have_no_parent(nrn)
def test_load_neuromorpho_3pt_soma(): with warnings.catch_warnings(record=True): nrn = utils.load_neuron(Path(SWC_PATH, 'soma', 'three_pt_soma.swc')) assert len(nrn.neurites) == 4 assert len(nrn.soma.points) == 3 assert nrn.soma.radius == 2 _check_neurites_have_no_parent(nrn)
def test_load_neuromorpho_3pt_soma(): nrn = utils.load_neuron(os.path.join(SWC_PATH, 'soma', 'three_pt_soma.swc')) nt.eq_(len(nrn.neurites), 4) nt.eq_(len(nrn.soma.points), 3) nt.eq_(nrn.soma.radius, 2) _check_neurites_have_no_parent(nrn)
def test_load_neuromorpho_3pt_soma(): with warnings.catch_warnings(record=True): nrn = utils.load_neuron(Path(SWC_PATH, 'soma', 'three_pt_soma.swc')) nt.eq_(len(nrn.neurites), 4) nt.eq_(len(nrn.soma.points), 3) nt.eq_(nrn.soma.radius, 2) _check_neurites_have_no_parent(nrn)
def test_load_neuron(): nrn = utils.load_neuron(FILENAMES[0]) nt.assert_true(isinstance(NRN, Neuron)) nt.assert_equal(NRN.name, 'Neuron') _check_neurites_have_no_parent(nrn) neuron_str = u""" 1 1 0 0 0 1. -1 2 3 0 0 0 1. 1 3 3 0 5 0 1. 2 4 3 -5 5 0 0. 3 5 3 6 5 0 0. 3 6 2 0 0 0 1. 1 7 2 0 -4 0 1. 6 8 2 6 -4 0 0. 7 9 2 -5 -4 0 0. 7 """ utils.load_neuron(StringIO(neuron_str), reader='swc')
def test_load_neuron_mixed_tree_swc(): nrn_mix = utils.load_neuron(os.path.join(SWC_ORD_PATH, 'sample_mixed_tree_sections.swc')) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), [5, 3]) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), get('number_of_sections_per_neurite', SWC_ORD_REF)) assert_items_equal(get('number_of_segments', nrn_mix), get('number_of_segments', SWC_ORD_REF)) assert_items_equal(get('total_length', nrn_mix), get('total_length', SWC_ORD_REF))
def test_load_neuron_mixed_tree_swc(): nrn_mix = utils.load_neuron(os.path.join(SWC_ORD_PATH, 'sample_mixed_tree_sections.swc')) nt.assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), [5, 3]) nt.assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), get('number_of_sections_per_neurite', SWC_ORD_REF)) nt.assert_items_equal(get('number_of_segments', nrn_mix), get('number_of_segments', SWC_ORD_REF)) nt.assert_items_equal(get('total_length', nrn_mix), get('total_length', SWC_ORD_REF))
def test_load_neuron_section_order_break_swc(): nrn_mix = utils.load_neuron(Path(SWC_ORD_PATH, 'sample_disordered.swc')) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), [5, 3]) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), get('number_of_sections_per_neurite', SWC_ORD_REF)) assert_items_equal(get('number_of_segments', nrn_mix), get('number_of_segments', SWC_ORD_REF)) assert_items_equal(get('total_length', nrn_mix), get('total_length', SWC_ORD_REF))
def test_load_neuron_section_order_break_swc(): nrn_mix = utils.load_neuron(os.path.join(SWC_ORD_PATH, 'sample_disordered.swc')) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), [5, 3]) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), get('number_of_sections_per_neurite', SWC_ORD_REF)) assert_items_equal(get('number_of_segments', nrn_mix), get('number_of_segments', SWC_ORD_REF)) assert_items_equal(get('total_length', nrn_mix), get('total_length', SWC_ORD_REF))
def test_load_h5_trunk_points_regression(): # regression test for issue encoutnered wile # implementing PR #479, related to H5 unpacking # of files with non-standard soma structure. # See #480. nrn = utils.load_neuron(os.path.join(DATA_PATH, 'h5', 'v1', 'Neuron.h5')) nt.ok_(np.allclose(nrn.neurites[0].root_node.points[1], [0., 0. , 0.1, 0.31646374, 4., 4., 3.])) nt.ok_(np.allclose(nrn.neurites[1].root_node.points[1], [0., 0., 0.1, 1.84130445e-01, 3.0, 235., 234.])) nt.ok_(np.allclose(nrn.neurites[2].root_node.points[1], [0., 0., 0.1, 5.62225521e-01, 3., 466, 465])) nt.ok_(np.allclose(nrn.neurites[3].root_node.points[1], [0., 0., 0.1, 7.28555262e-01, 2., 697, 696]))
def test_load_trees_good_neuron(): '''Check trees in good neuron are the same as trees from loaded neuron''' filepath = os.path.join(SWC_PATH, 'Neuron.swc') nrn = utils.load_neuron(filepath) trees = utils.load_trees(filepath) nt.eq_(len(nrn.neurites), 4) nt.eq_(len(nrn.neurites), len(trees)) nrn2 = MockNeuron(trees) @pts.point_function(as_tree=False) def elem(point): return point # Check data are the same in tree collection and neuron's neurites for a, b in izip(iter_neurites(nrn, elem), iter_neurites(nrn2, elem)): nt.ok_(np.all(a == b))
def test_load_h5_trunk_points_regression(): # regression test for issue encountered while # implementing PR #479, related to H5 unpacking # of files with non-standard soma structure. # See #480. nrn = utils.load_neuron(os.path.join(DATA_PATH, 'h5', 'v1', 'Neuron.h5')) nt.ok_(np.allclose(nrn.neurites[0].root_node.points[1], [0., 0., 0.1, 0.31646374, 4., 4., 3.])) nt.ok_(np.allclose(nrn.neurites[1].root_node.points[1], [0., 0., 0.1, 1.84130445e-01, 3.0, 235., 234.])) nt.ok_(np.allclose(nrn.neurites[2].root_node.points[1], [0., 0., 0.1, 5.62225521e-01, 3., 466, 465])) nt.ok_(np.allclose(nrn.neurites[3].root_node.points[1], [0., 0., 0.1, 7.28555262e-01, 2., 697, 696]))
def test_load_h5_trunk_points_regression(): # regression test for issue encountered while # implementing PR #479, related to H5 unpacking # of files with non-standard soma structure. # See #480. nrn = utils.load_neuron(Path(DATA_PATH, 'h5', 'v1', 'Neuron.h5')) assert np.allclose(nrn.neurites[0].root_node.points[1, COLS.XYZR], [0., 0., 0.1, 0.31646374]) assert np.allclose(nrn.neurites[1].root_node.points[1, COLS.XYZR], [0., 0., 0.1, 1.84130445e-01]) assert np.allclose(nrn.neurites[2].root_node.points[1, COLS.XYZR], [0., 0., 0.1, 5.62225521e-01]) assert np.allclose(nrn.neurites[3].root_node.points[1, COLS.XYZR], [0., 0., 0.1, 7.28555262e-01])
def test_neuron_name(): for fn, nn in zip(FILENAMES, NRN_NAMES): nrn = utils.load_neuron(fn) nt.eq_(nrn.name, nn)
def test_load_neuron(): nrn = utils.load_neuron(FILES[0]) nt.ok_(nrn.name == FILES[0].strip('.swc').split('/')[-1])
FILES = [ Path(SWC_PATH, f) for f in [ 'Neuron.swc', 'Single_apical_no_soma.swc', 'Single_apical.swc', 'Single_basal.swc', 'Single_axon.swc', 'sequential_trunk_off_0_16pt.swc', 'sequential_trunk_off_1_16pt.swc', 'sequential_trunk_off_42_16pt.swc', 'Neuron_no_missing_ids_no_zero_segs.swc' ] ] FILENAMES = [ Path(VALID_DATA_PATH, f) for f in ['Neuron.swc', 'Neuron_h5v1.h5'] ] NRN = utils.load_neuron(Path(VALID_DATA_PATH, 'Neuron.swc')) NO_SOMA_FILE = Path(SWC_PATH, 'Single_apical_no_soma.swc') DISCONNECTED_POINTS_FILE = Path(SWC_PATH, 'Neuron_disconnected_components.swc') MISSING_PARENTS_FILE = Path(SWC_PATH, 'Neuron_missing_parents.swc') INVALID_ID_SEQUENCE_FILE = Path(SWC_PATH, 'non_increasing_trunk_off_1_16pt.swc') def _mock_load_neuron(filename): class MockNeuron: def __init__(self, name): self.soma = 42
def test_load_neuron_no_consecutive_ids_loads(): utils.load_neuron(NON_CONSECUTIVE_ID_FILE);
def test_load_neuron_deep_neuron(): '''make sure that neurons with deep (ie: larger than the python recursion limit can be loaded) ''' deep_neuron = os.path.join(DATA_PATH, 'h5/v1/deep_neuron.h5') nrn = utils.load_neuron(deep_neuron)
def test_load_neuron_disconnected_points_raises(): utils.load_neuron(DISCONNECTED_POINTS_FILE)
def _load_neuron(name): if name.endswith('.swc'): path = os.path.join(SWC_PATH, name) elif name.endswith('.h5'): path = os.path.join(H5V1_PATH, name) return name, load_neuron(path)
def test_load_contour_split_1st_soma_neuron(): nrn = utils.load_neuron(os.path.join(SWC_PATH, 'soma', 'contour_split_1st_soma_neuron.swc')) nt.eq_(len(nrn.neurites), 3) nt.eq_(len(nrn.soma.points), 6) nt.eq_(nrn.soma.radius, 2.0) _check_neurites_have_no_parent(nrn)
def test_load_neuron(): nrn = utils.load_neuron(FILENAMES[0]) nt.assert_true(isinstance(NRN, Neuron)) nt.assert_equal(NRN.name, 'Neuron') _check_neurites_have_no_parent(nrn)
def test_load_neuromorpho_3pt_soma(): nrn = utils.load_neuron(os.path.join(SWC_PATH, 'soma', 'three_pt_soma.swc')) nt.eq_(len(nrn.neurites), 4) nt.eq_(len(nrn.soma.points), 3) nt.eq_(nrn.soma.radius, 2) _check_neurites_have_no_parent(nrn) @nt.raises(SomaError) def test_load_bifurcating_soma_points_raises_SomaError(): utils.load_neuron(os.path.join(SWC_PATH, 'soma', 'bifurcating_soma.swc')) NRN = utils.load_neuron(FILENAMES[0]) def test_neuron_section_ids(): # check section IDs for i, sec in enumerate(NRN.sections): nt.eq_(i, sec.id) def test_neurites_have_no_parent(): _check_neurites_have_no_parent(NRN) def test_neuron_sections(): all_nodes = set(NRN.sections)
def test_load_neuron_deep_neuron(): '''make sure that neurons with deep (ie: larger than the python recursion limit can be loaded) ''' deep_neuron = os.path.join(DATA_PATH, 'h5/v1/deep_neuron.h5') utils.load_neuron(deep_neuron)
def test_load_neuron_no_soma_raises_SomaError(): utils.load_neuron(NO_SOMA_FILE)
def test_load_bifurcating_soma_points_raises_SomaError(): utils.load_neuron(os.path.join(SWC_PATH, 'soma', 'bifurcating_soma.swc'))
def test_h5v2_raises(): with pytest.raises(RawDataError): utils.load_neuron(DATA_PATH / 'h5/v2/Neuron.h5')
def test_load_neuron_missing_parents_raises(): utils.load_neuron(MISSING_PARENTS_FILE)
def test_load_neuron_soma_only(): nrn = utils.load_neuron(os.path.join(DATA_PATH, 'swc', 'Soma_origin.swc')) nt.eq_(len(nrn.neurites), 0) nt.assert_equal(nrn.name, 'Soma_origin')
def test_load_neuron_invalid_id_sequence_raises(): utils.load_neuron(INVALID_ID_SEQUENCE_FILE);
def test_load_neuron_soma_only(): nrn = utils.load_neuron(Path(DATA_PATH, 'swc', 'Soma_origin.swc')) assert len(nrn.neurites) == 0 assert nrn.name == 'Soma_origin.swc'
def test_load_neuron_no_consecutive_ids_raises_NonConsecutiveIDsError(): utils.load_neuron(NON_CONSECUTIVE_ID_FILE);
@nt.raises(SomaError) def test_load_bifurcating_soma_points_raises_SomaError(): utils.load_neuron(os.path.join(SWC_PATH, 'soma', 'bifurcating_soma.swc')) def test_load_neuromorpho_3pt_soma(): with warnings.catch_warnings(record=True): nrn = utils.load_neuron(os.path.join(SWC_PATH, 'soma', 'three_pt_soma.swc')) nt.eq_(len(nrn.neurites), 4) nt.eq_(len(nrn.soma.points), 3) nt.eq_(nrn.soma.radius, 2) _check_neurites_have_no_parent(nrn) NRN = utils.load_neuron(FILENAMES[0]) def test_neuron_section_ids(): # check section IDs for i, sec in enumerate(NRN.sections): nt.eq_(i, sec.id) def test_neurites_have_no_parent(): _check_neurites_have_no_parent(NRN) def test_neuron_sections():
def test_neuron_name(): for fn, nn in zip(FILENAMES, NRN_NAMES): nrn = utils.load_neuron(fn) assert nrn.name == nn
def test_load_bifurcating_soma_points_raises_SomaError(): utils.load_neuron(Path(SWC_PATH, 'soma', 'bifurcating_soma.swc'))
def test_load_neuron_missing_parents_raises(): with pytest.raises(MissingParentError): utils.load_neuron(MISSING_PARENTS_FILE)
def test_load_neuron_soma_only(): nrn = utils.load_neuron(Path(DATA_PATH, 'swc', 'Soma_origin.swc')) nt.eq_(len(nrn.neurites), 0) nt.assert_equal(nrn.name, 'Soma_origin')
def test_load_neuron_mixed_tree_h5(): nrn_mix = utils.load_neuron(os.path.join(H5_PATH, 'sample_mixed_tree_sections.h5')) nt.assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), [5, 3]) nt.assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), get('number_of_sections_per_neurite', H5_ORD_REF))
def test_load_neuron_invalid_id_sequence_raises(): utils.load_neuron(INVALID_ID_SEQUENCE_FILE)
@nt.raises(SomaError) def test_load_bifurcating_soma_points_raises_SomaError(): utils.load_neuron(Path(SWC_PATH, 'soma', 'bifurcating_soma.swc')) def test_load_neuromorpho_3pt_soma(): with warnings.catch_warnings(record=True): nrn = utils.load_neuron(Path(SWC_PATH, 'soma', 'three_pt_soma.swc')) nt.eq_(len(nrn.neurites), 4) nt.eq_(len(nrn.soma.points), 3) nt.eq_(nrn.soma.radius, 2) _check_neurites_have_no_parent(nrn) NRN = utils.load_neuron(FILENAMES[0]) def test_neuron_section_ids(): # check section IDs for i, sec in enumerate(NRN.sections): nt.eq_(i, sec.id) def test_neurites_have_no_parent(): _check_neurites_have_no_parent(NRN) def test_neuron_sections():
def test_load_neuron_mixed_tree_h5(): nrn_mix = utils.load_neuron(Path(H5_PATH, 'sample_mixed_tree_sections.h5')) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), [5, 3]) assert_items_equal(get('number_of_sections_per_neurite', nrn_mix), get('number_of_sections_per_neurite', H5_ORD_REF))
def test_neuron3d_no_neurites(): filename = os.path.join(SWC_PATH, 'point_soma.swc') f, a = view.neuron3d(load_neuron(filename))