code: def test_ii_no_ratings():
      a1 = knn.ItemItem(
          20, save_nbrs=100, center=False, aggregate="sum"
      )
      a1.fit(ml_ratings.loc[:, ["user", "item"]])
  
      algo = knn.ItemItem(20, save_nbrs=100, feedback="implicit")
  
      algo.fit(ml_ratings)
      assert algo.item_counts_.sum() == algo.sim_matrix_.nnz
      assert all(algo.sim_matrix_.values > 0)
      assert all(algo.item_counts_ <= 100)
  
      preds = algo.predict_for_user(50, [1, 2, 42])
      assert all(preds[preds.notna()] > 0)
      p2 = algo.predict_for_user(50, [1, 2, 42])
      preds, p2 = preds.align(p2)
      assert preds.values == approx(p2.values, nan_ok=True)
  
imports: from lenskit import ConfigWarning, DataWarning
  from lenskit.algorithms import Recommender
  from lenskit.algorithms.basic import Fallback
  from lenskit.algorithms.bias import Bias
  from lenskit import batch
  import lenskit.algorithms.item_knn
  from lenskit.sharing import persist
  from lenskit.util.parallel import run_sp
  from lenskit.util import clone
  import gc
  from pathlib import Path
  import logging
  import pickle
  import pandas
  import numpy
  from scipy import linalg
  import csr.kernel
  import pytest
  from pytest import approx, mark, fixture
  import lenskit.util.test
  from lenskit.util.parallel import invoker
  from lenskit.util import Stopwatch
label_desc: Use image node_id 21 for calling a global function with example usage: test_ii_no_ratings() without return types