class_docstr: A reader for OME-NGFF files with the .zarr extension. Supports both 'normal' and
  'HCS' storage modes.
  
  OME-NGFF files below spec version 0.4 which are stored on S3/object storage
  should have the zarr.convenience.consolidate_metadata() function run on them
  to provide optimal performance over a network.
  
  Other non-OME .zarr format images may be readable, but are not strictly supported.
code: def get_reader(self):
      if self._reader is not None:
          return self._reader
      elif self.root in NGFFReader.ZARR_READER_CACHE:
          self._reader, self._series_map = NGFFReader.ZARR_READER_CACHE[
              self.root
          ]
      else:
          store = zarr.storage.FSStore(self.root)
          if self.root.lower().startswith("s3"):
              LOGGER.info(
                  "Zarr is stored on S3, will try to read directly."
              )
              if ".zmetadata" in store:
                  # Zarr has consolidated metadata.
                  self._reader = zarr.convenience.open_consolidated(
                      store, mode="r"
                  )
              else:
                  LOGGER.warning(
                      f"Image is on S3 but lacks consolidated metadata. "
                      f"This may degrade reading performance. URL: {self.root}"
                  )
                  self._reader = zarr.open(store, mode="r")
          elif not os.path.isdir(store.path):
              raise IOError(
                  'The file, "%s", does not exist.' % self.root
              )
          else:
              self._reader = zarr.open(store, mode="r")
          NGFFReader.ZARR_READER_CACHE[self.root] = self._reader, None
      if self.group:
          LOGGER.warning(f"Reader had a group? {self.group}")
          return self._reader[self.group]
      return self._reader
  
imports: import numpy
  import zarr
  from ..constants.image import MD_SIZE_S, MD_SIZE_C, MD_SIZE_Z, MD_SIZE_T, MD_SIZE_Y, MD_SIZE_X, MD_SERIES_NAME
  from ..constants.reader import ZARR_FILETYPE
  from ..reader import Reader
  import os
  import re
  import logging
  from lxml import etree
label_desc: Use image node_id 3 for calling the NGFFReader obj's underlying member method code with example usage: obj.get_reader() and returns: self, self, self