<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_border_phase(self, idn=0, idr=0):
 """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) """

        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