class_docstr: Chooses DPStrategy based on DP budget, computation sensitivites, etc
  
  It chooses noise_kind to minimize the noise std deviation.
  For non-public partitions it chooses partition selection strategy to
  minimize threshold. For more details see docstring to
  select_partition_selection_strategy().
code: def __init__(
      self,
      epsilon: float,
      delta: float,
      metric: Optional[pipeline_dp.Metric],
      is_public_partitions: bool,
  ):
      input_validators.validate_epsilon_delta(
          epsilon, delta, "DPStrategySelector"
      )
      if delta == 0 and not is_public_partitions:
          raise ValueError(
              "DPStrategySelector: when private partition "
              "selection is used, delta must be positive"
          )
      self._epsilon = epsilon
      self._delta = delta
      self._metric = metric
      self._is_public_partitions = is_public_partitions
  
imports: from dataclasses import dataclass
  from typing import Optional
  import pipeline_dp
  from pipeline_dp import aggregate_params
  from pipeline_dp import dp_computations
  from pipeline_dp import input_validators
label_desc: Use image node_id 1 to create a new DPStrategySelector object  with example: obj = DPStrategySelector(epsilon, delta, metric, is_public_partitions)