code: def _special_sparse_dot(W, H, X):
      """Computes np.dot(W, H), only where X is non zero."""
      if sp.issparse(X):
          ii, jj = X.nonzero()
          n_vals = ii.shape[0]
          dot_vals = np.empty(n_vals)
          n_components = W.shape[1]
  
          batch_size = max(n_components, n_vals // n_components)
          for start in range(0, n_vals, batch_size):
              batch = slice(start, start + batch_size)
              dot_vals[batch] = np.multiply(
                  W[ii[batch], :], H.T[jj[batch], :]
              ).sum(axis=1)
  
          WH = sp.coo_matrix((dot_vals, (ii, jj)), shape=X.shape)
          return WH.tocsr()
      else:
          return np.dot(W, H)
  
imports: import itertools
  import time
  import warnings
  from abc import ABC
  from math import sqrt
  from numbers import Integral, Real
  import numpy
  import scipy.sparse
  from scipy import linalg
  from .._config import config_context
  from ..base import BaseEstimator, ClassNamePrefixFeaturesOutMixin, TransformerMixin, _fit_context
  from ..exceptions import ConvergenceWarning
  from ..utils import check_array, check_random_state, gen_batches, metadata_routing
  from ..utils._param_validation import Hidden, Interval, StrOptions, validate_params
  from ..utils.extmath import randomized_svd, safe_sparse_dot, squared_norm
  from ..utils.validation import check_is_fitted, check_non_negative
  from ._cdnmf_fast import _update_cdnmf_fast
label_desc: Use image node_id 5 for calling a global function with example usage: _special_sparse_dot(W, H, X) and returns: WH, np