code: def unscaled_procrustes(reference, data):
      """Fit `data` to `reference` using procrustes analysis without scaling.
      Uses translation (mean-centering), reflection, and orthogonal rotation.
  
      Parameters:
          reference (array-like of shape (n_points, n_dim)): reference shape to
              fit `data` to
          data (array-like of shape (n_points, n_dim)): shape to align to
              `reference`
  
      Returns:
          reference_centered (np.ndarray of shape (n_points, n_dim)): 0-centered
              `reference` shape
          data_aligned (np.ndarray of shape (n_points, n_dim)): `data` aligned to
              the reference shape
      """
      # Convert inputs to np.ndarray types
      reference = np.array(reference, dtype=np.double)
      data = np.array(data, dtype=np.double)
  
      # Translate data to the origin
      reference_centered = reference - reference.mean(axis=0)
      data_centered = data - data.mean(axis=0)
  
      # Rotate / reflect data to match reference
      # transform mtx2 to minimize disparity
      R, _ = orthogonal_procrustes(data_centered, reference_centered)
      data_aligned = data_centered @ R
  
      return reference_centered, data_aligned
  
file_path: prince/prince/gpa.py
imports: from __future__ import annotations
  import numpy
  from scipy.linalg import orthogonal_procrustes
  from scipy.spatial import procrustes
  from sklearn import base
  from sklearn import utils
  from prince import utils
label_desc: Use image node_id 1 for calling a global function with example usage: unscaled_procrustes(reference, data) and returns: reference_centered,  data_aligned