示例#1
0
def no_metadata_segment():
    """ Add a segment with two channels, then a second
        segment with the same metadata as before,
        so there is only the lead in and binary data
    """
    test_file = GeneratedFile()
    test_file.add_segment(
        ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
        segment_objects_metadata(
            channel_metadata("/'group'/'channel1'", TDS_TYPE_INT32, 2),
            channel_metadata("/'group'/'channel2'", TDS_TYPE_INT32, 2),
        ), "01 00 00 00"
        "02 00 00 00"
        "03 00 00 00"
        "04 00 00 00")
    test_file.add_segment(("kTocRawData", ), "", "05 00 00 00"
                          "06 00 00 00"
                          "07 00 00 00"
                          "08 00 00 00")
    expected_data = {
        ('group', 'channel1'): np.array([1, 2, 5, 6], dtype=np.int32),
        ('group', 'channel2'): np.array([3, 4, 7, 8], dtype=np.int32),
    }
    return test_file, expected_data
示例#2
0
def alternating_data_objects_reusing_obj_list():
    """ Alternating segments with different objects with data,
        reusing the object list from the last segment.
    """
    test_file = GeneratedFile()
    test_file.add_segment(
        ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
        segment_objects_metadata(
            channel_metadata("/'group'/'channel1'", TDS_TYPE_INT32, 2),
            channel_metadata_with_no_data("/'group'/'channel2'"),
        ), "01 00 00 00"
        "02 00 00 00")
    test_file.add_segment(
        ("kTocMetaData", "kTocRawData"),
        segment_objects_metadata(
            channel_metadata_with_no_data("/'group'/'channel1'"),
            channel_metadata("/'group'/'channel2'", TDS_TYPE_INT32, 2),
        ), "03 00 00 00"
        "04 00 00 00")
    test_file.add_segment(
        ("kTocMetaData", "kTocRawData"),
        segment_objects_metadata(
            channel_metadata_with_repeated_structure("/'group'/'channel1'"),
            channel_metadata_with_no_data("/'group'/'channel2'"),
        ), "05 00 00 00"
        "06 00 00 00")
    test_file.add_segment(
        ("kTocMetaData", "kTocRawData"),
        segment_objects_metadata(
            channel_metadata_with_no_data("/'group'/'channel1'"),
            channel_metadata_with_repeated_structure("/'group'/'channel2'"),
        ), "07 00 00 00"
        "08 00 00 00")
    expected_data = {
        ('group', 'channel1'): np.array([1, 2, 5, 6], dtype=np.int32),
        ('group', 'channel2'): np.array([3, 4, 7, 8], dtype=np.int32),
    }
    return test_file, expected_data
示例#3
0
def test_complex_metadata_reading(benchmark):
    """ Benchmark reading metadata for a file with many channels and segments with alternating sets of objects
    """
    test_file = GeneratedFile()
    data = np.array([0] * 5, dtype=np.dtype('int32')).tobytes()
    test_file.add_segment(
        ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
        segment_objects_metadata(
            channel_metadata("/'group'/'channel0'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel1'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel2'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel3'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel4'", TDS_TYPE_INT32, 1),
        ),
        data,
        binary_data=True)
    test_file.add_segment(
        ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
        segment_objects_metadata(
            channel_metadata("/'group'/'channel5'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel6'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel7'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel8'", TDS_TYPE_INT32, 1),
            channel_metadata("/'group'/'channel9'", TDS_TYPE_INT32, 1),
        ),
        data,
        binary_data=True)
    for _ in range(9):
        test_file.add_segment(
            ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
            segment_objects_metadata(
                channel_metadata_with_no_data("/'group'/'channel0'"),
                channel_metadata_with_no_data("/'group'/'channel1'"),
                channel_metadata_with_no_data("/'group'/'channel2'"),
                channel_metadata_with_no_data("/'group'/'channel3'"),
                channel_metadata_with_no_data("/'group'/'channel4'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel5'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel6'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel7'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel8'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel9'"),
            ),
            data,
            binary_data=True)
        test_file.add_segment(
            ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
            segment_objects_metadata(
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel0'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel1'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel2'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel3'"),
                channel_metadata_with_repeated_structure(
                    "/'group'/'channel4'"),
                channel_metadata_with_no_data("/'group'/'channel5'"),
                channel_metadata_with_no_data("/'group'/'channel6'"),
                channel_metadata_with_no_data("/'group'/'channel7'"),
                channel_metadata_with_no_data("/'group'/'channel8'"),
                channel_metadata_with_no_data("/'group'/'channel9'"),
            ),
            data,
            binary_data=True)

    tdms_file = benchmark(read_metadata_from_start,
                          test_file.get_bytes_io_file())

    assert len(tdms_file) == 1
    assert len(tdms_file['group']) == 10
    for channel_num in range(10):
        assert len(tdms_file['group']['channel{0}'.format(channel_num)]) == 10
示例#4
0
def test_read_with_mismatching_index_file():
    """ Test that reading data when the index file doesn't match the data file raises an error
    """

    test_file = GeneratedFile()
    test_file.add_segment(("kTocMetaData", "kTocRawData", "kTocNewObjList"),
                          segment_objects_metadata(
                              channel_metadata("/'group'/'channel1'", 3, 2),
                              channel_metadata("/'group'/'channel2'", 3, 2),
                          ), "01 00 00 00"
                          "02 00 00 00"
                          "03 00 00 00"
                          "04 00 00 00")
    test_file.add_segment(("kTocMetaData", "kTocRawData", "kTocNewObjList"),
                          segment_objects_metadata(
                              channel_metadata("/'group'/'channel1'", 3, 2),
                              channel_metadata("/'group'/'channel2'", 3, 2),
                          ), "01 00 00 00"
                          "02 00 00 00"
                          "03 00 00 00"
                          "04 00 00 00")

    test_file_with_index = GeneratedFile()
    test_file_with_index.add_segment(
        ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
        segment_objects_metadata(
            channel_metadata("/'group'/'channel1'", 3, 3),
            channel_metadata("/'group'/'channel2'", 3, 3),
        ), "01 00 00 00"
        "02 00 00 00"
        "03 00 00 00"
        "04 00 00 00"
        "05 00 00 00"
        "06 00 00 00")
    test_file_with_index.add_segment(
        ("kTocMetaData", "kTocRawData", "kTocNewObjList"),
        segment_objects_metadata(
            channel_metadata("/'group'/'channel1'", 3, 3),
            channel_metadata("/'group'/'channel2'", 3, 3),
        ), "01 00 00 00"
        "02 00 00 00"
        "03 00 00 00"
        "04 00 00 00"
        "05 00 00 00"
        "06 00 00 00")

    with test_file.get_tempfile(delete=False) as tdms_file:
        with test_file_with_index.get_tempfile_with_index(
        ) as tdms_file_with_index_path:
            # Move index file from second file to match the name of the first file
            new_index_file = tdms_file.name + '_index'
            copyfile(tdms_file_with_index_path + '_index', new_index_file)
            try:
                tdms_file.file.close()
                with pytest.raises(ValueError) as exc_info:
                    _ = TdmsFile.read(tdms_file.name)
                assert 'Check that the tdms_index file matches the tdms data file' in str(
                    exc_info.value)
            finally:
                os.remove(new_index_file)
                os.remove(tdms_file.name)