class_docstr: Sample possible new hyperparams in the `good_trials`.
  
  Verify if we use the ratio directly or we use the loglikelihood of b_post under both distribution like hyperopt.
  In hyperopt, they use the following to calculate the log likelihood of b_post under both distributions:
  
  .. code-block:: python
      below_llik = fn_lpdf(*([b_post] + b_post.pos_args), **b_kwargs)
      above_llik = fn_lpdf(*([b_post] + a_post.pos_args), **a_kwargs)
      improvement = below_llik - above_llik
      new_node = scope.broadcast_best(b_post, improvement)
      new_node = scope.broadcast_best(b_post, below_llik, above_llik)
  
  Verify ratio good pdf versus bad pdf for all possible new hyperparams.
  
  The gist of it is that this is as dividing good probabilities by bad probabilities.
  
  We used what is described in the article which is the ratio (gamma + g(x) / l(x) ( 1- gamma))^-1 that we have to maximize.
  
  Since there is `^-1`, we have to maximize `l(x) / g(x)`.
  
  Only the best ratio is kept and is the new best hyperparams.
  
  They seem to take log of pdf and not pdf directly so it's probable to have `-` instead of `/` as an implementation. Regardless, both operators are transitive in nature for `max` comparisons in their regular or log space.
  
  # TODO: Maybe they use the likelyhood to sum over all possible parameters to find the max so it become a join distribution of all hyperparameters, would make sense.
  
  # TODO: verify is for quantized we do not want to do cdf(value higher) - cdf(value lower) to have pdf.
docstr: Sample an hyperparameter from the good distribution and return the probability ratio.
  
  :return: sampled good hyperparameter and probability ratio
docstr_tok: ["Sample","an","hyperparameter","from","the","good","distribution","and","return","the","probability","ratio",".",":","return",":","sampled","good","hyperparameter","and","probability","ratio"]
code: def rvs_good_with_pdf_division_proba(
      self,
  ) -> Tuple[HPSampledValue, float]:
      """
      Sample an hyperparameter from the good distribution and return the probability ratio.
  
      :return: sampled good hyperparameter and probability ratio
      """
      good_hyperparam = self.rvs_good()
      proba_ratio = self.proba_ratio(good_hyperparam)
      return good_hyperparam, proba_ratio
  
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 2 for calling the _DividedTPEPosteriors obj's underlying member method code with example usage: obj.rvs_good_with_pdf_division_proba() and returns: good_hyperparam,  proba_ratio