test_block.py 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. # -*- coding: utf-8 -*-
  2. """
  3. Tests of the neo.core.block.Block class
  4. """
  5. # needed for python 3 compatibility
  6. from __future__ import absolute_import, division, print_function
  7. from datetime import datetime
  8. try:
  9. import unittest2 as unittest
  10. except ImportError:
  11. import unittest
  12. import numpy as np
  13. try:
  14. from IPython.lib.pretty import pretty
  15. except ImportError as err:
  16. HAVE_IPYTHON = False
  17. else:
  18. HAVE_IPYTHON = True
  19. from neo.core.block import Block
  20. from neo.core.container import filterdata
  21. from neo.core import SpikeTrain, Unit
  22. from neo.test.tools import (assert_neo_object_is_compliant,
  23. assert_same_sub_schema)
  24. from neo.test.generate_datasets import (get_fake_value, get_fake_values,
  25. fake_neo, clone_object,
  26. get_annotations, TEST_ANNOTATIONS)
  27. class Test__generate_datasets(unittest.TestCase):
  28. def setUp(self):
  29. np.random.seed(0)
  30. self.annotations = dict([(str(x), TEST_ANNOTATIONS[x]) for x in
  31. range(len(TEST_ANNOTATIONS))])
  32. def test__get_fake_values(self):
  33. self.annotations['seed'] = 0
  34. file_datetime = get_fake_value('file_datetime', datetime, seed=0)
  35. rec_datetime = get_fake_value('rec_datetime', datetime, seed=1)
  36. index = get_fake_value('index', int, seed=2)
  37. name = get_fake_value('name', str, seed=3, obj=Block)
  38. description = get_fake_value('description', str, seed=4, obj='Block')
  39. file_origin = get_fake_value('file_origin', str)
  40. attrs1 = {'file_datetime': file_datetime,
  41. 'rec_datetime': rec_datetime,
  42. 'index': index,
  43. 'name': name,
  44. 'description': description,
  45. 'file_origin': file_origin}
  46. attrs2 = attrs1.copy()
  47. attrs2.update(self.annotations)
  48. res11 = get_fake_values(Block, annotate=False, seed=0)
  49. res12 = get_fake_values('Block', annotate=False, seed=0)
  50. res21 = get_fake_values(Block, annotate=True, seed=0)
  51. res22 = get_fake_values('Block', annotate=True, seed=0)
  52. self.assertEqual(res11, attrs1)
  53. self.assertEqual(res12, attrs1)
  54. self.assertEqual(res21, attrs2)
  55. self.assertEqual(res22, attrs2)
  56. def test__fake_neo__cascade(self):
  57. self.annotations['seed'] = None
  58. obj_type = 'Block'
  59. cascade = True
  60. res = fake_neo(obj_type=obj_type, cascade=cascade)
  61. for child in res.children_recur:
  62. del child.annotations['i']
  63. del child.annotations['j']
  64. self.assertTrue(isinstance(res, Block))
  65. assert_neo_object_is_compliant(res)
  66. self.assertEqual(res.annotations, self.annotations)
  67. self.assertEqual(len(res.segments), 1)
  68. seg = res.segments[0]
  69. self.assertEqual(seg.annotations, self.annotations)
  70. self.assertEqual(len(res.channel_indexes), 1)
  71. chx = res.channel_indexes[0]
  72. self.assertEqual(chx.annotations, self.annotations)
  73. self.assertEqual(len(seg.analogsignals), 1)
  74. self.assertEqual(len(seg.analogsignals), 1)
  75. self.assertEqual(len(seg.irregularlysampledsignals), 1)
  76. self.assertEqual(len(seg.spiketrains), 1)
  77. self.assertEqual(len(seg.events), 1)
  78. self.assertEqual(len(seg.epochs), 1)
  79. self.assertEqual(seg.analogsignals[0].annotations,
  80. self.annotations)
  81. self.assertEqual(seg.analogsignals[0].annotations,
  82. self.annotations)
  83. self.assertEqual(seg.irregularlysampledsignals[0].annotations,
  84. self.annotations)
  85. self.assertEqual(seg.spiketrains[0].annotations,
  86. self.annotations)
  87. self.assertEqual(seg.events[0].annotations,
  88. self.annotations)
  89. self.assertEqual(seg.epochs[0].annotations,
  90. self.annotations)
  91. self.assertEqual(len(chx.units), 1)
  92. unit = chx.units[0]
  93. self.assertEqual(unit.annotations, self.annotations)
  94. self.assertEqual(len(chx.analogsignals), 1)
  95. self.assertEqual(chx.analogsignals[0].annotations,
  96. self.annotations)
  97. self.assertEqual(len(unit.spiketrains), 1)
  98. self.assertEqual(unit.spiketrains[0].annotations,
  99. self.annotations)
  100. def test__fake_neo__nocascade(self):
  101. self.annotations['seed'] = None
  102. obj_type = Block
  103. cascade = False
  104. res = fake_neo(obj_type=obj_type, cascade=cascade)
  105. self.assertTrue(isinstance(res, Block))
  106. assert_neo_object_is_compliant(res)
  107. self.assertEqual(res.annotations, self.annotations)
  108. self.assertEqual(len(res.segments), 0)
  109. self.assertEqual(len(res.channel_indexes), 0)
  110. class TestBlock(unittest.TestCase):
  111. def setUp(self):
  112. self.nchildren = 2
  113. self.seed1 = 0
  114. self.seed2 = 10000
  115. self.blk1 = fake_neo(Block, seed=self.seed1, n=self.nchildren)
  116. self.blk2 = fake_neo(Block, seed=self.seed2, n=self.nchildren)
  117. self.targobj = self.blk1
  118. self.segs1 = self.blk1.segments
  119. self.segs2 = self.blk2.segments
  120. self.chxs1 = self.blk1.channel_indexes
  121. self.chxs2 = self.blk2.channel_indexes
  122. self.units1 = [[unit for unit in chx.units] for chx in self.chxs1]
  123. self.units2 = [[unit for unit in chx.units] for chx in self.chxs2]
  124. self.units1 = sum(self.units1, [])
  125. self.units2 = sum(self.units2, [])
  126. self.sigarrs1 = [[sigarr for sigarr in chx.analogsignals]
  127. for chx in self.chxs1]
  128. self.sigarrs2 = [[sigarr for sigarr in chx.analogsignals]
  129. for chx in self.chxs2]
  130. self.trains1 = [[train for train in unit.spiketrains]
  131. for unit in self.units1]
  132. self.trains2 = [[train for train in unit.spiketrains]
  133. for unit in self.units2]
  134. self.irsigs1 = [[irsig for irsig in chx.irregularlysampledsignals]
  135. for chx in self.chxs1]
  136. self.irsigs2 = [[irsig for irsig in chx.irregularlysampledsignals]
  137. for chx in self.chxs2]
  138. self.epcs1 = [[epc for epc in seg.epochs]
  139. for seg in self.segs1]
  140. self.epcs2 = [[epc for epc in seg.epochs]
  141. for seg in self.segs2]
  142. self.evts1 = [[evt for evt in seg.events]
  143. for seg in self.segs1]
  144. self.evts2 = [[evt for evt in seg.events]
  145. for seg in self.segs2]
  146. self.sigarrs1 = sum(self.sigarrs1, [])
  147. self.sigarrs2 = sum(self.sigarrs2, [])
  148. self.trains1 = sum(self.trains1, [])
  149. self.trains2 = sum(self.trains2, [])
  150. self.irsigs1 = sum(self.irsigs1, [])
  151. self.irsigs2 = sum(self.irsigs2, [])
  152. self.epcs1 = sum(self.epcs1, [])
  153. self.epcs2 = sum(self.epcs2, [])
  154. self.evts1 = sum(self.evts1, [])
  155. self.evts2 = sum(self.evts2, [])
  156. def test_block_init(self):
  157. blk = Block(name='a block')
  158. assert_neo_object_is_compliant(blk)
  159. self.assertEqual(blk.name, 'a block')
  160. self.assertEqual(blk.file_origin, None)
  161. def check_creation(self, blk):
  162. assert_neo_object_is_compliant(blk)
  163. seed = blk.annotations['seed']
  164. targ0 = get_fake_value('file_datetime', datetime, seed=seed+0)
  165. self.assertEqual(blk.file_datetime, targ0)
  166. targ1 = get_fake_value('rec_datetime', datetime, seed=seed+1)
  167. self.assertEqual(blk.rec_datetime, targ1)
  168. targ2 = get_fake_value('index', int, seed=seed+2, obj=Block)
  169. self.assertEqual(blk.index, targ2)
  170. targ3 = get_fake_value('name', str, seed=seed+3, obj=Block)
  171. self.assertEqual(blk.name, targ3)
  172. targ4 = get_fake_value('description', str, seed=seed+4, obj=Block)
  173. self.assertEqual(blk.description, targ4)
  174. targ5 = get_fake_value('file_origin', str)
  175. self.assertEqual(blk.file_origin, targ5)
  176. targ6 = get_annotations()
  177. targ6['seed'] = seed
  178. self.assertEqual(blk.annotations, targ6)
  179. self.assertTrue(hasattr(blk, 'channel_indexes'))
  180. self.assertTrue(hasattr(blk, 'segments'))
  181. self.assertEqual(len(blk.channel_indexes), self.nchildren)
  182. self.assertEqual(len(blk.segments), self.nchildren)
  183. def test__creation(self):
  184. self.check_creation(self.blk1)
  185. self.check_creation(self.blk2)
  186. def test__merge(self):
  187. blk1a = fake_neo(Block,
  188. seed=self.seed1, n=self.nchildren)
  189. assert_same_sub_schema(self.blk1, blk1a)
  190. blk1a.annotate(seed=self.seed2)
  191. blk1a.segments.append(self.segs2[0])
  192. blk1a.merge(self.blk2)
  193. segs1a = clone_object(self.blk1).segments
  194. chxs1a = clone_object(self.chxs1)
  195. assert_same_sub_schema(chxs1a + self.chxs2,
  196. blk1a.channel_indexes)
  197. assert_same_sub_schema(segs1a + self.segs2,
  198. blk1a.segments)
  199. def test__children(self):
  200. segs1a = clone_object(self.blk1).segments
  201. chxs1a = clone_object(self.chxs1)
  202. self.assertEqual(self.blk1._container_child_objects,
  203. ('Segment', 'ChannelIndex'))
  204. self.assertEqual(self.blk1._data_child_objects, ())
  205. self.assertEqual(self.blk1._single_parent_objects, ())
  206. self.assertEqual(self.blk1._multi_child_objects, ())
  207. self.assertEqual(self.blk1._multi_parent_objects, ())
  208. self.assertEqual(self.blk1._child_properties,
  209. ('Unit',))
  210. self.assertEqual(self.blk1._single_child_objects,
  211. ('Segment', 'ChannelIndex'))
  212. self.assertEqual(self.blk1._container_child_containers,
  213. ('segments', 'channel_indexes'))
  214. self.assertEqual(self.blk1._data_child_containers, ())
  215. self.assertEqual(self.blk1._single_child_containers,
  216. ('segments', 'channel_indexes'))
  217. self.assertEqual(self.blk1._single_parent_containers, ())
  218. self.assertEqual(self.blk1._multi_child_containers, ())
  219. self.assertEqual(self.blk1._multi_parent_containers, ())
  220. self.assertEqual(self.blk1._child_objects,
  221. ('Segment', 'ChannelIndex'))
  222. self.assertEqual(self.blk1._child_containers,
  223. ('segments', 'channel_indexes'))
  224. self.assertEqual(self.blk1._parent_objects, ())
  225. self.assertEqual(self.blk1._parent_containers, ())
  226. self.assertEqual(len(self.blk1._single_children), 2*self.nchildren)
  227. self.assertEqual(len(self.blk1._multi_children), 0)
  228. self.assertEqual(len(self.blk1.data_children), 0)
  229. self.assertEqual(len(self.blk1.data_children_recur),
  230. 1*self.nchildren**3 + 4*self.nchildren**2)
  231. self.assertEqual(len(self.blk1.container_children), 2*self.nchildren)
  232. self.assertEqual(len(self.blk1.container_children_recur),
  233. 2*self.nchildren + 1*self.nchildren**2)
  234. self.assertEqual(len(self.blk1.children), 2*self.nchildren)
  235. self.assertEqual(len(self.blk1.children_recur),
  236. 2*self.nchildren +
  237. 5*self.nchildren**2 +
  238. 1*self.nchildren**3)
  239. self.assertEqual(self.blk1._multi_children, ())
  240. assert_same_sub_schema(list(self.blk1._single_children),
  241. self.segs1 + self.chxs1)
  242. assert_same_sub_schema(list(self.blk1.container_children),
  243. self.segs1 + self.chxs1)
  244. assert_same_sub_schema(list(self.blk1.container_children_recur),
  245. self.segs1 + self.chxs1 +
  246. self.units1[:2] +
  247. self.units1[2:])
  248. assert_same_sub_schema(list(self.blk1.data_children_recur),
  249. self.sigarrs1[::2] +
  250. self.epcs1[:2] + self.evts1[:2] +
  251. self.irsigs1[::2] +
  252. self.trains1[::2] +
  253. self.sigarrs1[1::2] +
  254. self.epcs1[2:] + self.evts1[2:] +
  255. self.irsigs1[1::2] +
  256. self.trains1[1::2],
  257. exclude=['channel_index'])
  258. assert_same_sub_schema(list(self.blk1.children),
  259. segs1a + chxs1a)
  260. assert_same_sub_schema(list(self.blk1.children_recur),
  261. self.sigarrs1[::2] +
  262. self.epcs1[:2] + self.evts1[:2] +
  263. self.irsigs1[::2] +
  264. self.trains1[::2] +
  265. self.sigarrs1[1::2] +
  266. self.epcs1[2:] + self.evts1[2:] +
  267. self.irsigs1[1::2] +
  268. self.trains1[1::2] +
  269. self.segs1 + self.chxs1 +
  270. self.units1[:2] +
  271. self.units1[2:],
  272. exclude=['channel_index'])
  273. def test__size(self):
  274. targ = {'segments': self.nchildren,
  275. 'channel_indexes': self.nchildren}
  276. self.assertEqual(self.targobj.size, targ)
  277. def test__filter_none(self):
  278. targ = []
  279. res1 = self.targobj.filter()
  280. res2 = self.targobj.filter({})
  281. res3 = self.targobj.filter([])
  282. res4 = self.targobj.filter([{}])
  283. res5 = self.targobj.filter([{}, {}])
  284. res6 = self.targobj.filter([{}, {}])
  285. res7 = self.targobj.filter(targdict={})
  286. res8 = self.targobj.filter(targdict=[])
  287. res9 = self.targobj.filter(targdict=[{}])
  288. res10 = self.targobj.filter(targdict=[{}, {}])
  289. assert_same_sub_schema(res1, targ)
  290. assert_same_sub_schema(res2, targ)
  291. assert_same_sub_schema(res3, targ)
  292. assert_same_sub_schema(res4, targ)
  293. assert_same_sub_schema(res5, targ)
  294. assert_same_sub_schema(res6, targ)
  295. assert_same_sub_schema(res7, targ)
  296. assert_same_sub_schema(res8, targ)
  297. assert_same_sub_schema(res9, targ)
  298. assert_same_sub_schema(res10, targ)
  299. def test__filter_annotation_single(self):
  300. targ = ([self.epcs1[1], self.evts1[1]] +
  301. self.sigarrs1[1::2] +
  302. [self.epcs1[3], self.evts1[3]] +
  303. self.irsigs1[1::2] +
  304. self.trains1[1::2])
  305. res0 = self.targobj.filter(j=1)
  306. res1 = self.targobj.filter({'j': 1})
  307. res2 = self.targobj.filter(targdict={'j': 1})
  308. res3 = self.targobj.filter([{'j': 1}])
  309. res4 = self.targobj.filter(targdict=[{'j': 1}])
  310. assert_same_sub_schema(res0, targ)
  311. assert_same_sub_schema(res1, targ)
  312. assert_same_sub_schema(res2, targ)
  313. assert_same_sub_schema(res3, targ)
  314. assert_same_sub_schema(res4, targ)
  315. def test__filter_single_annotation_nores(self):
  316. targ = []
  317. res0 = self.targobj.filter(j=5)
  318. res1 = self.targobj.filter({'j': 5})
  319. res2 = self.targobj.filter(targdict={'j': 5})
  320. res3 = self.targobj.filter([{'j': 5}])
  321. res4 = self.targobj.filter(targdict=[{'j': 5}])
  322. assert_same_sub_schema(res0, targ)
  323. assert_same_sub_schema(res1, targ)
  324. assert_same_sub_schema(res2, targ)
  325. assert_same_sub_schema(res3, targ)
  326. assert_same_sub_schema(res4, targ)
  327. def test__filter_attribute_single(self):
  328. targ = [self.trains1[0]]
  329. name = self.trains1[0].name
  330. res0 = self.targobj.filter(name=name)
  331. res1 = self.targobj.filter({'name': name})
  332. res2 = self.targobj.filter(targdict={'name': name})
  333. assert_same_sub_schema(res0, targ)
  334. assert_same_sub_schema(res1, targ)
  335. assert_same_sub_schema(res2, targ)
  336. def test__filter_attribute_single_nores(self):
  337. targ = []
  338. name = self.trains2[0].name
  339. res0 = self.targobj.filter(name=name)
  340. res1 = self.targobj.filter({'name': name})
  341. res2 = self.targobj.filter(targdict={'name': name})
  342. assert_same_sub_schema(res0, targ)
  343. assert_same_sub_schema(res1, targ)
  344. assert_same_sub_schema(res2, targ)
  345. def test__filter_multi(self):
  346. targ = ([self.epcs1[1], self.evts1[1]] +
  347. self.sigarrs1[1::2] +
  348. [self.epcs1[3], self.evts1[3]] +
  349. self.irsigs1[1::2] +
  350. self.trains1[1::2] +
  351. [self.trains1[0]])
  352. name = self.trains1[0].name
  353. res0 = self.targobj.filter(name=name, j=1)
  354. res1 = self.targobj.filter({'name': name, 'j': 1})
  355. res2 = self.targobj.filter(targdict={'name': name, 'j': 1})
  356. assert_same_sub_schema(res0, targ)
  357. assert_same_sub_schema(res1, targ)
  358. assert_same_sub_schema(res2, targ)
  359. def test__filter_multi_nores(self):
  360. targ = []
  361. name0 = self.sigarrs2[0].name
  362. res0 = self.targobj.filter([{'j': 5}, {}])
  363. res1 = self.targobj.filter({}, j=0)
  364. res2 = self.targobj.filter([{}], i=0)
  365. res3 = self.targobj.filter({'name': name0}, j=1)
  366. res4 = self.targobj.filter(targdict={'name': name0}, j=1)
  367. res5 = self.targobj.filter(name=name0, targdict={'j': 1})
  368. res6 = self.targobj.filter(name=name0, j=5)
  369. res7 = self.targobj.filter({'name': name0, 'j': 5})
  370. res8 = self.targobj.filter(targdict={'name': name0, 'j': 5})
  371. res9 = self.targobj.filter({'name': name0}, j=5)
  372. res10 = self.targobj.filter(targdict={'name': name0}, j=5)
  373. res11 = self.targobj.filter(name=name0, targdict={'j': 5})
  374. res12 = self.targobj.filter({'name': name0}, j=5)
  375. res13 = self.targobj.filter(targdict={'name': name0}, j=5)
  376. res14 = self.targobj.filter(name=name0, targdict={'j': 5})
  377. assert_same_sub_schema(res0, targ)
  378. assert_same_sub_schema(res1, targ)
  379. assert_same_sub_schema(res2, targ)
  380. assert_same_sub_schema(res3, targ)
  381. assert_same_sub_schema(res4, targ)
  382. assert_same_sub_schema(res5, targ)
  383. assert_same_sub_schema(res6, targ)
  384. assert_same_sub_schema(res7, targ)
  385. assert_same_sub_schema(res8, targ)
  386. assert_same_sub_schema(res9, targ)
  387. assert_same_sub_schema(res10, targ)
  388. assert_same_sub_schema(res11, targ)
  389. assert_same_sub_schema(res12, targ)
  390. assert_same_sub_schema(res13, targ)
  391. assert_same_sub_schema(res14, targ)
  392. def test__filter_multi_partres_annotation_attribute(self):
  393. targ = [self.trains1[0]]
  394. name = self.trains1[0].name
  395. res0 = self.targobj.filter(name=name, j=90)
  396. res1 = self.targobj.filter({'name': name, 'j': 90})
  397. res2 = self.targobj.filter(targdict={'name': name, 'j': 90})
  398. assert_same_sub_schema(res0, targ)
  399. assert_same_sub_schema(res1, targ)
  400. assert_same_sub_schema(res2, targ)
  401. def test__filter_multi_partres_annotation_annotation(self):
  402. targ = self.trains1[::2]
  403. res0 = self.targobj.filter([{'j': 0}, {'i': 0}])
  404. res1 = self.targobj.filter({'j': 0}, i=0)
  405. res2 = self.targobj.filter([{'j': 0}], i=0)
  406. assert_same_sub_schema(res0, targ)
  407. assert_same_sub_schema(res1, targ)
  408. assert_same_sub_schema(res2, targ)
  409. def test__filter_single_annotation_obj_single(self):
  410. targ = self.trains1[1::2]
  411. res0 = self.targobj.filter(j=1, objects='SpikeTrain')
  412. res1 = self.targobj.filter(j=1, objects=SpikeTrain)
  413. res2 = self.targobj.filter(j=1, objects=['SpikeTrain'])
  414. res3 = self.targobj.filter(j=1, objects=[SpikeTrain])
  415. assert_same_sub_schema(res0, targ)
  416. assert_same_sub_schema(res1, targ)
  417. assert_same_sub_schema(res2, targ)
  418. assert_same_sub_schema(res3, targ)
  419. def test__filter_single_annotation_norecur(self):
  420. targ = []
  421. res0 = self.targobj.filter(j=1, recursive=False)
  422. assert_same_sub_schema(res0, targ)
  423. def test__filter_single_attribute_norecur(self):
  424. targ = []
  425. res0 = self.targobj.filter(name=self.sigarrs1[0].name,
  426. recursive=False)
  427. assert_same_sub_schema(res0, targ)
  428. def test__filter_single_annotation_nodata(self):
  429. targ = []
  430. res0 = self.targobj.filter(j=1, 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.sigarrs1[0].name, data=False)
  435. assert_same_sub_schema(res0, targ)
  436. def test__filter_single_annotation_nodata_norecur(self):
  437. targ = []
  438. res0 = self.targobj.filter(j=1,
  439. data=False, recursive=False)
  440. assert_same_sub_schema(res0, targ)
  441. def test__filter_single_attribute_nodata_norecur(self):
  442. targ = []
  443. res0 = self.targobj.filter(name=self.sigarrs1[0].name,
  444. data=False, recursive=False)
  445. assert_same_sub_schema(res0, targ)
  446. def test__filter_single_annotation_container(self):
  447. targ = ([self.epcs1[1], self.evts1[1]] +
  448. self.sigarrs1[1::2] +
  449. [self.epcs1[3], self.evts1[3]] +
  450. self.irsigs1[1::2] +
  451. self.trains1[1::2] +
  452. [self.segs1[1], self.chxs1[1],
  453. self.units1[1],
  454. self.units1[3]])
  455. res0 = self.targobj.filter(j=1, container=True)
  456. assert_same_sub_schema(res0, targ)
  457. def test__filter_single_attribute_container_data(self):
  458. targ = [self.trains1[0]]
  459. res0 = self.targobj.filter(name=self.trains1[0].name, container=True)
  460. assert_same_sub_schema(res0, targ)
  461. def test__filter_single_annotation_container_norecur(self):
  462. targ = [self.segs1[1], self.chxs1[1]]
  463. res0 = self.targobj.filter(j=1, container=True, recursive=False)
  464. assert_same_sub_schema(res0, targ)
  465. def test__filter_single_attribute_container_norecur(self):
  466. targ = [self.segs1[0]]
  467. res0 = self.targobj.filter(name=self.segs1[0].name,
  468. container=True, recursive=False)
  469. assert_same_sub_schema(res0, targ)
  470. def test__filter_single_attribute_container_norecur_nores(self):
  471. targ = []
  472. res0 = self.targobj.filter(name=self.trains1[0].name,
  473. container=True, recursive=False)
  474. assert_same_sub_schema(res0, targ)
  475. def test__filter_single_annotation_nodata_container(self):
  476. targ = [self.segs1[1], self.chxs1[1],
  477. self.units1[1],
  478. self.units1[3]]
  479. res0 = self.targobj.filter(j=1,
  480. data=False, container=True)
  481. assert_same_sub_schema(res0, targ)
  482. def test__filter_single_attribute_nodata_container_nores(self):
  483. targ = []
  484. res0 = self.targobj.filter(name=self.trains1[0].name,
  485. data=False, container=True)
  486. assert_same_sub_schema(res0, targ)
  487. def test__filter_single_annotation_nodata_container_norecur(self):
  488. targ = [self.segs1[1], self.chxs1[1]]
  489. res0 = self.targobj.filter(j=1,
  490. data=False, container=True,
  491. recursive=False)
  492. assert_same_sub_schema(res0, targ)
  493. def test__filter_single_attribute_nodata_container_norecur(self):
  494. targ = [self.segs1[0]]
  495. res0 = self.targobj.filter(name=self.segs1[0].name,
  496. data=False, container=True,
  497. recursive=False)
  498. assert_same_sub_schema(res0, targ)
  499. def test__filter_single_attribute_nodata_container_norecur_nores(self):
  500. targ = []
  501. res0 = self.targobj.filter(name=self.trains1[0].name,
  502. data=False, container=True,
  503. recursive=False)
  504. assert_same_sub_schema(res0, targ)
  505. def test__filterdata_multi(self):
  506. data = self.targobj.children_recur
  507. targ = ([self.epcs1[1], self.evts1[1]] +
  508. self.sigarrs1[1::2] +
  509. [self.epcs1[3], self.evts1[3]] +
  510. self.irsigs1[1::2] +
  511. self.trains1[1::2] +
  512. [self.segs1[1], self.chxs1[1],
  513. self.units1[1],
  514. self.units1[3],
  515. self.trains1[0]])
  516. name = self.trains1[0].name
  517. res0 = filterdata(data, name=name, j=1)
  518. res1 = filterdata(data, {'name': name, 'j': 1})
  519. res2 = filterdata(data, targdict={'name': name, 'j': 1})
  520. assert_same_sub_schema(res0, targ)
  521. assert_same_sub_schema(res1, targ)
  522. assert_same_sub_schema(res2, targ)
  523. def test__filterdata_multi_nores(self):
  524. data = self.targobj.children_recur
  525. targ = []
  526. name1 = self.sigarrs1[0].name
  527. name2 = self.sigarrs2[0].name
  528. res0 = filterdata(data, [{'j': 0}, {}])
  529. res1 = filterdata(data, {}, i=0)
  530. res2 = filterdata(data, [{}], i=0)
  531. res3 = filterdata(data, name=name1, targdict={'j': 1})
  532. res4 = filterdata(data, {'name': name1}, j=1)
  533. res5 = filterdata(data, targdict={'name': name1}, j=1)
  534. res6 = filterdata(data, name=name2, j=5)
  535. res7 = filterdata(data, {'name': name2, 'j': 5})
  536. res8 = filterdata(data, targdict={'name': name2, 'j': 5})
  537. res9 = filterdata(data, {'name': name2}, j=5)
  538. res10 = filterdata(data, targdict={'name': name2}, j=5)
  539. res11 = filterdata(data, name=name2, targdict={'j': 5})
  540. res12 = filterdata(data, {'name': name1}, j=5)
  541. res13 = filterdata(data, targdict={'name': name1}, j=5)
  542. res14 = filterdata(data, name=name1, targdict={'j': 5})
  543. assert_same_sub_schema(res0, targ)
  544. assert_same_sub_schema(res1, targ)
  545. assert_same_sub_schema(res2, targ)
  546. assert_same_sub_schema(res3, targ)
  547. assert_same_sub_schema(res4, targ)
  548. assert_same_sub_schema(res5, targ)
  549. assert_same_sub_schema(res6, targ)
  550. assert_same_sub_schema(res7, targ)
  551. assert_same_sub_schema(res8, targ)
  552. assert_same_sub_schema(res9, targ)
  553. assert_same_sub_schema(res10, targ)
  554. assert_same_sub_schema(res11, targ)
  555. assert_same_sub_schema(res12, targ)
  556. assert_same_sub_schema(res13, targ)
  557. assert_same_sub_schema(res14, targ)
  558. def test__filterdata_multi_partres_annotation_attribute(self):
  559. data = self.targobj.children_recur
  560. targ = [self.trains1[0]]
  561. name = self.trains1[0].name
  562. res0 = filterdata(data, name=name, j=90)
  563. res1 = filterdata(data, {'name': name, 'j': 90})
  564. res2 = filterdata(data, targdict={'name': name, 'j': 90})
  565. assert_same_sub_schema(res0, targ)
  566. assert_same_sub_schema(res1, targ)
  567. assert_same_sub_schema(res2, targ)
  568. def test__filterdata_multi_partres_annotation_annotation(self):
  569. data = self.targobj.children_recur
  570. targ = (self.trains1[::2] +
  571. self.segs1[:1] + self.units1[::2])
  572. res0 = filterdata(data, [{'j': 0}, {'i': 0}])
  573. res1 = filterdata(data, {'j': 0}, i=0)
  574. res2 = filterdata(data, [{'j': 0}], i=0)
  575. assert_same_sub_schema(res0, targ)
  576. assert_same_sub_schema(res1, targ)
  577. assert_same_sub_schema(res2, targ)
  578. # @unittest.skipUnless(HAVE_IPYTHON, "requires IPython")
  579. # def test__pretty(self):
  580. # res = pretty(self.blk1)
  581. # ann = get_annotations()
  582. # ann['seed'] = self.seed1
  583. # ann = pretty(ann).replace('\n ', '\n ')
  584. #
  585. # seg0 = pretty(self.segs1[0])
  586. # seg1 = pretty(self.segs1[1])
  587. # seg0 = seg0.replace('\n', '\n ')
  588. # seg1 = seg1.replace('\n', '\n ')
  589. #
  590. # targ = ("Block with " +
  591. # ("%s segments, %s channel_indexes\n" %
  592. # (len(self.segs1), len(self.chxs1))) +
  593. # ("name: '%s'\ndescription: '%s'\n" % (self.blk1.name,
  594. # self.blk1.description)) +
  595. # ("annotations: %s\n" % ann) +
  596. # ("file_origin: '%s'\n" % self.blk1.file_origin) +
  597. # ("file_datetime: %s\n" % repr(self.blk1.file_datetime)) +
  598. # ("rec_datetime: %s\n" % repr(self.blk1.rec_datetime)) +
  599. # ("index: %s\n" % self.blk1.index) +
  600. #
  601. #
  602. # ("# segments (N=%s)\n" % len(self.segs1)) +
  603. # ('%s: %s\n' % (0, seg0)) +
  604. # ('%s: %s' % (1, seg1)))
  605. #
  606. # self.assertEqual(res, targ)
  607. def test_block_list_units(self):
  608. assert_same_sub_schema(self.units1, self.blk1.list_units)
  609. assert_same_sub_schema(self.units2, self.blk2.list_units)
  610. assert_same_sub_schema(self.units1,
  611. self.blk1.list_children_by_class(Unit))
  612. assert_same_sub_schema(self.units2,
  613. self.blk2.list_children_by_class(Unit))
  614. assert_same_sub_schema(self.units1,
  615. self.blk1.list_children_by_class('Unit'))
  616. assert_same_sub_schema(self.units2,
  617. self.blk2.list_children_by_class('Unit'))
  618. if __name__ == "__main__":
  619. unittest.main()