code: def compile_reader(self):
      page_size = self.reader.page_size
      page_size_log2 = np.uint32(np.log2(page_size))
  
      def read(address, mem_state):
          size = mem_state[2][np.searchsorted(mem_state[1], address)]
          page = address >> page_size_log2
          offset = address - (page << page_size_log2)
          page_slot = mem_state[3][page]
          return mem_state[0][page_slot, offset : offset + size]
  
      return Compiler.compile(read)
  
file_path: ffcv/ffcv/memory_managers/process_cache/manager.py
imports: import numba
  import numpy
  from .context import ProcessCacheContext
  from ...pipeline.compiler import Compiler
  from ..base import MemoryManager, MemoryContext
  from ..common import BATCHES_TYPE
label_desc: Use image node_id 3 for calling the ProcessCacheManager obj's underlying member method code with example usage: obj.compile_reader() and returns: Compiler, mem_state