code: def check_pairwise_arrays(X, Y, precomputed=False, dtype=None):
      """Set X and Y appropriately and checks inputs
  
      If Y is None, it is set as a pointer to X (i.e. not a copy).
      If Y is given, this does not happen.
      All distance metrics should use this function first to assert that the
      given parameters are correct and safe to use.
  
      Specifically, this function first ensures that both X and Y are arrays,
      then checks that they are at least two dimensional while ensuring that
      their elements are floats (or dtype if provided). Finally, the function
      checks that the size of the second dimension of the two arrays is equal, or
      the equivalent check for a precomputed distance matrix.
  
      Parameters
      ----------
      X : {array-like, sparse matrix}, shape (n_samples_a, n_features)
  
      Y : {array-like, sparse matrix}, shape (n_samples_b, n_features)
  
      precomputed : bool
          True if X is to be treated as precomputed distances to the samples in
          Y.
  
      dtype : string, type, list of types or None (default=None)
          Data type required for X and Y. If None, the dtype will be an
          appropriate float type selected by _return_float_dtype.
  
          .. versionadded:: 0.18
  
      Returns
      -------
      safe_X : {array-like, sparse matrix}, shape (n_samples_a, n_features)
          An array equal to X, guaranteed to be a numpy array.
  
      safe_Y : {array-like, sparse matrix}, shape (n_samples_b, n_features)
          An array equal to Y if Y was not None, guaranteed to be a numpy array.
          If Y was None, safe_Y will be a pointer to X.
  
      """
      X, Y, dtype_float = _return_float_dtype(X, Y)
  
      warn_on_dtype = dtype is not None
      estimator = "check_pairwise_arrays"
      if dtype is None:
          dtype = dtype_float
  
      if Y is X or Y is None:
          X = Y = check_array(
              X,
              accept_sparse="csr",
              dtype=dtype,
              warn_on_dtype=warn_on_dtype,
              estimator=estimator,
          )
      else:
          X = check_array(
              X,
              accept_sparse="csr",
              dtype=dtype,
              warn_on_dtype=warn_on_dtype,
              estimator=estimator,
          )
          Y = check_array(
              Y,
              accept_sparse="csr",
              dtype=dtype,
              warn_on_dtype=warn_on_dtype,
              estimator=estimator,
          )
  
      if precomputed:
          if X.shape[1] != Y.shape[0]:
              raise ValueError(
                  "Precomputed metric requires shape "
                  "(n_queries, n_indexed). Got (%d, %d) "
                  "for %d indexed."
                  % (X.shape[0], X.shape[1], Y.shape[0])
              )
      elif X.shape[1] != Y.shape[1]:
          raise ValueError(
              "Incompatible dimension for X and Y matrices: "
              "X.shape[1] == %d while Y.shape[1] == %d"
              % (X.shape[1], Y.shape[1])
          )
  
      return X, Y
  
imports: import itertools
  import numpy
  from scipy.spatial import distance
  from scipy.sparse import csr_matrix
  from scipy.sparse import issparse
  from ..utils import check_array
  from ..utils import gen_even_slices
  from ..utils import gen_batches
  from ..utils.fixes import partial
  from ..utils.extmath import row_norms, safe_sparse_dot
  from ..preprocessing import normalize
  from ..externals.joblib import Parallel
  from ..externals.joblib import delayed
  from ..externals.joblib import cpu_count
  from .pairwise_fast import _chi2_kernel_fast, _sparse_manhattan
label_desc: Use image node_id 2 for calling a global function with example usage: check_pairwise_arrays(X, Y, precomputed, dtype) and returns: X,  Y