def test_serialize_deserialize():
    t = Tensor(
        shape=(100, 200),
        dtype={
            "image":
            Image(shape=(300, 400, 3), dtype="uint8"),
            "label":
            Tensor(
                shape=(5000, ),
                dtype={
                    "first": {
                        "a": "<U20",
                        "b": "uint32",
                        "c": ClassLabel(num_classes=3),
                    },
                    "second": "float64",
                },
            ),
            "bbox":
            BBox(dtype="float64"),
            "audio":
            Audio(shape=(120, ), dtype="uint32"),
            "mask":
            Mask(shape=(5, 8, 1)),
            "polygon":
            Polygon(shape=(16, 2)),
            "segmentation1":
            Segmentation(shape=(5, 9, 1), dtype="uint8", num_classes=5),
            "segmentation2":
            Segmentation(shape=(5, 9, 1),
                         dtype="uint8",
                         names=("apple", "orange", "pineapple")),
            "sequence":
            Sequence(dtype=Tensor(shape=(None, None),
                                  max_shape=(100, 100),
                                  dtype="uint8"), ),
            "text":
            Text((None, ), max_shape=(10, )),
            "video":
            Video((100, 100, 3, 10)),
        },
    )
    original_result = tuple(t._flatten())
    original_paths = [r.path for r in original_result]
    original_shapes = [r.shape for r in original_result]
    origanal_dtypes = [str(r.dtype) for r in original_result]

    serialize_t = serialize(t)
    deserialize_t = deserialize(serialize_t)
    result = tuple(deserialize_t._flatten())
    paths = [r.path for r in result]
    shapes = [r.shape for r in result]
    dtypes = [str(r.dtype) for r in result]

    assert paths == original_paths
    assert shapes == original_shapes
    assert dtypes == origanal_dtypes
def test_serialize_error():
    with pytest.raises(TypeError):
        serialize([])
    with pytest.raises(TypeError):
        serialize({})