class_docstr: Performs utility analysis for DP aggregations.
  
  This class reuses the computation graph from the DP computation code by
  subclassing from pipeline_dp.DPEngine and by replacing some nodes of the
  computational graph from DP computation to analysis.
class_docstr_tok: ["Performs","utility","analysis","for","DP","aggregations",".","This","class","reuses","the","computation","graph","from","the","DP","computation","code","by","subclassing","from","pipeline_dp.DPEngine","and","by","replacing","some","nodes","of","the","computational","graph","from","DP","computation","to","analysis","."]
docstr: Creates ContributionBounder for utility analysis.
docstr_tok: ["Creates","ContributionBounder","for","utility","analysis","."]
code: def _create_contribution_bounder(
      self,
      params: pipeline_dp.AggregateParams,
      expects_per_partition_sampling: bool,
  ) -> contribution_bounders.ContributionBounder:
      """Creates ContributionBounder for utility analysis."""
      if self._options.pre_aggregated_data:
          return utility_contribution_bounders.NoOpContributionBounder()
      return utility_contribution_bounders.AnalysisContributionBounder(
          self._options.partitions_sampling_prob
      )
  
imports: import copy
  from typing import Optional, Union
  import pipeline_dp
  from pipeline_dp import budget_accounting
  from pipeline_dp import combiners
  from pipeline_dp import contribution_bounders
  from pipeline_dp import pipeline_backend
  import analysis
  import analysis.contribution_bounders
  from analysis import per_partition_combiners
  from analysis import data_structures
label_desc: Use image node_id 4 for calling the UtilityAnalysisEngine obj's underlying member method code with example usage: obj._create_contribution_bounder(params, expects_per_partition_sampling) and returns: utility_contribution_bounders, utility_contribution_bounders