test_generate_datasets.py 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  1. # -*- coding: utf-8 -*-
  2. '''
  3. Test to make sure generated datasets are sane.
  4. '''
  5. # needed for python 3 compatibility
  6. from __future__ import absolute_import, division
  7. import unittest
  8. from datetime import datetime
  9. import numpy as np
  10. import quantities as pq
  11. from neo.core import (class_by_name, Block, Segment,
  12. ChannelIndex, Unit,
  13. AnalogSignal,
  14. IrregularlySampledSignal, SpikeTrain,
  15. Event, Epoch)
  16. from neo.test.generate_datasets import (generate_one_simple_block,
  17. generate_one_simple_segment,
  18. generate_from_supported_objects,
  19. get_fake_value, get_fake_values,
  20. fake_neo, TEST_ANNOTATIONS)
  21. from neo.test.tools import assert_arrays_equal, assert_neo_object_is_compliant
  22. class Test__generate_one_simple_segment(unittest.TestCase):
  23. def test_defaults(self):
  24. res = generate_one_simple_segment()
  25. self.assertTrue(isinstance(res, Segment))
  26. assert_neo_object_is_compliant(res)
  27. self.assertEqual(len(res.analogsignals), 0)
  28. self.assertEqual(len(res.irregularlysampledsignals), 0)
  29. self.assertEqual(len(res.spiketrains), 0)
  30. self.assertEqual(len(res.events), 0)
  31. self.assertEqual(len(res.epochs), 0)
  32. def test_all_supported(self):
  33. objects = [Block, Segment,
  34. ChannelIndex, Unit,
  35. AnalogSignal,
  36. IrregularlySampledSignal, SpikeTrain,
  37. Event, Epoch]
  38. res = generate_one_simple_segment(supported_objects=objects)
  39. self.assertTrue(isinstance(res, Segment))
  40. assert_neo_object_is_compliant(res)
  41. self.assertEqual(len(res.analogsignals), 4)
  42. self.assertEqual(len(res.irregularlysampledsignals), 0)
  43. self.assertEqual(len(res.spiketrains), 6)
  44. self.assertEqual(len(res.events), 3)
  45. self.assertEqual(len(res.epochs), 2)
  46. def test_half_supported(self):
  47. objects = [Segment,
  48. IrregularlySampledSignal, SpikeTrain,
  49. Epoch]
  50. res = generate_one_simple_segment(supported_objects=objects)
  51. self.assertTrue(isinstance(res, Segment))
  52. assert_neo_object_is_compliant(res)
  53. self.assertEqual(len(res.analogsignals), 0)
  54. self.assertEqual(len(res.irregularlysampledsignals), 0)
  55. self.assertEqual(len(res.spiketrains), 6)
  56. self.assertEqual(len(res.events), 0)
  57. self.assertEqual(len(res.epochs), 2)
  58. def test_all_without_block(self):
  59. objects = [Segment,
  60. ChannelIndex, Unit,
  61. AnalogSignal,
  62. IrregularlySampledSignal, SpikeTrain,
  63. Event, Epoch]
  64. res = generate_one_simple_segment(supported_objects=objects)
  65. self.assertTrue(isinstance(res, Segment))
  66. assert_neo_object_is_compliant(res)
  67. self.assertEqual(len(res.analogsignals), 4)
  68. self.assertEqual(len(res.irregularlysampledsignals), 0)
  69. self.assertEqual(len(res.spiketrains), 6)
  70. self.assertEqual(len(res.events), 3)
  71. self.assertEqual(len(res.epochs), 2)
  72. def test_all_without_segment_valueerror(self):
  73. objects = [Block,
  74. ChannelIndex, Unit,
  75. AnalogSignal,
  76. IrregularlySampledSignal, SpikeTrain,
  77. Event, Epoch]
  78. self.assertRaises(ValueError, generate_one_simple_segment,
  79. supported_objects=objects)
  80. class Test__generate_one_simple_block(unittest.TestCase):
  81. def test_defaults(self):
  82. res = generate_one_simple_block()
  83. self.assertTrue(isinstance(res, Block))
  84. assert_neo_object_is_compliant(res)
  85. self.assertEqual(len(res.segments), 0)
  86. def test_all_supported(self):
  87. objects = [Block, Segment,
  88. ChannelIndex, Unit,
  89. AnalogSignal,
  90. IrregularlySampledSignal, SpikeTrain,
  91. Event, Epoch]
  92. res = generate_one_simple_block(supported_objects=objects)
  93. self.assertTrue(isinstance(res, Block))
  94. assert_neo_object_is_compliant(res)
  95. self.assertEqual(len(res.segments), 3)
  96. seg1, seg2, seg3 = res.segments
  97. self.assertEqual(len(seg1.analogsignals), 4)
  98. self.assertEqual(len(seg1.irregularlysampledsignals), 0)
  99. self.assertEqual(len(seg1.spiketrains), 6)
  100. self.assertEqual(len(seg1.events), 3)
  101. self.assertEqual(len(seg1.epochs), 2)
  102. self.assertEqual(len(seg2.analogsignals), 4)
  103. self.assertEqual(len(seg2.irregularlysampledsignals), 0)
  104. self.assertEqual(len(seg2.spiketrains), 6)
  105. self.assertEqual(len(seg2.events), 3)
  106. self.assertEqual(len(seg2.epochs), 2)
  107. self.assertEqual(len(seg3.analogsignals), 4)
  108. self.assertEqual(len(seg3.irregularlysampledsignals), 0)
  109. self.assertEqual(len(seg3.spiketrains), 6)
  110. self.assertEqual(len(seg3.events), 3)
  111. self.assertEqual(len(seg3.epochs), 2)
  112. def test_half_supported(self):
  113. objects = [Block, Segment,
  114. IrregularlySampledSignal, SpikeTrain,
  115. Epoch]
  116. res = generate_one_simple_block(supported_objects=objects)
  117. self.assertTrue(isinstance(res, Block))
  118. assert_neo_object_is_compliant(res)
  119. self.assertEqual(len(res.segments), 3)
  120. seg1, seg2, seg3 = res.segments
  121. self.assertEqual(len(seg1.analogsignals), 0)
  122. self.assertEqual(len(seg1.irregularlysampledsignals), 0)
  123. self.assertEqual(len(seg1.spiketrains), 6)
  124. self.assertEqual(len(seg1.events), 0)
  125. self.assertEqual(len(seg1.epochs), 2)
  126. self.assertEqual(len(seg2.analogsignals), 0)
  127. self.assertEqual(len(seg2.irregularlysampledsignals), 0)
  128. self.assertEqual(len(seg2.spiketrains), 6)
  129. self.assertEqual(len(seg2.events), 0)
  130. self.assertEqual(len(seg2.epochs), 2)
  131. self.assertEqual(len(seg3.analogsignals), 0)
  132. self.assertEqual(len(seg3.irregularlysampledsignals), 0)
  133. self.assertEqual(len(seg3.spiketrains), 6)
  134. self.assertEqual(len(seg3.events), 0)
  135. self.assertEqual(len(seg3.epochs), 2)
  136. def test_all_without_segment(self):
  137. objects = [Block,
  138. ChannelIndex, Unit,
  139. AnalogSignal,
  140. IrregularlySampledSignal, SpikeTrain,
  141. Event, Epoch]
  142. res = generate_one_simple_block(supported_objects=objects)
  143. self.assertTrue(isinstance(res, Block))
  144. assert_neo_object_is_compliant(res)
  145. self.assertEqual(len(res.segments), 0)
  146. def test_all_without_block_valueerror(self):
  147. objects = [Segment,
  148. ChannelIndex, Unit,
  149. AnalogSignal,
  150. IrregularlySampledSignal, SpikeTrain,
  151. Event, Epoch]
  152. self.assertRaises(ValueError, generate_one_simple_block,
  153. supported_objects=objects)
  154. class Test__generate_from_supported_objects(unittest.TestCase):
  155. def test_no_object_valueerror(self):
  156. objects = []
  157. self.assertRaises(ValueError, generate_from_supported_objects, objects)
  158. def test_all(self):
  159. objects = [Block, Segment,
  160. ChannelIndex, Unit,
  161. AnalogSignal,
  162. IrregularlySampledSignal, SpikeTrain,
  163. Event, Epoch]
  164. res = generate_from_supported_objects(objects)
  165. self.assertTrue(isinstance(res, Block))
  166. assert_neo_object_is_compliant(res)
  167. self.assertEqual(len(res.segments), 3)
  168. seg1, seg2, seg3 = res.segments
  169. self.assertEqual(len(seg1.analogsignals), 4)
  170. self.assertEqual(len(seg1.irregularlysampledsignals), 0)
  171. self.assertEqual(len(seg1.spiketrains), 6)
  172. self.assertEqual(len(seg1.events), 3)
  173. self.assertEqual(len(seg1.epochs), 2)
  174. self.assertEqual(len(seg2.analogsignals), 4)
  175. self.assertEqual(len(seg2.irregularlysampledsignals), 0)
  176. self.assertEqual(len(seg2.spiketrains), 6)
  177. self.assertEqual(len(seg2.events), 3)
  178. self.assertEqual(len(seg2.epochs), 2)
  179. self.assertEqual(len(seg3.analogsignals), 4)
  180. self.assertEqual(len(seg3.irregularlysampledsignals), 0)
  181. self.assertEqual(len(seg3.spiketrains), 6)
  182. self.assertEqual(len(seg3.events), 3)
  183. self.assertEqual(len(seg3.epochs), 2)
  184. def test_block(self):
  185. objects = [Block]
  186. res = generate_from_supported_objects(objects)
  187. self.assertTrue(isinstance(res, Block))
  188. assert_neo_object_is_compliant(res)
  189. self.assertEqual(len(res.segments), 0)
  190. def test_block_segment(self):
  191. objects = [Segment, Block]
  192. res = generate_from_supported_objects(objects)
  193. self.assertTrue(isinstance(res, Block))
  194. assert_neo_object_is_compliant(res)
  195. self.assertEqual(len(res.segments), 3)
  196. seg1, seg2, seg3 = res.segments
  197. self.assertEqual(len(seg1.analogsignals), 0)
  198. self.assertEqual(len(seg1.irregularlysampledsignals), 0)
  199. self.assertEqual(len(seg1.spiketrains), 0)
  200. self.assertEqual(len(seg1.events), 0)
  201. self.assertEqual(len(seg1.epochs), 0)
  202. self.assertEqual(len(seg2.analogsignals), 0)
  203. self.assertEqual(len(seg2.irregularlysampledsignals), 0)
  204. self.assertEqual(len(seg2.spiketrains), 0)
  205. self.assertEqual(len(seg2.events), 0)
  206. self.assertEqual(len(seg2.epochs), 0)
  207. self.assertEqual(len(seg3.analogsignals), 0)
  208. self.assertEqual(len(seg3.irregularlysampledsignals), 0)
  209. self.assertEqual(len(seg3.spiketrains), 0)
  210. self.assertEqual(len(seg3.events), 0)
  211. self.assertEqual(len(seg3.epochs), 0)
  212. def test_segment(self):
  213. objects = [Segment]
  214. res = generate_from_supported_objects(objects)
  215. self.assertTrue(isinstance(res, Segment))
  216. assert_neo_object_is_compliant(res)
  217. self.assertEqual(len(res.analogsignals), 0)
  218. self.assertEqual(len(res.irregularlysampledsignals), 0)
  219. self.assertEqual(len(res.spiketrains), 0)
  220. self.assertEqual(len(res.events), 0)
  221. self.assertEqual(len(res.epochs), 0)
  222. def test_all_without_block(self):
  223. objects = [Segment,
  224. ChannelIndex, Unit,
  225. AnalogSignal,
  226. IrregularlySampledSignal, SpikeTrain,
  227. Event, Epoch]
  228. res = generate_from_supported_objects(objects)
  229. self.assertTrue(isinstance(res, Segment))
  230. assert_neo_object_is_compliant(res)
  231. self.assertEqual(len(res.analogsignals), 4)
  232. self.assertEqual(len(res.irregularlysampledsignals), 0)
  233. self.assertEqual(len(res.spiketrains), 6)
  234. self.assertEqual(len(res.events), 3)
  235. self.assertEqual(len(res.epochs), 2)
  236. def test_all_without_segment(self):
  237. objects = [Block,
  238. ChannelIndex, Unit,
  239. AnalogSignal,
  240. IrregularlySampledSignal, SpikeTrain,
  241. Event, Epoch]
  242. res = generate_from_supported_objects(supported_objects=objects)
  243. self.assertTrue(isinstance(res, Block))
  244. assert_neo_object_is_compliant(res)
  245. self.assertEqual(len(res.segments), 0)
  246. class Test__get_fake_value(unittest.TestCase):
  247. def setUp(self):
  248. np.random.seed(0)
  249. def test__t_start(self):
  250. name = 't_start'
  251. datatype = pq.Quantity
  252. targ = 0.0 * pq.millisecond
  253. res = get_fake_value(name, datatype)
  254. self.assertTrue(isinstance(res, pq.Quantity))
  255. self.assertEqual(res.units, pq.millisecond)
  256. assert_arrays_equal(targ, res)
  257. self.assertRaises(ValueError, get_fake_value, name, datatype, dim=1)
  258. self.assertRaises(ValueError, get_fake_value, name, np.ndarray)
  259. def test__t_stop(self):
  260. name = 't_stop'
  261. datatype = pq.Quantity
  262. targ = 1.0 * pq.millisecond
  263. res = get_fake_value(name, datatype)
  264. self.assertTrue(isinstance(res, pq.Quantity))
  265. self.assertEqual(res.units, pq.millisecond)
  266. assert_arrays_equal(targ, res)
  267. self.assertRaises(ValueError, get_fake_value, name, datatype, dim=1)
  268. self.assertRaises(ValueError, get_fake_value, name, np.ndarray)
  269. def test__sampling_rate(self):
  270. name = 'sampling_rate'
  271. datatype = pq.Quantity
  272. targ = 10000.0 * pq.Hz
  273. res = get_fake_value(name, datatype)
  274. self.assertTrue(isinstance(res, pq.Quantity))
  275. self.assertEqual(res.units, pq.Hz)
  276. assert_arrays_equal(targ, res)
  277. self.assertRaises(ValueError, get_fake_value, name, datatype, dim=1)
  278. self.assertRaises(ValueError, get_fake_value, name, np.ndarray)
  279. def test__str(self):
  280. name = 'test__str'
  281. datatype = str
  282. targ = str(np.random.randint(100000))
  283. res = get_fake_value(name, datatype, seed=0)
  284. self.assertTrue(isinstance(res, str))
  285. self.assertEqual(targ, res)
  286. def test__name(self):
  287. name = 'name'
  288. datatype = str
  289. obj = 'Block'
  290. targ = 'Block'+str(np.random.randint(100000))
  291. res = get_fake_value(name, datatype, seed=0, obj=obj)
  292. self.assertTrue(isinstance(res, str))
  293. self.assertEqual(targ, res)
  294. self.assertRaises(ValueError, get_fake_value, name, datatype, dim=1)
  295. self.assertRaises(ValueError, get_fake_value, name, np.ndarray)
  296. def test__description(self):
  297. name = 'description'
  298. datatype = str
  299. obj = Segment
  300. targ = 'test Segment '+str(np.random.randint(100000))
  301. res = get_fake_value(name, datatype, seed=0, obj=obj)
  302. self.assertTrue(isinstance(res, str))
  303. self.assertEqual(targ, res)
  304. self.assertRaises(ValueError, get_fake_value, name, datatype, dim=1)
  305. self.assertRaises(ValueError, get_fake_value, name, np.ndarray)
  306. def test__file_origin(self):
  307. name = 'file_origin'
  308. datatype = str
  309. targ = 'test_file.txt'
  310. res = get_fake_value(name, datatype, seed=0)
  311. self.assertTrue(isinstance(res, str))
  312. self.assertEqual(targ, res)
  313. self.assertRaises(ValueError, get_fake_value, name, datatype, dim=1)
  314. self.assertRaises(ValueError, get_fake_value, name, np.ndarray)
  315. def test__int(self):
  316. name = 'test__int'
  317. datatype = int
  318. targ = np.random.randint(100)
  319. res = get_fake_value(name, datatype, seed=0)
  320. self.assertTrue(isinstance(res, int))
  321. self.assertEqual(targ, res)
  322. def test__float(self):
  323. name = 'test__float'
  324. datatype = float
  325. targ = 1000. * np.random.random()
  326. res = get_fake_value(name, datatype, seed=0)
  327. self.assertTrue(isinstance(res, float))
  328. self.assertEqual(targ, res)
  329. def test__datetime(self):
  330. name = 'test__datetime'
  331. datatype = datetime
  332. targ = datetime.fromtimestamp(1000000000*np.random.random())
  333. res = get_fake_value(name, datatype, seed=0)
  334. self.assertTrue(isinstance(res, datetime))
  335. self.assertEqual(res, targ)
  336. def test__quantity(self):
  337. name = 'test__quantity'
  338. datatype = pq.Quantity
  339. dim = 2
  340. size = []
  341. units = np.random.choice(['nA', 'mA', 'A', 'mV', 'V'])
  342. for i in range(int(dim)):
  343. size.append(np.random.randint(5) + 1)
  344. targ = pq.Quantity(np.random.random(size)*1000, units=units)
  345. res = get_fake_value(name, datatype, dim=dim, seed=0)
  346. self.assertTrue(isinstance(res, pq.Quantity))
  347. self.assertEqual(res.units, getattr(pq, units))
  348. assert_arrays_equal(targ, res)
  349. def test__quantity_force_units(self):
  350. name = 'test__quantity'
  351. datatype = np.ndarray
  352. dim = 2
  353. units = pq.ohm
  354. size = []
  355. for i in range(int(dim)):
  356. size.append(np.random.randint(5) + 1)
  357. targ = pq.Quantity(np.random.random(size)*1000, units=units)
  358. res = get_fake_value(name, datatype, dim=dim, seed=0, units=units)
  359. self.assertTrue(isinstance(res, np.ndarray))
  360. assert_arrays_equal(targ, res)
  361. def test__ndarray(self):
  362. name = 'test__ndarray'
  363. datatype = np.ndarray
  364. dim = 2
  365. size = []
  366. for i in range(int(dim)):
  367. size.append(np.random.randint(5) + 1)
  368. targ = np.random.random(size)*1000
  369. res = get_fake_value(name, datatype, dim=dim, seed=0)
  370. self.assertTrue(isinstance(res, np.ndarray))
  371. assert_arrays_equal(targ, res)
  372. def test__list(self):
  373. name = 'test__list'
  374. datatype = list
  375. dim = 2
  376. size = []
  377. for i in range(int(dim)):
  378. size.append(np.random.randint(5) + 1)
  379. targ = (np.random.random(size)*1000).tolist()
  380. res = get_fake_value(name, datatype, dim=dim, seed=0)
  381. self.assertTrue(isinstance(res, list))
  382. self.assertEqual(targ, res)
  383. def test__other_valueerror(self):
  384. name = 'test__other_fail'
  385. datatype = set([1, 2, 3, 4])
  386. self.assertRaises(ValueError, get_fake_value, name, datatype)
  387. class Test__get_fake_values(unittest.TestCase):
  388. def setUp(self):
  389. np.random.seed(0)
  390. self.annotations = dict([(str(x), TEST_ANNOTATIONS[x]) for x in
  391. range(len(TEST_ANNOTATIONS))])
  392. self.annotations['seed'] = 0
  393. def subcheck__get_fake_values(self, cls):
  394. res1 = get_fake_values(cls, annotate=False, seed=0)
  395. res2 = get_fake_values(cls, annotate=True, seed=0)
  396. if hasattr(cls, 'lower'):
  397. cls = class_by_name[cls]
  398. attrs = cls._necessary_attrs + cls._recommended_attrs
  399. attrnames = [attr[0] for attr in attrs]
  400. attrtypes = [attr[1] for attr in attrs]
  401. attritems = zip(attrnames, attrtypes)
  402. attrannnames = attrnames + list(self.annotations.keys())
  403. self.assertEqual(sorted(attrnames), sorted(res1.keys()))
  404. self.assertEqual(sorted(attrannnames), sorted(res2.keys()))
  405. items11 = [(name, type(value)) for name, value in res1.items()]
  406. self.assertEqual(sorted(attritems), sorted(items11))
  407. for name, value in res1.items():
  408. try:
  409. self.assertEqual(res2[name], value)
  410. except ValueError:
  411. assert_arrays_equal(res2[name], value)
  412. for name, value in self.annotations.items():
  413. self.assertFalse(name in res1)
  414. self.assertEqual(res2[name], value)
  415. for attr in attrs:
  416. name = attr[0]
  417. if len(attr) < 3:
  418. continue
  419. dim = attr[2]
  420. self.assertEqual(dim, res1[name].ndim)
  421. self.assertEqual(dim, res2[name].ndim)
  422. if len(attr) < 4:
  423. continue
  424. dtype = attr[3]
  425. self.assertEqual(dtype.kind, res1[name].dtype.kind)
  426. self.assertEqual(dtype.kind, res2[name].dtype.kind)
  427. def check__get_fake_values(self, cls):
  428. self.subcheck__get_fake_values(cls)
  429. self.subcheck__get_fake_values(cls.__name__)
  430. def test__analogsignalarray(self):
  431. self.check__get_fake_values(AnalogSignal)
  432. def test__block(self):
  433. self.check__get_fake_values(Block)
  434. def test__epoch(self):
  435. self.check__get_fake_values(Epoch)
  436. def test__event(self):
  437. self.check__get_fake_values(Event)
  438. def test__irregularlysampledsignal(self):
  439. self.check__get_fake_values(IrregularlySampledSignal)
  440. def test__channelindex(self):
  441. self.check__get_fake_values(ChannelIndex)
  442. def test__segment(self):
  443. self.check__get_fake_values(Segment)
  444. def test__spiketrain(self):
  445. self.check__get_fake_values(SpikeTrain)
  446. def test__unit(self):
  447. self.check__get_fake_values(Unit)
  448. class Test__generate_datasets(unittest.TestCase):
  449. def setUp(self):
  450. self.annotations = dict([(str(x), TEST_ANNOTATIONS[x]) for x in
  451. range(len(TEST_ANNOTATIONS))])
  452. def check__generate_datasets(self, cls):
  453. clsname = cls.__name__
  454. self.subcheck__generate_datasets(cls, cascade=True)
  455. self.subcheck__generate_datasets(cls, cascade=True, seed=0)
  456. self.subcheck__generate_datasets(cls, cascade=False)
  457. self.subcheck__generate_datasets(cls, cascade=False, seed=0)
  458. self.subcheck__generate_datasets(clsname, cascade=True)
  459. self.subcheck__generate_datasets(clsname, cascade=True, seed=0)
  460. self.subcheck__generate_datasets(clsname, cascade=False)
  461. self.subcheck__generate_datasets(clsname, cascade=False, seed=0)
  462. def subcheck__generate_datasets(self, cls, cascade, seed=None):
  463. self.annotations['seed'] = seed
  464. if seed is None:
  465. res = fake_neo(obj_type=cls, cascade=cascade)
  466. else:
  467. res = fake_neo(obj_type=cls, cascade=cascade, seed=seed)
  468. if not hasattr(cls, 'lower'):
  469. self.assertTrue(isinstance(res, cls))
  470. else:
  471. self.assertEqual(res.__class__.__name__, cls)
  472. assert_neo_object_is_compliant(res)
  473. self.assertEqual(res.annotations, self.annotations)
  474. resattr = get_fake_values(cls, annotate=False, seed=0)
  475. if seed is not None:
  476. for name, value in resattr.items():
  477. if name in ['channel_names',
  478. 'channel_indexes',
  479. 'channel_index',
  480. 'coordinates']:
  481. continue
  482. try:
  483. try:
  484. resvalue = getattr(res, name)
  485. except AttributeError:
  486. if name == 'signal':
  487. continue
  488. raise
  489. try:
  490. self.assertEqual(resvalue, value)
  491. except ValueError:
  492. assert_arrays_equal(resvalue, value)
  493. except BaseException as exc:
  494. exc.args += ('from %s' % name,)
  495. raise
  496. if not getattr(res, '_child_objects', ()):
  497. pass
  498. elif not cascade:
  499. self.assertEqual(res.children, ())
  500. else:
  501. self.assertNotEqual(res.children, ())
  502. if cls in ['ChannelIndex', ChannelIndex]:
  503. for i, unit in enumerate(res.units):
  504. for sigarr in res.analogsignals:
  505. self.assertEqual(unit.get_channel_indexes()[0],
  506. sigarr.get_channel_index()[i])
  507. def test__analogsignalarray(self):
  508. self.check__generate_datasets(AnalogSignal)
  509. def test__block(self):
  510. self.check__generate_datasets(AnalogSignal)
  511. def test__epoch(self):
  512. self.check__generate_datasets(Epoch)
  513. def test__event(self):
  514. self.check__generate_datasets(Event)
  515. def test__irregularlysampledsignal(self):
  516. self.check__generate_datasets(IrregularlySampledSignal)
  517. def test__channelindex(self):
  518. self.check__generate_datasets(ChannelIndex)
  519. def test__segment(self):
  520. self.check__generate_datasets(Segment)
  521. def test__spiketrain(self):
  522. self.check__generate_datasets(SpikeTrain)
  523. def test__unit(self):
  524. self.check__generate_datasets(Unit)