code: def _compute_distributions_means_stds(
      self,
      hyperparam_distribution: HyperparameterDistribution,
      distribution_trials: List[HPSampledValue],
  ):
      prior_mean = hyperparam_distribution.mean()
      prior_sigma = hyperparam_distribution.std()
  
      # Initialize with prior mean and sigma and replace when appropriate.
      means = (
          np.array(sorted(distribution_trials))
          if len(distribution_trials) > 0
          else np.array([prior_mean])
      )
      stds = np.array([prior_sigma])
  
      if len(means) > 1:
          # Compute the STDs specially with a far-left and far-right tail.
          stds = np.zeros_like(means)
          # Element-wise std computation is from the maximal difference in closest neighbor.
          stds[1:-1] = np.maximum(
              means[1:-1] - means[:-2], means[2:] - means[1:-1]
          )
          left_std = means[1] - means[0]
          right_std = means[-1] - means[-2]
          stds[0] = left_std
          stds[-1] = right_std
  
      return means, stds
  
imports: from collections import Counter
  from operator import itemgetter
  from typing import Any, List, Tuple, Union
  import numpy
  from neuraxle.hyperparams.distributions import Choice, DiscreteHyperparameterDistribution, DistributionMixture, HPSampledValue, HyperparameterDistribution, LogSpaceDistributionMixin, PriorityChoice, Quantized
  from neuraxle.hyperparams.space import HyperparameterSamples, HyperparameterSpace
  from neuraxle.metaopt.data.reporting import RoundReport, TrialReport
  from neuraxle.metaopt.optimizer import BaseHyperparameterOptimizer, GridExplorationSampler
label_desc: Use image node_id 8 for calling the _DividedMixturesFactory obj's underlying member method code with example usage: obj._compute_distributions_means_stds(hyperparam_distribution, distribution_trials) and returns: means,  stds