class_docstr: Reads/writes `RecordIO` data format, supporting random access.
  
  Examples
  ---------
  >>> for i in range(5):
  ...     record.write_idx(i, 'record_%d'%i)
  >>> record.close()
  >>> record = mx.recordio.MXIndexedRecordIO('tmp.idx', 'tmp.rec', 'r')
  >>> record.read_idx(3)
  record_3
  
  Parameters
  ----------
  idx_path : str
      Path to the index file.
  uri : str
      Path to the record file. Only supports seekable file types.
  flag : str
      'w' for write or 'r' for read.
  key_type : type
      Data type for keys.
code: def open(self):
      super(MXIndexedRecordIO, self).open()
      self.fidx = open(self.idx_path, self.flag)
      if self.writable:
          self.idx = {}
          self.keys = []
      elif not self.idx:
          for line in iter(self.fidx.readline, ""):
              line = line.strip().split("\t")
              key = self.key_type(line[0])
              self.idx[key] = int(line[1])
              self.keys.append(key)
  
imports: from collections import namedtuple
  from multiprocessing import current_process
  import ctypes
  import struct
  import numbers
  import numpy
  from .base import _LIB
  from .base import RecordIOHandle
  from .base import check_call
  from .base import c_str
label_desc: Use image node_id 2 for calling the MXIndexedRecordIO obj's underlying member method code with example usage: obj.open() without return types