code: def _rr_solve(X, xis, y, w, reg, epochs):
      """
      RR1 coordinate descent solver.
  
      Args:
          X(ndarray): The feature matrix.
          xis(ndarray): Row numbers in ``X`` that are rated.
          y(ndarray): Rating values corresponding to ``xis``.
          w(ndarray): Input/output vector to solve.
      """
  
      nd = len(w)
      Xt = X.T[:, xis]
      resid = w @ Xt
      resid *= -1.0
      resid += y
  
      for e in range(epochs):
          for k in range(nd):
              xk = Xt[k, :]
              num = np.dot(xk, resid) - reg * w[k]
              denom = np.dot(xk, xk) + reg
              dw = num / denom
              w[k] += dw
              _inplace_axpy(-dw, xk, resid)
  
imports: import logging
  from collections import namedtuple
  import numpy
  from numba import njit, prange
  from csr import CSR
  from seedbank import numpy_rng
  from .bias import Bias
  from .mf_common import MFPredictor
  from ..data import sparse_ratings
  from ..None import util
  from ..math.solve import _dposv
label_desc: Use image node_id 2 for calling a global function with example usage: _rr_solve(X, xis, y, w, reg, epochs) without return types