code: def test_msd_sim():
      """Tests for the MSD 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.msd(n_x, yr, min_support=1)
  
      # check symmetry and bounds. MSD sim must be in [0, 1]
      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
  
      # msd(3, 4) = mean(1^2, 1^2). sim = (1 / (1 + msd)) = 1 / 2
      assert sim[3, 4] == 0.5
  
      # pairs of users (0, 3)  have no common items
      assert sim[0, 3] == 0
      assert sim[0, 4] == 0
  
      # ensure min_support is taken into account. Only users 1 and 2 have more
      # than 4 common ratings.
      sim = sims.msd(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 2 for calling a global function with example usage: test_msd_sim() without return types