code: def _normalize_objective_values(
      objective_matrix: np.ndarray,
  ) -> np.ndarray:
      """Normalizes objective values of population.
  
      An ideal point z* consists of minimums in each axis. Each objective value of population is
      then subtracted by the ideal point.
      An extreme point of each axis is (originally) defined as a minimum solution of achievement
      scalarizing function from the population. After that, intercepts are calculate as intercepts
      of hyperplane which has all the extreme points on it and used to rescale objective values.
  
      We adopt weights and achievement scalarizing function(ASF) used in pre-print of the NSGA-III
      paper (See https://www.egr.msu.edu/~kdeb/papers/k2012009.pdf).
      """
      n_objectives = np.shape(objective_matrix)[1]
      # Subtract ideal point from objective values.
      objective_matrix -= np.min(objective_matrix, axis=0)
      # Initialize weights.
      weights = np.eye(n_objectives)
      weights[weights == 0] = 1e6
  
      # Calculate extreme points to normalize objective values.
      # TODO(Shinichi) Reimplement to reduce time complexity.
      asf_value = np.max(
          np.einsum("nm,dm->dnm", objective_matrix, weights),
          axis=2,
      )
      extreme_points = objective_matrix[np.argmin(asf_value, axis=1), :]
  
      # Normalize objective_matrix with extreme points.
      # Note that extreme_points can be degenerate, but no proper operation is remarked in the
      # paper. Therefore, the maximum value of population in each axis is used in such cases.
      if np.all(np.isfinite(extreme_points)) and np.linalg.matrix_rank(
          extreme_points
      ) == len(extreme_points):
          intercepts_inv = np.linalg.solve(
              extreme_points, np.ones(n_objectives)
          )
      else:
          intercepts_inv = 1 / np.max(objective_matrix, axis=0)
      objective_matrix *= np.where(
          np.isfinite(intercepts_inv), intercepts_inv, 1
      )
  
      return objective_matrix
  
imports: from __future__ import annotations
  from collections import defaultdict
  from collections.abc import Callable
  from collections.abc import Sequence
  import itertools
  import math
  import numpy
  from optuna.samplers._lazy_random_state import LazyRandomState
  from optuna.samplers.nsgaii._dominates import _constrained_dominates
  from optuna.samplers.nsgaii._dominates import _validate_constraints
  from optuna.samplers.nsgaii._elite_population_selection_strategy import _fast_non_dominated_sort
  from optuna.study import Study
  from optuna.study._multi_objective import _dominates
  from optuna.trial import FrozenTrial
label_desc: Use image node_id 4 for calling a global function with example usage: _normalize_objective_values(objective_matrix) and returns: objective_matrix