code: def test_mixed_search_custom_index_range(self):
      client = self.client
  
      query = self.isolated_query_patch()
      response = client.get(
          "/api/runs/search/images/",
          params={
              "q": query,
              "index_range": "3:5",
              "report_progress": False,
          },
      )
      self.assertEqual(200, response.status_code)
  
      decoded_response = decode_tree(
          decode_encoded_tree_stream(
              response.iter_bytes(chunk_size=512 * 1024)
          )
      )
      self.assertEqual(1, len(decoded_response))
      run_data = decoded_response[self.run_hash]
      self.assertEqual([0, 5], run_data["ranges"]["record_range_total"])
      self.assertEqual([0, 5], run_data["ranges"]["record_range_used"])
      self.assertEqual([0, 5], run_data["ranges"]["index_range_total"])
      self.assertEqual([3, 5], run_data["ranges"]["index_range_used"])
  
      self.assertEqual(2, len(run_data["traces"]))
      trace_data = run_data["traces"][0]
      self.assertEqual("image_lists", trace_data["name"])
      self.assertEqual(5, len(trace_data["values"]))
      img_list = trace_data["values"][0]
      self.assertEqual(2, len(img_list))
  
      trace_data = run_data["traces"][1]
      self.assertEqual("single_images", trace_data["name"])
      self.assertEqual(5, len(trace_data["values"]))
      img_list = trace_data["values"][0]
      self.assertListEqual([], img_list)
  
imports: from parameterized import parameterized
  import random
  from tests.base import ApiTestBase
  from tests.utils import decode_encoded_tree_stream, generate_image_set
  from aim.storage.treeutils import decode_tree
  from aim.storage.context import Context
  from aim.sdk.run import Run
label_desc: Use image node_id 4 for calling the TestImageListsAndSingleImagesSearchApi obj's underlying member method code with example usage: obj.test_mixed_search_custom_index_range() without return types