code: def R_isrk(self, k):
          
          ind = int(self.index[self.R_time_var_index, k])
          R = self.R[:, :, ind]
  
          if (R.shape[0] == 1):  # 1-D case handle simplier. No storage
              # of the result, just compute it each time.
              inv_square_root = np.sqrt(1.0/R)
          else:
              if self.svd_each_time:
  
                  (U, S, Vh) = sp.linalg.svd(R, full_matrices=False,
                                             compute_uv=True, overwrite_a=False,
                                             check_finite=True)
  
                  inv_square_root = U * 1.0/np.sqrt(S)
              else:
                  if ind in self.R_square_root:
                      inv_square_root = self.R_square_root[ind]
                  else:
                      (U, S, Vh) = sp.linalg.svd(R, full_matrices=False,
                                                 compute_uv=True,
                                                 overwrite_a=False,
                                                 check_finite=True)
  
                      inv_square_root = U * 1.0/np.sqrt(S)
  
                      self.R_square_root[ind] = inv_square_root
  
          return inv_square_root
docs: Function returns the inverse square root of R matrix on step k.