code: def __call__(
      self, X, Y=None, Y_norm_squared=None, X_norm_squared=None
  ):
      # If norms are passed as float32, they are unused. If arrays are passed as
      # float32, norms needs to be recomputed on upcast chunks.
      # TODO: use a float64 accumulator in row_norms to avoid the latter.
      if X_norm_squared is not None:
          XX = check_array(X_norm_squared)
          if XX.shape == (1, X.shape[0]):
              XX = XX.T
          elif XX.shape != (X.shape[0], 1):
              raise ValueError(
                  "Incompatible dimensions for X and X_norm_squared"
              )
          if XX.dtype == np.float32:
              XX = self._x_norm_squared = None
      else:
          XX = None
  
      if X is Y and XX is not None:
          # shortcut in the common case euclidean_distances(X, X)
          YY = XX.T
      elif Y_norm_squared is not None:
          YY = mt.atleast_2d(Y_norm_squared)
  
          if YY.shape != (1, Y.shape[0]):
              raise ValueError(
                  "Incompatible dimensions for Y and Y_norm_squared"
              )
          if YY.dtype == np.float32:
              YY = self._y_norm_squared = None
      else:
          YY = None
  
      inputs = [X, Y]
      if XX is not None:
          inputs.append(XX)
      if YY is not None:
          inputs.append(YY)
      return self.new_tensor(
          inputs,
          shape=(X.shape[0], Y.shape[0]),
          order=TensorOrder.C_ORDER,
      )
  
imports: import numpy
  from ....None import opcodes
  from ....None import tensor
  from ....config import options
  from ....core import recursive_tile
  from ....serialization.serializables import KeyField, BoolField
  from ....tensor.core import TensorOrder
  from ....utils import has_unknown_shape
  from ...utils import check_array
  from ...utils.extmath import row_norms
  from .core import PairwiseDistances
label_desc: Use image node_id 8 for calling the EuclideanDistances obj's underlying member method code with example usage: obj.__call__(X, Y, Y_norm_squared, X_norm_squared) and returns: self