code: async def load_tuple(self, elem_type, params=None, elem=None, obj=None):
          
          if obj is None:
              return None
  
          elem_fields = params[0] if params else None
          if elem_fields is None:
              elem_fields = elem_type.f_specs()
  
          c_len = len(obj)
          if len(elem_fields) != c_len:
              raise ValueError('Size mismatch')
  
          res = elem if elem else []
          for i in range(len(elem_fields)):
              try:
                  self.tracker.push_index(i)
                  fvalue = await self._load_field(params[1:] if params else None,
                                                  x.eref(res, i) if elem else None,
                                                  obj=obj[i])
                  self.tracker.pop()
  
                  if not elem:
                      res.append(fvalue)
  
              except Exception as e:
                  raise helpers.ArchiveException(e, tracker=self.tracker) from e
  
          return res
docs: Loads tuple of elements from the reader. Supports the tuple ref.
          Returns loaded tuple.
  
          :param elem_type:
          :param params:
          :param elem:
          :param obj:
          :return: