code: def test_batch_tensor_descriptor_msgpack():
      tensor_descr = BatchTensorDescriptor.from_tensor(
          torch.ones(1, 3, 3, 7)
      )
      tensor_descr_roundtrip = MSGPackSerializer.loads(
          MSGPackSerializer.dumps(tensor_descr)
      )
  
      assert (
          tensor_descr.size == tensor_descr_roundtrip.size
          and tensor_descr.dtype == tensor_descr_roundtrip.dtype
          and tensor_descr.layout == tensor_descr_roundtrip.layout
          and tensor_descr.device == tensor_descr_roundtrip.device
          and tensor_descr.requires_grad
          == tensor_descr_roundtrip.requires_grad
          and tensor_descr.pin_memory == tensor_descr.pin_memory
          and tensor_descr.compression == tensor_descr.compression
      )
  
imports: import asyncio
  import concurrent.futures
  import multiprocessing
  import random
  import time
  from concurrent.futures import ThreadPoolExecutor
  import numpy
  import pytest
  import torch
  import hivemind
  from hivemind.compression import deserialize_torch_tensor, serialize_torch_tensor
  from hivemind.proto.runtime_pb2 import CompressionType
  from hivemind.utils import BatchTensorDescriptor, DHTExpiration, HeapEntry, MSGPackSerializer, ValueWithExpiration
  from hivemind.utils.asyncio import achain, aenumerate, aiter_with_timeout, amap_in_executor, anext, as_aiter, asingle, attach_event_on_finished, azip, cancel_and_wait, enter_asynchronously
  from hivemind.utils.mpfuture import InvalidStateError
  from hivemind.utils.performance_ema import PerformanceEMA
label_desc: Use image node_id 11 for calling a global function with example usage: test_batch_tensor_descriptor_msgpack() without return types