class_docstr: Change the relative flag of the given relative optimization configuration
  to False. This is needed in order for the new opt config to pass ModelBridge
  that requires non-relativized opt config.
  
  Also transforms absolute data and opt configs to relative.
  
  Requires a modelbridge with a status quo set to work.
  
  Abstract property control_as_constant is set to True/False in its subclasses
  Relativize and RelativizeWithConstantControl respectively to account for
  appropriate transform/untransform differently.
code: def _rel_op_on_observations(
      self,
      observations: List[Observation],
      rel_op: Callable[..., Tuple[np.ndarray, np.ndarray]],
  ) -> List[Observation]:
      sq_data_by_trial: Dict[int, ObservationData] = not_none(
          self.modelbridge.status_quo_data_by_trial,
          self.MISSING_STATUS_QUO_ERROR,
      )
  
      missing_index = any(
          obs.features.trial_index is None for obs in observations
      )
      default_trial_idx: Optional[int] = None
      if missing_index:
          if len(sq_data_by_trial) == 1:
              default_trial_idx = next(iter(sq_data_by_trial))
          else:
              raise ValueError(
                  "Observations contain missing trial index that can't be inferred."
              )
  
      def _get_relative_data_from_obs(
          obs: Observation,
          rel_op: Callable[..., Tuple[np.ndarray, np.ndarray]],
      ) -> ObservationData:
          idx = (
              int(obs.features.trial_index)
              if obs.features.trial_index is not None
              else default_trial_idx
          )
          if idx not in sq_data_by_trial:
              raise ValueError(self.MISSING_STATUS_QUO_ERROR)
          return self._get_relative_data(
              data=obs.data,
              status_quo_data=sq_data_by_trial[idx],
              rel_op=rel_op,
          )
  
      return [
          Observation(
              features=obs.features,
              data=_get_relative_data_from_obs(obs, rel_op),
              arm_name=obs.arm_name,
          )
          for obs in observations
      ]
  
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from math import sqrt
  from typing import Callable, Dict, List, Optional, Tuple, TYPE_CHECKING
  import numpy
  from ax.core.observation import Observation, ObservationData, ObservationFeatures
  from ax.core.optimization_config import MultiObjectiveOptimizationConfig, OptimizationConfig
  from ax.core.outcome_constraint import OutcomeConstraint
  from ax.core.search_space import SearchSpace
  from ax.modelbridge import ModelBridge
  from ax.modelbridge.transforms.base import Transform
  from ax.models.types import TConfig
  from ax.utils.common.typeutils import not_none
  from ax.utils.stats.statstools import relativize, unrelativize
label_desc: Use image node_id 7 for calling the BaseRelativize obj's underlying member method code with example usage: obj._rel_op_on_observations(observations, rel_op) and returns: unknown, self