def testInitDefaults(self):
     rcg = RecordingChannelGroup()
     self.assertEqual(rcg.name, None)
     self.assertEqual(rcg.file_origin, None)
     self.assertEqual(rcg.recordingchannels, [])
     self.assertEqual(rcg.analogsignalarrays, [])
     assert_arrays_equal(rcg.channel_names, np.array([]))
     assert_arrays_equal(rcg.channel_indexes, np.array([]))
Esempio n. 2
0
 def test__recordingchannelgroup__init_defaults(self):
     rcg = RecordingChannelGroup()
     assert_neo_object_is_compliant(rcg)
     self.assertEqual(rcg.name, None)
     self.assertEqual(rcg.file_origin, None)
     self.assertEqual(rcg.recordingchannels, [])
     self.assertEqual(rcg.analogsignalarrays, [])
     assert_arrays_equal(rcg.channel_names, np.array([], dtype='S'))
     assert_arrays_equal(rcg.channel_indexes, np.array([]))
 def testInit(self):
     rcg = RecordingChannelGroup(file_origin='temp.dat',
                                 channel_indexes=np.array([1]))
     self.assertEqual(rcg.file_origin, 'temp.dat')
     self.assertEqual(rcg.name, None)
     self.assertEqual(rcg.recordingchannels, [])
     self.assertEqual(rcg.analogsignalarrays, [])
     assert_arrays_equal(rcg.channel_names, np.array([]))
     assert_arrays_equal(rcg.channel_indexes, np.array([1]))
    def setup_recordingchannelgroups(self):
        params = {'testarg2': 'yes', 'testarg3': True}
        self.rcg1 = RecordingChannelGroup(name='test', description='tester 1',
                                          file_origin='test.file',
                                          testarg1=1, **params)
        self.rcg2 = RecordingChannelGroup(name='test', description='tester 2',
                                          file_origin='test.file',
                                          testarg1=1, **params)
        self.rcg1.annotate(testarg1=1.1, testarg0=[1, 2, 3])
        self.rcg2.annotate(testarg11=1.1, testarg10=[1, 2, 3])

        self.rcg1.units = self.units1
        self.rcg2.units = self.units2
        self.rcg1.recordingchannels = self.rchan1
        self.rcg2.recordingchannels = self.rchan2
        self.rcg1.analogsignalarrays = self.sigarr1
        self.rcg2.analogsignalarrays = self.sigarr2

        self.rcg1.create_many_to_one_relationship()
        self.rcg2.create_many_to_one_relationship()
Esempio n. 5
0
    def test_block_merge(self):
        blk1 = Block(name='block 1')
        blk2 = Block(name='block 2')

        rcg3 = RecordingChannelGroup(name=self.rcgname1)
        rcg3.units = self.units1 + [self.units2[0]]
        rcg3.recordingchannels = self.chan1 + [self.chan2[1]]

        blk1.recordingchannelgroups = [self.rcg1]
        blk2.recordingchannelgroups = [self.rcg2, rcg3]
        blk1.segments = self.seg1
        blk2.segments = self.seg2

        blk1.merge(blk2)

        rcgres1 = [rcg.name for rcg in blk1.recordingchannelgroups]
        rcgres2 = [rcg.name for rcg in blk2.recordingchannelgroups]

        segres1 = [seg.name for seg in blk1.segments]
        segres2 = [seg.name for seg in blk2.segments]

        chanres1 = [chan.name for chan in blk1.list_recordingchannels]
        chanres2 = [chan.name for chan in blk2.list_recordingchannels]

        unitres1 = [unit.name for unit in blk1.list_units]
        unitres2 = [unit.name for unit in blk2.list_units]

        self.assertEqual(rcgres1, [self.rcgname1, self.rcgname2])
        self.assertEqual(rcgres2, [self.rcgname2, self.rcgname1])

        self.assertEqual(segres1, self.segnames)
        self.assertEqual(segres2, self.segnames2)

        self.assertEqual(chanres1, self.channames1 + self.channames2[-2::-1])
        self.assertEqual(chanres2, self.channames2[:-1] + self.channames1)

        self.assertEqual(unitres1, self.unitnames)
        self.assertEqual(unitres2, self.unitnames2[:-1] + self.unitnames1)
Esempio n. 6
0
    def test_block_merge(self):
        blk1 = Block(name="block 1")
        blk2 = Block(name="block 2")

        rcg3 = RecordingChannelGroup(name=self.rcgname1)
        rcg3.units = self.units1 + [self.units2[0]]
        rcg3.recordingchannels = self.chan1 + [self.chan2[1]]

        blk1.recordingchannelgroups = [self.rcg1]
        blk2.recordingchannelgroups = [self.rcg2, rcg3]
        blk1.segments = self.seg1
        blk2.segments = self.seg2

        blk1.merge(blk2)

        rcgres1 = [rcg.name for rcg in blk1.recordingchannelgroups]
        rcgres2 = [rcg.name for rcg in blk2.recordingchannelgroups]

        segres1 = [seg.name for seg in blk1.segments]
        segres2 = [seg.name for seg in blk2.segments]

        chanres1 = [chan.name for chan in blk1.list_recordingchannels]
        chanres2 = [chan.name for chan in blk2.list_recordingchannels]

        unitres1 = [unit.name for unit in blk1.list_units]
        unitres2 = [unit.name for unit in blk2.list_units]

        self.assertEqual(rcgres1, [self.rcgname1, self.rcgname2])
        self.assertEqual(rcgres2, [self.rcgname2, self.rcgname1])

        self.assertEqual(segres1, self.segnames)
        self.assertEqual(segres2, self.segnames2)

        self.assertEqual(chanres1, self.channames1 + self.channames2[-2::-1])
        self.assertEqual(chanres2, self.channames2[:-1] + self.channames1)

        self.assertEqual(unitres1, self.unitnames)
        self.assertEqual(unitres2, self.unitnames2[:-1] + self.unitnames1)
    def setup_recordingchannelgroups(self):
        params = {'testarg2': 'yes', 'testarg3': True}
        self.rcg1 = RecordingChannelGroup(name='test',
                                          description='tester 1',
                                          file_origin='test.file',
                                          testarg1=1,
                                          **params)
        self.rcg2 = RecordingChannelGroup(name='test',
                                          description='tester 2',
                                          file_origin='test.file',
                                          testarg1=1,
                                          **params)
        self.rcg1.annotate(testarg1=1.1, testarg0=[1, 2, 3])
        self.rcg2.annotate(testarg11=1.1, testarg10=[1, 2, 3])

        self.rcg1.units = self.units1
        self.rcg2.units = self.units2
        self.rcg1.recordingchannels = self.rchan1
        self.rcg2.recordingchannels = self.rchan2
        self.rcg1.analogsignalarrays = self.sigarr1
        self.rcg2.analogsignalarrays = self.sigarr2

        self.rcg1.create_many_to_one_relationship()
        self.rcg2.create_many_to_one_relationship()
Esempio n. 8
0
    def setUp(self):
        unitname11 = 'unit 1 1'
        unitname12 = 'unit 1 2'
        unitname21 = 'unit 2 1'
        unitname22 = 'unit 2 2'

        channame11 = 'chan 1 1'
        channame12 = 'chan 1 2'
        channame21 = 'chan 2 1'
        channame22 = 'chan 2 2'

        segname11 = 'seg 1 1'
        segname12 = 'seg 1 2'
        segname21 = 'seg 2 1'
        segname22 = 'seg 2 2'

        self.rcgname1 = 'rcg 1'
        self.rcgname2 = 'rcg 2'
        self.rcgnames = [self.rcgname1, self.rcgname2]

        self.unitnames1 = [unitname11, unitname12]
        self.unitnames2 = [unitname21, unitname22, unitname11]
        self.unitnames = [unitname11, unitname12, unitname21, unitname22]

        self.channames1 = [channame11, channame12]
        self.channames2 = [channame21, channame22, channame11]
        self.channames = [channame11, channame12, channame21, channame22]

        self.segnames1 = [segname11, segname12]
        self.segnames2 = [segname21, segname22, segname11]
        self.segnames = [segname11, segname12, segname21, segname22]

        unit11 = Unit(name=unitname11)
        unit12 = Unit(name=unitname12)
        unit21 = Unit(name=unitname21)
        unit22 = Unit(name=unitname22)
        unit23 = unit11

        chan11 = RecordingChannel(name=channame11)
        chan12 = RecordingChannel(name=channame12)
        chan21 = RecordingChannel(name=channame21)
        chan22 = RecordingChannel(name=channame22)
        chan23 = chan11

        seg11 = Segment(name=segname11)
        seg12 = Segment(name=segname12)
        seg21 = Segment(name=segname21)
        seg22 = Segment(name=segname22)
        seg23 = seg11

        self.units1 = [unit11, unit12]
        self.units2 = [unit21, unit22, unit23]
        self.units = [unit11, unit12, unit21, unit22]

        self.chan1 = [chan11, chan12]
        self.chan2 = [chan21, chan22, chan23]
        self.chan = [chan11, chan12, chan21, chan22]

        self.seg1 = [seg11, seg12]
        self.seg2 = [seg21, seg22, seg23]
        self.seg = [seg11, seg12, seg21, seg22]

        self.rcg1 = RecordingChannelGroup(name=self.rcgname1)
        self.rcg2 = RecordingChannelGroup(name=self.rcgname2)
        self.rcg = [self.rcg1, self.rcg2]

        self.rcg1.units = self.units1
        self.rcg2.units = self.units2
        self.rcg1.recordingchannels = self.chan1
        self.rcg2.recordingchannels = self.chan2
class TestRecordingChannelGroup(unittest.TestCase):
    def setUp(self):
        self.setup_unit()
        self.setup_analogsignalarrays()
        self.setup_recordingchannels()
        self.setup_recordingchannelgroups()

    def setup_recordingchannelgroups(self):
        params = {'testarg2': 'yes', 'testarg3': True}
        self.rcg1 = RecordingChannelGroup(name='test',
                                          description='tester 1',
                                          file_origin='test.file',
                                          testarg1=1,
                                          **params)
        self.rcg2 = RecordingChannelGroup(name='test',
                                          description='tester 2',
                                          file_origin='test.file',
                                          testarg1=1,
                                          **params)
        self.rcg1.annotate(testarg1=1.1, testarg0=[1, 2, 3])
        self.rcg2.annotate(testarg11=1.1, testarg10=[1, 2, 3])

        self.rcg1.units = self.units1
        self.rcg2.units = self.units2
        self.rcg1.recordingchannels = self.rchan1
        self.rcg2.recordingchannels = self.rchan2
        self.rcg1.analogsignalarrays = self.sigarr1
        self.rcg2.analogsignalarrays = self.sigarr2

        self.rcg1.create_many_to_one_relationship()
        self.rcg2.create_many_to_one_relationship()

    def setup_unit(self):
        unitname11 = 'unit 1 1'
        unitname12 = 'unit 1 2'
        unitname21 = 'unit 2 1'
        unitname22 = 'unit 2 2'

        self.unitnames1 = [unitname11, unitname12]
        self.unitnames2 = [unitname21, unitname22, unitname11]
        self.unitnames = [unitname11, unitname12, unitname21, unitname22]

        unit11 = Unit(name=unitname11, channel_indexes=np.array([1]))
        unit12 = Unit(name=unitname12, channel_indexes=np.array([2]))
        unit21 = Unit(name=unitname21, channel_indexes=np.array([1]))
        unit22 = Unit(name=unitname22, channel_indexes=np.array([2]))
        unit23 = Unit(name=unitname11, channel_indexes=np.array([1]))

        self.units1 = [unit11, unit12]
        self.units2 = [unit21, unit22, unit23]
        self.units = [unit11, unit12, unit21, unit22]

    def setup_recordingchannels(self):
        rchanname11 = 'chan 1 1'
        rchanname12 = 'chan 1 2'
        rchanname21 = 'chan 2 1'
        rchanname22 = 'chan 2 2'

        self.rchannames1 = [rchanname11, rchanname12]
        self.rchannames2 = [rchanname21, rchanname22, rchanname11]
        self.rchannames = [rchanname11, rchanname12, rchanname21, rchanname22]

        rchan11 = RecordingChannel(name=rchanname11)
        rchan12 = RecordingChannel(name=rchanname12)
        rchan21 = RecordingChannel(name=rchanname21)
        rchan22 = RecordingChannel(name=rchanname22)
        rchan23 = RecordingChannel(name=rchanname11)

        self.rchan1 = [rchan11, rchan12]
        self.rchan2 = [rchan21, rchan22, rchan23]
        self.rchan = [rchan11, rchan12, rchan21, rchan22]

    def setup_analogsignalarrays(self):
        sigarrname11 = 'analogsignalarray 1 1'
        sigarrname12 = 'analogsignalarray 1 2'
        sigarrname21 = 'analogsignalarray 2 1'
        sigarrname22 = 'analogsignalarray 2 2'

        sigarrdata11 = np.arange(0, 10).reshape(5, 2) * pq.mV
        sigarrdata12 = np.arange(10, 20).reshape(5, 2) * pq.mV
        sigarrdata21 = np.arange(20, 30).reshape(5, 2) * pq.V
        sigarrdata22 = np.arange(30, 40).reshape(5, 2) * pq.V
        sigarrdata112 = np.hstack([sigarrdata11, sigarrdata11]) * pq.mV

        self.sigarrnames1 = [sigarrname11, sigarrname12]
        self.sigarrnames2 = [sigarrname21, sigarrname22, sigarrname11]
        self.sigarrnames = [
            sigarrname11, sigarrname12, sigarrname21, sigarrname22
        ]

        sigarr11 = AnalogSignalArray(sigarrdata11,
                                     name=sigarrname11,
                                     sampling_rate=1 * pq.Hz,
                                     channel_index=np.array([1]))
        sigarr12 = AnalogSignalArray(sigarrdata12,
                                     name=sigarrname12,
                                     sampling_rate=1 * pq.Hz,
                                     channel_index=np.array([2]))
        sigarr21 = AnalogSignalArray(sigarrdata21,
                                     name=sigarrname21,
                                     sampling_rate=1 * pq.Hz,
                                     channel_index=np.array([1]))
        sigarr22 = AnalogSignalArray(sigarrdata22,
                                     name=sigarrname22,
                                     sampling_rate=1 * pq.Hz,
                                     channel_index=np.array([2]))
        sigarr23 = AnalogSignalArray(sigarrdata11,
                                     name=sigarrname11,
                                     sampling_rate=1 * pq.Hz,
                                     channel_index=np.array([1]))
        sigarr112 = AnalogSignalArray(sigarrdata112,
                                      name=sigarrname11,
                                      sampling_rate=1 * pq.Hz,
                                      channel_index=np.array([1]))

        self.sigarr1 = [sigarr11, sigarr12]
        self.sigarr2 = [sigarr21, sigarr22, sigarr23]
        self.sigarr = [sigarr112, sigarr12, sigarr21, sigarr22]

    def test__recordingchannelgroup__init_defaults(self):
        rcg = RecordingChannelGroup()
        assert_neo_object_is_compliant(rcg)
        self.assertEqual(rcg.name, None)
        self.assertEqual(rcg.file_origin, None)
        self.assertEqual(rcg.recordingchannels, [])
        self.assertEqual(rcg.analogsignalarrays, [])
        assert_arrays_equal(rcg.channel_names, np.array([], dtype='S'))
        assert_arrays_equal(rcg.channel_indexes, np.array([]))

    def test_recordingchannelgroup__init(self):
        rcg = RecordingChannelGroup(file_origin='temp.dat',
                                    channel_indexes=np.array([1]))
        assert_neo_object_is_compliant(rcg)
        self.assertEqual(rcg.file_origin, 'temp.dat')
        self.assertEqual(rcg.name, None)
        self.assertEqual(rcg.recordingchannels, [])
        self.assertEqual(rcg.analogsignalarrays, [])
        assert_arrays_equal(rcg.channel_names, np.array([], dtype='S'))
        assert_arrays_equal(rcg.channel_indexes, np.array([1]))

    def test_recordingchannelgroup__compliance(self):
        assert_neo_object_is_compliant(self.rcg1)
        assert_neo_object_is_compliant(self.rcg2)

        self.assertEqual(self.rcg1.name, 'test')
        self.assertEqual(self.rcg2.name, 'test')

        self.assertEqual(self.rcg1.description, 'tester 1')
        self.assertEqual(self.rcg2.description, 'tester 2')

        self.assertEqual(self.rcg1.file_origin, 'test.file')
        self.assertEqual(self.rcg2.file_origin, 'test.file')

        self.assertEqual(self.rcg1.annotations['testarg0'], [1, 2, 3])
        self.assertEqual(self.rcg2.annotations['testarg10'], [1, 2, 3])

        self.assertEqual(self.rcg1.annotations['testarg1'], 1.1)
        self.assertEqual(self.rcg2.annotations['testarg1'], 1)
        self.assertEqual(self.rcg2.annotations['testarg11'], 1.1)

        self.assertEqual(self.rcg1.annotations['testarg2'], 'yes')
        self.assertEqual(self.rcg2.annotations['testarg2'], 'yes')

        self.assertTrue(self.rcg1.annotations['testarg3'])
        self.assertTrue(self.rcg2.annotations['testarg3'])

        self.assertTrue(hasattr(self.rcg1, 'units'))
        self.assertTrue(hasattr(self.rcg2, 'units'))

        self.assertEqual(len(self.rcg1.units), 2)
        self.assertEqual(len(self.rcg2.units), 3)

        self.assertEqual(self.rcg1.units, self.units1)
        self.assertEqual(self.rcg2.units, self.units2)

        self.assertTrue(hasattr(self.rcg1, 'recordingchannels'))
        self.assertTrue(hasattr(self.rcg2, 'recordingchannels'))

        self.assertEqual(len(self.rcg1.recordingchannels), 2)
        self.assertEqual(len(self.rcg2.recordingchannels), 3)

        for res, targ in zip(self.rcg1.recordingchannels, self.rchan1):
            self.assertEqual(res.name, targ.name)

        for res, targ in zip(self.rcg2.recordingchannels, self.rchan2):
            self.assertEqual(res.name, targ.name)

        self.assertTrue(hasattr(self.rcg1, 'analogsignalarrays'))
        self.assertTrue(hasattr(self.rcg2, 'analogsignalarrays'))

        self.assertEqual(len(self.rcg1.analogsignalarrays), 2)
        self.assertEqual(len(self.rcg2.analogsignalarrays), 3)

        for res, targ in zip(self.rcg1.analogsignalarrays, self.sigarr1):
            assert_arrays_equal(res, targ)
            self.assertEqual(res.name, targ.name)

        for res, targ in zip(self.rcg2.analogsignalarrays, self.sigarr2):
            assert_arrays_equal(res, targ)
            self.assertEqual(res.name, targ.name)

    def test_recordingchannelgroup__merge(self):
        self.rcg1.merge(self.rcg2)

        chanres1 = [chan.name for chan in self.rcg1.recordingchannels]
        chanres2 = [chan.name for chan in self.rcg2.recordingchannels]

        unitres1 = [unit.name for unit in self.rcg1.units]
        unitres2 = [unit.name for unit in self.rcg2.units]

        sigarrres1 = [sigarr.name for sigarr in self.rcg1.analogsignalarrays]
        sigarrres2 = [sigarr.name for sigarr in self.rcg2.analogsignalarrays]

        self.assertEqual(chanres1, self.rchannames)
        self.assertEqual(chanres2, self.rchannames2)

        self.assertEqual(unitres1, self.unitnames)
        self.assertEqual(unitres2, self.unitnames2)

        self.assertEqual(sigarrres1, self.sigarrnames)
        self.assertEqual(sigarrres2, self.sigarrnames2)

        for res, targ in zip(self.rcg1.analogsignalarrays, self.sigarr):
            assert_arrays_equal(res, targ)

        for res, targ in zip(self.rcg2.analogsignalarrays, self.sigarr2):
            assert_arrays_equal(res, targ)

    def test__children(self):
        blk = Block(name='block1')
        blk.recordingchannelgroups = [self.rcg1]
        blk.create_many_to_one_relationship()

        self.assertEqual(self.rcg1._container_child_objects, ('Unit', ))
        self.assertEqual(self.rcg1._data_child_objects,
                         ('AnalogSignalArray', ))
        self.assertEqual(self.rcg1._single_parent_objects, ('Block', ))
        self.assertEqual(self.rcg1._multi_child_objects,
                         ('RecordingChannel', ))
        self.assertEqual(self.rcg1._multi_parent_objects, ())
        self.assertEqual(self.rcg1._child_properties, ())

        self.assertEqual(self.rcg1._single_child_objects, (
            'Unit',
            'AnalogSignalArray',
        ))

        self.assertEqual(self.rcg1._container_child_containers, ('units', ))
        self.assertEqual(self.rcg1._data_child_containers,
                         ('analogsignalarrays', ))
        self.assertEqual(self.rcg1._single_child_containers,
                         ('units', 'analogsignalarrays'))
        self.assertEqual(self.rcg1._single_parent_containers, ('block', ))
        self.assertEqual(self.rcg1._multi_child_containers,
                         ('recordingchannels', ))
        self.assertEqual(self.rcg1._multi_parent_containers, ())

        self.assertEqual(self.rcg1._child_objects,
                         ('Unit', 'AnalogSignalArray', 'RecordingChannel'))
        self.assertEqual(self.rcg1._child_containers,
                         ('units', 'analogsignalarrays', 'recordingchannels'))
        self.assertEqual(self.rcg1._parent_objects, ('Block', ))
        self.assertEqual(self.rcg1._parent_containers, ('block', ))

        self.assertEqual(
            len(self.rcg1.children),
            (len(self.units1) + len(self.rchan1) + len(self.sigarr1)))
        self.assertEqual(self.rcg1.children[0].name, self.unitnames1[0])
        self.assertEqual(self.rcg1.children[1].name, self.unitnames1[1])
        self.assertEqual(self.rcg1.children[2].name, self.sigarrnames1[0])
        self.assertEqual(self.rcg1.children[3].name, self.sigarrnames1[1])
        self.assertEqual(self.rcg1.children[4].name, self.rchannames1[0])
        self.assertEqual(self.rcg1.children[5].name, self.rchannames1[1])
        self.assertEqual(len(self.rcg1.parents), 1)
        self.assertEqual(self.rcg1.parents[0].name, 'block1')

        self.rcg1.create_many_to_one_relationship()
        self.rcg1.create_many_to_many_relationship()
        self.rcg1.create_relationship()
        assert_neo_object_is_compliant(self.rcg1)
class TestRecordingChannelGroup(unittest.TestCase):
    def setUp(self):
        self.setup_unit()
        self.setup_analogsignalarrays()
        self.setup_recordingchannels()
        self.setup_recordingchannelgroups()

    def setup_recordingchannelgroups(self):
        params = {'testarg2': 'yes', 'testarg3': True}
        self.rcg1 = RecordingChannelGroup(name='test', description='tester 1',
                                          file_origin='test.file',
                                          testarg1=1, **params)
        self.rcg2 = RecordingChannelGroup(name='test', description='tester 2',
                                          file_origin='test.file',
                                          testarg1=1, **params)
        self.rcg1.annotate(testarg1=1.1, testarg0=[1, 2, 3])
        self.rcg2.annotate(testarg11=1.1, testarg10=[1, 2, 3])

        self.rcg1.units = self.units1
        self.rcg2.units = self.units2
        self.rcg1.recordingchannels = self.rchan1
        self.rcg2.recordingchannels = self.rchan2
        self.rcg1.analogsignalarrays = self.sigarr1
        self.rcg2.analogsignalarrays = self.sigarr2

        self.rcg1.create_many_to_one_relationship()
        self.rcg2.create_many_to_one_relationship()

    def setup_unit(self):
        unitname11 = 'unit 1 1'
        unitname12 = 'unit 1 2'
        unitname21 = 'unit 2 1'
        unitname22 = 'unit 2 2'

        self.unitnames1 = [unitname11, unitname12]
        self.unitnames2 = [unitname21, unitname22, unitname11]
        self.unitnames = [unitname11, unitname12, unitname21, unitname22]

        unit11 = Unit(name=unitname11, channel_indexes=np.array([1]))
        unit12 = Unit(name=unitname12, channel_indexes=np.array([2]))
        unit21 = Unit(name=unitname21, channel_indexes=np.array([1]))
        unit22 = Unit(name=unitname22, channel_indexes=np.array([2]))
        unit23 = Unit(name=unitname11, channel_indexes=np.array([1]))

        self.units1 = [unit11, unit12]
        self.units2 = [unit21, unit22, unit23]
        self.units = [unit11, unit12, unit21, unit22]

    def setup_recordingchannels(self):
        rchanname11 = 'chan 1 1'
        rchanname12 = 'chan 1 2'
        rchanname21 = 'chan 2 1'
        rchanname22 = 'chan 2 2'

        self.rchannames1 = [rchanname11, rchanname12]
        self.rchannames2 = [rchanname21, rchanname22, rchanname11]
        self.rchannames = [rchanname11, rchanname12, rchanname21, rchanname22]

        rchan11 = RecordingChannel(name=rchanname11)
        rchan12 = RecordingChannel(name=rchanname12)
        rchan21 = RecordingChannel(name=rchanname21)
        rchan22 = RecordingChannel(name=rchanname22)
        rchan23 = RecordingChannel(name=rchanname11)

        self.rchan1 = [rchan11, rchan12]
        self.rchan2 = [rchan21, rchan22, rchan23]
        self.rchan = [rchan11, rchan12, rchan21, rchan22]

    def setup_analogsignalarrays(self):
        sigarrname11 = 'analogsignalarray 1 1'
        sigarrname12 = 'analogsignalarray 1 2'
        sigarrname21 = 'analogsignalarray 2 1'
        sigarrname22 = 'analogsignalarray 2 2'

        sigarrdata11 = np.arange(0, 10).reshape(5, 2) * pq.mV
        sigarrdata12 = np.arange(10, 20).reshape(5, 2) * pq.mV
        sigarrdata21 = np.arange(20, 30).reshape(5, 2) * pq.V
        sigarrdata22 = np.arange(30, 40).reshape(5, 2) * pq.V
        sigarrdata112 = np.hstack([sigarrdata11, sigarrdata11]) * pq.mV

        self.sigarrnames1 = [sigarrname11, sigarrname12]
        self.sigarrnames2 = [sigarrname21, sigarrname22, sigarrname11]
        self.sigarrnames = [sigarrname11, sigarrname12,
                            sigarrname21, sigarrname22]

        sigarr11 = AnalogSignalArray(sigarrdata11, name=sigarrname11,
                                     sampling_rate=1*pq.Hz,
                                     channel_index=np.array([1]))
        sigarr12 = AnalogSignalArray(sigarrdata12, name=sigarrname12,
                                     sampling_rate=1*pq.Hz,
                                     channel_index=np.array([2]))
        sigarr21 = AnalogSignalArray(sigarrdata21, name=sigarrname21,
                                     sampling_rate=1*pq.Hz,
                                     channel_index=np.array([1]))
        sigarr22 = AnalogSignalArray(sigarrdata22, name=sigarrname22,
                                     sampling_rate=1*pq.Hz,
                                     channel_index=np.array([2]))
        sigarr23 = AnalogSignalArray(sigarrdata11, name=sigarrname11,
                                     sampling_rate=1*pq.Hz,
                                     channel_index=np.array([1]))
        sigarr112 = AnalogSignalArray(sigarrdata112, name=sigarrname11,
                                      sampling_rate=1*pq.Hz,
                                      channel_index=np.array([1]))

        self.sigarr1 = [sigarr11, sigarr12]
        self.sigarr2 = [sigarr21, sigarr22, sigarr23]
        self.sigarr = [sigarr112, sigarr12, sigarr21, sigarr22]

    def test__recordingchannelgroup__init_defaults(self):
        rcg = RecordingChannelGroup()
        assert_neo_object_is_compliant(rcg)
        self.assertEqual(rcg.name, None)
        self.assertEqual(rcg.file_origin, None)
        self.assertEqual(rcg.recordingchannels, [])
        self.assertEqual(rcg.analogsignalarrays, [])
        assert_arrays_equal(rcg.channel_names, np.array([], dtype='S'))
        assert_arrays_equal(rcg.channel_indexes, np.array([]))

    def test_recordingchannelgroup__init(self):
        rcg = RecordingChannelGroup(file_origin='temp.dat',
                                    channel_indexes=np.array([1]))
        assert_neo_object_is_compliant(rcg)
        self.assertEqual(rcg.file_origin, 'temp.dat')
        self.assertEqual(rcg.name, None)
        self.assertEqual(rcg.recordingchannels, [])
        self.assertEqual(rcg.analogsignalarrays, [])
        assert_arrays_equal(rcg.channel_names, np.array([], dtype='S'))
        assert_arrays_equal(rcg.channel_indexes, np.array([1]))

    def test_recordingchannelgroup__compliance(self):
        assert_neo_object_is_compliant(self.rcg1)
        assert_neo_object_is_compliant(self.rcg2)

        self.assertEqual(self.rcg1.name, 'test')
        self.assertEqual(self.rcg2.name, 'test')

        self.assertEqual(self.rcg1.description, 'tester 1')
        self.assertEqual(self.rcg2.description, 'tester 2')

        self.assertEqual(self.rcg1.file_origin, 'test.file')
        self.assertEqual(self.rcg2.file_origin, 'test.file')

        self.assertEqual(self.rcg1.annotations['testarg0'], [1, 2, 3])
        self.assertEqual(self.rcg2.annotations['testarg10'], [1, 2, 3])

        self.assertEqual(self.rcg1.annotations['testarg1'], 1.1)
        self.assertEqual(self.rcg2.annotations['testarg1'], 1)
        self.assertEqual(self.rcg2.annotations['testarg11'], 1.1)

        self.assertEqual(self.rcg1.annotations['testarg2'], 'yes')
        self.assertEqual(self.rcg2.annotations['testarg2'], 'yes')

        self.assertTrue(self.rcg1.annotations['testarg3'])
        self.assertTrue(self.rcg2.annotations['testarg3'])

        self.assertTrue(hasattr(self.rcg1, 'units'))
        self.assertTrue(hasattr(self.rcg2, 'units'))

        self.assertEqual(len(self.rcg1.units), 2)
        self.assertEqual(len(self.rcg2.units), 3)

        self.assertEqual(self.rcg1.units, self.units1)
        self.assertEqual(self.rcg2.units, self.units2)

        self.assertTrue(hasattr(self.rcg1, 'recordingchannels'))
        self.assertTrue(hasattr(self.rcg2, 'recordingchannels'))

        self.assertEqual(len(self.rcg1.recordingchannels), 2)
        self.assertEqual(len(self.rcg2.recordingchannels), 3)

        for res, targ in zip(self.rcg1.recordingchannels, self.rchan1):
            self.assertEqual(res.name, targ.name)

        for res, targ in zip(self.rcg2.recordingchannels, self.rchan2):
            self.assertEqual(res.name, targ.name)

        self.assertTrue(hasattr(self.rcg1, 'analogsignalarrays'))
        self.assertTrue(hasattr(self.rcg2, 'analogsignalarrays'))

        self.assertEqual(len(self.rcg1.analogsignalarrays), 2)
        self.assertEqual(len(self.rcg2.analogsignalarrays), 3)

        for res, targ in zip(self.rcg1.analogsignalarrays, self.sigarr1):
            assert_arrays_equal(res, targ)
            self.assertEqual(res.name, targ.name)

        for res, targ in zip(self.rcg2.analogsignalarrays, self.sigarr2):
            assert_arrays_equal(res, targ)
            self.assertEqual(res.name, targ.name)

    def test_recordingchannelgroup__merge(self):
        self.rcg1.merge(self.rcg2)

        chanres1 = [chan.name for chan in self.rcg1.recordingchannels]
        chanres2 = [chan.name for chan in self.rcg2.recordingchannels]

        unitres1 = [unit.name for unit in self.rcg1.units]
        unitres2 = [unit.name for unit in self.rcg2.units]

        sigarrres1 = [sigarr.name for sigarr in self.rcg1.analogsignalarrays]
        sigarrres2 = [sigarr.name for sigarr in self.rcg2.analogsignalarrays]

        self.assertEqual(chanres1, self.rchannames)
        self.assertEqual(chanres2, self.rchannames2)

        self.assertEqual(unitres1, self.unitnames)
        self.assertEqual(unitres2, self.unitnames2)

        self.assertEqual(sigarrres1, self.sigarrnames)
        self.assertEqual(sigarrres2, self.sigarrnames2)

        for res, targ in zip(self.rcg1.analogsignalarrays, self.sigarr):
            assert_arrays_equal(res, targ)

        for res, targ in zip(self.rcg2.analogsignalarrays,  self.sigarr2):
            assert_arrays_equal(res, targ)

    def test__children(self):
        blk = Block(name='block1')
        blk.recordingchannelgroups = [self.rcg1]
        blk.create_many_to_one_relationship()

        self.assertEqual(self.rcg1._container_child_objects, ('Unit',))
        self.assertEqual(self.rcg1._data_child_objects, ('AnalogSignalArray',))
        self.assertEqual(self.rcg1._single_parent_objects, ('Block',))
        self.assertEqual(self.rcg1._multi_child_objects, ('RecordingChannel',))
        self.assertEqual(self.rcg1._multi_parent_objects, ())
        self.assertEqual(self.rcg1._child_properties, ())

        self.assertEqual(self.rcg1._single_child_objects,
                         ('Unit', 'AnalogSignalArray',))

        self.assertEqual(self.rcg1._container_child_containers, ('units',))
        self.assertEqual(self.rcg1._data_child_containers,
                         ('analogsignalarrays',))
        self.assertEqual(self.rcg1._single_child_containers,
                         ('units', 'analogsignalarrays'))
        self.assertEqual(self.rcg1._single_parent_containers, ('block',))
        self.assertEqual(self.rcg1._multi_child_containers,
                         ('recordingchannels',))
        self.assertEqual(self.rcg1._multi_parent_containers, ())

        self.assertEqual(self.rcg1._child_objects,
                         ('Unit', 'AnalogSignalArray', 'RecordingChannel'))
        self.assertEqual(self.rcg1._child_containers,
                         ('units', 'analogsignalarrays', 'recordingchannels'))
        self.assertEqual(self.rcg1._parent_objects, ('Block',))
        self.assertEqual(self.rcg1._parent_containers, ('block',))

        self.assertEqual(len(self.rcg1.children),
                         (len(self.units1) +
                          len(self.rchan1) +
                          len(self.sigarr1)))
        self.assertEqual(self.rcg1.children[0].name, self.unitnames1[0])
        self.assertEqual(self.rcg1.children[1].name, self.unitnames1[1])
        self.assertEqual(self.rcg1.children[2].name, self.sigarrnames1[0])
        self.assertEqual(self.rcg1.children[3].name, self.sigarrnames1[1])
        self.assertEqual(self.rcg1.children[4].name, self.rchannames1[0])
        self.assertEqual(self.rcg1.children[5].name, self.rchannames1[1])
        self.assertEqual(len(self.rcg1.parents), 1)
        self.assertEqual(self.rcg1.parents[0].name, 'block1')

        self.rcg1.create_many_to_one_relationship()
        self.rcg1.create_many_to_many_relationship()
        self.rcg1.create_relationship()
        assert_neo_object_is_compliant(self.rcg1)