code: def cbpdnmd_xstep(k):
      
  
      YU0 = mp_Z_Y0[k] + mp_S[k] - mp_Z_U0[k]
      YU1 = mp_Z_Y1[k] - mp_Z_U1[k]
      if mp_cri.Cd == 1:
          b = np.conj(mp_Df) * sl.rfftn(YU0, None, mp_cri.axisN) + \
              sl.rfftn(YU1, None, mp_cri.axisN)
          Xf = sl.solvedbi_sm(mp_Df, 1.0, b, axis=mp_cri.axisM)
      else:
          b = sl.inner(np.conj(mp_Df), sl.rfftn(YU0, None, mp_cri.axisN),
                        axis=mp_cri.axisC) + \
              sl.rfftn(YU1, None, mp_cri.axisN)
          Xf = sl.solvemdbi_ism(mp_Df, 1.0, b, mp_cri.axisM, mp_cri.axisC)
      mp_Z_X[k] = sl.irfftn(Xf, mp_cri.Nv, mp_cri.axisN)
      mp_DX[k] = sl.irfftn(sl.inner(mp_Df, Xf), mp_cri.Nv, mp_cri.axisN)
docs: Do the X step of the cbpdn stage. The only parameter is the slice
      index `k` and there are no return values; all inputs and outputs are
      from and to global variables.