code: def evaluate(self, category_projection):
      assert issubclass(
          type(category_projection), CategoryProjectionBase
      )
      proj = category_projection.projection[
          :, [category_projection.x_dim, category_projection.y_dim]
      ]
      scaled_proj = np.array(
          [stretch_0_to_1(proj.T[0]), stretch_0_to_1(proj.T[1])]
      ).T
      morista_sum = 0
      N = scaled_proj.shape[0]
      for i in range(self.num_bin_range[0], self.num_bin_range[1]):
          bins, _, _ = np.histogram2d(
              scaled_proj.T[0], scaled_proj.T[1], i
          )
  
          # I_M  = Q * (\sum_{k=1}^{Q}{n_k * (n_k - 1)})/(N * (N _ 1))
          Q = len(bins)  # num_quadrants
  
          # Eqn 1.
          morista_sum += (
              Q
              * np.sum(np.ravel(bins) * (np.ravel(bins) - 1))
              / (N * (N - 1))
          )
      return morista_sum / (
          self.num_bin_range[1] - self.num_bin_range[0]
      )
  
file_path: scattertext/scattertext/categoryprojector/CategoryProjectorEvaluator.py
imports: import scipy
  import numpy
  from sklearn.metrics.pairwise import cosine_similarity
  from scattertext.Scalers import stretch_0_to_1
  from scattertext.categoryprojector.CategoryProjection import CategoryProjection, CategoryProjectionBase
label_desc: Use image node_id 2 for calling the MeanMorisitaIndexEvaluator obj's underlying member method code with example usage: obj.evaluate(category_projection) and returns: unknown