test_segment.py 32 KB

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