class_docstr: Options for the tuning process.
  
  Note that parameters that are not tuned (e.g. metrics, noise kind) are taken
  from aggregate_params.
  
  Attributes:
      epsilon, delta: differential privacy budget for aggregations for which
        tuning is performed.
      aggregate_params: parameters of aggregation.
      function_to_minimize: which function of the error to minimize. In case
        if this argument is a callable, it should take 1 argument of type
        AggregateErrorMetrics and return float.
      parameters_to_tune: specifies which parameters to tune.
      partitions_sampling_prob: the probability with which each partition
        will be sampled before running tuning. It is useful for speed-up
        computations on the large datasets.
      pre_aggregated_data: when True the input data is already pre-aggregated,
        otherwise the input data are raw. Preaggregated data also can be
        sampled.
      number_of_parameter_candidates: how many candidates to generate for
        parameter tuning. This is an upper bound, there can be fewer
        candidates generated.
code: def __post_init__(self):
      input_validators.validate_epsilon_delta(
          self.epsilon, self.delta, "TuneOptions"
      )
  
imports: import logging
  import math
  from numbers import Number
  import pipeline_dp
  from pipeline_dp import dp_computations
  from pipeline_dp import pipeline_backend
  from pipeline_dp import input_validators
  from pipeline_dp.dataset_histograms import histograms
  import analysis
  from analysis import metrics
  from analysis import utility_analysis
  from analysis import dp_strategy_selector
  import dataclasses
  from dataclasses import dataclass
  from typing import Callable, List, Optional, Tuple, Union, Sequence
  from enum import Enum
  import numpy
label_desc: Use image node_id 1 for calling the TuneOptions obj's underlying member method code with example usage: obj.__post_init__() without return types