code: def recommend_k_ncf(
      model, test, train, top_k=DEFAULT_K, remove_seen=True
  ):
      with Timer() as t:
          users, items, preds = [], [], []
          item = list(train[DEFAULT_ITEM_COL].unique())
          for user in train[DEFAULT_USER_COL].unique():
              user = [user] * len(item)
              users.extend(user)
              items.extend(item)
              preds.extend(
                  list(model.predict(user, item, is_list=True))
              )
          topk_scores = pd.DataFrame(
              data={
                  DEFAULT_USER_COL: users,
                  DEFAULT_ITEM_COL: items,
                  DEFAULT_PREDICTION_COL: preds,
              }
          )
          merged = pd.merge(
              train,
              topk_scores,
              on=[DEFAULT_USER_COL, DEFAULT_ITEM_COL],
              how="outer",
          )
          topk_scores = merged[
              merged[DEFAULT_RATING_COL].isnull()
          ].drop(DEFAULT_RATING_COL, axis=1)
      # Remove temp files
      return topk_scores, t
  
imports: import os
  import numpy
  import pandas
  from tempfile import TemporaryDirectory
  import surprise
  import cornac
  from recommenders.utils.timer import Timer
  from recommenders.utils.constants import COL_DICT, DEFAULT_K, DEFAULT_USER_COL, DEFAULT_ITEM_COL, DEFAULT_RATING_COL, DEFAULT_PREDICTION_COL, DEFAULT_TIMESTAMP_COL, SEED
  from recommenders.models.sar import SAR
  from recommenders.models.surprise.surprise_utils import predict, compute_ranking_predictions
  from recommenders.models.cornac.cornac_utils import predict_ranking
  from recommenders.evaluation.python_evaluation import map, ndcg_at_k, precision_at_k, recall_at_k
  from recommenders.evaluation.python_evaluation import rmse, mae, rsquared, exp_var
label_desc: Use image node_id 17 for calling a global function with example usage: recommend_k_ncf(model, test, train, top_k, remove_seen) and returns: topk_scores,  t