test_segment.py 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tests of the neo.core.segment.Segment class
  4. """
  5. # needed for python 3 compatibility
  6. from __future__ import absolute_import, division, print_function
  7. from datetime import datetime
  8. import unittest
  9. import numpy as np
  10. import quantities as pq
  11. try:
  12. from IPython.lib.pretty import pretty
  13. except ImportError as err:
  14. HAVE_IPYTHON = False
  15. else:
  16. HAVE_IPYTHON = True
  17. from neo.core.segment import Segment
  18. from neo.core import (AnalogSignal, Block,
  19. Epoch, ChannelIndex, SpikeTrain, Unit)
  20. from neo.core.container import filterdata
  21. from neo.test.tools import (assert_neo_object_is_compliant,
  22. assert_same_sub_schema)
  23. from neo.test.generate_datasets import (fake_neo, get_fake_value,
  24. get_fake_values, get_annotations,
  25. clone_object, TEST_ANNOTATIONS)
  26. class Test__generate_datasets(unittest.TestCase):
  27. def setUp(self):
  28. np.random.seed(0)
  29. self.annotations = dict([(str(x), TEST_ANNOTATIONS[x]) for x in
  30. range(len(TEST_ANNOTATIONS))])
  31. def test__get_fake_values(self):
  32. self.annotations['seed'] = 0
  33. file_datetime = get_fake_value('file_datetime', datetime, seed=0)
  34. rec_datetime = get_fake_value('rec_datetime', datetime, seed=1)
  35. index = get_fake_value('index', int, seed=2)
  36. name = get_fake_value('name', str, seed=3, obj=Segment)
  37. description = get_fake_value('description', str, seed=4, obj='Segment')
  38. file_origin = get_fake_value('file_origin', str)
  39. attrs1 = {'file_datetime': file_datetime,
  40. 'rec_datetime': rec_datetime,
  41. 'index': index,
  42. 'name': name,
  43. 'description': description,
  44. 'file_origin': file_origin}
  45. attrs2 = attrs1.copy()
  46. attrs2.update(self.annotations)
  47. res11 = get_fake_values(Segment, annotate=False, seed=0)
  48. res12 = get_fake_values('Segment', annotate=False, seed=0)
  49. res21 = get_fake_values(Segment, annotate=True, seed=0)
  50. res22 = get_fake_values('Segment', annotate=True, seed=0)
  51. self.assertEqual(res11, attrs1)
  52. self.assertEqual(res12, attrs1)
  53. self.assertEqual(res21, attrs2)
  54. self.assertEqual(res22, attrs2)
  55. def test__fake_neo__cascade(self):
  56. self.annotations['seed'] = None
  57. obj_type = Segment
  58. cascade = True
  59. res = fake_neo(obj_type=obj_type, cascade=cascade)
  60. self.assertTrue(isinstance(res, Segment))
  61. assert_neo_object_is_compliant(res)
  62. self.assertEqual(res.annotations, self.annotations)
  63. self.assertEqual(len(res.analogsignals), 1)
  64. self.assertEqual(len(res.irregularlysampledsignals), 1)
  65. self.assertEqual(len(res.spiketrains), 1)
  66. self.assertEqual(len(res.events), 1)
  67. self.assertEqual(len(res.epochs), 1)
  68. for child in res.children:
  69. del child.annotations['i']
  70. del child.annotations['j']
  71. self.assertEqual(res.analogsignals[0].annotations,
  72. self.annotations)
  73. self.assertEqual(res.irregularlysampledsignals[0].annotations,
  74. self.annotations)
  75. self.assertEqual(res.spiketrains[0].annotations,
  76. self.annotations)
  77. self.assertEqual(res.events[0].annotations,
  78. self.annotations)
  79. self.assertEqual(res.epochs[0].annotations,
  80. self.annotations)
  81. def test__fake_neo__nocascade(self):
  82. self.annotations['seed'] = None
  83. obj_type = 'Segment'
  84. cascade = False
  85. res = fake_neo(obj_type=obj_type, cascade=cascade)
  86. self.assertTrue(isinstance(res, Segment))
  87. assert_neo_object_is_compliant(res)
  88. self.assertEqual(res.annotations, self.annotations)
  89. self.assertEqual(len(res.analogsignals), 0)
  90. self.assertEqual(len(res.irregularlysampledsignals), 0)
  91. self.assertEqual(len(res.spiketrains), 0)
  92. self.assertEqual(len(res.events), 0)
  93. self.assertEqual(len(res.epochs), 0)
  94. class TestSegment(unittest.TestCase):
  95. def setUp(self):
  96. self.nchildren = 2
  97. blk = fake_neo(Block, seed=0, n=self.nchildren)
  98. self.unit1, self.unit2, self.unit3, self.unit4 = blk.list_units
  99. self.seg1, self.seg2 = blk.segments
  100. self.targobj = self.seg1
  101. self.seed1 = self.seg1.annotations['seed']
  102. self.seed2 = self.seg2.annotations['seed']
  103. del self.seg1.annotations['i']
  104. del self.seg2.annotations['i']
  105. del self.seg1.annotations['j']
  106. del self.seg2.annotations['j']
  107. self.sigarrs1 = self.seg1.analogsignals
  108. self.sigarrs2 = self.seg2.analogsignals
  109. self.irsigs1 = self.seg1.irregularlysampledsignals
  110. self.irsigs2 = self.seg2.irregularlysampledsignals
  111. self.trains1 = self.seg1.spiketrains
  112. self.trains2 = self.seg2.spiketrains
  113. self.epcs1 = self.seg1.epochs
  114. self.epcs2 = self.seg2.epochs
  115. self.evts1 = self.seg1.events
  116. self.evts2 = self.seg2.events
  117. self.sigarrs1a = clone_object(self.sigarrs1, n=2)
  118. self.irsigs1a = clone_object(self.irsigs1)
  119. self.trains1a = clone_object(self.trains1)
  120. self.epcs1a = clone_object(self.epcs1)
  121. self.evts1a = clone_object(self.evts1)
  122. def test_init(self):
  123. seg = Segment(name='a segment', index=3)
  124. assert_neo_object_is_compliant(seg)
  125. self.assertEqual(seg.name, 'a segment')
  126. self.assertEqual(seg.file_origin, None)
  127. self.assertEqual(seg.index, 3)
  128. def check_creation(self, seg):
  129. assert_neo_object_is_compliant(seg)
  130. seed = seg.annotations['seed']
  131. targ0 = get_fake_value('file_datetime', datetime, seed=seed+0)
  132. self.assertEqual(seg.file_datetime, targ0)
  133. targ1 = get_fake_value('rec_datetime', datetime, seed=seed+1)
  134. self.assertEqual(seg.rec_datetime, targ1)
  135. targ2 = get_fake_value('index', int, seed=seed+2)
  136. self.assertEqual(seg.index, targ2)
  137. targ3 = get_fake_value('name', str, seed=seed+3, obj=Segment)
  138. self.assertEqual(seg.name, targ3)
  139. targ4 = get_fake_value('description', str,
  140. seed=seed+4, obj=Segment)
  141. self.assertEqual(seg.description, targ4)
  142. targ5 = get_fake_value('file_origin', str)
  143. self.assertEqual(seg.file_origin, targ5)
  144. targ6 = get_annotations()
  145. targ6['seed'] = seed
  146. self.assertEqual(seg.annotations, targ6)
  147. self.assertTrue(hasattr(seg, 'analogsignals'))
  148. self.assertTrue(hasattr(seg, 'irregularlysampledsignals'))
  149. self.assertTrue(hasattr(seg, 'epochs'))
  150. self.assertTrue(hasattr(seg, 'events'))
  151. self.assertTrue(hasattr(seg, 'spiketrains'))
  152. self.assertEqual(len(seg.analogsignals), self.nchildren)
  153. self.assertEqual(len(seg.irregularlysampledsignals), self.nchildren)
  154. self.assertEqual(len(seg.epochs), self.nchildren)
  155. self.assertEqual(len(seg.events), self.nchildren)
  156. self.assertEqual(len(seg.spiketrains), self.nchildren**2)
  157. def test__creation(self):
  158. self.check_creation(self.seg1)
  159. self.check_creation(self.seg2)
  160. def test_times(self):
  161. for seg in [self.seg1,self.seg2]:
  162. # calculate target values for t_start and t_stop
  163. t_starts, t_stops = [], []
  164. for children in [seg.analogsignals,
  165. seg.epochs,
  166. seg.events,
  167. seg.irregularlysampledsignals,
  168. seg.spiketrains]:
  169. for child in children:
  170. if hasattr(child,'t_start'):
  171. t_starts.append(child.t_start)
  172. if hasattr(child,'t_stop'):
  173. t_stops.append(child.t_stop)
  174. if hasattr(child,'time'):
  175. t_starts.append(child.time)
  176. t_stops.append(child.time)
  177. if hasattr(child,'times'):
  178. t_starts.append(child.times[0])
  179. t_stops.append(child.times[-1])
  180. targ_t_start = min(t_starts)
  181. targ_t_stop = max(t_stops)
  182. self.assertEqual(seg.t_start,targ_t_start)
  183. self.assertEqual(seg.t_stop,targ_t_stop)
  184. def test__merge(self):
  185. seg1a = fake_neo(Block, seed=self.seed1, n=self.nchildren).segments[0]
  186. assert_same_sub_schema(self.seg1, seg1a)
  187. seg1a.epochs.append(self.epcs2[0])
  188. seg1a.annotate(seed=self.seed2)
  189. seg1a.merge(self.seg2)
  190. self.check_creation(self.seg2)
  191. assert_same_sub_schema(self.sigarrs1a + self.sigarrs2,
  192. seg1a.analogsignals)
  193. assert_same_sub_schema(self.irsigs1a + self.irsigs2,
  194. seg1a.irregularlysampledsignals)
  195. assert_same_sub_schema(self.epcs1 + self.epcs2, seg1a.epochs)
  196. assert_same_sub_schema(self.evts1 + self.evts2, seg1a.events)
  197. assert_same_sub_schema(self.trains1 + self.trains2, seg1a.spiketrains)
  198. def test__children(self):
  199. blk = Block(name='block1')
  200. blk.segments = [self.seg1]
  201. blk.create_many_to_one_relationship(force=True)
  202. assert_neo_object_is_compliant(self.seg1)
  203. assert_neo_object_is_compliant(blk)
  204. childobjs = ('AnalogSignal',
  205. 'Epoch', 'Event',
  206. 'IrregularlySampledSignal',
  207. 'SpikeTrain')
  208. childconts = ('analogsignals',
  209. 'epochs', 'events',
  210. 'irregularlysampledsignals',
  211. 'spiketrains')
  212. self.assertEqual(self.seg1._container_child_objects, ())
  213. self.assertEqual(self.seg1._data_child_objects, childobjs)
  214. self.assertEqual(self.seg1._single_parent_objects, ('Block',))
  215. self.assertEqual(self.seg1._multi_child_objects, ())
  216. self.assertEqual(self.seg1._multi_parent_objects, ())
  217. self.assertEqual(self.seg1._child_properties, ())
  218. self.assertEqual(self.seg1._single_child_objects, childobjs)
  219. self.assertEqual(self.seg1._container_child_containers, ())
  220. self.assertEqual(self.seg1._data_child_containers, childconts)
  221. self.assertEqual(self.seg1._single_child_containers, childconts)
  222. self.assertEqual(self.seg1._single_parent_containers, ('block',))
  223. self.assertEqual(self.seg1._multi_child_containers, ())
  224. self.assertEqual(self.seg1._multi_parent_containers, ())
  225. self.assertEqual(self.seg1._child_objects, childobjs)
  226. self.assertEqual(self.seg1._child_containers, childconts)
  227. self.assertEqual(self.seg1._parent_objects, ('Block',))
  228. self.assertEqual(self.seg1._parent_containers, ('block',))
  229. totchildren = (self.nchildren*2 + # epoch/event
  230. self.nchildren + # analogsignal
  231. self.nchildren**2 + # spiketrain
  232. self.nchildren) # irregsignal
  233. self.assertEqual(len(self.seg1._single_children), totchildren)
  234. self.assertEqual(len(self.seg1.data_children), totchildren)
  235. self.assertEqual(len(self.seg1.children), totchildren)
  236. self.assertEqual(len(self.seg1.data_children_recur), totchildren)
  237. self.assertEqual(len(self.seg1.children_recur), totchildren)
  238. self.assertEqual(len(self.seg1._multi_children), 0)
  239. self.assertEqual(len(self.seg1.container_children), 0)
  240. self.assertEqual(len(self.seg1.container_children_recur), 0)
  241. children = (self.sigarrs1a +
  242. self.epcs1a + self.evts1a +
  243. self.irsigs1a +
  244. self.trains1a)
  245. assert_same_sub_schema(list(self.seg1._single_children), children)
  246. assert_same_sub_schema(list(self.seg1.data_children), children)
  247. assert_same_sub_schema(list(self.seg1.data_children_recur), children)
  248. assert_same_sub_schema(list(self.seg1.children), children)
  249. assert_same_sub_schema(list(self.seg1.children_recur), children)
  250. self.assertEqual(len(self.seg1.parents), 1)
  251. self.assertEqual(self.seg1.parents[0].name, 'block1')
  252. def test__size(self):
  253. targ1 = {"epochs": self.nchildren, "events": self.nchildren,
  254. "irregularlysampledsignals": self.nchildren,
  255. "spiketrains": self.nchildren**2,
  256. "analogsignals": self.nchildren}
  257. self.assertEqual(self.targobj.size, targ1)
  258. def test__filter_none(self):
  259. targ = []
  260. res0 = self.targobj.filter()
  261. res1 = self.targobj.filter({})
  262. res2 = self.targobj.filter([])
  263. res3 = self.targobj.filter([{}])
  264. res4 = self.targobj.filter([{}, {}])
  265. res5 = self.targobj.filter([{}, {}])
  266. res6 = self.targobj.filter(targdict={})
  267. res7 = self.targobj.filter(targdict=[])
  268. res8 = self.targobj.filter(targdict=[{}])
  269. res9 = self.targobj.filter(targdict=[{}, {}])
  270. assert_same_sub_schema(res0, targ)
  271. assert_same_sub_schema(res1, targ)
  272. assert_same_sub_schema(res2, targ)
  273. assert_same_sub_schema(res3, targ)
  274. assert_same_sub_schema(res4, targ)
  275. assert_same_sub_schema(res5, targ)
  276. assert_same_sub_schema(res6, targ)
  277. assert_same_sub_schema(res7, targ)
  278. assert_same_sub_schema(res8, targ)
  279. assert_same_sub_schema(res9, targ)
  280. def test__filter_annotation_single(self):
  281. targ = (self.sigarrs1a +
  282. [self.epcs1a[0]] +
  283. [self.evts1a[0]] +
  284. self.irsigs1a +
  285. self.trains1a)
  286. res0 = self.targobj.filter(j=0)
  287. res1 = self.targobj.filter({'j': 0})
  288. res2 = self.targobj.filter(targdict={'j': 0})
  289. res3 = self.targobj.filter([{'j': 0}])
  290. res4 = self.targobj.filter(targdict=[{'j': 0}])
  291. assert_same_sub_schema(res0, targ)
  292. assert_same_sub_schema(res1, targ)
  293. assert_same_sub_schema(res2, targ)
  294. assert_same_sub_schema(res3, targ)
  295. assert_same_sub_schema(res4, targ)
  296. def test__filter_single_annotation_nores(self):
  297. targ = []
  298. res0 = self.targobj.filter(j=5)
  299. res1 = self.targobj.filter({'j': 5})
  300. res2 = self.targobj.filter(targdict={'j': 5})
  301. res3 = self.targobj.filter([{'j': 5}])
  302. res4 = self.targobj.filter(targdict=[{'j': 5}])
  303. assert_same_sub_schema(res0, targ)
  304. assert_same_sub_schema(res1, targ)
  305. assert_same_sub_schema(res2, targ)
  306. assert_same_sub_schema(res3, targ)
  307. assert_same_sub_schema(res4, targ)
  308. def test__filter_attribute_single(self):
  309. targ = [self.epcs1a[1]]
  310. res0 = self.targobj.filter(name=self.epcs1a[1].name)
  311. res1 = self.targobj.filter({'name': self.epcs1a[1].name})
  312. res2 = self.targobj.filter(targdict={'name': self.epcs1a[1].name})
  313. assert_same_sub_schema(res0, targ)
  314. assert_same_sub_schema(res1, targ)
  315. assert_same_sub_schema(res2, targ)
  316. def test__filter_attribute_single_nores(self):
  317. targ = []
  318. res0 = self.targobj.filter(name=self.epcs2[0].name)
  319. res1 = self.targobj.filter({'name': self.epcs2[0].name})
  320. res2 = self.targobj.filter(targdict={'name': self.epcs2[0].name})
  321. assert_same_sub_schema(res0, targ)
  322. assert_same_sub_schema(res1, targ)
  323. assert_same_sub_schema(res2, targ)
  324. def test__filter_multi(self):
  325. targ = (self.sigarrs1a +
  326. [self.epcs1a[0]] +
  327. [self.evts1a[0]] +
  328. self.irsigs1a +
  329. self.trains1a +
  330. [self.epcs1a[1]])
  331. res0 = self.targobj.filter(name=self.epcs1a[1].name, j=0)
  332. res1 = self.targobj.filter({'name': self.epcs1a[1].name, 'j': 0})
  333. res2 = self.targobj.filter(targdict={'name': self.epcs1a[1].name,
  334. 'j': 0})
  335. assert_same_sub_schema(res0, targ)
  336. assert_same_sub_schema(res1, targ)
  337. assert_same_sub_schema(res2, targ)
  338. def test__filter_multi_nores(self):
  339. targ = []
  340. res0 = self.targobj.filter([{'j': 0}, {}])
  341. res1 = self.targobj.filter({}, ttype=0)
  342. res2 = self.targobj.filter([{}], ttype=0)
  343. res3 = self.targobj.filter({'name': self.epcs1a[1].name}, j=0)
  344. res4 = self.targobj.filter(targdict={'name': self.epcs1a[1].name},
  345. j=0)
  346. res5 = self.targobj.filter(name=self.epcs1a[1].name,
  347. targdict={'j': 0})
  348. res6 = self.targobj.filter(name=self.epcs2[0].name, j=5)
  349. res7 = self.targobj.filter({'name': self.epcs2[1].name, 'j': 5})
  350. res8 = self.targobj.filter(targdict={'name': self.epcs2[1].name,
  351. 'j': 5})
  352. res9 = self.targobj.filter({'name': self.epcs2[1].name}, j=5)
  353. res10 = self.targobj.filter(targdict={'name': self.epcs2[1].name},
  354. j=5)
  355. res11 = self.targobj.filter(name=self.epcs2[1].name,
  356. targdict={'j': 5})
  357. res12 = self.targobj.filter({'name': self.epcs1a[1].name}, j=5)
  358. res13 = self.targobj.filter(targdict={'name': self.epcs1a[1].name},
  359. j=5)
  360. res14 = self.targobj.filter(name=self.epcs1a[1].name,
  361. targdict={'j': 5})
  362. assert_same_sub_schema(res0, targ)
  363. assert_same_sub_schema(res1, targ)
  364. assert_same_sub_schema(res2, targ)
  365. assert_same_sub_schema(res3, targ)
  366. assert_same_sub_schema(res4, targ)
  367. assert_same_sub_schema(res5, targ)
  368. assert_same_sub_schema(res6, targ)
  369. assert_same_sub_schema(res7, targ)
  370. assert_same_sub_schema(res8, targ)
  371. assert_same_sub_schema(res9, targ)
  372. assert_same_sub_schema(res10, targ)
  373. assert_same_sub_schema(res11, targ)
  374. assert_same_sub_schema(res12, targ)
  375. assert_same_sub_schema(res13, targ)
  376. assert_same_sub_schema(res14, targ)
  377. def test__filter_multi_partres(self):
  378. targ = [self.epcs1a[1]]
  379. res0 = self.targobj.filter(name=self.epcs1a[1].name, j=5)
  380. res1 = self.targobj.filter({'name': self.epcs1a[1].name, 'j': 5})
  381. res2 = self.targobj.filter(targdict={'name': self.epcs1a[1].name,
  382. 'j': 5})
  383. res3 = self.targobj.filter([{'j': 1}, {'i': 1}])
  384. res4 = self.targobj.filter({'j': 1}, i=1)
  385. res5 = self.targobj.filter([{'j': 1}], i=1)
  386. assert_same_sub_schema(res0, targ)
  387. assert_same_sub_schema(res1, targ)
  388. assert_same_sub_schema(res2, targ)
  389. assert_same_sub_schema(res3, targ)
  390. assert_same_sub_schema(res4, targ)
  391. assert_same_sub_schema(res5, targ)
  392. def test__filter_single_annotation_obj_single(self):
  393. targ = [self.epcs1a[1]]
  394. res0 = self.targobj.filter(j=1, objects='Epoch')
  395. res1 = self.targobj.filter(j=1, objects=Epoch)
  396. res2 = self.targobj.filter(j=1, objects=['Epoch'])
  397. res3 = self.targobj.filter(j=1, objects=[Epoch])
  398. res4 = self.targobj.filter(j=1, objects=[Epoch,
  399. ChannelIndex])
  400. assert_same_sub_schema(res0, targ)
  401. assert_same_sub_schema(res1, targ)
  402. assert_same_sub_schema(res2, targ)
  403. assert_same_sub_schema(res3, targ)
  404. assert_same_sub_schema(res4, targ)
  405. def test__filter_single_annotation_obj_multi(self):
  406. targ = [self.epcs1a[1], self.evts1a[1]]
  407. res0 = self.targobj.filter(j=1, objects=['Event', Epoch])
  408. assert_same_sub_schema(res0, targ)
  409. def test__filter_single_annotation_obj_none(self):
  410. targ = []
  411. res0 = self.targobj.filter(j=1, objects=ChannelIndex)
  412. res1 = self.targobj.filter(j=1, objects='ChannelIndex')
  413. res2 = self.targobj.filter(j=1, objects=[])
  414. assert_same_sub_schema(res0, targ)
  415. assert_same_sub_schema(res1, targ)
  416. assert_same_sub_schema(res2, targ)
  417. def test__filter_single_annotation_norecur(self):
  418. targ = [self.epcs1a[1], self.evts1a[1]]
  419. res0 = self.targobj.filter(j=1,
  420. recursive=False)
  421. assert_same_sub_schema(res0, targ)
  422. def test__filter_single_attribute_norecur(self):
  423. targ = [self.epcs1a[1]]
  424. res0 = self.targobj.filter(name=self.epcs1a[1].name,
  425. recursive=False)
  426. assert_same_sub_schema(res0, targ)
  427. def test__filter_single_annotation_nodata(self):
  428. targ = []
  429. res0 = self.targobj.filter(j=0,
  430. data=False)
  431. assert_same_sub_schema(res0, targ)
  432. def test__filter_single_attribute_nodata(self):
  433. targ = []
  434. res0 = self.targobj.filter(name=self.epcs1a[1].name,
  435. data=False)
  436. assert_same_sub_schema(res0, targ)
  437. def test__filter_single_annotation_nodata_norecur(self):
  438. targ = []
  439. res0 = self.targobj.filter(j=0,
  440. data=False, recursive=False)
  441. assert_same_sub_schema(res0, targ)
  442. def test__filter_single_attribute_nodata_norecur(self):
  443. targ = []
  444. res0 = self.targobj.filter(name=self.epcs1a[1].name,
  445. data=False, recursive=False)
  446. assert_same_sub_schema(res0, targ)
  447. def test__filter_single_annotation_container(self):
  448. targ = [self.epcs1a[1], self.evts1a[1]]
  449. res0 = self.targobj.filter(j=1,
  450. container=True)
  451. assert_same_sub_schema(res0, targ)
  452. def test__filter_single_attribute_container(self):
  453. targ = [self.epcs1a[1]]
  454. res0 = self.targobj.filter(name=self.epcs1a[1].name,
  455. container=True)
  456. assert_same_sub_schema(res0, targ)
  457. def test__filter_single_annotation_container_norecur(self):
  458. targ = [self.epcs1a[1], self.evts1a[1]]
  459. res0 = self.targobj.filter(j=1,
  460. container=True, recursive=False)
  461. assert_same_sub_schema(res0, targ)
  462. def test__filter_single_attribute_container_norecur(self):
  463. targ = [self.epcs1a[1]]
  464. res0 = self.targobj.filter(name=self.epcs1a[1].name,
  465. container=True, recursive=False)
  466. assert_same_sub_schema(res0, targ)
  467. def test__filter_single_annotation_nodata_container(self):
  468. targ = []
  469. res0 = self.targobj.filter(j=0,
  470. data=False, container=True)
  471. assert_same_sub_schema(res0, targ)
  472. def test__filter_single_attribute_nodata_container(self):
  473. targ = []
  474. res0 = self.targobj.filter(name=self.epcs1a[1].name,
  475. data=False, container=True)
  476. assert_same_sub_schema(res0, targ)
  477. def test__filter_single_annotation_nodata_container_norecur(self):
  478. targ = []
  479. res0 = self.targobj.filter(j=0,
  480. data=False, container=True,
  481. recursive=False)
  482. assert_same_sub_schema(res0, targ)
  483. def test__filter_single_attribute_nodata_container_norecur(self):
  484. targ = []
  485. res0 = self.targobj.filter(name=self.epcs1a[1].name,
  486. data=False, container=True,
  487. recursive=False)
  488. assert_same_sub_schema(res0, targ)
  489. def test__filterdata_multi(self):
  490. data = self.targobj.children_recur
  491. targ = (self.sigarrs1a +
  492. [self.epcs1a[0]] +
  493. [self.evts1a[0]] +
  494. self.irsigs1a +
  495. self.trains1a +
  496. [self.epcs1a[1]])
  497. res0 = filterdata(data, name=self.epcs1a[1].name, j=0)
  498. res1 = filterdata(data, {'name': self.epcs1a[1].name, 'j': 0})
  499. res2 = filterdata(data, targdict={'name': self.epcs1a[1].name, 'j': 0})
  500. assert_same_sub_schema(res0, targ)
  501. assert_same_sub_schema(res1, targ)
  502. assert_same_sub_schema(res2, targ)
  503. def test__filterdata_multi_nores(self):
  504. data = self.targobj.children_recur
  505. targ = []
  506. res0 = filterdata(data, [{'j': 0}, {}])
  507. res1 = filterdata(data, {}, ttype=0)
  508. res2 = filterdata(data, [{}], ttype=0)
  509. res3 = filterdata(data, {'name': self.epcs1a[1].name}, j=0)
  510. res4 = filterdata(data, targdict={'name': self.epcs1a[1].name}, j=0)
  511. res5 = filterdata(data, name=self.epcs1a[1].name, targdict={'j': 0})
  512. res6 = filterdata(data, name=self.epcs2[0].name, j=5)
  513. res7 = filterdata(data, {'name': self.epcs2[1].name, 'j': 5})
  514. res8 = filterdata(data, targdict={'name': self.epcs2[1].name, 'j': 5})
  515. res9 = filterdata(data, {'name': self.epcs2[1].name}, j=5)
  516. res10 = filterdata(data, targdict={'name': self.epcs2[1].name}, j=5)
  517. res11 = filterdata(data, name=self.epcs2[1].name, targdict={'j': 5})
  518. res12 = filterdata(data, {'name': self.epcs1a[1].name}, j=5)
  519. res13 = filterdata(data, targdict={'name': self.epcs1a[1].name}, j=5)
  520. res14 = filterdata(data, name=self.epcs1a[1].name, targdict={'j': 5})
  521. assert_same_sub_schema(res0, targ)
  522. assert_same_sub_schema(res1, targ)
  523. assert_same_sub_schema(res2, targ)
  524. assert_same_sub_schema(res3, targ)
  525. assert_same_sub_schema(res4, targ)
  526. assert_same_sub_schema(res5, targ)
  527. assert_same_sub_schema(res6, targ)
  528. assert_same_sub_schema(res7, targ)
  529. assert_same_sub_schema(res8, targ)
  530. assert_same_sub_schema(res9, targ)
  531. assert_same_sub_schema(res10, targ)
  532. assert_same_sub_schema(res11, targ)
  533. assert_same_sub_schema(res12, targ)
  534. assert_same_sub_schema(res13, targ)
  535. assert_same_sub_schema(res14, targ)
  536. def test__filterdata_multi_partres(self):
  537. data = self.targobj.children_recur
  538. targ = [self.epcs1a[1]]
  539. res0 = filterdata(data, name=self.epcs1a[1].name, j=5)
  540. res1 = filterdata(data, {'name': self.epcs1a[1].name, 'j': 5})
  541. res2 = filterdata(data, targdict={'name': self.epcs1a[1].name, 'j': 5})
  542. res3 = filterdata(data, [{'j': 1}, {'i': 1}])
  543. res4 = filterdata(data, {'j': 1}, i=1)
  544. res5 = filterdata(data, [{'j': 1}], i=1)
  545. assert_same_sub_schema(res0, targ)
  546. assert_same_sub_schema(res1, targ)
  547. assert_same_sub_schema(res2, targ)
  548. assert_same_sub_schema(res3, targ)
  549. assert_same_sub_schema(res4, targ)
  550. assert_same_sub_schema(res5, targ)
  551. # @unittest.skipUnless(HAVE_IPYTHON, "requires IPython")
  552. # def test__pretty(self):
  553. # ann = get_annotations()
  554. # ann['seed'] = self.seed1
  555. # ann = pretty(ann).replace('\n ', '\n ')
  556. # res = pretty(self.seg1)
  557. #
  558. # sigarr0 = pretty(self.sigarrs1[0])
  559. # sigarr1 = pretty(self.sigarrs1[1])
  560. # sigarr0 = sigarr0.replace('\n', '\n ')
  561. # sigarr1 = sigarr1.replace('\n', '\n ')
  562. #
  563. # targ = ("Segment with " +
  564. # ("%s analogsignals, " %
  565. # (len(self.sigarrs1a),)) +
  566. # ("%s epochs, " % len(self.epcs1a)) +
  567. # ("%s events, " % len(self.evts1a)) +
  568. # ("%s irregularlysampledsignals, " %
  569. # len(self.irsigs1a)) +
  570. # ("%s spiketrains\n" % len(self.trains1a)) +
  571. # ("name: '%s'\ndescription: '%s'\n" %
  572. # (self.seg1.name, self.seg1.description)
  573. # ) +
  574. #
  575. # ("annotations: %s\n" % ann) +
  576. #
  577. # ("# analogsignals (N=%s)\n" % len(self.sigarrs1a)) +
  578. #
  579. # ('%s: %s\n' % (0, sigarr0)) +
  580. # ('%s: %s' % (1, sigarr1)))
  581. #
  582. # self.assertEqual(res, targ)
  583. def test__construct_subsegment_by_unit(self):
  584. nb_seg = 3
  585. nb_unit = 7
  586. unit_with_sig = np.array([0, 2, 5])
  587. signal_types = ['Vm', 'Conductances']
  588. sig_len = 100
  589. # channelindexes
  590. chxs = [ChannelIndex(name='Vm',
  591. index=unit_with_sig),
  592. ChannelIndex(name='Conductance',
  593. index=unit_with_sig)]
  594. # Unit
  595. all_unit = []
  596. for u in range(nb_unit):
  597. un = Unit(name='Unit #%d' % u, channel_indexes=np.array([u]))
  598. assert_neo_object_is_compliant(un)
  599. all_unit.append(un)
  600. blk = Block()
  601. blk.channel_indexes = chxs
  602. for s in range(nb_seg):
  603. seg = Segment(name='Simulation %s' % s)
  604. for j in range(nb_unit):
  605. st = SpikeTrain([1, 2], units='ms',
  606. t_start=0., t_stop=10)
  607. st.unit = all_unit[j]
  608. for t in signal_types:
  609. anasigarr = AnalogSignal(np.zeros((sig_len,
  610. len(unit_with_sig))),
  611. units='nA',
  612. sampling_rate=1000.*pq.Hz,
  613. channel_indexes=unit_with_sig)
  614. seg.analogsignals.append(anasigarr)
  615. blk.create_many_to_one_relationship()
  616. for unit in all_unit:
  617. assert_neo_object_is_compliant(unit)
  618. for chx in chxs:
  619. assert_neo_object_is_compliant(chx)
  620. assert_neo_object_is_compliant(blk)
  621. # what you want
  622. newseg = seg.construct_subsegment_by_unit(all_unit[:4])
  623. assert_neo_object_is_compliant(newseg)
  624. def test_segment_take_spiketrains_by_unit(self):
  625. result1 = self.seg1.take_spiketrains_by_unit()
  626. result21 = self.seg1.take_spiketrains_by_unit([self.unit1])
  627. result22 = self.seg1.take_spiketrains_by_unit([self.unit2])
  628. self.assertEqual(result1, [])
  629. assert_same_sub_schema(result21, [self.trains1a[0]])
  630. assert_same_sub_schema(result22, [self.trains1a[1]])
  631. # to remove
  632. # def test_segment_take_analogsignal_by_unit(self):
  633. # result1 = self.seg1.take_analogsignal_by_unit()
  634. # result21 = self.seg1.take_analogsignal_by_unit([self.unit1])
  635. # result22 = self.seg1.take_analogsignal_by_unit([self.unit2])
  636. #
  637. # self.assertEqual(result1, [])
  638. #
  639. # assert_same_sub_schema(result21, [self.sigs1a[0]])
  640. # assert_same_sub_schema(result22, [self.sigs1a[1]])
  641. #
  642. # def test_segment_take_analogsignal_by_channelindex(self):
  643. # ind1 = self.unit1.channel_indexes[0]
  644. # ind2 = self.unit2.channel_indexes[0]
  645. # result1 = self.seg1.take_analogsignal_by_channelindex()
  646. # result21 = self.seg1.take_analogsignal_by_channelindex([ind1])
  647. # result22 = self.seg1.take_analogsignal_by_channelindex([ind2])
  648. #
  649. # self.assertEqual(result1, [])
  650. #
  651. # assert_same_sub_schema(result21, [self.sigs1a[0]])
  652. # assert_same_sub_schema(result22, [self.sigs1a[1]])
  653. # commenting out temporarily
  654. # def test_seg_take_slice_of_analogsignalarray_by_unit(self):
  655. # seg = self.seg1
  656. # result1 = seg.take_slice_of_analogsignalarray_by_unit()
  657. # result21 = seg.take_slice_of_analogsignalarray_by_unit([self.unit1])
  658. # result23 = seg.take_slice_of_analogsignalarray_by_unit([self.unit3])
  659. #
  660. # self.assertEqual(result1, [])
  661. #
  662. # targ1 = [self.sigarrs1a[0][:, np.array([True])],
  663. # self.sigarrs1a[1][:, np.array([False])]]
  664. # targ3 = [self.sigarrs1a[0][:, np.array([False])],
  665. # self.sigarrs1a[1][:, np.array([True])]]
  666. # assert_same_sub_schema(result21, targ1)
  667. # assert_same_sub_schema(result23, targ3)
  668. #
  669. # def test_seg_take_slice_of_analogsignalarray_by_channelindex(self):
  670. # seg = self.seg1
  671. # ind1 = self.unit1.channel_indexes[0]
  672. # ind3 = self.unit3.channel_indexes[0]
  673. # result1 = seg.take_slice_of_analogsignalarray_by_channelindex()
  674. # result21 = seg.take_slice_of_analogsignalarray_by_channelindex([ind1])
  675. # result23 = seg.take_slice_of_analogsignalarray_by_channelindex([ind3])
  676. #
  677. # self.assertEqual(result1, [])
  678. #
  679. # targ1 = [self.sigarrs1a[0][:, np.array([True])],
  680. # self.sigarrs1a[1][:, np.array([False])]]
  681. # targ3 = [self.sigarrs1a[0][:, np.array([False])],
  682. # self.sigarrs1a[1][:, np.array([True])]]
  683. # assert_same_sub_schema(result21, targ1)
  684. # assert_same_sub_schema(result23, targ3)
  685. if __name__ == "__main__":
  686. unittest.main()