code: def _test_estimate_clip_converge(
      self,
      query,
      records,
      expected_clip,
      tolerance,
      learning_rate=None,
      total_steps=50,
      converge_steps=40,
  ):
      global_state = query.initial_global_state()
      for t in range(total_steps):
          if learning_rate is not None:
              learning_rate.assign(1.0 / np.sqrt(t + 1))
          actual_sum, global_state = test_utils.run_query(
              query, records, global_state
          )
          if t > converge_steps:
              global_state = query.reset_state(actual_sum, global_state)
              estimate_clip = global_state.sum_state.clip_value
              self.assertNear(estimate_clip, expected_clip, tolerance)
  
imports: from absl.testing import parameterized
  import numpy
  import tensorflow
  from tensorflow_privacy.privacy.dp_query import quantile_adaptive_clip_tree_query
  from tensorflow_privacy.privacy.dp_query import test_utils
label_desc: Use image node_id 9 for calling the QAdaClipTreeResSumQueryTest obj's underlying member method code with example usage: obj._test_estimate_clip_converge(query, records, expected_clip, tolerance, learning_rate, total_steps, converge_steps) without return types