code: def range_search_benchmark(
      self,
      dry_run,
      results: Dict[str, Any],
      index: Index,
      metric_key: str,
      radius: float,
      gt_radius: float,
      range_search_metric_function,
      gt_rsm: float,
  ):
      return self.search_benchmark(
          name="range_search",
          search_func=lambda parameters: self.range_search(
              dry_run=dry_run,
              index=index,
              search_parameters=parameters,
              radius=radius,
              gt_radius=gt_radius,
              range_search_metric_function=range_search_metric_function,
              gt_rsm=gt_rsm,
          )[4:],
          key_func=lambda parameters: index.get_range_search_name(
              search_parameters=parameters,
              query_vectors=self.query_vectors,
              radius=radius,
          )
          + metric_key,
          cost_metrics=["time"],
          perf_metrics=["range_score_max_recall"],
          results=results,
          index=index,
      )
  
imports: import logging
  from copy import copy
  from dataclasses import dataclass
  from operator import itemgetter
  from statistics import median, mean
  from typing import Any, Dict, List, Optional
  from .utils import dict_merge
  from .index import Index, IndexFromCodec, IndexFromFactory
  from .descriptors import DatasetDescriptor, IndexDescriptor
  import faiss
  import numpy
  from scipy.optimize import curve_fit
label_desc: Use image node_id 12 for calling the Benchmark obj's underlying member method code with example usage: obj.range_search_benchmark(dry_run, results, index, metric_key, radius, gt_radius, range_search_metric_function, gt_rsm) and returns: self