docs: def _get_acorn(self, method, *items):
      """Gets either a slice or an item from an array. Used for the __getitem__
      and __getslice__ special methods of the sub-classed array.
  
      Args:
          method (str): on of ['slice', 'item'].
      """
      #IMPORTANT!! I lost two hours because the ndarray becomes unstable if you
      #don't call the original method first. Somehow passing the array instance to
      #other methods changed its internal representation and made it unusable by
      #the original numpy functions. Putting them first makes it work.
      
      # Because we had to subclass numpy.ndarray, the original methods get
      # stuck in an infinite loop (max. recursion depth exceeded errors). So,
      # we instead grab the reference to the original ndarray object.
      if method == "slice":
          r = np.ndarray.__acornext__.__getslice__(self, *items)
      else:
          r = np.ndarray.__acornext__.__getitem__(self, *items)
          
      if not (decorating or streamlining):
          from acorn.logging.decoration import (pre, post, _fqdn)
          if method == "slice":
              fqdn = "numpy.ndarray.__getslice__"
          else:
              fqdn = "numpy.ndarray.__getitem__"
          preres = pre(fqdn, np.ndarray, 5, self, *items)
          entry, bound, ekey = preres
          # This method can trick acorn into thinking that it is a bound
          # method. We want it to behave like it's not.
          post(fqdn, "numpy", r, entry, np.ndarray, ekey)
      return r