code: def _check_init(A, shape, whom):
      A = check_array(A)
      if np.shape(A) != shape:
          raise ValueError(
              "Array with wrong shape passed to %s. Expected %s, but got %s "
              % (whom, shape, np.shape(A))
          )
      check_non_negative(A, whom)
      if np.max(A) == 0:
          raise ValueError(
              "Array passed to %s is full of zeros." % whom
          )
  
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 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 3 for calling a global function with example usage: _check_init(A, shape, whom) without return types