docstr: collection schema 1: [pk, int64, float_vector, double]
  data file: .npy files in different folders
  Steps:
  1. create collection with partition key enabled, create index and load
  2. import data
  3. verify that import numpy files in a loop
code: def test_partition_key_on_multi_numpy_files(
      self, auto_id, dim, entities, file_nums
  ):
      """
      collection schema 1: [pk, int64, float_vector, double]
      data file: .npy files in different folders
      Steps:
      1. create collection with partition key enabled, create index and load
      2. import data
      3. verify that import numpy files in a loop
      """
      self._connect()
      c_name = cf.gen_unique_str("bulk_ins_parkey")
      fields = [
          cf.gen_int64_field(name=df.pk_field, is_primary=True),
          cf.gen_int64_field(name=df.int_field, is_partition_key=True),
          cf.gen_float_field(name=df.float_field),
          cf.gen_double_field(name=df.double_field),
          cf.gen_float_vec_field(name=df.vec_field, dim=dim),
      ]
      schema = cf.gen_collection_schema(fields=fields)
      self.collection_wrap.init_collection(c_name, schema=schema)
      # build index
      index_params = ct.default_index
      self.collection_wrap.create_index(
          field_name=df.vec_field, index_params=index_params
      )
      # load collection
      self.collection_wrap.load()
      data_fields = [
          f.name
          for f in fields
          if not f.to_dict().get("auto_id", False)
      ]
      task_ids = []
      for i in range(file_nums):
          files = prepare_bulk_insert_numpy_files(
              minio_endpoint=self.minio_endpoint,
              bucket_name=self.bucket_name,
              rows=entities,
              dim=dim,
              data_fields=data_fields,
              file_nums=1,
              force=True,
          )
          task_id, _ = self.utility_wrap.do_bulk_insert(
              collection_name=c_name, files=files
          )
          task_ids.append(task_id)
      (
          success,
          states,
      ) = self.utility_wrap.wait_for_bulk_insert_tasks_completed(
          task_ids=[task_id], timeout=90
      )
      log.info(f"bulk insert state:{success}")
  
      assert success
      log.info(
          f" collection entities: {self.collection_wrap.num_entities}"
      )
      assert self.collection_wrap.num_entities == entities * file_nums
      # verify imported data is indexed
      success = self.utility_wrap.wait_index_build_completed(c_name)
      assert success
      # verify search and query
      log.info(f"wait for load finished and be ready for search")
      self.collection_wrap.load(_refresh=True)
      search_data = cf.gen_vectors(1, dim)
      search_params = ct.default_search_params
      res, _ = self.collection_wrap.search(
          search_data,
          df.vec_field,
          param=search_params,
          limit=1,
          check_task=CheckTasks.check_search_results,
          check_items={"nq": 1, "limit": 1},
      )
  
      # verify data was bulk inserted into different partitions
      segment_num = len(
          self.utility_wrap.get_query_segment_info(c_name)[0]
      )
      num_entities = 0
      empty_partition_num = 0
      for p in self.collection_wrap.partitions:
          if p.num_entities == 0:
              empty_partition_num += 1
          num_entities += p.num_entities
      assert num_entities == entities * file_nums
  
imports: import logging
  import time
  import pytest
  import random
  import numpy
  from pathlib import Path
  from base.client_base import TestcaseBase
  from common import common_func
  from common import common_type
  from common.milvus_sys import MilvusSys
  from common.common_type import CaseLabel, CheckTasks
  from utils.util_k8s import get_pod_ip_name_pairs, get_milvus_instance_name, get_milvus_deploy_tool
  from utils.util_log import test_log
  from common.bulk_insert_data import prepare_bulk_insert_json_files, prepare_bulk_insert_numpy_files, DataField, DataErrorType
label_desc: Use image node_id 14 for calling the TestBulkInsert obj's underlying member method code with example usage: obj.test_partition_key_on_multi_numpy_files(auto_id, dim, entities, file_nums) without return types