docs: def isnap(self):
          """Snapshot index corresponding to time step.
  
          It is set to None if no snapshot exists for the time step.
          """
          if self._isnap is UNDETERMINED:
              istep = None
              isnap = -1
              # could be more efficient if do 0 and -1 then bisection
              # (but loose intermediate <- would probably use too much
              # memory for what it's worth if search algo is efficient)
              while (istep is None or istep < self.istep) and isnap < 99999:
                  isnap += 1
                  istep = self.sdat.snaps[isnap].istep
                  self.sdat.snaps.bind(isnap, istep)
                  # all intermediate istep could have their ._isnap to None
              if istep != self.istep:
                  self._isnap = None
          return self._isnap