code: def test_check_calculate_private_contribution_bounds_params(self):
      default_extractors = pipeline_dp.DataExtractors(
          privacy_id_extractor=lambda x: x,
          partition_extractor=lambda x: x,
          value_extractor=lambda x: x,
      )
      default_params = (
          pipeline_dp.CalculatePrivateContributionBoundsParams(
              aggregation_noise_kind=pipeline_dp.NoiseKind.GAUSSIAN,
              aggregation_eps=0.01,
              aggregation_delta=0.0001,
              calculation_eps=0.001,
              max_partitions_contributed_upper_bound=100,
          )
      )
  
      test_cases = [
          {
              "desc": "None col",
              "col": None,
              "params": default_params,
              "data_extractor": default_extractors,
          },
          {
              "desc": "empty col",
              "col": [],
              "params": default_params,
              "data_extractor": default_extractors,
          },
          {
              "desc": "none params",
              "col": [0],
              "params": None,
              "data_extractor": default_extractors,
          },
          {
              "desc": "params with incorrect type",
              "col": [0],
              "params": 1,
              "data_extractor": default_extractors,
          },
          {
              "desc": "None data_extractor",
              "col": [0],
              "params": default_params,
              "data_extractor": None,
          },
          {
              "desc": "data_extractor with an incorrect type",
              "col": [0],
              "params": default_params,
              "data_extractor": 1,
          },
      ]
  
      for test_case in test_cases:
          with self.assertRaises(Exception, msg=test_case["desc"]):
              engine = pipeline_dp.DPEngine(
                  budget_accountant=None,
                  backend=pipeline_dp.LocalBackend(),
              )
              engine.calculate_private_contribution_bounds(
                  test_case["col"],
                  test_case["params"],
                  test_case["data_extractor"],
                  partitions=None,
              )
  
imports: import sys
  import unittest
  from typing import List, Optional, Tuple
  from unittest.mock import patch
  import numpy
  import apache_beam
  import apache_beam.testing.test_pipeline
  import apache_beam.testing.util
  import pydp.algorithms.partition_selection
  from absl.testing import absltest
  from absl.testing import parameterized
  import pipeline_dp
  from pipeline_dp import aggregate_params
  from pipeline_dp import budget_accounting
  from pipeline_dp import dp_computations
  from pipeline_dp.budget_accounting import NaiveBudgetAccountant
  from pipeline_dp.pipeline_backend import PipelineBackend
  from pipeline_dp.pipeline_functions import collect_to_container
  from pipeline_dp.report_generator import ReportGenerator
label_desc: Use image node_id 4 for calling the DpEngineTest obj's underlying member method code with example usage: obj.test_check_calculate_private_contribution_bounds_params() without return types