code: def test_cosine_sim():
      """Tests for the cosine similarity."""
  
      yr = yr_global.copy()
  
      # shuffle every rating list, to ensure the order in which ratings are
      # processed does not matter (it's important because it used to be error
      # prone when we were using itertools.combinations)
      for _, ratings in yr.items():
          random.shuffle(ratings)
  
      sim = sims.cosine(n_x, yr, min_support=1)
  
      # check symmetry and bounds (as ratings are > 0, cosine sim must be >= 0)
      for xi in range(n_x):
          assert sim[xi, xi] == 1
          for xj in range(n_x):
              assert sim[xi, xj] == sim[xj, xi]
              assert 0 <= sim[xi, xj] <= 1
  
      # on common items, users 0, 1 and 2 have the same ratings
      assert sim[0, 1] == 1
      assert sim[0, 2] == 1
  
      # for vectors with constant ratings (even if they're different constants),
      # cosine sim is necessarily 1
      assert sim[3, 4] == 1
  
      # pairs of users (0, 3)  have no common items
      assert sim[0, 3] == 0
      assert sim[0, 4] == 0
  
      # check for float point support and computation correctness
      dot_product56 = 1 * 1.5 + 3 * 3.5 + 2 * 2.5
      assert sim[5, 6] == (
          dot_product56
          / (
              (1**2 + 3**2 + 2**2)
              * (1.5**2 + 3.5**2 + 2.5**2)
          )
          ** 0.5
      )
  
      # ensure min_support is taken into account. Only users 1 and 2 have more
      # than 4 common ratings.
      sim = sims.cosine(n_x, yr, min_support=4)
      for i in range(n_x):
          for j in range(i + 1, n_x):
              if i != 1 and j != 2:
                  assert sim[i, j] == 0
  
imports: import random
  import numpy
  import surprise.similarities
label_desc: Use image node_id 1 for calling a global function with example usage: test_cosine_sim() without return types