code: def get_border_phase(self, idn=0, idr=0):
          
          assert idn in [-1, 0, 1]
          assert idr in [-1, 0, 1]
  
          n = self.sphere_index + self.dn * idn
          r = self.radius + self.dr * idr
  
          # convert to array indices
          idn += 1
          idr += 1
          # find out whether we need to compute a new border field
          if self._n_border[idn, idr] == n and self._r_border[idn, idr] == r:
              if self.verbose > 3:
                  print("Using cached border phase (n{}, r{})".format(idn, idr))
              # return previously computed field
              pha = self._border_pha[(idn, idr)]
          else:
              if self.verbose > 3:
                  print("Computing border phase (n{}, r{})".format(idn, idr))
              kwargs = self.model_kwargs.copy()
              kwargs["radius"] = r
              kwargs["sphere_index"] = n
              kwargs["center"] = [self.posx_offset, self.posy_offset]
              tb = time.time()
              pha = self.sphere_method(**kwargs).pha
              if self.verbose > 2:
                  print("Border phase computation time:",
                        self.sphere_method.__module__, time.time() - tb)
              self._border_pha[(idn, idr)] = pha
              self._n_border[idn, idr] = n
              self._r_border[idn, idr] = r
  
          return pha
docs: Return one of nine border fields
  
          Parameters
          ----------
          idn: int
              Index for refractive index.
              One of -1 (left), 0 (center), 1 (right)
          idr: int
              Index for radius.
              One of -1 (left), 0 (center), 1 (right)