code: def test_singular_covariance_init_of_non_strict_pd(
      estimator, build_dataset
  ):
      """Tests that when using the 'covariance' init or prior, it returns the
      appropriate warning if the covariance matrix is singular, for algorithms
      that don't need a strictly PD init. Also checks that the returned
      inverse matrix has finite values
      """
      input_data, labels, _, X = build_dataset()
      model = clone(estimator)
      set_random_state(model)
      # We create a feature that is a linear combination of the first two
      # features:
      input_data = np.concatenate(
          [input_data, input_data[:, ..., :2].dot([[2], [3]])], axis=-1
      )
      model.set_params(init="covariance")
      msg = (
          "The covariance matrix is not invertible: "
          "using the pseudo-inverse instead."
          "To make the covariance matrix invertible"
          " you can remove any linearly dependent features and/or "
          "reduce the dimensionality of your input, "
          "for instance using `sklearn.decomposition.PCA` as a "
          "preprocessing step."
      )
      with pytest.warns(UserWarning) as raised_warning:
          model.fit(input_data, labels)
      assert any(
          [str(warning.message) == msg for warning in raised_warning]
      )
      M, _ = _initialize_metric_mahalanobis(
          X,
          init="covariance",
          random_state=RNG,
          return_inverse=True,
          strict_pd=False,
      )
      assert np.isfinite(M).all()
  
imports: from itertools import product
  import pytest
  import numpy
  from numpy.linalg import LinAlgError
  from numpy.testing import assert_array_almost_equal, assert_allclose, assert_array_equal
  from scipy.spatial.distance import pdist, squareform, mahalanobis
  from scipy.stats import ortho_group
  from sklearn import clone
  from sklearn.cluster import DBSCAN
  from sklearn.datasets import make_spd_matrix, make_blobs
  from sklearn.utils import check_random_state, shuffle
  from sklearn.utils.multiclass import type_of_target
  from metric_learn.sklearn_shims import set_random_state
  from metric_learn._util import make_context, _initialize_metric_mahalanobis
  from metric_learn.sdml import _BaseSDML
  from metric_learn.base_metric import _QuadrupletsClassifierMixin, _TripletsClassifierMixin, _PairsClassifierMixin
  from metric_learn.exceptions import NonPSDError
  from test.test_utils import ids_metric_learners, metric_learners, remove_y, ids_classifiers
label_desc: Use image node_id 20 for calling a global function with example usage: test_singular_covariance_init_of_non_strict_pd(estimator, build_dataset) without return types