class_docstr: Load NumPy arrays that were persisted to a zip file when pickling.
  
  :param zip_file: The zip file handle in which the NumPy arrays are saved.
  :type zip_file: :class:`zipfile.ZipFile`
code: def __call__(self, persid):
      from theano.gpuarray.type import get_context
      from theano.gpuarray import pygpu
  
      array_type, name = persid.split(".")
  
      if name in self.cache:
          return self.cache[name]
      ret = None
      if array_type == "gpuarray":
          with self.zip_file.open(name) as f:
              ctx_name = pickle.load(f)
              array = np.lib.format.read_array(f)
          if config.experimental.unpickle_gpu_on_cpu:
              # directly return numpy array
              warnings.warn(
                  "config.experimental.unpickle_gpu_on_cpu is set "
                  "to True. Unpickling GpuArray as numpy.ndarray"
              )
              ret = array
          elif pygpu:
              ret = pygpu.array(array, context=get_context(ctx_name))
          else:
              raise ImportError(
                  "pygpu not found. Cannot unpickle GpuArray"
              )
      else:
          with self.zip_file.open(name) as f:
              ret = np.lib.format.read_array(f)
      self.cache[name] = ret
      return ret
  
imports: from __future__ import absolute_import, print_function, division
  import numpy
  import os
  import pickle
  import sys
  import tempfile
  import zipfile
  import warnings
  from collections import defaultdict
  from contextlib import closing
  from pickle import HIGHEST_PROTOCOL
  from six import BytesIO
  import theano
  from theano import config
  from theano.compat import PY3
  from six import string_types
  from theano.compile.sharedvalue import SharedVariable
label_desc: Use image node_id 2 for calling the PersistentNdarrayLoad obj's underlying member method code with example usage: obj.__call__(persid) and returns: ret, self