code: def fit(
      self,
      trials: list[FrozenTrial],
  ) -> None:
      self._trials = trials
  
      x, bounds = _convert_trials_to_tensors(trials)
  
      n_params = x.shape[1]
  
      y = torch.tensor(
          [trial.value for trial in trials], dtype=torch.float64
      )
      y = torch.unsqueeze(y, 1)
  
      self._gp = SingleTaskGP(
          x,
          y,
          input_transform=Normalize(d=n_params, bounds=bounds),
          outcome_transform=Standardize(m=1),
      )
  
      mll = gpytorch.mlls.ExactMarginalLogLikelihood(
          self._gp.likelihood, self._gp
      )
  
      fit_gpytorch_mll(mll)
  
file_path: optuna/optuna/terminator/improvement/gp/botorch.py
imports: from __future__ import annotations
  from typing import Optional
  import numpy
  from packaging import version
  from optuna._imports import try_import
  from optuna.distributions import _is_distribution_log
  from optuna.distributions import CategoricalDistribution
  from optuna.distributions import FloatDistribution
  from optuna.distributions import IntDistribution
  from optuna.search_space import intersection_search_space
  from optuna.terminator.improvement.gp.base import BaseGaussianProcess
  from optuna.trial._frozen import FrozenTrial
  from optuna.trial._state import TrialState
label_desc: Use image node_id 2 for calling the _BoTorchGaussianProcess obj's underlying member method code with example usage: obj.fit(trials) without return types