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

:param elem_type:
:param params:
:param elem:
:return: