test_channelindex.py 26 KB

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