code: def _precompute_metric_params(X, Y, metric=None, **kwds):
      """Precompute data-derived metric parameters if not provided."""
      if metric == "seuclidean" and "V" not in kwds:
          if X is Y:
              V = np.var(X, axis=0, ddof=1)
          else:
              raise ValueError(
                  "The 'V' parameter is required for the seuclidean metric "
                  "when Y is passed."
              )
          return {"V": V}
      if metric == "mahalanobis" and "VI" not in kwds:
          if X is Y:
              VI = np.linalg.inv(np.cov(X.T)).T
          else:
              raise ValueError(
                  "The 'VI' parameter is required for the mahalanobis metric "
                  "when Y is passed."
              )
          return {"VI": VI}
      return {}
  
imports: import itertools
  import warnings
  from functools import partial
  import numpy
  from joblib import effective_n_jobs
  from scipy.sparse import csr_matrix, issparse
  from scipy.spatial import distance
  from ..None import config_context
  from ..exceptions import DataConversionWarning
  from ..preprocessing import normalize
  from ..utils import check_array, gen_batches, gen_even_slices, get_chunk_n_rows, is_scalar_nan
  from ..utils._mask import _get_mask
  from ..utils._param_validation import Hidden, Integral, Interval, MissingValues, Options, Real, StrOptions, validate_params
  from ..utils.extmath import row_norms, safe_sparse_dot
  from ..utils.fixes import parse_version, sp_base_version
  from ..utils.parallel import Parallel, delayed
  from ..utils.validation import _num_samples, check_non_negative
  from ._pairwise_distances_reduction import ArgKmin
  from ._pairwise_fast import _chi2_kernel_fast, _sparse_manhattan
label_desc: Use image node_id 32 for calling a global function with example usage: _precompute_metric_params(X, Y, metric) and returns: dict, dict, dict