[
  {
    "path": ".clang-format",
    "content": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#   http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n---\nBasedOnStyle:  Google\nDerivePointerAlignment: false\nColumnLimit: 80\nIndentWidth: 4\nAccessModifierOffset: -3\nAlwaysBreakAfterReturnType: All\nAllowShortBlocksOnASingleLine: false\nAllowShortFunctionsOnASingleLine: false\nAllowShortIfStatementsOnASingleLine: false\nAlignTrailingComments: true\n\n# Appended Options\nSortIncludes: false\nStandard: Latest\nAlignAfterOpenBracket: Align\nBinPackParameters: false\nBinPackArguments: false\nReflowComments: false"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\npip-wheel-metadata/\nshare/python-wheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.nox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n*.py,cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\ndb.sqlite3-journal\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# IPython\nprofile_default/\nipython_config.py\n\n# pyenv\n.python-version\n\n# pipenv\n#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.\n#   However, in case of collaboration, if having platform-specific dependencies or dependencies\n#   having no cross-platform support, pipenv may install dependencies that don't work, or not\n#   install all needed dependencies.\n#Pipfile.lock\n\n# PEP 582; used by e.g. github.com/David-OConnor/pyflow\n__pypackages__/\n\n# Celery stuff\ncelerybeat-schedule\ncelerybeat.pid\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n.dmypy.json\ndmypy.json\n\n# Pyre type checker\n.pyre/\n*.db\ncompile_commands.json\n\n# CLion\n.idea/\ncmake-build-debug/\n\n# Claude Code\nCLAUDE.md\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"thirdparty/milvus-proto\"]\n\tpath = thirdparty/milvus-proto\n\turl = https://github.com/milvus-io/milvus-proto.git\n[submodule \"thirdparty/milvus\"]\n\tpath = thirdparty/milvus\n\turl = https://github.com/milvus-io/milvus.git\n"
  },
  {
    "path": ".pylintrc",
    "content": "# This Pylint rcfile contains a best-effort configuration to uphold the\n# best-practices and style described in the Google Python style guide:\n#   https://google.github.io/styleguide/pyguide.html\n#\n# Its canonical open-source location is:\n#   https://google.github.io/styleguide/pylintrc\n\n[MASTER]\n\n# Files or directories to be skipped. They should be base names, not paths.\nignore=third_party\n\n# Files or directories matching the regex patterns are skipped. The regex\n# matches against base names, not paths.\nignore-patterns=\n\n# Pickle collected data for later comparisons.\npersistent=no\n\n# List of plugins (as comma separated values of python modules names) to load,\n# usually to register additional checkers.\nload-plugins=\n\n# Use multiple processes to speed up Pylint.\njobs=4\n\n# Allow loading of arbitrary C extensions. Extensions are imported into the\n# active Python interpreter and may run arbitrary code.\nunsafe-load-any-extension=no\n\n\n[MESSAGES CONTROL]\n\n# Only show warnings with the listed confidence levels. Leave empty to show\n# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED\nconfidence=\n\n# Enable the message, report, category or checker with the given id(s). You can\n# either give multiple identifier separated by comma (,) or put this option\n# multiple time (only on the command line, not in the configuration file where\n# it should appear only once). See also the \"--disable\" option for examples.\n#enable=\n\n# Disable the message, report, category or checker with the given id(s). You\n# can either give multiple identifiers separated by comma (,) or put this\n# option multiple times (only on the command line, not in the configuration\n# file where it should appear only once).You can also use \"--disable=all\" to\n# disable everything first and then reenable specific checks. For example, if\n# you want to run only the similarities checker, you can use \"--disable=all\n# --enable=similarities\". If you want to run only the classes checker, but have\n# no Warning level messages displayed, use\"--disable=all --enable=classes\n# --disable=W\"\ndisable=abstract-method,\n        apply-builtin,\n        arguments-differ,\n        attribute-defined-outside-init,\n        backtick,\n        bad-option-value,\n        basestring-builtin,\n        buffer-builtin,\n        c-extension-no-member,\n        consider-using-enumerate,\n        cmp-builtin,\n        cmp-method,\n        coerce-builtin,\n        coerce-method,\n        delslice-method,\n        div-method,\n        duplicate-code,\n        eq-without-hash,\n        execfile-builtin,\n        file-builtin,\n        filter-builtin-not-iterating,\n        fixme,\n        getslice-method,\n        global-statement,\n        hex-method,\n        idiv-method,\n        implicit-str-concat,\n        import-error,\n        import-self,\n        import-star-module-level,\n        inconsistent-return-statements,\n        input-builtin,\n        intern-builtin,\n        invalid-str-codec,\n        locally-disabled,\n        long-builtin,\n        long-suffix,\n        map-builtin-not-iterating,\n        misplaced-comparison-constant,\n        missing-function-docstring,\n        metaclass-assignment,\n        next-method-called,\n        next-method-defined,\n        no-absolute-import,\n        no-else-break,\n        no-else-continue,\n        no-else-raise,\n        no-else-return,\n        no-init,  # added\n        no-member,\n        no-name-in-module,\n        no-self-use,\n        nonzero-method,\n        oct-method,\n        old-division,\n        old-ne-operator,\n        old-octal-literal,\n        old-raise-syntax,\n        parameter-unpacking,\n        print-statement,\n        raising-string,\n        range-builtin-not-iterating,\n        raw_input-builtin,\n        rdiv-method,\n        reduce-builtin,\n        relative-import,\n        reload-builtin,\n        round-builtin,\n        setslice-method,\n        signature-differs,\n        standarderror-builtin,\n        suppressed-message,\n        sys-max-int,\n        too-few-public-methods,\n        too-many-ancestors,\n        too-many-arguments,\n        too-many-boolean-expressions,\n        too-many-branches,\n        too-many-instance-attributes,\n        too-many-locals,\n        too-many-nested-blocks,\n        too-many-public-methods,\n        too-many-return-statements,\n        too-many-statements,\n        trailing-newlines,\n        unichr-builtin,\n        unicode-builtin,\n        unnecessary-pass,\n        unpacking-in-except,\n        useless-else-on-loop,\n        useless-object-inheritance,\n        useless-suppression,\n        using-cmp-argument,\n        wrong-import-order,\n        xrange-builtin,\n        zip-builtin-not-iterating,\n\n\n[REPORTS]\n\n# Set the output format. Available formats are text, parseable, colorized, msvs\n# (visual studio) and html. You can also give a reporter class, eg\n# mypackage.mymodule.MyReporterClass.\noutput-format=text\n\n# Tells whether to display a full report or only the messages\nreports=no\n\n# Python expression which should return a note less than 10 (10 is the highest\n# note). You have access to the variables errors warning, statement which\n# respectively contain the number of errors / warnings messages and the total\n# number of statements analyzed. This is used by the global evaluation report\n# (RP0004).\nevaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)\n\n# Template used to display messages. This is a python new-style format string\n# used to format the message information. See doc for all details\n#msg-template=\n\n\n[BASIC]\n\n# Good variable names which should always be accepted, separated by a comma\ngood-names=main,_\n\n# Bad variable names which should always be refused, separated by a comma\nbad-names=\n\n# Colon-delimited sets of names that determine each other's naming style when\n# the name regexes allow several styles.\nname-group=\n\n# Include a hint for the correct naming format with invalid-name\ninclude-naming-hint=no\n\n# List of decorators that produce properties, such as abc.abstractproperty. Add\n# to this list to register other decorators that produce valid properties.\nproperty-classes=abc.abstractproperty,cached_property.cached_property,cached_property.threaded_cached_property,cached_property.cached_property_with_ttl,cached_property.threaded_cached_property_with_ttl\n\n# Regular expression matching correct function names\nfunction-rgx=^(?:(?P<exempt>setUp|tearDown|setUpModule|tearDownModule)|(?P<camel_case>_?[A-Z][a-zA-Z0-9]*)|(?P<snake_case>_?[a-z][a-z0-9_]*))$\n\n# Regular expression matching correct variable names\nvariable-rgx=^[a-z][a-z0-9_]*$\n\n# Regular expression matching correct constant names\nconst-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$\n\n# Regular expression matching correct attribute names\nattr-rgx=^_{0,2}[a-z][a-z0-9_]*$\n\n# Regular expression matching correct argument names\nargument-rgx=^[a-z][a-z0-9_]*$\n\n# Regular expression matching correct class attribute names\nclass-attribute-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$\n\n# Regular expression matching correct inline iteration names\ninlinevar-rgx=^[a-z][a-z0-9_]*$\n\n# Regular expression matching correct class names\nclass-rgx=^_?[A-Z][a-zA-Z0-9]*$\n\n# Regular expression matching correct module names\nmodule-rgx=^(_?[a-z][a-z0-9_]*|__init__)$\n\n# Regular expression matching correct method names\nmethod-rgx=(?x)^(?:(?P<exempt>_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P<camel_case>_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P<snake_case>_{0,2}[a-z][a-z0-9_]*))$\n\n# Regular expression which should only match function or class names that do\n# not require a docstring.\nno-docstring-rgx=(__.*__|main|test.*|.*test|.*Test)$\n\n# Minimum line length for functions/classes that require docstrings, shorter\n# ones are exempt.\ndocstring-min-length=10\n\n\n[TYPECHECK]\n\n# List of decorators that produce context managers, such as\n# contextlib.contextmanager. Add to this list to register other decorators that\n# produce valid context managers.\ncontextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager\n\n# Tells whether missing members accessed in mixin class should be ignored. A\n# mixin class is detected if its name ends with \"mixin\" (case insensitive).\nignore-mixin-members=yes\n\n# List of module names for which member attributes should not be checked\n# (useful for modules/projects where namespaces are manipulated during runtime\n# and thus existing member attributes cannot be deduced by static analysis. It\n# supports qualified module names, as well as Unix pattern matching.\nignored-modules=\n\n# List of class names for which member attributes should not be checked (useful\n# for classes with dynamically set attributes). This supports the use of\n# qualified names.\nignored-classes=optparse.Values,thread._local,_thread._local\n\n# List of members which are set dynamically and missed by pylint inference\n# system, and so shouldn't trigger E1101 when accessed. Python regular\n# expressions are accepted.\ngenerated-members=\n\n\n[FORMAT]\n\n# Maximum number of characters on a single line.\nmax-line-length=120\n\n# TODO(https://github.com/PyCQA/pylint/issues/3352): Direct pylint to exempt\n# lines made too long by directives to pytype.\n\n# Regexp for a line that is allowed to be longer than the limit.\nignore-long-lines=(?x)(\n  ^\\s*(\\#\\ )?<?https?://\\S+>?$|\n  ^\\s*(from\\s+\\S+\\s+)?import\\s+.+$)\n\n# Allow the body of an if to be on the same line as the test if there is no\n# else.\nsingle-line-if-stmt=yes\n\n# Maximum number of lines in a module\nmax-module-lines=99999\n\n# String used as indentation unit.  The internal Google style guide mandates 2\n# spaces.  Google's externaly-published style guide says 4, consistent with\n# PEP 8.  Here, we use 2 spaces, for conformity with many open-sourced Google\n# projects (like TensorFlow).\n# milvus use 4 spaces\nindent-string='    '\n\n# Number of spaces of indent required inside a hanging  or continued line.\nindent-after-paren=4\n\n# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.\nexpected-line-ending-format=\n\n\n[MISCELLANEOUS]\n\n# List of note tags to take in consideration, separated by a comma.\nnotes=TODO\n\n\n[STRING]\n\n# This flag controls whether inconsistent-quotes generates a warning when the\n# character used as a quote delimiter is used inconsistently within a module.\ncheck-quote-consistency=yes\n\n\n[VARIABLES]\n\n# Tells whether we should check for unused import in __init__ files.\ninit-import=no\n\n# A regular expression matching the name of dummy variables (i.e. expectedly\n# not used).\ndummy-variables-rgx=^\\*{0,2}(_$|unused_|dummy_)\n\n# List of additional names supposed to be defined in builtins. Remember that\n# you should avoid to define new builtins when possible.\nadditional-builtins=\n\n# List of strings which can identify a callback function by name. A callback\n# name must start or end with one of those strings.\ncallbacks=cb_,_cb\n\n# List of qualified module names which can have objects that can redefine\n# builtins.\nredefining-builtins-modules=six,six.moves,past.builtins,future.builtins,functools\n\n\n[LOGGING]\n\n# Logging modules to check that the string format arguments are in logging\n# function parameter format\nlogging-modules=logging,absl.logging,tensorflow.io.logging\n\n\n[SIMILARITIES]\n\n# Minimum lines number of a similarity.\nmin-similarity-lines=4\n\n# Ignore comments when computing similarities.\nignore-comments=yes\n\n# Ignore docstrings when computing similarities.\nignore-docstrings=yes\n\n# Ignore imports when computing similarities.\nignore-imports=no\n\n\n[SPELLING]\n\n# Spelling dictionary name. Available dictionaries: none. To make it working\n# install python-enchant package.\nspelling-dict=\n\n# List of comma separated words that should not be checked.\nspelling-ignore-words=\n\n# A path to a file that contains private dictionary; one word per line.\nspelling-private-dict-file=\n\n# Tells whether to store unknown words to indicated private dictionary in\n# --spelling-private-dict-file option instead of raising a message.\nspelling-store-unknown-words=no\n\n\n[IMPORTS]\n\n# Deprecated modules which should not be used, separated by a comma\ndeprecated-modules=regsub,\n                   TERMIOS,\n                   Bastion,\n                   rexec,\n                   sets\n\n# Create a graph of every (i.e. internal and external) dependencies in the\n# given file (report RP0402 must not be disabled)\nimport-graph=\n\n# Create a graph of external dependencies in the given file (report RP0402 must\n# not be disabled)\next-import-graph=\n\n# Create a graph of internal dependencies in the given file (report RP0402 must\n# not be disabled)\nint-import-graph=\n\n# Force import order to recognize a module as part of the standard\n# compatibility libraries.\nknown-standard-library=\n\n# Force import order to recognize a module as part of a third party library.\nknown-third-party=enchant, absl\n\n# Analyse import fallback blocks. This can be used to support both Python 2 and\n# 3 compatible code, which means that the block might have code that exists\n# only in one or another interpreter, leading to false positives when analysed.\nanalyse-fallback-blocks=no\n\n\n[CLASSES]\n\n# List of method names used to declare (i.e. assign) instance attributes.\ndefining-attr-methods=__init__,\n                      __new__,\n                      setUp\n\n# List of member names, which should be excluded from the protected access\n# warning.\nexclude-protected=_asdict,\n                  _fields,\n                  _replace,\n                  _source,\n                  _make\n\n# List of valid names for the first argument in a class method.\nvalid-classmethod-first-arg=cls,\n                            class_\n\n# List of valid names for the first argument in a metaclass class method.\nvalid-metaclass-classmethod-first-arg=mcs\n\n\n[EXCEPTIONS]\n\n# Exceptions that will emit a warning when being caught. Defaults to\n# \"Exception\"\novergeneral-exceptions=builtins.StandardError,\n                       builtins.Exception,\n                       builtins.BaseException\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n# use this file except in compliance with the License. You may obtain a copy of\n# the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n# License for the specific language governing permissions and limitations under\n# the License\n\ncmake_minimum_required(VERSION 3.20)\nproject(milvus-lite)\n\noption(ENABLE_UNIT_TESTS \"Enable unit tests\" ON)\nmessage(STATUS \"Enable testing: ${ENABLE_UNIT_TESTS}\")\noption(USE_SYSTEM_DEPS \"Build with system dependencies rather than Conan\" OFF)\n\nlist(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/ ${CMAKE_SOURCE_DIR}/cmake)\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED True)\nset(CMAKE_EXPORT_COMPILE_COMMANDS ON)\nset(COMPILER_SUPPORTS_CXX17 True)\nif(LINUX)\n  # When building for Linux, tell the dynamic loader to load shared libraries\n  # from executable's directory. This also prevents CMake from leaking build\n  # paths into the distributed executable.\n  set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)\n  set(CMAKE_INSTALL_RPATH \"$ORIGIN\")\nendif()\nif(APPLE)\n  set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0)\nendif()\nset(CMAKE_VERBOSE_MAKEFILE ON)\nif(CMAKE_BUILD_TYPE STREQUAL \"Debug\")\n  set(CMAKE_CXX_FLAGS \"-g  -Wall -fPIC ${CMAKE_CXX_FLAGS}\")\nelse()\n  set(CMAKE_CXX_FLAGS \"-O3 -Wall -fPIC ${CMAKE_CXX_FLAGS}\")\nendif()\n\n\nif(CMAKE_LITE_BUILD_TYPE STREQUAL \"SHARED\")\n  set(LITE_BUILD_TYPE \"SHARED\")\nelse()\n  set(LITE_BUILD_TYPE \"STATIC\")\nendif()\n\nif(APPLE)\n  if(DEFINED ENV{HOMEBREW_PREFIX})\n    message(STATUS \"Homebrew prefix from environment: $ENV{HOMEBREW_PREFIX}\")\n    set(OMP_INCLUDE $ENV{HOMEBREW_PREFIX}/opt/libomp/include)\n    include_directories($ENV{HOMEBREW_PREFIX}/opt/libomp/include)\n    link_directories($ENV{HOMEBREW_PREFIX}/opt/libomp/lib)\n\n  else()\n    message(STATUS \"Homebrew prefix from environment not found, use default\")\n    set(OMP_INCLUDE /opt/homebrew/opt/libomp/include)\n    include_directories(/opt/homebrew/opt/libomp/include)\n    link_directories(/opt/homebrew/opt/libomp/lib)\n  endif()\n\n  set(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} -lomp\")\n  set(OpenMP_C \"${CMAKE_C_COMPILER}\")\n  set(OpenMP_C_FLAGS \"-Xclang -fopenmp -I${OMP_INCLUDE}\")\n  set(OpenMP_C_LIB_NAMES \"libomp\")\n  set(OpenMP_libomp_LIBRARY \"omp\")\n\n  set(OpenMP_CXX \"${CMAKE_CXX_COMPILER}\")\n  set(OpenMP_CXX_FLAGS \"-Xclang -fopenmp -I${OMP_INCLUDE}\")\n  set(OpenMP_CXX_LIB_NAMES \"libomp\")\n  set(OpenMP_libomp_LIBRARY \"omp\")\nendif()\n\nset(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)\nset(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)\nset(MILVUS_LITE True)\n\ninclude(FetchContent)\n\nset(CONAN_LIBS \"${CONAN_LIBS};marisa::marisa;\")\n\nfind_package(SQLiteCpp REQUIRED)\ninclude_directories(${SQLiteCpp_INCLUDE_DIRS})\n\nfind_package(antlr4-runtime REQUIRED)\ninclude_directories(${antlr4-cppruntime_INCLUDES})\n\n# note: gRPC needs to be included before protobuf when using system dependencies.\nfind_package(gRPC REQUIRED)\ninclude_directories(${gRPC_INCLUDE_DIRS})\n\nfind_package(Protobuf REQUIRED)\nif(USE_SYSTEM_DEPS)\n  set(PROTOBUF_LIBRARIES protobuf::libprotobuf)\nelse()\n  set(PROTOBUF_LIBRARIES protobuf::protobuf)\n  include_directories(${protobuf_INCLUDE_DIRS})\nendif()\n\nfind_package(TBB REQUIRED)\ninclude_directories(${TBB_tbb_INCLUDE_DIRS})\n\nfind_package(nlohmann_json REQUIRED)\ninclude_directories(${nlohmann_json_INCLUDE_DIRS})\n\nfind_package(Boost REQUIRED)\ninclude_directories(${Boost_INCLUDE_DIRS})\n\nfind_package(Libevent REQUIRED)\ninclude_directories(${libevent_INCLUDE_DIRS})\n\nfind_package(folly REQUIRED)\ninclude_directories(${Folly_INCLUDE_DIRS})\n\nfind_package(fmt REQUIRED)\ninclude_directories(${fmt_INCLUDE_DIRS})\n\nfind_package(glog REQUIRED)\ninclude_directories(${glog_INCLUDE_DIRS})\n\nfind_package(gflags REQUIRED)\ninclude_directories(${gflags_INCLUDE_DIRS})\n\nfind_package(Arrow REQUIRED)\nif(USE_SYSTEM_DEPS)\n  find_package(Parquet REQUIRED)\n  set(ARROW_LIBRARIES Arrow::arrow_shared Parquet::parquet_shared)\nelse()\n  set(ARROW_LIBRARIES arrow::arrow)\n  include_directories(${arrow_INCLUDE_DIRS})\nendif()\n\nfind_package(re2 REQUIRED)\ninclude_directories(${re2_INCLUDE_DIRS})\nlink_directories(${re2_LIB_DIRS})\n\nfind_package(double-conversion REQUIRED)\ninclude_directories(${double-conversion_INCLUDE_DIRS})\n\nfind_package(prometheus-cpp REQUIRED)\nif(USE_SYSTEM_DEPS)\n  set(PROMETHEUS_CPP_TARGETS prometheus-cpp::pull)\nelse()\n  set(PROMETHEUS_CPP_TARGETS prometheus-cpp::prometheus-cpp)\n  include_directories(${prometheus-cpp_INCLUDE_DIRS})\nendif()\n\nif(USE_SYSTEM_DEPS)\n  find_package(Marisa REQUIRED)\n  set(MARISA_LIBRARIES Marisa::marisa)\nelse()\n  find_package(marisa REQUIRED)\n  set(MARISA_LIBRARIES marisa::marisa)\n  include_directories(${marisa_INCLUDE_DIRS})\nendif()\n\nfind_package(yaml-cpp REQUIRED)\ninclude_directories(${yaml-cpp_INCLUDE_DIRS})\n\nfind_package(RapidJSON REQUIRED)\ninclude_directories(${RapidJSON_INCLUDE_DIRS})\n\nfind_package(roaring REQUIRED)\ninclude_directories(${roaring_INCLUDE_DIRS})\n\nfind_package(prometheus-cpp REQUIRED)\ninclude_directories(${prometheus-cpp_INCLUDE_DIRS})\n\nif(NOT USE_SYSTEM_DEPS)\n  include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)\nendif()\n\nFetchContent_Declare(\n  simdjson\n  GIT_REPOSITORY https://github.com/simdjson/simdjson.git\n  GIT_TAG v3.1.7)\nFetchContent_MakeAvailable(simdjson)\n\ninclude_directories(${simdjson_SOURCE_DIR}/include)\n\nadd_definitions(-DANTLR4CPP_STATIC)\nadd_definitions(-DHAVE_CPP_STDLIB)\nadd_definitions(-DMILVUS_LITE)\nadd_definitions(-DFMT_HEADER_ONLY)\n\nif(APPLE)\n  add_definitions(\"-D_GNU_SOURCE\")\nendif()\n\nfile(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/pb)\n\nadd_library(\n  milvus_proto STATIC\n  \"${CMAKE_SOURCE_DIR}/src/proto/plan.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/schema.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/common.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/segcore.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/milvus.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/msg.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/feder.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/cgo_msg.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/index_cgo_msg.proto\"\n  \"${CMAKE_SOURCE_DIR}/src/proto/rg.proto\")\n\nset(PROTO_BINARY_DIR \"${CMAKE_CURRENT_BINARY_DIR}/pb\")\n\nprotobuf_generate(\n  TARGET milvus_proto IMPORT_DIRS \"${CMAKE_SOURCE_DIR}/src/proto\"\n  PROTOC_OUT_DIR \"${PROTO_BINARY_DIR}\")\n\nadd_library(milvus_grpc_service STATIC\n            \"${CMAKE_SOURCE_DIR}/src/proto/milvus.proto\")\n\ntarget_link_libraries(milvus_grpc_service gRPC::grpc++ milvus_proto)\n\nprotobuf_generate(\n  TARGET\n  milvus_grpc_service\n  # OUT_VAR PROTO_GENERATED_FILES\n  LANGUAGE\n  grpc\n  GENERATE_EXTENSIONS\n  .grpc.pb.h\n  .grpc.pb.cc\n  PLUGIN\n  \"protoc-gen-grpc=\\$<TARGET_FILE:gRPC::grpc_cpp_plugin>\"\n  IMPORT_DIRS\n  \"${CMAKE_SOURCE_DIR}/src/proto\"\n  PROTOC_OUT_DIR\n  \"${PROTO_BINARY_DIR}\")\n\ninclude_directories(\"${CMAKE_SOURCE_DIR}/src/parser/\")\ninclude_directories(\"${CMAKE_SOURCE_DIR}/src/parser/antlr/\")\ninclude_directories(\"${CMAKE_BINARY_DIR}/pb\")\ninclude_directories(\"${CMAKE_BINARY_DIR}\")\ninclude_directories(${PROTO_BINARY_DIR})\n\nadd_library(\n  parser STATIC\n  \"${CMAKE_SOURCE_DIR}/src/parser/parser.cc\"\n  \"${CMAKE_SOURCE_DIR}/src/parser/antlr/PlanBaseVisitor.cpp\"\n  \"${CMAKE_SOURCE_DIR}/src/parser/antlr/PlanLexer.cpp\"\n  \"${CMAKE_SOURCE_DIR}/src/parser/antlr/PlanParser.cpp\"\n  \"${CMAKE_SOURCE_DIR}/src/parser/antlr/PlanVisitor.cpp\")\n\ntarget_link_libraries(parser milvus_proto ${antlr4-cppruntime_LIBRARIES})\n\ninclude(thirdparty/milvus/internal/core/cmake/BuildUtils.cmake)\ninclude(thirdparty/milvus/internal/core/cmake/Utils.cmake)\nset(WITH_LIGHT ON CACHE BOOL \"\" FORCE)\nadd_subdirectory(thirdparty/milvus/internal/core/thirdparty/knowhere)\n\ninclude_directories(\n  \"${CMAKE_SOURCE_DIR}/thirdparty/milvus/internal/core/thirdparty/\")\ninclude_directories(\n  \"${CMAKE_SOURCE_DIR}/thirdparty/milvus/internal/core/thirdparty/tantivy/tantivy-binding/include/\"\n)\ninclude_directories(\n  \"${CMAKE_SOURCE_DIR}/thirdparty/milvus/internal/core/thirdparty/tantivy/\")\n\ninclude_directories(\"${knowhere_SOURCE_DIR}/include\")\n\n\n#include(cmake/milvus-storage.cmake)\n\ninclude_directories(\"${CMAKE_SOURCE_DIR}/thirdparty/milvus/internal/core/src/\")\nadd_library(\n  boost_bitset_ext\n  thirdparty/milvus/internal/core/thirdparty/boost_ext/dynamic_bitset_ext.cpp)\n\nif(CMAKE_BUILD_TYPE STREQUAL \"Debug\")\n  set(CARGO_CMD cargo build)\nelse()\n  set(CARGO_CMD cargo build --release)\nendif()\n\nif(CMAKE_SYSTEM_NAME STREQUAL \"Android\" AND CMAKE_SYSTEM_PROCESSOR STREQUAL\n                                            \"aarch64\")\n  if(CMAKE_BUILD_TYPE STREQUAL \"Debug\")\n    set(CARGO_CMD cargo build --target aarch64-linux-android)\n  else()\n    set(CARGO_CMD cargo build --target aarch64-linux-android --release)\n  endif()\n\nendif()\n\nset(HOME_VAR $ENV{HOME})\n\nadd_custom_command(\n  OUTPUT ls_cargo\n  COMMENT \"ls cargo\"\n  COMMAND ls ${HOME_VAR}/.cargo/bin/)\n\nadd_custom_target(ls_cargo_target DEPENDS ls_cargo)\n\nadd_custom_command(\n  OUTPUT compile_tantivy\n  COMMENT \"Compiling tantivy binding\"\n  COMMAND CARGO_TARGET_DIR=${CMAKE_CURRENT_BINARY_DIR}\n          MACOSX_DEPLOYMENT_TARGET=11.0 ${CARGO_CMD}\n  WORKING_DIRECTORY\n    ${CMAKE_SOURCE_DIR}/thirdparty/milvus/internal/core/thirdparty/tantivy/tantivy-binding\n  DEPENDS ls_cargo_target)\n\nadd_custom_target(tantivy_binding_target DEPENDS compile_tantivy)\n\nadd_library(tantivy_binding STATIC IMPORTED)\nstring(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)\nset(IMPORT_LOCATION \"${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE_LOWER}/libtantivy_binding.a\")\n\nif(CMAKE_SYSTEM_NAME STREQUAL \"Android\" AND CMAKE_SYSTEM_PROCESSOR STREQUAL\n                                            \"aarch64\")\n  set(IMPORT_LOCATION\n      \"${CMAKE_CURRENT_BINARY_DIR}/aarch64-linux-android/${CMAKE_BUILD_TYPE_LOWER}/libtantivy_binding.a\"\n  )\nendif()\n\nset_target_properties(\n  tantivy_binding\n  PROPERTIES\n    IMPORTED_GLOBAL TRUE\n    IMPORTED_LOCATION \"${IMPORT_LOCATION}\"\n    INTERFACE_INCLUDE_DIRECTORIES\n    \"${CMAKE_SOURCE_DIR}/thirdparty/milvus/internal/core/thirdparty/tantivy/tantivy-binding/include/\"\n)\n\nadd_dependencies(tantivy_binding tantivy_binding_target)\n\nexecute_process(\n  COMMAND git diff --quiet\n  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/thirdparty/milvus\n  RESULT_VARIABLE CHECK_RESULT)\n\nif(${CHECK_RESULT} EQUAL 0)\n  message(\"Apply milvus patch...\")\n  execute_process(\n    COMMAND git apply ${CMAKE_SOURCE_DIR}/thirdparty/milvus.patch\n    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/thirdparty/milvus\n    OUTPUT_VARIABLE result)\nelse()\n  message(\"Milvus not need applying patch...\")\nendif()\n\nset(MILVUS_ENGINE_SRC \"${CMAKE_SOURCE_DIR}/thirdparty/milvus/internal/core/src\")\n\nadd_subdirectory(thirdparty/milvus/internal/core/src/log)\nadd_subdirectory(thirdparty/milvus/internal/core/src/config)\nadd_subdirectory(thirdparty/milvus/internal/core/src/common)\nadd_subdirectory(thirdparty/milvus/internal/core/src/storage)\nadd_subdirectory(thirdparty/milvus/internal/core/src/query)\nadd_subdirectory(thirdparty/milvus/internal/core/src/exec)\nadd_subdirectory(thirdparty/milvus/internal/core/src/index)\nadd_subdirectory(thirdparty/milvus/internal/core/src/segcore)\nadd_subdirectory(thirdparty/milvus/internal/core/src/bitset)\nadd_subdirectory(thirdparty/milvus/internal/core/src/indexbuilder)\nadd_subdirectory(thirdparty/milvus/internal/core/src/futures)\nadd_subdirectory(thirdparty/milvus/internal/core/src/monitor)\n\nadd_library(milvus_core STATIC\n    $<TARGET_OBJECTS:milvus_log>\n    $<TARGET_OBJECTS:milvus_config>\n    $<TARGET_OBJECTS:milvus_common>\n    $<TARGET_OBJECTS:milvus_storage>\n    $<TARGET_OBJECTS:milvus_index>\n    $<TARGET_OBJECTS:milvus_query>\n    $<TARGET_OBJECTS:milvus_segcore>\n    $<TARGET_OBJECTS:milvus_indexbuilder>\n    $<TARGET_OBJECTS:milvus_exec>\n    $<TARGET_OBJECTS:milvus_bitset>\n    $<TARGET_OBJECTS:milvus_futures>\n    $<TARGET_OBJECTS:milvus_monitor>\n)\n\ntarget_link_libraries(\n  milvus_core\n  PUBLIC\n  milvus_proto\n  ${PROMETHEUS_CPP_TARGET}\n  knowhere\n)\n\nif(ENABLE_UNIT_TESTS)\n  include(CTest)\n  enable_testing()\nendif()\n\nadd_subdirectory(src)\n\nfind_program(MEMORYCHECK_COMMAND NAMES valgrind)\nset(MEMORYCHECK_COMMAND_OPTIONS\n    \"--trace-children=yes --track-origins=yes --leak-check=full --show-leak-kinds=all\"\n)\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing Guide\n\nWelcome contributors! This guide will help you get started with contributing to Milvus-lite.\n\nPlease always find the latest version of this guide at [CONTRIBUTING.md:main](https://github.com/milvus-io/milvus-lite/blob/main/CONTRIBUTING.md)\n\n## How to set up the development environment\nThe Milvus-lite project is written in Python. To set up the development environment, you need to install Python 3.8 or later. We recommend that you use a virtual environment to install the dependencies, although the Milvus-lite project requires a very small number of external packages.\n\nThe main dependencies for build Milvus-lite is to install dependencies of milvis, so generally you could refer to Milvus's [install_deps.sh](https://github.com/milvus-io/milvus/blob/master/scripts/install_deps.sh) as a reference. Please note, you should follow the related branch of Milvus. For example, if you want to build Milvus-lite with Milvus 2.4.0, you should checkout the branch of Milvus 2.4.0.\n\nFor python3 build wheel, we use the build module and requires newer version of setuptools. So you should install the latest version of setuptools and build.\n\n## Build Milvus-lite\n```bash\npython3 setup.py bdist_wheel\n```\n\nAfter build, you shoud have wheel package under dist folder."
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n    <img src=\"https://raw.githubusercontent.com/milvus-io/milvus-lite/refs/heads/main/milvus_lite_logo.png#gh-light-mode-only\" width=\"60%\"/>\n</div>\n\n<h3 align=\"center\">\n    <p style=\"text-align: center;\"> <span style=\"font-weight: bold; font: Arial, sans-serif;\"></span>A lightweight version of Milvus</p>\n</h3>\n\n<div class=\"column\" align=\"middle\">\n  <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">\n    <img src=\"https://img.shields.io/badge/license-apache2.0-green?style=flat\" alt=\"license\"/>\n  </a>\n  <a href=\"https://pypi.org/project/milvus-lite/\">\n    <img src=\"https://img.shields.io/pypi/v/milvus-lite?label=Release&color&logo=Python\" alt=\"github actions\">\n  </a>\n    <a href=\"https://pypi.org/project/milvus-lite/\">\n    <img src=\"https://img.shields.io/pypi/dm/milvus-lite.svg?color=bright-green&logo=Pypi\" alt=\"github actions\">\n  </a>\n</div>\n\n\n# Introduction\nMilvus Lite is the lightweight version of [Milvus](https://github.com/milvus-io/milvus), a high-performance vector database that powers AI applications with vector similarity search. This repo contains the core components of Milvus Lite. \n\nWith Milvus Lite, you can start building an AI application with vector similarity search within minutes! Milvus Lite is good for running in the following environment:\n- Jupyter Notebook / Google Colab\n- Laptops\n- Edge Devices\n\nMilvus Lite can be imported into your Python application, providing the core vector search functionality of Milvus. Milvus Lite is already included in the [Python SDK of Milvus](https://github.com/milvus-io/pymilvus). To use it, you just need `pip install pymilvus`. \n\nMilvus Lite uses the same API as Milvus Standalone and Distributed, providing a consistent experience across environments. Develop your GenAI applications once and run them anywhere: on a laptop or Jupyter Notebook with Milvus Lite, in a Docker container with Milvus Standalone, or on a K8s cluster with Milvus Distributed for large-scale production.\n\n<div align=\"center\">\n    <img src=\"https://milvus.io/docs/v2.5.x/assets/select-deployment-option.png\" width=\"80%\"/>\n</div>\n\nMilvus Lite is only suitable for small scale prototyping (usually less than a million vectors) or edge devices. For large scale production, we recommend using [Milvus Standalone](https://milvus.io/docs/install-overview.md#Milvus-Standalone) or [Milvus Distributed](https://milvus.io/docs/install-overview.md#Milvus-Distributed). You can also consider the fully-managed Milvus on [Zilliz Cloud](https://zilliz.com/cloud).\n\n# Requirements\nMilvus Lite currently supports the following environments:\n- Ubuntu >= 20.04 (x86_64 and arm64)\n- MacOS >= 11.0 (Apple Silicon M1/M2 and x86_64)\n\n***Note:*** Windows is not yet supported.\n\n# Installation\n```shell\npip install -U pymilvus[milvus-lite]\n```\nWe recommend using `pymilvus`. You can `pip install` with `-U` to force update to the latest version and `milvus-lite` will be automatically installed.\n\nIf you want to explicitly install `milvus-lite` package, or you have installed an older version of `milvus-lite` and would like to update it, you can do `pip install -U milvus-lite`.\n\n# Usage\nIn `pymilvus`, specify a local file name as uri parameter of MilvusClient will use Milvus Lite.\n```python\nfrom pymilvus import MilvusClient\nclient = MilvusClient(\"./milvus_demo.db\")\n```\n\n> **_NOTE:_**  Note that the same API also applies to Milvus Standalone, Milvus Distributed and Zilliz Cloud, the only difference is to replace local file name to remote server endpoint and credentials, e.g. \n`client = MilvusClient(uri=\"http://localhost:19530\", token=\"username:password\")` for self-hosted Milvus server.\n\n# Examples\nFollowing is a simple demo showing how to use Milvus Lite for text search. There are more comprehensive [examples](https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials) for using Milvus Lite to build applications\nsuch as [RAG](https://github.com/milvus-io/bootcamp/blob/master/bootcamp/tutorials/quickstart/build_RAG_with_milvus.ipynb), [image search](https://github.com/milvus-io/bootcamp/blob/master/bootcamp/tutorials/quickstart/image_search_with_milvus.ipynb), and using Milvus Lite in popular RAG framework such as [LangChain](https://github.com/milvus-io/bootcamp/blob/master/bootcamp/tutorials/integration/rag_with_milvus_and_langchain.ipynb) and [LlamaIndex](https://github.com/milvus-io/bootcamp/blob/master/bootcamp/tutorials/integration/rag_with_milvus_and_llamaindex.ipynb)!\n\n```python\nfrom pymilvus import MilvusClient\nimport numpy as np\n\nclient = MilvusClient(\"./milvus_demo.db\")\nclient.create_collection(\n    collection_name=\"demo_collection\",\n    dimension=384  # The vectors we will use in this demo has 384 dimensions\n)\n\n# Text strings to search from.\ndocs = [\n    \"Artificial intelligence was founded as an academic discipline in 1956.\",\n    \"Alan Turing was the first person to conduct substantial research in AI.\",\n    \"Born in Maida Vale, London, Turing was raised in southern England.\",\n]\n# For illustration, here we use fake vectors with random numbers (384 dimension).\n\nvectors = [[ np.random.uniform(-1, 1) for _ in range(384) ] for _ in range(len(docs)) ]\ndata = [ {\"id\": i, \"vector\": vectors[i], \"text\": docs[i], \"subject\": \"history\"} for i in range(len(vectors)) ]\nres = client.insert(\n    collection_name=\"demo_collection\",\n    data=data\n)\n\n# This will exclude any text in \"history\" subject despite close to the query vector.\nres = client.search(\n    collection_name=\"demo_collection\",\n    data=[vectors[0]],\n    filter=\"subject == 'history'\",\n    limit=2,\n    output_fields=[\"text\", \"subject\"],\n)\nprint(res)\n\n# a query that retrieves all entities matching filter expressions.\nres = client.query(\n    collection_name=\"demo_collection\",\n    filter=\"subject == 'history'\",\n    output_fields=[\"text\", \"subject\"],\n)\nprint(res)\n\n# delete\nres = client.delete(\n    collection_name=\"demo_collection\",\n    filter=\"subject == 'history'\",\n)\nprint(res)\n```\n\n# Supported Features\n\n## Functionality\nMilvus Lite shares the same API as Milvus Standalone, Milvus Distributed and Zilliz Cloud, offering core features including:\n- Insert/upsert operations\n- Vector data persistence and collection management\n- Dense, sparse, and hybrid vector search\n- Metadata filtering\n- Multi-vector support \n\n## Index Type\nMilvus Lite has limited index type support compared to other Milvus deployments:\n\n- Prior to version 2.4.11:\n  - Only supports the [FLAT](https://milvus.io/docs/index.md?tab=floating#FLAT) index type\n  - Uses FLAT index regardless of the specified index type in collection creation\n\n- Version 2.4.11 and later:\n  - Supports both [FLAT](https://milvus.io/docs/index.md?tab=floating#FLAT) and [IVF_FLAT](https://milvus.io/docs/index.md?tab=floating#IVFFLAT) index types\n  - For IVF_FLAT indexes:\n    - Data size < 100,000: Automatically uses FLAT index internally for better performance\n    - Data size ≥ 100,000: Constructs and uses IVF_FLAT index as specified\n\n# Known Limitations\n\nMilvus Lite does not support partitions, users/roles/RBAC, alias. To use those features, please choose other Milvus deployment types such as [Standalone](https://milvus.io/docs/install-overview.md#Milvus-Standalone), [Distributed](https://milvus.io/docs/install-overview.md#Milvus-Distributed) or [Zilliz Cloud](https://zilliz.com/cloud) (fully-managed Milvus).\n\n# Migrating data from Milvus Lite\n\nAll data stored in Milvus Lite can be easily exported and loaded into other types of Milvus deployment, such as Milvus Standalone on Docker, Milvus Distributed on K8s, or fully-managed Milvus on [Zilliz Cloud](https://zilliz.com/cloud).\n\nMilvus Lite provides a command line tool that can dump data into a json file, which can be imported into self-hosted [Milvus](https://github.com/milvus-io/milvus) or fully-managed Milvus on [Zilliz Cloud](https://zilliz.com/cloud). \n\n```shell\npip install -U \"pymilvus[bulk_writer]\"\n# The `milvus-lite` command line tool is already included in `milvus-lite` package which is part of \"pymilvus\", but it also needs some dependencies from `pymilvus[bulk_writer]` for dumping data.\n\nmilvus-lite dump -h\n\nusage: milvus-lite dump [-h] [-d DB_FILE] [-c COLLECTION] [-p PATH]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -d DB_FILE, --db-file DB_FILE\n                        milvus lite db file\n  -c COLLECTION, --collection COLLECTION\n                        collection that need to be dumped\n  -p PATH, --path PATH  dump file storage dir\n```\nThe following example dumps all data from `demo_collection` collection that's stored in `./milvus_demo.db` (a user specified local file that persists data for Milvus Lite)\n\nTo export data:\n\n```shell\nmilvus-lite dump -d ./milvus_demo.db -c demo_collection -p ./data_dir\n# ./milvus_demo.db: milvus lite db file\n# demo_collection: collection that need to be dumped\n#./data_dir : dump file storage dir\n```\n\nYou can use the dump file as input to upload data to Zilliz Cloud via [Data Import](https://docs.zilliz.com/docs/data-import), or a self-hosted Milvus server via [Bulk Insert](https://milvus.io/docs/import-data.md).\n# Contributing\nIf you want to contribute to Milvus Lite, please read the [Contributing Guide](https://github.com/milvus-io/milvus-lite/blob/main/CONTRIBUTING.md) first.\n\n# Report a bug\nFor any bug or feature request, please report it by submitting an issue in [milvus-lite](https://github.com/milvus-io/milvus-lite/issues/new/choose) repo.\n\n# License\nMilvus Lite is under the Apache 2.0 license. See the [LICENSE](https://github.com/milvus-io/milvus-lite/blob/main/LICENSE) file for details.\n"
  },
  {
    "path": "ci/e2e.groovy",
    "content": "#!/usr/bin/env groovy\n\nint total_timeout_minutes = 60 * 5\n\npipeline {\n    options {\n        timestamps()\n        timeout(time: total_timeout_minutes, unit: 'MINUTES')\n        buildDiscarder logRotator(artifactDaysToKeepStr: '30')\n        parallelsAlwaysFailFast()\n        preserveStashes(buildCount: 5)\n        disableConcurrentBuilds(abortPrevious: true)\n    }\n    agent {\n            kubernetes {\n                cloud '4am'\n                inheritFrom 'milvus-e2e-4am'\n                defaultContainer 'main'\n                yamlFile 'ci/rte-build.yaml'\n                customWorkspace '/home/jenkins/agent/workspace'\n            }\n    }\n    environment {\n        DOCKER_BUILDKIT = 1\n    }\n\n    stages {\n        stage('Build') {\n            steps {\n                container('main') {\n                    script {\n                        sh '''\n\n                        MIRROR_URL=\"https://docker-nexus-ci.zilliz.cc\" ./ci/set_docker_mirror.sh\n                        '''\n                        sh '''\n                         docker run --net=host  \\\n                            -e CONAN_USER_HOME=/root/  -v \\$PWD:/root/milvus-lite -v /root/.conan:/root/.conan -w /root/milvus-lite  \\\n                            milvusdb/milvus-env:lite-main bash ci/entrypoint.sh\n                         '''\n                    }\n                }\n            }\n        }\n        stage('arhive Artifacts ') {\n            steps {\n                container('main') {\n                    archiveArtifacts artifacts: 'python/dist/*.whl',\n                     allowEmptyArchive: true,\n                     fingerprint: true,\n                     onlyIfSuccessful: true\n                }\n            }\n        }\n        stage('install wheel') {\n            steps {\n                container('pytest') {\n                    sh '''\n                  pip install ./python/dist/*.whl\n                  '''\n                }\n            }\n        }\n        stage('Test') {\n            steps {\n                container('pytest') {\n                    sh '''\n                    bash ci/test.sh -m e2e\n                  '''\n                }\n            }\n        }\n    }\n    post {\n        unsuccessful {\n            container('jnlp') {\n                dir('ci') {\n                    script {\n                        def authorEmail = sh(returnStdout: true, script: './get_author_email.sh ')\n                        emailext subject: '$DEFAULT_SUBJECT',\n                      body: '$DEFAULT_CONTENT',\n                      recipientProviders: [developers(), culprits()],\n                      replyTo: '$DEFAULT_REPLYTO',\n                      to: \"${authorEmail},devops@zilliz.com\"\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "ci/entrypoint.sh",
    "content": "#!/bin/bash\ngit config --global --add safe.directory /root/milvus-lite/thirdparty/milvus;\ncd python\npython3 -m build --wheel\n\n"
  },
  {
    "path": "ci/get_author_email.sh",
    "content": "#!/bin/bash\n# author emaill will be jenkins's email, when the pr branch is not fast forward compared with master branch\n# Exit immediately for non zero status\nset -e\nfunction get_author_email(){\n    email=$(git --no-pager show -s --format=\\'%ae\\' HEAD )\n    # Get last commit author when Jenkins submit a merge commit\n    if [[ \"${email}\" == \\'nobody@nowhere\\' ]]; then \n        email=$(git --no-pager show -s --format=\\'%ae\\' HEAD^ )\n    fi \n   echo ${email} | sed $'s/\\'//g'\n}\nget_author_email\n"
  },
  {
    "path": "ci/nightly.groovy",
    "content": "#!/usr/bin/env groovy\n\nint total_timeout_minutes = 60 * 5\n\n\n// When scheduling a job that gets automatically triggered by changes,\n// you need to include a [cronjob] tag within the commit message.\nString cron_timezone = 'TZ=Asia/Shanghai'\nString cron_string = BRANCH_NAME == \"2.4\" ? \"50 3 * * * \" : \"\"\n\npipeline {\n    triggers {\n        cron \"\"\"${cron_timezone}\n            ${cron_string}\"\"\"\n    }\n    options {\n        timestamps()\n        timeout(time: total_timeout_minutes, unit: 'MINUTES')\n        buildDiscarder logRotator(artifactDaysToKeepStr: '30')\n        parallelsAlwaysFailFast()\n        preserveStashes(buildCount: 5)\n        disableConcurrentBuilds(abortPrevious: true)\n    }\n    agent {\n            kubernetes {\n                cloud '4am'\n                inheritFrom 'milvus-e2e-4am'\n                defaultContainer 'main'\n                yamlFile 'ci/rte-build.yaml'\n                customWorkspace '/home/jenkins/agent/workspace'\n            }\n    }\n    environment {\n        DOCKER_BUILDKIT = 1\n    }\n\n    stages {\n        stage('Build') {\n            steps {\n                container('main') {\n                    script {\n                        sh '''\n\n                        MIRROR_URL=\"https://docker-nexus-ci.zilliz.cc\" ./ci/set_docker_mirror.sh\n                        '''\n                        sh '''\n                         docker run --net=host  \\\n                            -e CONAN_USER_HOME=/root/  -v \\$PWD:/root/milvus-lite -v /root/.conan:/root/.conan -w /root/milvus-lite  \\\n                            milvusdb/milvus-env:lite-manylinux2014 bash ci/entrypoint.sh\n                            # the image milvusdb/milvus-env:lite-manylinux2014 is from scripts/Dockerfile\n                         '''\n                    }\n                }\n            }\n        }\n        stage('arhive Artifacts ') {\n            steps {\n                container('main') {\n                    archiveArtifacts artifacts: 'python/dist/*.whl',\n                     allowEmptyArchive: true,\n                     fingerprint: true,\n                     onlyIfSuccessful: true\n                }\n            }\n        }\n        stage('install wheel') {\n            steps {\n                container('pytest') {\n                    sh '''\n                  pip install ./python/dist/*.whl\n                  '''\n                }\n            }\n        }\n        stage('Test') {\n            steps {\n                container('pytest') {\n                    sh '''\n                    bash ci/test.sh -m nightly\n                  '''\n                }\n            }\n        }\n    }\n    post {\n        unsuccessful {\n            container('jnlp') {\n                dir('ci') {\n                    script {\n                        def authorEmail = sh(returnStdout: true, script: './get_author_email.sh ')\n                        emailext subject: '$DEFAULT_SUBJECT',\n                      body: '$DEFAULT_CONTENT',\n                      recipientProviders: [developers(), culprits()],\n                      replyTo: '$DEFAULT_REPLYTO',\n                      to: \"${authorEmail},devops@zilliz.com\"\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "ci/rte-build.yaml",
    "content": "\napiVersion: v1\nkind: Pod\nmetadata:\n  labels:\n    app: milvus-e2e\n    task: milvus-e2e-build\n  namespace: milvus-ci\nspec:\n  enableServiceLinks: false\n  nodeSelector:\n    kubernetes.io/hostname: 4am-node16\n  containers:\n  - name: main\n    image: milvusdb/krte:20211213-dcc15e9\n    env:\n    - name: DOCKER_IN_DOCKER_ENABLED\n      value: \"true\"\n    - name: DOCKER_VOLUME_DIRECTORY\n      value: \"/mnt/disk/.docker\"\n    - name: DOCKER_CLIENT_TIMEOUT\n      value: 240\n    - name: COMPOSE_HTTP_TIMEOUT\n      value: 240\n    - name: NODE_NAME\n      valueFrom:\n        fieldRef:\n          fieldPath: spec.nodeName\n    tty: true\n    securityContext:\n      privileged: true\n    args: [\"cat\"]\n    resources:\n      limits:\n        cpu: \"6\"\n        memory: 12Gi\n      requests:\n        cpu: \"0.5\"\n        memory: 2Gi\n    volumeMounts:\n    - mountPath: /docker-graph\n      name: docker-graph\n    - mountPath: /var/lib/docker\n      name: docker-root\n    - mountPath: /lib/modules\n      name: modules\n      readOnly: true\n    - mountPath: /sys/fs/cgroup\n      name: cgroup\n    - mountPath: /root/.conan\n      name: build-cache\n    - mountPath: /tmp/ci_logs\n      name: ci-logs\n  - name: pytest\n    image: harbor.milvus.io/dockerhub/milvusdb/pytest:20240516-9536e79\n    resources:\n      limits:\n        cpu: \"6\"\n        memory: 12Gi\n      requests:\n        cpu: \"0.5\"\n        memory: 5Gi\n    volumeMounts:\n    - mountPath: /tmp/ci_logs\n      name: ci-logs\n  volumes:\n  - emptyDir: {}\n    name: docker-graph\n  - emptyDir: {}\n    name: docker-root\n  - hostPath:\n      path: /root/.conan\n      type: DirectoryOrCreate\n    name: build-cache\n  - hostPath:\n      path: /lib/modules\n      type: Directory\n    name: modules\n  - hostPath:\n      path: /sys/fs/cgroup\n      type: Directory\n    name: cgroup\n  - name: ci-logs\n    nfs:\n      path: /volume1/ci-logs\n      # path: /volume1/4am-logs\n      server: 172.16.70.249\n"
  },
  {
    "path": "ci/set_docker_mirror.sh",
    "content": "#!/usr/bin/env bash\n\n# Licensed to the LF AI & Data foundation under one\n# or more contributor license agreements. See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership. The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Use Internal docker mirror to solve  https://www.docker.com/increase-rate-limits\n\n# Exit immediately for non zero status\nset -e\n\n# Use nexus as docker mirror registry\nMIRROR_URL=\"${MIRROR_URL:-http://nexus-nexus-repository-manager-docker-5000.nexus:5000}\"\n#MIRROR_URL=\"http://nexus-nexus-repository-manager-docker-5000.nexus:5000\"\n\n# Add registry mirror config into docker daemon\nset_daemon_json_file(){\n    DOCKER_DAEMON_JSON_FILE=\"/etc/docker/daemon.json\"\n    mkdir -p \"/etc/docker\"\n    echo \"{\\\"registry-mirrors\\\": [\\\"${MIRROR_URL}\\\"],\\\"insecure-registries\\\":[\\\"${MIRROR_URL}\\\"]}\" | tee ${DOCKER_DAEMON_JSON_FILE}\n}\nrestart_docker () {\n    echo \"set-mirror.sh] service docker start\"\n    docker ps -aq | xargs -r docker rm -f || true\n    service docker stop || true\n    service docker start \n    while true; do\n    # docker ps -q should only work if the daemon is ready\n    docker info > /dev/null 2>&1 && break\n    if [[ ${WAIT_N} -lt 5 ]]; then\n      WAIT_N=$((WAIT_N+1))\n      echo \" set-mirror.sh] Waiting for Docker to be ready, sleeping for ${WAIT_N} seconds ...\"\n      sleep ${WAIT_N}\n    else\n      echo \"set-mirror.sh] [SETUP] Reached maximum attempts, not waiting any longer ...\"\n      break\n    fi\n  done\n  echo \"Show Docker Info With mirror url\"\n  docker info\n}\n\nset_mirror(){\n    set_daemon_json_file\n    restart_docker \n    echo \"Success.\"\n    exit 0\n    \n}\n\nset_mirror\n"
  },
  {
    "path": "ci/test.sh",
    "content": "#!/bin/bash\n\n\n\n# Function to display usage\nusage() {\n    echo \"Usage: $0 -m {nightly|e2e}\"\n    exit 1\n}\n\n# Check if the correct number of arguments is provided\nif [ $# -ne 2 ]; then\n    usage\nfi\n\n# Initialize variables\nMODE=\"\"\n\n# Parse the command-line arguments\nwhile getopts \":m:\" opt; do\n    case ${opt} in\n        m )\n            MODE=$OPTARG\n            ;;\n        \\? )\n            usage\n            ;;\n    esac\ndone\n\n# Validate the MODE value\nif [ \"$MODE\" != \"nightly\" ] && [ \"$MODE\" != \"e2e\" ]; then\n    usage\nfi\n\n\n# Install dependencies\nexport PIP_TRUSTED_HOST=\"nexus-ci.zilliz.cc\"\nexport PIP_INDEX_URL=\"https://nexus-ci.zilliz.cc/repository/pypi-all/simple\"\nexport PIP_INDEX=\"https://nexus-ci.zilliz.cc/repository/pypi-all/pypi\"\nexport PIP_FIND_LINKS=\"https://nexus-ci.zilliz.cc/repository/pypi-all/pypi\"\npython3 -m pip install --no-cache-dir -r tests/requirements.txt --timeout 300 --retries 6\n\ncd tests/milvus_lite\n\n# Main logic based on the MODE\nif [ \"$MODE\" == \"nightly\" ]; then\n    echo \"Running in nightly mode\"\n    pytest -v -m 'not L3' --enable_milvus_local_api ./lite-nighlty.db   # nighlty\nelif [ \"$MODE\" == \"e2e\" ]; then\n    echo \"Running in e2e mode\"\n    pytest -s  -v  --tags  L0  --enable_milvus_local_api  lite-e2e.db    # pr 合并时\nfi\n\n"
  },
  {
    "path": "cmake/Findantlr4-runtime.cmake",
    "content": "FIND_PATH(antlr4-cppruntime_INCLUDES antlr4-runtime.h PATH_SUFFIXES antlr4-runtime REQUIRED)\nFIND_LIBRARY(antlr4-cppruntime_LIBRARIES antlr4-runtime REQUIRED)\n"
  },
  {
    "path": "cmake/milvus-storage.cmake",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n# use this file except in compliance with the License. You may obtain a copy of\n# the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n# License for the specific language governing permissions and limitations under\n# the License\n\nfile(GLOB_RECURSE SRC_FILES thirdparty/milvus-storage/cpp/src/*.cpp thirdparty/milvus-storage/cpp/src/*.cc)\nadd_library(milvus-storage ${SRC_FILES})\ntarget_include_directories(milvus-storage PUBLIC BEFORE thirdparty/milvus-storage/cpp/include/milvus-storage thirdparty/milvus-storage/cpp/src)\ntarget_link_libraries(milvus-storage PUBLIC\n    arrow::arrow\n    Boost::boost\n    protobuf::protobuf\n    glog::glog\n)\n"
  },
  {
    "path": "conanfile.py",
    "content": "from conans import ConanFile\nfrom conan.tools.cmake import CMake\n\n\nclass MilvusLiteConan(ConanFile):\n    settings = \"os\", \"compiler\", \"build_type\", \"arch\"\n    requires = (\n        # gtest\n        \"gtest/1.13.0\",\n        # glog\n        \"xz_utils/5.4.0#a6d90890193dc851fa0d470163271c7a\",\n        \"zlib/1.2.13#df233e6bed99052f285331b9f54d9070\",\n        \"glog/0.6.0#d22ebf9111fed68de86b0fa6bf6f9c3f\",\n        # protobuf\n        \"protobuf/3.21.4#fd372371d994b8585742ca42c12337f9\",\n        # folly\n        \"fmt/9.1.0#95259249fb7ef8c6b5674a40b00abba3\",\n        \"folly/2023.10.30.08@milvus/dev#81d7729cd4013a1b708af3340a3b04d9\",\n        # antlr\n        \"antlr4-cppruntime/4.13.1\",\n        # sqlite\n        \"sqlitecpp/3.3.1\",\n        \"onetbb/2021.9.0#4a223ff1b4025d02f31b65aedf5e7f4a\",\n        \"nlohmann_json/3.11.2#ffb9e9236619f1c883e36662f944345d\",\n        \"boost/1.82.0#744a17160ebb5838e9115eab4d6d0c06\",\n        \"openssl/3.1.2#02594c4c0a6e2b4feb3cd15119993597\",\n        \"libcurl/7.86.0#bbc887fae3341b3cb776c601f814df05\",\n        \"grpc/1.50.1@milvus/dev#75103960d1cac300cf425ccfccceac08\",\n        \"prometheus-cpp/1.1.0#ea9b101cb785943adb40ad82eda7856c\",\n        \"re2/20230301#f8efaf45f98d0193cd0b2ea08b6b4060\",\n        # \"simdjson/3.7.0\",\n        \"arrow/15.0.0#0456d916ff25d509e0724c5b219b4c45\",\n        \"double-conversion/3.2.1#640e35791a4bac95b0545e2f54b7aceb\",\n        \"marisa/0.2.6#68446854f5a420672d21f21191f8e5af\",\n        \"zstd/1.5.4#308b8b048f9a3823ce248f9c150cc889\",\n        \"yaml-cpp/0.7.0#9c87b3998de893cf2e5a08ad09a7a6e0\",\n        \"libdwarf/20191104#7f56c6c7ccda5fadf5f28351d35d7c01\",\n        \"rapidjson/cci.20230929#624c0094d741e6a3749d2e44d834b96c\",\n        \"roaring/3.0.0#25a703f80eda0764a31ef939229e202d\",\n        \"libevent/2.1.12#4fd19d10d3bed63b3a8952c923454bc0\",\n    )\n\n    generators = {\"cmake\", \"cmake_find_package\"}\n\n    default_options = {\n        \"glog:with_gflags\": True,\n        \"glog:shared\": True,\n        \"gtest:build_gmock\": False,\n        \"onetbb:tbbmalloc\": False,\n        \"onetbb:tbbproxy\": False,\n        \"boost:without_locale\": True,\n        \"boost:without_test\": True,\n        \"boost:without_stacktrace\": True,\n        \"fmt:header_only\": True,\n        \"prometheus-cpp:with_pull\": False,\n        \"double-conversion:shared\": True,\n        \"arrow:filesystem_layer\": True,\n        \"arrow:parquet\": True,\n        \"arrow:compute\": True,\n        \"arrow:with_re2\": True,\n        \"arrow:with_zstd\": False,\n        \"arrow:with_boost\": True,\n        \"arrow:with_thrift\": True,\n        \"arrow:with_jemalloc\": True,\n        \"arrow:shared\": False,\n        \"arrow:with_s3\": False,\n        \"libcurl:with_ssl\": False,\n    }\n\n    def configure(self):\n        if self.settings.os in [\"Macos\", \"Android\"]:\n            self.options[\"arrow\"].with_jemalloc = False\n\n        if self.settings.compiler == \"gcc\":\n            if self.settings.compiler.libcxx == \"libstdc++\":\n                raise Exception(\"This package is only compatible with libstdc++11\")\n\n    def config_options(self):\n        if self.settings.os != \"Macos\":\n            self.options[\"onetbb\"].tbbbind = False\n\n    def requirements(self):\n        if self.settings.os not in [\"Macos\", \"Android\"]:\n            self.requires(\"libunwind/1.7.2\")\n        if self.settings.os == \"Android\":\n            self.requires(\"openblas/0.3.27\")\n\n    def imports(self):\n        self.copy(\"*.so*\", \"./lib\", \"lib\")\n        self.copy(\"*.dylib\", \"./lib\", \"lib\")\n\n    def build(self):\n        target = \"11.0\"\n        self.run(\"export MACOSX_DEPLOYMENT_TARGET={}\".format(target))\n"
  },
  {
    "path": "examples/bfloat16_example.py",
    "content": "import random\nimport tensorflow as tf\nfrom pymilvus import (\n     connections,\n     utility,\n     FieldSchema, CollectionSchema, DataType,\n     Collection,\n )\nbf16_index_types = [\"FLAT\"]\n\ndefault_bf16_index_params = [{\"nlist\": 128}]\n\ndef gen_bf16_vectors(num, dim):\n    raw_vectors = []\n    bf16_vectors = []\n    for _ in range(num):\n        raw_vector = [random.random() for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        bf16_vector = tf.cast(raw_vector, dtype=tf.bfloat16).numpy()\n        bf16_vectors.append(bf16_vector)\n    return raw_vectors, bf16_vectors\n\ndef bf16_vector_search():\n    connections.connect(uri=\"./local_test.db\")\n\n    int64_field = FieldSchema(name=\"int64\", dtype=DataType.INT64, is_primary=True, auto_id=True)\n    dim = 128\n    nb = 3000\n    vector_field_name = \"bfloat16_vector\"\n    bf16_vector = FieldSchema(name=vector_field_name, dtype=DataType.BFLOAT16_VECTOR, dim=dim)\n    schema = CollectionSchema(fields=[int64_field, bf16_vector])\n\n    if utility.has_collection(\"hello_milvus_fp16\"):\n        utility.drop_collection(\"hello_milvus_fp16\")\n    hello_milvus = Collection(\"hello_milvus_fp16\", schema, consistency_level=\"Strong\")\n\n    _, vectors = gen_bf16_vectors(nb, dim)\n    hello_milvus.insert([vectors[:6]])\n    rows = [\n        {vector_field_name: vectors[6]},\n        {vector_field_name: vectors[7]},\n        {vector_field_name: vectors[8]},\n        {vector_field_name: vectors[9]},\n        {vector_field_name: vectors[10]},\n        {vector_field_name: vectors[11]},\n    ]\n    hello_milvus.insert(rows)\n    hello_milvus.flush()\n\n    for i, index_type in enumerate(bf16_index_types):\n        index_params = default_bf16_index_params[i]\n        hello_milvus.create_index(vector_field_name,\n                                  index_params={\"index_type\": index_type, \"params\": index_params, \"metric_type\": \"L2\"})\n        hello_milvus.load()\n        print(\"index_type = \", index_type)\n        res = hello_milvus.search(vectors[0:10], vector_field_name, {\"metric_type\": \"L2\"}, limit=1)\n        print(res)\n        hello_milvus.release()\n        hello_milvus.drop_index()\n\n    hello_milvus.drop()\n\nif __name__ == \"__main__\":\n    bf16_vector_search()\n"
  },
  {
    "path": "examples/binary_example.py",
    "content": "import random\nimport numpy as np\nfrom pymilvus import (\n     connections,\n     utility,\n     FieldSchema, CollectionSchema, DataType,\n     Collection,\n )\n\nbin_index_types = [\"BIN_FLAT\"]\n\ndefault_bin_index_params = [{\"nlist\": 128}, {\"nlist\": 128}]\n\ndef gen_binary_vectors(num, dim):\n    raw_vectors = []\n    binary_vectors = []\n    for _ in range(num):\n        raw_vector = [random.randint(0, 1) for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        # packs a binary-valued array into bits in a unit8 array, and bytes array_of_ints\n        binary_vectors.append(bytes(np.packbits(raw_vector, axis=-1).tolist()))\n    return raw_vectors, binary_vectors\n\n\ndef binary_vector_search():\n    connections.connect(uri='./local_test.db')\n    \n    int64_field = FieldSchema(name=\"int64\", dtype=DataType.INT64, is_primary=True, auto_id=True)\n    dim = 128\n    nb = 3000\n    vector_field_name = \"binary_vector\"\n    binary_vector = FieldSchema(name=vector_field_name, dtype=DataType.BINARY_VECTOR, dim=dim)\n    schema = CollectionSchema(fields=[int64_field, binary_vector], enable_dynamic_field=True)\n\n    has = utility.has_collection(\"hello_milvus_bin\")\n    if has:\n        hello_milvus = Collection(\"hello_milvus_bin\")\n        hello_milvus.drop()\n    else:\n        hello_milvus = Collection(\"hello_milvus_bin\", schema)\n\n    _, vectors = gen_binary_vectors(nb, dim)\n    rows = [\n        {vector_field_name: vectors[0]},\n        {vector_field_name: vectors[1]},\n        {vector_field_name: vectors[2]},\n        {vector_field_name: vectors[3]},\n        {vector_field_name: vectors[4]},\n        {vector_field_name: vectors[5]},\n    ]\n\n    hello_milvus.insert(rows)\n    hello_milvus.flush()\n    for i, index_type in enumerate(bin_index_types):\n        index_params = default_bin_index_params[i]\n        hello_milvus.create_index(vector_field_name,\n                                  index_params={\"index_type\": index_type, \"params\": index_params, \"metric_type\": \"HAMMING\"})\n        hello_milvus.load()\n        print(\"index_type = \", index_type)\n        res = hello_milvus.search(vectors[:1], vector_field_name, {\"metric_type\": \"HAMMING\"}, limit=1)\n        print(\"res = \", res)\n        hello_milvus.release()\n        hello_milvus.drop_index()\n    hello_milvus.drop()\n\n\nif __name__ == \"__main__\":\n    binary_vector_search()\n"
  },
  {
    "path": "examples/bm25.py",
    "content": "from pymilvus import (\n    MilvusClient,\n    Function,\n    FunctionType,\n    DataType,\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ncollection_name = \"doc_in_doc_out\"\nmilvus_client = MilvusClient(uri=\"./bm25.db\")\n\nhas_collection = milvus_client.has_collection(collection_name, timeout=5)\nif has_collection:\n    milvus_client.drop_collection(collection_name)\n\nschema = milvus_client.create_schema()\nschema.add_field(\"id\", DataType.INT64, is_primary=True, auto_id=False)\nschema.add_field(\n    \"document_content\", DataType.VARCHAR, max_length=9000, enable_analyzer=True\n)\nschema.add_field(\"sparse_vector\", DataType.SPARSE_FLOAT_VECTOR)\n\nbm25_function = Function(\n    name=\"bm25_fn\",\n    input_field_names=[\"document_content\"],\n    output_field_names=\"sparse_vector\",\n    function_type=FunctionType.BM25,\n)\nschema.add_function(bm25_function)\n\nindex_params = milvus_client.prepare_index_params()\nindex_params.add_index(\n    field_name=\"sparse_vector\",\n    index_name=\"sparse_inverted_index\",\n    index_type=\"SPARSE_INVERTED_INDEX\",\n    metric_type=\"BM25\",\n    params={\"bm25_k1\": 1.2, \"bm25_b\": 0.75},\n)\n\nret = milvus_client.create_collection(\n    collection_name,\n    schema=schema,\n    index_params=index_params,\n    consistency_level=\"Strong\",\n)\nprint(\"----\")\nprint(ret)\n\nprint(fmt.format(\"    all collections    \"))\nprint(milvus_client.list_collections())\n\nprint(fmt.format(f\"schema of collection {collection_name}\"))\nprint(milvus_client.describe_collection(collection_name))\n\nrows = [\n    {\"id\": 1, \"document_content\": \"hello world\"},\n    {\"id\": 2, \"document_content\": \"hello milvus\"},\n    {\"id\": 3, \"document_content\": \"hello zilliz\"},\n]\n\nprint(fmt.format(\"Start inserting entities\"))\ninsert_result = milvus_client.insert(collection_name, rows, progress_bar=True)\nprint(fmt.format(\"Inserting entities done\"))\nprint(insert_result)\n\ntexts_to_search = [\"hello\"]\n# search_params = {\"metric_type\": \"BM25\", \"params\": {\"bm25_avgdl\": 10.0}}\nsearch_params = {\"metric_type\": \"BM25\"}\n\nprint(fmt.format(f\"Start search with retrieve several fields.\"))\nresult = milvus_client.search(\n    collection_name,\n    texts_to_search,\n    limit=3,\n    output_fields=[\"document_content\"],\n    search_params=search_params,\n)\nprint(result)\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\nprint(fmt.format(\"Start query by specifying primary keys\"))\nquery_results = milvus_client.query(collection_name, ids=[3])\nprint(query_results[0])\n\nupsert_ret = milvus_client.upsert(\n    collection_name, {\"id\": 2, \"document_content\": \"hello milvus again\"}\n)\nprint(upsert_ret)\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(\n    collection_name, filter=\"document_content == 'hello milvus again'\"\n)\nfor ret in query_results:\n    print(ret)\n\nprint(f\"start to delete by specifying filter in collection {collection_name}\")\ndelete_result = milvus_client.delete(collection_name, ids=[3])\nprint(delete_result)\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(\n    collection_name, filter=\"document_content == 'hello zilliz'\"\n)\nprint(f\"Query results after deletion: {query_results}\")\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "examples/customize_schema.py",
    "content": "import time\nimport numpy as np\nfrom pymilvus import (\n    MilvusClient,\n    DataType\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 8\ncollection_name = \"hello_milvus\"\nmilvus_client = MilvusClient(\"./local_test.db\")\n\n\nhas_collection = milvus_client.has_collection(collection_name, timeout=5)\nif has_collection:\n    milvus_client.drop_collection(collection_name)\n\nschema = milvus_client.create_schema(enable_dynamic_field=True)\nschema.add_field(\"id\", DataType.INT64, is_primary=True)\nschema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=dim)\nschema.add_field(\"title\", DataType.VARCHAR, max_length=64)\n\n\nindex_params = milvus_client.prepare_index_params()\nindex_params.add_index(field_name = \"embeddings\", metric_type=\"L2\")\nmilvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level=\"Strong\")\n\nprint(fmt.format(\"    all collections    \"))\nprint(milvus_client.list_collections())\n\nprint(fmt.format(f\"schema of collection {collection_name}\"))\nprint(milvus_client.describe_collection(collection_name))\n\nrng = np.random.default_rng(seed=19530)\nrows = [\n        {\"id\": 1, \"embeddings\": rng.random((1, dim))[0], \"a\": 100, \"title\": \"t1\"},\n        {\"id\": 2, \"embeddings\": rng.random((1, dim))[0], \"b\": 200, \"title\": \"t2\"},\n        {\"id\": 3, \"embeddings\": rng.random((1, dim))[0], \"c\": 300, \"title\": \"t3\"},\n        {\"id\": 4, \"embeddings\": rng.random((1, dim))[0], \"d\": 400, \"title\": \"t4\"},\n        {\"id\": 5, \"embeddings\": rng.random((1, dim))[0], \"e\": 500, \"title\": \"t5\"},\n        {\"id\": 6, \"embeddings\": rng.random((1, dim))[0], \"f\": 600, \"title\": \"t6\"},\n]\n\nprint(fmt.format(\"Start inserting entities\"))\ninsert_result = milvus_client.insert(collection_name, rows)\nprint(fmt.format(\"Inserting entities done\"))\nprint(insert_result)\n\n\nprint(fmt.format(\"Start load collection \"))\nmilvus_client.load_collection(collection_name)\n\nprint(fmt.format(\"Start query by specifying primary keys\"))\nquery_results = milvus_client.query(collection_name, ids=[2])\nprint(query_results[0])\n\nprint(fmt.format(\"Start get by specifying primary keys\"))\nget_results = milvus_client.get(collection_name, ids=[2])\nprint(get_results[0])\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(collection_name, filter= \"f == 600 or title == 't2'\")\nfor ret in query_results: \n    print(ret)\n\nrng = np.random.default_rng(seed=19530)\nvectors_to_search = rng.random((1, dim))\n\nprint(fmt.format(f\"Start search with retrieve serveral fields.\"))\nresult = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=[\"pk\", \"a\", \"b\"])\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "examples/customize_schema_auto_id.py",
    "content": "import numpy as np\nfrom pymilvus import (\n    MilvusClient,\n    DataType\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 8\ncollection_name = \"hello_milvus\"\n\nmilvus_client = MilvusClient(uri='./local_test.db')\n\nhas_collection = milvus_client.has_collection(collection_name, timeout=5)\nif has_collection:\n    milvus_client.drop_collection(collection_name)\n\nschema = milvus_client.create_schema(enable_dynamic_field=True, auto_id=True)\nschema.add_field(\"id\", DataType.INT64, is_primary=True)\nschema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=dim)\nschema.add_field(\"title\", DataType.VARCHAR, max_length=64)\n\n\nindex_params = milvus_client.prepare_index_params()\nindex_params.add_index(field_name = \"embeddings\", metric_type=\"L2\")\nmilvus_client.create_collection(collection_name, schema=schema, index_params=index_params, consistency_level=\"Strong\")\n\nprint(fmt.format(\"    all collections    \"))\nprint(milvus_client.list_collections())\n\nprint(fmt.format(f\"schema of collection {collection_name}\"))\nprint(milvus_client.describe_collection(collection_name))\n\nrng = np.random.default_rng(seed=19530)\nrows = [\n        {\"embeddings\": rng.random((1, dim))[0], \"a\": 100, \"title\": \"t1\"},\n        {\"embeddings\": rng.random((1, dim))[0], \"b\": 200, \"title\": \"t2\"},\n        {\"embeddings\": rng.random((1, dim))[0], \"c\": 300, \"title\": \"t3\"},\n        {\"embeddings\": rng.random((1, dim))[0], \"d\": 400, \"title\": \"t4\"},\n        {\"embeddings\": rng.random((1, dim))[0], \"e\": 500, \"title\": \"t5\"},\n        {\"embeddings\": rng.random((1, dim))[0], \"f\": 600, \"title\": \"t6\"},\n]\n\nprint(fmt.format(\"Start inserting entities\"))\ninsert_result = milvus_client.insert(collection_name, rows)\nprint(fmt.format(\"Inserting entities done\"))\nprint(insert_result)\n\n\nprint(fmt.format(\"Start load collection \"))\nmilvus_client.load_collection(collection_name)\n\nprint(fmt.format(\"Start query by specifying primary keys\"))\nquery_results = milvus_client.query(collection_name, ids=insert_result['ids'][0])\nprint(query_results[0])\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(collection_name, filter= \"f == 600 or title == 't2'\")\nfor ret in query_results: \n    print(ret)\n\nrng = np.random.default_rng(seed=19530)\nvectors_to_search = rng.random((1, dim))\n\nprint(fmt.format(f\"Start search with retrieve serveral fields.\"))\nresult = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=[\"pk\", \"a\", \"b\"])\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "examples/dynamic_field.py",
    "content": "import time\nimport numpy as np\nfrom pymilvus import (\n    connections,\n    utility,\n    FieldSchema, CollectionSchema, DataType,\n    Collection,\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 8\n\nprint(fmt.format(\"start connecting to Milvus\"))\nconnections.connect(\"default\", uri='./local_test.db')\n\nhas = utility.has_collection(\"hello_milvus\")\nprint(f\"Does collection hello_milvus exist in Milvus: {has}\")\nif has:\n    utility.drop_collection(\"hello_milvus\")\n\nfields = [\n    FieldSchema(name=\"pk\", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100),\n    FieldSchema(name=\"random\", dtype=DataType.DOUBLE),\n    FieldSchema(name=\"embeddings\", dtype=DataType.FLOAT_VECTOR, dim=dim)\n]\n\nschema = CollectionSchema(fields, \"hello_milvus is the simplest demo to introduce the APIs\", enable_dynamic_field=True)\n\nprint(fmt.format(\"Create collection `hello_milvus`\"))\nhello_milvus = Collection(\"hello_milvus\", schema, consistency_level=\"Strong\")\n\n################################################################################\n# 3. insert data\nhello_milvus2 = Collection(\"hello_milvus\")\nprint(fmt.format(\"Start inserting entities\"))\nrng = np.random.default_rng(seed=19530)\n\nrows = [\n        {\"pk\": \"1\", \"random\": 1.0, \"embeddings\": rng.random((1, dim))[0], \"a\": 1},\n        {\"pk\": \"2\", \"random\": 1.0, \"embeddings\": rng.random((1, dim))[0], \"b\": 1},\n        {\"pk\": \"3\", \"random\": 1.0, \"embeddings\": rng.random((1, dim))[0], \"c\": 1},\n        {\"pk\": \"4\", \"random\": 1.0, \"embeddings\": rng.random((1, dim))[0], \"d\": 1},\n        {\"pk\": \"5\", \"random\": 1.0, \"embeddings\": rng.random((1, dim))[0], \"e\": 1},\n        {\"pk\": \"6\", \"random\": 1.0, \"embeddings\": rng.random((1, dim))[0], \"f\": 1},\n        ]\n\ninsert_result = hello_milvus.insert(rows)\n\nhello_milvus.insert({\"pk\": \"7\", \"random\": 1.0, \"embeddings\": rng.random((1, dim))[0], \"g\": 1})\nhello_milvus.flush()\nprint(f\"Number of entities in Milvus: {hello_milvus.num_entities}\")  # check the num_entites\n\n# 4. create index\nprint(fmt.format(\"Start Creating index IVF_FLAT\"))\nindex = {\n    \"index_type\": \"IVF_FLAT\",\n    \"metric_type\": \"L2\",\n    \"params\": {\"nlist\": 128},\n}\n\nhello_milvus.create_index(\"embeddings\", index)\n\nprint(fmt.format(\"Start loading\"))\nhello_milvus.load()\n# -----------------------------------------------------------------------------\n# search based on vector similarity\nprint(fmt.format(\"Start searching based on vector similarity\"))\n\nrng = np.random.default_rng(seed=19530)\nvectors_to_search = rng.random((1, dim))\nsearch_params = {\n    \"metric_type\": \"L2\",\n    \"params\": {\"nprobe\": 10},\n}\n\nstart_time = time.time()\nresult = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, output_fields=[\"pk\", \"embeddings\"])\nend_time = time.time()\n\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\n\nresult = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, output_fields=[\"pk\", \"embeddings\", \"$meta\"])\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\nexpr = f'pk in [\"1\" , \"2\"] || g == 1'\n\nprint(fmt.format(f\"Start query with expr `{expr}`\"))\nresult = hello_milvus.query(expr=expr, output_fields=[\"random\", \"a\", \"g\"])\nfor hit in result:\n    print(\"hit:\", hit)\n\n###############################################################################\n# 7. drop collection\nprint(fmt.format(\"Drop collection `hello_milvus`\"))\nutility.drop_collection(\"hello_milvus\")\n"
  },
  {
    "path": "examples/example_group_by.py",
    "content": "from pymilvus import CollectionSchema, FieldSchema, Collection, connections, DataType, Partition, utility\nimport random\nimport numpy as np\nimport secrets\n\n\ndef generate_random_hex_string(length):\n    return secrets.token_hex(length // 2)\n\nconnections.connect(\"default\", uri=\"milvus.db\")\n\ndim = 128\nclean_exist = False\nprepare_data = True\n\nfields = [\n    FieldSchema(name=\"pk\", dtype=DataType.INT64, is_primary=True),\n    FieldSchema(name=\"int64\", dtype=DataType.INT64),\n    FieldSchema(name=\"float\", dtype=DataType.FLOAT),\n    FieldSchema(name=\"float_vector\", dtype=DataType.FLOAT_VECTOR, dim=dim),\n    FieldSchema(name=\"bool\", dtype=DataType.BOOL),\n    FieldSchema(name=\"string\", dtype=DataType.VARCHAR, max_length=512)\n]\n\nschema = CollectionSchema(fields=fields)\ncollection_name = 'test_group_by_' + generate_random_hex_string(24)\nif clean_exist and utility.has_collection(collection_name):\n    utility.drop_collection(collection_name)\n\ncollection = Collection(collection_name, schema=schema)\n\nnb = 1500\nbatch_num = 3\nvectors = [[random.random() for _ in range(dim)] for _ in range(nb)]\n\nif prepare_data:\n    for i in range(batch_num):\n        data = [\n            [i for i in range(nb * i, nb * (i + 1))],\n            [i % 33 for i in range(nb)],\n            [np.float32(i) for i in range(nb)],\n            vectors,\n            [bool(random.randrange(2)) for i in range(nb)],\n            [str(i % 44) for i in range(nb * i, nb * (i + 1))],\n        ]\n        collection.insert(data)\n        print(\"insert data done\")\n        collection.flush()\n    collection.create_index(\"float_vector\", {\"metric_type\": \"COSINE\"})\n\n# create collection and load\ncollection.load()\nbatch_size = 100\nsearch_params = {\"metric_type\": \"COSINE\"}\nresult = collection.search(vectors[:3], \"float_vector\", search_params, limit=batch_size, timeout=600,\n                           output_fields=[\"int64\", \"string\"], group_by_field=\"string\") #set up group_by_field\n\nfor i in range(len(result)):\n    resultI = result[i]\n    print(f\"---result{i}_size:{len(result[i])}-------------------------\")\n    for j in range(len(resultI)):\n        print(resultI[j])\n    print(\"----------------------------\")\n"
  },
  {
    "path": "examples/float16_example.py",
    "content": "import random\nimport numpy as np\nfrom pymilvus import (\n     connections,\n     utility,\n     FieldSchema, CollectionSchema, DataType,\n     Collection,\n )\n\nfrom milvus_lite.server_manager import server_manager_instance\n\nfp16_index_types = [\"FLAT\"]\n\ndefault_fp16_index_params = [{\"nlist\": 128}]\n\ndef gen_fp16_vectors(num, dim):\n    raw_vectors = []\n    fp16_vectors = []\n    for _ in range(num):\n        raw_vector = [random.random() for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        fp16_vector = np.array(raw_vector, dtype=np.float16)\n        fp16_vectors.append(fp16_vector)\n    return raw_vectors, fp16_vectors\n\ndef fp16_vector_search():\n    connections.connect(uri='./local_test.db')\n\n    int64_field = FieldSchema(name=\"int64\", dtype=DataType.INT64, is_primary=True, auto_id=True)\n    dim = 128\n    nb = 3000\n    vector_field_name = \"float16_vector\"\n    fp16_vector = FieldSchema(name=vector_field_name, dtype=DataType.FLOAT16_VECTOR, dim=dim)\n    schema = CollectionSchema(fields=[int64_field, fp16_vector])\n\n    if utility.has_collection(\"hello_milvus_fp16\"):\n        utility.drop_collection(\"hello_milvus_fp16\")\n\n    hello_milvus = Collection(\"hello_milvus_fp16\", schema)\n\n    _, vectors = gen_fp16_vectors(nb, dim)\n    hello_milvus.insert([vectors[:6]])\n    rows = [\n        {vector_field_name: vectors[6]},\n        {vector_field_name: vectors[7]},\n        {vector_field_name: vectors[8]},\n        {vector_field_name: vectors[9]},\n        {vector_field_name: vectors[10]},\n        {vector_field_name: vectors[11]},\n    ]\n    hello_milvus.insert(rows)\n    hello_milvus.flush()\n\n    for i, index_type in enumerate(fp16_index_types):\n        index_params = default_fp16_index_params[i]\n        hello_milvus.create_index(vector_field_name,\n                                  index_params={\"index_type\": index_type, \"params\": index_params, \"metric_type\": \"L2\"})\n        hello_milvus.load()\n        print(\"index_type = \", index_type)\n        res = hello_milvus.search(vectors[0:10], vector_field_name, {\"metric_type\": \"L2\"}, limit=1)\n        print(res)\n        hello_milvus.release()\n        hello_milvus.drop_index()\n\n    hello_milvus.drop()\n\nif __name__ == \"__main__\":\n    fp16_vector_search()\n"
  },
  {
    "path": "examples/fuzzy_match.py",
    "content": "from pymilvus import (\n    connections,\n    FieldSchema, CollectionSchema, DataType,\n    Collection,\n)\n\nDIMENSION = 8\nCOLLECTION_NAME = \"books2\"\nconnections.connect(uri=\"./local_test.db\")\n\nfields = [\n    FieldSchema(name='id', dtype=DataType.INT64, is_primary=True),\n    FieldSchema(name='title', dtype=DataType.VARCHAR, max_length=200),\n    FieldSchema(name='release_year', dtype=DataType.INT64),\n    FieldSchema(name='embeddings', dtype=DataType.FLOAT_VECTOR, dim=DIMENSION),\n]\nschema = CollectionSchema(fields=fields, enable_dynamic_field=True)\ncollection = Collection(name=COLLECTION_NAME, schema=schema)\n\ndata_rows = [\n    {\n        \"id\": 1,\n        \"title\": \"Lord of the Flies\",\n        \"release_year\": 1954,\n        \"embeddings\": [0.64, 0.44, 0.13, 0.47, 0.74, 0.03, 0.32, 0.6],\n    },\n    {\n        \"id\": 2,\n        \"title\": \"The Great Gatsby\",\n        \"release_year\": 1925,\n        \"embeddings\": [0.9, 0.45, 0.18, 0.43, 0.4, 0.4, 0.7, 0.24],\n    },\n    {\n        \"id\": 3,\n        \"title\": \"The Catcher in the Rye\",\n        \"release_year\": 1951,\n        \"embeddings\": [0.43, 0.57, 0.43, 0.88, 0.84, 0.69, 0.27, 0.98],\n    },\n    {\n        \"id\": 4,\n        \"title\": \"Flipped\",\n        \"release_year\": 2010,\n        \"embeddings\": [0.84, 0.69, 0.27, 0.43, 0.57, 0.43, 0.88, 0.98],\n    },\n]\n\ncollection.insert(data_rows)\ncollection.create_index(\n    \"embeddings\", {\"index_type\": \"FLAT\", \"metric_type\": \"L2\"})\n\ncollection.load()\n\n# prefix match.\nres = collection.query(expr='title like \"The%\"', output_fields=[\"id\", \"title\"])\nprint(res)\n\n# infix match.\nres = collection.query(expr='title like \"%the%\"', output_fields=[\"id\", \"title\"])\nprint(res)\n\n# postfix match.\nres = collection.query(expr='title like \"%Rye\"', output_fields=[\"id\", \"title\"])\nprint(res)\n\n# _ match any one and only one character.\nres = collection.query(expr='title like \"Flip_ed\"', output_fields=[\"id\", \"title\"])\nprint(res)\n\n# you can create inverted index to accelerate the fuzzy match.\ncollection.release()\ncollection.create_index(\n    \"title\", {\"index_type\": \"INVERTED\"})\ncollection.load()\n\n# _ match any one and only one character.\nres = collection.query(expr='title like \"Flip_ed\"', output_fields=[\"id\", \"title\"])\nprint(res)\n"
  },
  {
    "path": "examples/hello_hybrid_bm25.py",
    "content": "# A demo showing hybrid semantic search with dense and full text search with BM25\n# using Milvus.\n#\n# You can optionally choose to use the BGE-M3 model to embed the text as dense\n# vectors, or simply use random generated vectors as an example.\n#\n# You can also use the BGE CrossEncoder model to rerank the search results.\n#\n# Note that the full text search feature is only available in Milvus 2.4.0 or\n# higher version. Make sure you follow https://milvus.io/docs/install_standalone-docker.md\n# to set up the latest version of Milvus in your local environment.\n\n# To connect to Milvus server, you need the python client library called pymilvus.\n# To use BGE-M3 model, you need to install the optional `model` module in pymilvus.\n# You can get them by simply running the following commands:\n#\n# pip install pymilvus\n# pip install pymilvus[model]\n\n# If true, use BGE-M3 model to generate dense vectors.\n# If false, use random numbers to compose dense vectors.\nuse_bge_m3 = False\n# If true, the search result will be reranked using BGE CrossEncoder model.\nuse_reranker = False\n\n# The overall steps are as follows:\n# 1. embed the text as dense and sparse vectors\n# 2. setup a Milvus collection to store the dense and sparse vectors\n# 3. insert the data to Milvus\n# 4. search and inspect the result!\nimport random\nimport string\nimport numpy as np\n\nfrom pymilvus import (\n    utility,\n    FieldSchema,\n    CollectionSchema,\n    DataType,\n    Collection,\n    AnnSearchRequest,\n    RRFRanker,\n    connections,\n    Function,\n    FunctionType,\n)\n\n# 1. prepare a small corpus to search\ndocs = [\n    \"Artificial intelligence was founded as an academic discipline in 1956.\",\n    \"Alan Turing was the first person to conduct substantial research in AI.\",\n    \"Born in Maida Vale, London, Turing was raised in southern England.\",\n]\n# add some randomly generated texts\ndocs.extend(\n    [\n        \" \".join(\n            \"\".join(random.choice(string.ascii_lowercase) for _ in range(random.randint(1, 8)))\n            for _ in range(10)\n        )\n        for _ in range(1000)\n    ]\n)\nquery = \"Who started AI research?\"\n\n\ndef random_embedding(texts):\n    rng = np.random.default_rng()\n    return {\n        \"dense\": np.random.rand(len(texts), 768),\n    }\n\n\ndense_dim = 768\nef = random_embedding\n\nif use_bge_m3:\n    # BGE-M3 model is included in the optional `model` module in pymilvus, to\n    # install it, simply run \"pip install pymilvus[model]\".\n    from pymilvus.model.hybrid import BGEM3EmbeddingFunction\n\n    ef = BGEM3EmbeddingFunction(use_fp16=False, device=\"cpu\")\n    dense_dim = ef.dim[\"dense\"]\n\ndocs_embeddings = ef(docs)\nquery_embeddings = ef([query])\n\n# 2. setup Milvus collection and index\nconnections.connect(\"default\", uri=\"milvus.db\")\n\n# Specify the data schema for the new Collection.\nfields = [\n    # Use auto generated id as primary key\n    FieldSchema(name=\"pk\", dtype=DataType.VARCHAR, is_primary=True, auto_id=True, max_length=100),\n    # Store the original text to retrieve based on semantically distance\n    FieldSchema(name=\"text\", dtype=DataType.VARCHAR, max_length=512, enable_analyzer=True),\n    # We need a sparse vector field to perform full text search with BM25,\n    # but you don't need to provide data for it when inserting data.\n    FieldSchema(name=\"sparse_vector\", dtype=DataType.SPARSE_FLOAT_VECTOR),\n    FieldSchema(name=\"dense_vector\", dtype=DataType.FLOAT_VECTOR, dim=dense_dim),\n]\nfunctions = [\n    Function(\n        name=\"bm25\",\n        function_type=FunctionType.BM25,\n        input_field_names=[\"text\"],\n        output_field_names=\"sparse_vector\",\n    )\n]\nschema = CollectionSchema(fields, \"\", functions=functions)\ncol_name = \"hybrid_bm25_demo\"\n# Now we can create the new collection with above name and schema.\ncol = Collection(col_name, schema, consistency_level=\"Strong\")\n\n# We need to create indices for the vector fields. The indices will be loaded\n# into memory for efficient search.\nsparse_index = {\"index_type\": \"SPARSE_INVERTED_INDEX\", \"metric_type\": \"BM25\"}\ncol.create_index(\"sparse_vector\", sparse_index)\ndense_index = {\"index_type\": \"FLAT\", \"metric_type\": \"IP\"}\ncol.create_index(\"dense_vector\", dense_index)\ncol.load()\n\n# 3. insert text and sparse/dense vector representations into the collection\nentities = [docs, docs_embeddings[\"dense\"]]\ncol.insert(entities)\ncol.flush()\n\n# 4. search and inspect the result!\nk = 2  # we want to get the top 2 docs closest to the query\n\n# Prepare the search requests for both full text search and dense vector search\nfull_text_search_params = {\"metric_type\": \"BM25\"}\n# provide raw text query for full text search, while use the sparse vector as\n# ANNS field\nfull_text_search_req = AnnSearchRequest([query], \"sparse_vector\", full_text_search_params, limit=k)\ndense_search_params = {\"metric_type\": \"IP\"}\ndense_req = AnnSearchRequest(\n    query_embeddings[\"dense\"], \"dense_vector\", dense_search_params, limit=k\n)\n\n# Search topK docs based on dense and sparse vectors and rerank with RRF.\nres = col.hybrid_search(\n    [full_text_search_req, dense_req], rerank=RRFRanker(), limit=k, output_fields=[\"text\"]\n)\n\n# Currently Milvus only support 1 query in the same hybrid search request, so\n# we inspect res[0] directly. In future release Milvus will accept batch\n# hybrid search queries in the same call.\nres = res[0]\n\nif use_reranker:\n    result_texts = [hit.fields[\"text\"] for hit in res]\n    from pymilvus.model.reranker import BGERerankFunction\n\n    bge_rf = BGERerankFunction(device=\"cpu\")\n    # rerank the results using BGE CrossEncoder model\n    results = bge_rf(query, result_texts, top_k=2)\n    for hit in results:\n        print(f\"text: {hit.text} distance {hit.score}\")\nelse:\n    for hit in res:\n        print(f'text: {hit.fields[\"text\"]} distance {hit.distance}')\n\n# If you used both BGE-M3 and the reranker, you should see the following:\n# text: Alan Turing was the first person to conduct substantial research in AI. distance 0.9306981017573297\n# text: Artificial intelligence was founded as an academic discipline in 1956. distance 0.03217001154515051\n#\n# If you used only BGE-M3, you should see the following:\n# text: Alan Turing was the first person to conduct substantial research in AI. distance 0.032786883413791656\n# text: Artificial intelligence was founded as an academic discipline in 1956. distance 0.016129031777381897\n\n# In this simple example the reranker yields the same result as the embedding based hybrid search, but in more complex\n# scenarios the reranker can provide more accurate results.\n\n# If you used random vectors, the result will be different each time you run the script.\n\n# Drop the collection to clean up the data.\nutility.drop_collection(col_name)\n"
  },
  {
    "path": "examples/hello_milvus.py",
    "content": "# hello_milvus.py demonstrates the basic operations of PyMilvus, a Python SDK of Milvus.\n# 1. connect to Milvus\n# 2. create collection\n# 3. insert data\n# 4. create index\n# 5. search, query, and hybrid search on entities\n# 6. delete entities by PK\n# 7. drop collection\nimport time\n\nimport numpy as np\nfrom pymilvus import (\n    connections,\n    utility,\n    FieldSchema, CollectionSchema, DataType,\n    Collection,\n)\nfrom pymilvus.client.types import LoadState\n\nfmt = \"\\n=== {:30} ===\\n\"\nsearch_latency_fmt = \"search latency = {:.4f}s\"\nnum_entities, dim = 3000, 8\n\n#################################################################################\n# 1. connect to Milvus\n# Add a new connection alias `default` for Milvus server in `localhost:19530`\n# Actually the \"default\" alias is a buildin in PyMilvus.\n# If the address of Milvus is the same as `localhost:19530`, you can omit all\n# parameters and call the method as: `connections.connect()`.\n#\n# Note: the `using` parameter of the following methods is default to \"default\".\nprint(fmt.format(\"start connecting to Milvus\"))\nconnections.connect(\"default\", uri=\"./local_test.db\")\n# connections.connect(\"default\", host=\"localhost\", port=\"19530\")\n\nhas = utility.has_collection(\"hello_milvus\")\nprint(f\"Does collection hello_milvus exist in Milvus: {has}\")\n\n#################################################################################\n# 2. create collection\n# We're going to create a collection with 3 fields.\n# +-+------------+------------+------------------+------------------------------+\n# | | field name | field type | other attributes |       field description      |\n# +-+------------+------------+------------------+------------------------------+\n# |1|    \"pk\"    |   VarChar  |  is_primary=True |      \"primary field\"         |\n# | |            |            |   auto_id=False  |                              |\n# +-+------------+------------+------------------+------------------------------+\n# |2|  \"random\"  |    Double  |                  |      \"a double field\"        |\n# +-+------------+------------+------------------+------------------------------+\n# |3|\"embeddings\"| FloatVector|     dim=8        |  \"float vector with dim 8\"   |\n# +-+------------+------------+------------------+------------------------------+\nfields = [\n    FieldSchema(name=\"random\", dtype=DataType.DOUBLE),\n    FieldSchema(name=\"pk\", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100),\n    FieldSchema(name=\"embeddings\", dtype=DataType.FLOAT_VECTOR, dim=dim)\n]\n\nschema = CollectionSchema(fields, \"hello_milvus is the simplest demo to introduce the APIs\")\n\nprint(fmt.format(\"Create collection `hello_milvus`\"))\nhello_milvus = Collection(\"hello_milvus\", schema, consistency_level=\"Strong\")\n# works ok\nhello_milvus = Collection(\"hello_milvus\", schema, consistency_level=\"Strong\")\n\n################################################################################\n# 3. insert data\n# We are going to insert 3000 rows of data into `hello_milvus`\n# Data to be inserted must be organized in fields.\n#\n# The insert() method returns:\n# - either automatically generated primary keys by Milvus if auto_id=True in the schema;\n# - or the existing primary key field from the entities if auto_id=False in the schema.\n\nprint(fmt.format(\"Start inserting entities\"))\nrng = np.random.default_rng(seed=19530)\nentities = [\n    # provide the pk field because `auto_id` is set to False\n    rng.random(num_entities).tolist(),  # field random, only supports list\n    [str(i) for i in range(num_entities)],\n    rng.random((num_entities, dim)),    # field embeddings, supports numpy.ndarray and list\n]\n\ninsert_result = hello_milvus.insert(entities)\n\n# hello_milvus.flush()\n# print(f\"Number of entities in Milvus: {hello_milvus.num_entities}\")  # check the num_entities\n\n################################################################################\n# 4. create index\n# We are going to create an IVF_FLAT index for hello_milvus collection.\n# create_index() can only be applied to `FloatVector` and `BinaryVector` fields.\nprint(fmt.format(\"Start Creating index FLAT\"))\nindex = {\n    \"index_type\": \"FLAT\",\n    \"metric_type\": \"L2\",\n    \"params\": {\"nlist\": 128},\n}\n\nhello_milvus.create_index(\"embeddings\", index)\n\n################################################################################\n# 5. search, query, and hybrid search\n# After data were inserted into Milvus and indexed, you can perform:\n# - search based on vector similarity\n# - query based on scalar filtering(boolean, int, etc.)\n# - hybrid search based on vector similarity and scalar filtering.\n#\n\n# Before conducting a search or a query, you need to load the data in `hello_milvus` into memory.\nprint(fmt.format(\"Start loading\"))\nhello_milvus.load()\nassert utility.load_state(\"hello_milvus\") == LoadState.Loaded\n\n# -----------------------------------------------------------------------------\n# search based on vector similarity\nprint(fmt.format(\"Start searching based on vector similarity\"))\nvectors_to_search = entities[-1][-2:]\nsearch_params = {\n    \"metric_type\": \"L2\",\n    \"params\": {\"nprobe\": 10},\n}\n\nstart_time = time.time()\nresult = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, output_fields=[\"random\"])\nend_time = time.time()\n\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}, random field: {hit.entity.get('random')}\")\nprint(search_latency_fmt.format(end_time - start_time))\n\n# -----------------------------------------------------------------------------\n# query based on scalar filtering(boolean, int, etc.)\nprint(fmt.format(\"Start querying with `random > 0.5`\"))\n\nstart_time = time.time()\nresult = hello_milvus.query(expr=\"random > 0.5\", output_fields=[\"random\", \"embeddings\"])\nend_time = time.time()\n\nprint(f\"query result:\\n-{result[0]}\")\nprint(search_latency_fmt.format(end_time - start_time))\n\n# -----------------------------------------------------------------------------\n# pagination\nr1 = hello_milvus.query(expr=\"random > 0.5\", limit=4, output_fields=[\"random\"])\nr2 = hello_milvus.query(expr=\"random > 0.5\", offset=1, limit=3, output_fields=[\"random\"])\nprint(f\"query pagination(limit=4):\\n\\t{r1}\")\nprint(f\"query pagination(offset=1, limit=3):\\n\\t{r2}\")\n\n\n# -----------------------------------------------------------------------------\n# hybrid search\nprint(fmt.format(\"Start hybrid searching with `random > 0.5`\"))\n\nstart_time = time.time()\nresult = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, expr=\"random > 0.5\", output_fields=[\"random\"])\nend_time = time.time()\n\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}, random field: {hit.entity.get('random')}\")\nprint(search_latency_fmt.format(end_time - start_time))\n\n###############################################################################\n# 6. delete entities by PK\n# You can delete entities by their PK values using boolean expressions.\nids = insert_result.primary_keys\n\nexpr = f'pk in [\"{ids[0]}\" , \"{ids[1]}\"]'\nprint(fmt.format(f\"Start deleting with expr `{expr}`\"))\n\nresult = hello_milvus.query(expr=expr, output_fields=[\"random\", \"embeddings\"])\nprint(f\"query before delete by expr=`{expr}` -> result: \\n-{result[0]}\\n-{result[1]}\\n\")\n\nhello_milvus.delete(expr)\n\nresult = hello_milvus.query(expr=expr, output_fields=[\"random\", \"embeddings\"])\nprint(f\"query after delete by expr=`{expr}` -> result: {result}\\n\")\n\n\n###############################################################################\n# 7. drop collection\n# Finally, drop the hello_milvus collection\nprint(fmt.format(\"Drop collection `hello_milvus`\"))\nutility.drop_collection(\"hello_milvus\")\n"
  },
  {
    "path": "examples/hello_milvus_array.py",
    "content": "from pymilvus import CollectionSchema, FieldSchema, Collection, connections, DataType, Partition, utility\nimport numpy as np\nimport random\nimport pandas as pd\n\n# connections.connect()\n\nfrom milvus_lite.server_manager import server_manager_instance\n\nconnections.connect(uri=\"./local_test.db\")\n\ndim = 128\ncollection_name = \"test_array\"\narr_len = 100\nnb = 10\nif utility.has_collection(collection_name):\n    utility.drop_collection(collection_name)\n# create collection\npk_field = FieldSchema(name=\"int64\", dtype=DataType.INT64, is_primary=True, description='pk')\nvector_field = FieldSchema(name=\"float_vector\", dtype=DataType.FLOAT_VECTOR, dim=dim)\nint8_array = FieldSchema(name=\"int8_array\", dtype=DataType.ARRAY, element_type=DataType.INT8, max_capacity=arr_len)\nint16_array = FieldSchema(name=\"int16_array\", dtype=DataType.ARRAY, element_type=DataType.INT16, max_capacity=arr_len)\nint32_array = FieldSchema(name=\"int32_array\", dtype=DataType.ARRAY, element_type=DataType.INT32, max_capacity=arr_len)\nint64_array = FieldSchema(name=\"int64_array\", dtype=DataType.ARRAY, element_type=DataType.INT64, max_capacity=arr_len)\nbool_array = FieldSchema(name=\"bool_array\", dtype=DataType.ARRAY, element_type=DataType.BOOL, max_capacity=arr_len)\nfloat_array = FieldSchema(name=\"float_array\", dtype=DataType.ARRAY, element_type=DataType.FLOAT, max_capacity=arr_len)\ndouble_array = FieldSchema(name=\"double_array\", dtype=DataType.ARRAY, element_type=DataType.DOUBLE, max_capacity=arr_len)\nstring_array = FieldSchema(name=\"string_array\", dtype=DataType.ARRAY, element_type=DataType.VARCHAR, max_capacity=arr_len,\n                           max_length=100)\n\nfields = [pk_field, vector_field, int8_array, int16_array, int32_array, int64_array,\n           bool_array, float_array, double_array, string_array]\n\nschema = CollectionSchema(fields=fields)\ncollection = Collection(collection_name, schema=schema)\n\n# insert data\npk_value = [i for i in range(nb)]\nvector_value = [[random.random() for _ in range(dim)] for i in range(nb)]\nint8_value = [[np.int8(j) for j in range(arr_len)] for i in range(nb)]\nint16_value = [[np.int16(j) for j in range(arr_len)] for i in range(nb)]\nint32_value = [[np.int32(j) for j in range(arr_len)] for i in range(nb)]\nint64_value = [[np.int64(j) for j in range(arr_len)] for i in range(nb)]\nbool_value = [[np.bool_(j) for j in range(arr_len)] for i in range(nb)]\nfloat_value = [[np.float32(j) for j in range(arr_len)] for i in range(nb)]\ndouble_value = [[np.double(j) for j in range(arr_len)] for i in range(nb)]\nstring_value = [[str(j) for j in range(arr_len)] for i in range(nb)]\n\ndata = [pk_value, vector_value,\n        int8_value,int16_value, int32_value, int64_value,\n        bool_value,\n        float_value,\n        double_value,\n        string_value\n        ]\n\n#collection.insert(data)\n\ndata = pd.DataFrame({\n    'int64': pk_value,\n    'float_vector': vector_value,\n    \"int8_array\": int8_value,\n    \"int16_array\": int16_value,\n    \"int32_array\": int32_value,\n    \"int64_array\": int64_value,\n    \"bool_array\": bool_value,\n    \"float_array\": float_value,\n    \"double_array\": double_value,\n    \"string_array\": string_value\n})\ncollection.insert(data)\n\nindex = {\n    \"index_type\": \"FLAT\",\n    \"metric_type\": \"L2\",\n    \"params\": {\"nlist\": 128},\n}\n\ncollection.create_index(\"float_vector\", index)\ncollection.load()\n\nres = collection.query(\"int64 >= 0\", output_fields=[\"int8_array\"])\nfor hits in res:\n    print(hits)\n"
  },
  {
    "path": "examples/hello_milvus_delete.py",
    "content": "import time\nimport numpy as np\nfrom pymilvus import (\n    MilvusClient,\n    exceptions\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 8\ncollection_name = \"hello_milvus\"\nmilvus_client = MilvusClient(\"./local_test.db\")\nmilvus_client.drop_collection(collection_name)\nmilvus_client.create_collection(collection_name, dim, consistency_level=\"Strong\", metric_type=\"L2\")\n\nprint(\"collections:\", milvus_client.list_collections())\nprint(f\"{collection_name} :\", milvus_client.describe_collection(collection_name))\nrng = np.random.default_rng(seed=19530)\n\nrows = [\n        {\"id\": 1, \"vector\": rng.random((1, dim))[0], \"a\": 1},\n        {\"id\": 2, \"vector\": rng.random((1, dim))[0], \"b\": 2},\n        {\"id\": 3, \"vector\": rng.random((1, dim))[0], \"c\": 3},\n        {\"id\": 4, \"vector\": rng.random((1, dim))[0], \"d\": 4},\n        {\"id\": 5, \"vector\": rng.random((1, dim))[0], \"e\": 5},\n        {\"id\": 6, \"vector\": rng.random((1, dim))[0], \"f\": 6},\n]\n\nprint(fmt.format(\"Start inserting entities\"))\npks = milvus_client.insert(collection_name, rows, progress_bar=True)['ids']\npks2 = milvus_client.insert(collection_name, {\"id\": 7, \"vector\": rng.random((1, dim))[0], \"g\": 1})['ids']\npks.extend(pks2)\n\n\ndef fetch_data_by_pk(pk):\n    print(f\"get primary key {pk} from {collection_name}\")\n    pk_data = milvus_client.get(collection_name, pk)\n\n    if pk_data:\n        print(f\"data of primary key {pk} is\", pk_data[0])\n    else:\n        print(f\"data of primary key {pk} is empty\")\n\nfetch_data_by_pk(pks[2])\n\nprint(f\"start to delete primary key {pks[2]} in collection {collection_name}\")\nmilvus_client.delete(collection_name, pks = pks[2])\n\nfetch_data_by_pk(pks[2])\n\n\nfetch_data_by_pk(pks[4])\nfilter = \"e == 5 or f == 6\"\nprint(f\"start to delete by expr {filter} in collection {collection_name}\")\nmilvus_client.delete(collection_name, filter=filter)\n\nfetch_data_by_pk(pks[4])\n\nprint(f\"start to delete by expr '{filter}' or by primary 4 in collection {collection_name}, expect get exception\")\ntry:\n    milvus_client.delete(collection_name, pks = 4, filter=filter)\nexcept Exception as e:\n    assert isinstance(e, exceptions.ParamError)\n    print(\"catch exception\", e)\n\nprint(f\"start to delete without specify any expr '{filter}' or any primary key in collection {collection_name}, expect get exception\")\ntry:\n    milvus_client.delete(collection_name)\nexcept Exception as e:\n    print(\"catch exception\", e)\n\nresult = milvus_client.query(collection_name, \"\", output_fields = [\"count(*)\"])\nprint(f\"final entities in {collection_name} is {result[0]['count(*)']}\")\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "examples/index.py",
    "content": "from milvus_lite.server_manager import server_manager_instance\n\nimport time\nimport numpy as np\nfrom pymilvus import (\n    MilvusClient,\n    DataType\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 8\ncollection_name = \"hello_milvus\"\n\nmilvus_client = MilvusClient(\"./local_test.db\")\n\nhas_collection = milvus_client.has_collection(collection_name, timeout=5)\nif has_collection:\n    milvus_client.drop_collection(collection_name)\n\nschema = milvus_client.create_schema(enable_dynamic_field=True)\nschema.add_field(\"id\", DataType.INT64, is_primary=True)\nschema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=dim)\nschema.add_field(\"title\", DataType.VARCHAR, max_length=64)\n\n# collection is not loaded after creation\nmilvus_client.create_collection(collection_name, schema=schema, consistency_level=\"Strong\")\n\nrng = np.random.default_rng(seed=19530)\nrows = [\n        {\"id\": 1, \"embeddings\": rng.random((1, dim))[0], \"a\": 100, \"title\": \"t1\"},\n        {\"id\": 2, \"embeddings\": rng.random((1, dim))[0], \"b\": 200, \"title\": \"t2\"},\n        {\"id\": 3, \"embeddings\": rng.random((1, dim))[0], \"c\": 300, \"title\": \"t3\"},\n        {\"id\": 4, \"embeddings\": rng.random((1, dim))[0], \"d\": 400, \"title\": \"t4\"},\n        {\"id\": 5, \"embeddings\": rng.random((1, dim))[0], \"e\": 500, \"title\": \"t5\"},\n        {\"id\": 6, \"embeddings\": rng.random((1, dim))[0], \"f\": 600, \"title\": \"t6\"},\n]\n\nprint(fmt.format(\"Start inserting entities\"))\ninsert_result = milvus_client.insert(collection_name, rows)\nprint(fmt.format(\"Inserting entities done\"))\nprint(insert_result)\n\nindex_params = milvus_client.prepare_index_params()\nindex_params.add_index(field_name = \"embeddings\", metric_type=\"L2\")\nindex_params.add_index(field_name = \"title\", index_type = \"Trie\", index_name=\"my_trie\")\n\nprint(fmt.format(\"Start create index\"))\nmilvus_client.create_index(collection_name, index_params)\n\n\nindex_names = milvus_client.list_indexes(collection_name)\nprint(f\"index names for {collection_name}:\", index_names)\nfor index_name in index_names:\n    index_info = milvus_client.describe_index(collection_name, index_name=index_name)\n    print(f\"index info for index {index_name} is:\", index_info)\n\nprint(fmt.format(\"Start load collection\"))\nmilvus_client.load_collection(collection_name)\n\nprint(fmt.format(\"Start query by specifying primary keys\"))\nquery_results = milvus_client.query(collection_name, ids=[2])\nprint(query_results[0])\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(collection_name, filter= \"f == 600 or title == 't2'\")\nfor ret in query_results: \n    print(ret)\n\nvectors_to_search = rng.random((1, dim))\nprint(fmt.format(f\"Start search with retrieve serveral fields.\"))\nresult = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=[\"title\"])\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\n\n\nfield_index_names = milvus_client.list_indexes(collection_name, field_name = \"embeddings\")\nprint(f\"index names for {collection_name}`s field embeddings:\", field_index_names)\n\ntry:\n    milvus_client.drop_index(collection_name, \"my_trie\")\nexcept Exception as e:\n    print(f\"cacthed {e}\")\n\nmilvus_client.release_collection(collection_name)\n\nmilvus_client.drop_index(collection_name, \"my_trie\")\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "examples/non_ascii_encode.py",
    "content": "import numpy as np\nfrom pymilvus import MilvusClient, DataType\n\ndimension = 128\ncollection_name = \"books\"\nclient = MilvusClient(uri=\"./local_test.db\")\nclient.drop_collection(collection_name)\n\nschema = client.create_schema(auto_id=True)\nschema.add_field(\"id\", DataType.INT64, is_primary=True)\nschema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=dimension)\nschema.add_field(\"info\", DataType.JSON)\n\nindex_params = client.prepare_index_params(\"embeddings\", metric_type=\"L2\")\nclient.create_collection(collection_name, schema=schema, index_params=index_params)\n\nrng = np.random.default_rng(seed=19530)\nrows = [\n    {\"embeddings\": rng.random((1, dimension))[0],\n     \"info\": {\"title\": \"Lord of the Flies\", \"author\": \"William Golding\"}},\n\n    {\"embeddings\": rng.random((1, dimension))[0],\n     \"info\": {\"作者\": \"J.D.塞林格\", \"title\": \"麦田里的守望者\", }},\n\n    {\"embeddings\": rng.random((1, dimension))[0],\n     \"info\": {\"Título\": \"Cien años de soledad\", \"autor\": \"Gabriel García Márquez\"}},\n]\n\nclient.insert(collection_name, rows)\nresult = client.query(collection_name, filter=\"info['作者'] == 'J.D.塞林格' or info['Título'] == 'Cien años de soledad'\",\n                      output_fields=[\"info\"],\n                      consistency_level=\"Strong\")\n\nfor hit in result:\n    print(f\"hit: {hit}\")\n"
  },
  {
    "path": "examples/simple.py",
    "content": "import numpy as np\nfrom pymilvus import (\n    MilvusClient,\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 8\ncollection_name = \"hello_milvus\"\nmilvus_client = MilvusClient(\"./local_test.db\")\n\nhas_collection = milvus_client.has_collection(collection_name, timeout=5)\nif has_collection:\n    milvus_client.drop_collection(collection_name)\nmilvus_client.create_collection(collection_name, dim, consistency_level=\"Strong\", metric_type=\"L2\")\n\nprint(fmt.format(\"    all collections    \"))\nprint(milvus_client.list_collections())\n\nprint(fmt.format(f\"schema of collection {collection_name}\"))\nprint(milvus_client.describe_collection(collection_name))\n\nrng = np.random.default_rng(seed=19530)\nrows = [\n        {\"id\": 1, \"vector\": rng.random((1, dim))[0], \"a\": 100},\n        {\"id\": 2, \"vector\": rng.random((1, dim))[0], \"b\": 200},\n        {\"id\": 3, \"vector\": rng.random((1, dim))[0], \"c\": 300},\n        {\"id\": 4, \"vector\": rng.random((1, dim))[0], \"d\": 400},\n        {\"id\": 5, \"vector\": rng.random((1, dim))[0], \"e\": 500},\n        {\"id\": 6, \"vector\": rng.random((1, dim))[0], \"f\": 600},\n]\n\nprint(fmt.format(\"Start inserting entities\"))\ninsert_result = milvus_client.insert(collection_name, rows, progress_bar=True)\nprint(fmt.format(\"Inserting entities done\"))\nprint(insert_result)\n\nprint(fmt.format(\"Start query by specifying primary keys\"))\nquery_results = milvus_client.query(collection_name, ids=[2])\nprint(query_results[0])\n\nupsert_ret = milvus_client.upsert(collection_name, {\"id\": 2 , \"vector\": rng.random((1, dim))[0], \"g\": 100})\nprint(upsert_ret)\n\nprint(fmt.format(\"Start query by specifying primary keys\"))\nquery_results = milvus_client.query(collection_name, ids=[2])\nprint(query_results[0])\n\n\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(collection_name, filter= \"f == 600\")\nfor ret in query_results: \n    print(ret)\n\n\nprint(f\"start to delete by specifying filter in collection {collection_name}\")\ndelete_result = milvus_client.delete(collection_name, ids=[6])\nprint(delete_result)\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(collection_name, filter= \"f == 600\")\nassert len(query_results) == 0\n\nrng = np.random.default_rng(seed=19530)\nvectors_to_search = rng.random((1, dim))\n\nprint(fmt.format(f\"Start search with retrieve serveral fields.\"))\nresult = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=[\"pk\", \"a\", \"b\"])\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "examples/simple_auto_id.py",
    "content": "import numpy as np\nfrom pymilvus import (\n    MilvusClient,\n)\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 8\ncollection_name = \"hello_milvus\"\n\nmilvus_client = MilvusClient(\"./local_test.db\")\n\nhas_collection = milvus_client.has_collection(collection_name, timeout=5)\nif has_collection:\n    milvus_client.drop_collection(collection_name)\nmilvus_client.create_collection(collection_name, dim, consistency_level=\"Strong\", metric_type=\"L2\", auto_id=True)\n\nprint(fmt.format(\"    all collections    \"))\nprint(milvus_client.list_collections())\n\nprint(fmt.format(f\"schema of collection {collection_name}\"))\nprint(milvus_client.describe_collection(collection_name))\n\nrng = np.random.default_rng(seed=19530)\nrows = [\n        {\"vector\": rng.random((1, dim))[0], \"a\": 100},\n        {\"vector\": rng.random((1, dim))[0], \"b\": 200},\n        {\"vector\": rng.random((1, dim))[0], \"c\": 300},\n        {\"vector\": rng.random((1, dim))[0], \"d\": 400},\n        {\"vector\": rng.random((1, dim))[0], \"e\": 500},\n        {\"vector\": rng.random((1, dim))[0], \"f\": 600},\n]\n\nprint(fmt.format(\"Start inserting entities\"))\ninsert_result = milvus_client.insert(collection_name, rows, progress_bar=True)\nprint(\"insert done:\", insert_result)\n\nprint(fmt.format(\"Start query by specifying filter\"))\nquery_results = milvus_client.query(collection_name, filter= \"f == 600\")\nfor ret in query_results: \n    print(ret)\n\nprint(f\"start to delete by specifying filter in collection {collection_name}\")\ndelete_result = milvus_client.delete(collection_name, filter = \"f == 600\")\nprint(delete_result)\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(collection_name, filter= \"f == 600\")\nassert len(query_results) == 0\n\nrng = np.random.default_rng(seed=19530)\nvectors_to_search = rng.random((1, dim))\n\nprint(fmt.format(f\"Start search with retrieve serveral fields.\"))\nresult = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=[\"pk\", \"a\", \"b\"])\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "examples/sparse.py",
    "content": "from pymilvus import (\n    MilvusClient,\n    FieldSchema, CollectionSchema, DataType,\n)\nimport random\n\ndef generate_sparse_vector(dimension: int, non_zero_count: int) -> dict:\n    indices = random.sample(range(dimension), non_zero_count)\n    values = [random.random() for _ in range(non_zero_count)]\n    sparse_vector = {index: value for index, value in zip(indices, values)}\n    return sparse_vector\n\n\nfmt = \"\\n=== {:30} ===\\n\"\ndim = 100\nnon_zero_count = 20\ncollection_name = \"hello_sparse\"\nmilvus_client = MilvusClient(\"./local_test.db\")\n\nhas_collection = milvus_client.has_collection(collection_name, timeout=5)\nif has_collection:\n    milvus_client.drop_collection(collection_name)\nfields = [\n    FieldSchema(name=\"pk\", dtype=DataType.VARCHAR,\n                is_primary=True, auto_id=True, max_length=100),\n\n    # FieldSchema(name=\"pk\", dtype=DataType.INT64,\n    #             is_primary=True, auto_id=True),\n    FieldSchema(name=\"random\", dtype=DataType.DOUBLE),\n    FieldSchema(name=\"embeddings\", dtype=DataType.SPARSE_FLOAT_VECTOR),\n]\nschema = CollectionSchema(\n    fields, \"demo for using sparse float vector with milvus client\")\nindex_params = milvus_client.prepare_index_params()\nindex_params.add_index(field_name=\"embeddings\", index_name=\"sparse_inverted_index\",\n                       index_type=\"SPARSE_INVERTED_INDEX\", metric_type=\"IP\", params={\"drop_ratio_build\": 0.2})\nmilvus_client.create_collection(collection_name, schema=schema,\n                                index_params=index_params, timeout=5, consistency_level=\"Strong\")\n\nprint(fmt.format(\"    all collections    \"))\nprint(milvus_client.list_collections())\n\nprint(fmt.format(f\"schema of collection {collection_name}\"))\nprint(milvus_client.describe_collection(collection_name))\n\nN = 6\nrows = [{\"random\": i, \"embeddings\": generate_sparse_vector(\n    dim, non_zero_count)} for i in range(N)]\n\nprint(fmt.format(\"Start inserting entities\"))\ninsert_result = milvus_client.insert(collection_name, rows, progress_bar=True)\nprint(fmt.format(\"Inserting entities done\"))\nprint(insert_result)\n\nprint(fmt.format(f\"Start vector anns search.\"))\nvectors_to_search = [generate_sparse_vector(dim, non_zero_count)]\nsearch_params = {\n    \"metric_type\": \"IP\",\n    \"params\": {\n        \"drop_ratio_search\": 0.2,\n    }\n}\n# no need to specify anns_field for collections with only 1 vector field\nresult = milvus_client.search(collection_name, vectors_to_search, limit=3, output_fields=[\n                              \"pk\", \"random\", \"embeddings\"], search_params=search_params)\nfor hits in result:\n    for hit in hits:\n        print(f\"hit: {hit}\")\n\nprint(fmt.format(\"Start query by specifying filtering expression\"))\nquery_results = milvus_client.query(collection_name, filter=\"random < 3\")\npks = [ret['pk'] for ret in query_results]\nfor ret in query_results:\n    print(ret)\n\n# print(fmt.format(\"Start query by specifying primary keys\"))\n# query_results = milvus_client.query(\n#     collection_name, filter=f\"pk == '{pks[0]}'\")\n# print(query_results[0])\n\nprint(f\"start to delete by specifying filter in collection {collection_name}\")\nprint(pks[:1], 'xxxxxxxxxxxxxxxxxxxxxxxx')\nprint(milvus_client.query(collection_name, ids=pks[:1]))\ndelete_result = milvus_client.delete(collection_name, ids=pks[:1])\nprint(delete_result)\nprint(milvus_client.query(collection_name, ids=pks[:1]))\n\n# print(fmt.format(\"Start query by specifying primary keys\"))\n# query_results = milvus_client.query(\n#     collection_name, filter=f\"pk == '{pks[0]}'\")\n# print(f'query result should be empty: {query_results}')\n\nmilvus_client.drop_collection(collection_name)\n"
  },
  {
    "path": "python/pyproject.toml",
    "content": "[build-system]\nrequires = [\n    \"setuptools>=64.0\",\n    \"wheel\"\n]\n\n# Use legacy backend to import local packages in setup.py\nbuild-backend = \"setuptools.build_meta:__legacy__\"\n"
  },
  {
    "path": "python/requirements.txt",
    "content": "tqdm\n"
  },
  {
    "path": "python/setup.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport shlex\nimport sys\nimport os\nimport pathlib\nimport unittest\nfrom typing import List\nimport subprocess\nimport platform\n\nfrom setuptools import setup, find_namespace_packages\nfrom wheel.bdist_wheel import bdist_wheel as _bdist_wheel\n\nimport shutil\n\n\nMILVUS_BIN = 'milvus'\nKNOWHERE_BIN = 'libknowhere.dylib'\nMILVUS_PATCH = str(pathlib.Path(__file__).absolute().parent.parent / 'thirdparty' / 'milvus.patch')\nMILVUS_ROOT = str(pathlib.Path(__file__).absolute().parent.parent / 'thirdparty' / 'milvus')\n\n\nclass CMakeBuild(_bdist_wheel):\n    def finalize_options(self):\n        if sys.platform.lower() == 'linux':\n            self.plat_name = f\"manylinux2014_{platform.machine().lower()}\"\n        elif sys.platform.lower() == 'darwin':\n            if platform.machine().lower() == 'arm64':\n                self.plat_name = f\"macosx_11_0_{platform.machine().lower()}\"\n            else:\n                self.plat_name = f\"macosx_10_9_{platform.machine().lower()}\"\n        return super().finalize_options()\n\n    def copy_lib(self, lib_path, dst_dir, pick_libs):\n        name = pathlib.Path(lib_path).name\n        new_file = os.path.join(dst_dir, name)\n        for lib_prefix in pick_libs:\n            if name.startswith(lib_prefix):\n                shutil.copy(lib_path, new_file)\n                continue\n\n    def _pack_macos(self, src_dir: str, dst_dir: str):\n        mac_pkg = ['libknowhere', 'libmilvus',\n                   'libgflags_nothreads', 'libglog',\n                   'libtbb', 'libomp',\n                   'libdouble-conversion']\n        milvus_bin = pathlib.Path(src_dir) / MILVUS_BIN\n        knowhere = pathlib.Path(src_dir) / KNOWHERE_BIN\n        out_str = subprocess.check_output(['otool', '-L', str(milvus_bin)])\n        subprocess.check_output(['install_name_tool', '-add_rpath', '@executable_path/.', str(milvus_bin)])\n        subprocess.check_output(['install_name_tool', '-add_rpath', '@executable_path/.', str(knowhere)])\n        lines = out_str.decode('utf-8').split('\\n')\n        for line in lines[1:]:\n            r = line.split(' ')\n            if not r[0].endswith('dylib'):\n                continue\n            if r[0].strip().startswith(\"@rpath\"):\n                real_path = pathlib.Path(src_dir) / r[0].strip()[len(\"@rpath/\"):]\n            else:\n                real_path = r[0].strip()\n            self.copy_lib(real_path, dst_dir, mac_pkg)\n\n    def _pack_linux(self, src_dir: str, dst_dir: str):\n        linux_pkg = ['libknowhere', 'libmilvus',\n                     'libgflags_nothreads', 'libglog',\n                     'libtbb', 'libm', 'libgcc_s',\n                     'libgomp', 'libopenblas',\n                     'libdouble-conversion', 'libz',\n                     'libgfortran', 'libquadmath']\n        milvus_bin = pathlib.Path(src_dir) / MILVUS_BIN\n        out_str = subprocess.check_output(['ldd', str(milvus_bin)])\n        lines = out_str.decode('utf-8').split('\\n')\n        for line in lines:\n            r = line.split(\"=>\")\n            if len(r) != 2:\n                continue\n            self.copy_lib(r[1].strip().split(' ')[0].strip(), dst_dir, linux_pkg)\n\n    def run(self):\n        build_lib = self.bdist_dir\n        build_temp = os.path.abspath(os.path.join(os.path.dirname(build_lib), 'build_milvus'))\n\n        if not os.path.exists(build_temp):\n            os.makedirs(build_temp)\n        #clean build temp\n        shutil.rmtree(os.path.join(build_temp, 'lib'), ignore_errors=True)\n        extdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n        env = os.environ\n        env['LD_LIBRARY_PATH'] = os.path.join(build_temp, 'lib')\n        if env.get('USE_SYSTEM_DEPS'):\n            system_deps = '-DUSE_SYSTEM_DEPS=ON'\n        else:\n            system_deps = '-DUSE_SYSTEM_DEPS=OFF'\n            subprocess.call(['conan', 'remote', 'add', 'default-conan-local', 'https://milvus01.jfrog.io/artifactory/api/conan/default-conan-local'],\n                                  cwd=build_temp, env=env)\n            if sys.platform.lower() == 'linux':\n                subprocess.check_call(['conan', 'install', extdir, '--build=missing', '-s', 'build_type=Release', '-s', 'compiler.libcxx=libstdc++11'],\n                                      cwd=build_temp, env=env)\n            else:\n                # macos\n                subprocess.check_call(['conan', 'install', extdir, '--build=missing', '-s', 'build_type=Release'], cwd=build_temp, env=env)\n        # build\n        extra_cmake_args = shlex.split(env.get('CMAKE_ARGS', ''))\n        extra_build_args = shlex.split(env.get('BUILD_ARGS', ''))\n        subprocess.check_call(['cmake', extdir, '-DENABLE_UNIT_TESTS=OFF', system_deps, *extra_cmake_args], cwd=build_temp, env=env)\n        subprocess.check_call(['cmake', '--build', '.', '--', '-j4', *extra_build_args],\n                              cwd=build_temp,\n                              env=env,\n                              )\n\n        dst_lib_path = os.path.join(build_lib, 'milvus_lite/lib')\n        shutil.rmtree(dst_lib_path, ignore_errors=True)\n        os.makedirs(dst_lib_path)\n\n        if sys.platform.lower() == 'linux':\n            self._pack_linux(os.path.join(build_temp, 'lib'), dst_lib_path)\n        elif sys.platform.lower() == 'darwin':\n            self._pack_macos(os.path.join(build_temp, 'lib'), dst_lib_path)\n        else:\n            raise RuntimeError('Unsupport platform: %s', sys.platform)\n        shutil.copy(os.path.join(build_temp, 'lib', MILVUS_BIN), os.path.join(dst_lib_path, MILVUS_BIN))\n        \n        super().run()\n\n\ndef test_suite():\n    test_loader = unittest.TestLoader()\n    tests = test_loader.discover('tests', pattern='test_*.py')\n    return tests\n\n\ndef parse_requirements(file_name: str) -> List[str]:\n    with open(file_name, encoding='utf-8') as f:\n        return [\n            require.strip() for require in f\n            if require.strip() and not require.startswith('#')\n        ]\n\n\nsetup(name='milvus-lite',\n      version='2.5.2',\n      description='A lightweight version of Milvus wrapped with Python.',\n      author='Milvus Team',\n      author_email='milvus-team@zilliz.com',\n      url='https://github.com/milvus-io/milvus-lite.git',\n      test_suite='setup.test_suite',\n      install_requires=parse_requirements('requirements.txt'),\n      package_dir={'': 'src'},\n      packages=find_namespace_packages('src'),\n      package_data={},\n      include_package_data=True,\n      python_requires='>=3.7',\n      entry_points={\n          'console_scripts': ['milvus-lite=milvus_lite.cmdline:main']\n      },\n      cmdclass={\"bdist_wheel\": CMakeBuild},\n      long_description=open(\"../README.md\", \"r\", encoding=\"utf-8\").read(),\n      long_description_content_type='text/markdown'\n      )\n"
  },
  {
    "path": "python/src/milvus_lite/__init__.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\n\nfrom contextlib import suppress\n\ntry:\n    # Python 3.8+\n    from importlib.metadata import version, PackageNotFoundError\nexcept ImportError:  # fallback for older Python (<3.8)\n    from importlib_metadata import version, PackageNotFoundError  # needs backport\n\n\n__version__ = \"0.0.0.dev\"\n\n\nwith suppress(DistributionNotFound):\n    __version__ = version(\"milvus_lite\")\n"
  },
  {
    "path": "python/src/milvus_lite/cmdline.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport argparse\nimport pathlib\nimport json\nfrom tqdm import tqdm\n\nimport numpy as np\n\nfrom pymilvus import Collection, connections, utility, DataType\nfrom pymilvus.bulk_writer import LocalBulkWriter, BulkFileType\n\n\nclass MilvusEncoder(json.JSONEncoder):\n    def default(self, o):\n        if isinstance(o, np.ndarray):\n            return o.tolist()\n        if isinstance(o, np.float32) or isinstance(o, np.float16):\n            return float(o)\n        return json.JSONEncoder.default(self, o)\n\n\ndef dump_func(args):\n    return dump_collection(args.db_file, args.collection, args.path)\n\n\ndef bfloat16_to_float32(byte_data):\n    bfloat16_array = np.frombuffer(byte_data, dtype=np.uint16)\n    bfloat16_as_uint16 = bfloat16_array.view(np.uint16)\n    float32_as_uint32 = (bfloat16_as_uint16.astype(np.uint32)) << 16\n    float32_array = float32_as_uint32.view(np.float32)\n    return float32_array\n\n\ndef binary_to_int_list(packed_bytes):\n    byte_array = np.frombuffer(packed_bytes, dtype=np.uint8)\n    return np.unpackbits(byte_array)\n\n\ndef dump_collection(db_file, collection_name, path):\n    if not pathlib.Path(db_file).is_file():\n        raise RuntimeError('db_file: %s not exists' % db_file)\n\n    if not pathlib.Path(path).parent.is_dir():\n        raise RuntimeError('dump path(%s)\\'s parent dir not exists: %s not exists' % path)\n\n    connections.connect(\"default\", uri=db_file)\n    if not utility.has_collection(collection_name):\n        raise RuntimeError(\"Collection: %s not exists\" % collection_name)\n    \n    collection = Collection(collection_name)\n    total_rows = collection.query(\"\", output_fields=[\"count(*)\"])[0][\"count(*)\"]\n    is_auto = collection.primary_field.auto_id\n    pk_name = collection.primary_field.name\n    bfloat16_fields = [field.name for field in collection.schema.fields if field.dtype == DataType.BFLOAT16_VECTOR]\n    bin_fields = [field.name for field in collection.schema.fields if field.dtype == DataType.BINARY_VECTOR]\n\n    writer = LocalBulkWriter(\n            schema=collection.schema,\n            local_path=path,\n            segment_size=512*1024*1024,\n            file_type=BulkFileType.JSON\n    )\n\n    it = collection.query_iterator(output_fields=['*'])\n    progress_bar = tqdm(total=total_rows, desc=f\"Dump collection {collection_name}'s data\")\n    while True:\n        rows = it.next()\n        if not rows:\n            it.close()\n            break\n        if is_auto:\n            for row in rows:\n                del row[pk_name]\n        if bfloat16_fields:\n            for row in rows:\n                for name in bfloat16_fields:\n                    if name in row:\n                        row[name] = bfloat16_to_float32(row[name])\n\n        if bin_fields:\n            for row in rows:\n                for name in bin_fields:\n                    if name in row:\n                        row[name] = binary_to_int_list(row[name][0])\n\n        rows = json.loads(json.dumps(rows, cls=MilvusEncoder))\n        for row in rows:\n            writer.append_row(row)\n        progress_bar.update(len(rows))\n    writer.commit()\n    print(\"Dump collection %s success\" % collection_name)\n\n\ndef main():\n    parser = argparse.ArgumentParser(prog='milvus-lite')\n    subparsers = parser.add_subparsers(description='milvus-lite command line tool.')\n\n    dump_cmd = subparsers.add_parser('dump', help='milvus-lite dump cmd')\n    dump_cmd.add_argument('-d', '--db-file', type=str, help='milvus lite db file')\n    dump_cmd.add_argument('-c', '--collection', type=str, help='collection that need to be dumped')\n    dump_cmd.add_argument('-p', '--path', type=str, help='dump file storage path')\n    dump_cmd.set_defaults(func=dump_func)\n\n    args = parser.parse_args()\n    if hasattr(args, 'func'):\n        args.func(args)\n    else:\n        parser.print_help()\n\n\nif __name__ == '__main__':\n    main()\n"
  },
  {
    "path": "python/src/milvus_lite/server.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nfrom typing import Optional\nimport tempfile\nimport os\nimport subprocess\nimport pathlib\nimport signal\nimport logging\nimport fcntl\nimport re\n\n\nBIN_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'lib')\n\n\nlogger = logging.getLogger()\n\n\nclass Server:\n    \"\"\"\n    The milvus-lite server\n    \"\"\"\n\n    MILVUS_BIN = 'milvus'\n\n    def __init__(self, db_file: str, address: Optional[str] = None):\n        \"\"\"\n        Args:\n            db_file (str):\n               The local file to store data.\n            address (address, optional):\n               grpc server address, example: localhost:19530,\n               if not set, the MilvusLite service will use UDS.\n        \"\"\"\n        if os.environ.get('BIN_PATH') is not None:\n            self._bin_path = pathlib.Path(os.environ['BIN_PATH']).absolute()\n        else:\n            self._bin_path = pathlib.Path(BIN_PATH).absolute()\n        self._db_file = pathlib.Path(db_file).absolute()\n        if not re.match(r'^[a-zA-Z0-9.\\-_]+$', self._db_file.name):\n            raise RuntimeError(f\"Unsupport db name {self._db_file.name}, the name must match ^[a-zA-Z0-9.\\\\-_]+$\")\n        if len(self._db_file.name) > 36:\n            raise RuntimeError(f\"Db name {self._db_file.name} is too long, should be less than 36\")\n        self._work_dir = self._db_file.parent\n        self._address= address\n        self._p = None\n        self._uds_path = f\"{tempfile.mktemp()}_{self._db_file.name}.sock\"\n        self._lock_path = str(self._db_file.parent / f'.{self._db_file.name}.lock')\n        self._lock_fd = None\n\n    def init(self) -> bool:\n        if not self._bin_path.exists():\n            logger.error(\"Bin path not exists\")\n            return False\n        if not self._work_dir.exists():\n            logger.error(\"Dir %s not exist\", self._work_dir)\n        return True\n\n    @property\n    def milvus_bin(self):\n        return str(self._bin_path / 'milvus')\n\n    @property\n    def log_level(self):\n        return os.environ.get(\"LOG_LEVEL\", \"ERROR\")\n\n    @property\n    def uds_path(self):\n        return f'unix:{self._uds_path}'\n\n    @property\n    def args(self):\n        if self._address is not None:\n            return [self.milvus_bin, self._db_file, self._address, self.log_level] \n        return [self.milvus_bin, self._db_file, self.uds_path, self.log_level, self._lock_path]\n\n    def start(self) -> bool:\n        assert self._p is None, \"Server already started\"\n        self._lock_fd = open(self._lock_path, 'a')\n        try:\n            fcntl.lockf(self._lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB)\n            start_env = {\n                    \"LD_LIBRARY_PATH\": str(self._bin_path) + ':' + os.environ.get('LD_LIBRARY_PATH', ''),\n                    \"DYLD_LIBRARY_PATH\": str(self._bin_path) + ':' + os.environ.get('DYLD_LIBRARY_PATH', '')\n            }\n            src_env = os.environ.copy()\n            if \"LD_LIBRARY_PATH\" in src_env:\n                del src_env[\"LD_LIBRARY_PATH\"]\n            if \"DYLD_LIBRARY_PATH\" in src_env:\n                del src_env[\"DYLD_LIBRARY_PATH\"]\n            start_env.update(src_env)\n            self._p = subprocess.Popen(\n                args=self.args,\n                env=start_env,\n                cwd=str(self._work_dir),\n            )\n            try:\n                # Wait for 0.5 second to ensure successful startup\n                self._p.wait(0.5)\n                logger.error(\"Start milvus-lite failed\")\n                return False\n            except subprocess.TimeoutExpired:\n                return True\n        except BlockingIOError:\n            logger.error(\"Open %s failed, the file has been opened by another program\", self._db_file)\n            return False\n\n    def stop(self):\n        if self._lock_fd:\n            # When the file lock is released, the milvus-lite service will automatically stop.\n            fcntl.flock(self._lock_fd, fcntl.LOCK_UN)\n            self._lock_fd.close()\n            self._lock_fd = None\n\n        if self._p is not None:\n            try:\n                self._p.wait(timeout=2)\n            except subprocess.TimeoutExpired:\n                self._p.send_signal(signal.SIGKILL)\n                self._p.wait(timeout=3)\n            self._p = None\n\n        try:\n            os.unlink(self._uds_path)\n        except FileNotFoundError:\n            pass\n        try:\n            os.unlink(self._lock_path)\n        except FileNotFoundError:\n            pass\n\n    def __del__(self):\n        self.stop()\n"
  },
  {
    "path": "python/src/milvus_lite/server_manager.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nfrom typing import Optional\nimport threading\nimport logging\nimport pathlib\n\nfrom milvus_lite.server import Server\n\n\nlogger = logging.getLogger()\n\n\nclass ServerManager:\n    def __init__(self):\n        self._lock = threading.Lock()\n        self._servers = {}\n\n    def start_and_get_uri(self, path: str, args=None) -> Optional[str]:\n        path = pathlib.Path(path).absolute().resolve()\n        with self._lock:\n            if str(path) not in self._servers:\n                s = Server(str(path), args)\n                if not s.init():\n                    return None\n                if not s.start():\n                    return None\n                self._servers[str(path)] = s\n            return self._servers[str(path)].uds_path\n\n    def release_server(self, path: str):\n        path = pathlib.Path(path).absolute().resolve()\n        with self._lock:\n            if str(path) not in self._servers:\n                logger.warning(\"No local milvus in path %s\", str(path))\n                return\n            self._servers[str(path)].stop()\n            del self._servers[str(path)]\n\n    def release_all(self):\n        for s in self._servers.values():\n            s.stop()\n        self._servers = {}\n\n    def __del__(self):\n        with self._lock:\n            self.release_all()\n\n\nserver_manager_instance = ServerManager()\n"
  },
  {
    "path": "scripts/Dockerfile.manylinux.aarch64",
    "content": "# Copyright (C) 2019-2020 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under the License.\n\n\nFROM quay.io/pypa/manylinux_2_28_aarch64:2024.07.07-1\n\nRUN  yum install -y openblas-devel libatomic-static git && cp /usr/lib/gcc/aarch64-redhat-linux/8/libatomic.a /usr/lib64/\nENV PATH=\"/opt/_internal/cpython-3.8.19/bin:${PATH}\"\nRUN pip3 install conan==1.63.0\nRUN curl https://sh.rustup.rs -sSf | bash -s -- --default-toolchain=1.89 -y\nENV PATH=\"/root/.cargo/bin:${PATH}\"\nENV CCFLAGS=\"-Wno-error=address\"\nENV CXXFLAGS=\"-Wno-error=address\"\nRUN mkdir -p /workspace\nWORKDIR  /workspace\n\nRUN conan remote add default-conan-local https://milvus01.jfrog.io/artifactory/api/conan/default-conan-local\n\nCOPY build_milvus_lite.sh /workspace/build_milvus_lite.sh\nRUN chmod +x /workspace/build_milvus_lite.sh\n"
  },
  {
    "path": "scripts/Dockerfile.manylinux.x86_64",
    "content": "# Copyright (C) 2019-2020 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under the License.\n\n\nFROM quay.io/pypa/manylinux_2_28_x86_64:2024.07.07-1\n\nRUN  yum install -y openblas-devel libatomic-static git && cp /usr/lib/gcc/x86_64-redhat-linux/8/libatomic.a /usr/lib64/\nENV PATH=\"/opt/_internal/cpython-3.8.19/bin:${PATH}\"\nRUN pip3 install conan==1.63.0\nRUN curl https://sh.rustup.rs -sSf | bash -s -- --default-toolchain=1.89 -y\nENV PATH=\"/root/.cargo/bin:${PATH}\"\n\nRUN mkdir -p /workspace\nWORKDIR  /workspace\n\nRUN conan remote add default-conan-local https://milvus01.jfrog.io/artifactory/api/conan/default-conan-local\n\nCOPY build_milvus_lite.sh /workspace/build_milvus_lite.sh\nRUN chmod +x /workspace/build_milvus_lite.sh\n"
  },
  {
    "path": "scripts/README.md",
    "content": "# Build Milvus-Lite In Docker\n\n## build commond\n\n```shell\n    build.sh ${Dockerfile} ${TAG} {$CONAN_CACHE}\n```\n"
  },
  {
    "path": "scripts/build.sh",
    "content": "#!/bin/bash\n\n# Licensed to the LF AI & Data foundation under one\n# or more contributor license agreements. See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership. The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nTAG=\"main\"\nIMAGE_TAG=\"latest\"\n\nif [ \"$#\" -eq 0 ]; then\n    echo \"Please set dockerfile path\"\nelif [ \"$#\" -eq 1 ]; then\n    DOCKERFILE=$1\n    docker build -t build_milvus_lite:$IMAGE_TAG -f $DOCKERFILE . \\\n        && docker run --rm -v $PWD:/workspace/dist build_milvus_lite:$IMAGE_TAG /workspace/build_milvus_lite.sh $TAG\nelif [ \"$#\" -eq 2 ]; then\n    DOCKERFILE=$1\n    TAG=$2\n    docker build -t build_milvus_lite:$IMAGE_TAG -f $DOCKERFILE . \\\n        && docker run --rm -v $PWD:/workspace/dist build_milvus_lite:$IMAGE_TAG /workspace/build_milvus_lite.sh $TAG\nelif [ \"$#\" -eq 3 ]; then\n    DOCKERFILE=$1\n    TAG=$2\n    CACAN_CACHE=$3\n    docker build -t build_milvus_lite:$IMAGE_TAG -f $DOCKERFILE . \\\n        && docker run --rm -e CONAN_USER_HOME=/workspace/conan -v $CACAN_CACHE:/workspace/conan -v $PWD:/workspace/dist build_milvus_lite:$IMAGE_TAG /workspace/build_milvus_lite.sh $TAG\nfi\n"
  },
  {
    "path": "scripts/build_milvus_lite.sh",
    "content": "#!/bin/bash\n\n# Licensed to the LF AI & Data foundation under one\n# or more contributor license agreements. See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership. The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License. You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\ntag=\"main\"\n\nif [ \"$#\" -eq 1 ]; then\n    tag=$1\nfi\n\necho \"Build milvus-lite:$tag\"\necho $CONAN_USER_HOME\n\ngit clone --recurse-submodules https://github.com/milvus-io/milvus-lite.git \\\n    && cd milvus-lite \\\n    && git checkout $tag \\\n    && cd python \\\n    && python3 -m build --wheel \\\n    && cp -r dist /workspace/ \\\n    && cd /workspace && rm -rf milvus-lite    \n"
  },
  {
    "path": "src/CMakeLists.txt",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n# use this file except in compliance with the License. You may obtain a copy of\n# the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n# License for the specific language governing permissions and limitations under\n# the License\n\ninclude_directories(${CMAKE_CURRENT_LIST_DIR})\nadd_library(milite ${LITE_BUILD_TYPE}\n  ${CMAKE_CURRENT_LIST_DIR}/storage/collection_meta.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/storage/collection_data.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/storage/bm25_stats.cpp  \n  ${CMAKE_CURRENT_LIST_DIR}/storage/storage.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/timer.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/index.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/milvus_local.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/segcore_wrapper.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/milvus_proxy.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/create_collection_task.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/create_index_task.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/search_task.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/insert_task.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/query_task.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/delete_task.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/upsert_task.cpp  \n  ${CMAKE_CURRENT_LIST_DIR}/schema_util.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/re_scorer.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/hybrid_search_task.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/function/function_executor.cpp\n  ${CMAKE_CURRENT_LIST_DIR}/function/bm25_function.cpp\n)\n\ntarget_link_libraries(\n  milite\n  PUBLIC\n  parser\n  milvus_core\n  milvus_log\n  yaml-cpp\n  roaring::roaring\n  SQLiteCpp\n  ${antlr4-cppruntime_LIBRARIES}\n  ${MARISA_LIBRARIES}\n  TBB::tbb\n  ${PROTOBUF_LIBRARIES}\n  ${ARROW_LIBRARIES}\n  simdjson\n  tantivy_binding\n)\n\nadd_library( \n  milvus_service\n  STATIC\n  \"${CMAKE_SOURCE_DIR}/src/milvus_service_impl.cpp\"\n)\n\ntarget_link_libraries(\n  milvus_service\n  PUBLIC\n  milvus_grpc_service\n)\n\nadd_executable(milvus server.cpp)\n\ntarget_link_libraries(\n  milvus\n  milvus_service\n  milite\n)\n\nif(ENABLE_UNIT_TESTS)\n  add_subdirectory(unittest)\nendif()\n"
  },
  {
    "path": "src/common.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n#include <map>\n#include <string>\n\nnamespace milvus::local {\n\n#define CHECK_STATUS(status, err) \\\n    do {                          \\\n        Status _s = status;       \\\n        if (!_s.IsOk()) {         \\\n            return _s;            \\\n        }                         \\\n    } while (0)\n\n#define DELETE_AND_SET_NULL(ptr, deleter) \\\n    do {                                  \\\n        if ((ptr) != nullptr) {           \\\n            deleter(ptr);                 \\\n            (ptr) = nullptr;              \\\n        }                                 \\\n    } while (0)\n\nusing KVMap = std::map<std::string, std::string>;\nusing SparseVector = std::map<uint32_t, float>;\n\n// system field id:\n// 0: unique row id\n// 1: timestamp\n// 100: first user field id\n// 101: second user field id\n// 102: ...\nconst int64_t kStartOfUserFieldId = 100;\n\nconst int64_t kRowIdField = 0;\n\nconst int64_t kTimeStampField = 1;\n\nconst std::string kRowIdFieldName(\"RowID\");\n\nconst std::string kTimeStampFieldName(\"Timestamp\");\n\nconst std::string kMetaFieldName(\"$meta\");\n\nconst std::string kPlaceholderTag(\"$0\");\n\nconst int64_t kTopkLimit = 16384;\nconst int64_t kSchemaFieldLimit = 64;\nconst int64_t kMaxLengthLimit = 65535;\n\n// scalar index type\nconst std::string kDefaultStringIndexType(\"Trie\");\nconst std::string kInvertedIndexType(\"INVERTED\");\nconst std::string kDefaultArithmeticIndexType = (\"STL_SORT\");\n\nconst int64_t kMaxIndexRow = 1000000;\n\n// Search, Index parameter keys\nconst std::string kTopkKey(\"topk\");\n// const std::string kSearchParamKey(\"search_param\");\nconst std::string kSearchParamKey(\"params\");\nconst std::string kOffsetKey(\"offset\");\nconst std::string kRoundDecimalKey(\"round_decimal\");\nconst std::string kGroupByFieldKey(\"group_by_field\");\nconst std::string kAnnFieldKey(\"anns_field\");\nconst std::string kSegmentNumKey(\"segment_num\");\nconst std::string kWithFilterKey(\"with_filter\");\nconst std::string kWithOptimizeKey(\"with_optimize\");\nconst std::string kCollectionKey(\"collection\");\nconst std::string kIndexParamsKey(\"params\");\nconst std::string kIndexTypeKey(\"index_type\");\nconst std::string kMetricTypeKey(\"metric_type\");\nconst std::string kDimKey(\"dim\");\nconst std::string kMaxLengthKey(\"max_length\");\nconst std::string kMaxCapacityKey(\"max_capacity\");\nconst std::string kReduceStopForBestKey(\"reduce_stop_for_best\");\nconst std::string kLimitKey(\"limit\");\nconst std::string KMetricsIPName(\"IP\");\nconst std::string kMetricsCosineName(\"COSINE\");\nconst std::string kMetricsBM25Name(\"BM25\");\nconst std::string kMetricsL2Name(\"L2\");\n\nconst std::string kBM25AvgName(\"bm25_avgdl\");\n\nconst std::string kCountStr(\"count(*)\");\n\ninline int64_t\nGetCollectionId(const std::string& collection_name) {\n    std::hash<std::string> hasher;\n    size_t hash_value = hasher(collection_name);\n    return static_cast<int64_t>(hash_value);\n}\n\ninline int64_t\nGetIndexId(const std::string& index_name) {\n    std::hash<std::string> hasher;\n    size_t hash_value = hasher(index_name);\n    return static_cast<int64_t>(hash_value);\n}\n\nstruct NonCopyableNonMovable {\n    constexpr NonCopyableNonMovable() noexcept = default;\n    virtual ~NonCopyableNonMovable() noexcept = default;\n\n    NonCopyableNonMovable(NonCopyableNonMovable&&) = delete;\n    NonCopyableNonMovable&\n    operator=(NonCopyableNonMovable&&) = delete;\n    NonCopyableNonMovable(const NonCopyableNonMovable&) = delete;\n    NonCopyableNonMovable&\n    operator=(const NonCopyableNonMovable&) = delete;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/create_collection_task.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"create_collection_task.h\"\n\n#include <cstddef>\n#include <cstdint>\n#include <exception>\n#include <limits>\n#include <string>\n#include \"common.h\"\n#include \"log/Log.h\"\n#include \"pb/schema.pb.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\nusing DType = ::milvus::proto::schema::DataType;\nusing DCase = ::milvus::proto::schema::ValueField::DataCase;\n\nbool\nCreateCollectionTask::HasSystemFields(\n    const ::milvus::proto::schema::CollectionSchema& schema) {\n    for (const auto& f : schema.fields()) {\n        if (f.name() == kRowIdFieldName || f.name() == kTimeStampFieldName ||\n            f.name() == kMetaFieldName) {\n            return true;\n        }\n    }\n    return false;\n}\n\nStatus\nCheckFieldParams(const ::milvus::proto::schema::FieldSchema& field) {\n    if (field.nullable()) {\n        return Status::ParameterInvalid(\"MilvusLite doesn't support nullable\");\n    }\n    // Treat the partition key as a normal field\n    if (field.is_partition_key()) {\n        auto f = const_cast<::milvus::proto::schema::FieldSchema*>(&field);\n        f->set_is_partition_key(false);\n    }\n    return Status::Ok();\n}\n\nStatus\nCreateCollectionTask::GetVarcharFieldMaxLength(\n    const ::milvus::proto::schema::FieldSchema& field, uint64_t* max_len) {\n    if (field.data_type() != DType::VarChar &&\n        field.element_type() != DType::VarChar) {\n        return Status::ParameterInvalid(\"{} is not varchar field\",\n                                        field.name());\n    }\n\n    for (const auto& kv_pair : field.type_params()) {\n        if (kv_pair.key() == kMaxLengthKey) {\n            try {\n                auto length = std::stoll(kv_pair.value());\n                if (length <= 0 || length > kMaxLengthLimit) {\n                    return Status::ParameterInvalid(\n                        \"the maximum length specified for a VarChar should \"\n                        \"be \"\n                        \"in (0, 65535])\");\n                } else {\n                    *max_len = static_cast<uint64_t>(length);\n                    return Status::Ok();\n                }\n            } catch (std::exception& e) {\n                return Status::ParameterInvalid(\"Invalid max length {}\",\n                                                kv_pair.value());\n            }\n        }\n    }\n\n    for (const auto& kv_pair : field.index_params()) {\n        if (kv_pair.key() == kMaxLengthKey) {\n            try {\n                auto length = std::stoll(kv_pair.value());\n                if (length <= 0 || length > kMaxLengthLimit) {\n                    return Status::ParameterInvalid(\n                        \"the maximum length specified for a VarChar should \"\n                        \"be \"\n                        \"in (0, 65535])\");\n                } else {\n                    *max_len = static_cast<uint64_t>(length);\n                    return Status::Ok();\n                }\n            } catch (std::exception& e) {\n                return Status::ParameterInvalid(\"Invalid max length {}\",\n                                                kv_pair.value());\n            }\n        }\n    }\n    return Status::ParameterInvalid(\n        \"type param(max_length) should be specified for varChar field of \"\n        \"collection\");\n}\n\nbool\nCreateCollectionTask::CheckDefaultValue(\n    const ::milvus::proto::schema::CollectionSchema& schema) {\n    for (const auto& f : schema.fields()) {\n        if (!f.has_default_value())\n            continue;\n        switch (f.default_value().data_case()) {\n            case DCase::kBoolData:\n                if (f.data_type() != DType::Bool) {\n                    LOG_ERROR(\n                        \"{} field's default value is Bool type, mismatches \"\n                        \"field type\",\n                        f.name());\n                    return false;\n                }\n                break;\n            case DCase::kIntData: {\n                if (f.data_type() != DType::Int16 &&\n                    f.data_type() != DType::Int32 &&\n                    f.data_type() != DType::Int8) {\n                    LOG_ERROR(\n                        \"{} field's default value is Int type, mismatches \"\n                        \"field type\",\n                        f.name());\n                    return false;\n                }\n                auto default_value = f.default_value().int_data();\n                if (f.data_type() == DType::Int16) {\n                    if (default_value < std::numeric_limits<int16_t>::min() ||\n                        default_value > std::numeric_limits<int16_t>::max()) {\n                        LOG_ERROR(\"{} field's default value out of range.\",\n                                  f.name());\n                        return false;\n                    }\n                }\n                if (f.data_type() == DType::Int8) {\n                    if (default_value < std::numeric_limits<int8_t>::min() ||\n                        default_value > std::numeric_limits<int8_t>::max()) {\n                        LOG_ERROR(\"{} field's default value out of range.\",\n                                  f.name());\n                        return false;\n                    }\n                }\n            } break;\n            case DCase::kLongData:\n                if (f.data_type() != DType::Int64) {\n                    LOG_ERROR(\n                        \"{} field's default value is Long type, mismatches \"\n                        \"field type\",\n                        f.name());\n                    return false;\n                }\n                break;\n            case DCase::kFloatData:\n                if (f.data_type() != DType::Float) {\n                    LOG_ERROR(\n                        \"{} field's default value is Float type, \"\n                        \"mismatches \"\n                        \"field type\",\n                        f.name());\n                    return false;\n                }\n                break;\n            case DCase::kDoubleData:\n                if (f.data_type() != DType::Double) {\n                    LOG_ERROR(\n                        \"{} field's default value is Double type, \"\n                        \"mismatches \"\n                        \"field type\",\n                        f.name());\n                    return false;\n                }\n                break;\n            case DCase::kStringData: {\n                if (f.data_type() != DType::VarChar) {\n                    LOG_ERROR(\n                        \"{} field's default value is VarChar type, \"\n                        \"mismatches field type\",\n                        f.name());\n                    return false;\n                }\n                auto string_len = f.default_value().string_data().size();\n                uint64_t max_length = 0;\n                auto s = GetVarcharFieldMaxLength(f, &max_length);\n                if (s.IsErr()) {\n                    LOG_ERROR(s.Detail());\n                    return false;\n                }\n\n                if (string_len > max_length) {\n                    return false;\n                }\n\n            } break;\n            // case DCase::kBytesData:  // not used\n            //     break;\n            default:\n                return false;\n                break;\n        }\n    }\n    return true;\n}\n\nvoid\nCreateCollectionTask::AssignFieldId(\n    ::milvus::proto::schema::CollectionSchema* schema) {\n    for (int i = 0; i < schema->fields_size(); i++) {\n        schema->mutable_fields(i)->set_fieldid(kStartOfUserFieldId + i);\n    }\n}\n\nvoid\nCreateCollectionTask::AppendDynamicField(\n    ::milvus::proto::schema::CollectionSchema* schema) {\n    if (schema->enable_dynamic_field()) {\n        auto dynamice_field = schema->add_fields();\n        dynamice_field->set_name(kMetaFieldName);\n        dynamice_field->set_description(\"dynamic schema\");\n        dynamice_field->set_data_type(DType::JSON);\n        dynamice_field->set_is_dynamic(true);\n    }\n}\n\nvoid\nCreateCollectionTask::AppendSysFields(\n    ::milvus::proto::schema::CollectionSchema* schema) {\n    auto row_id_field = schema->add_fields();\n    row_id_field->set_fieldid(kRowIdField);\n    row_id_field->set_name(kRowIdFieldName);\n    row_id_field->set_is_primary_key(false);\n    row_id_field->set_description(\"row id\");\n    row_id_field->set_data_type(DType::Int64);\n\n    auto ts_field = schema->add_fields();\n    ts_field->set_fieldid(kTimeStampField);\n    ts_field->set_name(kTimeStampFieldName);\n    ts_field->set_is_primary_key(false);\n    ts_field->set_description(\"time stamp\");\n    ts_field->set_data_type(DType::Int64);\n}\n\nStatus\nVaildBM25Functions(const ::milvus::proto::schema::CollectionSchema& schema,\n                   const milvus::proto::schema::FunctionSchema& fs) {\n    if (fs.type() != milvus::proto::schema::FunctionType::BM25) {\n        return Status::ParameterInvalid(\n            \"MilvusLite only supports BM25 function\");\n    }\n    if (fs.input_field_names_size() != 1 || fs.output_field_names_size() != 1) {\n        return Status::ParameterInvalid(\n            \"The input and output of the BM25 function must be 1\");\n    }\n    bool found_input = false;\n    bool found_output = false;\n    for (const auto& field : schema.fields()) {\n        if (field.name() == fs.input_field_names(0)) {\n            found_input = true;\n            if (field.is_dynamic()) {\n                return Status::ParameterInvalid(\n                    \"Function's input cannot be dynamic field\");\n            }\n            if (field.data_type() != milvus::proto::schema::DataType::VarChar) {\n                return Status::ParameterInvalid(\n                    \"BM25 funciton's input must be of VARCHAR type\");\n            }\n            if (field.nullable()) {\n                return Status::ParameterInvalid(\n                    \"Function's input cannot be nullable field\");\n            }\n        }\n\n        if (field.name() == fs.output_field_names(0)) {\n            found_output = true;\n            if (field.is_dynamic()) {\n                return Status::ParameterInvalid(\n                    \"Function's output cannot be dynamic field\");\n            }\n            if (field.data_type() !=\n                milvus::proto::schema::DataType::SparseFloatVector) {\n                return Status::ParameterInvalid(\n                    \"BM25 funciton's output must be of SparseFloatVector \"\n                    \"type\");\n            }\n            if (field.nullable()) {\n                return Status::ParameterInvalid(\n                    \"Function's output cannot be nullable field\");\n            }\n        }\n    }\n    if (!found_input) {\n        return Status::ParameterInvalid(\"function's input {} not found\",\n                                        fs.input_field_names(0));\n    }\n\n    if (!found_output) {\n        return Status::ParameterInvalid(\"function's output {} not found\",\n                                        fs.output_field_names(0));\n    }\n    return Status::Ok();\n}\n\nStatus\nCreateCollectionTask::ValidateSchema(\n    const ::milvus::proto::schema::CollectionSchema& schema) {\n    if (schema.fields_size() > kSchemaFieldLimit)\n        return Status::ParameterInvalid(\n            \"maximum field's number should be limited to {}\",\n            kSchemaFieldLimit);\n\n    std::set<std::string> field_names;\n    std::string pk_name;\n    for (const auto& field_schema : schema.fields()) {\n        if (field_names.find(field_schema.name()) != field_names.end()) {\n            return Status::ParameterInvalid(\"Duplicated field name: {}\",\n                                            field_schema.name());\n        }\n        if (field_schema.is_primary_key()) {\n            if (!pk_name.empty()) {\n                return Status::ParameterInvalid(\n                    \"there are more than one primary key, field_name = {}, \"\n                    \"{}\",\n                    pk_name,\n                    field_schema.name());\n            } else {\n                pk_name = field_schema.name();\n            }\n        }\n        if (field_schema.is_dynamic()) {\n            return Status::ParameterInvalid(\n                \"cannot explicitly set a field as a dynamic field\");\n        }\n        CHECK_STATUS(CheckFieldParams(field_schema), \"\");\n        CHECK_STATUS(CheckFieldName(field_schema.name()), \"\");\n        if (field_schema.data_type() == DType::VarChar) {\n            uint64_t max_length = 0;\n            CHECK_STATUS(GetVarcharFieldMaxLength(field_schema, &max_length),\n                         \"\");\n        }\n    }\n\n    // valid functions\n    for (const auto& f : schema.functions()) {\n        CHECK_STATUS(VaildBM25Functions(schema, f), \"\");\n    }\n    return Status::Ok();\n}\n\nStatus\nCreateCollectionTask::Process(\n    ::milvus::proto::schema::CollectionSchema* schema) {\n    if (!schema->ParseFromString(create_collection_request_->schema())) {\n        LOG_ERROR(\"Failed parse schema\");\n        return Status::ParameterInvalid(\"Failed parse schema\");\n    }\n\n    if (create_collection_request_->collection_name() != schema->name()) {\n        auto err = string_util::SFormat(\n            \"collection name [{}] not matches schema name [{}]\",\n            create_collection_request_->collection_name(),\n            schema->name());\n        LOG_ERROR(err);\n        return Status::ParameterInvalid(err);\n    }\n\n    CHECK_STATUS(ValidateSchema(*schema), \"\");\n\n    if (HasSystemFields(*schema)) {\n        auto err_msg =\n            string_util::SFormat(\"Schema contains system field {}, {}, {}\",\n                                 kRowIdFieldName,\n                                 kTimeStampFieldName,\n                                 kMetaFieldName);\n        LOG_ERROR(err_msg);\n        return Status::ParameterInvalid(err_msg);\n    }\n\n    if (!CheckDefaultValue(*schema)) {\n        return Status::ParameterInvalid();\n    }\n\n    AppendDynamicField(schema);\n    AssignFieldId(schema);\n    AppendSysFields(schema);\n    return Status::Ok();\n}\n\nStatus\nCreateCollectionTask::CheckFieldName(const std::string& field_name) {\n    std::string name = string_util::Trim(field_name);\n    if (name.empty()) {\n        return Status::ParameterInvalid(\"field {} should not be empty\", name);\n    }\n    std::string invalid_msg =\n        string_util::SFormat(\"Invalid field name {}. \", name);\n    if (name.size() > 255) {\n        return Status::ParameterInvalid(\n            \"{}, the length of a field name must \"\n            \"be less than 255 characters\",\n            invalid_msg);\n    }\n\n    char first = name[0];\n    if (first != '_' && !string_util::IsAlpha(first)) {\n        return Status::ParameterInvalid(\n            \"{} the first character of a field {} must be an underscore \"\n            \"or letter\",\n            invalid_msg,\n            name);\n    }\n    std::regex pattern(\"^[a-zA-Z_][a-zA-Z0-9_]*$\");\n    if (!std::regex_match(name, pattern)) {\n        auto err = string_util::SFormat(\n            \"{},  field name can only contain \"\n            \"numbers, letters and underscores\",\n            invalid_msg);\n        LOG_ERROR(err);\n        return Status::ParameterInvalid(err);\n    }\n    return Status::Ok();\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/create_collection_task.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"common.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nclass CreateCollectionTask final : NonCopyableNonMovable {\n public:\n    explicit CreateCollectionTask(\n        const ::milvus::proto::milvus::CreateCollectionRequest*\n            create_collection_request)\n        : create_collection_request_(create_collection_request) {\n    }\n    virtual ~CreateCollectionTask() = default;\n\n public:\n    Status\n    Process(::milvus::proto::schema::CollectionSchema* schema);\n\n private:\n    bool\n    CheckDefaultValue(const ::milvus::proto::schema::CollectionSchema& schema);\n\n    bool\n    HasSystemFields(const ::milvus::proto::schema::CollectionSchema& schema);\n\n    void\n    AssignFieldId(::milvus::proto::schema::CollectionSchema* schema);\n\n    void\n    AppendDynamicField(::milvus::proto::schema::CollectionSchema* schema);\n\n    void\n    AppendSysFields(::milvus::proto::schema::CollectionSchema* schema);\n\n    Status\n    GetVarcharFieldMaxLength(const ::milvus::proto::schema::FieldSchema& field,\n                             uint64_t* max_len);\n\n    Status\n    ValidateSchema(const ::milvus::proto::schema::CollectionSchema& schema);\n\n    Status\n    CheckFieldName(const std::string& field_name);\n\n private:\n    const ::milvus::proto::milvus::CreateCollectionRequest*\n        create_collection_request_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/create_index_task.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"create_index_task.h\"\n#include <algorithm>\n#include <cstdint>\n#include <functional>\n#include <map>\n#include <string>\n#include <vector>\n#include \"common.h\"\n#include \"nlohmann/json.hpp\"\n#include \"pb/common.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"schema_util.h\"\n#include \"log/Log.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\n/*      dtype               index_type                                     metric_type   \n                                                                                     \n *    FloatVector:         FLAT, HNWS                                      L2, IP, COSINE, AUTOINDEX\n *    BinaryVector:        BIN_FLAT                                        HAMMING, JACCARD, SUBSTRUCTURE, SUPERSTRUCTURE\n *    Float16Vector:       FLAT                                            L2, IP, COSINE\n *    BFloat16Vector:      FLAT                                            L2, IP, COSINE\n *    SparseFloatVector:   SPARSE_INVERTED_INDEX, SPARSE_WAND              IP, BM25 \n */\n\n// metrics type\nconst char* kL2 = \"L2\";\nconst char* kIP = \"IP\";\nconst char* kCosine = \"COSINE\";\nconst char* kHamming = \"HAMMING\";\nconst char* kJaccard = \"JACCARD\";\nconst char* kSubStructure = \"SUBSTRUCTURE\";\nconst char* kSuperStructure = \"SUPERSTRUCTURE\";\n\n// index_type\nconst char* kAutoIndex = \"AUTOINDEX\";\nconst char* kFlat = \"FLAT\";\nconst char* kBin_Flat = \"BIN_FLAT\";\n// const char* kHNSW = \"HNSW\";\nconst char* kIvf_Flat = \"IVF_FLAT\";\nconst char* kSparseInvertedIndex = \"SPARSE_INVERTED_INDEX\";\nconst char* kSparseWand = \"SPARSE_WAND\";\n\n// default metric\nconst char* kFloatVectorDefaultMetricType = kIP;\nconst char* kSparseFloatVectorDefaultMetricType = kIP;\nconst char* kBinaryVectorDefaultMetricType = kJaccard;\n\n//bm25 params\nconst char* kBm25K1 = \"bm25_k1\";\nconst char* kBm25B = \"bm25_b\";\n\nclass AutoIndexConfig final : NonCopyableNonMovable {\n public:\n    AutoIndexConfig()\n        : index_param({{\"M\", \"18\"},\n                       {\"efConstruction\", \"240\"},\n                       {\"index_type\", kAutoIndex},\n                       {\"metric_type\", kIP}}) {\n    }\n    ~AutoIndexConfig() = default;\n\n public:\n    const KVMap index_param;\n};\n\nusing DType = ::milvus::proto::schema::DataType;\n\nstatic const AutoIndexConfig kAutoIndexConfig;\n\nclass IndexChecker : NonCopyableNonMovable {\n public:\n    IndexChecker(const std::string& index_type,\n                 const std::string& metric,\n                 int64_t dim)\n        : index_type_(index_type),\n          metric_(metric),\n          dim_(dim),\n          need_check_dim_(true) {\n    }\n    virtual ~IndexChecker() = default;\n\n    Status\n    Check();\n\n protected:\n    std::string index_type_;\n    std::string metric_;\n    int64_t dim_;\n\n    bool need_check_dim_;\n    int64_t min_dim_;\n    int64_t max_dim_;\n    std::vector<std::string> supported_index_;\n    std::vector<std::string> supported_metric_;\n};\n\nStatus\nIndexChecker::Check() {\n    if (need_check_dim_ && (dim_ < min_dim_ || dim_ > max_dim_)) {\n        auto err = string_util::SFormat(\n            \"invalid dimension: {}. should be in range {} ~ {}\",\n            dim_,\n            min_dim_,\n            max_dim_);\n        return Status::Undefined(err);\n    }\n    if (std::find(supported_index_.begin(),\n                  supported_index_.end(),\n                  index_type_) == supported_index_.end()) {\n        auto err = string_util::SFormat(\n            \"invalid index type: {}, local mode only support {}\",\n            index_type_,\n            string_util::Join(\" \", supported_index_));\n        return Status::Undefined(err);\n    }\n    if (std::find(supported_metric_.begin(),\n                  supported_metric_.end(),\n                  metric_) == supported_metric_.end()) {\n        auto err = string_util::SFormat(\n            \"metric type {} not found or not supported, supported: {}\",\n            metric_,\n            string_util::Join(\" \", supported_metric_));\n        return Status::Undefined(err);\n    }\n    return Status::Ok();\n}\n\nclass FloatVectorIndexChecker : public virtual IndexChecker {\n public:\n    FloatVectorIndexChecker(const std::string& index_type,\n                            const std::string& metric,\n                            int64_t dim)\n        : IndexChecker(index_type, metric, dim) {\n        min_dim_ = 2;\n        max_dim_ = 32768;\n        supported_index_ = {kFlat, kIvf_Flat, kAutoIndex};\n        supported_metric_ = {kL2, kIP, kCosine};\n    }\n\n    virtual ~FloatVectorIndexChecker() = default;\n};\n\nclass BinaryVectorChecker : public virtual IndexChecker {\n public:\n    BinaryVectorChecker(const std::string& index_type,\n                        const std::string& metric,\n                        int64_t dim)\n        : IndexChecker(index_type, metric, dim) {\n        min_dim_ = 2;\n        max_dim_ = 32768;\n        supported_index_ = {kBin_Flat};\n        supported_metric_ = {\n            kHamming, kJaccard, kSubStructure, kSuperStructure};\n    }\n\n    virtual ~BinaryVectorChecker() = default;\n};\n\nclass Float16VectorChecker : public virtual IndexChecker {\n public:\n    Float16VectorChecker(const std::string& index_type,\n                         const std::string& metric,\n                         int64_t dim)\n        : IndexChecker(index_type, metric, dim) {\n        min_dim_ = 2;\n        max_dim_ = 32768;\n        supported_index_ = {kFlat};\n        supported_metric_ = {kL2, kIP, kCosine};\n    }\n\n    virtual ~Float16VectorChecker() = default;\n};\n\nclass BFloat16VectorChecker : public virtual IndexChecker {\n public:\n    BFloat16VectorChecker(const std::string& index_type,\n                          const std::string& metric,\n                          int64_t dim)\n        : IndexChecker(index_type, metric, dim) {\n        min_dim_ = 2;\n        max_dim_ = 32768;\n        supported_index_ = {kFlat};\n        supported_metric_ = {kL2, kIP, kCosine};\n    }\n\n    virtual ~BFloat16VectorChecker() = default;\n};\n\nclass SparseFloatVectorChecker : public virtual IndexChecker {\n public:\n    SparseFloatVectorChecker(const std::string& index_type,\n                             const std::string& metric,\n                             int64_t dim)\n        : IndexChecker(index_type, metric, dim) {\n        min_dim_ = -1;\n        max_dim_ = -1;\n        need_check_dim_ = false;\n        supported_index_ = {kSparseInvertedIndex, kSparseWand};\n        supported_metric_ = {kIP, kMetricsBM25Name};\n    }\n\n    virtual ~SparseFloatVectorChecker() = default;\n};\n\nStatus\nCheck(DType field_type,\n      const std::string& index_type,\n      const std::string& metric,\n      int64_t dim) {\n    if (field_type == DType::FloatVector) {\n        return FloatVectorIndexChecker(index_type, metric, dim).Check();\n    } else if (field_type == DType::Float16Vector) {\n        return Float16VectorChecker(index_type, metric, dim).Check();\n    } else if (field_type == DType::BFloat16Vector) {\n        return BFloat16VectorChecker(index_type, metric, dim).Check();\n    } else if (field_type == DType::BinaryVector) {\n        return BinaryVectorChecker(index_type, metric, dim).Check();\n    } else if (field_type == DType::SparseFloatVector) {\n        return SparseFloatVectorChecker(index_type, metric, dim).Check();\n    } else {\n        return Status::ParameterInvalid(\"Unknow data type\");\n    }\n}\n\nvoid\nCreateIndexTask::WrapUserIndexParams(const std::string& metrics_type) {\n    ::milvus::proto::common::KeyValuePair p1;\n    p1.set_key(kIndexTypeKey);\n    p1.set_value(kAutoIndex);\n    new_extra_params_.push_back(p1);\n\n    ::milvus::proto::common::KeyValuePair p2;\n    p2.set_key(kMetricTypeKey);\n    p2.set_value(metrics_type);\n    new_extra_params_.push_back(p2);\n}\n\nbool\nCreateIndexTask::AddAutoIndexParams(KVMap* index_params) {\n    is_auto_index_ = true;\n    if (index_params->find(kMetricTypeKey) != index_params->end()) {\n        const auto metrics_type = index_params->at(kMetricTypeKey);\n        WrapUserIndexParams(metrics_type);\n        index_params->insert(kAutoIndexConfig.index_param.begin(),\n                             kAutoIndexConfig.index_param.end());\n        (*index_params)[kMetricTypeKey] = metrics_type;\n        return true;\n    } else {\n        auto it = kAutoIndexConfig.index_param.find(kMetricTypeKey);\n        WrapUserIndexParams(it->second);\n        index_params->insert(kAutoIndexConfig.index_param.begin(),\n                             kAutoIndexConfig.index_param.end());\n        (*index_params)[kMetricTypeKey] = it->second;\n        return true;\n    }\n    return true;\n}\n\nStatus\nCreateIndexTask::CheckTrain(const ::milvus::proto::schema::FieldSchema& field,\n                            KVMap& index_params) {\n    auto index_type = index_params.at(kIndexTypeKey);\n    if (!IsVectorIndex(field.data_type())) {\n        return Status::Ok();\n    }\n    if (schema_util::IsSparseVectorType(field.data_type())) {\n        if (index_params[kMetricTypeKey] == kMetricsBM25Name) {\n            {\n                auto [succ, num] =\n                    string_util::ToNumber(index_params[kBM25AvgName]);\n                if (!succ) {\n                    return Status::ParameterInvalid(\"{}: {} is not a number\",\n                                                    kBM25AvgName,\n                                                    index_params[kBM25AvgName]);\n                }\n            }\n            {\n                auto [succ, num] = string_util::ToNumber(index_params[kBm25K1]);\n                if (!succ) {\n                    return Status::ParameterInvalid(\"{}: {} is not a number\",\n                                                    kBm25K1,\n                                                    index_params[kBm25K1]);\n                }\n                if (num < 0 || num > 3.0) {\n                    return Status::ParameterInvalid(\n                        \"{}: {} should be in range [0.0, 3.0]\",\n                        kBm25K1,\n                        index_params[kBm25K1]);\n                }\n            }\n            {\n                auto [succ, num] = string_util::ToNumber(index_params[kBm25B]);\n                if (!succ) {\n                    return Status::ParameterInvalid(\n                        \"{}: {} is not a number\", kBm25B, index_params[kBm25B]);\n                }\n                if (num < 0.0 || num > 1.0) {\n                    return Status::ParameterInvalid(\n                        \"{}: {} should be in range [0.0, 1.0]\",\n                        kBm25B,\n                        index_params[kBm25B]);\n                }\n            }\n        }\n    }\n    if (!schema_util::IsSparseVectorType(field.data_type())) {\n        if (!FillDimension(field, &index_params)) {\n            return Status::ParameterInvalid();\n        }\n    }\n    int64_t dim = -1;\n    if (!schema_util::IsSparseVectorType(field.data_type())) {\n        dim = std::stoll(index_params.at(kDimKey));\n    }\n\n    std::string metric = index_params.at(kMetricTypeKey);\n    return Check(field.data_type(), index_type, metric, dim);\n}\n\nStatus\nCreateIndexTask::ParseIndexParams() {\n    const milvus::proto::schema::FieldSchema* field_ptr = nullptr;\n    for (const auto& field : schema_->fields()) {\n        if (field.name() == create_index_request_->field_name()) {\n            field_ptr = &field;\n        }\n    }\n    if (field_ptr == nullptr) {\n        auto err = string_util::SFormat(\"Can not found field {}\",\n                                        create_index_request_->field_name());\n        LOG_ERROR(err);\n        return Status::ParameterInvalid(err);\n    }\n\n    if (!create_index_request_->index_name().empty()) {\n        index_name_ = create_index_request_->index_name();\n    } else {\n        index_name_ = field_ptr->name();\n    }\n\n    field_id_ = field_ptr->fieldid();\n    collectionid_ = GetCollectionId(schema_->name());\n\n    KVMap index_params;\n    for (const auto& param : create_index_request_->extra_params()) {\n        if (param.key() == kIndexParamsKey) {\n            try {\n                nlohmann::json data = nlohmann::json::parse(param.value());\n                for (auto& [key, value] : data.items()) {\n                    if (!value.is_string()) {\n                        index_params[key] = value.dump();\n                    }\n                }\n            } catch (nlohmann::json::parse_error& e) {\n                auto err =\n                    string_util::SFormat(\"Index params err: {}\", e.what());\n                LOG_ERROR(err);\n                return Status::ParameterInvalid(err);\n            }\n\n        } else {\n            index_params[param.key()] = param.value();\n        }\n    }\n\n    if (IsVectorIndex(field_ptr->data_type())) {\n        auto it = index_params.find(kIndexTypeKey);\n        if (it == index_params.end() || it->second == kAutoIndex) {\n            // default index and auto index only support floatvector type\n            if (!AddAutoIndexParams(&index_params))\n                return Status::SegcoreErr();\n        }\n\n        auto metric_it = index_params.find(kMetricTypeKey);\n        if (metric_it == index_params.end()) {\n            if (field_ptr->data_type() == DType::FloatVector ||\n                field_ptr->data_type() == DType::BFloat16Vector ||\n                field_ptr->data_type() == DType::Float16Vector) {\n                index_params[kMetricTypeKey] = kFloatVectorDefaultMetricType;\n            } else if (field_ptr->data_type() == DType::BinaryVector) {\n                index_params[kMetricTypeKey] = kBinaryVectorDefaultMetricType;\n            } else if (field_ptr->data_type() == DType::SparseFloatVector) {\n                index_params[kMetricTypeKey] =\n                    kSparseFloatVectorDefaultMetricType;\n            } else {\n                LOG_ERROR(\"Unkwon index data type: {}\", field_ptr->data_type());\n                return Status::ParameterInvalid();\n            }\n        }\n\n        if (index_params[kMetricTypeKey] == kMetricsBM25Name) {\n            if (index_params.find(kBm25K1) == index_params.end()) {\n                index_params[kBm25K1] = \"1.2\";\n            }\n            if (index_params.find(kBm25B) == index_params.end()) {\n                index_params[kBm25B] = \"0.75\";\n            }\n            if (index_params.find(kBM25AvgName) == index_params.end()) {\n                index_params[kBM25AvgName] = \"1000\";\n            }\n        }\n\n    } else {\n        // scalar index\n        auto it = index_params.find(kIndexTypeKey);\n        if (field_ptr->data_type() == DType::VarChar) {\n            if (it == index_params.end()) {\n                index_params[kIndexTypeKey] = kDefaultStringIndexType;\n            } else if (!ValidateStringIndexType(it->second)) {\n                auto err =\n                    string_util::SFormat(\"Unkown index type {}\", it->second);\n                LOG_ERROR(err);\n                return Status::ParameterInvalid(err);\n            }\n        } else if (field_ptr->data_type() == DType::Float ||\n                   field_ptr->data_type() == DType::Double ||\n                   field_ptr->data_type() == DType::Int16 ||\n                   field_ptr->data_type() == DType::Int8 ||\n                   field_ptr->data_type() == DType::Int32 ||\n                   field_ptr->data_type() == DType::Int64) {\n            if (it == index_params.end()) {\n                index_params[kIndexTypeKey] = kDefaultArithmeticIndexType;\n            } else if (!ValidateArithmeticIndexType(it->second)) {\n                auto err =\n                    string_util::SFormat(\"Unkown index type {}\", it->second);\n                LOG_ERROR(err);\n                return Status::ParameterInvalid(err);\n            }\n        } else if (field_ptr->data_type() == DType::Bool) {\n            if (it == index_params.end()) {\n                LOG_ERROR(\"no index type specified\");\n                return Status::ParameterInvalid(\"no index type specified\");\n            }\n            if (it->second != kInvertedIndexType) {\n                auto err = string_util::SFormat(\n                    \"index type {} not supported for boolean, supported: {}\",\n                    it->second,\n                    kInvertedIndexType);\n                LOG_ERROR(err);\n                return Status::ParameterInvalid(err);\n            }\n        } else {\n            LOG_ERROR(\n                \"Only int, varchar, float, double and bool fields support \"\n                \"scalar index.\");\n            return Status::ParameterInvalid();\n        }\n    }\n    auto it = index_params.find(kIndexTypeKey);\n    if (it == index_params.end()) {\n        LOG_ERROR(\"IndexType not specified\");\n        return Status::ParameterInvalid();\n    }\n\n    CHECK_STATUS(CheckTrain(*field_ptr, index_params), \"\");\n\n    index_params.erase(kDimKey);\n    index_params.erase(kMaxLengthKey);\n\n    for (const auto& param : index_params) {\n        ::milvus::proto::common::KeyValuePair p;\n        p.set_key(param.first);\n        p.set_value(param.second);\n        new_index_params_.push_back(p);\n    }\n\n    auto type_params = field_ptr->type_params();\n    KVMap type_params_map;\n    for (const auto& param : type_params) {\n        ::milvus::proto::common::KeyValuePair p;\n        p.set_key(param.key());\n        p.set_value(param.value());\n        new_type_params_.push_back(p);\n    }\n    return Status::Ok();\n}\n\nbool\nCreateIndexTask::IsVectorIndex(::milvus::proto::schema::DataType dtype) {\n    return schema_util::IsVectorField(dtype);\n}\n\nbool\nCreateIndexTask::FillDimension(\n    const ::milvus::proto::schema::FieldSchema& field, KVMap* index_params) {\n    if (!IsVectorIndex(field.data_type())) {\n        return true;\n    }\n\n    std::string dim;\n    if (!schema_util::FindDimFromFieldParams(field, &dim)) {\n        LOG_ERROR(\"Dimension not found in schema\");\n        return false;\n    }\n\n    auto it = index_params->find(kDimKey);\n    if (it != index_params->end() && it->second != dim) {\n        LOG_ERROR(\"dimension mismatch, dimension in schema: {}, dimension: {}\",\n                  dim,\n                  it->second);\n        return false;\n    } else {\n        (*index_params)[kDimKey] = dim;\n    }\n    return true;\n}\n\nStatus\nCreateIndexTask::Process(milvus::proto::segcore::FieldIndexMeta* field_meta) {\n    CHECK_STATUS(ParseIndexParams(), \"\");\n\n    field_meta->set_index_name(index_name_);\n    field_meta->set_fieldid(field_id_);\n    field_meta->set_collectionid(collectionid_);\n    field_meta->set_is_auto_index(is_auto_index_);\n\n    std::set<std::string> kset;\n\n    for (const auto& param : new_index_params_) {\n        if (kset.find(param.key()) == kset.end()) {\n            auto pair = field_meta->add_index_params();\n            pair->set_key(param.key());\n            pair->set_value(param.value());\n            kset.insert(param.key());\n        }\n    }\n\n    for (const auto& param : new_type_params_) {\n        if (kset.find(param.key()) == kset.end()) {\n            auto pair = field_meta->add_index_params();\n            pair->set_key(param.key());\n            pair->set_value(param.value());\n            kset.insert(param.key());\n        }\n    }\n\n    for (const auto& param : new_extra_params_) {\n        if (kset.find(param.key()) == kset.end()) {\n            auto pair = field_meta->add_index_params();\n            pair->set_key(param.key());\n            pair->set_value(param.value());\n            kset.insert(param.key());\n        }\n    }\n\n    return Status::Ok();\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/create_index_task.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n#include <map>\n#include <string>\n#include <vector>\n#include \"common.h\"\n#include \"pb/common.pb.h\"\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nclass CreateIndexTask final : NonCopyableNonMovable {\n public:\n    CreateIndexTask(\n        const ::milvus::proto::milvus::CreateIndexRequest* create_index_request,\n        const ::milvus::proto::schema::CollectionSchema* schema)\n        : create_index_request_(create_index_request), schema_(schema) {\n        field_id_ = 0;\n        collectionid_ = 0;\n        is_auto_index_ = false;\n    }\n    virtual ~CreateIndexTask() = default;\n\n public:\n    Status\n    Process(milvus::proto::segcore::FieldIndexMeta* field_meta);\n\n private:\n    Status\n    ParseIndexParams();\n\n    void\n    WrapUserIndexParams(const std::string& metrics_type);\n\n    bool\n    AddAutoIndexParams(KVMap* index_params);\n\n    Status\n    CheckTrain(const ::milvus::proto::schema::FieldSchema& field,\n               KVMap& index_params);\n\n    bool\n    ValidateStringIndexType(const std::string& index_type) {\n        return index_type == kDefaultStringIndexType ||\n               index_type == \"marisa-trie\" || index_type == kInvertedIndexType;\n    }\n\n    bool\n    ValidateArithmeticIndexType(const std::string& index_type) {\n        return index_type == kDefaultStringIndexType ||\n               index_type == \"Asceneding\" || index_type == kInvertedIndexType;\n    }\n\n    bool\n    FillDimension(const ::milvus::proto::schema::FieldSchema& field,\n                  KVMap* index_params);\n\n    bool\n    IsVectorIndex(::milvus::proto::schema::DataType dtype);\n\n private:\n    // string of ::milvus::proto::milvus::CreateIndexRequest;\n    const ::milvus::proto::milvus::CreateIndexRequest* create_index_request_;\n    const ::milvus::proto::schema::CollectionSchema* schema_;\n\n    std::vector<::milvus::proto::common::KeyValuePair> new_index_params_;\n    std::vector<::milvus::proto::common::KeyValuePair> new_type_params_;\n    std::vector<::milvus::proto::common::KeyValuePair> new_extra_params_;\n\n    std::string index_name_;\n    int64_t field_id_;\n    int64_t collectionid_;\n    bool is_auto_index_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/delete_task.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"delete_task.h\"\n#include \"antlr4-runtime.h\"\n#include \"log/Log.h\"\n#include \"parser/parser.h\"\n#include \"parser/utils.h\"\n#include \"schema_util.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\nStatus\nDeleteTask::Process(::milvus::proto::plan::PlanNode* plan) {\n    if (string_util::Trim(delete_request_->expr()) == \"\") {\n        return Status::ParameterInvalid(\"expr cannot be empty\");\n    }\n    CHECK_STATUS(\n        schema_util::ParseExpr(delete_request_->expr(),\n                               *schema_,\n                               plan->mutable_query()->mutable_predicates()),\n        \"\");\n\n    auto pk_id = schema_util::GetPkId(*schema_);\n    if (!pk_id.has_value()) {\n        LOG_ERROR(\"Can not found {}'s primary key\", schema_->name());\n        return Status::CollectionIllegalSchema();\n    }\n    plan->add_output_field_ids(*pk_id);\n    return Status::Ok();\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/delete_task.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/plan.pb.h\"\n#include \"common.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nclass DeleteTask : NonCopyableNonMovable {\n public:\n    DeleteTask(const ::milvus::proto::milvus::DeleteRequest* delete_request,\n               const ::milvus::proto::schema::CollectionSchema* schema)\n        : delete_request_(delete_request), schema_(schema) {\n    }\n    virtual ~DeleteTask() = default;\n\n    Status\n    Process(::milvus::proto::plan::PlanNode* plan);\n\n private:\n    const ::milvus::proto::milvus::DeleteRequest* delete_request_;\n    const ::milvus::proto::schema::CollectionSchema* schema_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/function/bm25_function.cpp",
    "content": "// Copyright (C) 2019-2025 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n\n#include \"function/bm25_function.h\"\n#include \"common.h\"\n#include \"log/Log.h\"\n#include \"schema_util.h\"\n#include \"common.pb.h\"\n#include \"schema.pb.h\"\n#include \"status.h\"\n\n#include <zlib.h>\n#include <utility>\n#include <vector>\n\nnamespace milvus::local::function {\n\nusing milvus::local::schema_util::SparseVectorToByte;\n\nconstexpr int substringLengthForCRC = 100;\n\nStatus\nBM25Function::ProcessInsert(\n    const std::vector<const milvus::proto::schema::FieldData*>& inputs,\n    std::vector<milvus::proto::schema::FieldData>* outputs) {\n    if (inputs.size() != 1) {\n        return Status::ParameterInvalid(\n            \"BM25Function inputs size must be 1, but got {}\", inputs.size());\n    }\n\n    if (inputs[0]->type() != milvus::proto::schema::DataType::VarChar) {\n        std::cout << inputs[0]->field_name() << inputs[0]->type() << std::endl;\n\n        return Status::ParameterInvalid(\n            \"BM25Function input type must be VarChar\");\n    }\n\n    if (!inputs[0]->scalars().has_string_data()) {\n        return Status::ParameterInvalid(\n            \"BM25Function input data is not string\");\n    }\n\n    auto docs = inputs[0]->scalars().string_data();\n\n    auto tk = this->tokenizer_.Clone();\n    milvus::proto::schema::FieldData sparse_field;\n    sparse_field.set_type(::milvus::proto::schema::DataType::SparseFloatVector);\n    sparse_field.set_field_name(meta_->output_fields_[0]->name());\n    auto sparse_array =\n        sparse_field.mutable_vectors()->mutable_sparse_float_vector();\n    sparse_array->set_dim(0);\n    for (int i = 0; i < docs.data_size(); i++) {\n        auto&& doc = docs.data(i);\n        SparseVector embd;\n        Embedding(doc, &embd);\n        //default little-endian macOS\\Linux\n        auto buf = sparse_array->add_contents();\n        int dim = embd.size();\n        SparseVectorToByte(embd, buf);\n        if (sparse_array->dim() < dim)\n            sparse_array->set_dim(dim);\n    }\n    outputs->push_back(sparse_field);\n    return Status::Ok();\n}\n\nStatus\nBM25Function::ProcessSearch(\n    const milvus::proto::common::PlaceholderGroup& input_plg,\n    milvus::proto::common::PlaceholderGroup* output_plg) {\n    auto& ph = input_plg.placeholders(0);\n    if (ph.type() != milvus::proto::common::PlaceholderType::VarChar) {\n        return Status::ParameterInvalid(\n            \"BM25 function error, the input is not varch\");\n    }\n\n    std::vector<SparseVector> embds;\n    for (const auto& doc : ph.values()) {\n        SparseVector embd;\n        Embedding(doc, &embd);\n        embds.emplace_back(std::move(embd));\n    }\n\n    auto plg_value = output_plg->add_placeholders();\n    plg_value->set_tag(kPlaceholderTag);\n    plg_value->set_type(\n        ::milvus::proto::common::PlaceholderType::SparseFloatVector);\n\n    for (auto&& embd : embds) {\n        std::string buf;\n        SparseVectorToByte(embd, &buf);\n        plg_value->add_values(buf);\n    }\n    return Status::Ok();\n}\n\nStatus\nBM25Function::Embedding(const std::string& doc, SparseVector* embd) {\n    auto tk = this->tokenizer_.Clone();\n    auto tokenstream = tk->CreateTokenStream(std::string(doc));\n    while (tokenstream->advance()) {\n        auto token = tokenstream->get_token();\n        if (token.size() > substringLengthForCRC) {\n            token = token.substr(0, substringLengthForCRC);\n        };\n        uint32_t crc =\n            crc32(0,\n                  reinterpret_cast<const unsigned char*>(token.c_str()),\n                  token.length());\n        (*embd)[crc % UINT32_MAX] += 1;\n    }\n    return Status::Ok();\n}\n\n}  // namespace milvus::local::function\n"
  },
  {
    "path": "src/function/bm25_function.h",
    "content": "// Copyright (C) 2019-2025 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <memory>\n#include <utility>\n#include \"common.h\"\n#include \"function/function.h\"\n#include \"schema.pb.h\"\n#include \"status.h\"\n#include \"tantivy/tokenizer.h\"\n\nnamespace milvus::local::function {\n\nclass BM25Function : public TransformFunctionBase {\n public:\n    BM25Function(std::unique_ptr<FunctionMeta> meta, std::string& params)\n        : TransformFunctionBase(std::move(meta)),\n          tokenizer_(std::move(params)) {\n    }\n\n public:\n    static std::pair<Status, std::unique_ptr<TransformFunctionBase>>\n    NewBM25Function(const milvus::proto::schema::CollectionSchema* schema,\n                    const milvus::proto::schema::FunctionSchema* func_schema) {\n        auto [s, meta] = FunctionMeta::Create(schema, func_schema);\n        if (!s.IsOk()) {\n            return std::make_pair(s, nullptr);\n        }\n        if (meta->func_schema_->output_field_names_size() != 1) {\n            return std::make_pair(\n                Status::ParameterInvalid(\n                    \"BM25 function only supports one onput, but got {}\",\n                    meta->output_fields_.size()),\n                nullptr);\n        }\n        if (meta->func_schema_->input_field_names_size() != 1) {\n            return std::make_pair(\n                Status::ParameterInvalid(\n                    \"BM25 function only supports one input, but got {}\",\n                    meta->output_fields_.size()),\n                nullptr);\n        }\n        if (meta->input_fields_[0]->data_type() !=\n            milvus::proto::schema::DataType::VarChar) {\n            return std::make_pair(\n                Status::ParameterInvalid(\n                    \"BM25 function only supports varchar input, but got {}\",\n                    milvus::proto::schema::DataType_Name(\n                        meta->input_fields_[0]->data_type())),\n                nullptr);\n        }\n        if (meta->output_fields_[0]->data_type() !=\n            milvus::proto::schema::DataType::SparseFloatVector) {\n            return std::make_pair(\n                Status::ParameterInvalid(\n                    \"BM25 function only supports sparse \"\n                    \"vector output, but got {}\",\n                    milvus::proto::schema::DataType_Name(\n                        meta->output_fields_[0]->data_type())),\n                nullptr);\n        }\n\n        std::string token_params;\n        for (const auto& param : meta->input_fields_[0]->type_params()) {\n            if (param.key() == \"analyzer_params\") {\n                token_params = param.value();\n                break;\n            }\n        }\n        return std::make_pair(\n            Status::Ok(),\n            std::unique_ptr<TransformFunctionBase>(\n                new BM25Function(std::move(meta), token_params)));\n    }\n\n public:\n    Status\n    ProcessInsert(\n        const std::vector<const milvus::proto::schema::FieldData*>& inputs,\n        std::vector<milvus::proto::schema::FieldData>* outputs) override;\n\n    Status\n    ProcessSearch(const milvus::proto::common::PlaceholderGroup& input_plg,\n                  milvus::proto::common::PlaceholderGroup* output_plg) override;\n\n private:\n    Status\n    Embedding(const std::string& doc, SparseVector* embd);\n\n private:\n    milvus::tantivy::Tokenizer tokenizer_;\n};\n\n}  // namespace milvus::local::function\n"
  },
  {
    "path": "src/function/function.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <sys/types.h>\n#include <cstdint>\n#include <memory>\n#include <utility>\n#include <vector>\n#include \"common.h\"\n#include \"log/Log.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/common.pb.h\"\n#include \"pb/milvus.pb.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local::function {\n\nusing milvus::local::Status;\n\nclass FunctionMeta : public NonCopyableNonMovable {\n private:\n    FunctionMeta(const milvus::proto::schema::CollectionSchema* schema,\n                 const milvus::proto::schema::FunctionSchema* func_schema,\n                 const std::vector<const milvus::proto::schema::FieldSchema*>\n                     input_fields,\n                 const std::vector<const milvus::proto::schema::FieldSchema*>\n                     output_fields)\n        : func_schema_(func_schema),\n          input_fields_(input_fields),\n          output_fields_(output_fields),\n          collection_name_(schema->name()),\n          function_type_name_(func_schema->GetTypeName()),\n          function_name_(func_schema->name()) {\n    }\n\n public:\n    virtual ~FunctionMeta() = default;\n\n public:\n    static std::pair<Status, std::unique_ptr<FunctionMeta>>\n    Create(const milvus::proto::schema::CollectionSchema* schema,\n           const milvus::proto::schema::FunctionSchema* func_schema) {\n        std::map<const std::string, const milvus::proto::schema::FieldSchema*>\n            name_field_map;\n        for (const auto& field : schema->fields()) {\n            name_field_map[field.name()] = &field;\n        }\n\n        std::vector<const milvus::proto::schema::FieldSchema*> output_fields;\n        for (const auto& name : func_schema->output_field_names()) {\n            auto it = name_field_map.find(name);\n            if (it == name_field_map.end()) {\n                auto err = string_util::SFormat(\n                    \"Can not find function output {} in schema\", name);\n                LOG_ERROR(err);\n                return std::make_pair(Status::ParameterInvalid(err), nullptr);\n            }\n            output_fields.push_back(it->second);\n        }\n\n        std::vector<const milvus::proto::schema::FieldSchema*> input_fields;\n        for (const auto& name : func_schema->input_field_names()) {\n            auto it = name_field_map.find(name);\n            if (it == name_field_map.end()) {\n                auto err = string_util::SFormat(\n                    \"Can not find function input {} in schema\", name);\n                LOG_ERROR(err);\n                return std::make_pair(Status::ParameterInvalid(err), nullptr);\n            }\n            input_fields.push_back(it->second);\n        }\n        return std::make_pair(\n            Status::Ok(),\n            std::unique_ptr<FunctionMeta>(new FunctionMeta(\n                schema, func_schema, input_fields, output_fields)));\n    }\n\n public:\n    const milvus::proto::schema::FunctionSchema* func_schema_;\n    const std::vector<const milvus::proto::schema::FieldSchema*> input_fields_;\n    const std::vector<const milvus::proto::schema::FieldSchema*> output_fields_;\n\n    const std::string collection_name_;\n    const std::string function_type_name_;\n    const std::string function_name_;\n};\n\nclass TransformFunctionBase {\n public:\n    TransformFunctionBase(std::unique_ptr<FunctionMeta> meta)\n        : meta_(std::move(meta)) {\n    }\n    virtual ~TransformFunctionBase() = default;\n\n public:\n    virtual Status\n    ProcessInsert(\n        const std::vector<const milvus::proto::schema::FieldData*>& inputs,\n        std::vector<milvus::proto::schema::FieldData>* outputs) = 0;\n    virtual Status\n    ProcessSearch(const milvus::proto::common::PlaceholderGroup& input_plg,\n                  milvus::proto::common::PlaceholderGroup* output_plg) = 0;\n\n    const milvus::proto::schema::FieldSchema*\n    GetFunctionOutputFieldSchema(uint i) {\n        return meta_->output_fields_[i];\n    }\n\n    const milvus::proto::schema::FieldSchema*\n    GetFunctioninputFieldSchema(uint i) {\n        return meta_->input_fields_[i];\n    }\n\n    const std::set<std::string>\n    GetInputFieldNames() {\n        std::set<std::string> field_names;\n        for (const auto& f : meta_->input_fields_) {\n            field_names.insert(f->name());\n        }\n        return field_names;\n    }\n\n protected:\n    std::unique_ptr<FunctionMeta> meta_;\n};\n\n}  // namespace milvus::local::function\n"
  },
  {
    "path": "src/function/function_executor.cpp",
    "content": "// Copyright (C) 2019-2025 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"function/function_executor.h\"\n#include <memory>\n#include <set>\n#include <utility>\n#include <vector>\n#include \"common.h\"\n#include \"function/bm25_function.h\"\n#include \"function/function_util.h\"\n#include \"log/Log.h\"\n#include \"schema.pb.h\"\n#include \"status.h\"\n\nnamespace milvus::local::function {\n\nstd::pair<Status, std::unique_ptr<FunctionExecutor>>\nFunctionExecutor::Create(const milvus::proto::schema::CollectionSchema* schema,\n                         std::string field_name) {\n    for (const auto& f_schema : schema->functions()) {\n        if (f_schema.output_field_names(0) == field_name) {\n            auto [s, f] = CreateFunction(schema, &f_schema);\n            if (!s.IsOk()) {\n                return std::make_pair(s, nullptr);\n            }\n            std::vector<std::unique_ptr<TransformFunctionBase>> functions_;\n            functions_.emplace_back(std::move(f));\n            std::unique_ptr<FunctionExecutor> executor(\n                new FunctionExecutor(std::move(functions_)));\n            return std::make_pair(Status::Ok(), std::move(executor));\n        }\n    }\n    return std::make_pair(\n        Status::ParameterInvalid(\"No function's output is {}\", field_name),\n        nullptr);\n}\n\nstd::pair<Status, std::unique_ptr<FunctionExecutor>>\nFunctionExecutor::Create(\n    const milvus::proto::schema::CollectionSchema* schema) {\n    std::vector<std::unique_ptr<TransformFunctionBase>> functions_;\n    for (const auto& f_schemn : schema->functions()) {\n        auto [s, f] = CreateFunction(schema, &f_schemn);\n        if (!s.IsOk()) {\n            return std::make_pair(s, nullptr);\n        }\n        functions_.emplace_back(std::move(f));\n    }\n    std::unique_ptr<FunctionExecutor> executor(\n        new FunctionExecutor(std::move(functions_)));\n    return std::make_pair(Status::Ok(), std::move(executor));\n}\n\nstd::pair<Status, std::unique_ptr<TransformFunctionBase>>\nFunctionExecutor::CreateFunction(\n    const milvus::proto::schema::CollectionSchema* schema,\n    const milvus::proto::schema::FunctionSchema* function_schema) {\n    if (function_schema->type() == milvus::proto::schema::FunctionType::BM25) {\n        auto [s, f] = BM25Function::NewBM25Function(schema, function_schema);\n        if (!s.IsOk()) {\n            return std::make_pair(s, nullptr);\n        }\n        return std::make_pair(Status::Ok(), std::move(f));\n\n    } else {\n        return std::make_pair(\n            Status::ParameterInvalid(\"Unsupported function: {}\",\n                                     milvus::proto::schema::FunctionType_Name(\n                                         function_schema->type())),\n            nullptr);\n    }\n}\n\nStatus\nFunctionExecutor::ProcessInsert(milvus::proto::milvus::InsertRequest* insert) {\n    for (const auto& f : functions_) {\n        CHECK_STATUS(ProcessSingeFunction(insert, f), \"\");\n    }\n    return Status::Ok();\n}\n\nStatus\nFunctionExecutor::ProcessSingeFunction(\n    milvus::proto::milvus::InsertRequest* insert,\n    const std::unique_ptr<TransformFunctionBase>& f) {\n    auto field_names = f->GetInputFieldNames();\n\n    std::vector<const milvus::proto::schema::FieldData*> inputs;\n    for (int i = 0; i < insert->fields_data_size(); i++) {\n        if (field_names.find(insert->fields_data(i).field_name()) !=\n            field_names.end()) {\n            inputs.emplace_back(&insert->fields_data(i));\n        }\n    }\n    std::vector<milvus::proto::schema::FieldData> outputs;\n    CHECK_STATUS(f->ProcessInsert(inputs, &outputs), \"\");\n    for (auto& field : outputs) {\n        insert->mutable_fields_data()->Add(std::move(field));\n    }\n    return Status::Ok();\n}\n\nStatus\nFunctionExecutor::ProcessSearch(milvus::proto::milvus::SearchRequest* search) {\n    milvus::proto::common::PlaceholderGroup ph_group;\n    if (!ph_group.ParseFromString(search->placeholder_group())) {\n        return Status::ParameterInvalid(\"Parse placehoder string failed\");\n    }\n\n    if (ph_group.placeholders_size() != 1) {\n        return Status::ParameterInvalid(\"placeholders size is not equal 1\");\n    }\n\n    milvus::proto::common::PlaceholderGroup output;\n    CHECK_STATUS(functions_[0]->ProcessSearch(ph_group, &output), \"\");\n    search->mutable_placeholder_group()->assign(output.SerializeAsString());\n    return Status::Ok();\n}\n\n}  // namespace milvus::local::function\n"
  },
  {
    "path": "src/function/function_executor.h",
    "content": "// Copyright (C) 2019-2025 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <map>\n#include <cstddef>\n#include <memory>\n#include <utility>\n#include <vector>\n\n#include \"common.h\"\n#include \"function/function.h\"\n#include \"status.h\"\n\nnamespace milvus::local::function {\n\nusing milvus::local::Status;\n\nclass FunctionExecutor : NonCopyableNonMovable {\n public:\n    virtual ~FunctionExecutor() = default;\n\n private:\n    explicit FunctionExecutor(\n        std::vector<std::unique_ptr<TransformFunctionBase>> functions)\n        : functions_(std::move(functions)) {\n    }\n\n public:\n    Status\n    ProcessInsert(milvus::proto::milvus::InsertRequest* insert);\n\n    Status\n    ProcessSearch(milvus::proto::milvus::SearchRequest* search);\n\n private:\n    Status\n    ProcessSingeFunction(milvus::proto::milvus::InsertRequest* insert,\n                         const std::unique_ptr<TransformFunctionBase>& f);\n\n public:\n    static std::pair<Status, std::unique_ptr<FunctionExecutor>>\n    Create(const milvus::proto::schema::CollectionSchema* schema,\n           std::string function_name);\n\n    static std::pair<Status, std::unique_ptr<FunctionExecutor>>\n    Create(const milvus::proto::schema::CollectionSchema* schema);\n\n private:\n    static std::pair<Status, std::unique_ptr<TransformFunctionBase>>\n    CreateFunction(\n        const milvus::proto::schema::CollectionSchema* schema,\n        const milvus::proto::schema::FunctionSchema* function_schema);\n\n private:\n    const std::vector<std::unique_ptr<TransformFunctionBase>> functions_;\n    //std::unique_ptr<TransformFunctionBase> function_;\n};\n\n}  // namespace milvus::local::function\n"
  },
  {
    "path": "src/function/function_util.h",
    "content": "// Copyright (C) 2019-2025 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n\n#pragma once\n\n#include <string>\n\n#include \"pb/common.pb.h\"\n#include \"pb/milvus.pb.h\"\n#include \"status.h\"\n\nnamespace milvus::local::function {\n\ntemplate <typename T>\nclass FunctionUtil {\n public:\n    static Status\n    ParseFieldData(milvus::proto::schema::FieldData* field_data,\n                   const std::string& field_name,\n                   std::vector<T>* values);\n};\n\ntemplate <typename T>\nStatus\nFunctionUtil<T>::ParseFieldData(milvus::proto::schema::FieldData* field_data,\n                                const std::string& field_name,\n                                std::vector<T>* values) {\n    return Status::Ok();\n}\n\n}  // namespace milvus::local::function"
  },
  {
    "path": "src/hybrid_search_task.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"hybrid_search_task.h\"\n#include <algorithm>\n#include <cstddef>\n#include <cstdint>\n#include <map>\n#include <vector>\n#include \"common.h\"\n#include \"common.pb.h\"\n#include \"log/Log.h\"\n#include \"parser/utils.h\"\n#include \"re_scorer.h\"\n#include \"schema_util.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n#include \"milvus_id.hpp\"\n\nnamespace milvus::local {\n\nStatus\nHyBridSearchTask::ParseRankParams(\n    const ::google::protobuf::RepeatedPtrField<\n        ::milvus::proto::common::KeyValuePair>& params) {\n    for (const auto& param : params) {\n        if (param.key() == kLimitKey) {\n            try {\n                limit_ = std::stoll(param.value());\n            } catch (std::exception& e) {\n                LOG_ERROR(\"Parse limit failed, limit: {}, err: {}\",\n                          param.value(),\n                          e.what());\n                return Status::ParameterInvalid();\n            }\n        } else if (param.key() == kOffsetKey) {\n            try {\n                offset_ = std::stoll(param.value());\n            } catch (std::exception& e) {\n                LOG_ERROR(\"Parse offset failed, offset: {}, err: {}\",\n                          param.value(),\n                          e.what());\n                return Status::ParameterInvalid();\n            }\n\n        } else if (param.key() == kRoundDecimalKey) {\n            try {\n                round_decimal_ = std::stoll(param.value());\n            } catch (std::exception& e) {\n                LOG_ERROR(\n                    \"Parse round_decimal failed, round_decimal: {}, err: {}\",\n                    param.value(),\n                    e.what());\n                return Status::ParameterInvalid();\n            }\n        }\n    }\n\n    if (offset_ < 0) {\n        return Status::ParameterInvalid(\n            \"{} {} is invalid, should be gte than 0\", kOffsetKey, offset_);\n    }\n\n    if (limit_ <= 0) {\n        return Status::ParameterInvalid(\n            \"{} {} is invalid, should be greater than 0\", kLimitKey, limit_);\n    }\n\n    int64_t depth = offset_ + limit_;\n    if (depth <= 0 || depth > kTopkLimit) {\n        return Status::ParameterInvalid(\n            \"(offset+limit) should be in range [1, {}], but got {}\",\n            kTopkLimit,\n            depth);\n    }\n    return Status::Ok();\n}\n\nStatus\nHyBridSearchTask::GetMetricType(\n    const ::milvus::proto::milvus::SearchRequest& req, std::string* metric) {\n    std::string ann_field;\n    for (const auto& param : req.search_params()) {\n        if (param.key() == kMetricTypeKey) {\n            *metric = param.value();\n        } else if (param.key() == kAnnFieldKey) {\n            ann_field = param.value();\n        }\n    }\n\n    if (ann_field.empty()) {\n        return Status::ParameterInvalid(\"Ann field not found\");\n    }\n\n    const ::milvus::proto::schema::FieldSchema* field;\n    auto s = schema_util::FindVectorField(*schema_, ann_field, &field);\n    CHECK_STATUS(s, \"\");\n\n    std::string index_metric;\n    for (const auto& index_str : *all_index_) {\n        milvus::proto::segcore::FieldIndexMeta field_index;\n        if (!field_index.ParseFromString(index_str)) {\n            return Status::ServiceInternal(\"Error index info in db\");\n        }\n        if (field_index.fieldid() == field->fieldid()) {\n            index_metric = schema_util::GetIndexMetricType(field_index);\n        }\n    }\n\n    if (metric->empty())\n        *metric = index_metric;\n\n    if (metric->empty() || *metric != index_metric) {\n        return Status::ParameterInvalid(\n            \"fail to search: metric type not match: invalid \"\n            \"[expected={}][actual={}]\",\n            index_metric,\n            *metric);\n    }\n    return Status::Ok();\n}\n\nStatus\nHyBridSearchTask::ProcessSearch(\n    const ::milvus::proto::milvus::HybridSearchRequest* request,\n    std::vector<::milvus::proto::milvus::SearchRequest>* search_requests) {\n    if (request->requests_size() <= 0) {\n        return Status::ParameterInvalid(\"No subrequest found\");\n    }\n\n    if (!schema_util::TranslateOutputFields(request->output_fields(),\n                                            *schema_,\n                                            false,\n                                            &output_fields_,\n                                            &user_output_fields_)) {\n        return Status::ParameterInvalid();\n    }\n\n    CHECK_STATUS(ParseRankParams(request->rank_params()), \"\");\n    CHECK_STATUS(\n        NewReScorers(\n            request->requests_size(), request->rank_params(), &re_scorers_),\n        \"\");\n    nq_ = request->requests(0).nq();\n\n    for (int64_t i = 0; i < request->requests_size(); i++) {\n        auto req = request->requests(i);\n        if (nq_ != req.nq()) {\n            return Status::ParameterInvalid(\n                \"sub search request nq should be the same: invalid \"\n                \"parameter[expected={}][actual={}]\",\n                nq_,\n                req.nq());\n        }\n        // search without output_fields\n        ::milvus::proto::milvus::SearchRequest search_request;\n        search_request.set_collection_name(request->collection_name());\n        search_request.mutable_partition_names()->CopyFrom(\n            request->partition_names());\n\n        search_request.set_not_return_all_meta(request->not_return_all_meta());\n        search_request.set_consistency_level(request->consistency_level());\n        search_request.set_use_default_consistency(\n            request->use_default_consistency());\n        search_request.set_search_by_primary_keys(false);\n        search_request.set_dsl(req.dsl());\n        search_request.set_placeholder_group(req.placeholder_group());\n        search_request.set_dsl_type(req.dsl_type());\n        // need remove offset in subrequest\n        for (const auto& pair : req.search_params()) {\n            if (pair.key() != kOffsetKey) {\n                auto new_pair = search_request.add_search_params();\n                new_pair->set_key(pair.key());\n                new_pair->set_value(pair.value());\n            }\n        }\n        search_request.set_nq(req.nq());\n        std::string metric;\n        CHECK_STATUS(GetMetricType(search_request, &metric), \"\");\n        re_scorers_[i]->SetMetricType(metric);\n        search_requests->push_back(search_request);\n    }\n    return Status::Ok();\n}\n\nStatus\nHyBridSearchTask::PostProcessSearch(\n    std::vector<::milvus::proto::milvus::SearchResults>& search_results,\n    ::milvus::proto::milvus::SearchResults* search_result) {\n    search_result->mutable_results()->set_num_queries(nq_);\n    search_result->mutable_results()->set_top_k(limit_);\n\n    for (size_t i = 0; i < search_results.size(); i++) {\n        re_scorers_[i]->ReScore(&search_results[i]);\n    }\n    std::vector<std::map<MilvusID, float>> accumulated_scores(nq_);\n    for (const auto& req : search_results) {\n        int64_t start = 0;\n        for (int64_t i = 0; i < nq_; i++) {\n            int64_t topk = req.results().topks(i);\n            for (int64_t j = start; j < start + topk; j++) {\n                MilvusID id(req.results().ids(), j);\n                if (accumulated_scores[i].find(id) ==\n                    accumulated_scores[i].end()) {\n                    accumulated_scores[i][id] = req.results().scores(j);\n                } else {\n                    accumulated_scores[i][id] += req.results().scores(j);\n                }\n            }\n            start += topk;\n        }\n    }\n    for (int64_t i = 0; i < nq_; i++) {\n        auto id_scores = accumulated_scores[i];\n        if (id_scores.size() < offset_) {\n            search_result->mutable_results()->add_topks(0);\n            continue;\n        }\n\n        std::vector<std::pair<MilvusID, float>> sorted_id_scores(\n            id_scores.begin(), id_scores.end());\n        std::sort(sorted_id_scores.begin(),\n                  sorted_id_scores.end(),\n                  [](const std::pair<MilvusID, float>& a,\n                     const std::pair<MilvusID, float>& b) {\n                      return a.second > b.second;\n                  });\n        auto begin = sorted_id_scores.begin() + offset_;\n        auto end = offset_ + limit_ < sorted_id_scores.size()\n                       ? sorted_id_scores.begin() + offset_ + limit_\n                       : sorted_id_scores.end();\n\n        auto topk_id_scores =\n            std::vector<std::pair<MilvusID, float>>(begin, end);\n        search_result->mutable_results()->add_topks(topk_id_scores.size());\n        for (const auto& id_score_pair : topk_id_scores) {\n            search_result->mutable_results()->add_scores(id_score_pair.second);\n            id_score_pair.first.AppendToIDs(\n                search_result->mutable_results()->mutable_ids());\n        }\n    }\n    return Status::Ok();\n}\n\nvoid\nHyBridSearchTask::ProcessQuery(\n    const ::milvus::proto::milvus::HybridSearchRequest* r,\n    const ::milvus::proto::milvus::SearchResults* search_result,\n    ::milvus::proto::milvus::QueryRequest* query_req) {\n    query_req->set_collection_name(r->collection_name());\n    query_req->mutable_output_fields()->CopyFrom(r->output_fields());\n    query_req->mutable_partition_names()->CopyFrom(r->partition_names());\n    query_req->set_not_return_all_meta(true);\n    query_req->set_consistency_level(\n        ::milvus::proto::common::ConsistencyLevel::Strong);\n    query_req->set_use_default_consistency(false);\n\n    std::string pk_name = schema_util::GetPkName(*schema_).value();\n    if (search_result->results().ids().has_int_id()) {\n        auto ids_str = string_util::Join(\n            \",\", search_result->results().ids().int_id().data());\n        auto expr = string_util::SFormat(\"{} in [{}]\", pk_name, ids_str);\n        query_req->set_expr(expr);\n\n    } else {\n        std::vector<std::string> ids;\n        for (int i = 0; i < search_result->results().ids().str_id().data_size();\n             i++) {\n            ids.emplace_back(\n                \"'\" + search_result->results().ids().str_id().data(i) + \"'\");\n        }\n        auto ids_str = string_util::Join(\",\", ids);\n        auto expr = string_util::SFormat(\"{} in [{}]\", pk_name, ids_str);\n        query_req->set_expr(expr);\n    }\n}\n\nStatus\nHyBridSearchTask::PostProcess(\n    const RetrieveResult& query_result,\n    ::milvus::proto::milvus::SearchResults* search_result) {\n    milvus::proto::segcore::RetrieveResults seg_ret;\n    seg_ret.ParseFromArray(query_result.retrieve_result_.proto_blob,\n                           query_result.retrieve_result_.proto_size);\n\n    // Copy field data from query result\n    // Reorganize Results. The order of query result ids will be altered and differ from queried ids.\n    // We should reorganize query results to keep the order of original queried ids. For example:\n    // query expr pk in [3, 5, 1, 3, 5, 2]\n    // query result: [3, 5, 1, 2]\n    // need reorganize\n\n    std::map<MilvusID, int> offsets;\n    int query_size = schema_util::IDsSize(seg_ret.ids());\n    for (int i = 0; i < query_size; i++) {\n        offsets[MilvusID(seg_ret.ids(), i)] = i;\n    }\n\n    int search_size = schema_util::IDsSize(search_result->results().ids());\n    std::vector<int64_t> indexes;\n    for (int i = 0; i < search_size; i++) {\n        indexes.push_back(offsets[MilvusID(search_result->results().ids(), i)]);\n    }\n\n    std::vector<int64_t> field_ids;\n    schema_util::GetOutputFieldsIds(output_fields_, *schema_, &field_ids);\n    for (const auto& field_data : seg_ret.fields_data()) {\n        if (std::find(field_ids.begin(),\n                      field_ids.end(),\n                      field_data.field_id()) == field_ids.end()) {\n            continue;\n        }\n        auto new_data = search_result->mutable_results()->add_fields_data();\n        new_data->set_type(field_data.type());\n        new_data->set_field_name(field_data.field_name());\n        new_data->set_field_id(field_data.field_id());\n        new_data->set_is_dynamic(field_data.is_dynamic());\n        schema_util::PickFieldDataByIndex(field_data, indexes, new_data);\n    }\n    for (const auto& name : user_output_fields_) {\n        search_result->mutable_results()\n            ->mutable_output_fields()\n            ->Add()\n            ->append(name);\n    }\n    FillInFieldInfo(search_result->mutable_results());\n    return Status::Ok();\n}\n\nvoid\nHyBridSearchTask::FillInFieldInfo(\n    ::milvus::proto::schema::SearchResultData* result_data) {\n    std::variant<::milvus::proto::schema::SearchResultData*,\n                 ::milvus::proto::milvus::QueryResults*>\n        result_var;\n    result_var = result_data;\n    schema_util::FillInFieldInfo(output_fields_, *schema_, result_var);\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/hybrid_search_task.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <vector>\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/plan.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"retrieve_result.h\"\n#include \"common.h\"\n#include \"status.h\"\n#include \"re_scorer.h\"\n\nnamespace milvus::local {\n\nclass HyBridSearchTask : NonCopyableNonMovable {\n public:\n    HyBridSearchTask(const ::milvus::proto::schema::CollectionSchema* schema,\n                     const std::vector<std::string>* all_index)\n        : schema_(schema),\n          all_index_(all_index),\n          offset_(0),\n          limit_(-1),\n          round_decimal_(-1),\n          nq_(-1) {\n    }\n    virtual ~HyBridSearchTask() = default;\n\n    Status\n    ProcessSearch(\n        const ::milvus::proto::milvus::HybridSearchRequest* request,\n        std::vector<::milvus::proto::milvus::SearchRequest>* search_requests);\n\n    Status\n    PostProcessSearch(\n        std::vector<::milvus::proto::milvus::SearchResults>& search_results,\n        ::milvus::proto::milvus::SearchResults* search_result);\n\n    void\n    ProcessQuery(const ::milvus::proto::milvus::HybridSearchRequest* r,\n                 const ::milvus::proto::milvus::SearchResults* search_result,\n                 ::milvus::proto::milvus::QueryRequest* query_req);\n\n    Status\n    PostProcess(const RetrieveResult& query_result,\n                ::milvus::proto::milvus::SearchResults* search_result);\n\n    const ::milvus::proto::schema::CollectionSchema*\n    GetSchema() {\n        return schema_;\n    }\n\n    void\n    FillInFieldInfo(::milvus::proto::schema::SearchResultData* result_data);\n\n private:\n    Status\n    ParseRankParams(const ::google::protobuf::RepeatedPtrField<\n                    ::milvus::proto::common::KeyValuePair>& params);\n\n    Status\n    GetMetricType(const ::milvus::proto::milvus::SearchRequest& req,\n                  std::string* metric);\n\n private:\n    const ::milvus::proto::schema::CollectionSchema* schema_;\n    const std::vector<std::string>* all_index_;\n    std::vector<std::string> output_fields_;\n    std::vector<std::string> user_output_fields_;\n\n    uint64_t offset_;\n    int64_t limit_;\n    int64_t round_decimal_;\n    int64_t nq_;\n    std::vector<std::unique_ptr<ReScorer>> re_scorers_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/index.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"index.h\"\n#include \"common.h\"\n#include \"log/Log.h\"\n#include \"status.h\"\n#include <exception>\n\nnamespace milvus::local {\n\nStatus\nIndex::CreateCollection(const std::string& collection_name,\n                        const std::string& schema_proto,\n                        const std::string& index_proto) {\n    if (HasLoaded(collection_name)) {\n        LOG_INFO(\"Collection {} alread load\", collection_name);\n        return Status::Ok();\n    }\n\n    auto c = std::make_unique<SegcoreWrapper>();\n    CHECK_STATUS(\n        c->SetCollectionInfo(collection_name, schema_proto, index_proto),\n        \"Create collection failed: \");\n    collections_[collection_name] = std::move(c);\n    return Status::Ok();\n}\n\nbool\nIndex::DropCollection(const std::string& collection_name) {\n    if (collections_.find(collection_name) != collections_.end()) {\n        collections_.erase(collection_name);\n    }\n    return true;\n}\n\nStatus\nIndex::CreateIndex(const std::string& collection_name,\n                   const std::string& index_proto) {\n    if (collections_.find(collection_name) == collections_.end()) {\n        LOG_ERROR(\"Collecton {} not existed\", collection_name);\n        return Status::CollectionNotFound();\n    }\n    CHECK_STATUS(collections_[collection_name]->SetIndexMeta(index_proto),\n                 \"Create index failed:\");\n    return Status::Ok();\n}\n\nStatus\nIndex::Insert(const std::string& collection_name,\n              int64_t size,\n              const std::string& insert_record_prot) {\n    if (collections_.find(collection_name) == collections_.end()) {\n        LOG_ERROR(\"Collecton {} not existed\", collection_name);\n        return Status::CollectionNotFound();\n    }\n    return collections_[collection_name]->Insert(size, insert_record_prot);\n}\n\nStatus\nIndex::Retrieve(const std::string& collection_name,\n                const std::string& plan,\n                RetrieveResult* result) {\n    if (collections_.find(collection_name) == collections_.end()) {\n        LOG_ERROR(\"Collecton {} not existed\", collection_name);\n        return Status::CollectionNotFound();\n    }\n    return collections_[collection_name]->Retrieve(plan, result);\n}\n\nStatus\nIndex::Search(const std::string& collection_name,\n              const std::string& plan,\n              const std::string& placeholder_group,\n              SearchResult* result) {\n    if (collections_.find(collection_name) == collections_.end()) {\n        LOG_ERROR(\"Collecton {} not existed\", collection_name);\n        return Status::CollectionNotFound();\n    }\n    return collections_[collection_name]->Search(\n        plan, placeholder_group, result);\n}\n\nStatus\nIndex::DeleteByIds(const std::string& collection_name,\n                   const std::string& ids,\n                   int64_t size) {\n    if (collections_.find(collection_name) == collections_.end()) {\n        LOG_ERROR(\"Collecton {} not existed\", collection_name);\n        return Status::CollectionNotFound();\n    }\n    return collections_[collection_name]->DeleteByIds(ids, size);\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/index.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n#include <map>\n#include <memory>\n#include <string>\n#include \"segcore_wrapper.h\"\n#include \"common.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nclass Index final : NonCopyableNonMovable {\n public:\n    Index() = default;\n    virtual ~Index() = default;\n\n public:\n    // meta interface\n    Status\n    CreateCollection(const std::string& collection_name,\n                     const std::string& schema_proto,\n                     const std::string& index_proto);\n    bool\n    DropCollection(const std::string& collection_name);\n\n    bool\n    HasLoaded(const std::string& collection_name) {\n        return collections_.find(collection_name) != collections_.end();\n    }\n\n    Status\n    CreateIndex(const std::string& collection_name,\n                const std::string& index_proto);\n\n    Status\n    Insert(const std::string& collection_name,\n           int64_t size,\n           const std::string& insert_record_proto);\n\n    Status\n    Retrieve(const std::string& collection_name,\n             const std::string& expr,\n             RetrieveResult* result);\n\n    Status\n    Search(const std::string& collection_name,\n           const std::string& plan,\n           const std::string& placeholder_group,\n           SearchResult* result);\n\n    Status\n    DeleteByIds(const std::string& collection_name,\n                const std::string& ids,\n                int64_t size);\n\n private:\n    std::map<std::string, std::unique_ptr<SegcoreWrapper>> collections_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/insert_task.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"insert_task.h\"\n#include <algorithm>\n#include <any>\n#include <chrono>\n#include <cstddef>\n#include <cstdint>\n#include <string>\n#include <tuple>\n#include <vector>\n#include \"common.h\"\n#include \"function/function_executor.h\"\n#include \"log/Log.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"schema_util.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\nusing milvus::local::function::FunctionExecutor;\n\nusing DType = ::milvus::proto::schema::DataType;\nint64_t InsertTask::cur_id_ = 0;\n\nInsertTask::InsertTask(::milvus::proto::milvus::InsertRequest* r,\n                       const ::milvus::proto::schema::CollectionSchema* schema)\n    : insert_request_(r), schema_(schema), num_rows_(0) {\n}\n\nbool\nInsertTask::AddSystemField() {\n    num_rows_ = insert_request_->num_rows();\n    if (num_rows_ <= 0) {\n        LOG_ERROR(\"Error rows nums {}\", num_rows_);\n        return false;\n    }\n\n    auto timestamps = GetTimestamps(num_rows_);\n    auto row_ids = GetRowIds(timestamps);\n\n    auto row_field = insert_request_->add_fields_data();\n    row_field->set_type(DType::Int64);\n    row_field->set_field_name(kRowIdFieldName);\n    row_field->set_field_id(kRowIdField);\n    for (auto id : row_ids) {\n        row_field->mutable_scalars()->mutable_long_data()->add_data(id);\n    }\n\n    auto time_field = insert_request_->add_fields_data();\n    time_field->set_type(DType::Int64);\n    time_field->set_field_name(kTimeStampFieldName);\n    time_field->set_field_id(kTimeStampField);\n    for (auto t : timestamps) {\n        time_field->mutable_scalars()->mutable_long_data()->add_data(t);\n    }\n    return true;\n}\n\nbool\nInsertTask::GenFieldMap() {\n    for (const auto& field : insert_request_->fields_data()) {\n        field_data_map_.emplace(field.field_name(), &field);\n    }\n\n    for (const auto& field : schema_->fields()) {\n        if (field_data_map_.find(field.name()) == field_data_map_.end()) {\n            if (field.is_primary_key() && field.autoid()) {\n                auto row_id_field = field_data_map_.at(kRowIdFieldName);\n                auto pk_field = insert_request_->add_fields_data();\n                pk_field->set_field_name(field.name());\n                pk_field->set_field_id(field.fieldid());\n                pk_field->set_type(field.data_type());\n                if (field.data_type() == DType::VarChar) {\n                    for (uint32_t i = 0; i < num_rows_; i++) {\n                        pk_field->mutable_scalars()\n                            ->mutable_string_data()\n                            ->add_data(std::to_string(std::any_cast<int64_t>(\n                                schema_util::GetField(*row_id_field, i))));\n                    }\n                } else {\n                    for (uint32_t i = 0; i < num_rows_; i++) {\n                        pk_field->mutable_scalars()\n                            ->mutable_long_data()\n                            ->add_data(std::any_cast<int64_t>(\n                                schema_util::GetField(*row_id_field, i)));\n                    }\n                }\n                field_data_map_.emplace(field.name(), pk_field);\n            } else {\n                LOG_ERROR(\"Lost field {}\", field.name());\n                return false;\n            }\n        }\n    }\n\n    return true;\n}\n\nbool\nInsertTask::CheckDynamicFieldData() {\n    if (!schema_->enable_dynamic_field()) {\n        return true;\n    }\n    for (int i = 0; i < insert_request_->fields_data_size(); i++) {\n        auto field = insert_request_->mutable_fields_data(i);\n        if (field->is_dynamic()) {\n            field->set_field_name(kMetaFieldName);\n            //TODO check json\n            return true;\n        }\n    }\n    // no dynamic field found, and default value\n    auto dy_field = insert_request_->add_fields_data();\n    dy_field->set_field_name(kMetaFieldName);\n    dy_field->set_is_dynamic(true);\n    for (const auto& schema_field : schema_->fields()) {\n        if (schema_field.is_dynamic()) {\n            dy_field->set_field_id(schema_field.fieldid());\n            break;\n        }\n    }\n    dy_field->set_type(::milvus::proto::schema::DataType::JSON);\n    for (uint32_t i = 0; i < insert_request_->num_rows(); i++) {\n        dy_field->mutable_scalars()->mutable_json_data()->add_data()->assign(\n            \"{}\");\n    }\n    return true;\n}\n\nStatus\nInsertTask::Process(Rows* rows) {\n    if (!(AddSystemField() && CheckDynamicFieldData())) {\n        return Status::ParameterInvalid();\n    }\n\n    if (schema_util::HasFunction(*schema_)) {\n        auto [s, executor] = FunctionExecutor::Create(schema_);\n        CHECK_STATUS(s, \"\");\n        CHECK_STATUS(executor->ProcessInsert(insert_request_), \"\");\n    }\n\n    if (!GenFieldMap()) {\n        return Status::ParameterInvalid();\n    }\n    CHECK_STATUS(CheckOrSetVectorDim(), \"\");\n\n    auto pk_field_name = schema_util::GetPkName(*schema_);\n    if (!pk_field_name.has_value()) {\n        auto err =\n            string_util::SFormat(\"Collection {} has no pk\", schema_->name());\n        LOG_ERROR(err);\n        return Status::ParameterInvalid(err);\n    }\n\n    pk_type_ = field_data_map_.at(pk_field_name.value())->type();\n\n    for (uint32_t i = 0; i < num_rows_; i++) {\n        ::milvus::proto::segcore::InsertRecord record;\n        std::string pk;\n        record.set_num_rows(1);\n        for (const auto& field : schema_->fields()) {\n            auto field_data = record.add_fields_data();\n            field_data->set_field_id(field.fieldid());\n            field_data->set_field_name(field.name());\n            field_data->set_type(field.data_type());\n\n            if (!schema_util::SliceFieldData(\n                    *field_data_map_.at(field.name()),\n                    std::vector<std::tuple<int64_t, int64_t>>{{i, 1}},\n                    field_data)) {\n                LOG_ERROR(\"Parse field data failed\");\n                return Status::FieldNotFound();\n            }\n            if (field.name() == pk_field_name.value()) {\n                if (field.data_type() == DType::Int64) {\n                    pk = std::to_string(\n                        field_data->scalars().long_data().data(0));\n                } else {\n                    pk = field_data->scalars().string_data().data(0);\n                }\n            }\n        }\n        rows->push_back(std::make_tuple(pk, record.SerializeAsString()));\n    }\n    return Status::Ok();\n}\n\nStatus\nInsertTask::CheckOrSetVectorDim() {\n    int64_t num_rows = insert_request_->num_rows();\n    if (num_rows <= 0) {\n        return Status::ParameterInvalid(\"Err num_rows: {}\", num_rows);\n    }\n    for (const auto& field_schema : schema_->fields()) {\n        if (field_schema.data_type() == DType::FloatVector) {\n            // int64_t dim = field_data.vectors().dim();\n            auto field_data = field_data_map_.at(field_schema.name());\n            int64_t dim = schema_util::GetDim(field_schema);\n            if (dim <= 0) {\n                return Status::ParameterInvalid(\"Can not found dim info\");\n            }\n            int vect_size = field_data->vectors().float_vector().data_size();\n            if (vect_size % dim != 0) {\n                return Status::ParameterInvalid(\n                    \"the length({}) of float data should divide the dim({})\",\n                    vect_size,\n                    dim);\n            }\n\n            int64_t vec_rows = vect_size / dim;\n\n            if (vec_rows != num_rows) {\n                return Status::ParameterInvalid(\n                    \"the num_rows ({}) of field ({}) is not equal to passed \"\n                    \"num_rows ({}): [expected={}][actual={}]\",\n                    vec_rows,\n                    field_data->field_name(),\n                    num_rows,\n                    num_rows,\n                    vec_rows);\n            }\n        } else if (field_schema.data_type() == DType::SparseFloatVector &&\n                   !field_schema.is_function_output()) {\n            // set dim, if bm25 function output not need to set dim.\n            auto field_data = field_data_map_.at(field_schema.name());\n            for (int i = 0;\n                 i <\n                 field_data->vectors().sparse_float_vector().contents_size();\n                 i++) {\n                uint32_t dim = 0;\n                const char* pos = field_data->vectors()\n                                      .sparse_float_vector()\n                                      .contents(i)\n                                      .c_str();\n                size_t size = field_data->vectors()\n                                  .sparse_float_vector()\n                                  .contents(i)\n                                  .size();\n                const char* end = pos + size;\n\n                for (; pos < end; pos += 8) {\n                    dim = std::max(dim,\n                                   *(reinterpret_cast<const uint32_t*>(pos))) +\n                          1;\n                }\n                const_cast<::milvus::proto::schema::FieldData*>(field_data)\n                    ->mutable_vectors()\n                    ->mutable_sparse_float_vector()\n                    ->set_dim(dim);\n            }\n        }\n    }\n    return Status::Ok();\n}\n\nstd::vector<uint64_t>\nInsertTask::GetTimestamps(int64_t size) {\n    auto ts = GetTimestamp();\n    return std::vector<uint64_t>(size, ts);\n}\n\nuint64_t\nInsertTask::GetTimestamp() {\n    // https://github.com/milvus-io/milvus/blob/master/docs/design_docs/20211214-milvus_hybrid_ts.md\n    auto now = std::chrono::system_clock::now();\n    auto duration = now.time_since_epoch();\n    auto ms =\n        std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();\n    return (ms << 18) + cur_id_;\n}\n\nstd::vector<int64_t>\nInsertTask::GetRowIds(std::vector<uint64_t>& timestamps) {\n    size_t size = timestamps.size();\n    std::vector<int64_t> row_ids;\n    for (size_t i = 0; i < size; i++) {\n        row_ids.push_back(i + cur_id_ + timestamps[i]);\n    }\n    cur_id_ += size;\n    return row_ids;\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/insert_task.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n#include <any>\n#include <cstdint>\n#include <vector>\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"status.h\"\n#include \"type.h\"\n#include \"common.h\"\n\nnamespace milvus::local {\n\nclass InsertTask : NonCopyableNonMovable {\n public:\n    InsertTask(::milvus::proto::milvus::InsertRequest* r,\n               const ::milvus::proto::schema::CollectionSchema* schema);\n    virtual ~InsertTask() = default;\n\n public:\n    Status\n    Process(Rows* insert_records);\n\n    ::milvus::proto::schema::DataType\n    PkType() {\n        return pk_type_;\n    }\n\n private:\n    bool\n    GenFieldMap();\n\n    Status\n    CheckOrSetVectorDim();\n\n    std::vector<uint64_t>\n    GetTimestamps(int64_t size);\n\n    uint64_t\n    GetTimestamp();\n\n    std::vector<int64_t>\n    GetRowIds(std::vector<uint64_t>& timestamps);\n\n    bool\n    AddSystemField();\n\n    bool\n    CheckDynamicFieldData();\n\n private:\n    static int64_t cur_id_;\n    ::milvus::proto::milvus::InsertRequest* insert_request_;\n    const ::milvus::proto::schema::CollectionSchema* schema_;\n    std::map<const std::string, const ::milvus::proto::schema::FieldData*>\n        field_data_map_;\n    uint32_t num_rows_;\n    ::milvus::proto::schema::DataType pk_type_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/milvus_id.hpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n// #include \"common.h\"\n#include \"schema.pb.h\"\n\nnamespace milvus::local {\n\nclass MilvusID {\n    enum IDType { INT, STR };\n\n public:\n    explicit MilvusID(int64_t id) {\n        int_id_ = id;\n        type_ = INT;\n    }\n\n    explicit MilvusID(const std::string& id) {\n        str_id_ = id;\n        type_ = STR;\n    }\n\n    explicit MilvusID(const ::milvus::proto::schema::IDs& ids, int64_t idx) {\n        if (ids.has_int_id()) {\n            int_id_ = ids.int_id().data(idx);\n            type_ = INT;\n        } else {\n            str_id_ = ids.str_id().data(idx);\n            type_ = STR;\n        }\n    }\n\n    virtual ~MilvusID() = default;\n\n public:\n    bool\n    operator==(const MilvusID& right) const {\n        if (type_ == INT) {\n            return int_id_ == right.int_id_;\n        } else {\n            return str_id_ == right.str_id_;\n        }\n    }\n\n    bool\n    operator<(const MilvusID& right) const {\n        if (type_ == INT) {\n            return int_id_ < right.int_id_;\n        } else {\n            return str_id_ < right.str_id_;\n        }\n    }\n\n    void\n    AppendToIDs(::milvus::proto::schema::IDs* ids) const {\n        if (type_ == INT) {\n            ids->mutable_int_id()->add_data(int_id_);\n        } else {\n            ids->mutable_str_id()->add_data(str_id_);\n        }\n    }\n\n private:\n    int64_t int_id_;\n    std::string str_id_;\n    IDType type_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/milvus_local.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"milvus_local.h\"\n#include <cstdint>\n#include <mutex>\n#include <string>\n#include <vector>\n#include <regex>\n#include \"common.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"schema_util.h\"\n#include \"status.h\"\n#include \"log/Log.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\n#define CHECK_COLLECTION_EXIST(collection_name)                               \\\n    do {                                                                      \\\n        CHECK_STATUS(CheckCollectionName(string_util::Trim(collection_name)), \\\n                     \"\");                                                     \\\n        if (!storage_.CollectionExist(collection_name)) {                     \\\n            return Status::CollectionNotFound();                              \\\n        }                                                                     \\\n    } while (0)\n\n#define CHECK_COLLECTION_NOT_EXIST(collection_name)                           \\\n    do {                                                                      \\\n        CHECK_STATUS(CheckCollectionName(string_util::Trim(collection_name)), \\\n                     \"\");                                                     \\\n        if (storage_.CollectionExist(collection_name)) {                      \\\n            return Status::CollectionAlreadExist();                           \\\n        }                                                                     \\\n    } while (0)\n\nMilvusLocal::MilvusLocal(const char* db_file)\n    : db_file_(db_file), storage_(db_file), initialized(false) {\n}\n\nMilvusLocal::~MilvusLocal() {\n}\n\nStatus\nMilvusLocal::CheckCollectionName(const std::string& collection_name) {\n    if (collection_name.empty()) {\n        return Status::ParameterInvalid(\"collection name should not be empty\");\n    }\n    std::string invalid_msg =\n        string_util::SFormat(\"Invalid collection {}. \", collection_name);\n    if (collection_name.size() > 255) {\n        return Status::ParameterInvalid(\n            \"{}, the length of a collection name must \"\n            \"be less than 255 characters\",\n            invalid_msg);\n    }\n\n    char first = collection_name[0];\n    if (first != '_' && !string_util::IsAlpha(first)) {\n        return Status::ParameterInvalid(\n            \"{} the first character of a collection {} must be an underscore \"\n            \"or letter\",\n            invalid_msg,\n            collection_name);\n    }\n    std::regex pattern(\"^[a-zA-Z_][a-zA-Z0-9_]*$\");\n    if (!std::regex_match(collection_name, pattern)) {\n        auto err = string_util::SFormat(\n            \"{},  collection name can only contain \"\n            \"numbers, letters and underscores\",\n            invalid_msg);\n        LOG_ERROR(err);\n        return Status::ParameterInvalid(err);\n    }\n    return Status::Ok();\n}\n\nbool\nMilvusLocal::Init() {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (initialized) {\n        LOG_WARN(\"Milvus has already initialized\");\n        return false;\n    }\n\n    if (!storage_.Open()) {\n        return false;\n    }\n    initialized = true;\n    return true;\n}\n\nStatus\nMilvusLocal::LoadCollection(const std::string& collection_name) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (index_.HasLoaded(collection_name)) {\n        return Status::Ok();\n    }\n\n    return DoLoadCollection(collection_name);\n}\n\nStatus\nMilvusLocal::ReleaseCollection(const std::string& collection_name) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (index_.DropCollection(collection_name)) {\n        return Status::Ok();\n    }\n    return Status::SegcoreErr();\n}\n\nStatus\nMilvusLocal::GetLoadState(const std::string& collection_name) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (!index_.HasLoaded(collection_name)) {\n        return Status::CollectionNotLoaded();\n    }\n    return Status::CollectionLoaded();\n}\n\nStatus\nMilvusLocal::CreateCollection(const std::string& collection_name,\n                              const std::string& pk_name,\n                              const std::string& schema_proto) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_STATUS(CheckCollectionName(string_util::Trim(collection_name)), \"\");\n\n    if (storage_.CollectionExist(collection_name)) {\n        std::string db_schema_proto;\n        if (!storage_.GetCollectionSchema(collection_name, &db_schema_proto)) {\n            return Status::ServiceInternal();\n        }\n        if (!schema_util::SchemaEquals(schema_proto, db_schema_proto)) {\n            return Status::ParameterInvalid(\n                \"create duplicate collection with different parameters, \"\n                \"collection {}\",\n                collection_name);\n        }\n        return Status::Ok();\n    }\n\n    // CHECK_COLLECTION_NOT_EXIST(collection_name);\n    CHECK_STATUS(index_.CreateCollection(collection_name, schema_proto, \"\"),\n                 \"\");\n    if (!storage_.CreateCollection(collection_name, pk_name, schema_proto)) {\n        return Status::ServiceInternal();\n    }\n    return Status::Ok();\n}\n\nStatus\nMilvusLocal::GetCollection(const std::string& collection_name,\n                           std::string* schema_proto) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (!storage_.GetCollectionSchema(collection_name, schema_proto)) {\n        return Status::ServiceInternal();\n    }\n    return Status::Ok();\n}\n\nbool\nMilvusLocal::DropCollection(const std::string& collection_name) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (!storage_.CollectionExist(collection_name)) {\n        LOG_WARN(\"Collection {} not existed\", collection_name);\n        return true;\n    }\n    return index_.DropCollection(collection_name) &&\n           storage_.DropCollection(collection_name);\n}\n\nvoid\nMilvusLocal::GetAllCollections(std::vector<std::string>* collection_names) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    storage_.ListCollections(collection_names);\n}\n\nStatus\nMilvusLocal::CreateIndex(const std::string& collection_name,\n                         const std::string& index_name,\n                         const std::string& index_proto) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (storage_.HasIndex(collection_name, index_name)) {\n        // TODO add index info check\n        LOG_WARN(\"Collection {}'s index {} alread existed\",\n                 collection_name,\n                 index_name);\n        return Status::Ok();\n    }\n    // get existed index\n    // std::vector<std::string> all_index_proto;\n    // storage_.GetAllIndex(collection_name, \"\", &all_index_proto);\n    // all_index_proto.push_back(index_proto);\n    // auto index_meta_proto = schema_util::MergeIndexs(all_index_proto);\n\n    // // make sure the index info is legal\n    // CHECK_STATUS(index_.CreateIndex(collection_name, index_meta_proto), \"\");\n    if (!storage_.CreateIndex(collection_name, index_name, index_proto)) {\n        return Status::ServiceInternal();\n    }\n    // reload collection\n    if (!index_.DropCollection(collection_name)) {\n        return Status::ServiceInternal();\n    }\n\n    return DoLoadCollection(collection_name);\n}\n\nStatus\nMilvusLocal::DropIndex(const std::string& collection_name,\n                       const std::string& index_name) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (!storage_.HasIndex(collection_name, index_name)) {\n        return Status::Ok();\n    }\n\n    std::vector<std::string> all_index_proto;\n    storage_.GetAllIndex(collection_name, index_name, &all_index_proto);\n    auto index_meta_proto = schema_util::MergeIndexs(all_index_proto);\n\n    CHECK_STATUS(index_.CreateIndex(collection_name, index_meta_proto), \"\");\n    if (!storage_.DropIndex(collection_name, index_name)) {\n        return Status::ServiceInternal();\n    }\n    return Status::Ok();\n}\n\nStatus\nMilvusLocal::Insert(const std::string& collection_name,\n                    const Rows& rows,\n                    std::vector<std::string>* ids,\n                    const std::vector<std::string>& bm25_fields) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    int64_t count = 0;\n    for (const auto& row : rows) {\n        if (index_.Insert(collection_name, 1, std::get<1>(row)).IsErr()) {\n            break;\n        }\n        ids->push_back(std::get<0>(row));\n        count += 1;\n    }\n    auto start = rows.begin();\n    auto end = rows.begin() + count;\n    std::vector<Row> rows_need_insert(start, end);\n    storage_.Insert(collection_name, rows_need_insert, bm25_fields);\n    return Status::Ok();\n}\n\nStatus\nMilvusLocal::Retrieve(const std::string& collection_name,\n                      const std::string& plan,\n                      RetrieveResult* result) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    return index_.Retrieve(collection_name, plan, result);\n}\n\nStatus\nMilvusLocal::Search(const std::string& collection_name,\n                    const std::string& plan,\n                    const std::string& placeholder_group,\n                    SearchResult* result) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    return index_.Search(collection_name, plan, placeholder_group, result);\n}\n\nStatus\nMilvusLocal::DeleteByIds(const std::string& collection_name,\n                         const std::string& ids,\n                         int64_t size,\n                         const std::vector<std::string>& storage_ids,\n                         const std::vector<std::string>& bm25_fields) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (storage_.Delete(collection_name, storage_ids, bm25_fields) == -1) {\n        return Status::ServiceInternal();\n    }\n    CHECK_STATUS(index_.DeleteByIds(collection_name, ids, size), \"\");\n    return Status::Ok();\n}\n\nStatus\nMilvusLocal::GetIndex(const std::string& collection_name,\n                      const std::string& index_name,\n                      std::string* index_proto) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    if (!storage_.GetIndex(collection_name, index_name, index_proto)) {\n        return Status::IndexNotFound();\n    }\n    return Status::Ok();\n}\n\nStatus\nMilvusLocal::GetAllIndexs(const std::string& collection_name,\n                          std::vector<std::string>* all_index_proto) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    storage_.GetAllIndex(collection_name, \"\", all_index_proto);\n    return Status::Ok();\n}\n\nstd::pair<uint32_t, int32_t>\nMilvusLocal::GetBM25TokenAndDocCount(const std::string& collection_name,\n                                     const std::string& field_name) {\n    return storage_.GetBM25TokenAndDocCount(collection_name, field_name);\n}\n\nint32_t\nMilvusLocal::GetTokenNQ(const std::string& collection_name,\n                        const std::string& field_name,\n                        uint32_t token) {\n    return storage_.GetTokenNQ(collection_name, field_name, token);\n}\n\nStatus\nMilvusLocal::GetNumRowsOfCollection(const std::string& collection_name,\n                                    int64_t* num) {\n    std::lock_guard<std::mutex> lock(mutex_);\n    CHECK_COLLECTION_EXIST(collection_name);\n    *num = storage_.Count(collection_name);\n    if (*num < 0) {\n        return Status::ServiceInternal();\n    }\n    return Status::Ok();\n}\n\nStatus\nMilvusLocal::DoLoadCollection(const std::string& collection_name) {\n    std::string schema_proto, index_proto;\n    if (!storage_.GetCollectionSchema(collection_name, &schema_proto)) {\n        LOG_ERROR(\"Can not find {}'s schema\", collection_name);\n        return Status::ServiceInternal(\"Schema not found\");\n    }\n\n    // load index info\n    std::vector<std::string> all_index_proto;\n    storage_.GetAllIndex(collection_name, \"\", &all_index_proto);\n    auto index_meta_proto = schema_util::MergeIndexs(all_index_proto);\n\n    CHECK_STATUS(index_.CreateCollection(\n                     collection_name, schema_proto, index_meta_proto),\n                 \"\");\n    std::vector<std::string> rows;\n    int64_t start = 0;\n    while (true) {\n        storage_.LoadCollecton(collection_name, start, 200000, &rows);\n        if (rows.size() == 0) {\n            LOG_INFO(\"Success load {} rows\", start);\n            return Status::Ok();\n        }\n        for (const auto& row : rows) {\n            CHECK_STATUS(index_.Insert(collection_name, 1, row),\n                         \"Load data failed: \");\n        }\n        start += rows.size();\n        rows.clear();\n    }\n    return Status::Ok();\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/milvus_local.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n#include <mutex>\n#include <string>\n#include <utility>\n#include <vector>\n#include \"status.h\"\n#include \"common.h\"\n#include \"index.h\"\n#include \"retrieve_result.h\"\n#include \"search_result.h\"\n#include \"storage/bm25_stats.h\"\n#include \"storage/storage.h\"\n#include \"type.h\"\n\nnamespace milvus::local {\n\nclass MilvusLocal final : NonCopyableNonMovable {\n public:\n    explicit MilvusLocal(const char* db_file);\n    ~MilvusLocal();\n\n public:\n    // load all meta info\n    bool\n    Init();\n\n    Status\n    LoadCollection(const std::string& collection_name);\n\n    Status\n    ReleaseCollection(const std::string& collection_name);\n\n    Status\n    CreateCollection(const std::string& collection_name,\n                     const std::string& pk_name,\n                     const std::string& schema_proto);\n\n    Status\n    GetLoadState(const std::string& collection_name);\n\n    Status\n    GetCollection(const std::string& collection_name,\n                  std::string* schema_proto);\n\n    bool\n    DropCollection(const std::string& collection_name);\n\n    void\n    GetAllCollections(std::vector<std::string>* collection_names);\n\n    Status\n    CreateIndex(const std::string& collection_name,\n                const std::string& index_name,\n                const std::string& index_proto);\n\n    Status\n    GetIndex(const std::string& collection_name,\n             const std::string& index_name,\n             std::string* index_proto);\n\n    Status\n    GetAllIndexs(const std::string& collection_name,\n                 std::vector<std::string>* all_index_proto);\n\n    Status\n    DropIndex(const std::string& collection_name,\n              const std::string& index_name);\n\n    /*\n     * Row 为InsertRecord proto数据.\n     */\n    Status\n    Insert(const std::string& collection_name,\n           const Rows& rows,\n           std::vector<std::string>* ids,\n           const std::vector<std::string>& bm25_fields);\n\n    Status\n    Retrieve(const std::string& collection_name,\n             const std::string& expr,\n             RetrieveResult* result);\n\n    Status\n    Search(const std::string& collection_name,\n           const std::string& plan,\n           const std::string& placeholder_group,\n           SearchResult* result);\n\n    Status\n    DeleteByIds(const std::string& collection_name,\n                const std::string& ids,\n                int64_t size,\n                const std::vector<std::string>& storage_id,\n                const std::vector<std::string>& bm25_fields);\n\n    Status\n    GetNumRowsOfCollection(const std::string& collection_name, int64_t* num);\n\n    std::pair<uint32_t, int32_t>\n    GetBM25TokenAndDocCount(const std::string& collection_name,\n                            const std::string& field_name);\n\n    int32_t\n    GetTokenNQ(const std::string& collection_name,\n               const std::string& field_name,\n               uint32_t token);\n\n private:\n    Status\n    CheckCollectionName(const std::string& collection_name);\n\n    Status\n    DoLoadCollection(const std::string& collection_name);\n\n private:\n    std::mutex mutex_;\n    std::string db_file_;\n    Storage storage_;\n    Index index_;\n    bool initialized;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/milvus_proxy.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"milvus_proxy.h\"\n#include <cstdint>\n#include <map>\n#include <string>\n#include <vector>\n#include \"common.h\"\n#include \"common/Types.h\"\n#include \"log/Log.h\"\n#include \"create_collection_task.h\"\n#include \"create_index_task.h\"\n#include \"delete_task.h\"\n#include \"insert_task.h\"\n#include \"milvus_id.hpp\"\n#include \"milvus_local.h\"\n#include \"pb/common.pb.h\"\n#include \"pb/milvus.pb.h\"\n#include \"pb/plan.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"query_task.h\"\n#include \"retrieve_result.h\"\n#include \"hybrid_search_task.h\"\n#include \"schema_util.h\"\n#include \"search_result.h\"\n#include \"search_task.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n#include \"timer.h\"\n#include \"type.h\"\n#include \"upsert_task.h\"\n#include <cmath>\n#include \"nlohmann/json.hpp\"\n\nnamespace milvus::local {\n\nMilvusProxy::MilvusProxy(const char* work_dir) : milvus_local_(work_dir) {\n}\n\nMilvusProxy::~MilvusProxy() {\n}\n\nbool\nMilvusProxy::Init() {\n    return milvus_local_.Init();\n}\n\nStatus\nMilvusProxy::LoadCollection(const std::string& collection_name) {\n    return milvus_local_.LoadCollection(collection_name);\n}\n\nStatus\nMilvusProxy::GetLoadState(\n    const std::string& collection_name,\n    ::milvus::proto::milvus::GetLoadStateResponse* response) {\n    auto s = milvus_local_.GetLoadState(collection_name);\n    if (s.Code() == ErrCollectionNotFound) {\n        response->set_state(\n            ::milvus::proto::common::LoadState::LoadStateNotExist);\n        return Status::Ok();\n    }\n\n    if (s.Code() == ErrCollectionNotLoaded) {\n        response->set_state(\n            ::milvus::proto::common::LoadState::LoadStateNotLoad);\n        return Status::Ok();\n    }\n\n    if (s.Code() == ErrCollectionLoaded) {\n        response->set_state(\n            ::milvus::proto::common::LoadState::LoadStateLoaded);\n        return Status::Ok();\n    }\n    return s;\n}\n\nStatus\nMilvusProxy::ReleaseCollection(const std::string& collection_name) {\n    // Alignment error code with milvus\n    auto s = milvus_local_.ReleaseCollection(collection_name);\n    if (s.Code() == ErrCollectionNotFound) {\n        return Status::ParameterInvalid(\"collection not found[collection={}]\",\n                                        collection_name);\n    }\n    return s;\n}\n\nStatus\nMilvusProxy::HasCollection(const std::string& collection_name,\n                           ::milvus::proto::milvus::BoolResponse* response) {\n    std::string tmp;\n    Status status = milvus_local_.GetCollection(collection_name, &tmp);\n    response->set_value(status.IsOk());\n    // If the collection does not exist, change Status code to ok, and the response bool value determines if it noexists.\n    if (status.Code() == ErrCode::ErrCollectionNotFound) {\n        LOG_INFO(\"HasCollection change error code from collection-not-found to ok.\");\n        status = Status::Ok();\n    }\n    return status;\n}\n\nStatus\nMilvusProxy::CreateCollection(\n    const ::milvus::proto::milvus::CreateCollectionRequest* r) {\n    ::milvus::proto::schema::CollectionSchema schema;\n\n    CHECK_STATUS(CreateCollectionTask(r).Process(&schema), \"\");\n\n    for (const auto& field : schema.fields()) {\n        if (field.is_primary_key()) {\n            return milvus_local_.CreateCollection(\n                schema.name(), field.name(), schema.SerializeAsString());\n        }\n    }\n    return Status::FieldNotFound(\"Lost primary key field\");\n}\n\nStatus\nMilvusProxy::CreateIndex(const ::milvus::proto::milvus::CreateIndexRequest* r) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(r->collection_name(), &schema).IsOk()) {\n        auto err = string_util::SFormat(\"Can not find collection {}\",\n                                        r->collection_name());\n        LOG_ERROR(err);\n        return Status::CollectionNotFound(err);\n    }\n    // get all index\n    milvus::proto::segcore::FieldIndexMeta field_meta;\n    CHECK_STATUS(CreateIndexTask(r, &schema).Process(&field_meta), \"\");\n    return milvus_local_.CreateIndex(r->collection_name(),\n                                     field_meta.index_name(),\n                                     field_meta.SerializeAsString());\n}\n\nStatus\nMilvusProxy::Insert(const ::milvus::proto::milvus::InsertRequest* r,\n                    ::milvus::proto::schema::IDs* ids) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(r->collection_name(), &schema).IsOk()) {\n        auto err = string_util::SFormat(\"Collection {} not found\",\n                                        r->collection_name());\n        return Status::CollectionNotFound();\n    }\n\n    CHECK_STATUS(milvus_local_.LoadCollection(r->collection_name()), \"\");\n    Rows rows;\n    auto insert_task = InsertTask(\n        const_cast<::milvus::proto::milvus::InsertRequest*>(r), &schema);\n    CHECK_STATUS(insert_task.Process(&rows), \"\");\n    auto bm25_fields = schema_util::GetBM25SparseField(schema);\n    std::vector<std::string> insert_ids;\n    milvus_local_.Insert(r->collection_name(), rows, &insert_ids, bm25_fields);\n\n    if (insert_task.PkType() == ::milvus::proto::schema::DataType::Int64) {\n        for (const auto& id : insert_ids) {\n            ids->mutable_int_id()->add_data(std::stoll(id));\n        }\n    } else {\n        for (const auto& id : insert_ids) {\n            ids->mutable_str_id()->add_data(id);\n        }\n    }\n    return Status::Ok();\n}\n\nStatus\nMilvusProxy::Upsert(const ::milvus::proto::milvus::UpsertRequest* r,\n                    ::milvus::proto::schema::IDs* ids) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(r->collection_name(), &schema).IsOk()) {\n        auto err = string_util::SFormat(\"Collection {} not found\",\n                                        r->collection_name());\n        return Status::CollectionNotFound();\n    }\n    CHECK_STATUS(milvus_local_.LoadCollection(r->collection_name()), \"\");\n    auto task = UpsertTask(r, &schema);\n    ::milvus::proto::milvus::InsertRequest insert_q;\n    ::milvus::proto::schema::IDs delete_ids;\n    CHECK_STATUS(task.Process(&insert_q, &delete_ids), \"\");\n    std::vector<std::string> storage_ids;\n    if (delete_ids.has_int_id()) {\n        for (const auto& id : delete_ids.int_id().data()) {\n            storage_ids.push_back(std::to_string(id));\n        }\n\n    } else {\n        for (const auto& id : delete_ids.str_id().data()) {\n            storage_ids.push_back(id);\n        }\n    }\n    auto bm25_fields = schema_util::GetBM25SparseField(schema);\n    CHECK_STATUS(milvus_local_.DeleteByIds(r->collection_name(),\n                                           delete_ids.SerializeAsString(),\n                                           storage_ids.size(),\n                                           storage_ids,\n                                           bm25_fields),\n                 \"\");\n    return Insert(&insert_q, ids);\n}\n\nStatus\nMilvusProxy::Search(const ::milvus::proto::milvus::SearchRequest* r,\n                    ::milvus::proto::milvus::SearchResults* search_result) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(r->collection_name(), &schema).IsOk()) {\n        auto err = string_util::SFormat(\"Can not find {}'s schema\",\n                                        r->collection_name());\n        LOG_ERROR(err);\n        return Status::CollectionNotFound(err);\n    }\n\n    CHECK_STATUS(milvus_local_.LoadCollection(r->collection_name()), \"\");\n\n    // get index\n    std::vector<std::string> all_index;\n    CHECK_STATUS(milvus_local_.GetAllIndexs(r->collection_name(), &all_index),\n                 \"\");\n    return DoSearch(r, schema, all_index, search_result);\n}\n\nStatus\nMilvusProxy::DoSearch(const ::milvus::proto::milvus::SearchRequest* r,\n                      const ::milvus::proto::schema::CollectionSchema& schema,\n                      const std::vector<std::string>& all_index,\n                      ::milvus::proto::milvus::SearchResults* search_result) {\n    std::string placeholder_group;\n    ::milvus::proto::plan::PlanNode plan;\n    std::vector<int64_t> nqs, topks;\n\n    SearchTask task(const_cast<::milvus::proto::milvus::SearchRequest*>(r),\n                    &schema,\n                    &all_index);\n    CHECK_STATUS(task.Process(&plan, &placeholder_group, &nqs, &topks), \"\");\n    if (task.GetMetric() == kMetricsBM25Name) {\n        auto [token_count, doc_count] = milvus_local_.GetBM25TokenAndDocCount(\n            schema.name(), task.GetAnnFieldName());\n        milvus::proto::common::PlaceholderGroup ph_group;\n        if (!ph_group.ParseFromString(placeholder_group)) {\n            return Status::ServiceInternal(\"Parse placeholder failed\");\n        }\n        for (int i = 0; i < ph_group.placeholders(0).values_size(); i++) {\n            auto vec = ph_group.mutable_placeholders(0)->mutable_values(i);\n            auto pos = vec->data();\n            auto end = vec->data() + vec->size();\n            for (; pos < end; pos += 8) {\n                const uint32_t token = *(reinterpret_cast<uint32_t*>(pos));\n                const float freq = *(reinterpret_cast<float*>(pos + 4));\n                auto nq = milvus_local_.GetTokenNQ(\n                    schema.name(), task.GetAnnFieldName(), token);\n                *(reinterpret_cast<float*>(pos + 4)) =\n                    freq * log(1 + (float(doc_count) - float(nq) + 0.5) /\n                                       (float(nq) + 0.5));\n            }\n        }\n        placeholder_group = ph_group.SerializeAsString();\n        auto params_str = plan.mutable_vector_anns()\n                              ->mutable_query_info()\n                              ->mutable_search_params();\n\n        auto params = nlohmann::json::parse(params_str->c_str());\n        if (token_count == 0 || doc_count == 0) {\n            params[kBM25AvgName] = 0;\n        } else {\n            params[kBM25AvgName] = float(token_count) / float(doc_count);\n        }\n        params_str->assign(params.dump());\n    }\n    RecordEvent(\"ParseProto\");\n    SearchResult result(nqs, topks);\n    CHECK_STATUS(milvus_local_.Search(r->collection_name(),\n                                      plan.SerializeAsString(),\n                                      placeholder_group,\n                                      &result),\n                 \"\");\n    search_result->set_collection_name(r->collection_name());\n    RecordEvent(\"DoSearch\");\n    task.PostProcess(result, search_result);\n    RecordEvent(\"PostProcess\");\n    // search_result->PrintDebugString();\n    if (search_result->results().has_ids()) {\n        return Status::Ok();\n    } else {\n        return Status::Ok(\"search result is empty\");\n    }\n}\n\nStatus\nMilvusProxy::HybridSearch(\n    const ::milvus::proto::milvus::HybridSearchRequest* r,\n    ::milvus::proto::milvus::SearchResults* search_result) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(r->collection_name(), &schema).IsOk()) {\n        auto err = string_util::SFormat(\"Can not find {}'s schema\",\n                                        r->collection_name());\n        LOG_ERROR(err);\n        return Status::CollectionNotFound(err);\n    }\n    CHECK_STATUS(milvus_local_.LoadCollection(r->collection_name()), \"\");\n\n    // get index\n    std::vector<std::string> all_index;\n    CHECK_STATUS(milvus_local_.GetAllIndexs(r->collection_name(), &all_index),\n                 \"\");\n    HyBridSearchTask task(&schema, &all_index);\n    std::vector<::milvus::proto::milvus::SearchRequest> search_requests;\n    CHECK_STATUS(task.ProcessSearch(r, &search_requests), \"\");\n\n    std::vector<::milvus::proto::milvus::SearchResults> search_results;\n    for (const auto& req : search_requests) {\n        ::milvus::proto::milvus::SearchResults ret;\n        CHECK_STATUS(DoSearch(&req, schema, all_index, &ret), \"\");\n        search_results.push_back(ret);\n    }\n    CHECK_STATUS(task.PostProcessSearch(search_results, search_result), \"\");\n    if (schema_util::IDsSize(search_result->results().ids()) == 0) {\n        return Status::Ok();\n    }\n    // requery, get output field data\n    ::milvus::proto::milvus::QueryRequest query_req;\n    task.ProcessQuery(r, search_result, &query_req);\n    ::milvus::proto::plan::PlanNode plan;\n    QueryTask qtask(&query_req, &schema);\n    CHECK_STATUS(qtask.Process(&plan), \"\");\n\n    RetrieveResult query_result;\n    CHECK_STATUS(\n        milvus_local_.Retrieve(\n            r->collection_name(), plan.SerializeAsString(), &query_result),\n        \"\");\n\n    return task.PostProcess(query_result, search_result);\n}\n\nStatus\nMilvusProxy::Query(const ::milvus::proto::milvus::QueryRequest* r,\n                   ::milvus::proto::milvus::QueryResults* query_result) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(r->collection_name(), &schema).IsOk()) {\n        return Status::CollectionNotFound();\n    }\n    CHECK_STATUS(milvus_local_.LoadCollection(r->collection_name()), \"\");\n    ::milvus::proto::plan::PlanNode plan;\n    QueryTask task(r, &schema);\n    CHECK_STATUS(task.Process(&plan), \"\");\n    RecordEvent(\"ParseProto\");\n    RetrieveResult result;\n    CHECK_STATUS(milvus_local_.Retrieve(\n                     r->collection_name(), plan.SerializeAsString(), &result),\n                 \"\");\n\n    query_result->set_collection_name(r->collection_name());\n    RecordEvent(\"DoQuery\");\n    task.PostProcess(result, query_result);\n    RecordEvent(\"PostProcess\");\n    return Status::Ok();\n}\n\nStatus\nMilvusProxy::Delete(const ::milvus::proto::milvus::DeleteRequest* r,\n                    ::milvus::proto::milvus::MutationResult* response) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(r->collection_name(), &schema).IsOk()) {\n        return Status::CollectionNotFound();\n    }\n    CHECK_STATUS(milvus_local_.LoadCollection(r->collection_name()), \"\");\n\n    ::milvus::proto::plan::PlanNode plan;\n    CHECK_STATUS(DeleteTask(r, &schema).Process(&plan), \"\");\n\n    RetrieveResult result;\n    CHECK_STATUS(milvus_local_.Retrieve(\n                     r->collection_name(), plan.SerializeAsString(), &result),\n                 \"\");\n\n    ::milvus::proto::segcore::RetrieveResults seg_result;\n    seg_result.ParseFromArray(result.retrieve_result_.proto_blob,\n                              result.retrieve_result_.proto_size);\n    auto ids_str = seg_result.ids().SerializeAsString();\n    std::vector<std::string> storage_ids;\n    if (seg_result.ids().has_int_id()) {\n        for (const auto& id : seg_result.ids().int_id().data()) {\n            storage_ids.push_back(std::to_string(id));\n            response->mutable_ids()->mutable_int_id()->add_data(id);\n        }\n\n    } else {\n        for (const auto& id : seg_result.ids().str_id().data()) {\n            storage_ids.push_back(id);\n            response->mutable_ids()->mutable_str_id()->add_data(id);\n        }\n    }\n    if (storage_ids.size() != 0) {\n        auto bm25_fields = schema_util::GetBM25SparseField(schema);\n        CHECK_STATUS(milvus_local_.DeleteByIds(r->collection_name(),\n                                               ids_str,\n                                               storage_ids.size(),\n                                               storage_ids,\n                                               bm25_fields),\n                     \"\");\n    }\n    response->set_delete_cnt(storage_ids.size());\n    return Status::Ok();\n}\n\nStatus\nMilvusProxy::GetSchemaInfo(const std::string& collection_name,\n                           ::milvus::proto::schema::CollectionSchema* schema) {\n    std::string schema_proto;\n    CHECK_STATUS(milvus_local_.GetCollection(collection_name, &schema_proto),\n                 \"\");\n    if (!schema->ParseFromString(schema_proto)) {\n        LOG_ERROR(\"Failed to parse schema info: {}\", schema_proto);\n        return Status::ServiceInternal();\n        ;\n    }\n    return Status::Ok();\n}\n\nStatus\nMilvusProxy::DescribeCollection(\n    const ::milvus::proto::milvus::DescribeCollectionRequest* request,\n    ::milvus::proto::milvus::DescribeCollectionResponse* response) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    CHECK_STATUS(GetSchemaInfo(request->collection_name(), &schema), \"\");\n    auto mutable_schema = response->mutable_schema();\n    mutable_schema->set_name(schema.name());\n    mutable_schema->set_description(schema.description());\n    mutable_schema->set_enable_dynamic_field(schema.enable_dynamic_field());\n    mutable_schema->mutable_properties()->CopyFrom(schema.properties());\n    for (const auto& field : schema.fields()) {\n        if (field.name() == kTimeStampFieldName ||\n            field.name() == kRowIdFieldName || field.is_dynamic())\n            continue;\n        mutable_schema->add_fields()->CopyFrom(field);\n    }\n    return Status::Ok();\n}\n\nStatus\nMilvusProxy::GetIndex(\n    const std::string& collection_name,\n    const std::string& index_name,\n    ::milvus::proto::milvus::DescribeIndexResponse* response) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    if (!GetSchemaInfo(collection_name, &schema).IsOk()) {\n        auto err =\n            string_util::SFormat(\"Can not find collection {}\", collection_name);\n        LOG_ERROR(err);\n        return Status::CollectionNotFound(err);\n    }\n\n    if (index_name.empty()) {\n        std::vector<std::string> all_index;\n        CHECK_STATUS(milvus_local_.GetAllIndexs(collection_name, &all_index),\n                     \"\");\n        for (const auto& index : all_index) {\n            CHECK_STATUS(\n                ParseIndex(index, schema, response->add_index_descriptions()),\n                \"\");\n        }\n        return Status::Ok();\n    } else {\n        std::string index_proto;\n        CHECK_STATUS(\n            milvus_local_.GetIndex(collection_name, index_name, &index_proto),\n            \"\");\n        return ParseIndex(\n            index_proto, schema, response->add_index_descriptions());\n    }\n}\n\nStatus\nMilvusProxy::DropIndex(const std::string& collection_name,\n                       const std::string& index_name) {\n    CHECK_STATUS(milvus_local_.LoadCollection(collection_name), \"\");\n    return milvus_local_.DropIndex(collection_name, index_name);\n}\n\nStatus\nMilvusProxy::ParseIndex(const std::string& index_proto,\n                        const ::milvus::proto::schema::CollectionSchema& schema,\n                        ::milvus::proto::milvus::IndexDescription* index) {\n    milvus::proto::segcore::FieldIndexMeta field_index;\n    if (!field_index.ParseFromString(index_proto)) {\n        return Status::ServiceInternal(\"Error index info in db\");\n    }\n\n    auto field_id = field_index.fieldid();\n    for (const auto& field : schema.fields()) {\n        if (field.fieldid() == field_id) {\n            index->set_field_name(field.name());\n        }\n    }\n    index->set_index_name(field_index.index_name());\n    index->set_indexid(GetIndexId(field_index.index_name()));\n    index->set_state(::milvus::proto::common::IndexState::Finished);\n    for (const auto& param : field_index.type_params()) {\n        auto new_param = index->add_params();\n        new_param->set_key(param.key());\n        new_param->set_value(param.value());\n    }\n\n    for (const auto& param : field_index.index_params()) {\n        auto new_param = index->add_params();\n        new_param->set_key(param.key());\n        new_param->set_value(param.value());\n    }\n\n    for (const auto& param : field_index.user_index_params()) {\n        auto new_param = index->add_params();\n        new_param->set_key(param.key());\n        new_param->set_value(param.value());\n    }\n    return Status::Ok();\n}\n\nbool\nMilvusProxy::DropCollection(const std::string& collection_name) {\n    return milvus_local_.DropCollection(collection_name);\n}\n\nStatus\nMilvusProxy::GetCollectionStatistics(\n    const std::string& collection_name,\n    ::milvus::proto::milvus::GetCollectionStatisticsResponse* r) {\n    int64_t num = -1;\n    CHECK_STATUS(milvus_local_.GetNumRowsOfCollection(collection_name, &num),\n                 \"\");\n    auto s = r->add_stats();\n    s->set_key(\"row_count\");\n    s->set_value(std::to_string(num));\n    return Status::Ok();\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/milvus_proxy.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <vector>\n#include \"common.h\"\n#include \"milvus_local.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/milvus.pb.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nclass MilvusProxy : NonCopyableNonMovable {\n public:\n    explicit MilvusProxy(const char* work_dir);\n    virtual ~MilvusProxy();\n\n public:\n    bool\n    Init();\n\n    Status\n    LoadCollection(const std::string& collection_name);\n\n    Status\n    ReleaseCollection(const std::string& collection_name);\n\n    Status\n    CreateCollection(\n        const ::milvus::proto::milvus::CreateCollectionRequest* request);\n\n    Status\n    HasCollection(const std::string& collection_name,\n                  ::milvus::proto::milvus::BoolResponse* response);\n\n    Status\n    GetLoadState(const std::string& collection_name,\n                 ::milvus::proto::milvus::GetLoadStateResponse* response);\n\n    bool\n    DropCollection(const std::string& collection_name);\n\n    void\n    ListCollection(std::vector<std::string>* collections) {\n        milvus_local_.GetAllCollections(collections);\n    }\n\n    Status\n    CreateIndex(const ::milvus::proto::milvus::CreateIndexRequest* request);\n\n    Status\n    GetIndex(const std::string& collection_name,\n             const std::string& index_name,\n             ::milvus::proto::milvus::DescribeIndexResponse* response);\n\n    Status\n    DropIndex(const std::string& collection_name,\n              const std::string& index_name);\n\n    Status\n    Insert(const ::milvus::proto::milvus::InsertRequest* request,\n           ::milvus::proto::schema::IDs* ids);\n\n    Status\n    Upsert(const ::milvus::proto::milvus::UpsertRequest* request,\n           ::milvus::proto::schema::IDs* ids);\n\n    Status\n    Search(const ::milvus::proto::milvus::SearchRequest* request,\n           ::milvus::proto::milvus::SearchResults* search_result);\n\n    Status\n    HybridSearch(const ::milvus::proto::milvus::HybridSearchRequest* request,\n                 ::milvus::proto::milvus::SearchResults* search_result);\n\n    Status\n    Query(const ::milvus::proto::milvus::QueryRequest* request,\n          ::milvus::proto::milvus::QueryResults* response);\n\n    Status\n    Delete(const ::milvus::proto::milvus::DeleteRequest* request,\n           ::milvus::proto::milvus::MutationResult* response);\n\n    Status\n    DescribeCollection(\n        const ::milvus::proto::milvus::DescribeCollectionRequest* request,\n        ::milvus::proto::milvus::DescribeCollectionResponse* response);\n\n    Status\n    GetCollectionStatistics(\n        const std::string& collection_name,\n        ::milvus::proto::milvus::GetCollectionStatisticsResponse* r);\n\n private:\n    Status\n    GetSchemaInfo(const std::string& collection_name,\n                  ::milvus::proto::schema::CollectionSchema* schema);\n\n    Status\n    ParseIndex(const std::string& index_proto,\n               const ::milvus::proto::schema::CollectionSchema& schema,\n               ::milvus::proto::milvus::IndexDescription* index);\n\n    Status\n    DoSearch(const ::milvus::proto::milvus::SearchRequest* r,\n             const ::milvus::proto::schema::CollectionSchema& schema,\n             const std::vector<std::string>& all_index,\n             ::milvus::proto::milvus::SearchResults* search_result);\n\n private:\n    MilvusLocal milvus_local_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/milvus_service_impl.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"milvus_service_impl.h\"\n#include <grpcpp/support/status.h>\n#include <cstdint>\n#include <exception>\n#include \"log/Log.h\"\n#include \"status.h\"\n#include \"timer.h\"\n\nnamespace milvus::local {\n\nvoid\nStatus2Response(Status& s, ::milvus::proto::common::Status* response) {\n    response->set_code(s.Code());\n    response->set_retriable(false);\n    response->set_detail(s.Detail());\n    std::string reason = s.Detail().empty() ? s.Msg() : s.Detail() + \": \" + s.Msg();\n    response->set_reason(reason);\n}\n\n::grpc::Status\nMilvusServiceImpl::CreateCollection(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::CreateCollectionRequest* request,\n    ::milvus::proto::common::Status* response) {\n    Status s = proxy_.CreateCollection(request);\n    Status2Response(s, response);\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::LoadCollection(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::LoadCollectionRequest* request,\n    ::milvus::proto::common::Status* response) {\n    Status s = proxy_.LoadCollection(request->collection_name());\n    Status2Response(s, response);\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::HasCollection(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::HasCollectionRequest* request,\n    ::milvus::proto::milvus::BoolResponse* response) {\n    Status s = proxy_.HasCollection(request->collection_name(), response);\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::CreateIndex(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::CreateIndexRequest* request,\n    ::milvus::proto::common::Status* response) {\n    Status s = proxy_.CreateIndex(request);\n    Status2Response(s, response);\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::Insert(::grpc::ServerContext* context,\n                          const ::milvus::proto::milvus::InsertRequest* request,\n                          ::milvus::proto::milvus::MutationResult* response) {\n    Status s = proxy_.Insert(request, response->mutable_ids());\n    Status2Response(s, response->mutable_status());\n    auto num_rows = request->num_rows();\n    auto succ_size = std::max(response->ids().int_id().data_size(),\n                              response->ids().str_id().data_size());\n    response->set_insert_cnt(succ_size);\n    for (int64_t i = 0; i < succ_size; ++i) {\n        response->mutable_succ_index()->Add(i);\n    }\n\n    for (int64_t i = succ_size; i < num_rows; ++i) {\n        response->mutable_err_index()->Add(i);\n    }\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::Upsert(::grpc::ServerContext* context,\n                          const ::milvus::proto::milvus::UpsertRequest* request,\n                          ::milvus::proto::milvus::MutationResult* response) {\n    Status s = proxy_.Upsert(request, response->mutable_ids());\n    Status2Response(s, response->mutable_status());\n    auto num_rows = request->num_rows();\n    auto succ_size = std::max(response->ids().int_id().data_size(),\n                              response->ids().str_id().data_size());\n    response->set_insert_cnt(succ_size);\n    response->set_upsert_cnt(succ_size);\n    response->set_delete_cnt(num_rows);\n    for (int64_t i = 0; i < succ_size; ++i) {\n        response->mutable_succ_index()->Add(i);\n    }\n\n    for (int64_t i = succ_size; i < num_rows; ++i) {\n        response->mutable_err_index()->Add(i);\n    }\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::Search(::grpc::ServerContext* context,\n                          const ::milvus::proto::milvus::SearchRequest* request,\n                          ::milvus::proto::milvus::SearchResults* response) {\n    InitializeTimer(string_util::GenRandomString(\"Search\"));\n    Status s = proxy_.Search(request, response);\n    Status2Response(s, response->mutable_status());\n    RecordEvent(\"SerializationResponse\");\n    PrintTimerRecords();\n    StopTimer();\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::HybridSearch(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::HybridSearchRequest* request,\n    ::milvus::proto::milvus::SearchResults* response) {\n    try {\n        Status s = proxy_.HybridSearch(request, response);\n        Status2Response(s, response->mutable_status());\n        return ::grpc::Status::OK;\n    } catch (std::exception& e) {\n        LOG_ERROR(\"{}\", e.what());\n        return ::grpc::Status::OK;\n    }\n}\n\n::grpc::Status\nMilvusServiceImpl::Query(::grpc::ServerContext* context,\n                         const ::milvus::proto::milvus::QueryRequest* request,\n                         ::milvus::proto::milvus::QueryResults* response) {\n    InitializeTimer(string_util::GenRandomString(\"Query\"));\n    Status s = proxy_.Query(request, response);\n    Status2Response(s, response->mutable_status());\n    RecordEvent(\"SerializationResponse\");\n    PrintTimerRecords();\n    StopTimer();\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::Delete(::grpc::ServerContext* context,\n                          const ::milvus::proto::milvus::DeleteRequest* request,\n                          ::milvus::proto::milvus::MutationResult* response) {\n    Status s = proxy_.Delete(request, response);\n    Status2Response(s, response->mutable_status());\n    if (s.IsErr()) {\n        response->clear_delete_cnt();\n        response->clear_ids();\n    }\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::DescribeCollection(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::DescribeCollectionRequest* request,\n    ::milvus::proto::milvus::DescribeCollectionResponse* response) {\n    Status s = proxy_.DescribeCollection(request, response);\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n/*\n * Useless interface, just to make the process run.\n */\n::grpc::Status\nMilvusServiceImpl::Connect(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::ConnectRequest* request,\n    ::milvus::proto::milvus::ConnectResponse* response) {\n    Status s = Status::Ok();\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::DescribeIndex(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::DescribeIndexRequest* request,\n    ::milvus::proto::milvus::DescribeIndexResponse* response) {\n    auto s = proxy_.GetIndex(\n        request->collection_name(), request->index_name(), response);\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n/*\n * Useless interface, just to make the process run.\n */\n::grpc::Status\nMilvusServiceImpl::AllocTimestamp(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::AllocTimestampRequest* request,\n    ::milvus::proto::milvus::AllocTimestampResponse* response) {\n    Status s = Status::Ok();\n    Status2Response(s, response->mutable_status());\n    response->set_timestamp(0);\n    return ::grpc::Status::OK;\n}\n\n/*\n * Useless interface, just to make the process run.\n */\n::grpc::Status\nMilvusServiceImpl::GetLoadingProgress(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::GetLoadingProgressRequest* request,\n    ::milvus::proto::milvus::GetLoadingProgressResponse* response) {\n    Status s = Status::Ok();\n    Status2Response(s, response->mutable_status());\n    response->set_progress(100);\n    response->set_refresh_progress(100);\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::DropCollection(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::DropCollectionRequest* request,\n    ::milvus::proto::common::Status* response) {\n    if (proxy_.DropCollection(request->collection_name())) {\n        Status s = Status::Ok();\n        Status2Response(s, response);\n    } else {\n        Status s = Status::ServiceInternal();\n        Status2Response(s, response);\n    }\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::ReleaseCollection(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::ReleaseCollectionRequest* request,\n    ::milvus::proto::common::Status* response) {\n    auto s = proxy_.ReleaseCollection(request->collection_name());\n    Status2Response(s, response);\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::ShowCollections(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::ShowCollectionsRequest* request,\n    ::milvus::proto::milvus::ShowCollectionsResponse* response) {\n    std::vector<std::string> collections;\n    proxy_.ListCollection(&collections);\n    for (const auto& name : collections) {\n        response->add_collection_names(name);\n    }\n    Status s = Status::Ok();\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::DropIndex(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::DropIndexRequest* request,\n    ::milvus::proto::common::Status* response) {\n    auto s =\n        proxy_.DropIndex(request->collection_name(), request->index_name());\n    Status2Response(s, response);\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::Flush(::grpc::ServerContext* context,\n                         const ::milvus::proto::milvus::FlushRequest* request,\n                         ::milvus::proto::milvus::FlushResponse* response) {\n    // do nothing\n    Status s = Status::Ok();\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::GetFlushState(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::GetFlushStateRequest* request,\n    ::milvus::proto::milvus::GetFlushStateResponse* response) {\n    Status s = Status::Ok();\n    Status2Response(s, response->mutable_status());\n    response->set_flushed(true);\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::GetCollectionStatistics(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::GetCollectionStatisticsRequest* request,\n    ::milvus::proto::milvus::GetCollectionStatisticsResponse* response) {\n    Status s =\n        proxy_.GetCollectionStatistics(request->collection_name(), response);\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n::grpc::Status\nMilvusServiceImpl::GetLoadState(\n    ::grpc::ServerContext* context,\n    const ::milvus::proto::milvus::GetLoadStateRequest* request,\n    ::milvus::proto::milvus::GetLoadStateResponse* response) {\n    auto s = proxy_.GetLoadState(request->collection_name(), response);\n    Status2Response(s, response->mutable_status());\n    return ::grpc::Status::OK;\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/milvus_service_impl.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <grpcpp/support/status.h>\n#include \"pb/milvus.grpc.pb.h\"\n#include \"milvus_proxy.h\"\n\nnamespace milvus::local {\nclass MilvusServiceImpl final\n    : public milvus::proto::milvus::MilvusService::Service {\n public:\n    MilvusServiceImpl(const std::string& work_dir) : proxy_(work_dir.c_str()) {\n    }\n    virtual ~MilvusServiceImpl() = default;\n\n public:\n    bool\n    Init() {\n        return proxy_.Init();\n    }\n\n public:\n    ::grpc::Status\n    CreateCollection(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::CreateCollectionRequest* request,\n        ::milvus::proto::common::Status* response) override;\n\n    ::grpc::Status\n    CreateIndex(::grpc::ServerContext* context,\n                const ::milvus::proto::milvus::CreateIndexRequest* request,\n                ::milvus::proto::common::Status* response) override;\n\n    ::grpc::Status\n    LoadCollection(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::LoadCollectionRequest* request,\n        ::milvus::proto::common::Status* response) override;\n\n    ::grpc::Status\n    Insert(::grpc::ServerContext* context,\n           const ::milvus::proto::milvus::InsertRequest* request,\n           ::milvus::proto::milvus::MutationResult* response) override;\n\n    ::grpc::Status\n    Upsert(::grpc::ServerContext* context,\n           const ::milvus::proto::milvus::UpsertRequest* request,\n           ::milvus::proto::milvus::MutationResult* response) override;\n\n    ::grpc::Status\n    Search(::grpc::ServerContext* context,\n           const ::milvus::proto::milvus::SearchRequest* request,\n           ::milvus::proto::milvus::SearchResults* response) override;\n\n    ::grpc::Status\n    HybridSearch(::grpc::ServerContext* context,\n                 const ::milvus::proto::milvus::HybridSearchRequest* request,\n                 ::milvus::proto::milvus::SearchResults* response) override;\n\n    ::grpc::Status\n    Query(::grpc::ServerContext* context,\n          const ::milvus::proto::milvus::QueryRequest* request,\n          ::milvus::proto::milvus::QueryResults* response) override;\n\n    ::grpc::Status\n    Delete(::grpc::ServerContext* context,\n           const ::milvus::proto::milvus::DeleteRequest* request,\n           ::milvus::proto::milvus::MutationResult* response) override;\n\n    ::grpc::Status\n    DescribeCollection(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::DescribeCollectionRequest* request,\n        ::milvus::proto::milvus::DescribeCollectionResponse* response) override;\n\n    ::grpc::Status\n    Connect(::grpc::ServerContext* context,\n            const ::milvus::proto::milvus::ConnectRequest* request,\n            ::milvus::proto::milvus::ConnectResponse* response) override;\n\n    ::grpc::Status\n    DescribeIndex(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::DescribeIndexRequest* request,\n        ::milvus::proto::milvus::DescribeIndexResponse* response) override;\n\n    ::grpc::Status\n    AllocTimestamp(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::AllocTimestampRequest* request,\n        ::milvus::proto::milvus::AllocTimestampResponse* response) override;\n\n    ::grpc::Status\n    GetLoadingProgress(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::GetLoadingProgressRequest* request,\n        ::milvus::proto::milvus::GetLoadingProgressResponse* response) override;\n\n    ::grpc::Status\n    DropCollection(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::DropCollectionRequest* request,\n        ::milvus::proto::common::Status* response) override;\n\n    ::grpc::Status\n    ReleaseCollection(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::ReleaseCollectionRequest* request,\n        ::milvus::proto::common::Status* response) override;\n\n    ::grpc::Status\n    ShowCollections(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::ShowCollectionsRequest* request,\n        ::milvus::proto::milvus::ShowCollectionsResponse* response) override;\n\n    ::grpc::Status\n    HasCollection(::grpc::ServerContext* context,\n                  const ::milvus::proto::milvus::HasCollectionRequest* request,\n                  ::milvus::proto::milvus::BoolResponse* response) override;\n\n    ::grpc::Status\n    DropIndex(::grpc::ServerContext* context,\n              const ::milvus::proto::milvus::DropIndexRequest* request,\n              ::milvus::proto::common::Status* response) override;\n\n    ::grpc::Status\n    Flush(::grpc::ServerContext* context,\n          const ::milvus::proto::milvus::FlushRequest* request,\n          ::milvus::proto::milvus::FlushResponse* response) override;\n\n    ::grpc::Status\n    GetFlushState(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::GetFlushStateRequest* request,\n        ::milvus::proto::milvus::GetFlushStateResponse* response) override;\n\n    // for now only row count is returned\n    ::grpc::Status\n    GetCollectionStatistics(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::GetCollectionStatisticsRequest* request,\n        ::milvus::proto::milvus::GetCollectionStatisticsResponse* response)\n        override;\n\n    ::grpc::Status\n    GetLoadState(\n        ::grpc::ServerContext* context,\n        const ::milvus::proto::milvus::GetLoadStateRequest* request,\n        ::milvus::proto::milvus::GetLoadStateResponse* response) override;\n\n private:\n    ::milvus::local::MilvusProxy proxy_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/parser/Plan.g4",
    "content": "grammar Plan;\n\nexpr:\n\tIntegerConstant\t\t\t\t\t\t\t\t\t\t\t                     # Integer\n\t| FloatingConstant\t\t\t\t\t\t\t\t\t\t                     # Floating\n\t| BooleanConstant\t\t\t\t\t\t\t\t\t\t                     # Boolean\n\t| StringLiteral\t\t\t\t\t\t\t\t\t\t\t                     # String\n\t| Identifier\t\t\t\t\t\t\t\t\t\t\t                     # Identifier\n\t| JSONIdentifier                                                             # JSONIdentifier\n\t| '(' expr ')'\t\t\t\t\t\t\t\t\t\t\t                     # Parens\n\t| '[' expr (',' expr)* ','? ']'                                              # Array\n\t| expr LIKE StringLiteral                                                    # Like\n\t| expr POW expr\t\t\t\t\t\t\t\t\t\t\t                     # Power\n\t| op = (ADD | SUB | BNOT | NOT) expr\t\t\t\t\t                     # Unary\n//\t| '(' typeName ')' expr\t\t\t\t\t\t\t\t\t                     # Cast\n\t| expr op = (MUL | DIV | MOD) expr\t\t\t\t\t\t                     # MulDivMod\n\t| expr op = (ADD | SUB) expr\t\t\t\t\t\t\t                     # AddSub\n\t| expr op = (SHL | SHR) expr\t\t\t\t\t\t\t                     # Shift\n\t| expr op = (IN | NIN) ('[' expr (',' expr)* ','? ']')                       # Term\n\t| expr op = (IN | NIN) EmptyTerm                                             # EmptyTerm\n\t| (JSONContains | ArrayContains)'('expr',' expr')'                           # JSONContains\n\t| (JSONContainsAll | ArrayContainsAll)'('expr',' expr')'                     # JSONContainsAll\n\t| (JSONContainsAny | ArrayContainsAny)'('expr',' expr')'                     # JSONContainsAny\n\t| ArrayLength'('(Identifier | JSONIdentifier)')'                             # ArrayLength\n\t| expr op1 = (LT | LE) (Identifier | JSONIdentifier) op2 = (LT | LE) expr\t # Range\n\t| expr op1 = (GT | GE) (Identifier | JSONIdentifier) op2 = (GT | GE) expr    # ReverseRange\n\t| expr op = (LT | LE | GT | GE) expr\t\t\t\t\t                     # Relational\n\t| expr op = (EQ | NE) expr\t\t\t\t\t\t\t\t                     # Equality\n\t| expr BAND expr\t\t\t\t\t\t\t\t\t\t                     # BitAnd\n\t| expr BXOR expr\t\t\t\t\t\t\t\t\t\t                     # BitXor\n\t| expr BOR expr\t\t\t\t\t\t\t\t\t\t\t                     # BitOr\n\t| expr AND expr\t\t\t\t\t\t\t\t\t\t\t                     # LogicalAnd\n\t| expr OR expr\t\t\t\t\t\t\t\t\t\t\t                     # LogicalOr\n\t| EXISTS expr                                                                # Exists;\n\n// typeName: ty = (BOOL | INT8 | INT16 | INT32 | INT64 | FLOAT | DOUBLE);\n\n// BOOL: 'bool';\n// INT8: 'int8';\n// INT16: 'int16';\n// INT32: 'int32';\n// INT64: 'int64';\n// FLOAT: 'float';\n// DOUBLE: 'double';\n\nLT: '<';\nLE: '<=';\nGT: '>';\nGE: '>=';\nEQ: '==';\nNE: '!=';\n\nLIKE: 'like' | 'LIKE';\nEXISTS: 'exists' | 'EXISTS';\n\nADD: '+';\nSUB: '-';\nMUL: '*';\nDIV: '/';\nMOD: '%';\nPOW: '**';\nSHL: '<<';\nSHR: '>>';\nBAND: '&';\nBOR: '|';\nBXOR: '^';\n\nAND: '&&' | 'and';\nOR: '||' | 'or';\n\nBNOT: '~';\nNOT: '!' | 'not';\n\nIN: 'in';\nNIN: 'not in';\nEmptyTerm: '[' (Whitespace | Newline)* ']';\n\nJSONContains: 'json_contains' | 'JSON_CONTAINS';\nJSONContainsAll: 'json_contains_all' | 'JSON_CONTAINS_ALL';\nJSONContainsAny: 'json_contains_any' | 'JSON_CONTAINS_ANY';\n\nArrayContains: 'array_contains' | 'ARRAY_CONTAINS';\nArrayContainsAll: 'array_contains_all' | 'ARRAY_CONTAINS_ALL';\nArrayContainsAny: 'array_contains_any' | 'ARRAY_CONTAINS_ANY';\nArrayLength: 'array_length' | 'ARRAY_LENGTH';\n\nBooleanConstant: 'true' | 'True' | 'TRUE' | 'false' | 'False' | 'FALSE';\n\nIntegerConstant:\n\tDecimalConstant\n\t| OctalConstant\n\t| HexadecimalConstant\n\t| BinaryConstant;\n\nFloatingConstant:\n\tDecimalFloatingConstant\n\t| HexadecimalFloatingConstant;\n\nIdentifier: Nondigit (Nondigit | Digit)* | '$meta';\n\nStringLiteral: EncodingPrefix? ('\"' DoubleSCharSequence? '\"' | '\\'' SingleSCharSequence? '\\'');\nJSONIdentifier: Identifier('[' (StringLiteral | DecimalConstant) ']')+;\n\nfragment EncodingPrefix: 'u8' | 'u' | 'U' | 'L';\n\nfragment DoubleSCharSequence: DoubleSChar+;\nfragment SingleSCharSequence: SingleSChar+;\n\nfragment DoubleSChar: ~[\"\\\\\\r\\n] | EscapeSequence | '\\\\\\n' | '\\\\\\r\\n';\nfragment SingleSChar: ~['\\\\\\r\\n] | EscapeSequence | '\\\\\\n' | '\\\\\\r\\n';\nfragment Nondigit: [a-zA-Z_];\nfragment Digit: [0-9];\nfragment BinaryConstant: '0' [bB] [0-1]+;\nfragment DecimalConstant: NonzeroDigit Digit* | '0';\nfragment OctalConstant: '0' OctalDigit*;\nfragment HexadecimalConstant: '0' [xX] HexadecimalDigitSequence;\nfragment NonzeroDigit: [1-9];\nfragment OctalDigit: [0-7];\nfragment HexadecimalDigit: [0-9a-fA-F];\nfragment HexQuad:\n\tHexadecimalDigit HexadecimalDigit HexadecimalDigit HexadecimalDigit;\nfragment UniversalCharacterName:\n\t'\\\\u' HexQuad\n\t| '\\\\U' HexQuad HexQuad;\nfragment DecimalFloatingConstant:\n\tFractionalConstant ExponentPart?\n\t| DigitSequence ExponentPart;\nfragment HexadecimalFloatingConstant:\n\t'0' [xX] (\n\t\tHexadecimalFractionalConstant\n\t\t| HexadecimalDigitSequence\n\t) BinaryExponentPart;\nfragment FractionalConstant:\n\tDigitSequence? '.' DigitSequence\n\t| DigitSequence '.';\nfragment ExponentPart: [eE] [+-]? DigitSequence;\nfragment DigitSequence: Digit+;\nfragment HexadecimalFractionalConstant:\n\tHexadecimalDigitSequence? '.' HexadecimalDigitSequence\n\t| HexadecimalDigitSequence '.';\nfragment HexadecimalDigitSequence: HexadecimalDigit+;\nfragment BinaryExponentPart: [pP] [+-]? DigitSequence;\nfragment EscapeSequence:\n\t'\\\\' ['\"?abfnrtv\\\\]\n\t| '\\\\' OctalDigit OctalDigit? OctalDigit?\n\t| '\\\\x' HexadecimalDigitSequence\n\t| UniversalCharacterName;\n\nWhitespace: [ \\t]+ -> skip;\n\nNewline: ( '\\r' '\\n'? | '\\n') -> skip;\n"
  },
  {
    "path": "src/parser/antlr/PlanBaseVisitor.cpp",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n\n#include \"PlanBaseVisitor.h\"\n\n\n"
  },
  {
    "path": "src/parser/antlr/PlanBaseVisitor.h",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n#pragma once\n\n\n#include \"antlr4-runtime.h\"\n#include \"PlanVisitor.h\"\n\n\n/**\n * This class provides an empty implementation of PlanVisitor, which can be\n * extended to create a visitor which only needs to handle a subset of the available methods.\n */\nclass  PlanBaseVisitor : public PlanVisitor {\npublic:\n\n  virtual std::any visitJSONIdentifier(PlanParser::JSONIdentifierContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitParens(PlanParser::ParensContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitString(PlanParser::StringContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitFloating(PlanParser::FloatingContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitJSONContainsAll(PlanParser::JSONContainsAllContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitLogicalOr(PlanParser::LogicalOrContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitMulDivMod(PlanParser::MulDivModContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitIdentifier(PlanParser::IdentifierContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitLike(PlanParser::LikeContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitLogicalAnd(PlanParser::LogicalAndContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitEquality(PlanParser::EqualityContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitBoolean(PlanParser::BooleanContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitShift(PlanParser::ShiftContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitReverseRange(PlanParser::ReverseRangeContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitBitOr(PlanParser::BitOrContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitAddSub(PlanParser::AddSubContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitRelational(PlanParser::RelationalContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitArrayLength(PlanParser::ArrayLengthContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitTerm(PlanParser::TermContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitJSONContains(PlanParser::JSONContainsContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitRange(PlanParser::RangeContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitUnary(PlanParser::UnaryContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitInteger(PlanParser::IntegerContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitArray(PlanParser::ArrayContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitJSONContainsAny(PlanParser::JSONContainsAnyContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitBitXor(PlanParser::BitXorContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitExists(PlanParser::ExistsContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitBitAnd(PlanParser::BitAndContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitEmptyTerm(PlanParser::EmptyTermContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n  virtual std::any visitPower(PlanParser::PowerContext *ctx) override {\n    return visitChildren(ctx);\n  }\n\n\n};\n\n"
  },
  {
    "path": "src/parser/antlr/PlanLexer.cpp",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n\n#include \"PlanLexer.h\"\n\n\nusing namespace antlr4;\n\n\n\nusing namespace antlr4;\n\nnamespace {\n\nstruct PlanLexerStaticData final {\n  PlanLexerStaticData(std::vector<std::string> ruleNames,\n                          std::vector<std::string> channelNames,\n                          std::vector<std::string> modeNames,\n                          std::vector<std::string> literalNames,\n                          std::vector<std::string> symbolicNames)\n      : ruleNames(std::move(ruleNames)), channelNames(std::move(channelNames)),\n        modeNames(std::move(modeNames)), literalNames(std::move(literalNames)),\n        symbolicNames(std::move(symbolicNames)),\n        vocabulary(this->literalNames, this->symbolicNames) {}\n\n  PlanLexerStaticData(const PlanLexerStaticData&) = delete;\n  PlanLexerStaticData(PlanLexerStaticData&&) = delete;\n  PlanLexerStaticData& operator=(const PlanLexerStaticData&) = delete;\n  PlanLexerStaticData& operator=(PlanLexerStaticData&&) = delete;\n\n  std::vector<antlr4::dfa::DFA> decisionToDFA;\n  antlr4::atn::PredictionContextCache sharedContextCache;\n  const std::vector<std::string> ruleNames;\n  const std::vector<std::string> channelNames;\n  const std::vector<std::string> modeNames;\n  const std::vector<std::string> literalNames;\n  const std::vector<std::string> symbolicNames;\n  const antlr4::dfa::Vocabulary vocabulary;\n  antlr4::atn::SerializedATNView serializedATN;\n  std::unique_ptr<antlr4::atn::ATN> atn;\n};\n\n::antlr4::internal::OnceFlag planlexerLexerOnceFlag;\n#if ANTLR4_USE_THREAD_LOCAL_CACHE\nstatic thread_local\n#endif\nPlanLexerStaticData *planlexerLexerStaticData = nullptr;\n\nvoid planlexerLexerInitialize() {\n#if ANTLR4_USE_THREAD_LOCAL_CACHE\n  if (planlexerLexerStaticData != nullptr) {\n    return;\n  }\n#else\n  assert(planlexerLexerStaticData == nullptr);\n#endif\n  auto staticData = std::make_unique<PlanLexerStaticData>(\n    std::vector<std::string>{\n      \"T__0\", \"T__1\", \"T__2\", \"T__3\", \"T__4\", \"LT\", \"LE\", \"GT\", \"GE\", \"EQ\", \n      \"NE\", \"LIKE\", \"EXISTS\", \"ADD\", \"SUB\", \"MUL\", \"DIV\", \"MOD\", \"POW\", \n      \"SHL\", \"SHR\", \"BAND\", \"BOR\", \"BXOR\", \"AND\", \"OR\", \"BNOT\", \"NOT\", \"IN\", \n      \"NIN\", \"EmptyTerm\", \"JSONContains\", \"JSONContainsAll\", \"JSONContainsAny\", \n      \"ArrayContains\", \"ArrayContainsAll\", \"ArrayContainsAny\", \"ArrayLength\", \n      \"BooleanConstant\", \"IntegerConstant\", \"FloatingConstant\", \"Identifier\", \n      \"StringLiteral\", \"JSONIdentifier\", \"EncodingPrefix\", \"DoubleSCharSequence\", \n      \"SingleSCharSequence\", \"DoubleSChar\", \"SingleSChar\", \"Nondigit\", \"Digit\", \n      \"BinaryConstant\", \"DecimalConstant\", \"OctalConstant\", \"HexadecimalConstant\", \n      \"NonzeroDigit\", \"OctalDigit\", \"HexadecimalDigit\", \"HexQuad\", \"UniversalCharacterName\", \n      \"DecimalFloatingConstant\", \"HexadecimalFloatingConstant\", \"FractionalConstant\", \n      \"ExponentPart\", \"DigitSequence\", \"HexadecimalFractionalConstant\", \n      \"HexadecimalDigitSequence\", \"BinaryExponentPart\", \"EscapeSequence\", \n      \"Whitespace\", \"Newline\"\n    },\n    std::vector<std::string>{\n      \"DEFAULT_TOKEN_CHANNEL\", \"HIDDEN\"\n    },\n    std::vector<std::string>{\n      \"DEFAULT_MODE\"\n    },\n    std::vector<std::string>{\n      \"\", \"'('\", \"')'\", \"'['\", \"','\", \"']'\", \"'<'\", \"'<='\", \"'>'\", \"'>='\", \n      \"'=='\", \"'!='\", \"\", \"\", \"'+'\", \"'-'\", \"'*'\", \"'/'\", \"'%'\", \"'**'\", \n      \"'<<'\", \"'>>'\", \"'&'\", \"'|'\", \"'^'\", \"\", \"\", \"'~'\", \"\", \"'in'\", \"'not in'\"\n    },\n    std::vector<std::string>{\n      \"\", \"\", \"\", \"\", \"\", \"\", \"LT\", \"LE\", \"GT\", \"GE\", \"EQ\", \"NE\", \"LIKE\", \n      \"EXISTS\", \"ADD\", \"SUB\", \"MUL\", \"DIV\", \"MOD\", \"POW\", \"SHL\", \"SHR\", \n      \"BAND\", \"BOR\", \"BXOR\", \"AND\", \"OR\", \"BNOT\", \"NOT\", \"IN\", \"NIN\", \"EmptyTerm\", \n      \"JSONContains\", \"JSONContainsAll\", \"JSONContainsAny\", \"ArrayContains\", \n      \"ArrayContainsAll\", \"ArrayContainsAny\", \"ArrayLength\", \"BooleanConstant\", \n      \"IntegerConstant\", \"FloatingConstant\", \"Identifier\", \"StringLiteral\", \n      \"JSONIdentifier\", \"Whitespace\", \"Newline\"\n    }\n  );\n  static const int32_t serializedATNSegment[] = {\n  \t4,0,46,752,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,\n  \t6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,\n  \t7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,\n  \t7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7,26,2,27,7,27,2,28,\n  \t7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7,32,2,33,7,33,2,34,7,34,2,35,\n  \t7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,\n  \t7,42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,\n  \t7,49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,\n  \t7,56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,63,\n  \t7,63,2,64,7,64,2,65,7,65,2,66,7,66,2,67,7,67,2,68,7,68,2,69,7,69,2,70,\n  \t7,70,1,0,1,0,1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,6,1,6,1,6,1,7,\n  \t1,7,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,\n  \t11,1,11,1,11,3,11,178,8,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,\n  \t12,1,12,1,12,1,12,3,12,192,8,12,1,13,1,13,1,14,1,14,1,15,1,15,1,16,1,\n  \t16,1,17,1,17,1,18,1,18,1,18,1,19,1,19,1,19,1,20,1,20,1,20,1,21,1,21,1,\n  \t22,1,22,1,23,1,23,1,24,1,24,1,24,1,24,1,24,3,24,224,8,24,1,25,1,25,1,\n  \t25,1,25,3,25,230,8,25,1,26,1,26,1,27,1,27,1,27,1,27,3,27,238,8,27,1,28,\n  \t1,28,1,28,1,29,1,29,1,29,1,29,1,29,1,29,1,29,1,30,1,30,1,30,5,30,253,\n  \t8,30,10,30,12,30,256,9,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31,\n  \t1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,\n  \t1,31,1,31,1,31,1,31,1,31,3,31,286,8,31,1,32,1,32,1,32,1,32,1,32,1,32,\n  \t1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,\n  \t1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,32,\n  \t3,32,322,8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,\n  \t1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,\n  \t1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,358,8,33,1,34,1,34,\n  \t1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,\n  \t1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,1,34,3,34,388,\n  \t8,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,\n  \t1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,\n  \t1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,3,35,426,8,35,1,36,1,36,\n  \t1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,\n  \t1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,1,36,\n  \t1,36,1,36,1,36,1,36,1,36,1,36,3,36,464,8,36,1,37,1,37,1,37,1,37,1,37,\n  \t1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,\n  \t1,37,1,37,1,37,1,37,1,37,3,37,490,8,37,1,38,1,38,1,38,1,38,1,38,1,38,\n  \t1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,1,38,\n  \t1,38,1,38,1,38,1,38,1,38,1,38,1,38,3,38,519,8,38,1,39,1,39,1,39,1,39,\n  \t3,39,525,8,39,1,40,1,40,3,40,529,8,40,1,41,1,41,1,41,5,41,534,8,41,10,\n  \t41,12,41,537,9,41,1,41,1,41,1,41,1,41,1,41,3,41,544,8,41,1,42,3,42,547,\n  \t8,42,1,42,1,42,3,42,551,8,42,1,42,1,42,1,42,3,42,556,8,42,1,42,3,42,559,\n  \t8,42,1,43,1,43,1,43,1,43,3,43,565,8,43,1,43,1,43,4,43,569,8,43,11,43,\n  \t12,43,570,1,44,1,44,1,44,3,44,576,8,44,1,45,4,45,579,8,45,11,45,12,45,\n  \t580,1,46,4,46,584,8,46,11,46,12,46,585,1,47,1,47,1,47,1,47,1,47,1,47,\n  \t1,47,3,47,595,8,47,1,48,1,48,1,48,1,48,1,48,1,48,1,48,3,48,604,8,48,1,\n  \t49,1,49,1,50,1,50,1,51,1,51,1,51,4,51,613,8,51,11,51,12,51,614,1,52,1,\n  \t52,5,52,619,8,52,10,52,12,52,622,9,52,1,52,3,52,625,8,52,1,53,1,53,5,\n  \t53,629,8,53,10,53,12,53,632,9,53,1,54,1,54,1,54,1,54,1,55,1,55,1,56,1,\n  \t56,1,57,1,57,1,58,1,58,1,58,1,58,1,58,1,59,1,59,1,59,1,59,1,59,1,59,1,\n  \t59,1,59,1,59,1,59,3,59,659,8,59,1,60,1,60,3,60,663,8,60,1,60,1,60,1,60,\n  \t3,60,668,8,60,1,61,1,61,1,61,1,61,3,61,674,8,61,1,61,1,61,1,62,3,62,679,\n  \t8,62,1,62,1,62,1,62,1,62,1,62,3,62,686,8,62,1,63,1,63,3,63,690,8,63,1,\n  \t63,1,63,1,64,4,64,695,8,64,11,64,12,64,696,1,65,3,65,700,8,65,1,65,1,\n  \t65,1,65,1,65,1,65,3,65,707,8,65,1,66,4,66,710,8,66,11,66,12,66,711,1,\n  \t67,1,67,3,67,716,8,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,3,68,725,8,68,\n  \t1,68,3,68,728,8,68,1,68,1,68,1,68,1,68,1,68,3,68,735,8,68,1,69,4,69,738,\n  \t8,69,11,69,12,69,739,1,69,1,69,1,70,1,70,3,70,746,8,70,1,70,3,70,749,\n  \t8,70,1,70,1,70,0,0,71,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,\n  \t11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,\n  \t45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,\n  \t34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,0,91,\n  \t0,93,0,95,0,97,0,99,0,101,0,103,0,105,0,107,0,109,0,111,0,113,0,115,0,\n  \t117,0,119,0,121,0,123,0,125,0,127,0,129,0,131,0,133,0,135,0,137,0,139,\n  \t45,141,46,1,0,16,3,0,76,76,85,85,117,117,4,0,10,10,13,13,34,34,92,92,\n  \t4,0,10,10,13,13,39,39,92,92,3,0,65,90,95,95,97,122,1,0,48,57,2,0,66,66,\n  \t98,98,1,0,48,49,2,0,88,88,120,120,1,0,49,57,1,0,48,55,3,0,48,57,65,70,\n  \t97,102,2,0,69,69,101,101,2,0,43,43,45,45,2,0,80,80,112,112,10,0,34,34,\n  \t39,39,63,63,92,92,97,98,102,102,110,110,114,114,116,116,118,118,2,0,9,\n  \t9,32,32,791,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,\n  \t0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,\n  \t21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,\n  \t0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,\n  \t0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,\n  \t53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,\n  \t0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,\n  \t0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,\n  \t85,1,0,0,0,0,87,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,1,143,1,0,0,0,3,145,\n  \t1,0,0,0,5,147,1,0,0,0,7,149,1,0,0,0,9,151,1,0,0,0,11,153,1,0,0,0,13,155,\n  \t1,0,0,0,15,158,1,0,0,0,17,160,1,0,0,0,19,163,1,0,0,0,21,166,1,0,0,0,23,\n  \t177,1,0,0,0,25,191,1,0,0,0,27,193,1,0,0,0,29,195,1,0,0,0,31,197,1,0,0,\n  \t0,33,199,1,0,0,0,35,201,1,0,0,0,37,203,1,0,0,0,39,206,1,0,0,0,41,209,\n  \t1,0,0,0,43,212,1,0,0,0,45,214,1,0,0,0,47,216,1,0,0,0,49,223,1,0,0,0,51,\n  \t229,1,0,0,0,53,231,1,0,0,0,55,237,1,0,0,0,57,239,1,0,0,0,59,242,1,0,0,\n  \t0,61,249,1,0,0,0,63,285,1,0,0,0,65,321,1,0,0,0,67,357,1,0,0,0,69,387,\n  \t1,0,0,0,71,425,1,0,0,0,73,463,1,0,0,0,75,489,1,0,0,0,77,518,1,0,0,0,79,\n  \t524,1,0,0,0,81,528,1,0,0,0,83,543,1,0,0,0,85,546,1,0,0,0,87,560,1,0,0,\n  \t0,89,575,1,0,0,0,91,578,1,0,0,0,93,583,1,0,0,0,95,594,1,0,0,0,97,603,\n  \t1,0,0,0,99,605,1,0,0,0,101,607,1,0,0,0,103,609,1,0,0,0,105,624,1,0,0,\n  \t0,107,626,1,0,0,0,109,633,1,0,0,0,111,637,1,0,0,0,113,639,1,0,0,0,115,\n  \t641,1,0,0,0,117,643,1,0,0,0,119,658,1,0,0,0,121,667,1,0,0,0,123,669,1,\n  \t0,0,0,125,685,1,0,0,0,127,687,1,0,0,0,129,694,1,0,0,0,131,706,1,0,0,0,\n  \t133,709,1,0,0,0,135,713,1,0,0,0,137,734,1,0,0,0,139,737,1,0,0,0,141,748,\n  \t1,0,0,0,143,144,5,40,0,0,144,2,1,0,0,0,145,146,5,41,0,0,146,4,1,0,0,0,\n  \t147,148,5,91,0,0,148,6,1,0,0,0,149,150,5,44,0,0,150,8,1,0,0,0,151,152,\n  \t5,93,0,0,152,10,1,0,0,0,153,154,5,60,0,0,154,12,1,0,0,0,155,156,5,60,\n  \t0,0,156,157,5,61,0,0,157,14,1,0,0,0,158,159,5,62,0,0,159,16,1,0,0,0,160,\n  \t161,5,62,0,0,161,162,5,61,0,0,162,18,1,0,0,0,163,164,5,61,0,0,164,165,\n  \t5,61,0,0,165,20,1,0,0,0,166,167,5,33,0,0,167,168,5,61,0,0,168,22,1,0,\n  \t0,0,169,170,5,108,0,0,170,171,5,105,0,0,171,172,5,107,0,0,172,178,5,101,\n  \t0,0,173,174,5,76,0,0,174,175,5,73,0,0,175,176,5,75,0,0,176,178,5,69,0,\n  \t0,177,169,1,0,0,0,177,173,1,0,0,0,178,24,1,0,0,0,179,180,5,101,0,0,180,\n  \t181,5,120,0,0,181,182,5,105,0,0,182,183,5,115,0,0,183,184,5,116,0,0,184,\n  \t192,5,115,0,0,185,186,5,69,0,0,186,187,5,88,0,0,187,188,5,73,0,0,188,\n  \t189,5,83,0,0,189,190,5,84,0,0,190,192,5,83,0,0,191,179,1,0,0,0,191,185,\n  \t1,0,0,0,192,26,1,0,0,0,193,194,5,43,0,0,194,28,1,0,0,0,195,196,5,45,0,\n  \t0,196,30,1,0,0,0,197,198,5,42,0,0,198,32,1,0,0,0,199,200,5,47,0,0,200,\n  \t34,1,0,0,0,201,202,5,37,0,0,202,36,1,0,0,0,203,204,5,42,0,0,204,205,5,\n  \t42,0,0,205,38,1,0,0,0,206,207,5,60,0,0,207,208,5,60,0,0,208,40,1,0,0,\n  \t0,209,210,5,62,0,0,210,211,5,62,0,0,211,42,1,0,0,0,212,213,5,38,0,0,213,\n  \t44,1,0,0,0,214,215,5,124,0,0,215,46,1,0,0,0,216,217,5,94,0,0,217,48,1,\n  \t0,0,0,218,219,5,38,0,0,219,224,5,38,0,0,220,221,5,97,0,0,221,222,5,110,\n  \t0,0,222,224,5,100,0,0,223,218,1,0,0,0,223,220,1,0,0,0,224,50,1,0,0,0,\n  \t225,226,5,124,0,0,226,230,5,124,0,0,227,228,5,111,0,0,228,230,5,114,0,\n  \t0,229,225,1,0,0,0,229,227,1,0,0,0,230,52,1,0,0,0,231,232,5,126,0,0,232,\n  \t54,1,0,0,0,233,238,5,33,0,0,234,235,5,110,0,0,235,236,5,111,0,0,236,238,\n  \t5,116,0,0,237,233,1,0,0,0,237,234,1,0,0,0,238,56,1,0,0,0,239,240,5,105,\n  \t0,0,240,241,5,110,0,0,241,58,1,0,0,0,242,243,5,110,0,0,243,244,5,111,\n  \t0,0,244,245,5,116,0,0,245,246,5,32,0,0,246,247,5,105,0,0,247,248,5,110,\n  \t0,0,248,60,1,0,0,0,249,254,5,91,0,0,250,253,3,139,69,0,251,253,3,141,\n  \t70,0,252,250,1,0,0,0,252,251,1,0,0,0,253,256,1,0,0,0,254,252,1,0,0,0,\n  \t254,255,1,0,0,0,255,257,1,0,0,0,256,254,1,0,0,0,257,258,5,93,0,0,258,\n  \t62,1,0,0,0,259,260,5,106,0,0,260,261,5,115,0,0,261,262,5,111,0,0,262,\n  \t263,5,110,0,0,263,264,5,95,0,0,264,265,5,99,0,0,265,266,5,111,0,0,266,\n  \t267,5,110,0,0,267,268,5,116,0,0,268,269,5,97,0,0,269,270,5,105,0,0,270,\n  \t271,5,110,0,0,271,286,5,115,0,0,272,273,5,74,0,0,273,274,5,83,0,0,274,\n  \t275,5,79,0,0,275,276,5,78,0,0,276,277,5,95,0,0,277,278,5,67,0,0,278,279,\n  \t5,79,0,0,279,280,5,78,0,0,280,281,5,84,0,0,281,282,5,65,0,0,282,283,5,\n  \t73,0,0,283,284,5,78,0,0,284,286,5,83,0,0,285,259,1,0,0,0,285,272,1,0,\n  \t0,0,286,64,1,0,0,0,287,288,5,106,0,0,288,289,5,115,0,0,289,290,5,111,\n  \t0,0,290,291,5,110,0,0,291,292,5,95,0,0,292,293,5,99,0,0,293,294,5,111,\n  \t0,0,294,295,5,110,0,0,295,296,5,116,0,0,296,297,5,97,0,0,297,298,5,105,\n  \t0,0,298,299,5,110,0,0,299,300,5,115,0,0,300,301,5,95,0,0,301,302,5,97,\n  \t0,0,302,303,5,108,0,0,303,322,5,108,0,0,304,305,5,74,0,0,305,306,5,83,\n  \t0,0,306,307,5,79,0,0,307,308,5,78,0,0,308,309,5,95,0,0,309,310,5,67,0,\n  \t0,310,311,5,79,0,0,311,312,5,78,0,0,312,313,5,84,0,0,313,314,5,65,0,0,\n  \t314,315,5,73,0,0,315,316,5,78,0,0,316,317,5,83,0,0,317,318,5,95,0,0,318,\n  \t319,5,65,0,0,319,320,5,76,0,0,320,322,5,76,0,0,321,287,1,0,0,0,321,304,\n  \t1,0,0,0,322,66,1,0,0,0,323,324,5,106,0,0,324,325,5,115,0,0,325,326,5,\n  \t111,0,0,326,327,5,110,0,0,327,328,5,95,0,0,328,329,5,99,0,0,329,330,5,\n  \t111,0,0,330,331,5,110,0,0,331,332,5,116,0,0,332,333,5,97,0,0,333,334,\n  \t5,105,0,0,334,335,5,110,0,0,335,336,5,115,0,0,336,337,5,95,0,0,337,338,\n  \t5,97,0,0,338,339,5,110,0,0,339,358,5,121,0,0,340,341,5,74,0,0,341,342,\n  \t5,83,0,0,342,343,5,79,0,0,343,344,5,78,0,0,344,345,5,95,0,0,345,346,5,\n  \t67,0,0,346,347,5,79,0,0,347,348,5,78,0,0,348,349,5,84,0,0,349,350,5,65,\n  \t0,0,350,351,5,73,0,0,351,352,5,78,0,0,352,353,5,83,0,0,353,354,5,95,0,\n  \t0,354,355,5,65,0,0,355,356,5,78,0,0,356,358,5,89,0,0,357,323,1,0,0,0,\n  \t357,340,1,0,0,0,358,68,1,0,0,0,359,360,5,97,0,0,360,361,5,114,0,0,361,\n  \t362,5,114,0,0,362,363,5,97,0,0,363,364,5,121,0,0,364,365,5,95,0,0,365,\n  \t366,5,99,0,0,366,367,5,111,0,0,367,368,5,110,0,0,368,369,5,116,0,0,369,\n  \t370,5,97,0,0,370,371,5,105,0,0,371,372,5,110,0,0,372,388,5,115,0,0,373,\n  \t374,5,65,0,0,374,375,5,82,0,0,375,376,5,82,0,0,376,377,5,65,0,0,377,378,\n  \t5,89,0,0,378,379,5,95,0,0,379,380,5,67,0,0,380,381,5,79,0,0,381,382,5,\n  \t78,0,0,382,383,5,84,0,0,383,384,5,65,0,0,384,385,5,73,0,0,385,386,5,78,\n  \t0,0,386,388,5,83,0,0,387,359,1,0,0,0,387,373,1,0,0,0,388,70,1,0,0,0,389,\n  \t390,5,97,0,0,390,391,5,114,0,0,391,392,5,114,0,0,392,393,5,97,0,0,393,\n  \t394,5,121,0,0,394,395,5,95,0,0,395,396,5,99,0,0,396,397,5,111,0,0,397,\n  \t398,5,110,0,0,398,399,5,116,0,0,399,400,5,97,0,0,400,401,5,105,0,0,401,\n  \t402,5,110,0,0,402,403,5,115,0,0,403,404,5,95,0,0,404,405,5,97,0,0,405,\n  \t406,5,108,0,0,406,426,5,108,0,0,407,408,5,65,0,0,408,409,5,82,0,0,409,\n  \t410,5,82,0,0,410,411,5,65,0,0,411,412,5,89,0,0,412,413,5,95,0,0,413,414,\n  \t5,67,0,0,414,415,5,79,0,0,415,416,5,78,0,0,416,417,5,84,0,0,417,418,5,\n  \t65,0,0,418,419,5,73,0,0,419,420,5,78,0,0,420,421,5,83,0,0,421,422,5,95,\n  \t0,0,422,423,5,65,0,0,423,424,5,76,0,0,424,426,5,76,0,0,425,389,1,0,0,\n  \t0,425,407,1,0,0,0,426,72,1,0,0,0,427,428,5,97,0,0,428,429,5,114,0,0,429,\n  \t430,5,114,0,0,430,431,5,97,0,0,431,432,5,121,0,0,432,433,5,95,0,0,433,\n  \t434,5,99,0,0,434,435,5,111,0,0,435,436,5,110,0,0,436,437,5,116,0,0,437,\n  \t438,5,97,0,0,438,439,5,105,0,0,439,440,5,110,0,0,440,441,5,115,0,0,441,\n  \t442,5,95,0,0,442,443,5,97,0,0,443,444,5,110,0,0,444,464,5,121,0,0,445,\n  \t446,5,65,0,0,446,447,5,82,0,0,447,448,5,82,0,0,448,449,5,65,0,0,449,450,\n  \t5,89,0,0,450,451,5,95,0,0,451,452,5,67,0,0,452,453,5,79,0,0,453,454,5,\n  \t78,0,0,454,455,5,84,0,0,455,456,5,65,0,0,456,457,5,73,0,0,457,458,5,78,\n  \t0,0,458,459,5,83,0,0,459,460,5,95,0,0,460,461,5,65,0,0,461,462,5,78,0,\n  \t0,462,464,5,89,0,0,463,427,1,0,0,0,463,445,1,0,0,0,464,74,1,0,0,0,465,\n  \t466,5,97,0,0,466,467,5,114,0,0,467,468,5,114,0,0,468,469,5,97,0,0,469,\n  \t470,5,121,0,0,470,471,5,95,0,0,471,472,5,108,0,0,472,473,5,101,0,0,473,\n  \t474,5,110,0,0,474,475,5,103,0,0,475,476,5,116,0,0,476,490,5,104,0,0,477,\n  \t478,5,65,0,0,478,479,5,82,0,0,479,480,5,82,0,0,480,481,5,65,0,0,481,482,\n  \t5,89,0,0,482,483,5,95,0,0,483,484,5,76,0,0,484,485,5,69,0,0,485,486,5,\n  \t78,0,0,486,487,5,71,0,0,487,488,5,84,0,0,488,490,5,72,0,0,489,465,1,0,\n  \t0,0,489,477,1,0,0,0,490,76,1,0,0,0,491,492,5,116,0,0,492,493,5,114,0,\n  \t0,493,494,5,117,0,0,494,519,5,101,0,0,495,496,5,84,0,0,496,497,5,114,\n  \t0,0,497,498,5,117,0,0,498,519,5,101,0,0,499,500,5,84,0,0,500,501,5,82,\n  \t0,0,501,502,5,85,0,0,502,519,5,69,0,0,503,504,5,102,0,0,504,505,5,97,\n  \t0,0,505,506,5,108,0,0,506,507,5,115,0,0,507,519,5,101,0,0,508,509,5,70,\n  \t0,0,509,510,5,97,0,0,510,511,5,108,0,0,511,512,5,115,0,0,512,519,5,101,\n  \t0,0,513,514,5,70,0,0,514,515,5,65,0,0,515,516,5,76,0,0,516,517,5,83,0,\n  \t0,517,519,5,69,0,0,518,491,1,0,0,0,518,495,1,0,0,0,518,499,1,0,0,0,518,\n  \t503,1,0,0,0,518,508,1,0,0,0,518,513,1,0,0,0,519,78,1,0,0,0,520,525,3,\n  \t105,52,0,521,525,3,107,53,0,522,525,3,109,54,0,523,525,3,103,51,0,524,\n  \t520,1,0,0,0,524,521,1,0,0,0,524,522,1,0,0,0,524,523,1,0,0,0,525,80,1,\n  \t0,0,0,526,529,3,121,60,0,527,529,3,123,61,0,528,526,1,0,0,0,528,527,1,\n  \t0,0,0,529,82,1,0,0,0,530,535,3,99,49,0,531,534,3,99,49,0,532,534,3,101,\n  \t50,0,533,531,1,0,0,0,533,532,1,0,0,0,534,537,1,0,0,0,535,533,1,0,0,0,\n  \t535,536,1,0,0,0,536,544,1,0,0,0,537,535,1,0,0,0,538,539,5,36,0,0,539,\n  \t540,5,109,0,0,540,541,5,101,0,0,541,542,5,116,0,0,542,544,5,97,0,0,543,\n  \t530,1,0,0,0,543,538,1,0,0,0,544,84,1,0,0,0,545,547,3,89,44,0,546,545,\n  \t1,0,0,0,546,547,1,0,0,0,547,558,1,0,0,0,548,550,5,34,0,0,549,551,3,91,\n  \t45,0,550,549,1,0,0,0,550,551,1,0,0,0,551,552,1,0,0,0,552,559,5,34,0,0,\n  \t553,555,5,39,0,0,554,556,3,93,46,0,555,554,1,0,0,0,555,556,1,0,0,0,556,\n  \t557,1,0,0,0,557,559,5,39,0,0,558,548,1,0,0,0,558,553,1,0,0,0,559,86,1,\n  \t0,0,0,560,568,3,83,41,0,561,564,5,91,0,0,562,565,3,85,42,0,563,565,3,\n  \t105,52,0,564,562,1,0,0,0,564,563,1,0,0,0,565,566,1,0,0,0,566,567,5,93,\n  \t0,0,567,569,1,0,0,0,568,561,1,0,0,0,569,570,1,0,0,0,570,568,1,0,0,0,570,\n  \t571,1,0,0,0,571,88,1,0,0,0,572,573,5,117,0,0,573,576,5,56,0,0,574,576,\n  \t7,0,0,0,575,572,1,0,0,0,575,574,1,0,0,0,576,90,1,0,0,0,577,579,3,95,47,\n  \t0,578,577,1,0,0,0,579,580,1,0,0,0,580,578,1,0,0,0,580,581,1,0,0,0,581,\n  \t92,1,0,0,0,582,584,3,97,48,0,583,582,1,0,0,0,584,585,1,0,0,0,585,583,\n  \t1,0,0,0,585,586,1,0,0,0,586,94,1,0,0,0,587,595,8,1,0,0,588,595,3,137,\n  \t68,0,589,590,5,92,0,0,590,595,5,10,0,0,591,592,5,92,0,0,592,593,5,13,\n  \t0,0,593,595,5,10,0,0,594,587,1,0,0,0,594,588,1,0,0,0,594,589,1,0,0,0,\n  \t594,591,1,0,0,0,595,96,1,0,0,0,596,604,8,2,0,0,597,604,3,137,68,0,598,\n  \t599,5,92,0,0,599,604,5,10,0,0,600,601,5,92,0,0,601,602,5,13,0,0,602,604,\n  \t5,10,0,0,603,596,1,0,0,0,603,597,1,0,0,0,603,598,1,0,0,0,603,600,1,0,\n  \t0,0,604,98,1,0,0,0,605,606,7,3,0,0,606,100,1,0,0,0,607,608,7,4,0,0,608,\n  \t102,1,0,0,0,609,610,5,48,0,0,610,612,7,5,0,0,611,613,7,6,0,0,612,611,\n  \t1,0,0,0,613,614,1,0,0,0,614,612,1,0,0,0,614,615,1,0,0,0,615,104,1,0,0,\n  \t0,616,620,3,111,55,0,617,619,3,101,50,0,618,617,1,0,0,0,619,622,1,0,0,\n  \t0,620,618,1,0,0,0,620,621,1,0,0,0,621,625,1,0,0,0,622,620,1,0,0,0,623,\n  \t625,5,48,0,0,624,616,1,0,0,0,624,623,1,0,0,0,625,106,1,0,0,0,626,630,\n  \t5,48,0,0,627,629,3,113,56,0,628,627,1,0,0,0,629,632,1,0,0,0,630,628,1,\n  \t0,0,0,630,631,1,0,0,0,631,108,1,0,0,0,632,630,1,0,0,0,633,634,5,48,0,\n  \t0,634,635,7,7,0,0,635,636,3,133,66,0,636,110,1,0,0,0,637,638,7,8,0,0,\n  \t638,112,1,0,0,0,639,640,7,9,0,0,640,114,1,0,0,0,641,642,7,10,0,0,642,\n  \t116,1,0,0,0,643,644,3,115,57,0,644,645,3,115,57,0,645,646,3,115,57,0,\n  \t646,647,3,115,57,0,647,118,1,0,0,0,648,649,5,92,0,0,649,650,5,117,0,0,\n  \t650,651,1,0,0,0,651,659,3,117,58,0,652,653,5,92,0,0,653,654,5,85,0,0,\n  \t654,655,1,0,0,0,655,656,3,117,58,0,656,657,3,117,58,0,657,659,1,0,0,0,\n  \t658,648,1,0,0,0,658,652,1,0,0,0,659,120,1,0,0,0,660,662,3,125,62,0,661,\n  \t663,3,127,63,0,662,661,1,0,0,0,662,663,1,0,0,0,663,668,1,0,0,0,664,665,\n  \t3,129,64,0,665,666,3,127,63,0,666,668,1,0,0,0,667,660,1,0,0,0,667,664,\n  \t1,0,0,0,668,122,1,0,0,0,669,670,5,48,0,0,670,673,7,7,0,0,671,674,3,131,\n  \t65,0,672,674,3,133,66,0,673,671,1,0,0,0,673,672,1,0,0,0,674,675,1,0,0,\n  \t0,675,676,3,135,67,0,676,124,1,0,0,0,677,679,3,129,64,0,678,677,1,0,0,\n  \t0,678,679,1,0,0,0,679,680,1,0,0,0,680,681,5,46,0,0,681,686,3,129,64,0,\n  \t682,683,3,129,64,0,683,684,5,46,0,0,684,686,1,0,0,0,685,678,1,0,0,0,685,\n  \t682,1,0,0,0,686,126,1,0,0,0,687,689,7,11,0,0,688,690,7,12,0,0,689,688,\n  \t1,0,0,0,689,690,1,0,0,0,690,691,1,0,0,0,691,692,3,129,64,0,692,128,1,\n  \t0,0,0,693,695,3,101,50,0,694,693,1,0,0,0,695,696,1,0,0,0,696,694,1,0,\n  \t0,0,696,697,1,0,0,0,697,130,1,0,0,0,698,700,3,133,66,0,699,698,1,0,0,\n  \t0,699,700,1,0,0,0,700,701,1,0,0,0,701,702,5,46,0,0,702,707,3,133,66,0,\n  \t703,704,3,133,66,0,704,705,5,46,0,0,705,707,1,0,0,0,706,699,1,0,0,0,706,\n  \t703,1,0,0,0,707,132,1,0,0,0,708,710,3,115,57,0,709,708,1,0,0,0,710,711,\n  \t1,0,0,0,711,709,1,0,0,0,711,712,1,0,0,0,712,134,1,0,0,0,713,715,7,13,\n  \t0,0,714,716,7,12,0,0,715,714,1,0,0,0,715,716,1,0,0,0,716,717,1,0,0,0,\n  \t717,718,3,129,64,0,718,136,1,0,0,0,719,720,5,92,0,0,720,735,7,14,0,0,\n  \t721,722,5,92,0,0,722,724,3,113,56,0,723,725,3,113,56,0,724,723,1,0,0,\n  \t0,724,725,1,0,0,0,725,727,1,0,0,0,726,728,3,113,56,0,727,726,1,0,0,0,\n  \t727,728,1,0,0,0,728,735,1,0,0,0,729,730,5,92,0,0,730,731,5,120,0,0,731,\n  \t732,1,0,0,0,732,735,3,133,66,0,733,735,3,119,59,0,734,719,1,0,0,0,734,\n  \t721,1,0,0,0,734,729,1,0,0,0,734,733,1,0,0,0,735,138,1,0,0,0,736,738,7,\n  \t15,0,0,737,736,1,0,0,0,738,739,1,0,0,0,739,737,1,0,0,0,739,740,1,0,0,\n  \t0,740,741,1,0,0,0,741,742,6,69,0,0,742,140,1,0,0,0,743,745,5,13,0,0,744,\n  \t746,5,10,0,0,745,744,1,0,0,0,745,746,1,0,0,0,746,749,1,0,0,0,747,749,\n  \t5,10,0,0,748,743,1,0,0,0,748,747,1,0,0,0,749,750,1,0,0,0,750,751,6,70,\n  \t0,0,751,142,1,0,0,0,54,0,177,191,223,229,237,252,254,285,321,357,387,\n  \t425,463,489,518,524,528,533,535,543,546,550,555,558,564,570,575,580,585,\n  \t594,603,614,620,624,630,658,662,667,673,678,685,689,696,699,706,711,715,\n  \t724,727,734,739,745,748,1,6,0,0\n  };\n  staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0]));\n\n  antlr4::atn::ATNDeserializer deserializer;\n  staticData->atn = deserializer.deserialize(staticData->serializedATN);\n\n  const size_t count = staticData->atn->getNumberOfDecisions();\n  staticData->decisionToDFA.reserve(count);\n  for (size_t i = 0; i < count; i++) { \n    staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i);\n  }\n  planlexerLexerStaticData = staticData.release();\n}\n\n}\n\nPlanLexer::PlanLexer(CharStream *input) : Lexer(input) {\n  PlanLexer::initialize();\n  _interpreter = new atn::LexerATNSimulator(this, *planlexerLexerStaticData->atn, planlexerLexerStaticData->decisionToDFA, planlexerLexerStaticData->sharedContextCache);\n}\n\nPlanLexer::~PlanLexer() {\n  delete _interpreter;\n}\n\nstd::string PlanLexer::getGrammarFileName() const {\n  return \"Plan.g4\";\n}\n\nconst std::vector<std::string>& PlanLexer::getRuleNames() const {\n  return planlexerLexerStaticData->ruleNames;\n}\n\nconst std::vector<std::string>& PlanLexer::getChannelNames() const {\n  return planlexerLexerStaticData->channelNames;\n}\n\nconst std::vector<std::string>& PlanLexer::getModeNames() const {\n  return planlexerLexerStaticData->modeNames;\n}\n\nconst dfa::Vocabulary& PlanLexer::getVocabulary() const {\n  return planlexerLexerStaticData->vocabulary;\n}\n\nantlr4::atn::SerializedATNView PlanLexer::getSerializedATN() const {\n  return planlexerLexerStaticData->serializedATN;\n}\n\nconst atn::ATN& PlanLexer::getATN() const {\n  return *planlexerLexerStaticData->atn;\n}\n\n\n\n\nvoid PlanLexer::initialize() {\n#if ANTLR4_USE_THREAD_LOCAL_CACHE\n  planlexerLexerInitialize();\n#else\n  ::antlr4::internal::call_once(planlexerLexerOnceFlag, planlexerLexerInitialize);\n#endif\n}\n"
  },
  {
    "path": "src/parser/antlr/PlanLexer.h",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n#pragma once\n\n\n#include \"antlr4-runtime.h\"\n\n\n\n\nclass  PlanLexer : public antlr4::Lexer {\npublic:\n  enum {\n    T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, T__4 = 5, LT = 6, LE = 7, GT = 8, \n    GE = 9, EQ = 10, NE = 11, LIKE = 12, EXISTS = 13, ADD = 14, SUB = 15, \n    MUL = 16, DIV = 17, MOD = 18, POW = 19, SHL = 20, SHR = 21, BAND = 22, \n    BOR = 23, BXOR = 24, AND = 25, OR = 26, BNOT = 27, NOT = 28, IN = 29, \n    NIN = 30, EmptyTerm = 31, JSONContains = 32, JSONContainsAll = 33, JSONContainsAny = 34, \n    ArrayContains = 35, ArrayContainsAll = 36, ArrayContainsAny = 37, ArrayLength = 38, \n    BooleanConstant = 39, IntegerConstant = 40, FloatingConstant = 41, Identifier = 42, \n    StringLiteral = 43, JSONIdentifier = 44, Whitespace = 45, Newline = 46\n  };\n\n  explicit PlanLexer(antlr4::CharStream *input);\n\n  ~PlanLexer() override;\n\n\n  std::string getGrammarFileName() const override;\n\n  const std::vector<std::string>& getRuleNames() const override;\n\n  const std::vector<std::string>& getChannelNames() const override;\n\n  const std::vector<std::string>& getModeNames() const override;\n\n  const antlr4::dfa::Vocabulary& getVocabulary() const override;\n\n  antlr4::atn::SerializedATNView getSerializedATN() const override;\n\n  const antlr4::atn::ATN& getATN() const override;\n\n  // By default the static state used to implement the lexer is lazily initialized during the first\n  // call to the constructor. You can call this function if you wish to initialize the static state\n  // ahead of time.\n  static void initialize();\n\nprivate:\n\n  // Individual action functions triggered by action() above.\n\n  // Individual semantic predicate functions triggered by sempred() above.\n\n};\n\n"
  },
  {
    "path": "src/parser/antlr/PlanParser.cpp",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n\n#include \"PlanVisitor.h\"\n\n#include \"PlanParser.h\"\n\n\nusing namespace antlrcpp;\n\nusing namespace antlr4;\n\nnamespace {\n\nstruct PlanParserStaticData final {\n  PlanParserStaticData(std::vector<std::string> ruleNames,\n                        std::vector<std::string> literalNames,\n                        std::vector<std::string> symbolicNames)\n      : ruleNames(std::move(ruleNames)), literalNames(std::move(literalNames)),\n        symbolicNames(std::move(symbolicNames)),\n        vocabulary(this->literalNames, this->symbolicNames) {}\n\n  PlanParserStaticData(const PlanParserStaticData&) = delete;\n  PlanParserStaticData(PlanParserStaticData&&) = delete;\n  PlanParserStaticData& operator=(const PlanParserStaticData&) = delete;\n  PlanParserStaticData& operator=(PlanParserStaticData&&) = delete;\n\n  std::vector<antlr4::dfa::DFA> decisionToDFA;\n  antlr4::atn::PredictionContextCache sharedContextCache;\n  const std::vector<std::string> ruleNames;\n  const std::vector<std::string> literalNames;\n  const std::vector<std::string> symbolicNames;\n  const antlr4::dfa::Vocabulary vocabulary;\n  antlr4::atn::SerializedATNView serializedATN;\n  std::unique_ptr<antlr4::atn::ATN> atn;\n};\n\n::antlr4::internal::OnceFlag planParserOnceFlag;\n#if ANTLR4_USE_THREAD_LOCAL_CACHE\nstatic thread_local\n#endif\nPlanParserStaticData *planParserStaticData = nullptr;\n\nvoid planParserInitialize() {\n#if ANTLR4_USE_THREAD_LOCAL_CACHE\n  if (planParserStaticData != nullptr) {\n    return;\n  }\n#else\n  assert(planParserStaticData == nullptr);\n#endif\n  auto staticData = std::make_unique<PlanParserStaticData>(\n    std::vector<std::string>{\n      \"expr\"\n    },\n    std::vector<std::string>{\n      \"\", \"'('\", \"')'\", \"'['\", \"','\", \"']'\", \"'<'\", \"'<='\", \"'>'\", \"'>='\", \n      \"'=='\", \"'!='\", \"\", \"\", \"'+'\", \"'-'\", \"'*'\", \"'/'\", \"'%'\", \"'**'\", \n      \"'<<'\", \"'>>'\", \"'&'\", \"'|'\", \"'^'\", \"\", \"\", \"'~'\", \"\", \"'in'\", \"'not in'\"\n    },\n    std::vector<std::string>{\n      \"\", \"\", \"\", \"\", \"\", \"\", \"LT\", \"LE\", \"GT\", \"GE\", \"EQ\", \"NE\", \"LIKE\", \n      \"EXISTS\", \"ADD\", \"SUB\", \"MUL\", \"DIV\", \"MOD\", \"POW\", \"SHL\", \"SHR\", \n      \"BAND\", \"BOR\", \"BXOR\", \"AND\", \"OR\", \"BNOT\", \"NOT\", \"IN\", \"NIN\", \"EmptyTerm\", \n      \"JSONContains\", \"JSONContainsAll\", \"JSONContainsAny\", \"ArrayContains\", \n      \"ArrayContainsAll\", \"ArrayContainsAny\", \"ArrayLength\", \"BooleanConstant\", \n      \"IntegerConstant\", \"FloatingConstant\", \"Identifier\", \"StringLiteral\", \n      \"JSONIdentifier\", \"Whitespace\", \"Newline\"\n    }\n  );\n  static const int32_t serializedATNSegment[] = {\n  \t4,1,46,129,2,0,7,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,\n  \t0,1,0,1,0,5,0,18,8,0,10,0,12,0,21,9,0,1,0,3,0,24,8,0,1,0,1,0,1,0,1,0,\n  \t1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,\n  \t0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,57,8,0,1,0,1,0,1,0,1,0,1,0,\n  \t1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,\n  \t0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,\n  \t1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,5,0,111,8,0,10,0,12,0,\n  \t114,9,0,1,0,3,0,117,8,0,1,0,1,0,1,0,1,0,1,0,5,0,124,8,0,10,0,12,0,127,\n  \t9,0,1,0,0,1,0,1,0,0,13,2,0,14,15,27,28,2,0,32,32,35,35,2,0,33,33,36,36,\n  \t2,0,34,34,37,37,2,0,42,42,44,44,1,0,16,18,1,0,14,15,1,0,20,21,1,0,6,7,\n  \t1,0,8,9,1,0,6,9,1,0,10,11,1,0,29,30,160,0,56,1,0,0,0,2,3,6,0,-1,0,3,57,\n  \t5,40,0,0,4,57,5,41,0,0,5,57,5,39,0,0,6,57,5,43,0,0,7,57,5,42,0,0,8,57,\n  \t5,44,0,0,9,10,5,1,0,0,10,11,3,0,0,0,11,12,5,2,0,0,12,57,1,0,0,0,13,14,\n  \t5,3,0,0,14,19,3,0,0,0,15,16,5,4,0,0,16,18,3,0,0,0,17,15,1,0,0,0,18,21,\n  \t1,0,0,0,19,17,1,0,0,0,19,20,1,0,0,0,20,23,1,0,0,0,21,19,1,0,0,0,22,24,\n  \t5,4,0,0,23,22,1,0,0,0,23,24,1,0,0,0,24,25,1,0,0,0,25,26,5,5,0,0,26,57,\n  \t1,0,0,0,27,28,7,0,0,0,28,57,3,0,0,20,29,30,7,1,0,0,30,31,5,1,0,0,31,32,\n  \t3,0,0,0,32,33,5,4,0,0,33,34,3,0,0,0,34,35,5,2,0,0,35,57,1,0,0,0,36,37,\n  \t7,2,0,0,37,38,5,1,0,0,38,39,3,0,0,0,39,40,5,4,0,0,40,41,3,0,0,0,41,42,\n  \t5,2,0,0,42,57,1,0,0,0,43,44,7,3,0,0,44,45,5,1,0,0,45,46,3,0,0,0,46,47,\n  \t5,4,0,0,47,48,3,0,0,0,48,49,5,2,0,0,49,57,1,0,0,0,50,51,5,38,0,0,51,52,\n  \t5,1,0,0,52,53,7,4,0,0,53,57,5,2,0,0,54,55,5,13,0,0,55,57,3,0,0,1,56,2,\n  \t1,0,0,0,56,4,1,0,0,0,56,5,1,0,0,0,56,6,1,0,0,0,56,7,1,0,0,0,56,8,1,0,\n  \t0,0,56,9,1,0,0,0,56,13,1,0,0,0,56,27,1,0,0,0,56,29,1,0,0,0,56,36,1,0,\n  \t0,0,56,43,1,0,0,0,56,50,1,0,0,0,56,54,1,0,0,0,57,125,1,0,0,0,58,59,10,\n  \t21,0,0,59,60,5,19,0,0,60,124,3,0,0,22,61,62,10,19,0,0,62,63,7,5,0,0,63,\n  \t124,3,0,0,20,64,65,10,18,0,0,65,66,7,6,0,0,66,124,3,0,0,19,67,68,10,17,\n  \t0,0,68,69,7,7,0,0,69,124,3,0,0,18,70,71,10,10,0,0,71,72,7,8,0,0,72,73,\n  \t7,4,0,0,73,74,7,8,0,0,74,124,3,0,0,11,75,76,10,9,0,0,76,77,7,9,0,0,77,\n  \t78,7,4,0,0,78,79,7,9,0,0,79,124,3,0,0,10,80,81,10,8,0,0,81,82,7,10,0,\n  \t0,82,124,3,0,0,9,83,84,10,7,0,0,84,85,7,11,0,0,85,124,3,0,0,8,86,87,10,\n  \t6,0,0,87,88,5,22,0,0,88,124,3,0,0,7,89,90,10,5,0,0,90,91,5,24,0,0,91,\n  \t124,3,0,0,6,92,93,10,4,0,0,93,94,5,23,0,0,94,124,3,0,0,5,95,96,10,3,0,\n  \t0,96,97,5,25,0,0,97,124,3,0,0,4,98,99,10,2,0,0,99,100,5,26,0,0,100,124,\n  \t3,0,0,3,101,102,10,22,0,0,102,103,5,12,0,0,103,124,5,43,0,0,104,105,10,\n  \t16,0,0,105,106,7,12,0,0,106,107,5,3,0,0,107,112,3,0,0,0,108,109,5,4,0,\n  \t0,109,111,3,0,0,0,110,108,1,0,0,0,111,114,1,0,0,0,112,110,1,0,0,0,112,\n  \t113,1,0,0,0,113,116,1,0,0,0,114,112,1,0,0,0,115,117,5,4,0,0,116,115,1,\n  \t0,0,0,116,117,1,0,0,0,117,118,1,0,0,0,118,119,5,5,0,0,119,124,1,0,0,0,\n  \t120,121,10,15,0,0,121,122,7,12,0,0,122,124,5,31,0,0,123,58,1,0,0,0,123,\n  \t61,1,0,0,0,123,64,1,0,0,0,123,67,1,0,0,0,123,70,1,0,0,0,123,75,1,0,0,\n  \t0,123,80,1,0,0,0,123,83,1,0,0,0,123,86,1,0,0,0,123,89,1,0,0,0,123,92,\n  \t1,0,0,0,123,95,1,0,0,0,123,98,1,0,0,0,123,101,1,0,0,0,123,104,1,0,0,0,\n  \t123,120,1,0,0,0,124,127,1,0,0,0,125,123,1,0,0,0,125,126,1,0,0,0,126,1,\n  \t1,0,0,0,127,125,1,0,0,0,7,19,23,56,112,116,123,125\n  };\n  staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0]));\n\n  antlr4::atn::ATNDeserializer deserializer;\n  staticData->atn = deserializer.deserialize(staticData->serializedATN);\n\n  const size_t count = staticData->atn->getNumberOfDecisions();\n  staticData->decisionToDFA.reserve(count);\n  for (size_t i = 0; i < count; i++) { \n    staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i), i);\n  }\n  planParserStaticData = staticData.release();\n}\n\n}\n\nPlanParser::PlanParser(TokenStream *input) : PlanParser(input, antlr4::atn::ParserATNSimulatorOptions()) {}\n\nPlanParser::PlanParser(TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options) : Parser(input) {\n  PlanParser::initialize();\n  _interpreter = new atn::ParserATNSimulator(this, *planParserStaticData->atn, planParserStaticData->decisionToDFA, planParserStaticData->sharedContextCache, options);\n}\n\nPlanParser::~PlanParser() {\n  delete _interpreter;\n}\n\nconst atn::ATN& PlanParser::getATN() const {\n  return *planParserStaticData->atn;\n}\n\nstd::string PlanParser::getGrammarFileName() const {\n  return \"Plan.g4\";\n}\n\nconst std::vector<std::string>& PlanParser::getRuleNames() const {\n  return planParserStaticData->ruleNames;\n}\n\nconst dfa::Vocabulary& PlanParser::getVocabulary() const {\n  return planParserStaticData->vocabulary;\n}\n\nantlr4::atn::SerializedATNView PlanParser::getSerializedATN() const {\n  return planParserStaticData->serializedATN;\n}\n\n\n//----------------- ExprContext ------------------------------------------------------------------\n\nPlanParser::ExprContext::ExprContext(ParserRuleContext *parent, size_t invokingState)\n  : ParserRuleContext(parent, invokingState) {\n}\n\n\nsize_t PlanParser::ExprContext::getRuleIndex() const {\n  return PlanParser::RuleExpr;\n}\n\nvoid PlanParser::ExprContext::copyFrom(ExprContext *ctx) {\n  ParserRuleContext::copyFrom(ctx);\n}\n\n//----------------- JSONIdentifierContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::JSONIdentifierContext::JSONIdentifier() {\n  return getToken(PlanParser::JSONIdentifier, 0);\n}\n\nPlanParser::JSONIdentifierContext::JSONIdentifierContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::JSONIdentifierContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitJSONIdentifier(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- ParensContext ------------------------------------------------------------------\n\nPlanParser::ExprContext* PlanParser::ParensContext::expr() {\n  return getRuleContext<PlanParser::ExprContext>(0);\n}\n\nPlanParser::ParensContext::ParensContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::ParensContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitParens(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- StringContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::StringContext::StringLiteral() {\n  return getToken(PlanParser::StringLiteral, 0);\n}\n\nPlanParser::StringContext::StringContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::StringContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitString(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- FloatingContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::FloatingContext::FloatingConstant() {\n  return getToken(PlanParser::FloatingConstant, 0);\n}\n\nPlanParser::FloatingContext::FloatingContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::FloatingContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitFloating(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- JSONContainsAllContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::JSONContainsAllContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::JSONContainsAllContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::JSONContainsAllContext::JSONContainsAll() {\n  return getToken(PlanParser::JSONContainsAll, 0);\n}\n\ntree::TerminalNode* PlanParser::JSONContainsAllContext::ArrayContainsAll() {\n  return getToken(PlanParser::ArrayContainsAll, 0);\n}\n\nPlanParser::JSONContainsAllContext::JSONContainsAllContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::JSONContainsAllContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitJSONContainsAll(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- LogicalOrContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::LogicalOrContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::LogicalOrContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::LogicalOrContext::OR() {\n  return getToken(PlanParser::OR, 0);\n}\n\nPlanParser::LogicalOrContext::LogicalOrContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::LogicalOrContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitLogicalOr(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- MulDivModContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::MulDivModContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::MulDivModContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::MulDivModContext::MUL() {\n  return getToken(PlanParser::MUL, 0);\n}\n\ntree::TerminalNode* PlanParser::MulDivModContext::DIV() {\n  return getToken(PlanParser::DIV, 0);\n}\n\ntree::TerminalNode* PlanParser::MulDivModContext::MOD() {\n  return getToken(PlanParser::MOD, 0);\n}\n\nPlanParser::MulDivModContext::MulDivModContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::MulDivModContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitMulDivMod(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- IdentifierContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::IdentifierContext::Identifier() {\n  return getToken(PlanParser::Identifier, 0);\n}\n\nPlanParser::IdentifierContext::IdentifierContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::IdentifierContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitIdentifier(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- LikeContext ------------------------------------------------------------------\n\nPlanParser::ExprContext* PlanParser::LikeContext::expr() {\n  return getRuleContext<PlanParser::ExprContext>(0);\n}\n\ntree::TerminalNode* PlanParser::LikeContext::LIKE() {\n  return getToken(PlanParser::LIKE, 0);\n}\n\ntree::TerminalNode* PlanParser::LikeContext::StringLiteral() {\n  return getToken(PlanParser::StringLiteral, 0);\n}\n\nPlanParser::LikeContext::LikeContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::LikeContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitLike(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- LogicalAndContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::LogicalAndContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::LogicalAndContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::LogicalAndContext::AND() {\n  return getToken(PlanParser::AND, 0);\n}\n\nPlanParser::LogicalAndContext::LogicalAndContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::LogicalAndContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitLogicalAnd(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- EqualityContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::EqualityContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::EqualityContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::EqualityContext::EQ() {\n  return getToken(PlanParser::EQ, 0);\n}\n\ntree::TerminalNode* PlanParser::EqualityContext::NE() {\n  return getToken(PlanParser::NE, 0);\n}\n\nPlanParser::EqualityContext::EqualityContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::EqualityContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitEquality(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- BooleanContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::BooleanContext::BooleanConstant() {\n  return getToken(PlanParser::BooleanConstant, 0);\n}\n\nPlanParser::BooleanContext::BooleanContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::BooleanContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitBoolean(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- ShiftContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::ShiftContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::ShiftContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::ShiftContext::SHL() {\n  return getToken(PlanParser::SHL, 0);\n}\n\ntree::TerminalNode* PlanParser::ShiftContext::SHR() {\n  return getToken(PlanParser::SHR, 0);\n}\n\nPlanParser::ShiftContext::ShiftContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::ShiftContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitShift(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- ReverseRangeContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::ReverseRangeContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::ReverseRangeContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::ReverseRangeContext::Identifier() {\n  return getToken(PlanParser::Identifier, 0);\n}\n\ntree::TerminalNode* PlanParser::ReverseRangeContext::JSONIdentifier() {\n  return getToken(PlanParser::JSONIdentifier, 0);\n}\n\nstd::vector<tree::TerminalNode *> PlanParser::ReverseRangeContext::GT() {\n  return getTokens(PlanParser::GT);\n}\n\ntree::TerminalNode* PlanParser::ReverseRangeContext::GT(size_t i) {\n  return getToken(PlanParser::GT, i);\n}\n\nstd::vector<tree::TerminalNode *> PlanParser::ReverseRangeContext::GE() {\n  return getTokens(PlanParser::GE);\n}\n\ntree::TerminalNode* PlanParser::ReverseRangeContext::GE(size_t i) {\n  return getToken(PlanParser::GE, i);\n}\n\nPlanParser::ReverseRangeContext::ReverseRangeContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::ReverseRangeContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitReverseRange(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- BitOrContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::BitOrContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::BitOrContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::BitOrContext::BOR() {\n  return getToken(PlanParser::BOR, 0);\n}\n\nPlanParser::BitOrContext::BitOrContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::BitOrContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitBitOr(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- AddSubContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::AddSubContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::AddSubContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::AddSubContext::ADD() {\n  return getToken(PlanParser::ADD, 0);\n}\n\ntree::TerminalNode* PlanParser::AddSubContext::SUB() {\n  return getToken(PlanParser::SUB, 0);\n}\n\nPlanParser::AddSubContext::AddSubContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::AddSubContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitAddSub(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- RelationalContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::RelationalContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::RelationalContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::RelationalContext::LT() {\n  return getToken(PlanParser::LT, 0);\n}\n\ntree::TerminalNode* PlanParser::RelationalContext::LE() {\n  return getToken(PlanParser::LE, 0);\n}\n\ntree::TerminalNode* PlanParser::RelationalContext::GT() {\n  return getToken(PlanParser::GT, 0);\n}\n\ntree::TerminalNode* PlanParser::RelationalContext::GE() {\n  return getToken(PlanParser::GE, 0);\n}\n\nPlanParser::RelationalContext::RelationalContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::RelationalContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitRelational(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- ArrayLengthContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::ArrayLengthContext::ArrayLength() {\n  return getToken(PlanParser::ArrayLength, 0);\n}\n\ntree::TerminalNode* PlanParser::ArrayLengthContext::Identifier() {\n  return getToken(PlanParser::Identifier, 0);\n}\n\ntree::TerminalNode* PlanParser::ArrayLengthContext::JSONIdentifier() {\n  return getToken(PlanParser::JSONIdentifier, 0);\n}\n\nPlanParser::ArrayLengthContext::ArrayLengthContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::ArrayLengthContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitArrayLength(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- TermContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::TermContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::TermContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::TermContext::IN() {\n  return getToken(PlanParser::IN, 0);\n}\n\ntree::TerminalNode* PlanParser::TermContext::NIN() {\n  return getToken(PlanParser::NIN, 0);\n}\n\nPlanParser::TermContext::TermContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::TermContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitTerm(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- JSONContainsContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::JSONContainsContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::JSONContainsContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::JSONContainsContext::JSONContains() {\n  return getToken(PlanParser::JSONContains, 0);\n}\n\ntree::TerminalNode* PlanParser::JSONContainsContext::ArrayContains() {\n  return getToken(PlanParser::ArrayContains, 0);\n}\n\nPlanParser::JSONContainsContext::JSONContainsContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::JSONContainsContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitJSONContains(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- RangeContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::RangeContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::RangeContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::RangeContext::Identifier() {\n  return getToken(PlanParser::Identifier, 0);\n}\n\ntree::TerminalNode* PlanParser::RangeContext::JSONIdentifier() {\n  return getToken(PlanParser::JSONIdentifier, 0);\n}\n\nstd::vector<tree::TerminalNode *> PlanParser::RangeContext::LT() {\n  return getTokens(PlanParser::LT);\n}\n\ntree::TerminalNode* PlanParser::RangeContext::LT(size_t i) {\n  return getToken(PlanParser::LT, i);\n}\n\nstd::vector<tree::TerminalNode *> PlanParser::RangeContext::LE() {\n  return getTokens(PlanParser::LE);\n}\n\ntree::TerminalNode* PlanParser::RangeContext::LE(size_t i) {\n  return getToken(PlanParser::LE, i);\n}\n\nPlanParser::RangeContext::RangeContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::RangeContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitRange(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- UnaryContext ------------------------------------------------------------------\n\nPlanParser::ExprContext* PlanParser::UnaryContext::expr() {\n  return getRuleContext<PlanParser::ExprContext>(0);\n}\n\ntree::TerminalNode* PlanParser::UnaryContext::ADD() {\n  return getToken(PlanParser::ADD, 0);\n}\n\ntree::TerminalNode* PlanParser::UnaryContext::SUB() {\n  return getToken(PlanParser::SUB, 0);\n}\n\ntree::TerminalNode* PlanParser::UnaryContext::BNOT() {\n  return getToken(PlanParser::BNOT, 0);\n}\n\ntree::TerminalNode* PlanParser::UnaryContext::NOT() {\n  return getToken(PlanParser::NOT, 0);\n}\n\nPlanParser::UnaryContext::UnaryContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::UnaryContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitUnary(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- IntegerContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::IntegerContext::IntegerConstant() {\n  return getToken(PlanParser::IntegerConstant, 0);\n}\n\nPlanParser::IntegerContext::IntegerContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::IntegerContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitInteger(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- ArrayContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::ArrayContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::ArrayContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\nPlanParser::ArrayContext::ArrayContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::ArrayContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitArray(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- JSONContainsAnyContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::JSONContainsAnyContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::JSONContainsAnyContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::JSONContainsAnyContext::JSONContainsAny() {\n  return getToken(PlanParser::JSONContainsAny, 0);\n}\n\ntree::TerminalNode* PlanParser::JSONContainsAnyContext::ArrayContainsAny() {\n  return getToken(PlanParser::ArrayContainsAny, 0);\n}\n\nPlanParser::JSONContainsAnyContext::JSONContainsAnyContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::JSONContainsAnyContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitJSONContainsAny(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- BitXorContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::BitXorContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::BitXorContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::BitXorContext::BXOR() {\n  return getToken(PlanParser::BXOR, 0);\n}\n\nPlanParser::BitXorContext::BitXorContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::BitXorContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitBitXor(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- ExistsContext ------------------------------------------------------------------\n\ntree::TerminalNode* PlanParser::ExistsContext::EXISTS() {\n  return getToken(PlanParser::EXISTS, 0);\n}\n\nPlanParser::ExprContext* PlanParser::ExistsContext::expr() {\n  return getRuleContext<PlanParser::ExprContext>(0);\n}\n\nPlanParser::ExistsContext::ExistsContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::ExistsContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitExists(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- BitAndContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::BitAndContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::BitAndContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::BitAndContext::BAND() {\n  return getToken(PlanParser::BAND, 0);\n}\n\nPlanParser::BitAndContext::BitAndContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::BitAndContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitBitAnd(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- EmptyTermContext ------------------------------------------------------------------\n\nPlanParser::ExprContext* PlanParser::EmptyTermContext::expr() {\n  return getRuleContext<PlanParser::ExprContext>(0);\n}\n\ntree::TerminalNode* PlanParser::EmptyTermContext::EmptyTerm() {\n  return getToken(PlanParser::EmptyTerm, 0);\n}\n\ntree::TerminalNode* PlanParser::EmptyTermContext::IN() {\n  return getToken(PlanParser::IN, 0);\n}\n\ntree::TerminalNode* PlanParser::EmptyTermContext::NIN() {\n  return getToken(PlanParser::NIN, 0);\n}\n\nPlanParser::EmptyTermContext::EmptyTermContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::EmptyTermContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitEmptyTerm(this);\n  else\n    return visitor->visitChildren(this);\n}\n//----------------- PowerContext ------------------------------------------------------------------\n\nstd::vector<PlanParser::ExprContext *> PlanParser::PowerContext::expr() {\n  return getRuleContexts<PlanParser::ExprContext>();\n}\n\nPlanParser::ExprContext* PlanParser::PowerContext::expr(size_t i) {\n  return getRuleContext<PlanParser::ExprContext>(i);\n}\n\ntree::TerminalNode* PlanParser::PowerContext::POW() {\n  return getToken(PlanParser::POW, 0);\n}\n\nPlanParser::PowerContext::PowerContext(ExprContext *ctx) { copyFrom(ctx); }\n\n\nstd::any PlanParser::PowerContext::accept(tree::ParseTreeVisitor *visitor) {\n  if (auto parserVisitor = dynamic_cast<PlanVisitor*>(visitor))\n    return parserVisitor->visitPower(this);\n  else\n    return visitor->visitChildren(this);\n}\n\nPlanParser::ExprContext* PlanParser::expr() {\n   return expr(0);\n}\n\nPlanParser::ExprContext* PlanParser::expr(int precedence) {\n  ParserRuleContext *parentContext = _ctx;\n  size_t parentState = getState();\n  PlanParser::ExprContext *_localctx = _tracker.createInstance<ExprContext>(_ctx, parentState);\n  PlanParser::ExprContext *previousContext = _localctx;\n  (void)previousContext; // Silence compiler, in case the context is not used by generated code.\n  size_t startState = 0;\n  enterRecursionRule(_localctx, 0, PlanParser::RuleExpr, precedence);\n\n    size_t _la = 0;\n\n#if __cplusplus > 201703L\n  auto onExit = finally([=, this] {\n#else\n  auto onExit = finally([=] {\n#endif\n    unrollRecursionContexts(parentContext);\n  });\n  try {\n    size_t alt;\n    enterOuterAlt(_localctx, 1);\n    setState(56);\n    _errHandler->sync(this);\n    switch (_input->LA(1)) {\n      case PlanParser::IntegerConstant: {\n        _localctx = _tracker.createInstance<IntegerContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n\n        setState(3);\n        match(PlanParser::IntegerConstant);\n        break;\n      }\n\n      case PlanParser::FloatingConstant: {\n        _localctx = _tracker.createInstance<FloatingContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(4);\n        match(PlanParser::FloatingConstant);\n        break;\n      }\n\n      case PlanParser::BooleanConstant: {\n        _localctx = _tracker.createInstance<BooleanContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(5);\n        match(PlanParser::BooleanConstant);\n        break;\n      }\n\n      case PlanParser::StringLiteral: {\n        _localctx = _tracker.createInstance<StringContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(6);\n        match(PlanParser::StringLiteral);\n        break;\n      }\n\n      case PlanParser::Identifier: {\n        _localctx = _tracker.createInstance<IdentifierContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(7);\n        match(PlanParser::Identifier);\n        break;\n      }\n\n      case PlanParser::JSONIdentifier: {\n        _localctx = _tracker.createInstance<JSONIdentifierContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(8);\n        match(PlanParser::JSONIdentifier);\n        break;\n      }\n\n      case PlanParser::T__0: {\n        _localctx = _tracker.createInstance<ParensContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(9);\n        match(PlanParser::T__0);\n        setState(10);\n        expr(0);\n        setState(11);\n        match(PlanParser::T__1);\n        break;\n      }\n\n      case PlanParser::T__2: {\n        _localctx = _tracker.createInstance<ArrayContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(13);\n        match(PlanParser::T__2);\n        setState(14);\n        expr(0);\n        setState(19);\n        _errHandler->sync(this);\n        alt = getInterpreter<atn::ParserATNSimulator>()->adaptivePredict(_input, 0, _ctx);\n        while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) {\n          if (alt == 1) {\n            setState(15);\n            match(PlanParser::T__3);\n            setState(16);\n            expr(0); \n          }\n          setState(21);\n          _errHandler->sync(this);\n          alt = getInterpreter<atn::ParserATNSimulator>()->adaptivePredict(_input, 0, _ctx);\n        }\n        setState(23);\n        _errHandler->sync(this);\n\n        _la = _input->LA(1);\n        if (_la == PlanParser::T__3) {\n          setState(22);\n          match(PlanParser::T__3);\n        }\n        setState(25);\n        match(PlanParser::T__4);\n        break;\n      }\n\n      case PlanParser::ADD:\n      case PlanParser::SUB:\n      case PlanParser::BNOT:\n      case PlanParser::NOT: {\n        _localctx = _tracker.createInstance<UnaryContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(27);\n        antlrcpp::downCast<UnaryContext *>(_localctx)->op = _input->LT(1);\n        _la = _input->LA(1);\n        if (!((((_la & ~ 0x3fULL) == 0) &&\n          ((1ULL << _la) & 402702336) != 0))) {\n          antlrcpp::downCast<UnaryContext *>(_localctx)->op = _errHandler->recoverInline(this);\n        }\n        else {\n          _errHandler->reportMatch(this);\n          consume();\n        }\n        setState(28);\n        expr(20);\n        break;\n      }\n\n      case PlanParser::JSONContains:\n      case PlanParser::ArrayContains: {\n        _localctx = _tracker.createInstance<JSONContainsContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(29);\n        _la = _input->LA(1);\n        if (!(_la == PlanParser::JSONContains\n\n        || _la == PlanParser::ArrayContains)) {\n        _errHandler->recoverInline(this);\n        }\n        else {\n          _errHandler->reportMatch(this);\n          consume();\n        }\n        setState(30);\n        match(PlanParser::T__0);\n        setState(31);\n        expr(0);\n        setState(32);\n        match(PlanParser::T__3);\n        setState(33);\n        expr(0);\n        setState(34);\n        match(PlanParser::T__1);\n        break;\n      }\n\n      case PlanParser::JSONContainsAll:\n      case PlanParser::ArrayContainsAll: {\n        _localctx = _tracker.createInstance<JSONContainsAllContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(36);\n        _la = _input->LA(1);\n        if (!(_la == PlanParser::JSONContainsAll\n\n        || _la == PlanParser::ArrayContainsAll)) {\n        _errHandler->recoverInline(this);\n        }\n        else {\n          _errHandler->reportMatch(this);\n          consume();\n        }\n        setState(37);\n        match(PlanParser::T__0);\n        setState(38);\n        expr(0);\n        setState(39);\n        match(PlanParser::T__3);\n        setState(40);\n        expr(0);\n        setState(41);\n        match(PlanParser::T__1);\n        break;\n      }\n\n      case PlanParser::JSONContainsAny:\n      case PlanParser::ArrayContainsAny: {\n        _localctx = _tracker.createInstance<JSONContainsAnyContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(43);\n        _la = _input->LA(1);\n        if (!(_la == PlanParser::JSONContainsAny\n\n        || _la == PlanParser::ArrayContainsAny)) {\n        _errHandler->recoverInline(this);\n        }\n        else {\n          _errHandler->reportMatch(this);\n          consume();\n        }\n        setState(44);\n        match(PlanParser::T__0);\n        setState(45);\n        expr(0);\n        setState(46);\n        match(PlanParser::T__3);\n        setState(47);\n        expr(0);\n        setState(48);\n        match(PlanParser::T__1);\n        break;\n      }\n\n      case PlanParser::ArrayLength: {\n        _localctx = _tracker.createInstance<ArrayLengthContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(50);\n        match(PlanParser::ArrayLength);\n        setState(51);\n        match(PlanParser::T__0);\n        setState(52);\n        _la = _input->LA(1);\n        if (!(_la == PlanParser::Identifier\n\n        || _la == PlanParser::JSONIdentifier)) {\n        _errHandler->recoverInline(this);\n        }\n        else {\n          _errHandler->reportMatch(this);\n          consume();\n        }\n        setState(53);\n        match(PlanParser::T__1);\n        break;\n      }\n\n      case PlanParser::EXISTS: {\n        _localctx = _tracker.createInstance<ExistsContext>(_localctx);\n        _ctx = _localctx;\n        previousContext = _localctx;\n        setState(54);\n        match(PlanParser::EXISTS);\n        setState(55);\n        expr(1);\n        break;\n      }\n\n    default:\n      throw NoViableAltException(this);\n    }\n    _ctx->stop = _input->LT(-1);\n    setState(125);\n    _errHandler->sync(this);\n    alt = getInterpreter<atn::ParserATNSimulator>()->adaptivePredict(_input, 6, _ctx);\n    while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) {\n      if (alt == 1) {\n        if (!_parseListeners.empty())\n          triggerExitRuleEvent();\n        previousContext = _localctx;\n        setState(123);\n        _errHandler->sync(this);\n        switch (getInterpreter<atn::ParserATNSimulator>()->adaptivePredict(_input, 5, _ctx)) {\n        case 1: {\n          auto newContext = _tracker.createInstance<PowerContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(58);\n\n          if (!(precpred(_ctx, 21))) throw FailedPredicateException(this, \"precpred(_ctx, 21)\");\n          setState(59);\n          match(PlanParser::POW);\n          setState(60);\n          expr(22);\n          break;\n        }\n\n        case 2: {\n          auto newContext = _tracker.createInstance<MulDivModContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(61);\n\n          if (!(precpred(_ctx, 19))) throw FailedPredicateException(this, \"precpred(_ctx, 19)\");\n          setState(62);\n          antlrcpp::downCast<MulDivModContext *>(_localctx)->op = _input->LT(1);\n          _la = _input->LA(1);\n          if (!((((_la & ~ 0x3fULL) == 0) &&\n            ((1ULL << _la) & 458752) != 0))) {\n            antlrcpp::downCast<MulDivModContext *>(_localctx)->op = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(63);\n          expr(20);\n          break;\n        }\n\n        case 3: {\n          auto newContext = _tracker.createInstance<AddSubContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(64);\n\n          if (!(precpred(_ctx, 18))) throw FailedPredicateException(this, \"precpred(_ctx, 18)\");\n          setState(65);\n          antlrcpp::downCast<AddSubContext *>(_localctx)->op = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::ADD\n\n          || _la == PlanParser::SUB)) {\n            antlrcpp::downCast<AddSubContext *>(_localctx)->op = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(66);\n          expr(19);\n          break;\n        }\n\n        case 4: {\n          auto newContext = _tracker.createInstance<ShiftContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(67);\n\n          if (!(precpred(_ctx, 17))) throw FailedPredicateException(this, \"precpred(_ctx, 17)\");\n          setState(68);\n          antlrcpp::downCast<ShiftContext *>(_localctx)->op = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::SHL\n\n          || _la == PlanParser::SHR)) {\n            antlrcpp::downCast<ShiftContext *>(_localctx)->op = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(69);\n          expr(18);\n          break;\n        }\n\n        case 5: {\n          auto newContext = _tracker.createInstance<RangeContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(70);\n\n          if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, \"precpred(_ctx, 10)\");\n          setState(71);\n          antlrcpp::downCast<RangeContext *>(_localctx)->op1 = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::LT\n\n          || _la == PlanParser::LE)) {\n            antlrcpp::downCast<RangeContext *>(_localctx)->op1 = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(72);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::Identifier\n\n          || _la == PlanParser::JSONIdentifier)) {\n          _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(73);\n          antlrcpp::downCast<RangeContext *>(_localctx)->op2 = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::LT\n\n          || _la == PlanParser::LE)) {\n            antlrcpp::downCast<RangeContext *>(_localctx)->op2 = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(74);\n          expr(11);\n          break;\n        }\n\n        case 6: {\n          auto newContext = _tracker.createInstance<ReverseRangeContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(75);\n\n          if (!(precpred(_ctx, 9))) throw FailedPredicateException(this, \"precpred(_ctx, 9)\");\n          setState(76);\n          antlrcpp::downCast<ReverseRangeContext *>(_localctx)->op1 = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::GT\n\n          || _la == PlanParser::GE)) {\n            antlrcpp::downCast<ReverseRangeContext *>(_localctx)->op1 = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(77);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::Identifier\n\n          || _la == PlanParser::JSONIdentifier)) {\n          _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(78);\n          antlrcpp::downCast<ReverseRangeContext *>(_localctx)->op2 = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::GT\n\n          || _la == PlanParser::GE)) {\n            antlrcpp::downCast<ReverseRangeContext *>(_localctx)->op2 = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(79);\n          expr(10);\n          break;\n        }\n\n        case 7: {\n          auto newContext = _tracker.createInstance<RelationalContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(80);\n\n          if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, \"precpred(_ctx, 8)\");\n          setState(81);\n          antlrcpp::downCast<RelationalContext *>(_localctx)->op = _input->LT(1);\n          _la = _input->LA(1);\n          if (!((((_la & ~ 0x3fULL) == 0) &&\n            ((1ULL << _la) & 960) != 0))) {\n            antlrcpp::downCast<RelationalContext *>(_localctx)->op = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(82);\n          expr(9);\n          break;\n        }\n\n        case 8: {\n          auto newContext = _tracker.createInstance<EqualityContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(83);\n\n          if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, \"precpred(_ctx, 7)\");\n          setState(84);\n          antlrcpp::downCast<EqualityContext *>(_localctx)->op = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::EQ\n\n          || _la == PlanParser::NE)) {\n            antlrcpp::downCast<EqualityContext *>(_localctx)->op = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(85);\n          expr(8);\n          break;\n        }\n\n        case 9: {\n          auto newContext = _tracker.createInstance<BitAndContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(86);\n\n          if (!(precpred(_ctx, 6))) throw FailedPredicateException(this, \"precpred(_ctx, 6)\");\n          setState(87);\n          match(PlanParser::BAND);\n          setState(88);\n          expr(7);\n          break;\n        }\n\n        case 10: {\n          auto newContext = _tracker.createInstance<BitXorContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(89);\n\n          if (!(precpred(_ctx, 5))) throw FailedPredicateException(this, \"precpred(_ctx, 5)\");\n          setState(90);\n          match(PlanParser::BXOR);\n          setState(91);\n          expr(6);\n          break;\n        }\n\n        case 11: {\n          auto newContext = _tracker.createInstance<BitOrContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(92);\n\n          if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, \"precpred(_ctx, 4)\");\n          setState(93);\n          match(PlanParser::BOR);\n          setState(94);\n          expr(5);\n          break;\n        }\n\n        case 12: {\n          auto newContext = _tracker.createInstance<LogicalAndContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(95);\n\n          if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, \"precpred(_ctx, 3)\");\n          setState(96);\n          match(PlanParser::AND);\n          setState(97);\n          expr(4);\n          break;\n        }\n\n        case 13: {\n          auto newContext = _tracker.createInstance<LogicalOrContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(98);\n\n          if (!(precpred(_ctx, 2))) throw FailedPredicateException(this, \"precpred(_ctx, 2)\");\n          setState(99);\n          match(PlanParser::OR);\n          setState(100);\n          expr(3);\n          break;\n        }\n\n        case 14: {\n          auto newContext = _tracker.createInstance<LikeContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(101);\n\n          if (!(precpred(_ctx, 22))) throw FailedPredicateException(this, \"precpred(_ctx, 22)\");\n          setState(102);\n          match(PlanParser::LIKE);\n          setState(103);\n          match(PlanParser::StringLiteral);\n          break;\n        }\n\n        case 15: {\n          auto newContext = _tracker.createInstance<TermContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(104);\n\n          if (!(precpred(_ctx, 16))) throw FailedPredicateException(this, \"precpred(_ctx, 16)\");\n          setState(105);\n          antlrcpp::downCast<TermContext *>(_localctx)->op = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::IN\n\n          || _la == PlanParser::NIN)) {\n            antlrcpp::downCast<TermContext *>(_localctx)->op = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n\n          setState(106);\n          match(PlanParser::T__2);\n          setState(107);\n          expr(0);\n          setState(112);\n          _errHandler->sync(this);\n          alt = getInterpreter<atn::ParserATNSimulator>()->adaptivePredict(_input, 3, _ctx);\n          while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) {\n            if (alt == 1) {\n              setState(108);\n              match(PlanParser::T__3);\n              setState(109);\n              expr(0); \n            }\n            setState(114);\n            _errHandler->sync(this);\n            alt = getInterpreter<atn::ParserATNSimulator>()->adaptivePredict(_input, 3, _ctx);\n          }\n          setState(116);\n          _errHandler->sync(this);\n\n          _la = _input->LA(1);\n          if (_la == PlanParser::T__3) {\n            setState(115);\n            match(PlanParser::T__3);\n          }\n          setState(118);\n          match(PlanParser::T__4);\n          break;\n        }\n\n        case 16: {\n          auto newContext = _tracker.createInstance<EmptyTermContext>(_tracker.createInstance<ExprContext>(parentContext, parentState));\n          _localctx = newContext;\n          pushNewRecursionContext(newContext, startState, RuleExpr);\n          setState(120);\n\n          if (!(precpred(_ctx, 15))) throw FailedPredicateException(this, \"precpred(_ctx, 15)\");\n          setState(121);\n          antlrcpp::downCast<EmptyTermContext *>(_localctx)->op = _input->LT(1);\n          _la = _input->LA(1);\n          if (!(_la == PlanParser::IN\n\n          || _la == PlanParser::NIN)) {\n            antlrcpp::downCast<EmptyTermContext *>(_localctx)->op = _errHandler->recoverInline(this);\n          }\n          else {\n            _errHandler->reportMatch(this);\n            consume();\n          }\n          setState(122);\n          match(PlanParser::EmptyTerm);\n          break;\n        }\n\n        default:\n          break;\n        } \n      }\n      setState(127);\n      _errHandler->sync(this);\n      alt = getInterpreter<atn::ParserATNSimulator>()->adaptivePredict(_input, 6, _ctx);\n    }\n  }\n  catch (RecognitionException &e) {\n    _errHandler->reportError(this, e);\n    _localctx->exception = std::current_exception();\n    _errHandler->recover(this, _localctx->exception);\n  }\n  return _localctx;\n}\n\nbool PlanParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) {\n  switch (ruleIndex) {\n    case 0: return exprSempred(antlrcpp::downCast<ExprContext *>(context), predicateIndex);\n\n  default:\n    break;\n  }\n  return true;\n}\n\nbool PlanParser::exprSempred(ExprContext *_localctx, size_t predicateIndex) {\n  switch (predicateIndex) {\n    case 0: return precpred(_ctx, 21);\n    case 1: return precpred(_ctx, 19);\n    case 2: return precpred(_ctx, 18);\n    case 3: return precpred(_ctx, 17);\n    case 4: return precpred(_ctx, 10);\n    case 5: return precpred(_ctx, 9);\n    case 6: return precpred(_ctx, 8);\n    case 7: return precpred(_ctx, 7);\n    case 8: return precpred(_ctx, 6);\n    case 9: return precpred(_ctx, 5);\n    case 10: return precpred(_ctx, 4);\n    case 11: return precpred(_ctx, 3);\n    case 12: return precpred(_ctx, 2);\n    case 13: return precpred(_ctx, 22);\n    case 14: return precpred(_ctx, 16);\n    case 15: return precpred(_ctx, 15);\n\n  default:\n    break;\n  }\n  return true;\n}\n\nvoid PlanParser::initialize() {\n#if ANTLR4_USE_THREAD_LOCAL_CACHE\n  planParserInitialize();\n#else\n  ::antlr4::internal::call_once(planParserOnceFlag, planParserInitialize);\n#endif\n}\n"
  },
  {
    "path": "src/parser/antlr/PlanParser.h",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n#pragma once\n\n\n#include \"antlr4-runtime.h\"\n\n\n\n\nclass  PlanParser : public antlr4::Parser {\npublic:\n  enum {\n    T__0 = 1, T__1 = 2, T__2 = 3, T__3 = 4, T__4 = 5, LT = 6, LE = 7, GT = 8, \n    GE = 9, EQ = 10, NE = 11, LIKE = 12, EXISTS = 13, ADD = 14, SUB = 15, \n    MUL = 16, DIV = 17, MOD = 18, POW = 19, SHL = 20, SHR = 21, BAND = 22, \n    BOR = 23, BXOR = 24, AND = 25, OR = 26, BNOT = 27, NOT = 28, IN = 29, \n    NIN = 30, EmptyTerm = 31, JSONContains = 32, JSONContainsAll = 33, JSONContainsAny = 34, \n    ArrayContains = 35, ArrayContainsAll = 36, ArrayContainsAny = 37, ArrayLength = 38, \n    BooleanConstant = 39, IntegerConstant = 40, FloatingConstant = 41, Identifier = 42, \n    StringLiteral = 43, JSONIdentifier = 44, Whitespace = 45, Newline = 46\n  };\n\n  enum {\n    RuleExpr = 0\n  };\n\n  explicit PlanParser(antlr4::TokenStream *input);\n\n  PlanParser(antlr4::TokenStream *input, const antlr4::atn::ParserATNSimulatorOptions &options);\n\n  ~PlanParser() override;\n\n  std::string getGrammarFileName() const override;\n\n  const antlr4::atn::ATN& getATN() const override;\n\n  const std::vector<std::string>& getRuleNames() const override;\n\n  const antlr4::dfa::Vocabulary& getVocabulary() const override;\n\n  antlr4::atn::SerializedATNView getSerializedATN() const override;\n\n\n  class ExprContext; \n\n  class  ExprContext : public antlr4::ParserRuleContext {\n  public:\n    ExprContext(antlr4::ParserRuleContext *parent, size_t invokingState);\n   \n    ExprContext() = default;\n    void copyFrom(ExprContext *context);\n    using antlr4::ParserRuleContext::copyFrom;\n\n    virtual size_t getRuleIndex() const override;\n\n   \n  };\n\n  class  JSONIdentifierContext : public ExprContext {\n  public:\n    JSONIdentifierContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *JSONIdentifier();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  ParensContext : public ExprContext {\n  public:\n    ParensContext(ExprContext *ctx);\n\n    ExprContext *expr();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  StringContext : public ExprContext {\n  public:\n    StringContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *StringLiteral();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  FloatingContext : public ExprContext {\n  public:\n    FloatingContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *FloatingConstant();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  JSONContainsAllContext : public ExprContext {\n  public:\n    JSONContainsAllContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *JSONContainsAll();\n    antlr4::tree::TerminalNode *ArrayContainsAll();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  LogicalOrContext : public ExprContext {\n  public:\n    LogicalOrContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *OR();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  MulDivModContext : public ExprContext {\n  public:\n    MulDivModContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *MUL();\n    antlr4::tree::TerminalNode *DIV();\n    antlr4::tree::TerminalNode *MOD();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  IdentifierContext : public ExprContext {\n  public:\n    IdentifierContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *Identifier();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  LikeContext : public ExprContext {\n  public:\n    LikeContext(ExprContext *ctx);\n\n    ExprContext *expr();\n    antlr4::tree::TerminalNode *LIKE();\n    antlr4::tree::TerminalNode *StringLiteral();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  LogicalAndContext : public ExprContext {\n  public:\n    LogicalAndContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *AND();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  EqualityContext : public ExprContext {\n  public:\n    EqualityContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *EQ();\n    antlr4::tree::TerminalNode *NE();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  BooleanContext : public ExprContext {\n  public:\n    BooleanContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *BooleanConstant();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  ShiftContext : public ExprContext {\n  public:\n    ShiftContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *SHL();\n    antlr4::tree::TerminalNode *SHR();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  ReverseRangeContext : public ExprContext {\n  public:\n    ReverseRangeContext(ExprContext *ctx);\n\n    antlr4::Token *op1 = nullptr;\n    antlr4::Token *op2 = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *Identifier();\n    antlr4::tree::TerminalNode *JSONIdentifier();\n    std::vector<antlr4::tree::TerminalNode *> GT();\n    antlr4::tree::TerminalNode* GT(size_t i);\n    std::vector<antlr4::tree::TerminalNode *> GE();\n    antlr4::tree::TerminalNode* GE(size_t i);\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  BitOrContext : public ExprContext {\n  public:\n    BitOrContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *BOR();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  AddSubContext : public ExprContext {\n  public:\n    AddSubContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *ADD();\n    antlr4::tree::TerminalNode *SUB();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  RelationalContext : public ExprContext {\n  public:\n    RelationalContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *LT();\n    antlr4::tree::TerminalNode *LE();\n    antlr4::tree::TerminalNode *GT();\n    antlr4::tree::TerminalNode *GE();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  ArrayLengthContext : public ExprContext {\n  public:\n    ArrayLengthContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *ArrayLength();\n    antlr4::tree::TerminalNode *Identifier();\n    antlr4::tree::TerminalNode *JSONIdentifier();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  TermContext : public ExprContext {\n  public:\n    TermContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *IN();\n    antlr4::tree::TerminalNode *NIN();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  JSONContainsContext : public ExprContext {\n  public:\n    JSONContainsContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *JSONContains();\n    antlr4::tree::TerminalNode *ArrayContains();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  RangeContext : public ExprContext {\n  public:\n    RangeContext(ExprContext *ctx);\n\n    antlr4::Token *op1 = nullptr;\n    antlr4::Token *op2 = nullptr;\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *Identifier();\n    antlr4::tree::TerminalNode *JSONIdentifier();\n    std::vector<antlr4::tree::TerminalNode *> LT();\n    antlr4::tree::TerminalNode* LT(size_t i);\n    std::vector<antlr4::tree::TerminalNode *> LE();\n    antlr4::tree::TerminalNode* LE(size_t i);\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  UnaryContext : public ExprContext {\n  public:\n    UnaryContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    ExprContext *expr();\n    antlr4::tree::TerminalNode *ADD();\n    antlr4::tree::TerminalNode *SUB();\n    antlr4::tree::TerminalNode *BNOT();\n    antlr4::tree::TerminalNode *NOT();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  IntegerContext : public ExprContext {\n  public:\n    IntegerContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *IntegerConstant();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  ArrayContext : public ExprContext {\n  public:\n    ArrayContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  JSONContainsAnyContext : public ExprContext {\n  public:\n    JSONContainsAnyContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *JSONContainsAny();\n    antlr4::tree::TerminalNode *ArrayContainsAny();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  BitXorContext : public ExprContext {\n  public:\n    BitXorContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *BXOR();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  ExistsContext : public ExprContext {\n  public:\n    ExistsContext(ExprContext *ctx);\n\n    antlr4::tree::TerminalNode *EXISTS();\n    ExprContext *expr();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  BitAndContext : public ExprContext {\n  public:\n    BitAndContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *BAND();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  EmptyTermContext : public ExprContext {\n  public:\n    EmptyTermContext(ExprContext *ctx);\n\n    antlr4::Token *op = nullptr;\n    ExprContext *expr();\n    antlr4::tree::TerminalNode *EmptyTerm();\n    antlr4::tree::TerminalNode *IN();\n    antlr4::tree::TerminalNode *NIN();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  class  PowerContext : public ExprContext {\n  public:\n    PowerContext(ExprContext *ctx);\n\n    std::vector<ExprContext *> expr();\n    ExprContext* expr(size_t i);\n    antlr4::tree::TerminalNode *POW();\n\n    virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;\n  };\n\n  ExprContext* expr();\n  ExprContext* expr(int precedence);\n\n  bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override;\n\n  bool exprSempred(ExprContext *_localctx, size_t predicateIndex);\n\n  // By default the static state used to implement the parser is lazily initialized during the first\n  // call to the constructor. You can call this function if you wish to initialize the static state\n  // ahead of time.\n  static void initialize();\n\nprivate:\n};\n\n"
  },
  {
    "path": "src/parser/antlr/PlanVisitor.cpp",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n\n#include \"PlanVisitor.h\"\n\n\n"
  },
  {
    "path": "src/parser/antlr/PlanVisitor.h",
    "content": "\n// Generated from Plan.g4 by ANTLR 4.13.1\n\n#pragma once\n\n\n#include \"antlr4-runtime.h\"\n#include \"PlanParser.h\"\n\n\n\n/**\n * This class defines an abstract visitor for a parse tree\n * produced by PlanParser.\n */\nclass  PlanVisitor : public antlr4::tree::AbstractParseTreeVisitor {\npublic:\n\n  /**\n   * Visit parse trees produced by PlanParser.\n   */\n    virtual std::any visitJSONIdentifier(PlanParser::JSONIdentifierContext *context) = 0;\n\n    virtual std::any visitParens(PlanParser::ParensContext *context) = 0;\n\n    virtual std::any visitString(PlanParser::StringContext *context) = 0;\n\n    virtual std::any visitFloating(PlanParser::FloatingContext *context) = 0;\n\n    virtual std::any visitJSONContainsAll(PlanParser::JSONContainsAllContext *context) = 0;\n\n    virtual std::any visitLogicalOr(PlanParser::LogicalOrContext *context) = 0;\n\n    virtual std::any visitMulDivMod(PlanParser::MulDivModContext *context) = 0;\n\n    virtual std::any visitIdentifier(PlanParser::IdentifierContext *context) = 0;\n\n    virtual std::any visitLike(PlanParser::LikeContext *context) = 0;\n\n    virtual std::any visitLogicalAnd(PlanParser::LogicalAndContext *context) = 0;\n\n    virtual std::any visitEquality(PlanParser::EqualityContext *context) = 0;\n\n    virtual std::any visitBoolean(PlanParser::BooleanContext *context) = 0;\n\n    virtual std::any visitShift(PlanParser::ShiftContext *context) = 0;\n\n    virtual std::any visitReverseRange(PlanParser::ReverseRangeContext *context) = 0;\n\n    virtual std::any visitBitOr(PlanParser::BitOrContext *context) = 0;\n\n    virtual std::any visitAddSub(PlanParser::AddSubContext *context) = 0;\n\n    virtual std::any visitRelational(PlanParser::RelationalContext *context) = 0;\n\n    virtual std::any visitArrayLength(PlanParser::ArrayLengthContext *context) = 0;\n\n    virtual std::any visitTerm(PlanParser::TermContext *context) = 0;\n\n    virtual std::any visitJSONContains(PlanParser::JSONContainsContext *context) = 0;\n\n    virtual std::any visitRange(PlanParser::RangeContext *context) = 0;\n\n    virtual std::any visitUnary(PlanParser::UnaryContext *context) = 0;\n\n    virtual std::any visitInteger(PlanParser::IntegerContext *context) = 0;\n\n    virtual std::any visitArray(PlanParser::ArrayContext *context) = 0;\n\n    virtual std::any visitJSONContainsAny(PlanParser::JSONContainsAnyContext *context) = 0;\n\n    virtual std::any visitBitXor(PlanParser::BitXorContext *context) = 0;\n\n    virtual std::any visitExists(PlanParser::ExistsContext *context) = 0;\n\n    virtual std::any visitBitAnd(PlanParser::BitAndContext *context) = 0;\n\n    virtual std::any visitEmptyTerm(PlanParser::EmptyTermContext *context) = 0;\n\n    virtual std::any visitPower(PlanParser::PowerContext *context) = 0;\n\n\n};\n\n"
  },
  {
    "path": "src/parser/parser.cc",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"parser.h\"\n\nnamespace milvus::local {\n\nstd::string\nParserToMessage(milvus::proto::schema::CollectionSchema& schema,\n                const std::string& exprstr) {\n    if (exprstr.empty()) {\n        google::protobuf::Arena arena;\n        auto alway_true_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::AlwaysTrueExpr>(\n                &arena);\n        auto expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::Expr>(&arena);\n        expr->unsafe_arena_set_allocated_always_true_expr(alway_true_expr);\n        return expr->SerializeAsString();\n    }\n    antlr4::ANTLRInputStream input(exprstr);\n    PlanLexer lexer(&input);\n    antlr4::CommonTokenStream tokens(&lexer);\n    PlanParser parser(&tokens);\n\n    PlanParser::ExprContext* tree = parser.expr();\n\n    auto helper = milvus::local::CreateSchemaHelper(&schema);\n\n    milvus::local::PlanCCVisitor visitor(&helper);\n    auto res = std::any_cast<milvus::local::ExprWithDtype>(visitor.visit(tree));\n    return res.expr->SerializeAsString();\n}\n\nstd::shared_ptr<milvus::proto::plan::Expr>\nParseIdentifier(milvus::local::SchemaHelper helper,\n                const std::string& identifier) {\n    auto expr =\n        google::protobuf::Arena::CreateMessage<milvus::proto::plan::Expr>(NULL);\n\n    expr->ParseFromString(ParserToMessage(*(helper.schema), identifier));\n\n    auto ret = std::make_shared<milvus::proto::plan::Expr>();\n    ret.reset(expr);\n    return ret;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/parser/parser.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <math.h>\n#include <any>\n#include <iostream>\n#include <string>\n#include \"antlr/PlanBaseVisitor.h\"\n#include \"antlr/PlanLexer.h\"\n#include \"antlr/PlanParser.h\"\n#include \"pb/plan.pb.h\"\n#include \"utils.h\"\n\nnamespace milvus::local {\nclass PlanCCVisitor : public PlanVisitor {\n public:\n    // ok\n    virtual std::any\n    visitShift(PlanParser::ShiftContext*) override {\n        assert(false);\n        return nullptr;\n    }\n    // ok\n    virtual std::any\n    visitBitOr(PlanParser::BitOrContext*) override {\n        assert(false);\n        return nullptr;\n    }\n    // ok\n    virtual std::any\n    visitBitXor(PlanParser::BitXorContext*) override {\n        assert(false);\n        return nullptr;\n    }\n    // ok\n    virtual std::any\n    visitBitAnd(PlanParser::BitAndContext*) override {\n        assert(false);\n        return nullptr;\n    }\n\n    // ok\n    virtual std::any\n    visitParens(PlanParser::ParensContext* ctx) override {\n        return ctx->expr()->accept(this);\n    }\n    // ok\n    virtual std::any\n    visitString(PlanParser::StringContext* ctx) override {\n        auto val = ctx->getText();\n        return ExprWithDtype(createValueExpr<std::string>(\n                                 convertEscapeSingle(val), this->arena.get()),\n                             proto::schema::DataType::VarChar,\n                             true);\n    }\n    // ok\n    virtual std::any\n    visitFloating(PlanParser::FloatingContext* ctx) override {\n        auto text = ctx->getText();\n        auto val = std::strtod(text.c_str(), NULL);\n        return ExprWithDtype(createValueExpr<double>(val, this->arena.get()),\n                             proto::schema::DataType::Float,\n                             true);\n    }\n    // ok\n    virtual std::any\n    visitInteger(PlanParser::IntegerContext* ctx) override {\n        auto text = ctx->getText();\n        int64_t val = std::strtoll(text.c_str(), NULL, 10);\n        return ExprWithDtype(createValueExpr<int64_t>(val, this->arena.get()),\n                             proto::schema::DataType::Int64,\n                             true);\n    }\n    // ok\n    virtual std::any\n    visitBoolean(PlanParser::BooleanContext* ctx) override {\n        auto text = ctx->getText();\n        bool val;\n        std::transform(\n            text.begin(), text.end(), text.begin(), [](unsigned char c) {\n                return std::tolower(c);\n            });\n        std::istringstream(text) >> std::boolalpha >> val;\n        return ExprWithDtype(createValueExpr<bool>(val, this->arena.get()),\n                             proto::schema::DataType::Bool,\n                             true);\n    }\n\n    virtual std::any\n    visitPower(PlanParser::PowerContext* ctx) override {\n        auto expr = ctx->expr();\n        auto left_expr =\n            std::any_cast<ExprWithDtype>(expr[0]->accept(this)).expr;\n        auto right_expr =\n            std::any_cast<ExprWithDtype>(expr[1]->accept(this)).expr;\n\n        auto left = extractValue(left_expr);\n        auto right = extractValue(right_expr);\n\n        TRY_WITH_EXCEPTION(left.has_value() && right.has_value());\n\n        TRY_WITH_EXCEPTION(left.type() == typeid(double) ||\n                           left.type() == typeid(int64_t));\n        TRY_WITH_EXCEPTION(right.type() == typeid(double) ||\n                           right.type() == typeid(int64_t));\n        float left_value, right_value;\n        if (left.type() == typeid(int64_t))\n            left_value = float(std::any_cast<int64_t>(left));\n        if (left.type() == typeid(double))\n            left_value = float(std::any_cast<double>(left));\n        if (right.type() == typeid(int64_t))\n            right_value = float(std::any_cast<int64_t>(right));\n        if (right.type() == typeid(double))\n            right_value = float(std::any_cast<double>(right));\n\n        return ExprWithDtype(\n            createValueExpr<double>(powf(left_value, right_value),\n                                    this->arena.get()),\n            proto::schema::DataType::Double,\n            false);\n    }\n\n    virtual std::any\n    visitLogicalOr(PlanParser::LogicalOrContext* ctx) override {\n        auto expr = ctx->expr();\n        auto left_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n        auto right_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n\n        auto left_expr = left_expr_with_type.expr;\n        auto right_expr = right_expr_with_type.expr;\n\n        auto left_value = extractValue(left_expr);\n        auto right_value = extractValue(right_expr);\n\n        if (left_value.has_value() && right_value.has_value() &&\n            left_value.type() == typeid(bool) &&\n            right_value.type() == typeid(bool)) {\n            return ExprWithDtype(\n                createValueExpr<bool>(std::any_cast<bool>(left_value) ||\n                                          std::any_cast<bool>(right_value),\n                                      this->arena.get()),\n                proto::schema::DataType::Bool,\n                false\n\n            );\n        }\n\n        TRY_WITH_EXCEPTION(!left_expr_with_type.dependent);\n        TRY_WITH_EXCEPTION(!right_expr_with_type.dependent);\n        TRY_WITH_EXCEPTION(left_expr_with_type.dtype ==\n                           proto::schema::DataType::Bool);\n        TRY_WITH_EXCEPTION(right_expr_with_type.dtype ==\n                           proto::schema::DataType::Bool);\n        return ExprWithDtype(\n            createBinExpr<proto::plan::BinaryExpr_BinaryOp_LogicalOr>(\n                left_expr, right_expr, this->arena.get()),\n            proto::schema::DataType::Bool,\n            false);\n    }\n\n    virtual std::any\n    visitLogicalAnd(PlanParser::LogicalAndContext* ctx) override {\n        auto expr = ctx->expr();\n        auto left_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n        auto right_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n\n        auto left_expr = left_expr_with_type.expr;\n        auto right_expr = right_expr_with_type.expr;\n\n        auto left_value = extractValue(left_expr);\n        auto right_value = extractValue(right_expr);\n\n        if (left_value.has_value() && right_value.has_value() &&\n            left_value.type() == typeid(bool) &&\n            right_value.type() == typeid(bool)) {\n            return ExprWithDtype(\n                createValueExpr<bool>(std::any_cast<bool>(left_value) &&\n                                          std::any_cast<bool>(right_value),\n                                      this->arena.get()\n\n                                          ),\n                proto::schema::DataType::Bool,\n                false\n\n            );\n        }\n\n        TRY_WITH_EXCEPTION(!left_expr_with_type.dependent);\n        TRY_WITH_EXCEPTION(!right_expr_with_type.dependent);\n        TRY_WITH_EXCEPTION(left_expr_with_type.dtype ==\n                           proto::schema::DataType::Bool);\n        TRY_WITH_EXCEPTION(right_expr_with_type.dtype ==\n                           proto::schema::DataType::Bool);\n        return ExprWithDtype(\n            createBinExpr<proto::plan::BinaryExpr_BinaryOp_LogicalAnd>(\n                left_expr, right_expr, this->arena.get()),\n            proto::schema::DataType::Bool,\n            false);\n    }\n\n    virtual std::any\n    visitJSONIdentifier(PlanParser::JSONIdentifierContext* ctx) override {\n        auto info = getChildColumnInfo(nullptr, ctx->JSONIdentifier());\n\n        TRY_WITH_EXCEPTION(info);\n\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n        auto col_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::ColumnExpr>(\n                this->arena.get());\n\n        col_expr->unsafe_arena_set_allocated_info(info);\n\n        expr->unsafe_arena_set_allocated_column_expr(col_expr);\n        return ExprWithDtype(expr, info->data_type(), true);\n    }\n\n    virtual std::any\n    visitJSONContainsAll(PlanParser::JSONContainsAllContext* ctx) override {\n        auto expr_ret = ctx->expr();\n        auto field = std::any_cast<ExprWithDtype>(expr_ret[0]->accept(this));\n        auto info = field.expr->column_expr().info();\n        TRY_WITH_EXCEPTION(info.data_type() == proto::schema::DataType::Array ||\n                           info.data_type() == proto::schema::DataType::JSON);\n        auto elem = std::any_cast<ExprWithDtype>(expr_ret[1]->accept(this));\n        TRY_WITH_EXCEPTION(elem.expr->value_expr().has_value() &&\n                           elem.expr->value_expr().value().has_array_val());\n        if (info.data_type() == proto::schema::DataType::Array) {\n            auto arr = elem.expr->value_expr().value().array_val();\n            for (int idx = 0; idx < arr.array_size(); idx++) {\n                proto::plan::GenericValue expr = arr.array(idx);\n                TRY_WITH_EXCEPTION(canBeCompared(\n                    field, toValueExpr(&expr, this->arena.get())));\n            }\n        }\n\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n        auto json_contain_expr = google::protobuf::Arena::CreateMessage<\n            proto::plan::JSONContainsExpr>(this->arena.get());\n\n        auto arr = elem.expr->value_expr().value().array_val();\n        for (int idx = 0; idx < arr.array_size(); idx++) {\n            proto::plan::GenericValue expr = arr.array(idx);\n            auto val = json_contain_expr->add_elements();\n            if (expr.has_bool_val())\n                val->set_bool_val(expr.bool_val());\n            if (expr.has_string_val())\n                val->set_string_val(expr.string_val());\n            if (expr.has_float_val())\n                val->set_float_val(expr.float_val());\n            if (expr.has_int64_val())\n                val->set_int64_val(expr.int64_val());\n        }\n\n        json_contain_expr->set_elements_same_type(\n            elem.expr->value_expr().value().array_val().same_type());\n        json_contain_expr->unsafe_arena_set_allocated_column_info(\n            CreateMessageWithCopy<proto::plan::ColumnInfo>(this->arena.get(),\n                                                           info));\n        json_contain_expr->set_op(\n            proto::plan::JSONContainsExpr_JSONOp_ContainsAll);\n        expr->unsafe_arena_set_allocated_json_contains_expr(json_contain_expr);\n\n        return ExprWithDtype(expr, proto::schema::Bool, false);\n    }\n\n    virtual std::any\n    visitMulDivMod(PlanParser::MulDivModContext* ctx) override {\n        auto expr = ctx->expr();\n        auto left_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n        auto right_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n        auto left_expr = left_expr_with_type.expr;\n        auto right_expr = right_expr_with_type.expr;\n\n        auto left_value = extractValue(left_expr);\n        auto right_value = extractValue(right_expr);\n        if (left_value.has_value() && right_value.has_value()) {\n            if (left_value.type() == typeid(double) &&\n                right_value.type() == typeid(double)) {\n                switch (ctx->op->getType()) {\n                    case PlanParser::MUL:\n                        return ExprWithDtype(\n                            createValueExpr<double>(\n                                std::any_cast<double>(left_value) *\n                                    std::any_cast<double>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Double,\n                            false);\n                    case PlanParser::DIV:\n                        return ExprWithDtype(\n                            createValueExpr<double>(\n                                std::any_cast<double>(left_value) /\n                                    std::any_cast<double>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Double,\n                            false);\n                    default:\n                        TRY_WITH_EXCEPTION(false);\n                }\n            }\n\n            if (left_value.type() == typeid(int64_t) &&\n                right_value.type() == typeid(int64_t)) {\n                switch (ctx->op->getType()) {\n                    case PlanParser::MUL:\n                        return ExprWithDtype(\n                            createValueExpr<int64_t>(\n                                std::any_cast<int64_t>(left_value) *\n                                    std::any_cast<int64_t>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Int64,\n                            false);\n                    case PlanParser::DIV:\n                        return ExprWithDtype(\n                            createValueExpr<int64_t>(\n                                std::any_cast<int64_t>(left_value) /\n                                    std::any_cast<int64_t>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Int64,\n                            false);\n                    case PlanParser::MOD:\n                        return ExprWithDtype(\n                            createValueExpr<int64_t>(\n                                std::any_cast<int64_t>(left_value) %\n                                    std::any_cast<int64_t>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Int64,\n                            false);\n                    default:\n                        TRY_WITH_EXCEPTION(false);\n                }\n            }\n\n            if (left_value.type() == typeid(double) &&\n                right_value.type() == typeid(int64_t)) {\n                switch (ctx->op->getType()) {\n                    case PlanParser::MUL:\n                        return ExprWithDtype(\n                            createValueExpr<double>(\n                                std::any_cast<double>(left_value) *\n                                    std::any_cast<int64_t>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Double,\n                            false);\n                    case PlanParser::DIV:\n                        return ExprWithDtype(\n                            createValueExpr<double>(\n                                std::any_cast<double>(left_value) /\n                                    std::any_cast<int64_t>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Double,\n                            false);\n                    default:\n                        TRY_WITH_EXCEPTION(false);\n                }\n            }\n\n            if (left_value.type() == typeid(int64_t) &&\n                right_value.type() == typeid(double)) {\n                switch (ctx->op->getType()) {\n                    case PlanParser::MUL:\n                        return ExprWithDtype(\n                            createValueExpr<double>(\n                                double(std::any_cast<int64_t>(left_value)) *\n                                    std::any_cast<double>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Double,\n                            false);\n                    case PlanParser::DIV:\n                        return ExprWithDtype(\n                            createValueExpr<double>(\n                                double(std::any_cast<int64_t>(left_value)) *\n                                    std::any_cast<double>(right_value),\n                                this->arena.get()),\n                            proto::schema::DataType::Double,\n                            false);\n                    default:\n                        TRY_WITH_EXCEPTION(false);\n                }\n            }\n\n            if (left_expr->has_column_expr()) {\n                TRY_WITH_EXCEPTION(\n                    left_expr->column_expr().info().data_type() !=\n                    proto::schema::DataType::Array);\n                TRY_WITH_EXCEPTION(\n                    left_expr->column_expr().info().nested_path_size() == 0);\n            }\n\n            if (right_expr->has_column_expr()) {\n                TRY_WITH_EXCEPTION(\n                    right_expr->column_expr().info().data_type() !=\n                    proto::schema::DataType::Array);\n                TRY_WITH_EXCEPTION(\n                    right_expr->column_expr().info().nested_path_size() == 0);\n            }\n\n            if (left_expr_with_type.dtype == proto::schema::DataType::Array) {\n                if (right_expr_with_type.dtype ==\n                    proto::schema::DataType::Array)\n                    TRY_WITH_EXCEPTION(\n                        canArithmeticDtype(getArrayElementType(left_expr),\n                                           getArrayElementType(right_expr)));\n                else if (arithmeticDtype(left_expr_with_type.dtype))\n                    TRY_WITH_EXCEPTION(\n                        canArithmeticDtype(getArrayElementType(left_expr),\n                                           right_expr_with_type.dtype));\n                else\n                    TRY_WITH_EXCEPTION(false);\n            }\n\n            if (right_expr_with_type.dtype == proto::schema::DataType::Array) {\n                if (arithmeticDtype(left_expr_with_type.dtype))\n                    TRY_WITH_EXCEPTION(\n                        canArithmeticDtype(left_expr_with_type.dtype,\n                                           getArrayElementType(right_expr)));\n                else\n                    TRY_WITH_EXCEPTION(false);\n            }\n\n            if (arithmeticDtype(left_expr_with_type.dtype) &&\n                arithmeticDtype(right_expr_with_type.dtype)) {\n                TRY_WITH_EXCEPTION(canArithmeticDtype(\n                    left_expr_with_type.dtype, right_expr_with_type.dtype));\n            } else {\n                TRY_WITH_EXCEPTION(false);\n            }\n\n            switch (ctx->op->getType()) {\n                case PlanParser::MUL:\n                    return ExprWithDtype(\n                        createBinArithExpr<proto::plan::ArithOpType::Mul>(\n                            left_expr, right_expr, this->arena.get()),\n                        calDataType(&left_expr_with_type,\n                                    &right_expr_with_type),\n                        false);\n                case PlanParser::DIV:\n                    return ExprWithDtype(\n                        createBinArithExpr<proto::plan::ArithOpType::Div>(\n                            left_expr, right_expr, this->arena.get()),\n                        calDataType(&left_expr_with_type,\n                                    &right_expr_with_type),\n                        false);\n                case PlanParser::MOD:\n                    return ExprWithDtype(\n                        createBinArithExpr<proto::plan::ArithOpType::Mod>(\n                            left_expr, right_expr, this->arena.get()),\n                        calDataType(&left_expr_with_type,\n                                    &right_expr_with_type),\n                        false);\n\n                default:\n                    TRY_WITH_EXCEPTION(false);\n            }\n        }\n        return nullptr;\n    }\n\n    virtual std::any\n    visitIdentifier(PlanParser::IdentifierContext* ctx) override {\n        auto identifier = ctx->getText();\n        auto& field = helper->GetFieldFromNameDefaultJSON(identifier);\n        std::vector<std::string> nested_path;\n        if (field.name() != identifier) {\n            nested_path.push_back(identifier);\n        }\n        TRY_WITH_EXCEPTION(\n            !(field.data_type() == proto::schema::DataType::JSON &&\n              nested_path.empty()));\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            arena.get());\n        auto col_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::ColumnExpr>(\n                arena.get());\n        auto info =\n            google::protobuf::Arena::CreateMessage<proto::plan::ColumnInfo>(\n                arena.get());\n        info->set_field_id(field.fieldid());\n        info->set_data_type(field.data_type());\n        info->set_is_primary_key(field.is_primary_key());\n        info->set_is_autoid(field.autoid());\n        for (int i = 0; i < (int)nested_path.size(); ++i) {\n            auto path_added = info->add_nested_path();\n            *path_added = nested_path[i];\n        }\n        info->set_is_primary_key(field.is_primary_key());\n        info->set_element_type(field.element_type());\n        col_expr->set_allocated_info(info);\n        expr->set_allocated_column_expr(col_expr);\n        return ExprWithDtype(expr, field.data_type(), false);\n    }\n\n    virtual std::any\n    visitLike(PlanParser::LikeContext* ctx) override {\n        auto child_expr_with_type =\n            std::any_cast<ExprWithDtype>(ctx->expr()->accept(this));\n        auto child_expr = child_expr_with_type.expr;\n        TRY_WITH_EXCEPTION(child_expr);\n        auto info = child_expr->column_expr().info();\n        TRY_WITH_EXCEPTION(\n            !(info.data_type() == proto::schema::DataType::JSON &&\n              info.nested_path_size() == 0));\n        TRY_WITH_EXCEPTION(\n            (child_expr_with_type.dtype == proto::schema::DataType::VarChar ||\n             child_expr_with_type.dtype == proto::schema::DataType::JSON) ||\n            (child_expr_with_type.dtype == proto::schema::DataType::Array &&\n             info.element_type() == proto::schema::DataType::VarChar));\n\n        auto str = ctx->StringLiteral()->getText();\n        auto pattern = convertEscapeSingle(str);\n\n        auto res = translatePatternMatch(pattern);\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            arena.get());\n        auto unaryrange_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::UnaryRangeExpr>(\n                arena.get());\n        unaryrange_expr->set_op(res.first);\n\n        auto value =\n            google::protobuf::Arena::CreateMessage<proto::plan::GenericValue>(\n                this->arena.get());\n        value->set_string_val(res.second);\n        unaryrange_expr->unsafe_arena_set_allocated_value(value);\n        unaryrange_expr->unsafe_arena_set_allocated_column_info(\n            CreateMessageWithCopy<proto::plan::ColumnInfo>(this->arena.get(),\n                                                           info));\n        expr->set_allocated_unary_range_expr(unaryrange_expr);\n        return ExprWithDtype(expr, proto::schema::DataType::Bool, false);\n    }\n\n    virtual std::any\n    visitEquality(PlanParser::EqualityContext* ctx) override {\n        auto expr = ctx->expr();\n        auto left_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n        auto right_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n\n        auto left_value = extractValue(left_expr_with_type.expr);\n        auto right_value = extractValue(right_expr_with_type.expr);\n\n        if (left_value.has_value() && right_value.has_value()) {\n#define PROCESS_EQALITY(left_type, right_type)                      \\\n    if (left_value.type() == typeid(left_type) &&                   \\\n        right_value.type() == typeid(right_type)) {                 \\\n        switch (ctx->op->getType()) {                               \\\n            case PlanParser::EQ:                                    \\\n                return ExprWithDtype(                               \\\n                    createValueExpr<bool>(                          \\\n                        std::any_cast<left_type>(left_value) ==     \\\n                            std::any_cast<right_type>(right_value), \\\n                        this->arena.get()),                         \\\n                    proto::schema::DataType::Bool,                  \\\n                    false);                                         \\\n            case PlanParser::NE:                                    \\\n                return ExprWithDtype(                               \\\n                    createValueExpr<bool>(                          \\\n                        std::any_cast<left_type>(left_value) !=     \\\n                            std::any_cast<right_type>(right_value), \\\n                        this->arena.get()),                         \\\n                    proto::schema::DataType::Bool,                  \\\n                    false);                                         \\\n        }                                                           \\\n    }\n\n            PROCESS_EQALITY(bool, bool);\n            PROCESS_EQALITY(std::string, std::string);\n            PROCESS_EQALITY(double, double);\n            PROCESS_EQALITY(double, int64_t);\n            PROCESS_EQALITY(int64_t, double);\n            PROCESS_EQALITY(int32_t, int32_t);\n            PROCESS_EQALITY(int64_t, int64_t);\n            PROCESS_EQALITY(double, int32_t);\n            PROCESS_EQALITY(int32_t, double);\n            PROCESS_EQALITY(float, float);\n            PROCESS_EQALITY(int32_t, float);\n            PROCESS_EQALITY(float, int32_t);\n            PROCESS_EQALITY(float, double);\n            PROCESS_EQALITY(double, float);\n        }\n\n        if (left_expr_with_type.expr->has_value_expr() &&\n            !right_expr_with_type.expr->has_value_expr()) {\n            ExprWithDtype left =\n                toValueExpr(CreateMessageWithCopy<proto::plan::GenericValue>(\n                                this->arena.get(),\n                                left_expr_with_type.expr->value_expr().value()),\n                            this->arena.get());\n            ExprWithDtype right = right_expr_with_type;\n\n            return ExprWithDtype(\n                HandleCompare(\n                    ctx->op->getType(), left, right, this->arena.get()),\n                proto::schema::DataType::Bool,\n                false);\n        }\n\n        if (!left_expr_with_type.expr->has_value_expr() &&\n            right_expr_with_type.expr->has_value_expr()) {\n            ExprWithDtype left = left_expr_with_type;\n            ExprWithDtype right = toValueExpr(\n                CreateMessageWithCopy<proto::plan::GenericValue>(\n                    this->arena.get(),\n                    right_expr_with_type.expr->value_expr().value()),\n                this->arena.get());\n\n            return ExprWithDtype(\n                HandleCompare(\n                    ctx->op->getType(), left, right, this->arena.get()),\n                proto::schema::DataType::Bool,\n                false);\n        }\n\n        if (!left_expr_with_type.expr->has_value_expr() &&\n            !right_expr_with_type.expr->has_value_expr()) {\n            return ExprWithDtype(HandleCompare(ctx->op->getType(),\n                                               left_expr_with_type,\n                                               right_expr_with_type,\n                                               this->arena.get()),\n                                 proto::schema::DataType::Bool,\n                                 false);\n        }\n\n        return nullptr;\n    }\n\n    proto::plan::ColumnInfo*\n    getChildColumnInfo(antlr4::tree::TerminalNode* identifier,\n                       antlr4::tree::TerminalNode* child) {\n        if (identifier) {\n            auto text = identifier->getText();\n            auto field = helper->GetFieldFromNameDefaultJSON(text);\n            std::vector<std::string> nested_path;\n            if (field.name() != text) {\n                nested_path.push_back(text);\n            }\n            TRY_WITH_EXCEPTION(\n                !(field.data_type() == proto::schema::DataType::JSON &&\n                  nested_path.empty()));\n            auto info =\n                google::protobuf::Arena::CreateMessage<proto::plan::ColumnInfo>(\n                    this->arena.get());\n            info->set_field_id(field.fieldid());\n            info->set_data_type(field.data_type());\n            info->set_is_primary_key(field.is_primary_key());\n            info->set_is_autoid(field.autoid());\n            for (int i = 0; i < (int)nested_path.size(); ++i) {\n                auto path_added = info->add_nested_path();\n                *path_added = nested_path[i];\n            }\n            info->set_is_primary_key(field.is_primary_key());\n            info->set_element_type(field.element_type());\n            return info;\n        }\n\n        auto childtext = child->getText();\n        std::string fieldname = childtext.substr(0, childtext.find(\"[\", 0));\n\n        std::vector<std::string> nested_path;\n        auto field = helper->GetFieldFromNameDefaultJSON(fieldname);\n        TRY_WITH_EXCEPTION(field.data_type() == proto::schema::DataType::JSON ||\n                           field.data_type() == proto::schema::DataType::Array);\n        if (fieldname != field.name())\n            nested_path.push_back(fieldname);\n        auto jsonkey = childtext.substr(\n            fieldname.length(), childtext.length() - fieldname.length());\n        auto ss = tokenize(jsonkey, \"][\");\n        for (size_t i = 0; i < ss.size(); ++i) {\n            std::string path_ = ss[i];\n\n            if (path_[0] == '[')\n                path_ = path_.substr(1, path_.length() - 1);\n\n            if (path_[path_.length() - 1] == ']')\n                path_ = path_.substr(0, path_.length() - 1);\n            TRY_WITH_EXCEPTION(path_ != \"\");\n\n            if ((path_[0] == '\\\"' && path_[path_.length() - 1] == '\\\"') ||\n                (path_[0] == '\\'' && path_[path_.length() - 1] == '\\'')) {\n                path_ = path_.substr(1, path_.length() - 2);\n                TRY_WITH_EXCEPTION(path_ != \"\");\n            }\n            nested_path.push_back(path_);\n        }\n\n        auto info =\n            google::protobuf::Arena::CreateMessage<proto::plan::ColumnInfo>(\n                this->arena.get());\n\n        info->set_field_id(field.fieldid());\n        info->set_data_type(field.data_type());\n        info->set_is_primary_key(field.is_primary_key());\n        info->set_is_autoid(field.autoid());\n        for (int i = 0; i < (int)nested_path.size(); ++i) {\n            auto path_added = info->add_nested_path();\n            *path_added = nested_path[i];\n        }\n        info->set_is_primary_key(field.is_primary_key());\n        info->set_element_type(field.element_type());\n        return info;\n    }\n\n    virtual std::any\n    visitReverseRange(PlanParser::ReverseRangeContext* ctx) override {\n        auto expr = ctx->expr();\n        auto info =\n            getChildColumnInfo(ctx->Identifier(), ctx->JSONIdentifier());\n        TRY_WITH_EXCEPTION(info != nullptr);\n        TRY_WITH_EXCEPTION(checkDirectComparisonBinaryField(info));\n        auto lower = std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n        auto upper = std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n\n        if (info->data_type() == proto::schema::DataType::Int8 ||\n            info->data_type() == proto::schema::DataType::Int16 ||\n            info->data_type() == proto::schema::DataType::Int32 ||\n            info->data_type() == proto::schema::DataType::Int64 ||\n            info->data_type() == proto::schema::DataType::Float ||\n            info->data_type() == proto::schema::DataType::Double ||\n            info->data_type() == proto::schema::DataType::Bool ||\n            info->data_type() == proto::schema::DataType::String ||\n            info->data_type() == proto::schema::DataType::VarChar) {\n            auto a = extractValue(lower.expr);\n            auto b = extractValue(upper.expr);\n            if (a.has_value() && b.has_value()) {\n                bool lowerinclusive = ctx->op1->getType() == PlanParser::GE;\n                bool upperinclusive = ctx->op2->getType() == PlanParser::GE;\n                auto expr =\n                    google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n                        this->arena.get());\n                auto binary_range_expr = google::protobuf::Arena::CreateMessage<\n                    proto::plan::BinaryRangeExpr>(this->arena.get());\n                auto lower_value = google::protobuf::Arena::CreateMessage<\n                    proto::plan::GenericValue>(this->arena.get());\n                auto upper_value = google::protobuf::Arena::CreateMessage<\n                    proto::plan::GenericValue>(this->arena.get());\n                if (a.type() == typeid(int8_t))\n                    lower_value->set_int64_val(\n                        int64_t(std::any_cast<int8_t>(a)));\n                if (a.type() == typeid(int16_t))\n                    lower_value->set_int64_val(\n                        int64_t(std::any_cast<int16_t>(a)));\n                if (a.type() == typeid(int32_t))\n                    lower_value->set_int64_val(\n                        int64_t(std::any_cast<int32_t>(a)));\n                if (a.type() == typeid(int64_t))\n                    lower_value->set_int64_val(std::any_cast<int64_t>(a));\n                if (a.type() == typeid(double))\n                    lower_value->set_float_val(std::any_cast<double>(a));\n                if (a.type() == typeid(float))\n                    lower_value->set_float_val(double(std::any_cast<float>(a)));\n                if (a.type() == typeid(std::string))\n                    lower_value->set_string_val(std::any_cast<std::string>(a));\n                if (a.type() == typeid(bool))\n                    lower_value->set_bool_val(std::any_cast<bool>(a));\n\n                if (b.type() == typeid(int8_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int8_t>(b)));\n                if (b.type() == typeid(int16_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int16_t>(b)));\n                if (b.type() == typeid(int32_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int32_t>(b)));\n                if (b.type() == typeid(int64_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int64_t>(b)));\n                if (b.type() == typeid(double))\n                    upper_value->set_float_val(std::any_cast<double>(b));\n                if (b.type() == typeid(float))\n                    upper_value->set_float_val(double(std::any_cast<float>(b)));\n                if (b.type() == typeid(std::string))\n                    upper_value->set_string_val(std::any_cast<std::string>(b));\n                if (b.type() == typeid(bool))\n                    upper_value->set_bool_val(std::any_cast<bool>(b));\n\n                binary_range_expr->set_lower_inclusive(lowerinclusive);\n                binary_range_expr->set_upper_inclusive(upperinclusive);\n                binary_range_expr->unsafe_arena_set_allocated_column_info(info);\n\n                binary_range_expr->unsafe_arena_set_allocated_lower_value(\n                    lower_value);\n                binary_range_expr->unsafe_arena_set_allocated_upper_value(\n                    upper_value);\n                expr->set_allocated_binary_range_expr(binary_range_expr);\n                return ExprWithDtype(\n                    expr, proto::schema::DataType::Bool, false);\n            }\n        }\n\n        return nullptr;\n    }\n\n    virtual std::any\n    visitAddSub(PlanParser::AddSubContext* ctx) override {\n        auto expr = ctx->expr();\n        auto left_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n        auto right_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n        auto left_value = extractValue(left_expr_with_type.expr);\n        auto right_value = extractValue(right_expr_with_type.expr);\n\n        if (left_value.has_value() && right_value.has_value()) {\n#define PROCESS_ADDSUB(left_type, right_type, target_type, datatype) \\\n    if (left_value.type() == typeid(left_type) &&                    \\\n        right_value.type() == typeid(right_type)) {                  \\\n        switch (ctx->op->getType()) {                                \\\n            case PlanParser::ADD:                                    \\\n                return ExprWithDtype(                                \\\n                    createValueExpr<target_type>(                    \\\n                        std::any_cast<left_type>(left_value) +       \\\n                            std::any_cast<right_type>(right_value),  \\\n                        this->arena.get()),                          \\\n                    datatype,                                        \\\n                    false);                                          \\\n            case PlanParser::SUB:                                    \\\n                return ExprWithDtype(                                \\\n                    createValueExpr<target_type>(                    \\\n                        std::any_cast<left_type>(left_value) -       \\\n                            std::any_cast<right_type>(right_value),  \\\n                        this->arena.get()),                          \\\n                    datatype,                                        \\\n                    false);                                          \\\n            default:                                                 \\\n                TRY_WITH_EXCEPTION(false);                           \\\n        }                                                            \\\n    }\n\n            PROCESS_ADDSUB(\n                double, double, double, proto::schema::DataType::Double)\n            PROCESS_ADDSUB(\n                double, int64_t, double, proto::schema::DataType::Double)\n            PROCESS_ADDSUB(\n                int64_t, double, double, proto::schema::DataType::Double)\n            PROCESS_ADDSUB(\n                int64_t, int64_t, int64_t, proto::schema::DataType::Int64)\n            PROCESS_ADDSUB(\n                int32_t, int32_t, int32_t, proto::schema::DataType::Int32)\n            PROCESS_ADDSUB(\n                float, float, double, proto::schema::DataType::Double)\n        }\n\n        auto left_expr = left_expr_with_type.expr;\n        auto right_expr = right_expr_with_type.expr;\n        if (left_expr->has_column_expr()) {\n            TRY_WITH_EXCEPTION(left_expr->column_expr().info().data_type() !=\n                               proto::schema::DataType::Array);\n            TRY_WITH_EXCEPTION(\n                left_expr->column_expr().info().nested_path_size() == 0);\n        }\n\n        if (right_expr->has_column_expr()) {\n            TRY_WITH_EXCEPTION(right_expr->column_expr().info().data_type() !=\n                               proto::schema::DataType::Array);\n            TRY_WITH_EXCEPTION(\n                right_expr->column_expr().info().nested_path_size() == 0);\n        }\n\n        if (left_expr_with_type.dtype == proto::schema::DataType::Array) {\n            if (right_expr_with_type.dtype == proto::schema::DataType::Array)\n                TRY_WITH_EXCEPTION(\n                    canArithmeticDtype(getArrayElementType(left_expr),\n                                       getArrayElementType(right_expr)));\n            else if (arithmeticDtype(right_expr_with_type.dtype))\n                TRY_WITH_EXCEPTION(\n                    canArithmeticDtype(getArrayElementType(left_expr),\n                                       right_expr_with_type.dtype));\n            else\n                TRY_WITH_EXCEPTION(false);\n        }\n\n        if (right_expr_with_type.dtype == proto::schema::DataType::Array) {\n            if (arithmeticDtype(left_expr_with_type.dtype))\n                TRY_WITH_EXCEPTION(\n                    canArithmeticDtype(left_expr_with_type.dtype,\n                                       getArrayElementType(right_expr)));\n            else\n                TRY_WITH_EXCEPTION(false);\n        }\n\n        if (arithmeticDtype(left_expr_with_type.dtype) &&\n            arithmeticDtype(right_expr_with_type.dtype)) {\n            TRY_WITH_EXCEPTION(canArithmeticDtype(left_expr_with_type.dtype,\n                                                  right_expr_with_type.dtype));\n        } else {\n            TRY_WITH_EXCEPTION(false);\n        }\n\n        switch (ctx->op->getType()) {\n            case PlanParser::ADD:\n                return ExprWithDtype(\n                    createBinArithExpr<proto::plan::ArithOpType::Add>(\n                        left_expr, right_expr, this->arena.get()),\n                    calDataType(&left_expr_with_type, &right_expr_with_type),\n                    false);\n            case PlanParser::SUB:\n                return ExprWithDtype(\n                    createBinArithExpr<proto::plan::ArithOpType::Sub>(\n                        left_expr, right_expr, this->arena.get()),\n                    calDataType(&left_expr_with_type, &right_expr_with_type),\n                    false);\n\n            default:\n                TRY_WITH_EXCEPTION(false);\n        }\n    }\n\n    virtual std::any\n    visitRelational(PlanParser::RelationalContext* ctx) override {\n        auto expr = ctx->expr();\n        auto left_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n        auto right_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n        auto left_value = extractValue(left_expr_with_type.expr);\n        auto right_value = extractValue(right_expr_with_type.expr);\n        if (left_value.has_value() && right_value.has_value()) {\n#define PROCESS_RELATIONAL(left_type, right_type)                   \\\n    if (left_value.type() == typeid(left_type) &&                   \\\n        right_value.type() == typeid(right_type)) {                 \\\n        switch (ctx->op->getType()) {                               \\\n            case PlanParser::LT:                                    \\\n                return ExprWithDtype(                               \\\n                    createValueExpr<bool>(                          \\\n                        std::any_cast<left_type>(left_value) <      \\\n                            std::any_cast<right_type>(right_value), \\\n                        this->arena.get()),                         \\\n                    proto::schema::DataType::Bool,                  \\\n                    false);                                         \\\n            case PlanParser::LE:                                    \\\n                return ExprWithDtype(                               \\\n                    createValueExpr<bool>(                          \\\n                        std::any_cast<left_type>(left_value) <=     \\\n                            std::any_cast<right_type>(right_value), \\\n                        this->arena.get()),                         \\\n                    proto::schema::DataType::Bool,                  \\\n                    false);                                         \\\n            case PlanParser::GT:                                    \\\n                return ExprWithDtype(                               \\\n                    createValueExpr<bool>(                          \\\n                        std::any_cast<left_type>(left_value) >      \\\n                            std::any_cast<right_type>(right_value), \\\n                        this->arena.get()),                         \\\n                    proto::schema::DataType::Bool,                  \\\n                    false);                                         \\\n            case PlanParser::GE:                                    \\\n                return ExprWithDtype(                               \\\n                    createValueExpr<bool>(                          \\\n                        std::any_cast<left_type>(left_value) >=     \\\n                            std::any_cast<right_type>(right_value), \\\n                        this->arena.get()),                         \\\n                    proto::schema::DataType::Bool,                  \\\n                    false);                                         \\\n            default:                                                \\\n                TRY_WITH_EXCEPTION(false);                          \\\n        }                                                           \\\n    }\n\n            PROCESS_RELATIONAL(double, double)\n            PROCESS_RELATIONAL(double, int64_t)\n            PROCESS_RELATIONAL(int64_t, double)\n            PROCESS_RELATIONAL(std::string, std::string)\n            PROCESS_RELATIONAL(int64_t, int64_t)\n            PROCESS_RELATIONAL(int32_t, int32_t)\n        }\n\n        if (left_expr_with_type.expr->has_value_expr() &&\n            !right_expr_with_type.expr->has_value_expr()) {\n            ExprWithDtype left =\n                toValueExpr(CreateMessageWithCopy<proto::plan::GenericValue>(\n                                this->arena.get(),\n                                left_expr_with_type.expr->value_expr().value()),\n                            this->arena.get());\n            ExprWithDtype right = right_expr_with_type;\n\n            return ExprWithDtype(\n                HandleCompare(\n                    ctx->op->getType(), left, right, this->arena.get()),\n                proto::schema::DataType::Bool,\n                false);\n        }\n\n        if (!left_expr_with_type.expr->has_value_expr() &&\n            right_expr_with_type.expr->has_value_expr()) {\n            ExprWithDtype left = left_expr_with_type;\n            ExprWithDtype right = toValueExpr(\n                CreateMessageWithCopy<proto::plan::GenericValue>(\n                    this->arena.get(),\n                    right_expr_with_type.expr->value_expr().value()),\n                this->arena.get());\n\n            return ExprWithDtype(\n                HandleCompare(\n                    ctx->op->getType(), left, right, this->arena.get()),\n                proto::schema::DataType::Bool,\n                false);\n        }\n\n        if (!left_expr_with_type.expr->has_value_expr() &&\n            !right_expr_with_type.expr->has_value_expr()) {\n            return ExprWithDtype(HandleCompare(ctx->op->getType(),\n                                               left_expr_with_type,\n                                               right_expr_with_type,\n                                               this->arena.get()),\n                                 proto::schema::DataType::Bool,\n                                 false);\n        }\n        return nullptr;\n    }\n\n    virtual std::any\n    visitArrayLength(PlanParser::ArrayLengthContext* ctx) override {\n        auto info =\n            getChildColumnInfo(ctx->Identifier(), ctx->JSONIdentifier());\n        TRY_WITH_EXCEPTION(info);\n        TRY_WITH_EXCEPTION(info->data_type() == proto::schema::Array ||\n                           info->data_type() == proto::schema::JSON);\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n        auto bin_arith_expr = google::protobuf::Arena::CreateMessage<\n            proto::plan::BinaryArithExpr>(this->arena.get());\n        auto column_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::ColumnExpr>(\n                this->arena.get());\n        column_expr->unsafe_arena_set_allocated_info(info);\n        auto left_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n                this->arena.get());\n        left_expr->unsafe_arena_set_allocated_column_expr(column_expr);\n        bin_arith_expr->unsafe_arena_set_allocated_left(left_expr);\n        bin_arith_expr->set_op(proto::plan::ArithOpType::ArrayLength);\n        expr->unsafe_arena_set_allocated_binary_arith_expr(bin_arith_expr);\n        return ExprWithDtype(expr, proto::schema::DataType::Int64, false);\n    }\n\n    virtual std::any\n    visitTerm(PlanParser::TermContext* ctx) override {\n        auto expr_ret = ctx->expr();\n        auto first_expr_with_type =\n            std::any_cast<ExprWithDtype>(expr_ret[0]->accept(this));\n        auto info =\n            first_expr_with_type.expr->unsafe_arena_release_column_expr()\n                ->unsafe_arena_release_info();\n        auto term_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::TermExpr>(\n                arena.get());\n\n        for (size_t i = 1; i < expr_ret.size(); ++i) {\n            auto elem = expr_ret[i];\n            auto expr_ = std::any_cast<ExprWithDtype>(elem->accept(this)).expr;\n            auto v = google::protobuf::Arena::CreateMessage<\n                proto::plan::GenericValue>(arena.get());\n            auto value = extractValue(expr_);\n            if (value.type() == typeid(int8_t)) {\n                v->set_int64_val(int64_t(std::any_cast<int8_t>(value)));\n                term_expr->mutable_values()->UnsafeArenaAddAllocated(v);\n                continue;\n            }\n\n            if (value.type() == typeid(int64_t)) {\n                v->set_int64_val(int64_t(std::any_cast<int64_t>(value)));\n                term_expr->mutable_values()->UnsafeArenaAddAllocated(v);\n                continue;\n            }\n\n            if (value.type() == typeid(int32_t)) {\n                v->set_int64_val(int64_t(std::any_cast<int32_t>(value)));\n                term_expr->mutable_values()->UnsafeArenaAddAllocated(v);\n                continue;\n            }\n\n            if (value.type() == typeid(double)) {\n                v->set_float_val(double(std::any_cast<double>(value)));\n                term_expr->mutable_values()->UnsafeArenaAddAllocated(v);\n                continue;\n            }\n\n            if (value.type() == typeid(float)) {\n                v->set_float_val(double(std::any_cast<float>(value)));\n                term_expr->mutable_values()->UnsafeArenaAddAllocated(v);\n                continue;\n            }\n\n            if (value.type() == typeid(bool)) {\n                v->set_bool_val(std::any_cast<bool>(value));\n                term_expr->mutable_values()->UnsafeArenaAddAllocated(v);\n                continue;\n            }\n\n            if (value.type() == typeid(std::string)) {\n                v->set_string_val(std::any_cast<std::string>(value));\n                term_expr->mutable_values()->UnsafeArenaAddAllocated(v);\n                continue;\n            }\n\n            TRY_WITH_EXCEPTION(false);\n        }\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            arena.get());\n\n        term_expr->unsafe_arena_set_allocated_column_info(info);\n        expr->unsafe_arena_set_allocated_term_expr(term_expr);\n        if (ctx->op->getType() == PlanParser::NIN) {\n            auto root_expr =\n                google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n                    arena.get());\n            auto unary_expr =\n                google::protobuf::Arena::CreateMessage<proto::plan::UnaryExpr>(\n                    arena.get());\n            unary_expr->set_op(proto::plan::UnaryExpr_UnaryOp_Not);\n            unary_expr->unsafe_arena_set_allocated_child(expr);\n            root_expr->unsafe_arena_set_allocated_unary_expr(unary_expr);\n            return ExprWithDtype(\n                root_expr, proto::schema::DataType::Bool, false);\n        }\n        return ExprWithDtype(expr, proto::schema::DataType::Bool, false);\n    }\n\n    virtual std::any\n    visitJSONContains(PlanParser::JSONContainsContext* ctx) override {\n        auto expr_ret = ctx->expr();\n        auto field = std::any_cast<ExprWithDtype>(expr_ret[0]->accept(this));\n        auto info = field.expr->column_expr().info();\n        TRY_WITH_EXCEPTION(info.data_type() == proto::schema::DataType::Array ||\n                           info.data_type() == proto::schema::DataType::JSON);\n        auto elem = std::any_cast<ExprWithDtype>(expr_ret[1]->accept(this));\n        auto elem_value = elem.expr->value_expr().value();\n\n        if (info.data_type() == proto::schema::DataType::Array) {\n            proto::plan::GenericValue expr =\n                proto::plan::GenericValue(elem_value);\n            TRY_WITH_EXCEPTION(\n                canBeCompared(field, toValueExpr(&expr, this->arena.get())));\n        }\n\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n\n        auto json_contain_expr = google::protobuf::Arena::CreateMessage<\n            proto::plan::JSONContainsExpr>(this->arena.get());\n        auto value = json_contain_expr->add_elements();\n        value->CopyFrom(elem_value);\n        json_contain_expr->set_elements_same_type(true);\n        json_contain_expr->set_allocated_column_info(\n            CreateMessageWithCopy(this->arena.get(), info));\n        json_contain_expr->unsafe_arena_set_allocated_column_info(\n            CreateMessageWithCopy<proto::plan::ColumnInfo>(this->arena.get(),\n                                                           info));\n        json_contain_expr->set_op(\n            proto::plan::JSONContainsExpr_JSONOp_Contains);\n        expr->set_allocated_json_contains_expr(json_contain_expr);\n        return ExprWithDtype(expr, proto::schema::Bool, false);\n    }\n\n    virtual std::any\n    visitRange(PlanParser::RangeContext* ctx) override {\n        auto expr = ctx->expr();\n        auto info =\n            getChildColumnInfo(ctx->Identifier(), ctx->JSONIdentifier());\n        TRY_WITH_EXCEPTION(info != nullptr);\n        TRY_WITH_EXCEPTION(checkDirectComparisonBinaryField(info));\n        auto lower = std::any_cast<ExprWithDtype>(expr[0]->accept(this));\n        auto upper = std::any_cast<ExprWithDtype>(expr[1]->accept(this));\n\n        if (info->data_type() == proto::schema::DataType::Int8 ||\n            info->data_type() == proto::schema::DataType::Int16 ||\n            info->data_type() == proto::schema::DataType::Int32 ||\n            info->data_type() == proto::schema::DataType::Int64 ||\n            info->data_type() == proto::schema::DataType::Float ||\n            info->data_type() == proto::schema::DataType::Double ||\n            info->data_type() == proto::schema::DataType::Bool ||\n            info->data_type() == proto::schema::DataType::String ||\n            info->data_type() == proto::schema::DataType::VarChar) {\n            auto a = extractValue(lower.expr);\n            auto b = extractValue(upper.expr);\n            if (a.has_value() && b.has_value()) {\n                bool lowerinclusive = ctx->op1->getType() == PlanParser::LE;\n                bool upperinclusive = ctx->op2->getType() == PlanParser::LE;\n                auto expr =\n                    google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n                        this->arena.get());\n                auto binary_range_expr = google::protobuf::Arena::CreateMessage<\n                    proto::plan::BinaryRangeExpr>(this->arena.get());\n                auto lower_value = google::protobuf::Arena::CreateMessage<\n                    proto::plan::GenericValue>(this->arena.get());\n                auto upper_value = google::protobuf::Arena::CreateMessage<\n                    proto::plan::GenericValue>(this->arena.get());\n                if (a.type() == typeid(int8_t))\n                    lower_value->set_int64_val(\n                        int64_t(std::any_cast<int8_t>(a)));\n                if (a.type() == typeid(int16_t))\n                    lower_value->set_int64_val(\n                        int64_t(std::any_cast<int16_t>(a)));\n                if (a.type() == typeid(int32_t))\n                    lower_value->set_int64_val(\n                        int64_t(std::any_cast<int32_t>(a)));\n                if (a.type() == typeid(int64_t))\n                    lower_value->set_int64_val(std::any_cast<int64_t>(a));\n                if (a.type() == typeid(double))\n                    lower_value->set_float_val(std::any_cast<double>(a));\n                if (a.type() == typeid(float))\n                    lower_value->set_float_val(double(std::any_cast<float>(a)));\n                if (a.type() == typeid(std::string))\n                    lower_value->set_string_val(std::any_cast<std::string>(a));\n                if (a.type() == typeid(bool))\n                    lower_value->set_bool_val(std::any_cast<bool>(a));\n\n                if (b.type() == typeid(int8_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int8_t>(b)));\n                if (b.type() == typeid(int16_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int16_t>(b)));\n                if (b.type() == typeid(int32_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int32_t>(b)));\n                if (b.type() == typeid(int64_t))\n                    upper_value->set_int64_val(\n                        int64_t(std::any_cast<int64_t>(b)));\n                if (b.type() == typeid(double))\n                    upper_value->set_float_val(std::any_cast<double>(b));\n                if (b.type() == typeid(float))\n                    upper_value->set_float_val(double(std::any_cast<float>(b)));\n                if (b.type() == typeid(std::string))\n                    upper_value->set_string_val(std::any_cast<std::string>(b));\n                if (b.type() == typeid(bool))\n                    upper_value->set_bool_val(std::any_cast<bool>(b));\n\n                binary_range_expr->set_lower_inclusive(lowerinclusive);\n                binary_range_expr->set_upper_inclusive(upperinclusive);\n                binary_range_expr->unsafe_arena_set_allocated_column_info(info);\n\n                binary_range_expr->unsafe_arena_set_allocated_lower_value(\n                    lower_value);\n                binary_range_expr->unsafe_arena_set_allocated_upper_value(\n                    upper_value);\n                expr->set_allocated_binary_range_expr(binary_range_expr);\n                return ExprWithDtype(\n                    expr, proto::schema::DataType::Bool, false);\n            }\n        }\n\n        return nullptr;\n    }\n\n    virtual std::any\n    visitUnary(PlanParser::UnaryContext* ctx) override {\n        auto expr_with_dtype =\n            std::any_cast<ExprWithDtype>(ctx->expr()->accept(this));\n        auto value = extractValue(expr_with_dtype.expr);\n        if (value.has_value()) {\n#define PROCESS_UNARY(dtype, schema_dtype)                               \\\n    if (value.type() == typeid(dtype)) {                                 \\\n        switch (ctx->op->getType()) {                                    \\\n            case PlanParser::ADD:                                        \\\n                return expr_with_dtype;                                  \\\n            case PlanParser::SUB:                                        \\\n                return ExprWithDtype(                                    \\\n                    createValueExpr<dtype>(-std::any_cast<dtype>(value), \\\n                                           this->arena.get()),           \\\n                    schema_dtype,                                        \\\n                    false);                                              \\\n            case PlanParser::NOT:                                        \\\n                return ExprWithDtype(                                    \\\n                    createValueExpr<dtype>(!std::any_cast<dtype>(value), \\\n                                           this->arena.get()),           \\\n                    proto::schema::DataType::Bool,                       \\\n                    false);                                              \\\n            default:                                                     \\\n                TRY_WITH_EXCEPTION(false);                               \\\n        }                                                                \\\n    }\n\n            PROCESS_UNARY(double, proto::schema::DataType::Float);\n            PROCESS_UNARY(float, proto::schema::DataType::Float);\n            PROCESS_UNARY(int8_t, proto::schema::DataType::Int64);\n            PROCESS_UNARY(int32_t, proto::schema::DataType::Int64);\n            PROCESS_UNARY(int64_t, proto::schema::DataType::Int64);\n            PROCESS_UNARY(bool, proto::schema::DataType::Bool);\n        }\n\n        TRY_WITH_EXCEPTION(checkDirectComparisonBinaryField(\n            CreateMessageWithCopy<proto::plan::ColumnInfo>(\n                this->arena.get(),\n                expr_with_dtype.expr->column_expr().info())));\n\n        switch (ctx->op->getType()) {\n            case PlanParser::ADD:\n                return expr_with_dtype.expr;\n            case PlanParser::NOT:\n                TRY_WITH_EXCEPTION(!expr_with_dtype.dependent &&\n                                   expr_with_dtype.dtype ==\n                                       proto::schema::DataType::Bool);\n                auto expr =\n                    google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n                        this->arena.get());\n                auto unary_expr = google::protobuf::Arena::CreateMessage<\n                    proto::plan::UnaryExpr>(this->arena.get());\n                unary_expr->unsafe_arena_set_allocated_child(\n                    expr_with_dtype.expr);\n                unary_expr->set_op(proto::plan::UnaryExpr_UnaryOp_Not);\n                return ExprWithDtype(expr, proto::schema::Bool, false);\n        }\n        return nullptr;\n    }\n\n    virtual std::any\n    visitArray(PlanParser::ArrayContext* ctx) override {\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n        auto array_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::Array>(\n                this->arena.get());\n        auto dtype = proto::schema::DataType::None;\n\n        auto is_same = true;\n        auto expr_ret = ctx->expr();\n        for (auto&& elem : expr_ret) {\n            auto expr_ = std::any_cast<ExprWithDtype>(elem->accept(this)).expr;\n            auto v = array_expr->add_array();\n            auto value = extractValue(expr_);\n            if (value.has_value()) {\n                if (value.type() == typeid(int8_t)) {\n                    v->set_int64_val(int64_t(std::any_cast<int8_t>(value)));\n                    if (dtype != proto::schema::DataType::None &&\n                        dtype != proto::schema::DataType::Int8) {\n                        is_same = false;\n                    }\n                    if (dtype == proto::schema::DataType::None) {\n                        dtype = proto::schema::DataType::Int8;\n                    }\n                    continue;\n                }\n                if (value.type() == typeid(int16_t)) {\n                    v->set_int64_val(int64_t(std::any_cast<int16_t>(value)));\n                    if (dtype != proto::schema::DataType::None &&\n                        dtype != proto::schema::DataType::Int16) {\n                        is_same = false;\n                    }\n                    if (dtype == proto::schema::DataType::None) {\n                        dtype = proto::schema::DataType::Int16;\n                    }\n                    continue;\n                }\n                if (value.type() == typeid(int32_t)) {\n                    v->set_int64_val(int64_t(std::any_cast<int32_t>(value)));\n                    if (dtype != proto::schema::DataType::None &&\n                        dtype != proto::schema::DataType::Int32) {\n                        is_same = false;\n                    }\n                    if (dtype == proto::schema::DataType::None) {\n                        dtype = proto::schema::DataType::Int32;\n                    }\n                    continue;\n                }\n\n                if (value.type() == typeid(int64_t)) {\n                    v->set_int64_val(std::any_cast<int64_t>(value));\n                    if (dtype != proto::schema::DataType::None &&\n                        dtype != proto::schema::DataType::Int64) {\n                        is_same = false;\n                    }\n                    if (dtype == proto::schema::DataType::None) {\n                        dtype = proto::schema::DataType::Int64;\n                    }\n                    continue;\n                }\n\n                if (value.type() == typeid(double)) {\n                    v->set_float_val(std::any_cast<double>(value));\n                    if (dtype != proto::schema::DataType::None &&\n                        dtype != proto::schema::DataType::Double) {\n                        is_same = false;\n                    }\n                    if (dtype == proto::schema::DataType::None) {\n                        dtype = proto::schema::DataType::Double;\n                    }\n                    continue;\n                }\n\n                if (value.type() == typeid(float)) {\n                    v->set_float_val(std::any_cast<float>(value));\n                    if (dtype != proto::schema::DataType::None &&\n                        dtype != proto::schema::DataType::Float) {\n                        is_same = false;\n                    }\n                    if (dtype == proto::schema::DataType::None) {\n                        dtype = proto::schema::DataType::Float;\n                    }\n                    continue;\n                }\n\n                if (value.type() == typeid(std::string)) {\n                    v->set_string_val(std::any_cast<std::string>(value));\n                    if (dtype != proto::schema::DataType::None &&\n                        dtype != proto::schema::DataType::VarChar) {\n                        is_same = false;\n                    }\n                    if (dtype == proto::schema::DataType::None) {\n                        dtype = proto::schema::DataType::VarChar;\n                    }\n                    continue;\n                }\n            }\n        }\n\n        auto generic_value =\n            google::protobuf::Arena::CreateMessage<proto::plan::GenericValue>(\n                this->arena.get());\n\n        generic_value->unsafe_arena_set_allocated_array_val(array_expr);\n\n        auto value_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::ValueExpr>(\n                this->arena.get());\n        value_expr->unsafe_arena_set_allocated_value(generic_value);\n        expr->unsafe_arena_set_allocated_value_expr(value_expr);\n        return ExprWithDtype(\n            expr, is_same ? dtype : proto::schema::DataType::None, true);\n    }\n    virtual std::any\n    visitJSONContainsAny(PlanParser::JSONContainsAnyContext* ctx) override {\n        auto expr_ret = ctx->expr();\n        auto field = std::any_cast<ExprWithDtype>(expr_ret[0]->accept(this));\n        auto info = field.expr->column_expr().info();\n        TRY_WITH_EXCEPTION(info.data_type() == proto::schema::DataType::Array ||\n                           info.data_type() == proto::schema::DataType::JSON);\n        auto elem = std::any_cast<ExprWithDtype>(expr_ret[1]->accept(this));\n        TRY_WITH_EXCEPTION(elem.expr->value_expr().has_value() &&\n                           elem.expr->value_expr().value().has_array_val());\n        if (info.data_type() == proto::schema::DataType::Array) {\n            auto arr = elem.expr->value_expr().value().array_val();\n            for (int idx = 0; idx < arr.array_size(); idx++) {\n                proto::plan::GenericValue expr = arr.array(idx);\n                TRY_WITH_EXCEPTION(canBeCompared(\n                    field, toValueExpr(&expr, this->arena.get())));\n            }\n        }\n\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n        auto json_contain_expr = google::protobuf::Arena::CreateMessage<\n            proto::plan::JSONContainsExpr>(this->arena.get());\n\n        auto arr = elem.expr->value_expr().value().array_val();\n        for (int idx = 0; idx < arr.array_size(); idx++) {\n            proto::plan::GenericValue expr = arr.array(idx);\n            auto val = json_contain_expr->add_elements();\n            if (expr.has_bool_val())\n                val->set_bool_val(expr.bool_val());\n            if (expr.has_string_val())\n                val->set_string_val(expr.string_val());\n            if (expr.has_float_val())\n                val->set_float_val(expr.float_val());\n            if (expr.has_int64_val())\n                val->set_int64_val(expr.int64_val());\n        }\n\n        json_contain_expr->set_elements_same_type(\n            elem.expr->value_expr().value().array_val().same_type());\n        json_contain_expr->unsafe_arena_set_allocated_column_info(\n            CreateMessageWithCopy<proto::plan::ColumnInfo>(this->arena.get(),\n                                                           info));\n        json_contain_expr->set_op(\n            proto::plan::JSONContainsExpr_JSONOp_ContainsAny);\n        expr->unsafe_arena_set_allocated_json_contains_expr(json_contain_expr);\n\n        return ExprWithDtype(expr, proto::schema::Bool, false);\n    }\n\n    virtual std::any\n    visitExists(PlanParser::ExistsContext* ctx) override {\n        auto a = std::any_cast<ExprWithDtype>(ctx->expr());\n        auto info = a.expr->column_expr().info();\n        TRY_WITH_EXCEPTION(info.data_type() == proto::schema::DataType::Array);\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n\n        auto col_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::ColumnExpr>(\n                this->arena.get());\n        col_expr->unsafe_arena_set_allocated_info(\n            CreateMessageWithCopy<proto::plan::ColumnInfo>(this->arena.get(),\n                                                           info));\n        expr->unsafe_arena_set_allocated_column_expr(col_expr);\n        return ExprWithDtype(expr, proto::schema::DataType::Bool, false);\n    }\n\n    virtual std::any\n    visitEmptyTerm(PlanParser::EmptyTermContext* ctx) override {\n        auto first = std::any_cast<ExprWithDtype>(ctx->expr()->accept(this));\n        auto info = first.expr->column_expr().info();\n\n        auto expr = google::protobuf::Arena::CreateMessage<proto::plan::Expr>(\n            this->arena.get());\n        auto col_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::ColumnExpr>(\n                this->arena.get());\n        auto term_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::TermExpr>(\n                this->arena.get());\n\n        expr->unsafe_arena_set_allocated_term_expr(term_expr);\n        col_expr->unsafe_arena_set_allocated_info(\n            CreateMessageWithCopy<proto::plan::ColumnInfo>(this->arena.get(),\n                                                           info));\n        expr->unsafe_arena_set_allocated_column_expr(col_expr);\n        expr->unsafe_arena_set_allocated_term_expr(term_expr);\n        return ExprWithDtype(expr, proto::schema::DataType::Bool, false);\n    }\n\n    PlanCCVisitor(SchemaHelper* const helper)\n        : helper(helper), arena(std::make_shared<google::protobuf::Arena>()) {\n    }\n\n private:\n    SchemaHelper* helper;\n    std::shared_ptr<google::protobuf::Arena> arena;\n};\n\nstd::string\nParserToMessage(milvus::proto::schema::CollectionSchema& schema,\n                const std::string& exprstr);\n\nstd::shared_ptr<milvus::proto::plan::Expr>\nParseIdentifier(milvus::local::SchemaHelper helper,\n                const std::string& identifier);\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/parser/utils.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n#include <iomanip>\n#include <any>\n#include <iostream>\n#include <optional>\n#include <string>\n#include \"antlr/PlanBaseVisitor.h\"\n#include \"antlr/PlanLexer.h\"\n#include \"antlr/PlanParser.h\"\n#include \"pb/plan.pb.h\"\n\nnamespace milvus::local {\n\nclass Exception : public std::exception {\n public:\n    explicit Exception(const std::string& msg) : msg_(msg) {\n    }\n\n    const char*\n    what() const noexcept override {\n        return msg_.c_str();\n    }\n\n private:\n    std::string msg_;\n};\n\n#define TRY_WITH_EXCEPTION(call)    \\\n    do {                            \\\n        if (!(call)) {              \\\n            throw Exception(#call); \\\n        }                           \\\n    } while (0)\n\ntemplate <typename T>\ninline T*\nCreateMessageWithCopy(google::protobuf::Arena* arena, const T& val) {\n    T* ret = google::protobuf::Arena::CreateMessage<T>(arena);\n    ret->CopyFrom(val);\n    return ret;\n}\n\nstruct ExprWithDtype {\n    proto::plan::Expr* expr;\n    proto::schema::DataType dtype;\n    bool dependent;\n    ExprWithDtype(proto::plan::Expr* const expr,\n                  proto::schema::DataType dtype,\n                  bool dependent)\n        : expr(expr), dtype(dtype), dependent(dependent) {\n    }\n};\n\ninline std::any\nextractValue(proto::plan::Expr* expr) {\n    if (!expr->has_value_expr())\n        return nullptr;\n\n    if (!expr->value_expr().has_value())\n        return nullptr;\n    if (expr->value_expr().value().has_bool_val())\n        return expr->value_expr().value().bool_val();\n    if (expr->value_expr().value().has_float_val())\n        return expr->value_expr().value().float_val();\n    if (expr->value_expr().value().has_string_val())\n        return expr->value_expr().value().string_val();\n    if (expr->value_expr().value().has_int64_val())\n        return expr->value_expr().value().int64_val();\n\n    return nullptr;\n}\n\ntemplate <typename T>\ninline proto::plan::Expr*\ncreateValueExpr(const T val, google::protobuf::Arena* arena = nullptr) {\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n    auto val_expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::ValueExpr>(arena);\n    auto value =\n        google::protobuf::Arena::CreateMessage<proto::plan::GenericValue>(\n            arena);\n    if constexpr (std::is_same_v<T, int64_t>)\n        value->set_int64_val(val);\n    else if constexpr (std::is_same_v<T, int8_t>)\n        value->set_int64_val(int64_t(val));\n    else if constexpr (std::is_same_v<T, int32_t>)\n        value->set_int64_val(int64_t(val));\n    else if constexpr (std::is_same_v<T, int16_t>)\n        value->set_int64_val(int16_t(val));\n    else if constexpr (std::is_same_v<T, std::string>)\n        value->set_string_val(val);\n    else if constexpr (std::is_same_v<T, double> || std::is_same_v<T, float>)\n        value->set_float_val(val);\n    else if constexpr (std::is_same_v<T, bool>)\n        value->set_bool_val(val);\n    else\n        TRY_WITH_EXCEPTION(false);\n\n    val_expr->unsafe_arena_set_allocated_value(value);\n    expr->unsafe_arena_set_allocated_value_expr(val_expr);\n    return expr;\n}\n\ninline std::vector<std::string>\ntokenize(std::string s, std::string del = \" \") {\n    std::vector<std::string> results;\n    int start, end = -1 * del.size();\n    do {\n        start = end + del.size();\n        end = s.find(del, start);\n        results.push_back(s.substr(start, end - start));\n    } while (end != -1);\n    return results;\n}\n\ntemplate <proto::plan::BinaryExpr_BinaryOp T>\ninline proto::plan::Expr*\ncreateBinExpr(proto::plan::Expr* left,\n              proto::plan::Expr* right,\n              google::protobuf::Arena* arena = nullptr) {\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n    auto bin_expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::BinaryExpr>(arena);\n    bin_expr->set_op(T);\n    bin_expr->unsafe_arena_set_allocated_left(left);\n    bin_expr->unsafe_arena_set_allocated_right(right);\n    expr->unsafe_arena_set_allocated_binary_expr(bin_expr);\n    return expr;\n}\n\ntemplate <proto::plan::ArithOpType T>\ninline proto::plan::Expr*\ncreateBinArithExpr(proto::plan::Expr* left,\n                   proto::plan::Expr* right,\n                   google::protobuf::Arena* arena = nullptr) {\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n    auto bin_expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::BinaryArithExpr>(\n            arena);\n    bin_expr->set_op(T);\n    bin_expr->unsafe_arena_set_allocated_left(left);\n    bin_expr->unsafe_arena_set_allocated_right(right);\n    expr->unsafe_arena_set_allocated_binary_arith_expr(bin_expr);\n    return expr;\n}\n\ninline bool\narithmeticDtype(proto::schema::DataType type) {\n    switch (type) {\n        case proto::schema::DataType::Float:\n            return true;\n        case proto::schema::DataType::Double:\n            return true;\n        case proto::schema::DataType::Int8:\n            return true;\n        case proto::schema::DataType::Int16:\n            return true;\n        case proto::schema::DataType::Int32:\n            return true;\n        case proto::schema::DataType::Int64:\n            return true;\n        default:\n            return false;\n    }\n}\n\ninline proto::schema::DataType\ngetArrayElementType(proto::plan::Expr* expr) {\n    if (expr->has_column_expr()) {\n        return expr->column_expr().info().element_type();\n    }\n    if (expr->has_value_expr() && expr->value_expr().has_value() &&\n        expr->value_expr().value().has_array_val()) {\n        return expr->value_expr().value().array_val().element_type();\n    }\n\n    return proto::schema::DataType::None;\n}\n\ninline bool\ncanArithmeticDtype(proto::schema::DataType left_type,\n                   proto::schema::DataType right_type) {\n    if (left_type == proto::schema::DataType::JSON &&\n        right_type == proto::schema::DataType::JSON)\n        return false;\n    if (left_type == proto::schema::DataType::JSON &&\n        arithmeticDtype(right_type))\n        return true;\n    if (arithmeticDtype(left_type) &&\n        right_type == proto::schema::DataType::JSON)\n        return true;\n    if (arithmeticDtype(left_type) && arithmeticDtype(right_type))\n        return true;\n    return false;\n}\n\ninline proto::schema::DataType\ncalDataType(ExprWithDtype* a, ExprWithDtype* b) {\n    auto a_dtype = a->dtype;\n    auto b_dtype = b->dtype;\n    if (a->dtype == proto::schema::DataType::Array) {\n        a_dtype = getArrayElementType(a->expr);\n    }\n    if (b->dtype == proto::schema::DataType::Array) {\n        b_dtype = getArrayElementType(b->expr);\n    }\n    if (a_dtype == proto::schema::DataType::JSON) {\n        if (b_dtype == proto::schema::DataType::Float ||\n            b_dtype == proto::schema::DataType::Double)\n            return proto::schema::DataType::Float;\n        if (b_dtype == proto::schema::DataType::Int8 ||\n            b_dtype == proto::schema::DataType::Int16 ||\n            b_dtype == proto::schema::DataType::Int32 ||\n            b_dtype == proto::schema::DataType::Int64)\n            return proto::schema::DataType::Int64;\n        if (b_dtype == proto::schema::DataType::JSON)\n            return proto::schema::DataType::JSON;\n    }\n\n    if (a_dtype == proto::schema::DataType::Float ||\n        a_dtype == proto::schema::DataType::Double) {\n        if (b_dtype == proto::schema::DataType::JSON)\n            return proto::schema::DataType::Double;\n        if (arithmeticDtype(b_dtype))\n            return proto::schema::DataType::Double;\n    }\n\n    if (a_dtype == proto::schema::DataType::Int8 ||\n        a_dtype == proto::schema::DataType::Int16 ||\n        a_dtype == proto::schema::DataType::Int32 ||\n        a_dtype == proto::schema::DataType::Int64) {\n        if (b_dtype == proto::schema::DataType::Float ||\n            b_dtype == proto::schema::DataType::Double)\n            return proto::schema::DataType::Double;\n        if (b_dtype == proto::schema::DataType::Int8 ||\n            b_dtype == proto::schema::DataType::Int16 ||\n            b_dtype == proto::schema::DataType::Int32 ||\n            b_dtype == proto::schema::DataType::Int64 ||\n            b_dtype == proto::schema::DataType::JSON)\n            return proto::schema::DataType::Int64;\n    }\n    TRY_WITH_EXCEPTION(false);\n}\n\nstruct SchemaHelper {\n    SchemaHelper() = default;\n\n    proto::schema::CollectionSchema* schema = nullptr;\n    std::map<std::string, int> name_offset;\n    std::map<int64_t, int> id_offset;\n\n    int primary_key_offset = -1;\n    int partition_key_offset = -1;\n\n    const proto::schema::FieldSchema&\n    GetPrimaryKeyField() {\n        TRY_WITH_EXCEPTION(primary_key_offset != -1);\n        return schema->fields(primary_key_offset);\n    }\n\n    const proto::schema::FieldSchema&\n    GetPartitionKeyField() {\n        TRY_WITH_EXCEPTION(partition_key_offset != -1);\n        return schema->fields(partition_key_offset);\n    }\n\n    const proto::schema::FieldSchema&\n    GetFieldFromName(const std::string& name) {\n        auto it = name_offset.find(name);\n        TRY_WITH_EXCEPTION(it != name_offset.end());\n        return schema->fields(it->second);\n    }\n\n    const proto::schema::FieldSchema&\n    GetFieldFromNameDefaultJSON(const std::string& name) {\n        auto it = name_offset.find(name);\n        if (it == name_offset.end()) {\n            return GetDefaultJSONField();\n        }\n        return schema->fields(it->second);\n    }\n\n    const proto::schema::FieldSchema&\n    GetDefaultJSONField() {\n        for (int i = 0; i < schema->fields_size(); ++i) {\n            auto& field = schema->fields(i);\n            if (field.data_type() == proto::schema::DataType::JSON &&\n                field.is_dynamic())\n                return field;\n        }\n\n        TRY_WITH_EXCEPTION(false);\n    }\n\n    const proto::schema::FieldSchema&\n    GetFieldFromID(int64_t id) {\n        auto it = id_offset.find(id);\n        TRY_WITH_EXCEPTION(it != id_offset.end());\n        return schema->fields(it->second);\n    }\n\n    int\n    GetVectorDimFromID(int64_t id) {\n        auto& field = GetFieldFromID(id);\n        if (field.data_type() != proto::schema::DataType::FloatVector &&\n            field.data_type() != proto::schema::DataType::Float16Vector &&\n            field.data_type() != proto::schema::DataType::BinaryVector &&\n            field.data_type() != proto::schema::DataType::BFloat16Vector) {\n            TRY_WITH_EXCEPTION(false);\n        }\n        for (int i = 0; i < field.type_params_size(); ++i) {\n            if (field.type_params(i).key() == \"dim\")\n                return std::stoi(\n                    field.type_params(i).value().c_str(), NULL, 10);\n        }\n        TRY_WITH_EXCEPTION(false);\n    }\n};\n\ninline SchemaHelper\nCreateSchemaHelper(proto::schema::CollectionSchema* schema) {\n    TRY_WITH_EXCEPTION(schema);\n    SchemaHelper schema_helper;\n    schema_helper.schema = schema;\n    for (int i = 0; i < schema->fields_size(); ++i) {\n        auto field = schema->fields(i);\n        auto it = schema_helper.name_offset.find(field.name());\n        if (it != schema_helper.name_offset.end())\n            TRY_WITH_EXCEPTION(false);\n        schema_helper.name_offset[field.name()] = i;\n        schema_helper.id_offset[field.fieldid()] = i;\n        if (field.is_primary_key()) {\n            TRY_WITH_EXCEPTION(schema_helper.primary_key_offset == -1);\n            schema_helper.primary_key_offset = i;\n        }\n        if (field.is_partition_key()) {\n            TRY_WITH_EXCEPTION(schema_helper.primary_key_offset == -1);\n            schema_helper.partition_key_offset = i;\n        }\n    }\n    return schema_helper;\n}\n\ninline std::string\nconvertEscapeSingle(const std::string& in) {\n    std::vector<size_t> need_replace_index;\n    size_t escape_ch_count = 0;\n    size_t in_string_lenth = in.length();\n    for (size_t i = 1; i < in_string_lenth - 1; ++i) {\n        if (in[i] == '\\\\') {\n            escape_ch_count++;\n            continue;\n        }\n        if (in[i] == '\"' && escape_ch_count % 2 == 0) {\n            need_replace_index.push_back(i);\n        }\n\n        if (in[i] == '\\'' && escape_ch_count % 2 != 0) {\n            need_replace_index.push_back(i);\n        }\n\n        escape_ch_count = 0;\n    }\n\n    std::string in_;\n    in_ += '\"';\n    size_t start = 1;\n    for (auto end : need_replace_index) {\n        if (in[end] == '\"') {\n            in_ += in.substr(start, end - start);\n            in_ += \"\\\\\\\"\";\n        } else {\n            in_ += in.substr(start, end - start - 1);\n            in_ += '\\'';\n        }\n        start = end + 1;\n    }\n\n    in_ += in.substr(start, in.length() - start - 1);\n\n    in_ += '\"';\n    std::stringstream ss;\n    ss << in_;\n    std::string out;\n    ss >> std::quoted(out);\n\n    return out;\n}\n\ninline bool\nhasWildcards(std::string pattern) {\n    int64_t l = pattern.length();\n    int64_t i = l - 1;\n    for (; i >= 0; i--) {\n        if (pattern[i] == '%' || pattern[i] == '_') {\n            if (i > 0 && pattern[i - 1] == '\\\\') {\n                i--;\n                continue;\n            }\n            return true;\n        }\n    }\n    return false;\n}\n\ninline int\nfindLastNotOfWildcards(std::string pattern) {\n    int loc = pattern.length() - 1;\n    for (; loc >= 0; loc--) {\n        if (pattern[loc] == '%' || pattern[loc] == '_') {\n            if (loc > 0 && pattern[loc - 1] == '\\\\') {\n                break;\n            }\n        } else {\n            break;\n        }\n    }\n    return loc;\n}\n\ninline std::pair<proto::plan::OpType, std::string>\ntranslatePatternMatch(const std::string& pattern) {\n    size_t l = pattern.length();\n    size_t loc = findLastNotOfWildcards(pattern);\n    if (loc < 0) {\n        return std::make_pair(proto::plan::OpType::PrefixMatch, \"\");\n    }\n    bool exist = hasWildcards(pattern.substr(0, loc + 1));\n\n    if (loc >= l - 1 && !exist) {\n        return std::make_pair(proto::plan::OpType::Equal, pattern);\n    }\n\n    if (!exist) {\n        return std::make_pair(proto::plan::OpType::PrefixMatch,\n                              pattern.substr(0, loc + 1));\n    }\n\n    return std::make_pair(proto::plan::OpType::Match, pattern);\n}\n\ninline bool\ncanBeComparedDataType(proto::schema::DataType a, proto::schema::DataType b) {\n    switch (a) {\n        case proto::schema::DataType::Bool:\n            return (b == proto::schema::DataType::Bool) ||\n                   (b == proto::schema::DataType::JSON);\n        case proto::schema::DataType::Int8:\n            return arithmeticDtype(b) || (b == proto::schema::DataType::JSON);\n        case proto::schema::DataType::Int16:\n            return arithmeticDtype(b) || (b == proto::schema::DataType::JSON);\n        case proto::schema::DataType::Int32:\n            return arithmeticDtype(b) || (b == proto::schema::DataType::JSON);\n        case proto::schema::DataType::Int64:\n            return arithmeticDtype(b) || (b == proto::schema::DataType::JSON);\n        case proto::schema::DataType::Float:\n            return arithmeticDtype(b) || (b == proto::schema::DataType::JSON);\n        case proto::schema::DataType::Double:\n            return arithmeticDtype(b) || (b == proto::schema::DataType::JSON);\n        case proto::schema::DataType::VarChar:\n            return b == proto::schema::DataType::String ||\n                   b == proto::schema::DataType::VarChar ||\n                   b == proto::schema::DataType::JSON;\n        case proto::schema::DataType::String:\n            return b == proto::schema::DataType::String ||\n                   b == proto::schema::DataType::VarChar ||\n                   b == proto::schema::DataType::JSON;\n        case proto::schema::DataType::JSON:\n            return true;\n        default:\n            return false;\n    }\n}\n\ninline bool\ncanBeCompared(ExprWithDtype a, ExprWithDtype b) {\n    if (a.dtype != proto::schema::DataType::Array &&\n        b.dtype != proto::schema::DataType::Array) {\n        return canBeComparedDataType(a.dtype, b.dtype);\n    }\n\n    if (a.dtype == proto::schema::DataType::Array &&\n        b.dtype == proto::schema::DataType::Array) {\n        return canBeComparedDataType(getArrayElementType(a.expr),\n                                     getArrayElementType(b.expr));\n    }\n\n    if (a.dtype == proto::schema::DataType::Array) {\n        return canBeComparedDataType(getArrayElementType(a.expr), b.dtype);\n    }\n\n    return canBeComparedDataType(b.dtype, getArrayElementType(b.expr));\n}\n\ninline ExprWithDtype\ntoValueExpr(proto::plan::GenericValue* value,\n            google::protobuf::Arena* arena = nullptr) {\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n\n    auto value_expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::ValueExpr>(arena);\n    value_expr->unsafe_arena_set_allocated_value(value);\n\n    expr->unsafe_arena_set_allocated_value_expr(value_expr);\n    if (value->has_bool_val()) {\n        return ExprWithDtype(expr, proto::schema::DataType::Bool, false);\n    }\n    if (value->has_int64_val()) {\n        return ExprWithDtype(expr, proto::schema::DataType::Int64, false);\n    }\n    if (value->has_float_val()) {\n        return ExprWithDtype(expr, proto::schema::DataType::Float, false);\n    }\n    if (value->has_string_val()) {\n        return ExprWithDtype(expr, proto::schema::DataType::VarChar, false);\n    }\n    if (value->has_array_val()) {\n        return ExprWithDtype(expr, proto::schema::DataType::Array, false);\n    }\n    TRY_WITH_EXCEPTION(false);\n}\n\ninline proto::plan::GenericValue*\ncastValue(proto::schema::DataType dtype,\n          proto::plan::GenericValue* value,\n          google::protobuf::Arena* arena = nullptr) {\n    if (dtype == proto::schema::DataType::JSON)\n        return CreateMessageWithCopy<proto::plan::GenericValue>(arena, *value);\n    if (dtype == proto::schema::DataType::Array && value->has_array_val())\n        return CreateMessageWithCopy<proto::plan::GenericValue>(arena, *value);\n    if ((dtype == proto::schema::DataType::VarChar ||\n         dtype == proto::schema::DataType::String) &&\n        value->has_string_val())\n        return CreateMessageWithCopy<proto::plan::GenericValue>(arena, *value);\n\n    if (dtype == proto::schema::DataType::Bool && value->has_bool_val())\n        return CreateMessageWithCopy<proto::plan::GenericValue>(arena, *value);\n\n    if (dtype == proto::schema::DataType::Float ||\n        dtype == proto::schema::DataType::Double) {\n        if (value->has_float_val())\n            return CreateMessageWithCopy<proto::plan::GenericValue>(arena,\n                                                                    *value);\n        ;\n        if (value->has_int64_val()) {\n            auto value_tmp = google::protobuf::Arena::CreateMessage<\n                proto::plan::GenericValue>(arena);\n            value_tmp->set_float_val(double(value->int64_val()));\n            return value_tmp;\n        }\n    }\n\n    if (dtype == proto::schema::DataType::Int8 ||\n        dtype == proto::schema::DataType::Int16 ||\n        dtype == proto::schema::DataType::Int32 ||\n        dtype == proto::schema::DataType::Int64) {\n        if (value->has_int64_val())\n            return CreateMessageWithCopy<proto::plan::GenericValue>(arena,\n                                                                    *value);\n    }\n\n    TRY_WITH_EXCEPTION(false);\n}\n\ninline proto::plan::Expr*\ncombineArrayLengthExpr(proto::plan::OpType op,\n                       proto::plan::ArithOpType arith_op,\n                       const proto::plan::ColumnInfo& info,\n                       const proto::plan::GenericValue& value,\n                       google::protobuf::Arena* arena = nullptr) {\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n    auto range_expr = google::protobuf::Arena::CreateMessage<\n        proto::plan::BinaryArithOpEvalRangeExpr>(arena);\n    expr->unsafe_arena_set_allocated_binary_arith_op_eval_range_expr(\n        range_expr);\n    range_expr->set_op(op);\n    range_expr->set_arith_op(arith_op);\n    range_expr->unsafe_arena_set_allocated_value(\n        CreateMessageWithCopy<proto::plan::GenericValue>(arena, value));\n    range_expr->unsafe_arena_set_allocated_column_info(\n        CreateMessageWithCopy<proto::plan::ColumnInfo>(arena, info));\n    return expr;\n}\n\ninline proto::plan::Expr*\ncombineBinaryArithExpr(proto::plan::OpType op,\n                       proto::plan::ArithOpType arith_op,\n                       const proto::plan::ColumnInfo& info,\n                       const proto::plan::GenericValue& operand,\n                       const proto::plan::GenericValue& value,\n                       google::protobuf::Arena* arena = nullptr) {\n    auto data_type = info.data_type();\n    if (data_type != proto::schema::DataType::Array &&\n        info.nested_path_size() != 0) {\n        data_type = info.element_type();\n    }\n    auto casted_value = castValue(\n        data_type,\n        CreateMessageWithCopy<proto::plan::GenericValue>(arena, operand));\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n    auto range_expr = google::protobuf::Arena::CreateMessage<\n        proto::plan::BinaryArithOpEvalRangeExpr>(arena);\n    expr->unsafe_arena_set_allocated_binary_arith_op_eval_range_expr(\n        range_expr);\n    range_expr->unsafe_arena_set_allocated_column_info(\n        CreateMessageWithCopy<proto::plan::ColumnInfo>(arena, info)\n\n    );\n    range_expr->set_arith_op(arith_op);\n    range_expr->unsafe_arena_set_allocated_right_operand(casted_value);\n    range_expr->unsafe_arena_set_allocated_value(\n        CreateMessageWithCopy<proto::plan::GenericValue>(arena, value));\n    range_expr->set_op(op);\n\n    return expr;\n}\n\ninline proto::plan::Expr*\nhandleBinaryArithExpr(proto::plan::OpType op,\n                      proto::plan::BinaryArithExpr* arith_expr,\n                      proto::plan::ValueExpr* value_expr,\n                      google::protobuf::Arena* arena = nullptr) {\n    switch (op) {\n        case proto::plan::OpType::Equal:\n            break;\n        case proto::plan::OpType::NotEqual:\n            break;\n        default:\n            TRY_WITH_EXCEPTION(false);\n    }\n\n    auto left_expr = arith_expr->left().column_expr();\n    auto left_value = arith_expr->left().value_expr();\n    auto right_expr = arith_expr->right().column_expr();\n    auto right_value = arith_expr->right().value_expr();\n\n    auto arith_op = arith_expr->op();\n\n    if (arith_op == proto::plan::ArithOpType::ArrayLength) {\n        return combineArrayLengthExpr(\n            op, arith_op, left_expr.info(), value_expr->value(), arena);\n    }\n    if (arith_expr->left().has_column_expr() &&\n        arith_expr->right().has_column_expr()) {\n        TRY_WITH_EXCEPTION(false);\n    }\n    if (arith_expr->left().has_value_expr() &&\n        arith_expr->right().has_value_expr()) {\n        TRY_WITH_EXCEPTION(false);\n    }\n    if (arith_expr->left().has_column_expr() &&\n        arith_expr->right().has_value_expr()) {\n        return combineBinaryArithExpr(op,\n                                      arith_op,\n                                      left_expr.info(),\n                                      right_value.value(),\n                                      value_expr->value(),\n                                      arena);\n    }\n    if (arith_expr->right().has_column_expr() &&\n        arith_expr->left().has_value_expr()) {\n        switch (arith_expr->op()) {\n            case proto::plan::ArithOpType::Add:\n                return combineBinaryArithExpr(op,\n                                              arith_op,\n                                              right_expr.info(),\n                                              left_value.value(),\n                                              value_expr->value(),\n                                              arena);\n            case proto::plan::ArithOpType::Mul:\n                return combineBinaryArithExpr(op,\n                                              arith_op,\n                                              right_expr.info(),\n                                              left_value.value(),\n                                              value_expr->value(),\n                                              arena);\n            default:\n                TRY_WITH_EXCEPTION(false);\n        }\n    }\n    TRY_WITH_EXCEPTION(false);\n}\n\ninline proto::plan::Expr*\nhandleCompareRightValue(proto::plan::OpType op,\n                        ExprWithDtype a,\n                        ExprWithDtype b,\n                        google::protobuf::Arena* arena = nullptr) {\n    auto data_type = a.dtype;\n    if (data_type == proto::schema::DataType::Array &&\n        a.expr->column_expr().info().nested_path_size() != 0) {\n        data_type = a.expr->column_expr().info().element_type();\n    }\n    auto value = b.expr->value_expr().value();\n    auto castedvalue = castValue(data_type, &value, arena);\n    if (a.expr->has_binary_arith_expr()) {\n        auto value_expr =\n            google::protobuf::Arena::CreateMessage<proto::plan::ValueExpr>(\n                arena);\n        value_expr->unsafe_arena_set_allocated_value(castedvalue);\n        return handleBinaryArithExpr(\n            op,\n            CreateMessageWithCopy<proto::plan::BinaryArithExpr>(\n                arena, a.expr->binary_arith_expr()),\n            value_expr,\n            arena);\n    }\n\n    TRY_WITH_EXCEPTION(a.expr->has_column_expr());\n    auto info = a.expr->column_expr().info();\n\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n    auto unary_range_expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::UnaryRangeExpr>(\n            arena);\n\n    unary_range_expr->set_op(op);\n    unary_range_expr->unsafe_arena_set_allocated_column_info(\n        CreateMessageWithCopy<proto::plan::ColumnInfo>(arena, info));\n\n    unary_range_expr->unsafe_arena_set_allocated_value(castedvalue);\n\n    expr->unsafe_arena_set_allocated_unary_range_expr(unary_range_expr);\n\n    return expr;\n}\n\ninline proto::plan::Expr*\nHandleCompare(proto::plan::OpType op,\n              ExprWithDtype a,\n              ExprWithDtype b,\n              google::protobuf::Arena* arena = nullptr) {\n    TRY_WITH_EXCEPTION(a.expr->has_column_expr() && b.expr->has_column_expr());\n\n    auto a_info = a.expr->column_expr().info();\n\n    auto b_info = b.expr->column_expr().info();\n\n    auto expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::Expr>(arena);\n    auto compare_expr =\n        google::protobuf::Arena::CreateMessage<proto::plan::CompareExpr>(arena);\n    compare_expr->unsafe_arena_set_allocated_left_column_info(\n        CreateMessageWithCopy<proto::plan::ColumnInfo>(arena, a_info));\n    compare_expr->unsafe_arena_set_allocated_right_column_info(\n        CreateMessageWithCopy<proto::plan::ColumnInfo>(arena, b_info));\n    compare_expr->set_op(op);\n    expr->unsafe_arena_set_allocated_compare_expr(compare_expr);\n\n    return expr;\n}\n\ninline proto::plan::OpType\nreverseOrder(proto::plan::OpType op) {\n    switch (op) {\n        case proto::plan::OpType::LessThan:\n            return proto::plan::OpType::GreaterThan;\n        case proto::plan::OpType::LessEqual:\n            return proto::plan::OpType::GreaterEqual;\n        case proto::plan::OpType::GreaterThan:\n            return proto::plan::OpType::LessThan;\n        case proto::plan::OpType::GreaterEqual:\n            return proto::plan::OpType::LessEqual;\n        case proto::plan::OpType::Equal:\n            return proto::plan::OpType::NotEqual;\n        case proto::plan::OpType::NotEqual:\n            return proto::plan::OpType::Equal;\n        default:\n            return proto::plan::OpType::Invalid;\n    }\n}\n\ninline proto::plan::Expr*\nHandleCompare(int op,\n              ExprWithDtype a,\n              ExprWithDtype b,\n              google::protobuf::Arena* arena = nullptr) {\n    TRY_WITH_EXCEPTION(canBeCompared(a, b));\n    std::map<int, proto::plan::OpType> cmpOpMap{\n        {PlanParser::LT, proto::plan::OpType::LessThan},\n        {PlanParser::LE, proto::plan::OpType::LessEqual},\n        {PlanParser::GT, proto::plan::OpType::GreaterThan},\n        {PlanParser::GE, proto::plan::OpType::GreaterEqual},\n        {PlanParser::EQ, proto::plan::OpType::Equal},\n        {PlanParser::NE, proto::plan::OpType::NotEqual}};\n    auto cmpop = cmpOpMap[op];\n    if (a.expr->has_value_expr()) {\n        auto op = reverseOrder(cmpop);\n        return handleCompareRightValue(op, b, a, arena);\n    } else if (b.expr->has_value_expr()) {\n        return handleCompareRightValue(cmpop, a, b, arena);\n    }\n\n    return HandleCompare(cmpop, a, b, arena);\n}\n\ninline bool\ncheckDirectComparisonBinaryField(proto::plan::ColumnInfo* info) {\n    if (info->data_type() == proto::schema::DataType::Array &&\n        info->nested_path_size() == 0) {\n        return false;\n    }\n    return true;\n}\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/query_task.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"query_task.h\"\n#include <cstdint>\n#include <tuple>\n#include <vector>\n#include \"antlr4-runtime.h\"\n#include \"parser/parser.h\"\n#include \"parser/utils.h\"\n#include \"common.h\"\n#include \"pb/plan.pb.h\"\n#include \"schema.pb.h\"\n#include \"schema_util.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n#include \"pb/segcore.pb.h\"\n#include \"log/Log.h\"\n\nnamespace milvus::local {\n\nQueryTask::QueryTask(const ::milvus::proto::milvus::QueryRequest* query_request,\n                     const ::milvus::proto::schema::CollectionSchema* schema)\n    : query_request_(query_request),\n      schema_(schema),\n      limit_(-1),\n      offset_(0),\n      is_count_(false) {\n}\nQueryTask::~QueryTask() {\n}\n\nbool\nQueryTask::GetOutputFieldIds(std::vector<int64_t>* ids) {\n    if (output_fields_.size() == 0) {\n        for (const auto& field : schema_->fields()) {\n            if (field.fieldid() >= kStartOfUserFieldId &&\n                !schema_util::IsVectorField(field.data_type())) {\n                ids->push_back(field.fieldid());\n            }\n        }\n    } else {\n        std::string pk;\n        std::map<std::string, int64_t> name_ids;\n        for (const auto& field : schema_->fields()) {\n            name_ids[field.name()] = field.fieldid();\n            if (field.is_primary_key()) {\n                pk = field.name();\n                ids->push_back(field.fieldid());\n            }\n        }\n        for (const auto& output_field : output_fields_) {\n            if (output_field == pk)\n                continue;\n            auto it = name_ids.find(output_field);\n            if (it == name_ids.end()) {\n                LOG_ERROR(\"Can not find output field {} in schema\",\n                          output_field);\n                return false;\n            }\n            if (it->second >= kStartOfUserFieldId) {\n                ids->push_back(it->second);\n            }\n        }\n    }\n    return true;\n}\n\nStatus\nQueryTask::ParseQueryParams(::milvus::proto::plan::PlanNode* plan,\n                            bool expr_empty) {\n    for (const auto& param : query_request_->query_params()) {\n        if (param.key() == kLimitKey) {\n            try {\n                limit_ = std::stoll(param.value());\n            } catch (std::exception& e) {\n                auto err = string_util::SFormat(\"Parse limit failed, limit: {}\",\n                                                param.value());\n                return Status::ParameterInvalid(err);\n            }\n        } else if (param.key() == kOffsetKey) {\n            try {\n                offset_ = std::stoll(param.value());\n            } catch (std::exception& e) {\n                auto err = string_util::SFormat(\n                    \"Parse offset failed, offset: {}\", param.value());\n                return Status::ParameterInvalid(err);\n            }\n        } else if (param.key() == kReduceStopForBestKey) {\n            // not used in local\n        }\n    }\n    if (offset_ < 0 || offset_ > kTopkLimit) {\n        return Status::ParameterInvalid(\n            \"Offset should be in range [0, {}], but got {}\",\n            kTopkLimit,\n            offset_);\n    }\n\n    if (limit_ <= 0) {\n        if (is_count_) {\n            limit_ = -1;\n        } else if (expr_empty) {\n            return Status::ParameterInvalid(\n                \"empty expression should be used with limit\");\n        } else {\n            limit_ = kTopkLimit - offset_ - 1;\n        }\n    }\n\n    // get and validate topk\n    if (limit_ > kTopkLimit) {\n        return Status::ParameterInvalid(\n            \"limit should be in range [1, {}], but got {}\", kTopkLimit, limit_);\n    }\n\n    if ((limit_ + offset_) > kTopkLimit) {\n        return Status::ParameterInvalid(\n            \"topk + offset should be in range [1, {}], but got {}\",\n            kTopkLimit,\n            limit_ + offset_);\n    }\n    plan->mutable_query()->set_limit(limit_ + offset_);\n    return Status::Ok();\n}\n\nStatus\nQueryTask::Process(::milvus::proto::plan::PlanNode* plan) {\n    if (query_request_->output_fields_size() == 1 &&\n        string_util::Trim(string_util::ToLower(\n            query_request_->output_fields().Get(0))) == kCountStr) {\n        plan->mutable_query()->set_is_count(true);\n        is_count_ = true;\n    }\n\n    CHECK_STATUS(\n        ParseQueryParams(plan, string_util::Trim(query_request_->expr()) == \"\"),\n        \"\");\n\n    CHECK_STATUS(\n        schema_util::ParseExpr(string_util::Trim(query_request_->expr()),\n                               *schema_,\n                               plan->mutable_query()->mutable_predicates()),\n        \"\");\n\n    if (is_count_) {\n        user_output_fields_.push_back(kCountStr);\n    } else {\n        if (!schema_util::TranslateOutputFields(query_request_->output_fields(),\n                                                *schema_,\n                                                true,\n                                                &output_fields_,\n                                                &user_output_fields_)) {\n            return Status::ParameterInvalid(\"Error output fields\");\n        }\n\n        std::vector<int64_t> output_ids;\n        if (!GetOutputFieldIds(&output_ids)) {\n            return Status::ParameterInvalid(\"Error output fields\");\n        }\n        for (auto id : output_ids) {\n            plan->add_output_field_ids(id);\n        }\n    }\n\n    return Status::Ok();\n}\n\nbool\nQueryTask::PostProcess(const RetrieveResult& rt,\n                       ::milvus::proto::milvus::QueryResults* ret) {\n    milvus::proto::segcore::RetrieveResults seg_ret;\n    seg_ret.ParseFromArray(rt.retrieve_result_.proto_blob,\n                           rt.retrieve_result_.proto_size);\n\n    if (is_count_) {\n        auto count_data = ret->add_fields_data();\n        count_data->CopyFrom(seg_ret.fields_data(0));\n        count_data->set_field_name(kCountStr);\n        ret->add_output_fields(kCountStr);\n        return true;\n    }\n\n    // reduce data by id\n    std::vector<::milvus::proto::schema::FieldData> reduced_fields;\n    int64_t ret_size = 0;\n    for (const auto& field_data : seg_ret.fields_data()) {\n        ::milvus::proto::schema::FieldData data;\n        if (!schema_util::ReduceFieldByIDs(\n                seg_ret.ids(), field_data, &data, &ret_size)) {\n            return false;\n        }\n        reduced_fields.push_back(data);\n    }\n\n    if (ret_size > offset_) {\n        for (const auto& field_data : reduced_fields) {\n            auto new_data = ret->add_fields_data();\n            new_data->set_field_id(field_data.field_id());\n            new_data->set_type(field_data.type());\n            new_data->set_field_name(field_data.field_name());\n            new_data->set_is_dynamic(field_data.is_dynamic());\n            auto limit = std::min(limit_, ret_size - offset_);\n            schema_util::SliceFieldData(\n                field_data,\n                std::vector<std::tuple<int64_t, int64_t>>{{offset_, limit}},\n                new_data);\n        }\n    } else {\n        for (const auto& field_schema : schema_->fields()) {\n            if (field_schema.fieldid() >= kStartOfUserFieldId) {\n                schema_util::FillEmptyField(field_schema,\n                                            ret->add_fields_data());\n            }\n        }\n    }\n\n    FillInFieldInfo(ret);\n    for (const auto& name : user_output_fields_) {\n        ret->add_output_fields(name);\n    }\n    return true;\n}\n\nvoid\nQueryTask::FillInFieldInfo(::milvus::proto::milvus::QueryResults* result_data) {\n    std::variant<::milvus::proto::schema::SearchResultData*,\n                 ::milvus::proto::milvus::QueryResults*>\n        result_var;\n    result_var = result_data;\n    schema_util::FillInFieldInfo(output_fields_, *schema_, result_var);\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/query_task.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include \"pb/milvus.pb.h\"\n#include \"pb/plan.pb.h\"\n#include <cstdint>\n#include <vector>\n\n#include \"retrieve_result.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nclass QueryTask : NonCopyableNonMovable {\n public:\n    QueryTask(const ::milvus::proto::milvus::QueryRequest* query_request,\n              const ::milvus::proto::schema::CollectionSchema*);\n    virtual ~QueryTask();\n\n    Status\n    Process(::milvus::proto::plan::PlanNode* plan);\n\n    bool\n    PostProcess(const RetrieveResult& rt,\n                ::milvus::proto::milvus::QueryResults* ret);\n\n private:\n    bool\n    GetOutputFieldIds(std::vector<int64_t>* ids);\n\n    void\n    FilterSystemField();\n\n    void\n    FillInFieldInfo(::milvus::proto::milvus::QueryResults* result_data);\n\n    Status\n    ParseQueryParams(::milvus::proto::plan::PlanNode* plan, bool expr_empty);\n\n private:\n    const ::milvus::proto::milvus::QueryRequest* query_request_;\n    const ::milvus::proto::schema::CollectionSchema* schema_;\n\n    std::vector<std::string> output_fields_;\n    std::vector<std::string> user_output_fields_;\n\n    int64_t limit_;\n    int64_t offset_;\n    bool is_count_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/re_scorer.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"re_scorer.h\"\n\n#include <cmath>\n#include <memory>\n#include \"nlohmann/json.hpp\"\n#include \"common.h\"\n#include \"log/Log.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\nconst int kDefaultRRFParamsValue = 60;\n\nvoid\nRRFScorer::ReScore(::milvus::proto::milvus::SearchResults* search_results) {\n    for (int i = 0; i < search_results->results().scores_size(); i++) {\n        search_results->mutable_results()->set_scores(i, 1.0 / (k_ + (i + 1)));\n    }\n}\n\nstd::function<float(float)>\nWeightedScorer::GetActivateFunc() {\n    auto metric_type = string_util::ToUpper(GetMetricType());\n    if (metric_type == kMetricsCosineName) {\n        return [](float distance) -> float { return (1 + distance) * 0.5; };\n    } else if (metric_type == KMetricsIPName) {\n        return [](float distance) -> float {\n            return 0.5 + static_cast<float>(\n                             std::atan(static_cast<double>(distance))) /\n                             M_PI;\n        };\n    } else {\n        return [](float distance) -> float {\n            return 1.0 - 2 *\n                             static_cast<float>(\n                                 std::atan(static_cast<double>(distance))) /\n                             M_PI;\n        };\n    }\n}\n\nvoid\nWeightedScorer::ReScore(\n    ::milvus::proto::milvus::SearchResults* search_results) {\n    auto activate_func = GetActivateFunc();\n    for (int i = 0; i < search_results->results().scores_size(); i++) {\n        float distance = search_results->results().scores(i);\n        search_results->mutable_results()->set_scores(\n            i, weight_ * activate_func(distance));\n    }\n}\n\nStatus\nNewReScorers(int req_cnt,\n             const ::google::protobuf::RepeatedPtrField<\n                 ::milvus::proto::common::KeyValuePair>& rank_params,\n             std::vector<std::unique_ptr<ReScorer>>* re_scorers) {\n    if (req_cnt == 0) {\n        return Status::Ok();\n    }\n\n    std::string rank_type, param_str;\n    for (const auto& pair : rank_params) {\n        if (pair.key() == kRankTypeKey) {\n            rank_type = string_util::Trim(pair.value());\n        } else if (pair.key() == kRankParamsKey) {\n            param_str = pair.value();\n        }\n    }\n    if (rank_type.empty()) {\n        LOG_INFO(\"rank strategy not specified, use rrf instead\");\n        for (int i = 0; i < req_cnt; i++) {\n            re_scorers->emplace_back(\n                std::make_unique<RRFScorer>(\"rrf\", kDefaultRRFParamsValue));\n        }\n    }\n\n    if (rank_type != kRRFRankTypeName && rank_type != kWeightedRankTypeName) {\n        return Status::ParameterInvalid(\"unsupported rank type {}\", rank_type);\n    }\n\n    if (param_str.empty()) {\n        return Status::ParameterInvalid(\"{} not found in rank_params\",\n                                        kRankParamsKey);\n    }\n\n    try {\n        nlohmann::json data = nlohmann::json::parse(param_str);\n        if (rank_type == kRRFRankTypeName) {\n            if (!data.contains(kRRFParamsKey)) {\n                return Status::ParameterInvalid(\"{} not found in rank_params\",\n                                                kRRFParamsKey);\n            }\n            if (!data[kRRFParamsKey].is_number()) {\n                return Status::ParameterInvalid(\n                    \"The type of rank param k should be float\");\n            }\n            double k = data[kRRFParamsKey];\n            if (k <= 0 || k >= 16384) {\n                return Status::ParameterInvalid(\n                    \"The rank params k should be in range (0, 16384)\");\n            }\n            for (int i = 0; i < req_cnt; i++) {\n                re_scorers->emplace_back(\n                    std::make_unique<RRFScorer>(\"rrf\", float(k)));\n            }\n        } else if (rank_type == kWeightedRankTypeName) {\n            if (!data.contains(kWeightsParamsKey)) {\n                return Status::ParameterInvalid(\"{} not found in rank_params\",\n                                                kWeightsParamsKey);\n            }\n            std::vector<float> weights;\n            if (data[kWeightsParamsKey].is_array()) {\n                for (const auto& weight : data[kWeightsParamsKey]) {\n                    if (weight.is_number()) {\n                        float w = weight;\n                        if (w < 0 || w > 1) {\n                            return Status::ParameterInvalid(\n                                \"rank param weight should be in range[0, 1]\");\n                        }\n                        weights.push_back(w);\n                    } else {\n                        return Status::ParameterInvalid(\n                            \"The type of rank param weight should be float\");\n                    }\n                }\n            } else {\n                return Status::ParameterInvalid(\n                    \"The weights param should be an array\");\n            }\n            if (req_cnt != weights.size()) {\n                return Status::ParameterInvalid(\n                    \"the length of weights param mismatch with ann search \"\n                    \"requests: invalid parameter[expected={}][actual={}]\",\n                    req_cnt,\n                    weights.size());\n            }\n\n            for (int i = 0; i < req_cnt; i++) {\n                re_scorers->emplace_back(\n                    std::make_unique<WeightedScorer>(\"rrf\", weights[i]));\n            }\n        } else {\n            return Status::ParameterInvalid(\"unsupported rank type {}\",\n                                            rank_type);\n        }\n    } catch (nlohmann::json::parse_error& e) {\n        auto err = string_util::SFormat(\"Index params err: {}\", e.what());\n        LOG_ERROR(err);\n        return Status::ParameterInvalid(err);\n    }\n\n    return Status::Ok();\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/re_scorer.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include \"common.h\"\n#include \"common.pb.h\"\n#include \"milvus.pb.h\"\n#include \"status.h\"\n#include <functional>\n#include <memory>\n#include <vector>\n\nnamespace milvus::local {\n\nusing RankType = int;\n\nconst RankType invalidRankType = 0;\nconst RankType rrfRankType = 1;\nconst RankType weightedRankType = 2;\nconst RankType udfExprRankType = 3;\n\nconst std::string kRRFRankTypeName(\"rrf\");\nconst std::string kWeightedRankTypeName(\"weighted\");\n\nconst std::string kRankTypeKey(\"strategy\");\nconst std::string kRankParamsKey(\"params\");\nconst std::string kRRFParamsKey(\"k\");\nconst std::string kWeightsParamsKey(\"weights\");\n\nclass ReScorer : NonCopyableNonMovable {\n public:\n    ReScorer(const std::string& name) : name_(name) {\n    }\n    virtual ~ReScorer() = default;\n\n public:\n    inline const std::string\n    Name() {\n        return name_;\n    }\n\n    virtual void\n    ReScore(::milvus::proto::milvus::SearchResults*) = 0;\n\n    virtual RankType\n    ScorerType() = 0;\n\n    inline void\n    SetMetricType(const std::string& metric_type) {\n        metric_type_ = metric_type;\n    }\n\n    inline const std::string\n    GetMetricType() {\n        return metric_type_;\n    }\n\n private:\n    std::string name_;\n    std::string metric_type_;\n};\n\nclass RRFScorer : public ReScorer {\n public:\n    RRFScorer(const std::string& name, float k) : ReScorer(name), k_(k) {\n    }\n    virtual ~RRFScorer() = default;\n\n public:\n    RankType\n    ScorerType() override {\n        return rrfRankType;\n    }\n    void\n    ReScore(::milvus::proto::milvus::SearchResults*) override;\n\n private:\n    float k_;\n};\n\nclass WeightedScorer : public ReScorer {\n public:\n    WeightedScorer(const std::string& name, float weight)\n        : ReScorer(name), weight_(weight) {\n    }\n    virtual ~WeightedScorer() = default;\n\n public:\n    RankType\n    ScorerType() override {\n        return weightedRankType;\n    }\n\n    void\n    ReScore(::milvus::proto::milvus::SearchResults*) override;\n\n private:\n    std::function<float(float)>\n    GetActivateFunc();\n\n private:\n    float weight_;\n};\n\nStatus\nNewReScorers(int req_cnt,\n             const ::google::protobuf::RepeatedPtrField<\n                 ::milvus::proto::common::KeyValuePair>& rank_params,\n             std::vector<std::unique_ptr<ReScorer>>* re_scorers);\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/retrieve_result.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include \"common.h\"\n#include \"segcore/segment_c.h\"\n\nnamespace milvus::local {\n\nclass RetrieveResult final : NonCopyableNonMovable {\n public:\n    RetrieveResult() {\n        retrieve_result_.proto_blob = nullptr;\n        retrieve_result_.proto_size = 0;\n    }\n    ~RetrieveResult() {\n        if (retrieve_result_.proto_blob != nullptr) {\n            delete[] static_cast<uint8_t*>(\n                const_cast<void*>(retrieve_result_.proto_blob));\n            retrieve_result_.proto_blob = nullptr;\n            retrieve_result_.proto_size = 0;\n        }\n    };\n\n public:\n    // milvus::proto::segcore::RetrieveResults\n    CRetrieveResult retrieve_result_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/schema_util.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"schema_util.h\"\n\n#include <complex>\n#include <exception>\n#include <set>\n#include <stdexcept>\n#include <string>\n#include \"common.h\"\n#include \"log/Log.h\"\n#include \"parser/utils.h\"\n#include \"parser/parser.h\"\n\nnamespace milvus::local {\nnamespace schema_util {\n\nusing DType = ::milvus::proto::schema::DataType;\n\nstd::any\nGetField(const ::milvus::proto::schema::FieldData& field_data,\n         uint32_t field_index) {\n    if (field_data.type() == DType::FloatVector) {\n        std::vector<float> vec;\n        int64_t dim = field_data.vectors().dim();\n        auto vd = field_data.vectors().float_vector();\n        for (int index = field_index * dim; index < (field_index + 1) * dim;\n             index++) {\n            vec.push_back(vd.data(index));\n        }\n        return vec;\n    } else if (field_data.type() == DType::BinaryVector) {\n        int64_t dim = field_data.vectors().dim();\n        int64_t size = dim / 8;\n        std::string v = field_data.vectors().binary_vector().substr(\n            field_index * size, size);\n        return v;\n    } else if (field_data.type() == DType::Float16Vector) {\n        int64_t dim = field_data.vectors().dim();\n        int64_t size = dim * 2;\n        std::string v = field_data.vectors().float16_vector().substr(\n            field_index * size, size);\n        return v;\n    } else if (field_data.type() == DType::BFloat16Vector) {\n        int64_t dim = field_data.vectors().dim();\n        int64_t size = dim * 2;\n        std::string v = field_data.vectors().bfloat16_vector().substr(\n            field_index * size, size);\n        return v;\n    } else if (field_data.type() == DType::Bool) {\n        return field_data.scalars().bool_data().data(field_index);\n    } else if (field_data.type() == DType::Int8 ||\n               field_data.type() == DType::Int16 ||\n               field_data.type() == DType::Int32) {\n        return field_data.scalars().int_data().data(field_index);\n    } else if (field_data.type() == DType::Int64) {\n        return field_data.scalars().long_data().data(field_index);\n    } else if (field_data.type() == DType::Float) {\n        return field_data.scalars().float_data().data(field_index);\n    } else if (field_data.type() == DType::Double) {\n        return field_data.scalars().double_data().data(field_index);\n    } else if (field_data.type() == DType::String) {\n        return field_data.scalars().string_data().data(field_index);\n    } else if (field_data.type() == DType::VarChar) {\n        return field_data.scalars().string_data().data(field_index);\n    } else if (field_data.type() == DType::Array) {\n        auto array_data = field_data.scalars().array_data();\n        ::milvus::proto::schema::ArrayArray new_array;\n        new_array.set_element_type(array_data.element_type());\n        new_array.add_data()->CopyFrom(array_data.data(field_index));\n        return new_array;\n    } else if (field_data.type() == DType::JSON) {\n        return field_data.scalars().json_data().data(field_index);\n    } else if (field_data.type() == DType::SparseFloatVector) {\n        ::milvus::proto::schema::SparseFloatArray sp;\n        sp.set_dim(field_data.vectors().sparse_float_vector().dim());\n        auto content =\n            field_data.vectors().sparse_float_vector().contents(field_index);\n        sp.add_contents(content);\n        return sp;\n    } else {\n        LOG_ERROR(\"Unkown data type: {}\", field_data.type());\n        return nullptr;\n    }\n    return nullptr;\n}\n\nbool\nIsVectorField(::milvus::proto::schema::DataType dtype) {\n    return dtype == ::milvus::proto::schema::DataType::FloatVector ||\n           dtype == ::milvus::proto::schema::DataType::BinaryVector ||\n           dtype == ::milvus::proto::schema::DataType::Float16Vector ||\n           dtype == ::milvus::proto::schema::DataType::BFloat16Vector ||\n           dtype == ::milvus::proto::schema::DataType::SparseFloatVector;\n}\n\nbool\nIsSparseVectorType(::milvus::proto::schema::DataType dtype) {\n    return dtype == ::milvus::proto::schema::DataType::SparseFloatVector;\n}\n\nbool\nFindDimFromFieldParams(const ::milvus::proto::schema::FieldSchema& field,\n                       std::string* dim) {\n    for (const auto& param : field.type_params()) {\n        if (param.key() == kDimKey) {\n            dim->assign(param.value());\n            return true;\n        }\n    }\n\n    for (const auto& param : field.index_params()) {\n        if (param.key() == kDimKey) {\n            dim->assign(param.value());\n            return true;\n        }\n    }\n    return false;\n}\n\nint64_t\nGetDim(const ::milvus::proto::schema::FieldSchema& field) {\n    if (!IsVectorField(field.data_type())) {\n        LOG_ERROR(\"{} is not vector type\", field.data_type());\n        return -1;\n    }\n    if (IsSparseVectorType(field.data_type())) {\n        LOG_ERROR(\"GetDim should not invoke on sparse vector type\");\n        return -1;\n    }\n\n    std::string dim_str;\n    bool succ = FindDimFromFieldParams(field, &dim_str);\n    if (!succ) {\n        LOG_ERROR(\"Dim not found\");\n        return -1;\n    }\n    try {\n        return std::stoll(dim_str);\n    } catch (const std::invalid_argument& e) {\n        LOG_ERROR(\"invalid dimension: {}, {}\", dim_str, e.what());\n    }\n    return -1;\n}\n\nbool\nFillEmptyField(const ::milvus::proto::schema::FieldSchema& field_schema,\n               ::milvus::proto::schema::FieldData* field_data) {\n    field_data->set_field_name(field_schema.name());\n    field_data->set_type(field_schema.data_type());\n    field_data->set_field_id(field_schema.fieldid());\n    field_data->set_is_dynamic(field_schema.is_dynamic());\n\n    if (field_schema.data_type() == DType::FloatVector) {\n        int64_t dim = GetDim(field_schema);\n        if (dim < 0) {\n            return false;\n        }\n        auto vec_field = field_data->mutable_vectors();\n        vec_field->set_dim(dim);\n        vec_field->mutable_float_vector();\n    } else if (field_schema.data_type() == DType::BinaryVector) {\n        int64_t dim = GetDim(field_schema);\n        if (dim < 0) {\n            return false;\n        }\n        auto vec_field = field_data->mutable_vectors();\n        vec_field->set_dim(dim);\n        vec_field->mutable_binary_vector();\n    } else if (field_schema.data_type() == DType::Float16Vector) {\n        int64_t dim = GetDim(field_schema);\n        if (dim < 0) {\n            return false;\n        }\n        auto vec_field = field_data->mutable_vectors();\n        vec_field->set_dim(dim);\n        vec_field->mutable_float16_vector();\n    } else if (field_schema.data_type() == DType::BFloat16Vector) {\n        int64_t dim = GetDim(field_schema);\n        if (dim < 0) {\n            return false;\n        }\n        auto vec_field = field_data->mutable_vectors();\n        vec_field->set_dim(dim);\n        vec_field->mutable_bfloat16_vector();\n    } else if (field_schema.data_type() == DType::Bool) {\n        field_data->mutable_scalars()->mutable_bool_data();\n    } else if (field_schema.data_type() == DType::Int8 ||\n               field_schema.data_type() == DType::Int16 ||\n               field_schema.data_type() == DType::Int32) {\n        field_data->mutable_scalars()->mutable_int_data();\n    } else if (field_schema.data_type() == DType::Int64) {\n        field_data->mutable_scalars()->mutable_long_data();\n    } else if (field_schema.data_type() == DType::Float) {\n        field_data->mutable_scalars()->mutable_float_data();\n    } else if (field_schema.data_type() == DType::Double) {\n        field_data->mutable_scalars()->mutable_double_data();\n    } else if (field_schema.data_type() == DType::String) {\n        field_data->mutable_scalars()->mutable_string_data();\n    } else if (field_schema.data_type() == DType::VarChar) {\n        field_data->mutable_scalars()->mutable_string_data();\n    } else if (field_schema.data_type() == DType::Array) {\n        field_data->mutable_scalars()->mutable_array_data();\n    } else if (field_schema.data_type() == DType::JSON) {\n        field_data->mutable_scalars()->mutable_json_data();\n    } else if (field_schema.data_type() == DType::SparseFloatVector) {\n        field_data->mutable_vectors()->mutable_sparse_float_vector();\n    } else {\n        LOG_ERROR(\"Unkown data type: {}\", field_schema.data_type());\n        return false;\n    }\n    return true;\n}\n\nbool\nFindDimFromSchema(const ::milvus::proto::schema::CollectionSchema& schema,\n                  std::string* dim) {\n    for (const auto& field : schema.fields()) {\n        if (IsVectorField(field.data_type())) {\n            return FindDimFromFieldParams(field, dim);\n        }\n    }\n    return false;\n}\n\nstd::optional<::milvus::proto::plan::VectorType>\nDataTypeToVectorType(::milvus::proto::schema::DataType dtype) {\n    if (dtype == ::milvus::proto::schema::DataType::FloatVector) {\n        return ::milvus::proto::plan::VectorType::FloatVector;\n    } else if (dtype == ::milvus::proto::schema::DataType::BinaryVector) {\n        return ::milvus::proto::plan::VectorType::BinaryVector;\n    } else if (dtype == ::milvus::proto::schema::DataType::Float16Vector) {\n        return ::milvus::proto::plan::VectorType::Float16Vector;\n    } else if (dtype == ::milvus::proto::schema::DataType::BFloat16Vector) {\n        return ::milvus::proto::plan::VectorType::BFloat16Vector;\n    } else if (dtype == ::milvus::proto::schema::DataType::SparseFloatVector) {\n        return ::milvus::proto::plan::VectorType::SparseFloatVector;\n    } else {\n        return std::nullopt;\n    }\n}\n\nStatus\nFindVectorField(const ::milvus::proto::schema::CollectionSchema& schema,\n                const std::string& ann_field,\n                const ::milvus::proto::schema::FieldSchema** field) {\n    std::map<const std::string, const ::milvus::proto::schema::FieldSchema*>\n        vec_fields;\n    for (const auto& field : schema.fields()) {\n        if (IsVectorField(field.data_type())) {\n            vec_fields[field.name()] = &field;\n        }\n    }\n    if (vec_fields.size() == 0) {\n        auto err = string_util::SFormat(\n            \"Can not found vector field in collection {}\", schema.name());\n        LOG_ERROR(err);\n        return Status::ParameterInvalid(err);\n    }\n    if (ann_field.empty()) {\n        if (vec_fields.size() > 1) {\n            auto err = string_util::SFormat(\n                \"multiple anns_fields exist, please specify a anns_field \"\n                \"insearch_params\");\n            return Status::ParameterInvalid(err);\n        } else {\n            *field = vec_fields.begin()->second;\n            return Status::Ok();\n        }\n    } else {\n        if (vec_fields.find(ann_field) == vec_fields.end()) {\n            auto err =\n                string_util::SFormat(\"fieldName({}) not found\", ann_field);\n            LOG_ERROR(err);\n            return Status::ParameterInvalid(err);\n        }\n        *field = vec_fields.at(ann_field);\n        return Status::Ok();\n    }\n}\n\nstd::string\nMergeIndexs(std::vector<std::string>& indexs) {\n    ::milvus::proto::segcore::CollectionIndexMeta index_meta;\n    index_meta.set_maxindexrowcount(kMaxIndexRow);\n    for (size_t i = 0; i < indexs.size(); i++) {\n        index_meta.add_index_metas()->ParseFromString(indexs[i]);\n    }\n    return index_meta.SerializeAsString();\n}\n\nstd::string\nGetIndexMetricType(const milvus::proto::segcore::FieldIndexMeta& field_index) {\n    for (int i = 0; i < field_index.type_params_size(); i++) {\n        if (field_index.type_params(i).key() == kMetricTypeKey) {\n            return field_index.type_params(i).value();\n        }\n    }\n\n    for (int i = 0; i < field_index.index_params_size(); i++) {\n        if (field_index.index_params(i).key() == kMetricTypeKey) {\n            return field_index.index_params(i).value();\n        }\n    }\n\n    for (int i = 0; i < field_index.user_index_params_size(); i++) {\n        if (field_index.user_index_params(i).key() == kMetricTypeKey) {\n            return field_index.user_index_params(i).value();\n        }\n    }\n    return \"\";\n}\n\nstd::optional<int64_t>\nGetPkId(const ::milvus::proto::schema::CollectionSchema& schema) {\n    for (const auto& field : schema.fields()) {\n        if (field.is_primary_key()) {\n            return field.fieldid();\n        }\n    }\n    return std::nullopt;\n}\n\nstd::optional<std::string>\nGetPkName(const ::milvus::proto::schema::CollectionSchema& schema) {\n    for (const auto& field : schema.fields()) {\n        if (field.is_primary_key()) {\n            return field.name();\n        }\n    }\n    return std::nullopt;\n}\n\nbool\nPickFieldDataByIndex(const ::milvus::proto::schema::FieldData& src_data,\n                     const std::vector<int64_t>& indexes,\n                     ::milvus::proto::schema::FieldData* dst) {\n    for (int64_t i : indexes) {\n        switch (src_data.type()) {\n            case DType::FloatVector: {\n                dst->mutable_vectors()->set_dim(src_data.vectors().dim());\n                auto vec =\n                    std::any_cast<std::vector<float>>(GetField(src_data, i));\n                for (const auto& item : vec) {\n                    dst->mutable_vectors()->mutable_float_vector()->add_data(\n                        item);\n                }\n            } break;\n\n            case DType::BinaryVector: {\n                dst->mutable_vectors()->set_dim(src_data.vectors().dim());\n                auto vec = std::any_cast<std::string>(GetField(src_data, i));\n                dst->mutable_vectors()->mutable_binary_vector()->assign(\n                    dst->mutable_vectors()->binary_vector() + vec);\n            } break;\n\n            case DType::Float16Vector: {\n                dst->mutable_vectors()->set_dim(src_data.vectors().dim());\n                auto vec = std::any_cast<std::string>(GetField(src_data, i));\n                dst->mutable_vectors()->mutable_float16_vector()->assign(\n                    dst->mutable_vectors()->float16_vector() + vec);\n            } break;\n\n            case DType::BFloat16Vector: {\n                dst->mutable_vectors()->set_dim(src_data.vectors().dim());\n                auto vec = std::any_cast<std::string>(GetField(src_data, i));\n                dst->mutable_vectors()->mutable_bfloat16_vector()->assign(\n                    dst->mutable_vectors()->bfloat16_vector() + vec);\n            } break;\n\n            case DType::Bool: {\n                auto data = std::any_cast<bool>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_bool_data()->add_data(data);\n            } break;\n\n            case DType::Int8: {\n                auto data = std::any_cast<int>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_int_data()->add_data(data);\n            } break;\n\n            case DType::Int16: {\n                auto data = std::any_cast<int>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_int_data()->add_data(data);\n            } break;\n\n            case DType::Int32: {\n                auto data = std::any_cast<int32_t>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_int_data()->add_data(data);\n            } break;\n\n            case DType::Int64: {\n                auto data = std::any_cast<int64_t>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_long_data()->add_data(data);\n            } break;\n\n            case DType::Float: {\n                auto data = std::any_cast<float>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_float_data()->add_data(data);\n            } break;\n\n            case DType::Double: {\n                auto data = std::any_cast<double>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_double_data()->add_data(data);\n            } break;\n\n            case DType::String: {\n                auto data = std::any_cast<std::string>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_string_data()->add_data(data);\n            } break;\n\n            case DType::VarChar: {\n                auto data = std::any_cast<std::string>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_string_data()->add_data(data);\n            } break;\n\n            case DType::Array: {\n                auto data = std::any_cast<::milvus::proto::schema::ArrayArray>(\n                    GetField(src_data, i));\n                auto arr = dst->mutable_scalars()->mutable_array_data();\n                arr->set_element_type(data.element_type());\n                arr->add_data()->CopyFrom(data.data(0));\n            } break;\n            case DType::JSON: {\n                auto data = std::any_cast<std::string>(GetField(src_data, i));\n                dst->mutable_scalars()->mutable_json_data()->add_data(data);\n            } break;\n            case DType::SparseFloatVector: {\n                auto data =\n                    std::any_cast<::milvus::proto::schema::SparseFloatArray>(\n                        GetField(src_data, i));\n                auto mutable_sp =\n                    dst->mutable_vectors()->mutable_sparse_float_vector();\n                mutable_sp->set_dim(data.dim());\n                mutable_sp->add_contents(data.contents(0));\n            } break;\n\n            default:\n                LOG_ERROR(\"Field: [{}-{}] unkown data type: {}\",\n                          src_data.field_name(),\n                          src_data.field_id(),\n                          src_data.type());\n                return false;\n        }\n    }\n    return true;\n}\n\nbool\nSliceFieldData(const ::milvus::proto::schema::FieldData& src_data,\n               const std::vector<std::tuple<int64_t, int64_t>>& ranges,\n               ::milvus::proto::schema::FieldData* dst) {\n    std::vector<int64_t> indexes;\n    for (const auto& range : ranges) {\n        int64_t offset = std::get<0>(range);\n        int64_t limit = std::get<1>(range);\n        for (int64_t i = offset; i < offset + limit; i++) {\n            indexes.push_back(i);\n        }\n    }\n    return PickFieldDataByIndex(src_data, indexes, dst);\n}\n\n// Support wildcard in output fields:\n//\n//\"*\" - all fields\n//\n// For example, A and B are scalar fields, C and D are vector fields, duplicated fields will automatically be removed.\n//\n//output_fields=[\"*\"]  ==> [A,B,C,D]\n//output_fields=[\"*\",A]  ==> [A,B,C,D]\n//output_fields=[\"*\",C]    ==> [A,B,C,D]\nbool\nTranslateOutputFields(\n    const ::google::protobuf::RepeatedPtrField<std::string>& raw_fields,\n    const ::milvus::proto::schema::CollectionSchema& schema,\n    bool add_primary,\n    std::vector<std::string>* result_outputs,\n    std::vector<std::string>* user_output_fields) {\n    std::string pk_name;\n\n    std::set<std::string> all_fields;\n\n    // when enable dynamic field, result_field store the real field of collection,\n    // user_output_field store user-specified name;\n    std::set<std::string> result_field;\n    std::set<std::string> user_output_field;\n\n    for (const auto& field : schema.fields()) {\n        if (field.is_primary_key()) {\n            pk_name = field.name();\n        }\n        if (field.fieldid() >= kStartOfUserFieldId) {\n            all_fields.insert(field.name());\n        }\n    }\n\n    for (const auto& name : raw_fields) {\n        auto output_name = string_util::Trim(name);\n        if (output_name == \"*\") {\n            for (const std::string& name : all_fields) {\n                result_field.insert(name);\n                user_output_field.insert(name);\n            }\n        } else {\n            if (all_fields.find(output_name) != all_fields.end()) {\n                result_field.insert(output_name);\n                user_output_field.insert(output_name);\n            } else {\n                if (schema.enable_dynamic_field()) {\n                    milvus::proto::schema::CollectionSchema schema_;\n                    schema_.CopyFrom(schema);\n                    auto helper = milvus::local::CreateSchemaHelper(&schema_);\n                    auto expr = ParseIdentifier(helper, name);\n                    if (expr->column_expr().info().nested_path_size() == 1 &&\n                        expr->column_expr().info().nested_path(0) == name) {\n                        result_field.insert(kMetaFieldName);\n                        user_output_field.insert(name);\n                    }\n                } else {\n                    LOG_ERROR(\"Field {} not exist\", output_name);\n                    return false;\n                }\n            }\n        }\n    }\n\n    std::set<std::string> bm25_fields_outputs;\n\n    for (const auto& func : schema.functions()) {\n        if (func.type() == ::milvus::proto::schema::FunctionType::BM25) {\n            for (const auto& output_field : func.output_field_names()) {\n                bm25_fields_outputs.insert(output_field);\n            }\n        }\n    }\n\n    if (add_primary) {\n        result_field.insert(pk_name);\n        user_output_field.insert(pk_name);\n    }\n\n    // remove bm25 fields outputs\n    for (const auto& fname : bm25_fields_outputs) {\n        result_field.erase(fname);\n        user_output_field.erase(fname);\n    }\n\n    for (const std::string& fname : result_field) {\n        result_outputs->push_back(fname);\n    }\n\n    for (const std::string& fname : user_output_field) {\n        user_output_fields->push_back(fname);\n    }\n\n    return true;\n}\n\nbool\nReduceFieldByIDs(const ::milvus::proto::schema::IDs& ids,\n                 const ::milvus::proto::schema::FieldData& src,\n                 ::milvus::proto::schema::FieldData* dst,\n                 int64_t* real_size) {\n    std::set<std::string> unique_ids;\n    std::vector<int64_t> indexes;\n    dst->set_type(src.type());\n    dst->set_field_id(src.field_id());\n    dst->set_field_name(src.field_name());\n    dst->set_is_dynamic(src.is_dynamic());\n    if (ids.has_int_id()) {\n        for (int64_t i = 0; i < ids.int_id().data_size(); ++i) {\n            auto cur_id = std::to_string(ids.int_id().data(i));\n            if (unique_ids.find(cur_id) != unique_ids.end())\n                continue;\n            unique_ids.insert(cur_id);\n            indexes.push_back(i);\n        }\n    } else if (ids.has_str_id()) {\n        for (int64_t i = 0; i < ids.str_id().data_size(); ++i) {\n            auto cur_id = ids.str_id().data(i);\n            if (unique_ids.find(cur_id) != unique_ids.end())\n                continue;\n            unique_ids.insert(cur_id);\n            indexes.push_back(i);\n        }\n    } else {\n        // empty data\n        return true;\n    }\n    *real_size = unique_ids.size();\n    return PickFieldDataByIndex(src, indexes, dst);\n}\n\nStatus\nParseExpr(const std::string& expr_str,\n          ::milvus::proto::schema::CollectionSchema schema,\n          ::milvus::proto::plan::Expr* expr_out) {\n    try {\n        auto buf = milvus::local::ParserToMessage(schema, expr_str);\n        expr_out->ParseFromString(buf);\n        return Status::Ok();\n    } catch (std::exception& e) {\n        LOG_ERROR(e.what());\n        return Status::ParameterInvalid(\n            string_util::SFormat(\"Invalid expr: {}\", expr_str));\n    }\n}\n\nbool\nSchemaEquals(const std::string& schema_str_l, const std::string& schema_str_r) {\n    ::milvus::proto::schema::CollectionSchema schema_l, schema_r;\n    if (!schema_l.ParseFromString(schema_str_l) ||\n        !schema_r.ParseFromString(schema_str_r)) {\n        LOG_ERROR(\"Parse schema failed\");\n        return false;\n    }\n    if (schema_l.name() != schema_r.name() ||\n        schema_l.description() != schema_r.description() ||\n        schema_l.enable_dynamic_field() != schema_r.enable_dynamic_field() ||\n        schema_l.fields_size() != schema_r.fields_size() ||\n        !CheckParamsEqual(schema_l.properties(), schema_r.properties())) {\n        return false;\n    }\n    // check field\n    for (int i = 0; i < schema_l.fields_size(); i++) {\n        if (schema_l.fields(i).fieldid() != schema_r.fields(i).fieldid() ||\n            schema_l.fields(i).name() != schema_r.fields(i).name() ||\n            schema_l.fields(i).is_primary_key() !=\n                schema_r.fields(i).is_primary_key() ||\n            schema_l.fields(i).description() !=\n                schema_r.fields(i).description() ||\n            schema_l.fields(i).data_type() != schema_r.fields(i).data_type() ||\n            schema_l.fields(i).autoid() != schema_r.fields(i).autoid() ||\n            schema_l.fields(i).is_dynamic() !=\n                schema_r.fields(i).is_dynamic() ||\n            schema_l.fields(i).element_type() !=\n                schema_r.fields(i).element_type() ||\n            !CheckValueFieldEqual(schema_l.fields(i).default_value(),\n                                  schema_r.fields(i).default_value()) ||\n            !CheckParamsEqual(schema_l.fields(i).type_params(),\n                              schema_r.fields(i).type_params()) ||\n            !CheckParamsEqual(schema_l.fields(i).index_params(),\n                              schema_r.fields(i).index_params())\n\n        ) {\n            return false;\n        }\n    }\n    return true;\n}\n\nbool\nCheckParamsEqual(const ::google::protobuf::RepeatedPtrField<\n                     ::milvus::proto::common::KeyValuePair>& left,\n                 const ::google::protobuf::RepeatedPtrField<\n                     ::milvus::proto::common::KeyValuePair>& right) {\n    if (left.size() != right.size())\n        return false;\n    KVMap right_map;\n    for (int i = 0; i < right.size(); i++) {\n        right_map[right[i].key()] = right[i].value();\n    }\n    for (int i = 0; i < left.size(); i++) {\n        auto it = right_map.find(left[i].key());\n        if (it == right_map.end())\n            return false;\n        if (it->second != left[i].value())\n            return false;\n    }\n    return true;\n}\n\nbool\nCheckValueFieldEqual(const ::milvus::proto::schema::ValueField& left,\n                     const ::milvus::proto::schema::ValueField& right) {\n    if (!left.IsInitialized() && !right.IsInitialized())\n        return true;\n\n    if (left.data_case() != right.data_case())\n        return false;\n\n    if (left.data_case() == 0) {\n        return true;\n    }\n\n    if (left.has_bool_data() && right.has_bool_data() &&\n        left.bool_data() == right.bool_data())\n        return true;\n    if (left.has_int_data() && right.has_int_data() &&\n        left.int_data() == right.int_data())\n        return true;\n    if (left.has_long_data() && right.has_long_data() &&\n        left.long_data() == right.long_data())\n        return true;\n    if (left.has_float_data() && right.has_float_data() &&\n        std::fabs(left.float_data() - right.float_data()) < 0.00001f)\n        return true;\n    if (left.has_double_data() && right.has_double_data() &&\n        std::fabs(left.double_data() - right.double_data()) < 0.0000001)\n        return true;\n    if (left.has_string_data() && right.has_string_data() &&\n        left.string_data() == right.string_data())\n        return true;\n    if (left.has_bytes_data() && right.has_bytes_data() &&\n        left.bytes_data() == right.bytes_data())\n        return true;\n    return false;\n}\n\nvoid\nFillInFieldInfo(\n    const std::vector<std::string>& output_fields,\n    const ::milvus::proto::schema::CollectionSchema& schema,\n    std::variant<::milvus::proto::schema::SearchResultData*,\n                 ::milvus::proto::milvus::QueryResults*> result_var) {\n    auto process = [](const auto& output_fields,\n                      const auto& schema,\n                      auto&&... args) {\n        return [&output_fields, &schema, args...](auto&& result_data) {\n            if (output_fields.size() == 0 ||\n                result_data->fields_data_size() == 0) {\n                return;\n            }\n            for (size_t i = 0; i < output_fields.size(); i++) {\n                const std::string& name = output_fields[i];\n                for (const auto& field : schema.fields()) {\n                    if (name == field.name()) {\n                        auto field_id = field.fieldid();\n                        for (int j = 0; j < result_data->fields_data().size();\n                             j++) {\n                            if (field_id ==\n                                result_data->fields_data(j).field_id()) {\n                                result_data->mutable_fields_data(j)\n                                    ->set_field_name(field.name());\n                                result_data->mutable_fields_data(j)\n                                    ->set_field_id(field.fieldid());\n                                result_data->mutable_fields_data(j)->set_type(\n                                    field.data_type());\n                                result_data->mutable_fields_data(j)\n                                    ->set_is_dynamic(field.is_dynamic());\n                            }\n                        }\n                    }\n                }\n            }\n        };\n    };\n    std::visit(process(output_fields, schema), result_var);\n}\n\nbool\nGetOutputFieldsIds(const std::vector<std::string>& output_fields,\n                   const ::milvus::proto::schema::CollectionSchema& schema,\n                   std::vector<int64_t>* ids) {\n    std::map<std::string, int64_t> name_ids;\n    for (const auto& field : schema.fields()) {\n        name_ids[field.name()] = field.fieldid();\n    }\n\n    for (const auto& output_field : output_fields) {\n        auto it = name_ids.find(output_field);\n        if (it == name_ids.end()) {\n            LOG_ERROR(\"Can not find output field {} in schema\", output_field);\n            return false;\n        }\n        ids->push_back(it->second);\n    }\n    return true;\n}\n\n}  // namespace schema_util\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/schema_util.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <any>\n#include <variant>\n#include <cstdint>\n#include <optional>\n#include <vector>\n#include \"common.h\"\n#include \"common.pb.h\"\n#include \"pb/plan.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"status.h\"\n#include \"string_util.hpp\"\n#include <google/protobuf/repeated_field.h>\n\nnamespace milvus::local {\n\nnamespace schema_util {\n\nstd::any\nGetField(const ::milvus::proto::schema::FieldData& field_data,\n         uint32_t field_index);\n\nbool\nIsVectorField(::milvus::proto::schema::DataType dtype);\n\nbool\nIsSparseVectorType(::milvus::proto::schema::DataType dtype);\n\nbool\nFindDimFromFieldParams(const ::milvus::proto::schema::FieldSchema& field,\n                       std::string* dim);\nint64_t\nGetDim(const ::milvus::proto::schema::FieldSchema& field);\n\nbool\nFindDimFromSchema(const ::milvus::proto::schema::CollectionSchema& schema,\n                  std::string* dim);\n\nstd::optional<::milvus::proto::plan::VectorType>\nDataTypeToVectorType(::milvus::proto::schema::DataType dtype);\n\nStatus\nFindVectorField(const ::milvus::proto::schema::CollectionSchema& schema,\n                const std::string& ann_field,\n                const ::milvus::proto::schema::FieldSchema** field);\n\nstd::optional<int64_t>\nGetPkId(const ::milvus::proto::schema::CollectionSchema& schema);\n\nstd::optional<std::string>\nGetPkName(const ::milvus::proto::schema::CollectionSchema& schema);\n\nbool\nSliceFieldData(const ::milvus::proto::schema::FieldData& src_data,\n               const std::vector<std::tuple<int64_t, int64_t>>& ranges,\n               ::milvus::proto::schema::FieldData* dst);\n\nbool\nPickFieldDataByIndex(const ::milvus::proto::schema::FieldData& src_data,\n                     const std::vector<int64_t>& indexes,\n                     ::milvus::proto::schema::FieldData* dst);\n\nbool\nFillEmptyField(const ::milvus::proto::schema::FieldSchema& field_schema,\n               ::milvus::proto::schema::FieldData* field_data);\n\nstd::string\nMergeIndexs(std::vector<std::string>& indexs);\n\nbool\nSchemaEquals(const std::string& schema_str_l, const std::string& schema_str_r);\n\n// Support wildcard in output fields:\n//\n//\"*\" - all fields\n//\n// For example, A and B are scalar fields, C and D are vector fields, duplicated fields will automatically be removed.\n//\n//output_fields=[\"*\"]  ==> [A,B,C,D]\n//output_fields=[\"*\",A]  ==> [A,B,C,D]\n//output_fields=[\"*\",C]    ==> [A,B,C,D]\nbool\nTranslateOutputFields(\n    const ::google::protobuf::RepeatedPtrField<std::string>& raw_fields,\n    const ::milvus::proto::schema::CollectionSchema& schema,\n    bool add_primary,\n    std::vector<std::string>* result_outputs,\n    std::vector<std::string>* user_output_fields);\n\nbool\nReduceFieldByIDs(const ::milvus::proto::schema::IDs& ids,\n                 const ::milvus::proto::schema::FieldData& src,\n                 ::milvus::proto::schema::FieldData* dst,\n                 int64_t* real_size);\n\n// PositivelyRelated return if metricType are \"ip\" or \"IP\"\ninline bool\nPositivelyRelated(const std::string& metrics_type) {\n    auto upper_str = string_util::ToUpper(metrics_type);\n    return upper_str == KMetricsIPName || upper_str == kMetricsCosineName ||\n           upper_str == kMetricsBM25Name;\n}\n\nstd::string\nGetIndexMetricType(const milvus::proto::segcore::FieldIndexMeta& field_index);\n\nStatus\nParseExpr(const std::string& expr_str,\n          ::milvus::proto::schema::CollectionSchema schema,\n          ::milvus::proto::plan::Expr* expr_out);\n\nbool\nCheckParamsEqual(const ::google::protobuf::RepeatedPtrField<\n                     ::milvus::proto::common::KeyValuePair>& left,\n                 const ::google::protobuf::RepeatedPtrField<\n                     ::milvus::proto::common::KeyValuePair>& right);\n\nbool\nCheckValueFieldEqual(const ::milvus::proto::schema::ValueField& left,\n                     const ::milvus::proto::schema::ValueField& right);\n\ninline int\nIDsSize(const ::milvus::proto::schema::IDs& ids) {\n    if (ids.has_int_id()) {\n        return ids.int_id().data_size();\n    } else {\n        return ids.str_id().data_size();\n    }\n}\n\nvoid\nFillInFieldInfo(\n    const std::vector<std::string>& output_fields,\n    const ::milvus::proto::schema::CollectionSchema& schema,\n    std::variant<::milvus::proto::schema::SearchResultData*,\n                 ::milvus::proto::milvus::QueryResults*> result_var);\n\nbool\nGetOutputFieldsIds(const std::vector<std::string>& output_fields,\n                   const ::milvus::proto::schema::CollectionSchema& schema,\n                   std::vector<int64_t>* ids);\n\ninline void\nSparseVectorToByte(const SparseVector& vec, std::string* buf) {\n    for (const auto& it : vec) {\n        uint32_t k = it.first;\n        float v = it.second;\n        buf->append(reinterpret_cast<const char*>(&k), sizeof(k));\n        buf->append(reinterpret_cast<const char*>(&v), sizeof(v));\n    }\n}\n\ninline bool\nHasFunction(const ::milvus::proto::schema::CollectionSchema& schema) {\n    return !schema.functions().empty();\n}\n\ninline bool\nHasFunction(const ::milvus::proto::schema::CollectionSchema& schema,\n            const std::string& ann_field) {\n    for (const auto& f : schema.functions()) {\n        if (f.output_field_names(0) == ann_field) {\n            return true;\n        }\n    }\n    return false;\n}\n\ninline std::vector<std::string>\nGetBM25SparseField(const ::milvus::proto::schema::CollectionSchema& schema) {\n    std::vector<std::string> fields;\n    for (const auto& f : schema.functions()) {\n        if (f.type() == milvus::proto::schema::FunctionType::BM25) {\n            fields.push_back(f.output_field_names(0));\n        }\n    }\n    return fields;\n}\n\n// inline bool\n// HasBM25Function(const ::milvus::proto::schema::CollectionSchema& schema) {\n//     return true;\n// }\n\n}  // namespace schema_util\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/search_result.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cassert>\n#include <cstdint>\n#include <vector>\n#include \"common.h\"\n#include \"common/type_c.h\"\n#include \"segcore/reduce_c.h\"\n\nnamespace milvus::local {\n\nclass SearchResult final : NonCopyableNonMovable {\n public:\n    SearchResult(const std::vector<int64_t>& slice_nqs,\n                 const std::vector<int64_t>& slice_topKs)\n        : slice_nqs_(slice_nqs), slice_topKs_(slice_topKs) {\n        blob_ = nullptr;\n    }\n    ~SearchResult() {\n        if (blob_ != nullptr) {\n            DELETE_AND_SET_NULL(blob_, DeleteSearchResultDataBlobs);\n            result_.clear();\n        }\n    }\n\n public:\n    // std::vector<std::vector<char>>\n    CSearchResultDataBlobs blob_;\n\n    // milvus::proto::schema::SearchResultData\n    // ptr to blob_\n    std::vector<CProto> result_;\n\n public:\n    std::vector<int64_t> slice_nqs_;\n    std::vector<int64_t> slice_topKs_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/search_task.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"search_task.h\"\n#include <cstdint>\n#include <exception>\n#include <optional>\n#include <tuple>\n#include <vector>\n#include \"common.h\"\n#include \"function/function_executor.h\"\n#include \"pb/plan.pb.h\"\n#include \"antlr4-runtime.h\"\n#include \"parser/parser.h\"\n#include \"parser/utils.h\"\n#include \"log/Log.h\"\n#include \"schema.pb.h\"\n#include \"schema_util.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nusing milvus::local::function::FunctionExecutor;\n\nSearchTask::SearchTask(::milvus::proto::milvus::SearchRequest* search_reques,\n                       const ::milvus::proto::schema::CollectionSchema* schema,\n                       const std::vector<std::string>* all_index)\n    : search_request_(search_reques),\n      schema_(schema),\n      all_index_(all_index),\n      topk_(-1),\n      offset_(0),\n      ann_field_(\"\"),\n      metric_(\"\"),\n      groupby_field_name_(\"\") {\n}\nSearchTask::~SearchTask() {\n}\n\nbool\nSearchTask::ParseSearchInfo(::milvus::proto::plan::QueryInfo* info) {\n    int64_t round_decimal = -1;\n    std::string search_param_str(\"\");\n    for (const auto& param : search_request_->search_params()) {\n        if (param.key() == kTopkKey) {\n            try {\n                topk_ = std::stoll(param.value());\n            } catch (std::exception& e) {\n                LOG_ERROR(\"Parse topk failed, topk: {}, err: {}\",\n                          param.value(),\n                          e.what());\n                return false;\n            }\n\n        } else if (param.key() == kOffsetKey) {\n            try {\n                offset_ = std::stoll(param.value());\n            } catch (std::exception& e) {\n                LOG_ERROR(\"Parse offset failed, offset: {}, err: {}\",\n                          param.value(),\n                          e.what());\n                return false;\n            }\n        } else if (param.key() == kMetricTypeKey) {\n            metric_ = param.value();\n        } else if (param.key() == kRoundDecimalKey) {\n            try {\n                round_decimal = std::stoll(param.value());\n            } catch (std::exception& e) {\n                LOG_ERROR(\n                    \"Parse round_decimal failed, round_decimal: {}, err: {}\",\n                    param.value(),\n                    e.what());\n                return false;\n            }\n        } else if (param.key() == kSearchParamKey) {\n            search_param_str = param.value();\n        } else if (param.key() == kGroupByFieldKey) {\n            groupby_field_name_ = param.value();\n        } else if (param.key() == kAnnFieldKey) {\n            ann_field_ = param.value();\n        }\n    }\n\n    // get and validate topk\n    if (topk_ <= 0 || topk_ > kTopkLimit) {\n        LOG_ERROR(\n            \"Topk should be in range [1, {}], but got {}\", kTopkLimit, topk_);\n        return false;\n    }\n\n    if (offset_ > kTopkLimit) {\n        LOG_ERROR(\"Offset should be in range [0, {}], but got {}\",\n                  kTopkLimit,\n                  offset_);\n        return false;\n    }\n\n    if ((topk_ + offset_) > kTopkLimit) {\n        LOG_ERROR(\"topk + offset should be in range [1, {}], but got {}\",\n                  kTopkLimit,\n                  topk_ + offset_);\n        return false;\n    }\n\n    if (round_decimal != -1 && (round_decimal > 6 || round_decimal < 0)) {\n        LOG_ERROR(\n            \"round_decimal {} is invalid, should be -1 or an integer in \"\n            \"range [0, 6]\",\n            round_decimal);\n        return false;\n    }\n\n    int64_t groupby_field_id = kRowIdField;\n    if (groupby_field_name_ != \"\") {\n        groupby_field_id = -1;\n        for (const auto& field : schema_->fields()) {\n            if (groupby_field_name_ == field.name()) {\n                groupby_field_id = field.fieldid();\n                break;\n            }\n        }\n        if (groupby_field_id == -1) {\n            LOG_ERROR(\"groupBy field {} not found in schema\",\n                      groupby_field_name_);\n            return false;\n        }\n    }\n    info->set_topk(topk_ + offset_);\n    info->set_search_params(search_param_str);\n    info->set_round_decimal(round_decimal);\n    info->set_group_by_field_id(groupby_field_id);\n    return true;\n}\n\nstd::optional<std::tuple<std::string, int64_t>>\nSearchTask::GetVectorField() {\n    for (const auto& field : schema_->fields()) {\n        if (schema_util::IsVectorField(field.data_type())) {\n            return std::make_tuple(field.name(), field.data_type());\n        }\n    }\n    LOG_ERROR(\"Can not found vector field\");\n    return std::nullopt;\n}\n\nStatus\nSearchTask::Process(::milvus::proto::plan::PlanNode* plan,\n                    std::string* placeholder_group,\n                    std::vector<int64_t>* nqs,\n                    std::vector<int64_t>* topks) {\n    if (!schema_util::TranslateOutputFields(search_request_->output_fields(),\n                                            *schema_,\n                                            false,\n                                            &output_fields_,\n                                            &user_output_fields_)) {\n        return Status::ParameterInvalid();\n    }\n\n    std::vector<int64_t> ids;\n    if (!schema_util::GetOutputFieldsIds(output_fields_, *schema_, &ids)) {\n        return Status::ParameterInvalid();\n    }\n    for (int64_t id : ids) {\n        plan->add_output_field_ids(id);\n    }\n    auto vector_anns = plan->mutable_vector_anns();\n    vector_anns->set_placeholder_tag(kPlaceholderTag);\n    if (!ParseSearchInfo(vector_anns->mutable_query_info())) {\n        return Status::ParameterInvalid();\n    }\n\n    const ::milvus::proto::schema::FieldSchema* field;\n    auto s = schema_util::FindVectorField(*schema_, ann_field_, &field);\n    CHECK_STATUS(s, \"\");\n    ann_field_ = field->name();\n    if (schema_util::HasFunction(*schema_, ann_field_)) {\n        auto [s, executor] = FunctionExecutor::Create(schema_, ann_field_);\n        CHECK_STATUS(s, \"\");\n        CHECK_STATUS(executor->ProcessSearch(search_request_), \"\");\n    }\n    placeholder_group->assign(search_request_->placeholder_group());\n    nqs->push_back(search_request_->nq());\n    topks->push_back(vector_anns->query_info().topk());\n\n    vector_anns->set_field_id(field->fieldid());\n    auto vtype = schema_util::DataTypeToVectorType(field->data_type());\n    vector_anns->set_vector_type(*vtype);\n\n    // check metrics\n    std::string index_metric;\n    for (const auto& index_str : *all_index_) {\n        milvus::proto::segcore::FieldIndexMeta field_index;\n        if (!field_index.ParseFromString(index_str)) {\n            return Status::ServiceInternal(\"Error index info in db\");\n        }\n        if (field_index.fieldid() == field->fieldid()) {\n            index_metric = schema_util::GetIndexMetricType(field_index);\n        }\n    }\n    if (index_metric.empty()) {\n        return Status::IndexNotFound(\"No index found in field [{}]\",\n                                     field->name());\n    }\n\n    if (metric_.empty())\n        metric_ = index_metric;\n\n    if (metric_.empty() || metric_ != index_metric) {\n        return Status::ParameterInvalid(\n            \"fail to search: metric type not match: invalid \"\n            \"[expected={}][actual={}]\",\n            index_metric,\n            metric_);\n    }\n\n    plan->mutable_vector_anns()->mutable_query_info()->set_metric_type(metric_);\n\n    if (!search_request_->dsl().empty()) {\n        CHECK_STATUS(schema_util::ParseExpr(\n                         search_request_->dsl(),\n                         *schema_,\n                         plan->mutable_vector_anns()->mutable_predicates()),\n                     \"\");\n    }\n    return Status::Ok();\n}\n\nbool\nSearchTask::PostProcess(\n    const SearchResult& segcore_reault,\n    ::milvus::proto::milvus::SearchResults* search_results) {\n    ::milvus::proto::schema::SearchResultData tmp_ret;\n    tmp_ret.ParseFromArray(segcore_reault.result_[0].proto_blob,\n                           segcore_reault.result_[0].proto_size);\n    search_results->mutable_results()->set_num_queries(tmp_ret.num_queries());\n    auto ret_size = tmp_ret.scores_size();\n    auto nq = tmp_ret.num_queries();\n    int score_coefficient = schema_util::PositivelyRelated(metric_) ? 1 : -1;\n    search_results->mutable_results()->set_top_k(0);\n\n    int64_t cur_index = 0;\n    if (nq * offset_ < ret_size) {\n        for (const auto& name : user_output_fields_) {\n            search_results->mutable_results()->add_output_fields(name);\n        }\n\n        std::vector<std::tuple<int64_t, int64_t>> ranges;\n        for (int i = 0; i < nq; i++) {\n            int64_t limit = 0;\n            if (tmp_ret.topks(i) - offset_ > 0)\n                limit = tmp_ret.topks(i) - offset_;\n            if (search_results->results().top_k() < limit)\n                search_results->mutable_results()->set_top_k(limit);\n\n            search_results->mutable_results()->mutable_topks()->Add(limit);\n            ranges.push_back(std::make_tuple(cur_index + offset_, limit));\n            // copy topks and scores\n            for (int j = cur_index + offset_; j < cur_index + tmp_ret.topks(i);\n                 j++) {\n                search_results->mutable_results()->mutable_scores()->Add(\n                    tmp_ret.scores(j) * score_coefficient);\n\n                // copy ids\n                if (tmp_ret.ids().has_int_id()) {\n                    search_results->mutable_results()\n                        ->mutable_ids()\n                        ->mutable_int_id()\n                        ->add_data(tmp_ret.ids().int_id().data(j));\n                } else {\n                    search_results->mutable_results()\n                        ->mutable_ids()\n                        ->mutable_str_id()\n                        ->add_data(tmp_ret.ids().str_id().data(j));\n                }\n            }\n            cur_index += tmp_ret.topks(i);\n        }\n        // copy fields_data\n        for (const auto& field_data : tmp_ret.fields_data()) {\n            auto new_data =\n                search_results->mutable_results()->add_fields_data();\n            new_data->set_field_id(field_data.field_id());\n            new_data->set_type(field_data.type());\n            new_data->set_field_name(field_data.field_name());\n            new_data->set_is_dynamic(field_data.is_dynamic());\n            schema_util::SliceFieldData(field_data, ranges, new_data);\n        }\n        FillInFieldInfo(search_results->mutable_results());\n    } else {\n        for (int i = 0; i < nq; i++) {\n            search_results->mutable_results()->mutable_topks()->Add(0);\n        }\n    }\n    return true;\n}\n\nvoid\nSearchTask::FillInFieldInfo(\n    ::milvus::proto::schema::SearchResultData* result_data) {\n    std::variant<::milvus::proto::schema::SearchResultData*,\n                 ::milvus::proto::milvus::QueryResults*>\n        result_var;\n    result_var = result_data;\n    schema_util::FillInFieldInfo(output_fields_, *schema_, result_var);\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/search_task.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n#include <cstdint>\n#include <vector>\n#include <optional>\n#include \"pb/milvus.pb.h\"\n#include \"pb/plan.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"schema.pb.h\"\n#include \"search_result.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nclass SearchTask final : NonCopyableNonMovable {\n public:\n    SearchTask(::milvus::proto::milvus::SearchRequest* search_reques,\n               const ::milvus::proto::schema::CollectionSchema* schema,\n               const std::vector<std::string>*);\n    virtual ~SearchTask();\n\n public:\n    Status\n    Process(::milvus::proto::plan::PlanNode* plan,\n            std::string* placeholder_group,\n            std::vector<int64_t>* nqs,\n            std::vector<int64_t>* topks);\n\n    bool\n    PostProcess(const SearchResult& segcore_reaul,\n                ::milvus::proto::milvus::SearchResults* search_results);\n\n    const std::string\n    GetMetric() {\n        return metric_;\n    }\n\n    const std::string\n    GetAnnFieldName() {\n        return ann_field_;\n    }\n\n private:\n    bool\n    ParseSearchInfo(::milvus::proto::plan::QueryInfo* info);\n\n    std::optional<std::tuple<std::string, int64_t>>\n    GetVectorField();\n\n    void\n    FillInFieldInfo(::milvus::proto::schema::SearchResultData* result_data);\n\n private:\n    ::milvus::proto::milvus::SearchRequest* search_request_;\n    const ::milvus::proto::schema::CollectionSchema* schema_;\n    const std::vector<std::string>* all_index_;\n\n    std::vector<std::string> output_fields_;\n    std::vector<std::string> user_output_fields_;\n    int64_t topk_, offset_;\n    std::string ann_field_;\n    std::string metric_;\n    std::string groupby_field_name_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/segcore_wrapper.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"segcore_wrapper.h\"\n#include <cassert>\n#include <chrono>\n#include <cstdint>\n#include <exception>\n#include <iostream>\n#include <memory>\n#include <mutex>\n#include <vector>\n#include \"common.h\"\n#include \"common/type_c.h\"\n#include \"log/Log.h\"\n#include \"pb/segcore.pb.h\"\n#include \"retrieve_result.h\"\n#include \"segcore/collection_c.h\"\n#include \"segcore/reduce_c.h\"\n#include \"segcore/segment_c.h\"\n#include \"pb/schema.pb.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nconst int64_t DEFAULT_MAX_OUTPUT_SIZE = 67108864;\n\nclass RetrievePlanWrapper final : private NonCopyableNonMovable {\n public:\n    RetrievePlanWrapper() : plan_(nullptr) {\n    }\n    virtual ~RetrievePlanWrapper() {\n        DELETE_AND_SET_NULL(plan_, DeleteRetrievePlan);\n    }\n\n public:\n    CRetrievePlan plan_;\n};\n\nclass SearchPlanWrapper final : private NonCopyableNonMovable {\n public:\n    SearchPlanWrapper() : plan_(nullptr) {\n    }\n    virtual ~SearchPlanWrapper() {\n        DELETE_AND_SET_NULL(plan_, DeleteSearchPlan);\n    }\n\n public:\n    CSearchPlan plan_;\n};\n\nclass PlaceholderGroupWrapper final : private NonCopyableNonMovable {\n public:\n    PlaceholderGroupWrapper() : group_(nullptr) {\n    }\n    virtual ~PlaceholderGroupWrapper() {\n        DELETE_AND_SET_NULL(group_, DeletePlaceholderGroup);\n    }\n\n public:\n    CPlaceholderGroup group_;\n};\n\nclass SearchResultWrapper final : private NonCopyableNonMovable {\n public:\n    SearchResultWrapper() : ret_(nullptr) {\n    }\n    virtual ~SearchResultWrapper() {\n        DELETE_AND_SET_NULL(ret_, DeleteSearchResult);\n    }\n\n public:\n    CSearchResult ret_;\n};\n\nSegcoreWrapper::~SegcoreWrapper() {\n    if (collection_ != nullptr) {\n        try {\n            DELETE_AND_SET_NULL(collection_, DeleteCollection);\n        } catch (std::exception& e) {\n            LOG_ERROR(\"Release collection {} failed\", collection_name_);\n        }\n    }\n    if (segment_ != nullptr) {\n        try {\n            DELETE_AND_SET_NULL(segment_, DeleteSegment);\n        } catch (std::exception& e) {\n            LOG_ERROR(\"Release segment {} failed\", collection_name_);\n        }\n    }\n}\n\nStatus\nSegcoreWrapper::SetCollectionInfo(const std::string& collection_name,\n                                  const std::string& collection_info,\n                                  const std::string& index_meta) {\n    assert(collection_ == nullptr);\n    auto new_collection_info = NewCollectionInfo(collection_info);\n    try {\n        CHECK_STATUS(Status(::NewCollection(new_collection_info.c_str(),\n                                            new_collection_info.size(),\n                                            &collection_)),\n                     \"New collection failed\");\n        // set index info if has\n        if (!index_meta.empty()) {\n            ::SetIndexMeta(collection_, index_meta.c_str(), index_meta.size());\n        }\n        CHECK_STATUS(\n            Status(::NewSegment(collection_, Growing, 0, &segment_, false)),\n            \"Init segcore failed\");\n        collection_name_ = collection_name;\n        return Status::Ok();\n    } catch (std::exception& e) {\n        return Status::SegcoreErr(e.what());\n    }\n}\n\nstd::string\nSegcoreWrapper::NewCollectionInfo(const std::string& info) {\n    ::milvus::proto::schema::CollectionSchema schema;\n    schema.ParseFromString(info);\n    for (auto it = schema.fields().begin(); it != schema.fields().end();) {\n        if (it->fieldid() < kStartOfUserFieldId) {\n            schema.mutable_fields()->erase(it);\n        } else {\n            ++it;\n        }\n    }\n    return schema.SerializeAsString();\n}\n\nStatus\nSegcoreWrapper::SetIndexMeta(const std::string& meta_info) {\n    try {\n        ::SetIndexMeta(collection_, meta_info.c_str(), meta_info.size());\n        return Status::Ok();\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Set Index meta failed, err: {}\", e.what());\n        return Status::SegcoreErr(e.what());\n    }\n}\n\nStatus\nSegcoreWrapper::Insert(int64_t size, const std::string& insert_record_proto) {\n    try {\n        int64_t offset = 0;\n        CHECK_STATUS(Status(::PreInsert(segment_, size, &offset)),\n                     \"Pre insert failed, err:\");\n\n        ::milvus::proto::segcore::InsertRecord r;\n        r.ParseFromString(insert_record_proto);\n\n        std::vector<int64_t> row_ids;\n        std::vector<uint64_t> timestamps;\n        for (const auto& field_data : r.fields_data()) {\n            if (field_data.field_id() == kRowIdField) {\n                for (int64_t rowid : field_data.scalars().long_data().data()) {\n                    row_ids.push_back(rowid);\n                }\n            }\n            if (field_data.field_id() == kTimeStampField) {\n                for (int64_t ts : field_data.scalars().long_data().data()) {\n                    timestamps.push_back(ts);\n                }\n            }\n        }\n\n        CHECK_STATUS(Status(::Insert(segment_,\n                                     offset,\n                                     size,\n                                     row_ids.data(),\n                                     timestamps.data(),\n                                     reinterpret_cast<const uint8_t*>(\n                                         insert_record_proto.data()),\n                                     insert_record_proto.size())),\n                     \"Insert failed:\");\n        return Status::Ok();\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Insert failed, err: {}\", e.what());\n        return Status::SegcoreErr(e.what());\n    }\n}\n\nStatus\nSegcoreWrapper::Retrieve(const std::string& plan, RetrieveResult* result) {\n    try {\n        RetrievePlanWrapper retrieve_plan;\n        auto status = Status(::CreateRetrievePlanByExpr(\n            collection_, plan.c_str(), plan.size(), &retrieve_plan.plan_));\n        CHECK_STATUS(status, \"Create retrieve plan failed, invalid expr\");\n        if (::GetRowCount(segment_) == 0) {\n            milvus::proto::segcore::RetrieveResults empty_ret;\n            auto serialized_results = empty_ret.SerializeAsString();\n            result->retrieve_result_.proto_blob =\n                new uint8_t[serialized_results.size()];\n            std::memcpy(const_cast<void*>(result->retrieve_result_.proto_blob),\n                        serialized_results.data(),\n                        serialized_results.size());\n            result->retrieve_result_.proto_size = serialized_results.size();\n            return Status::Ok();\n        }\n        auto job = ::AsyncRetrieve({},\n                                   segment_,\n                                   retrieve_plan.plan_,\n                                   GetTimestamp(),\n                                   DEFAULT_MAX_OUTPUT_SIZE,\n                                   false,\n                                   2);\n        std::mutex mu;\n        mu.lock();\n        future_register_ready_callback(\n            job,\n            [](CLockedGoMutex* mutex) { ((std::mutex*)(mutex))->unlock(); },\n            (CLockedGoMutex*)(&mu));\n        mu.lock();\n        CRetrieveResult* tmp_result;\n        auto rs = Status(future_leak_and_get(job, (void**)&(tmp_result)));\n        future_destroy(job);\n        CHECK_STATUS(rs, \"Retrieve failed, errs:\");\n        result->retrieve_result_.proto_blob = tmp_result->proto_blob;\n        result->retrieve_result_.proto_size = tmp_result->proto_size;\n        return Status::Ok();\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Retrieve failed, err: {}\", e.what());\n        return Status::SegcoreErr(e.what());\n    }\n}\n\nStatus\nSegcoreWrapper::Search(const std::string& plan,\n                       const std::string& placeholder_group,\n                       SearchResult* result) {\n    try {\n        SearchPlanWrapper search_plan;\n        CHECK_STATUS(\n            Status(::CreateSearchPlanByExpr(\n                collection_, plan.c_str(), plan.size(), &search_plan.plan_)),\n            \"Create search plan failed, err:\");\n\n        PlaceholderGroupWrapper group;\n        CHECK_STATUS(\n            Status(::ParsePlaceholderGroup(search_plan.plan_,\n                                           (void*)placeholder_group.c_str(),\n                                           placeholder_group.size(),\n                                           &group.group_)),\n            \"Parse placeholder group failed\");\n        SearchResultWrapper search_result;\n        auto job = ::AsyncSearch(\n            {}, segment_, search_plan.plan_, group.group_, GetTimestamp(), 2);\n        std::mutex mu;\n        mu.lock();\n        future_register_ready_callback(\n            job,\n            [](CLockedGoMutex* mutex) { ((std::mutex*)(mutex))->unlock(); },\n            (CLockedGoMutex*)(&mu));\n        mu.lock();\n        auto rs =\n            Status(future_leak_and_get(job, (void**)&(search_result.ret_)));\n        future_destroy(job);\n        CHECK_STATUS(rs, \"Search failed\");\n\n        CHECK_STATUS(\n            Status(::ReduceSearchResultsAndFillData({},\n                                                    &(result->blob_),\n                                                    search_plan.plan_,\n                                                    &(search_result.ret_),\n                                                    1,\n                                                    result->slice_nqs_.data(),\n                                                    result->slice_topKs_.data(),\n                                                    result->slice_nqs_.size())),\n            \"Reduce search result failed\");\n        result->result_.resize(result->slice_nqs_.size());\n        for (size_t i = 0; i < result->slice_nqs_.size(); i++) {\n            CHECK_STATUS(Status(::GetSearchResultDataBlob(\n                             &(result->result_[i]), result->blob_, i)),\n                         \"Get search reault blob failed\");\n        }\n\n        return Status::Ok();\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Search failed, err: {}\", e.what());\n        return Status::SegcoreErr(e.what());\n    }\n}\n\nStatus\nSegcoreWrapper::DeleteByIds(const std::string& ids, int64_t size) {\n    CHECK_STATUS(Status(::Delete(segment_,\n                                 0,\n                                 size,\n                                 reinterpret_cast<const uint8_t*>(ids.data()),\n                                 ids.size(),\n                                 GetTimestamps(size).data())),\n                 \"Detete failed\");\n    return Status::Ok();\n}\n\nstd::vector<uint64_t>\nSegcoreWrapper::GetTimestamps(int64_t size) {\n    auto ts = GetTimestamp();\n    return std::vector<uint64_t>(size, ts);\n}\n\nuint64_t\nSegcoreWrapper::GetTimestamp() {\n    auto now = std::chrono::system_clock::now();\n    auto duration = now.time_since_epoch();\n    auto ms =\n        std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();\n    return (ms << 18) + cur_id_;\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/segcore_wrapper.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <cstdint>\n#include <string>\n#include <vector>\n#include <filesystem>\n#include <stdexcept>\n#include <system_error>\n#include <unistd.h>\n#include <cstdlib>\n#include <cstring>\n#include \"status.h\"\n#include \"retrieve_result.h\"\n#include \"search_result.h\"\n#include \"segcore/collection_c.h\"\n#include \"segcore/segcore_init_c.h\"\n#include \"segcore/segment_c.h\"\n#include \"storage/storage_c.h\"\nnamespace milvus::local {\ninline std::string GetDataPath() {\n    const char* home = std::getenv(\"HOME\");\n    if (home == nullptr) {\n        throw std::runtime_error(\"HOME environment variable is not set. Please set HOME environment variable.\");\n    }\n    \n    std::string data_path = std::string(home) + \"/.cache/milvus\";\n    \n    try {\n        std::filesystem::create_directories(data_path);\n    } catch (const std::exception& e) {\n        throw std::runtime_error(\"Cannot create cache directory '\" + data_path + \"': \" + e.what());\n    }\n    \n    if (!std::filesystem::is_directory(data_path)) {\n        throw std::runtime_error(\"Cache path '\" + data_path + \"' is not a directory.\");\n    }\n    \n    std::string test_pattern = data_path + \"/.perm-probeXXXXXX\";\n    char test_file[test_pattern.length() + 1];\n    strcpy(test_file, test_pattern.c_str());\n    \n    int fd = mkstemp(test_file);\n    if (fd == -1) {\n        throw std::runtime_error(\"Cache directory '\" + data_path + \"' is not writable by current user. Please check permissions.\");\n    }\n    \n    close(fd);\n    unlink(test_file);\n    \n    return data_path;\n}\n\nconst std::string data_path = GetDataPath();\n\nclass SegcoreWrapper final : NonCopyableNonMovable {\n public:\n    SegcoreWrapper() : collection_(nullptr), cur_id_(0), segment_(nullptr) {\n        SegcoreSetEnableInterminSegmentIndex(true);\n        \n        auto status = InitLocalChunkManagerSingleton(data_path.c_str());\n        if (status.error_code != 0) {\n            throw std::runtime_error(\"Failed to initialize LocalChunkManager: \" + std::string(status.error_msg));\n        }\n        \n        CMmapConfig conf;\n        conf.growing_enable_mmap = false;\n        conf.scalar_index_enable_mmap = false;\n        conf.cache_read_ahead_policy = \"willneed\";\n        conf.mmap_path = data_path.c_str();\n        conf.disk_limit = 1024;\n        conf.scalar_field_enable_mmap = false;\n        conf.vector_field_enable_mmap = false;\n        conf.vector_index_enable_mmap = false;\n        conf.fix_file_size = 1024;\n        \n        status = InitMmapManager(conf);\n        if (status.error_code != 0) {\n            throw std::runtime_error(\"Failed to initialize MmapManager: \" + std::string(status.error_msg));\n        }\n    }\n    virtual ~SegcoreWrapper();\n\n public:\n    Status\n    SetCollectionInfo(const std::string& collection_name_,\n                      const std::string& collection_info,\n                      const std::string& index_meta);\n\n    Status\n    SetIndexMeta(const std::string& meta_info);\n\n    Status\n    CreateIndex(const std::string& meta_info);\n\n    Status\n    Insert(int64_t size, const std::string& insert_record_proto);\n\n    Status\n    Retrieve(const std::string& plan, RetrieveResult* result);\n\n    Status\n    Search(const std::string& plan,\n           const std::string& placeholder_group,\n           SearchResult* result);\n\n    Status\n    DeleteByIds(const std::string& ids, int64_t size);\n\n private:\n    std::vector<uint64_t>\n    GetTimestamps(int64_t size);\n\n    uint64_t\n    GetTimestamp();\n\n    std::string\n    NewCollectionInfo(const std::string& info);\n\n private:\n    CCollection collection_;\n    int64_t cur_id_;\n    CSegmentInterface segment_;\n    std::string collection_name_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/server.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"milvus_service_impl.h\"\n#include <iostream>\n#include \"log/Log.h\"\n#include \"string_util.hpp\"\n#include <string>\n#include <glog/logging.h>\n#include <grpcpp/grpcpp.h>\n#include <fcntl.h>\n#include <unistd.h>\n\nint\nBlockLock(const char* filename) {\n    int fd = open(filename, O_RDWR | O_CREAT, 0666);\n    if (fd == -1) {\n        LOG_ERROR(\"Open lock file {} failed\", filename);\n        return -1;\n    }\n    struct flock fl;\n    fl.l_type = F_WRLCK;\n    fl.l_whence = SEEK_SET;\n    fl.l_start = 0;\n    fl.l_len = 0;\n    // block lock\n    if (fcntl(fd, F_SETLKW, &fl) == -1) {\n        close(fd);\n        return -1;\n    }\n    // unlock file\n    fl.l_type = F_UNLCK;\n    if (fcntl(fd, F_SETLK, &fl) == -1) {\n        return -1;\n    }\n    LOG_INFO(\"Process exit\");\n    close(fd);\n    return 0;\n}\n\nint\nmain(int argc, char** argv) {\n    google::InitGoogleLogging(argv[0]);\n    if (!(argc == 3 || argc == 4 || argc == 5)) {\n        return -1;\n    }\n\n    std::string work_dir = argv[1];\n    std::string address = argv[2];\n    std::string log_level = \"ERROR\";\n    if (argc >= 4) {\n        log_level = argv[3];\n    }\n    if (log_level == \"INFO\") {\n        google::SetStderrLogging(google::INFO);\n    } else {\n        google::SetStderrLogging(google::ERROR);\n    }\n\n    ::milvus::local::MilvusServiceImpl service(work_dir);\n    if (!service.Init()) {\n        LOG_ERROR(\"Init milvus failed\");\n        return -1;\n    }\n    ::grpc::ServerBuilder builder;\n    builder.SetMaxReceiveMessageSize(268435456);\n    builder.SetMaxSendMessageSize(536870912);\n    builder.AddListeningPort(address, grpc::InsecureServerCredentials());\n    builder.RegisterService(&service);\n    std::unique_ptr<::grpc::Server> server(builder.BuildAndStart());\n    LOG_INFO(\"Start milvus-local success...\");\n    if (argc == 5) {\n        auto filename = argv[4];\n        /*\n          Blocked while attempting to acquire a file lock held by the parent process.\n          When the lock is successfully acquired, it indicates that the parent process has exited,\n          and the child process should exit as well.\n        */\n        BlockLock(filename);\n    } else {\n        server->Wait();\n    }\n    return 0;\n}\n"
  },
  {
    "path": "src/status.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <string>\n#include \"common/type_c.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\n// errors are the subset of milvus/pkg/merr/errors.go\nenum ErrCode {\n    Succ = 0,\n    ErrServiceInternal = 5,\n    ErrCollectionNotFound = 100,\n    ErrCollectionNotLoaded = 101,\n    ErrCollectionNumLimitExceeded = 102,\n    ErrCollectionNotFullyLoaded = 103,\n    ErrCollectionLoaded = 104,\n    ErrCollectionIllegalSchema = 105,\n\n    // not in milvus\n    ErrCollectionAlreadExist = 199,\n\n    ErrIndexNotFound = 700,\n    ErrIndexNotSupported = 701,\n    ErrIndexDuplicate = 702,\n\n    ErrParameterInvalid = 1100,\n    ErrParameterMissing = 1101,\n\n    ErrMetricNotFound = 1200,\n\n    ErrFieldNotFound = 1700,\n    ErrFieldInvalidName = 1701,\n\n    ErrMissingRequiredParameters = 1802,\n    ErrMarshalCollectionSchema = 1803,\n    ErrInvalidInsertData = 1804,\n    ErrInvalidSearchResult = 1805,\n    ErrCheckPrimaryKey = 1806,\n\n    ErrSegcore = 2000,\n\n    ErrUndefined = 65535\n\n};\n\nclass Status {\n public:\n    explicit Status(CStatus cstatus) {\n        if (cstatus.error_code != 0) {\n            msg_ = \"segcore error\";\n            code_ = ErrSegcore;\n            detail_ = cstatus.error_msg;\n            free((void*)cstatus.error_msg);\n            cstatus.error_msg = NULL;\n        } else {\n            code_ = 0;\n            msg_ = \"\";\n            detail_ = \"\";\n        }\n    }\n\n private:\n    Status(int code, const std::string& msg, const std::string& detail = \"\")\n        : code_(code), msg_(msg), detail_(detail) {\n    }\n\n public:\n    virtual ~Status() = default;\n\n    Status(const Status& rhs) = default;\n    Status&\n    operator=(const Status& rhs) = default;\n\n    Status(Status&& rhs) : code_(rhs.code_) {\n        msg_ = std::move(rhs.msg_);\n        detail_ = std::move(rhs.detail_);\n    }\n\n    Status&\n    operator=(Status&& rhs);\n\n public:\n    template <class... Args>\n    static Status\n    ServiceInternal(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrServiceInternal,\n                      \"internal error\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    SegcoreErr(const std::string& detail = \"\", Args&&... args) {\n        return Status(\n            ErrSegcore, \"segcore error\", string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    CollectionNotFound(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrCollectionNotFound,\n                      \"collection not found\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    CollectionAlreadExist(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrCollectionAlreadExist,\n                      \"collection alread exists\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    CollectionNotLoaded(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrCollectionNotLoaded,\n                      \"collection not loaded\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    CollectionLoaded(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrCollectionLoaded,\n                      \"collection already loaded\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    CollectionIllegalSchema(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrCollectionIllegalSchema,\n                      \"illegal collection schema\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    IndexNotFound(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrIndexNotFound,\n                      \"index not found\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    IndexNotSupported(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrIndexNotSupported,\n                      \"index type not supported\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    IndexDuplicate(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrIndexDuplicate,\n                      \"index duplicates\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    ParameterInvalid(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrParameterInvalid,\n                      \"invalid parameter\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    ParameterMissing(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrParameterMissing,\n                      \"missing parameter\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    MetricNotFound(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrMetricNotFound,\n                      \"metric not found\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    FieldNotFound(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrFieldNotFound,\n                      \"field not found\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    FieldInvalidName(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrFieldInvalidName,\n                      \"field name invalid\",\n                      string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    Undefined(const std::string& detail = \"\", Args&&... args) {\n        return Status(ErrUndefined, \"\", string_util::SFormat(detail, args...));\n    }\n\n    template <class... Args>\n    static Status\n    Ok(const std::string& detail = \"\", Args&&... args) {\n        return Status(0, \"\", string_util::SFormat(detail, args...));\n    }\n\n public:\n    bool\n    IsOk() {\n        return code_ == 0;\n    }\n\n    bool\n    IsErr() {\n        return code_ != 0;\n    }\n\n    int\n    Code() {\n        return code_;\n    }\n\n    const std::string&\n    Msg() {\n        return msg_;\n    }\n\n    const std::string&\n    Detail() {\n        return detail_;\n    }\n\n private:\n    int code_;\n    std::string msg_;\n    std::string detail_;\n};\n\ninline Status&\nStatus::operator=(Status&& rhs) {\n    code_ = rhs.code_;\n    msg_ = std::move(rhs.msg_);\n    detail_ = std::move(rhs.detail_);\n    return *this;\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/bm25_stats.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"bm25_stats.h\"\n#include \"log/Log.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\nbool\nBM25Stats::AddTokenDoc(SQLite::Database* db,\n                       const std::string& collection_name,\n                       const std::string& output_field_name,\n                       const std::map<uint32_t, int32_t>& token_infos) {\n    SQLite::Statement query(\n        *db,\n        \"INSERT INTO token_doc_count (collection_name, \"\n        \"output_field_name, token, doc_count) \"\n        \"VALUES (?, ?, ?, ?) \"\n        \"ON CONFLICT(collection_name, output_field_name, token) \"\n        \"DO UPDATE SET doc_count = doc_count + excluded.doc_count\");\n    try {\n        for (const auto& [token, count] : token_infos) {\n            query.bind(1, collection_name);\n            query.bind(2, output_field_name);\n            query.bind(3, token);\n            query.bind(4, count);\n            query.exec();\n            query.reset();\n        }\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Update bm25 stats failed, err: {}\", e.what());\n        return false;\n    }\n    return true;\n}\n\nbool\nBM25Stats::DeleteTokenDoc(SQLite::Database* db,\n                          const std::string& collection_name,\n                          const std::string& output_field_name,\n                          const std::map<uint32_t, int32_t>& token_infos) {\n    SQLite::Statement query(\n        *db,\n        \"UPDATE token_doc_count \"\n        \"SET doc_count = doc_count - ? \"\n        \"WHERE collection_name = ? AND output_field_name = ? AND token = ?\");\n\n    try {\n        for (const auto& [token, count] : token_infos) {\n            query.bind(1, count);\n            query.bind(2, collection_name);\n            query.bind(3, output_field_name);\n            query.bind(4, token);\n            query.exec();\n            query.reset();\n        }\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Update bm25 stats failed, err: {}\", e.what());\n        return false;\n    }\n    return true;\n}\n\nint32_t\nBM25Stats::GetTokenDocCount(SQLite::Database* db,\n                            const std::string& collection_name,\n                            const std::string& output_field_name,\n                            uint32_t token) {\n    try {\n        SQLite::Statement query(\n            *db,\n            \"SELECT doc_count FROM token_doc_count WHERE collection_name = ? \"\n            \"AND output_field_name = ? AND token = ?\");\n\n        query.bind(1, collection_name);\n        query.bind(2, output_field_name);\n        query.bind(3, token);\n\n        if (query.executeStep()) {\n            return query.getColumn(0).getInt();\n        }\n        return 0;\n    } catch (const SQLite::Exception& e) {\n        LOG_ERROR(\"Failed to get token doc count, err: {} \", e.what());\n        return -1;\n    }\n    return -1;\n}\n\nstd::pair<uint32_t, int32_t>\nBM25Stats::GetTokenNumAndDocNum(SQLite::Database* db,\n                                const std::string& collection_name,\n                                const std::string& output_field_name) {\n    try {\n        SQLite::Statement query(\n            *db,\n            \"SELECT token_num, doc_num FROM bm25_stats \"\n            \"WHERE collection_name = ? AND output_field_name = ?\");\n\n        query.bind(1, collection_name);\n        query.bind(2, output_field_name);\n\n        if (query.executeStep()) {\n            return std::make_pair(query.getColumn(0).getInt(),\n                                  query.getColumn(1).getInt());\n        }\n        return std::make_pair(0, -1);\n    } catch (const SQLite::Exception& e) {\n        LOG_ERROR(\"Failed to get token num and doc num, err: {} \", e.what());\n        return std::make_pair(0, -1);\n    }\n}\n\nbool\nBM25Stats::DeleteBM25Stats(SQLite::Database* db,\n                           const std::string& collection_name,\n                           const std::string& output_field_name,\n                           uint32_t token_num,\n                           int32_t doc_num) {\n    try {\n        SQLite::Statement query(\n            *db,\n            \"UPDATE bm25_stats \"\n            \"SET token_num = token_num - ?, \"\n            \"doc_num = doc_num - ?\"\n            \"WHERE collection_name = ? AND output_field_name = ?\");\n\n        query.bind(1, token_num);\n        query.bind(2, doc_num);\n        query.bind(3, collection_name);\n        query.bind(4, output_field_name);\n        query.exec();\n        return true;\n    } catch (const SQLite::Exception& e) {\n        LOG_ERROR(\"Failed to updata bm25 stats: {}\", e.what());\n        return false;\n    }\n}\n\nbool\nBM25Stats::AddBM25Stats(SQLite::Database* db,\n                        const std::string& collection_name,\n                        const std::string& output_field_name,\n                        uint32_t token_num,\n                        int32_t doc_num) {\n    try {\n        SQLite::Statement query(\n            *db,\n            \"INSERT INTO bm25_stats (collection_name, \"\n            \"output_field_name, token_num, doc_num) \"\n            \"VALUES (?, ?, ?, ?) \"\n            \"ON CONFLICT(collection_name, output_field_name) \"\n            \"DO UPDATE SET \"\n            \"token_num = token_num + excluded.token_num, \"\n            \"doc_num = doc_num + excluded.doc_num\");\n\n        query.bind(1, collection_name);\n        query.bind(2, output_field_name);\n        query.bind(3, static_cast<int64_t>(token_num));\n        query.bind(4, doc_num);\n\n        query.exec();\n        return true;\n    } catch (const SQLite::Exception& e) {\n        LOG_ERROR(\"Failed to updata bm25 stats: {}\", e.what());\n        return false;\n    }\n}\n\nbool\nBM25Stats::CreateTables(SQLite::Database* db) {\n    auto table_create_cmd = R\"(\nCREATE TABLE IF NOT EXISTS bm25_stats (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    collection_name VARCHAR(1000),\n    output_field_name VARCHAR(1000),\n    token_num INTEGER,\n    doc_num INTEGER,\n    UNIQUE (collection_name, output_field_name)\n);\n\nCREATE TABLE IF NOT EXISTS token_doc_count (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    collection_name VARCHAR,\n    output_field_name VARCHAR,\n    token INTEGER,\n    doc_count INTEGER,\n    UNIQUE (collection_name, output_field_name, token)\n);\n)\";\n    if (db->tryExec(table_create_cmd) != 0) {\n        const char* err = db->getErrorMsg();\n        LOG_ERROR(\"Create table failed, errs: {}\", err);\n        return false;\n    }\n    return true;\n}\n\nbool\nBM25Stats::DropCollectionStats(SQLite::Database* db,\n                               const std::string& collection_name) {\n    try {\n        {\n            SQLite::Statement query(*db,\n                                    \"DELETE FROM bm25_stats \"\n                                    \"WHERE collection_name=?\");\n            query.bind(1, collection_name);\n            query.exec();\n        }\n        {\n            SQLite::Statement query(*db,\n                                    \"DELETE FROM token_doc_count \"\n                                    \"WHERE collection_name=?\");\n            query.bind(1, collection_name);\n            query.exec();\n        }\n        return true;\n    } catch (const SQLite::Exception& e) {\n        LOG_ERROR(\"Clear collection {}'s bm25 stats failed, {}\",\n                  collection_name,\n                  e.what());\n        return false;\n    }\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/bm25_stats.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n/*\n *  * Table: bm25_stats\n * +---------+----------------+------------------+-----------+---------+\n * |    id   | collection_name| output_field_name| token_num | rows_num|\n * +---------+----------------+------------------+-----------+---------+\n * | INTEGER | VARCHAR (PK)   | VARCHAR (PK)     | INTEGER   | INTEGER |\n * +----------------+------------------+-----------+---------+---------+\n\n  *  * Table: token_doc_count\n * +---------+----------------+------------------+-----------+---------+\n * |    id   | collection_name| output_field_name| token     |doc_count|\n * +---------+----------------+------------------+-----------+---------+\n * | INTEGER | VARCHAR (PK)   | VARCHAR (PK)     | INTEGER   | INTEGER |\n * +----------------+------------------+-----------+---------+---------+\n */\n\n#pragma once\n\n#include <vector>\n\n#include \"common.h\"\n#include \"SQLiteCpp/Database.h\"\n\nnamespace milvus::local {\nclass BM25Stats {\n public:\n    bool\n    AddTokenDoc(SQLite::Database* db,\n                const std::string& collection_name,\n                const std::string& output_field_name,\n                const std::map<uint32_t, int32_t>& token_infos);\n\n    bool\n    DeleteTokenDoc(SQLite::Database* db,\n                   const std::string& collection_name,\n                   const std::string& output_field_name,\n                   const std::map<uint32_t, int32_t>& token_infos);\n\n    int32_t\n    GetTokenDocCount(SQLite::Database* db,\n                     const std::string& collection_name,\n                     const std::string& output_field_name,\n                     uint32_t token);\n\n    std::pair<uint32_t, int32_t>\n    GetTokenNumAndDocNum(SQLite::Database* db,\n                         const std::string& collection_name,\n                         const std::string& output_field_name);\n    bool\n    AddBM25Stats(SQLite::Database* db,\n                 const std::string& collection_name,\n                 const std::string& output_field_name,\n                 uint32_t token_num,\n                 int32_t doc_num);\n\n    bool\n    DeleteBM25Stats(SQLite::Database* db,\n                    const std::string& collection_name,\n                    const std::string& output_field_name,\n                    uint32_t token_num,\n                    int32_t doc_num);\n\n    bool\n    DropCollectionStats(SQLite::Database* db,\n                        const std::string& collection_name);\n\n    bool\n    CreateTables(SQLite::Database* db);\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/collection_data.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"collection_data.h\"\n#include <SQLiteCpp/VariadicBind.h>\n// #include <sqlite3.h>\n#include <cstdint>\n#include <exception>\n#include <string>\n#include <vector>\n#include \"string_util.hpp\"\n\n#include \"log/Log.h\"\n\nnamespace milvus::local {\n\nCollectionData::CollectionData(const char* collection_name)\n    : collection_name_(collection_name),\n      col_id_(\"id\"),\n      col_milvus_id_(\"milvus_id\"),\n      col_data_(\"data\") {\n}\nCollectionData::~CollectionData() {\n}\n\nstd::string\nCollectionData::GetTableCreateSql() {\n    return string_util::SFormat(\n        \"CREATE TABLE IF NOT EXISTS \\\"{}\\\" ({} INTEGER PRIMARY KEY, {} \"\n        \"VARCHAR(1024), {} BLOB);\",\n        collection_name_,\n        col_id_,\n        col_milvus_id_,\n        col_data_);\n}\n\nbool\nCollectionData::CreateCollection(SQLite::Database* db) {\n    const std::string table_create_sql = GetTableCreateSql();\n    if (db->tryExec(table_create_sql) != 0) {\n        const char* err = db->getErrorMsg();\n        LOG_ERROR(\"Create table {} failed, errs: {}\", collection_name_, err);\n        return false;\n    }\n    return true;\n}\n\nbool\nCollectionData::DropCollection(SQLite::Database* db) {\n    // DROP TABLE {collection_name_}\n    std::string drop_sql =\n        string_util::SFormat(\"DROP TABLE '{}'\", collection_name_);\n\n    if (db->tryExec(drop_sql) != 0) {\n        const char* err = db->getErrorMsg();\n        LOG_ERROR(\"Drop collection {} failed, errs: {}\", collection_name_, err);\n        return false;\n    }\n    return true;\n}\n\nint\nCollectionData::Insert(SQLite::Database* db,\n                       const std::string& milvus_id,\n                       const std::string& data) {\n    std::string insert_sql = string_util::SFormat(\n        \"INSERT INTO \\\"{}\\\" VALUES (NULL, ?, ?)\", collection_name_);\n    try {\n        SQLite::Statement query(*db, insert_sql);\n        SQLite::bind(query, milvus_id, data);\n        return query.exec();\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Insert data failed, errs: {}\", e.what());\n        return -1;\n    }\n}\n\nbool\nCollectionData::GetByIDs(SQLite::Database* db,\n                         const std::vector<std::string>& milvus_ids,\n                         std::vector<Row>* rows) {\n    std::stringstream ss;\n    for (size_t i = 0; i < milvus_ids.size(); i++) {\n        ss << \"'\" << milvus_ids[i] << \"'\";\n        if (i < milvus_ids.size() - 1)\n            ss << \",\";\n    }\n\n    std::string select_sql =\n        string_util::SFormat(\"SELECT {},{} FROM '{}' WHERE {} IN ({})\",\n                             col_milvus_id_,\n                             col_data_,\n                             collection_name_,\n                             col_milvus_id_,\n                             ss.str());\n    try {\n        SQLite::Statement query(*db, select_sql);\n        while (query.executeStep()) {\n            rows->push_back(std::make_tuple(query.getColumn(0).getString(),\n                                            query.getColumn(1).getString()));\n        }\n        return true;\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Get by ids failed, errs: {}\", e.what());\n        return false;\n    }\n}\n\nvoid\nCollectionData::Load(SQLite::Database* db,\n                     int64_t start,\n                     int64_t limit,\n                     std::vector<std::string>* output_rows) {\n    // SELECT {col_data_} from {collection_name_} LIMIT {limit} OFFSET {start}\n    std::string select_sql =\n        string_util::SFormat(\"SELECT {} from '{}' LIMIT {} OFFSET {}\",\n                             col_data_,\n                             collection_name_,\n                             limit,\n                             start);\n    try {\n        SQLite::Statement query(*db, select_sql);\n        while (query.executeStep()) {\n            output_rows->push_back(query.getColumn(0).getString());\n        }\n\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Load data failed, errs: {}\", e.what());\n    }\n}\n\nint\nCollectionData::Delete(SQLite::Database* db,\n                       const std::vector<std::string>& milvus_ids) {\n    // DELETE FROM {collection_name_} WHERE {col_milvus_id} in ({})\n    std::stringstream ss;\n    for (size_t i = 0; i < milvus_ids.size(); i++) {\n        ss << \"'\" << milvus_ids[i] << \"'\";\n        if (i < milvus_ids.size() - 1)\n            ss << \",\";\n    }\n\n    std::string delete_sql =\n        string_util::SFormat(\"DELETE FROM '{}' WHERE {} IN ({})\",\n                             collection_name_,\n                             col_milvus_id_,\n                             ss.str());\n\n    try {\n        SQLite::Statement query(*db, delete_sql);\n        return query.exec();\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Delete data failed, errs: {}\", e.what());\n        return -1;\n    }\n}\n\nint64_t\nCollectionData::Count(SQLite::Database* db) {\n    // SELECT count(*) FROM {};\n    std::string count_sql =\n        string_util::SFormat(\"SELECT count(*) FROM '{}'\", collection_name_);\n    try {\n        SQLite::Statement query(*db, count_sql);\n        query.executeStep();\n        return query.getColumn(0).getInt64();\n    } catch (std::exception& e) {\n        LOG_ERROR(\"count data failed, errs: {}\", e.what());\n        return -1;\n    }\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/collection_data.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n/*                     collection data table\n\n           ──────┬─────────────┬────────────\n             id  │  milvus_id  │   data\n                 │             │\n                 │             │\n           ──────┼─────────────┼────────────\n             1   │   1234      │   xxxx\n                 │             │\n           ──────┼─────────────┼────────────\n                 │             │\n             2   │   1235      │   xxxx\n                 │             │\n           ──────┼─────────────┼────────────\n                 │             │\n             3   │   1236      │   xxxx\n                 │             │\n          ───────┼─────────────┼────────────\n                 │             │\n             4   │   1237      │   xxxx\n                 │             │\n          ───────┼─────────────┼────────────\n                 │             │\n             5   │   1238      │   xxxx\n                 │             │\n                 │             │\n           ──────┴─────────────┴────────────\n\n\n*/\n\n#pragma once\n#include <SQLiteCpp/Database.h>\n#include <cstdint>\n#include <string>\n#include <vector>\n#include \"type.h\"\n#include \"common.h\"\n\nnamespace milvus::local {\n\nclass CollectionData final : NonCopyableNonMovable {\n public:\n    explicit CollectionData(const char*);\n    virtual ~CollectionData();\n\n public:\n    int\n    Insert(SQLite::Database* db,\n           const std::string& milvus_id,\n           const std::string& data);\n\n    int\n    Delete(SQLite::Database* db, const std::vector<std::string>& milvus_ids);\n    // int\n    // upsert(SQLite::Database* db, std::string& milvus_id, const std::string& data);\n    // const char*\n    // get(SQLite::Database* db, const std::string& milvus_id);\n\n    bool\n    GetByIDs(SQLite::Database* db,\n             const std::vector<std::string>& milvus_ids,\n             std::vector<Row>* rows);\n\n    void\n    Load(SQLite::Database* db,\n         int64_t start,\n         int64_t limit,\n         std::vector<std::string>* output_rows);\n\n    bool\n    CreateCollection(SQLite::Database* db);\n\n    bool\n    DropCollection(SQLite::Database* db);\n\n    const std::string&\n    GetTableName() {\n        return collection_name_;\n    }\n\n    int64_t\n    Count(SQLite::Database* db);\n\n private:\n    std::string\n    GetTableCreateSql();\n\n private:\n    const std::string collection_name_;\n\n    // table column name\n    const std::string col_id_;\n    const std::string col_milvus_id_;\n    const std::string col_data_;\n};\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/collection_meta.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"collection_meta.h\"\n#include <SQLiteCpp/VariadicBind.h>\n// #include <sqlite3.h>\n#include <exception>\n#include <memory>\n#include <tuple>\n#include \"log/Log.h\"\n#include \"string_util.hpp\"\n\nnamespace milvus::local {\n\nconst std::string kSchemaStr = \"schema\";\nconst std::string kIndexStr = \"index\";\nconst std::string kPartitionStr = \"PARTITION\";\n\nCollectionMeta::CollectionMeta()\n    : table_meta_name_(\"collection_meta\"),\n      col_id_(\"id\"),\n      col_collection_name_(\"collection_name\"),\n      col_meta_type_(\"meta_type\"),\n      col_blob_field_(\"blob_field\"),\n      col_string_field_(\"string_field\") {\n}\n\nCollectionMeta::~CollectionMeta() {\n}\n\nbool\nCollectionMeta::LoadMeta(SQLite::Database* db) {\n    // SELECT * FROM {table_meta_name_}\n    std::string load_cmd =\n        string_util::SFormat(\"SELECT * FROM {}\", table_meta_name_);\n    try {\n        SQLite::Statement query(*db, load_cmd);\n        while (query.executeStep()) {\n            auto collection_name = query.getColumn(1).getString();\n            LOG_INFO(\"Load {}'s meta\", collection_name);\n            if (collections_.find(collection_name) == collections_.end()) {\n                collections_.emplace(collection_name,\n                                     std::make_unique<CollectionInfo>());\n            }\n            auto meta_type = query.getColumn(2).getString();\n            if (meta_type == kSchemaStr) {\n                auto info =\n                    static_cast<const char*>(query.getColumn(3).getBlob());\n                auto pk_name = query.getColumn(4).getString();\n                collections_[collection_name]->AddSchema(info, pk_name);\n            } else if (meta_type == kIndexStr) {\n                auto info =\n                    static_cast<const char*>(query.getColumn(3).getBlob());\n                auto index_name = query.getColumn(4).getString();\n                collections_[collection_name]->AddIndex(index_name, info);\n            } else {\n                LOG_ERROR(\"Unkown meta data\");\n                return false;\n            }\n        }\n        return true;\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Load meta data failed, err: {}\", e.what());\n        return false;\n    }\n}\n\nbool\nCollectionMeta::CreateTable(SQLite::Database* db) {\n    const std::string table_create_cmd = string_util::SFormat(\n        \"CREATE TABLE IF NOT EXISTS {} ({} INTEGER PRIMARY KEY, {} \"\n        \"VARCHAR(1024), {} VARCHAR(1024), {} BLOB, {} \"\n        \"VARCHAR(1024))\",\n        table_meta_name_,\n        col_id_,\n        col_collection_name_,\n        col_meta_type_,\n        col_blob_field_,\n        col_string_field_);\n\n    if (db->tryExec(table_create_cmd) != 0) {\n        const char* err = db->getErrorMsg();\n        LOG_ERROR(\"Create table failed, errs: {}\", err);\n        return false;\n    }\n    return true;\n}\n\nbool\nCollectionMeta::Init(SQLite::Database* db) {\n    return CreateTable(db) && LoadMeta(db);\n}\n\nbool\nCollectionMeta::CreateCollection(SQLite::Database* db,\n                                 const std::string& collection_name,\n                                 const std::string& pk_name,\n                                 const std::string& schema_proto) {\n    collections_.emplace(collection_name, std::make_unique<CollectionInfo>());\n    collections_[collection_name]->AddSchema(schema_proto.c_str(), pk_name);\n\n    // INSERT INTO {table_name} VALUES (NULL, {collection_name}, \"schema\", {data}, NULL)\n    std::string insert_cmd = string_util::SFormat(\n        \"INSERT INTO {} VALUES (NULL, ?, ?, ?, ?)\", table_meta_name_);\n    try {\n        SQLite::Statement query(*db, insert_cmd);\n        SQLite::bind(query, collection_name, kSchemaStr, schema_proto, pk_name);\n        return query.exec() == 1;\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Insert data failed, errs: {}\", e.what());\n        return false;\n    }\n}\n\nconst std::string&\nCollectionMeta::GetCollectionSchema(const std::string& collection_name) {\n    return collections_[collection_name]->Schema();\n}\n\nbool\nCollectionMeta::CreateIndex(SQLite::Database* db,\n                            const std::string& collection_name,\n                            const std::string& index_name,\n                            const std::string& index_proto) {\n    // INSERT INTO {table_name} VALUES (NULL, {collection_name}, \"schema\", {data}, NULL)\n    collections_[collection_name]->AddIndex(index_name, index_proto.c_str());\n    std::string insert_cmd = string_util::SFormat(\n        \"INSERT INTO {} VALUES (NULL, ?, 'index', ?, ?)\", table_meta_name_);\n    try {\n        SQLite::Statement query(*db, insert_cmd);\n        SQLite::bind(query, collection_name, index_proto, index_name);\n        return query.exec() == 1;\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Add index failed, err: {}\", e.what());\n        return false;\n    }\n}\n\nbool\nCollectionMeta::GetCollectionIndex(const std::string& collection_name,\n                                   const std::string& index_name,\n                                   std::string* output_index_info) {\n    return collections_[collection_name]->GetIndex(index_name,\n                                                   output_index_info);\n}\n\nvoid\nCollectionMeta::GetAllIndex(const std::string& collection_name,\n                            const std::string& exclude,\n                            std::vector<std::string>* all_index) {\n    collections_[collection_name]->GetAllIndexs(all_index, exclude);\n}\n\nbool\nCollectionMeta::DropCollection(SQLite::Database* db,\n                               const std::string& collection_name) {\n    // DELETE FROM {table_name} WHERE {col_collection_name_}={collection_name};\n    std::string delete_cmd = string_util::SFormat(\n        \"DELETE FROM {} WHERE \"\n        \"{}='{}'\",\n        table_meta_name_,\n        col_collection_name_,\n        collection_name);\n    try {\n        collections_.erase(collection_name);\n        db->exec(delete_cmd);\n        return true;\n    } catch (std::exception& e) {\n        LOG_ERROR(\n            \"Drop collection: {} failed, err: {}\", collection_name, e.what());\n        return false;\n    }\n}\n\nbool\nCollectionMeta::DropIndex(SQLite::Database* db,\n                          const std::string& collection_name,\n                          const std::string& index_name) {\n    // DELETE FROM {table_name} WHERE {col_collection_name_}={collection_name} and {col_meta_type_}={kIndexStr} and {col_string_field_}={index_name};\n    std::string drop_index_cmd = string_util::SFormat(\n        \"DELETE FROM {} WHERE \"\n        \"{}='{}' and {}='{}' and {}='{}'\",\n        table_meta_name_,\n        col_collection_name_,\n        collection_name,\n        col_meta_type_,\n        kIndexStr,\n        col_string_field_,\n        index_name);\n    try {\n        collections_[collection_name]->DropIndex(index_name);\n        db->exec(drop_index_cmd);\n        return true;\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Drop collection {}'s index:{} failed, err: {}\",\n                  collection_name,\n                  index_name,\n                  e.what());\n        return false;\n    }\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/collection_meta.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n/*                                  meta table\n\n      ──────┬───────────────────┬─────────────┬─────────────┬────────────────\n        id  │  collection_name  │  meta_type  │  blob_field │ string_field\n            │                   │             │             │\n            │                   │             │             │\n      ──────┼───────────────────┼─────────────┼─────────────┼────────────────\n        1   │    collection1    │  schema     │   xxx       │   pk_name\n            │                   │             │             │\n      ──────┼───────────────────┼─────────────┼─────────────┼────────────────\n            │                   │             │             │\n        2   │    collection1    │  index      │   xxx       │   index1\n            │                   │             │             │\n      ──────┼───────────────────┼─────────────┼─────────────┼────────────────\n            │                   │             │             │\n        3   │    collection1    │  index      │  xxx        │   index2\n            │                   │             │             │\n      ──────┼───────────────────┼─────────────┼─────────────┼────────────────\n            │                   │             │             │\n        4   │    collection1    │  partition  │   null      │    p1\n            │                   │             │             │\n      ──────┼───────────────────┼─────────────┼─────────────┼────────────────\n            │                   │             │             │\n        5   │    collction2     │  schema     │   xxx       │    pk_name\n            │                   │             │             │\n      ──────┴───────────────────┴─────────────┴─────────────┴────────────────\n*/\n\n#pragma once\n#include <exception>\n#include <map>\n#include <memory>\n#include <set>\n#include <string>\n#include <vector>\n#include \"SQLiteCpp/Database.h\"\n#include \"log/Log.h\"\n\nnamespace milvus::local {\n\nusing SchemaInfo = std::string;\nusing IndexInfo = std::map<const std::string, const std::string>;\n\n/*\n * CollectionMeta stores metadata about all collections. The data is written to sqlite3 and a copy is saved in memory.\n * Checks such as whether a collection exists are all in storage, and CollectionMeta no longer performs related checks.\n */\n\nclass CollectionMeta final {\n public:\n    class CollectionInfo {\n     public:\n        CollectionInfo() = default;\n        ~CollectionInfo() = default;\n        CollectionInfo(const CollectionInfo&) = delete;\n        CollectionInfo&\n        operator=(const CollectionInfo&) = delete;\n        CollectionInfo(const CollectionInfo&&) = delete;\n        CollectionInfo&\n        operator=(const CollectionInfo&&) = delete;\n\n     public:\n        void\n        AddSchema(const char* info, const std::string& pk_name) {\n            schema_info_.assign(info);\n            pk_name_ = pk_name;\n        }\n\n        const std::string&\n        Schema() {\n            return schema_info_;\n        }\n        bool\n        AddIndex(const std::string& index_name, const char* index) {\n            if (index_info_.find(index_name) != index_info_.end()) {\n                LOG_ERROR(\"Index: {} already exist\", index_name);\n                return false;\n            }\n            index_info_.emplace(index_name, index);\n            return true;\n        }\n\n        bool\n        GetIndex(const std::string& index_name, std::string* index) {\n            if (index_info_.find(index_name) == index_info_.end()) {\n                return false;\n            }\n            index->assign(index_info_[index_name].c_str());\n            return true;\n        }\n\n        void\n        GetAllIndexs(std::vector<std::string>* all_index,\n                     const std::string& exclude) {\n            for (const auto& pair : index_info_) {\n                if (pair.first != exclude)\n                    all_index->push_back(pair.second);\n            }\n        }\n\n        bool\n        HasIndex(const std::string& index_name) {\n            return index_info_.find(index_name) != index_info_.end();\n        }\n\n        bool\n        DropIndex(const std::string& index_name) {\n            if (!HasIndex(index_name)) {\n                return true;\n            }\n            index_info_.erase(index_name);\n            return true;\n        }\n\n        const std::string&\n        GetPkName() {\n            return pk_name_;\n        }\n\n     private:\n        IndexInfo index_info_;\n        SchemaInfo schema_info_;\n        std::string pk_name_;\n    };\n\n public:\n    CollectionMeta();\n    ~CollectionMeta();\n\n public:\n    CollectionMeta(const CollectionMeta&) = delete;\n    CollectionMeta&\n    operator=(const CollectionMeta&) = delete;\n    CollectionMeta(const CollectionMeta&&) = delete;\n    CollectionMeta&\n    operator=(const CollectionMeta&&) = delete;\n\n public:\n    bool\n    Init(SQLite::Database* db);\n\n    bool\n    CreateCollection(SQLite::Database* db,\n                     const std::string& collection_name,\n                     const std::string& pk_name,\n                     const std::string& schema_proto);\n\n    const std::string&\n    GetCollectionSchema(const std::string& collection_name);\n\n    bool\n    CreateIndex(SQLite::Database* db,\n                const std::string& collection_name,\n                const std::string& index_name,\n                const std::string& index_proto);\n\n    void\n    GetAllIndex(const std::string& collection_name,\n                const std::string& exclude,\n                std::vector<std::string>* all_index);\n\n    bool\n    HasIndex(const std::string& collection_name,\n             const std::string& index_name) {\n        return collections_[collection_name]->HasIndex(index_name);\n    }\n\n    bool\n    DropIndex(SQLite::Database* db,\n              const std::string& collection_name,\n              const std::string& index_name);\n\n    bool\n    GetCollectionIndex(const std::string& collection_name,\n                       const std::string& index_name,\n                       std::string* ouput_index_info);\n\n    std::string\n    GetPkName(const std::string& collection_name) {\n        return collections_[collection_name]->GetPkName();\n    }\n\n    void\n    CollectionNames(std::vector<std::string>* collection_names) {\n        for (const auto& pair : collections_) {\n            collection_names->push_back(pair.first);\n        }\n    }\n\n    bool\n    DropCollection(SQLite::Database* db, const std::string& collection_name);\n\n private:\n    bool\n    CreateTable(SQLite::Database* db);\n\n    bool\n    LoadMeta(SQLite::Database* db);\n\n    // std::string\n    // schema_info(const std::string& collection_name);\n\n private:\n    // collection meta\n    std::map<std::string, std::unique_ptr<CollectionInfo>> collections_;\n\n private:\n    // sqlite3 table info\n    const std::string table_meta_name_;\n\n    // table column name\n    const std::string col_id_;\n    const std::string col_collection_name_;\n    const std::string col_meta_type_;\n    const std::string col_blob_field_;\n    const std::string col_string_field_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/storage.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"storage.h\"\n#include <SQLiteCpp/Database.h>\n#include <SQLiteCpp/Transaction.h>\n#include <cstdint>\n#include <exception>\n#include <map>\n#include <memory>\n#include <utility>\n#include <vector>\n#include \"collection_data.h\"\n#include \"log/Log.h\"\n#include \"pb/schema.pb.h\"\n#include \"segcore.pb.h\"\n#include \"storage/bm25_stats.h\"\n#include \"storage/collection_meta.h\"\n#include \"type.h\"\n\nnamespace milvus::local {\n\nStorage::Storage(const char* db_file) : db_file_(db_file) {\n}\n\nStorage::~Storage() {\n}\n\nbool\nStorage::Open() {\n    try {\n        db_ptr_ = std::make_unique<SQLite::Database>(\n            db_file_,\n            SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE |\n                SQLite::OPEN_FULLMUTEX);\n\n        SQLite::Transaction transaction(*db_ptr_.get());\n        if (!cm_.Init(db_ptr_.get())) {\n            return false;\n        }\n        std::vector<std::string> names;\n        cm_.CollectionNames(&names);\n        for (const auto& name : names) {\n            collections_.emplace(\n                name, std::make_unique<CollectionData>(name.c_str()));\n        }\n        bm25_stats_ = std::unique_ptr<BM25Stats>(new BM25Stats());\n        if (!bm25_stats_->CreateTables(db_ptr_.get())) {\n            return false;\n        }\n        transaction.commit();\n        return true;\n    } catch (std::exception& e) {\n        LOG_ERROR(\"Open storage failed, err: {}\", e.what());\n        return false;\n    }\n}\n\nbool\nStorage::CreateCollection(const std::string& collection_name,\n                          const std::string& pk_name,\n                          const std::string& schema_proto) {\n    SQLite::Transaction transaction(*db_ptr_.get());\n    if (!cm_.CreateCollection(\n            db_ptr_.get(), collection_name, pk_name, schema_proto)) {\n        return false;\n    }\n    auto data_ptr = std::make_unique<CollectionData>(collection_name.c_str());\n    if (!data_ptr->CreateCollection(db_ptr_.get())) {\n        return false;\n    }\n    collections_[collection_name] = std::move(data_ptr);\n    transaction.commit();\n    return true;\n}\n\nbool\nStorage::DropCollection(const std::string& collection_name) {\n    SQLite::Transaction transaction(*db_ptr_.get());\n    if (!cm_.DropCollection(db_ptr_.get(), collection_name)) {\n        LOG_ERROR(\"Delete collection: {}'s meta failed\", collection_name);\n        return false;\n    }\n    if (!collections_[collection_name]->DropCollection(db_ptr_.get())) {\n        LOG_ERROR(\"Delete collection: {}'s data failed\", collection_name);\n        return false;\n    }\n    collections_.erase(collection_name);\n    if (!bm25_stats_->DropCollectionStats(db_ptr_.get(), collection_name)) {\n        return false;\n    }\n    transaction.commit();\n    return true;\n}\n\nbool\nStorage::LoadCollecton(const std::string& collection_name,\n                       int64_t start,\n                       int64_t size,\n                       std::vector<std::string>* out_rows) {\n    collections_[collection_name]->Load(db_ptr_.get(), start, size, out_rows);\n    return static_cast<int64_t>(out_rows->size()) == size;\n}\n\nbool\nStorage::GetCollectionSchema(const std::string& collection_name,\n                             std::string* output_info_str) {\n    output_info_str->assign(cm_.GetCollectionSchema(collection_name).c_str());\n    return true;\n}\n\nbool\nStorage::CreateIndex(const std::string& collection_name,\n                     const std::string& index_name,\n                     const std::string& index_proto) {\n    SQLite::Transaction transaction(*db_ptr_.get());\n    if (!cm_.CreateIndex(\n            db_ptr_.get(), collection_name, index_name, index_proto)) {\n        return false;\n    }\n    transaction.commit();\n    return true;\n}\n\nbool\nStorage::GetIndex(const std::string& collection_name,\n                  const std::string& index_name,\n                  std::string* output_index_proto) {\n    return cm_.GetCollectionIndex(\n        collection_name, index_name, output_index_proto);\n}\n\nvoid\nStorage::GetAllIndex(const std::string& collection_name,\n                     const std::string& exclude,\n                     std::vector<std::string>* index_protos) {\n    cm_.GetAllIndex(collection_name, exclude, index_protos);\n}\n\nbool\nStorage::DropIndex(const std::string& collection_name,\n                   const std::string& index_name) {\n    SQLite::Transaction transaction(*db_ptr_.get());\n    if (!cm_.DropIndex(db_ptr_.get(), collection_name, index_name)) {\n        return false;\n    }\n    transaction.commit();\n    return true;\n}\n\nbool\nStorage::CollectBM25Stats(const std::vector<Row>& rows,\n                          const std::vector<std::string>& bm25_field_names,\n                          std::map<std::string, Stats>* stats) {\n    for (const auto& field_name : bm25_field_names) {\n        (*stats)[field_name] = Stats();\n        (*stats)[field_name].rows_num = rows.size();\n    }\n\n    for (const auto& row : rows) {\n        milvus::proto::segcore::InsertRecord r;\n        if (!r.ParseFromString(std::get<1>(row))) {\n            LOG_ERROR(\"Parse insert record failed\");\n            return false;\n        }\n        std::map<const std::string, const milvus::proto::schema::FieldData*>\n            field_map;\n        for (const auto& field : r.fields_data()) {\n            if (field.type() ==\n                milvus::proto::schema::DataType::SparseFloatVector) {\n                field_map[field.field_name()] = &field;\n            }\n        }\n        for (const auto& field_name : bm25_field_names) {\n            if (field_map.find(field_name) == field_map.end()) {\n                LOG_ERROR(\"Field {} not found or not sparse vector field\",\n                          field_name);\n                return false;\n            }\n            // The data has been split by row, so there will only be one sparse vector\n            auto vec =\n                field_map[field_name]->vectors().sparse_float_vector().contents(\n                    0);\n            auto pos = vec.c_str();\n            auto end = vec.c_str() + vec.size();\n            for (; pos < end; pos += 8) {\n                const uint32_t token =\n                    *(reinterpret_cast<const uint32_t*>(pos));\n                const float count = *(reinterpret_cast<const float*>(pos + 4));\n                (*stats)[field_name].token_doc_count[token] += 1;\n                (*stats)[field_name].token_num += int(count);\n            }\n        }\n    }\n    return true;\n}\n\nint\nStorage::Insert(const std::string collection_name,\n                const std::vector<Row>& rows,\n                const std::vector<std::string>& bm25_field_names) {\n    SQLite::Transaction transaction(*db_ptr_.get());\n    if (!bm25_field_names.empty()) {\n        std::map<std::string, Stats> stats;\n        if (!CollectBM25Stats(rows, bm25_field_names, &stats)) {\n            return -1;\n        }\n        for (const auto& [field_name, stats] : stats) {\n            if (!bm25_stats_->AddBM25Stats(db_ptr_.get(),\n                                           collection_name,\n                                           field_name,\n                                           stats.token_num,\n                                           stats.rows_num)) {\n                return -1;\n            }\n            if (!bm25_stats_->AddTokenDoc(db_ptr_.get(),\n                                          collection_name,\n                                          field_name,\n                                          stats.token_doc_count)) {\n                return -1;\n            }\n        }\n    }\n    for (const auto& row : rows) {\n        if (collections_[collection_name]->Insert(db_ptr_.get(),\n                                                  std::get<0>(row).c_str(),\n                                                  std::get<1>(row)) < 0) {\n            return -1;\n        }\n    }\n    transaction.commit();\n    return rows.size();\n}\n\nint\nStorage::Delete(const std::string collection_name,\n                const std::vector<std::string>& ids,\n                const std::vector<std::string>& bm25_field_names) {\n    SQLite::Transaction transaction(*db_ptr_.get());\n    if (!bm25_field_names.empty()) {\n        std::vector<Row> rows;\n        if (!collections_[collection_name]->GetByIDs(\n                db_ptr_.get(), ids, &rows)) {\n            return -1;\n        }\n        std::map<std::string, Stats> stats;\n        if (!CollectBM25Stats(rows, bm25_field_names, &stats)) {\n            return -1;\n        }\n        for (const auto& [field_name, stats] : stats) {\n            if (!bm25_stats_->DeleteBM25Stats(db_ptr_.get(),\n                                              collection_name,\n                                              field_name,\n                                              stats.token_num,\n                                              stats.rows_num)) {\n                return -1;\n            }\n            if (!bm25_stats_->DeleteTokenDoc(db_ptr_.get(),\n                                             collection_name,\n                                             field_name,\n                                             stats.token_doc_count)) {\n                return -1;\n            }\n        }\n    }\n    int n = collections_[collection_name]->Delete(db_ptr_.get(), ids);\n    transaction.commit();\n    return n;\n}\n\nint64_t\nStorage::Count(const std::string& collection_name) {\n    SQLite::Transaction transaction(*db_ptr_.get());\n    int64_t n = collections_[collection_name]->Count(db_ptr_.get());\n    transaction.commit();\n    return n;\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/storage/storage.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n#include <SQLiteCpp/Database.h>\n#include <cstdint>\n#include <map>\n#include <memory>\n#include <vector>\n#include \"collection_data.h\"\n#include \"collection_meta.h\"\n#include \"bm25_stats.h\"\n\nnamespace milvus::local {\n\nclass CollectionMeta;\nclass CollectionData;\n\nstruct Stats {\n    Stats() = default;\n    ~Stats() = default;\n\n    std::map<uint32_t, int32_t> token_doc_count;\n    int32_t token_num = 0;\n    int32_t rows_num = 0;\n};\n\nclass Storage final {\n public:\n    explicit Storage(const char* db_file);\n    ~Storage();\n    Storage(const Storage&) = delete;\n    Storage&\n    operator=(const Storage&) = delete;\n    Storage(const Storage&&) = delete;\n    Storage&\n    operator=(const Storage&&) = delete;\n\n public:\n    bool\n    Open();\n\n    bool\n    CreateCollection(const std::string& collection_name,\n                     const std::string& pk_name,\n                     const std::string& schema_proto);\n    bool\n    DropCollection(const std::string& collection_name);\n\n    void\n    ListCollections(std::vector<std::string>* collection_names) {\n        cm_.CollectionNames(collection_names);\n    }\n\n    /*\n     * * @brief Read collection data\n     *\n     * @collection collection name\n     * @size The number of rows to read at a time\n     * @out_rows Output, if the size of out_rows is less than the size of the parameter, it means that the data has been read\n     */\n    bool\n    LoadCollecton(const std::string& collection_name,\n                  int64_t start,\n                  int64_t size,\n                  std::vector<std::string>* out_rows);\n\n    bool\n    CreateIndex(const std::string& collection_name,\n                const std::string& index_name,\n                const std::string& index_proto);\n\n    bool\n    GetIndex(const std::string& collection_name,\n             const std::string& index_name,\n             std::string* output_index_proto);\n\n    bool\n    DropIndex(const std::string& collection_name,\n              const std::string& index_name);\n\n    void\n    GetAllIndex(const std::string& collection_name,\n                const std::string& exclude,\n                std::vector<std::string>* index_protos);\n\n    bool\n    HasIndex(const std::string& collection_name,\n             const std::string& index_name) {\n        return cm_.HasIndex(collection_name, index_name);\n    }\n\n    std::string\n    GetPrimaryKey(const std::string& collection_name) {\n        return cm_.GetPkName(collection_name);\n    }\n\n    bool\n    GetCollectionSchema(const std::string& collection_name,\n                        std::string* output_info_str);\n\n    // data interface\n    int\n    Insert(const std::string collection_name,\n           const std::vector<Row>& rows,\n           const std::vector<std::string>& bm25_field_names);\n\n    int\n    Delete(const std::string collection_name,\n           const std::vector<std::string>& ids,\n           const std::vector<std::string>& bm25_field_names);\n\n    bool\n    CollectionExist(const std::string& collection_name) {\n        return collections_.find(collection_name) != collections_.end();\n    }\n\n    int64_t\n    Count(const std::string& collection_name);\n\n    std::pair<uint32_t, int32_t>\n    GetBM25TokenAndDocCount(const std::string& collection_name,\n                            const std::string& field_name) {\n        return bm25_stats_->GetTokenNumAndDocNum(\n            db_ptr_.get(), collection_name, field_name);\n    }\n\n    int32_t\n    GetTokenNQ(const std::string& collection_name,\n               const std::string& field_name,\n               uint32_t token) {\n        return bm25_stats_->GetTokenDocCount(\n            db_ptr_.get(), collection_name, field_name, token);\n    }\n\n private:\n    bool\n    CollectBM25Stats(const std::vector<Row>& rows,\n                     const std::vector<std::string>& bm25_field_names,\n                     std::map<std::string, Stats>* stats);\n\n private:\n    CollectionMeta cm_;\n    std::map<const std::string, std::unique_ptr<CollectionData>> collections_;\n    std::unique_ptr<BM25Stats> bm25_stats_;\n\n private:\n    std::unique_ptr<SQLite::Database> db_ptr_;\n    const char* db_file_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/string_util.hpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <folly/Format.h>\n#include <folly/String.h>\n#include <string>\n#include <regex>\n#include <algorithm>\n#include <vector>\n#include <sstream>\n#include <random>\n#include <chrono>\n\nnamespace milvus::local {\n\nnamespace string_util {\n\ninline std::string\nToLower(const std::string& str) {\n    std::string lower_str;\n    std::transform(str.begin(),\n                   str.end(),\n                   std::back_inserter(lower_str),\n                   [](unsigned char c) { return std::tolower(c); });\n    return lower_str;\n}\n\ninline std::string\nToUpper(const std::string& str) {\n    std::string upper_str;\n    std::transform(str.begin(),\n                   str.end(),\n                   std::back_inserter(upper_str),\n                   [](unsigned char c) { return std::toupper(c); });\n    return upper_str;\n}\n\ninline std::string\nTrim(const std::string& str) {\n    size_t first = str.find_first_not_of(\" \\t\\n\\r\\f\\v\");\n    if (std::string::npos == first)\n        return \"\";\n    size_t last = str.find_last_not_of(\" \\t\\n\\r\\f\\v\");\n    return str.substr(first, (last - first + 1));\n}\n\ntemplate <class... Args>\ninline std::string\nSFormat(const std::string& str, Args&&... args) {\n    return folly::sformat(str, args...);\n}\n\ntemplate <class Delim, class Container>\ninline std::string\nJoin(const Delim& delimiter, const Container& container) {\n    return folly::join(delimiter, container);\n}\n\ninline bool\nIsAlpha(char c) {\n    if ((c < 'A' || c > 'Z') && (c < 'a' || c > 'z')) {\n        return false;\n    }\n    return true;\n}\n\ninline std::string\nGenRandomString(const char* prefix) {\n    const std::string CHARACTERS =\n        \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();\n    std::mt19937 generator(seed);\n\n    std::uniform_int_distribution<int> distribution(0, CHARACTERS.size() - 1);\n\n    std::ostringstream oss;\n    oss << prefix << '-';\n\n    for (size_t i = 0; i < 8; ++i) {\n        int random_number = distribution(generator);\n        oss << CHARACTERS[random_number];\n    }\n\n    return oss.str();\n}\n\ninline std::pair<bool, double>\nToNumber(const std::string& s) {\n    try {\n        size_t pos;\n        auto n = std::stof(s, &pos);\n        return std::make_pair(pos == s.length(), n);\n    } catch (std::exception& e) {\n        return std::make_pair(false, 0.0);\n    }\n}\n}  // namespace string_util\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/timer.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include <memory>\n#include \"timer.h\"\n\nnamespace milvus::local {\nthread_local Timer g_timer;\n\nvoid\nInitializeTimer(const std::string& uid) {\n    g_timer.Start(uid);\n}\n\nvoid\nRecordEvent(const std::string& label) {\n    g_timer.DoRecord(label);\n}\n\nvoid\nPrintTimerRecords() {\n    g_timer.Print();\n}\n\nvoid\nStopTimer() {\n    g_timer.Stop();\n}\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/timer.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <chrono>\n#include <vector>\n#include <string>\n#include <iostream>\n#include <tuple>\n#include <cassert>\n\n#include \"log/Log.h\"\n\nnamespace milvus::local {\n\nusing Record =\n    std::tuple<std::string, std::chrono::high_resolution_clock::time_point>;\n\nclass Timer {\n public:\n    Timer() : start_(false) {\n    }\n    void\n    Start(const std::string& uid) {\n        if (start_) {\n            return;\n        }\n        start_ = true;\n        start_time_ = std::chrono::high_resolution_clock::now();\n        uid_ = uid;\n    }\n\n    void\n    DoRecord(const std::string& label) {\n        if (!start_) {\n            return;\n        }\n        auto now = std::chrono::high_resolution_clock::now();\n        time_record_.emplace_back(label, now);\n    }\n\n    void\n    Print() const {\n        if (!start_) {\n            return;\n        }\n        auto pre_time = start_time_;\n        const auto& [_, time_point] = time_record_.back();\n        LOG_INFO(\"uid: {} TOTAL duration:{} microseconds \",\n                 uid_,\n                 std::chrono::duration_cast<std::chrono::microseconds>(\n                     time_point - start_time_)\n                     .count());\n        for (const auto& record : time_record_) {\n            const auto& [label, time_point] = record;\n            auto duration =\n                std::chrono::duration_cast<std::chrono::microseconds>(\n                    time_point - pre_time)\n                    .count();\n            LOG_INFO(\n                \"uid: {} {} Duration:{} microseconds \", uid_, label, duration);\n            pre_time = time_point;\n        }\n    }\n\n    void\n    Stop() {\n        if (!start_) {\n            return;\n        }\n        time_record_.clear();\n        uid_ = \"\";\n        start_ = false;\n    }\n\n private:\n    bool start_;\n    std::chrono::high_resolution_clock::time_point start_time_;\n    std::vector<Record> time_record_;\n    std::string uid_;\n};\n\nvoid\nInitializeTimer(const std::string& uid);\nvoid\nRecordEvent(const std::string& label);\nvoid\nPrintTimerRecords();\nvoid\nStopTimer();\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/type.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n\n#include <string>\n#include <tuple>\n#include <vector>\n\nnamespace milvus::local {\n\nusing Row = std::tuple<const std::string, const std::string>;\nusing Rows = std::vector<Row>;\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/unittest/CMakeLists.txt",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n# use this file except in compliance with the License. You may obtain a copy of\n# the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n# License for the specific language governing permissions and limitations under\n# the License\n\nfind_package(GTest REQUIRED)\ninclude_directories(${GTest_INCLUDES})\n\nfind_program(PYTHON_EXECUTABLE NAMES python python3)\n\ninclude_directories(${CMAKE_CURRENT_LIST_DIR})\n\n\nset(MILVUS_LOCAL_TEST_DEPS\n  milite\n  GTest::gtest\n  GTest::gtest_main  \n)\n\nadd_executable(\n  milvus_proxy_test\n  milvus_proxy_test.cpp\n  test_util.cpp  \n)\ntarget_link_libraries(milvus_proxy_test\n  PRIVATE\n  ${MILVUS_LOCAL_TEST_DEPS}  \n)\n\nadd_test(\n  NAME milvus_proxy_test\n  COMMAND $<TARGET_FILE:milvus_proxy_test>\n)\n\nadd_executable(\n  server_test\n  grpc_server_test.cpp\n  test_util.cpp\n)\ntarget_link_libraries(\n  server_test\n  PRIVATE\n  milvus_service\n  ${MILVUS_LOCAL_TEST_DEPS}\n)\n\nadd_test(\n  NAME storage_test\n  COMMAND $<TARGET_FILE:storage_test>\n)\n\nadd_executable(\n  storage_test\n  storage_test.cpp\n)\ntarget_link_libraries(\n  storage_test\n  PRIVATE\n  ${MILVUS_LOCAL_TEST_DEPS}\n)\n\nadd_executable(\n  bm25_function_test\n  bm25_function_test.cpp\n  test_util.cpp\n)\n\ntarget_link_libraries(bm25_function_test\n  PRIVATE\n  ${MILVUS_LOCAL_TEST_DEPS}\n)\n\nadd_test(\n  NAME bm25_function_test\n  COMMAND $<TARGET_FILE:bm25_function_test>\n)\nadd_test(\n  NAME server_test\n  COMMAND $<TARGET_FILE:server_test>\n)\n\nadd_test(\n  NAME run_examples\n  COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/run_examples.py\n)\n\nset_tests_properties(run_examples\n  PROPERTIES\n  ENVIRONMENT \"BIN_PATH=${CMAKE_BINARY_DIR}/lib;PYTHONPATH=${CMAKE_SOURCE_DIR}/python/src\"\n)\n"
  },
  {
    "path": "src/unittest/bm25_function_test.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include <gtest/gtest.h>\n#include \"function/bm25_function.h\"\n#include \"test_util.h\"\n\nnamespace milvus::local::function {\nnamespace test {\n\nusing namespace milvus::local::test;\n\nusing function = milvus::local::function::BM25Function;\n\nTEST(BM25FunctionTest, normal) {\n    auto coll_str = CreateCollection(\"test\", \"sparse_vector\");\n    milvus::proto::schema::CollectionSchema schema;\n    schema.ParseFromString(coll_str);\n\n    ::milvus::proto::schema::FunctionSchema fschema;\n    fschema.ParseFromString(\n        CreateBM25Function(\"bm25\", VARCHAR_SCALAR_NAME, SPARSE_VEC));\n    auto [s, f] = BM25Function::NewBM25Function(&schema, &fschema);\n    EXPECT_TRUE(s.IsOk());\n    {\n        milvus::proto::common::PlaceholderGroup input_plg;\n        auto plg = input_plg.add_placeholders();\n        plg->set_type(::milvus::proto::common::PlaceholderType::VarChar);\n        for (int i = 0; i < 10; i++) {\n            auto v = plg->add_values();\n            v->assign(\"doc\");\n        }\n\n        milvus::proto::common::PlaceholderGroup output_plg;\n        f->ProcessSearch(input_plg, &output_plg);\n        EXPECT_EQ(output_plg.placeholders(0).values_size(), 10);\n        EXPECT_EQ(output_plg.placeholders(0).type(),\n                  ::milvus::proto::common::PlaceholderType::SparseFloatVector);\n    }\n    {\n        std::vector<const milvus::proto::schema::FieldData*> inputs;\n        milvus::proto::schema::FieldData text_field;\n        text_field.set_field_name(VARCHAR_SCALAR_NAME);\n        text_field.set_is_dynamic(false);\n        text_field.set_type(::milvus::proto::schema::DataType::VarChar);\n        for (int i = 0; i < 10; i++) {\n            text_field.mutable_scalars()->mutable_string_data()->add_data(\n                \"doc\");\n        }\n        inputs.push_back(&text_field);\n        std::vector<milvus::proto::schema::FieldData> outputs;\n        f->ProcessInsert(inputs, &outputs);\n        EXPECT_EQ(outputs.size(), 1);\n        EXPECT_EQ(outputs[0].type(),\n                  ::milvus::proto::common::PlaceholderType::SparseFloatVector);\n        EXPECT_EQ(outputs[0].vectors().sparse_float_vector().dim(), 1);\n    }\n}\n}  // namespace test\n}  // namespace milvus::local::function\n"
  },
  {
    "path": "src/unittest/grpc_server_test.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"log/Log.h\"\n#include \"milvus_service_impl.h\"\n#include \"pb/milvus.pb.h\"\n#include \"test_util.h\"\n#include <grpcpp/server_context.h>\n#include <gtest/gtest.h>\n#include <grpcpp/grpcpp.h>\n#include \"status.h\"\n\nnamespace milvus::local {\nnamespace test {\n\nconst char* tmp_db_name = \"server_test.db\";\n\nTEST(MilvusServiceImplTest, create_collection) {\n    const char* collection_name = \"test_collection\";\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n        // drop\n        auto drop_r = GetDropCollectionRequest(collection_name);\n        service.DropCollection(&server_context, &drop_r, &response);\n\n        auto r = GetCreateCollectionRequestProto(collection_name);\n        service.CreateCollection(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n        service.CreateCollection(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n    }\n\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n\n        // collection alread exists\n        auto r = GetCreateCollectionRequestProto(collection_name);\n        service.CreateCollection(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n\n        auto lr = GetLoadCollectionRequestProto(collection_name);\n        service.LoadCollection(&server_context, &lr, &response);\n        EXPECT_EQ(response.code(), 0);\n\n        auto new_lr = GetLoadCollectionRequestProto(\"not_exist\");\n        service.LoadCollection(&server_context, &new_lr, &response);\n        EXPECT_EQ(response.code(), ErrCollectionNotFound);\n    }\n}\n\nTEST(MilvusServiceImplTest, CreateIndex) {\n    const char* collection_name = \"test_collection\";\n    ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n    EXPECT_TRUE(service.Init());\n    ::grpc::ServerContext server_context;\n    ::milvus::proto::common::Status response;\n    auto drop_r = GetDropCollectionRequest(collection_name);\n    service.DropCollection(&server_context, &drop_r, &response);\n    auto r = GetCreateCollectionRequestProto(collection_name);\n    service.CreateCollection(&server_context, &r, &response);\n    EXPECT_EQ(response.code(), 0);\n\n    {\n        auto r =\n            GetCreateIndexRequestProto(collection_name, \"test_index\", VEC_NAME);\n        service.CreateIndex(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n\n        service.CreateIndex(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n    }\n\n    {\n        auto r =\n            GetCreateIndexRequestProto(\"not_exist\", \"test_index\", VEC_NAME);\n        service.CreateIndex(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), ErrCollectionNotFound);\n    }\n}\n\nTEST(MilvusServiceImplTest, Insert) {\n    const char* collection_name = \"test_collection\";\n    ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n    EXPECT_TRUE(service.Init());\n    ::grpc::ServerContext server_context;\n    ::milvus::proto::common::Status response;\n    auto drop_r = GetDropCollectionRequest(collection_name);\n    service.DropCollection(&server_context, &drop_r, &response);\n    auto r = GetCreateCollectionRequestProto(collection_name);\n    service.CreateCollection(&server_context, &r, &response);\n    EXPECT_EQ(response.code(), 0);\n\n    {\n        auto insert_requst = GetInsertRequestProto(collection_name, 3);\n        ::milvus::proto::milvus::MutationResult insert_response;\n        service.Insert(&server_context, &insert_requst, &insert_response);\n        EXPECT_EQ(insert_response.insert_cnt(), 3);\n        EXPECT_EQ(insert_response.status().code(), 0);\n    }\n}\n\nTEST(MilvusServiceImplTest, Upsert) {\n    const char* collection_name = \"test_collection\";\n    ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n    EXPECT_TRUE(service.Init());\n    ::grpc::ServerContext server_context;\n    ::milvus::proto::common::Status response;\n    auto drop_r = GetDropCollectionRequest(collection_name);\n    service.DropCollection(&server_context, &drop_r, &response);\n    auto r = GetCreateCollectionRequestProto(collection_name);\n    service.CreateCollection(&server_context, &r, &response);\n    EXPECT_EQ(response.code(), 0);\n\n    {\n        auto upsert_requst = GetUpsertRequestProto(collection_name, 3);\n        ::milvus::proto::milvus::MutationResult upsert_response;\n        service.Upsert(&server_context, &upsert_requst, &upsert_response);\n        EXPECT_EQ(upsert_response.upsert_cnt(), 3);\n        EXPECT_EQ(upsert_response.status().code(), 0);\n    }\n\n    {\n        auto upsert_requst = GetUpsertRequestProto(collection_name, 5);\n        ::milvus::proto::milvus::MutationResult upsert_response;\n        service.Upsert(&server_context, &upsert_requst, &upsert_response);\n        EXPECT_EQ(upsert_response.upsert_cnt(), 5);\n        EXPECT_EQ(upsert_response.status().code(), 0);\n    }\n\n    {\n        auto query_req = GetQueryRequestProto(collection_name,\n                                              \"id in [1, 2, 3, 4, 5, 6, 7]\",\n                                              \"10\",\n                                              \"0\",\n                                              std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        service.Query(&server_context, &query_req, &query_result);\n        EXPECT_EQ(\n            query_result.fields_data()[0].scalars().long_data().data_size(), 4);\n    }\n}\n\nTEST(MilvusServiceImplTest, Search) {\n    const char* collection_name = \"test_collection\";\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n        auto drop_r = GetDropCollectionRequest(collection_name);\n        service.DropCollection(&server_context, &drop_r, &response);\n        auto r = GetCreateCollectionRequestProto(collection_name);\n        service.CreateCollection(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n        auto insert_requst = GetInsertRequestProto(collection_name, 3);\n        ::milvus::proto::milvus::MutationResult insert_response;\n        service.Insert(&server_context, &insert_requst, &insert_response);\n        EXPECT_EQ(insert_response.insert_cnt(), 3);\n        EXPECT_EQ(insert_response.status().code(), 0);\n\n        auto index_req =\n            GetCreateIndexRequestProto(collection_name, \"test_index\", VEC_NAME);\n        service.CreateIndex(&server_context, &index_req, &response);\n        EXPECT_EQ(response.code(), 0);\n\n        auto search_req = GetSearchRequestProto(\n            collection_name,\n            \"id in [1, 2, 3]\",\n            std::vector<std::vector<float>>{{0.1, 0.3, 0.6}, {0.3, 0.3, 0.4}},\n            \"2\",\n            \"COSINE\",\n            \"1\");\n        ::milvus::proto::milvus::SearchResults search_result;\n        service.Search(&server_context, &search_req, &search_result);\n    }\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n        auto lr = GetLoadCollectionRequestProto(collection_name);\n        service.LoadCollection(&server_context, &lr, &response);\n        EXPECT_EQ(response.code(), 0);\n        auto search_req = GetSearchRequestProto(\n            collection_name,\n            \"id in [1, 2, 3]\",\n            std::vector<std::vector<float>>{{0.1, 0.3, 0.6}, {0.3, 0.3, 0.4}},\n            \"2\",\n            \"COSINE\",\n            \"1\");\n        ::milvus::proto::milvus::SearchResults search_result;\n        service.Search(&server_context, &search_req, &search_result);\n    }\n}\n\nTEST(MilvusServiceImplTest, Query) {\n    const char* collection_name = \"test_collection\";\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n        auto drop_r = GetDropCollectionRequest(collection_name);\n        service.DropCollection(&server_context, &drop_r, &response);\n        auto r = GetCreateCollectionRequestProto(collection_name);\n        service.CreateCollection(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n        auto insert_requst = GetInsertRequestProto(collection_name, 3);\n        ::milvus::proto::milvus::MutationResult insert_response;\n        service.Insert(&server_context, &insert_requst, &insert_response);\n        EXPECT_EQ(insert_response.insert_cnt(), 3);\n        EXPECT_EQ(insert_response.status().code(), 0);\n\n        auto query_req = GetQueryRequestProto(collection_name,\n                                              \"id in [1, 2, 3]\",\n                                              \"2\",\n                                              \"0\",\n                                              std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        service.Query(&server_context, &query_req, &query_result);\n        EXPECT_EQ(\n            query_result.fields_data()[0].scalars().long_data().data_size(), 2);\n    }\n}\n\nTEST(MilvusServiceImplTest, Delete) {\n    const char* collection_name = \"test_collection\";\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n        auto drop_r = GetDropCollectionRequest(collection_name);\n        service.DropCollection(&server_context, &drop_r, &response);\n        auto r = GetCreateCollectionRequestProto(collection_name);\n        service.CreateCollection(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n        auto insert_requst = GetInsertRequestProto(collection_name, 10);\n        ::milvus::proto::milvus::MutationResult insert_response;\n        service.Insert(&server_context, &insert_requst, &insert_response);\n        EXPECT_EQ(insert_response.insert_cnt(), 10);\n        EXPECT_EQ(insert_response.status().code(), 0);\n\n        auto delete_req =\n            GetDeleteRequestProto(collection_name, \"id in [1, 2]\");\n        ::milvus::proto::milvus::MutationResult delete_result;\n        service.Delete(&server_context, &delete_req, &delete_result);\n        EXPECT_EQ(delete_result.delete_cnt(), 2);\n\n        auto query_req = GetQueryRequestProto(collection_name,\n                                              \"id in [1, 2, 3]\",\n                                              \"3\",\n                                              \"0\",\n                                              std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        service.Query(&server_context, &query_req, &query_result);\n        EXPECT_EQ(\n            query_result.fields_data()[0].scalars().long_data().data_size(), 1);\n    }\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n        auto lr = GetLoadCollectionRequestProto(collection_name);\n        service.LoadCollection(&server_context, &lr, &response);\n        EXPECT_EQ(response.code(), 0);\n        auto query_req = GetQueryRequestProto(collection_name,\n                                              \"id in [1, 2, 3]\",\n                                              \"3\",\n                                              \"0\",\n                                              std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        service.Query(&server_context, &query_req, &query_result);\n        EXPECT_EQ(\n            query_result.fields_data()[0].scalars().long_data().data_size(), 1);\n    }\n}\n\nTEST(MilvusServiceImplTest, describe_collection) {\n    const char* collection_name = \"test_collection\";\n\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status drop_res;\n        auto drop_r = GetDropCollectionRequest(collection_name);\n        service.DropCollection(&server_context, &drop_r, &drop_res);\n        ::milvus::proto::milvus::DescribeCollectionResponse res;\n        auto r = GetDescribeCollectionRequest(collection_name);\n        service.DescribeCollection(&server_context, &r, &res);\n        EXPECT_EQ(res.status().code(), ErrCollectionNotFound);\n    }\n\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::common::Status response;\n        auto r = GetCreateCollectionRequestProto(collection_name);\n        service.CreateCollection(&server_context, &r, &response);\n        EXPECT_EQ(response.code(), 0);\n\n        ::milvus::proto::milvus::DescribeCollectionResponse res;\n        auto dr = GetDescribeCollectionRequest(collection_name);\n        service.DescribeCollection(&server_context, &dr, &res);\n        EXPECT_EQ(res.status().code(), 0);\n    }\n\n    {\n        ::milvus::local::MilvusServiceImpl service(tmp_db_name);\n        EXPECT_TRUE(service.Init());\n        ::grpc::ServerContext server_context;\n        ::milvus::proto::milvus::DescribeCollectionResponse res;\n        auto dr = GetDescribeCollectionRequest(collection_name);\n        service.DescribeCollection(&server_context, &dr, &res);\n        EXPECT_EQ(res.status().code(), 0);\n    }\n}\n\n}  // namespace test\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/unittest/milvus_local_test.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"milvus_local.h\"\n#include <gtest/gtest.h>\n#include <cstdint>\n#include <iostream>\n#include <string>\n#include <vector>\n#include \"antlr4-runtime.h\"\n#include \"parser/parser.h\"\n#include \"parser/utils.h\"\n#include \"pb/plan.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n#include \"test_util.h\"\n#include \"type.h\"\n\nnamespace milvus::local {\n\nnamespace test {\n\nTEST(MilvusLocal, h) {\n    std::string collection_name(\"test_schema\");\n    milvus::local::Rows data = CreateData(10);\n    auto schema_str = CreateCollection();\n    auto index_str = CreateVectorIndex();\n\n    std::remove(\"milvus_data.db\");\n    {\n        MilvusLocal ms(\"./\");\n        ms.Init();\n        ms.CreateCollection(collection_name, PK_NAME, schema_str);\n        ms.CreateIndex(collection_name, \"test_index\", index_str);\n        auto rows = CreateData(20);\n        std::vector<std::string> ids;\n        ms.Insert(collection_name, rows, &ids);\n        milvus::proto::schema::CollectionSchema schema;\n        schema.ParseFromString(schema_str);\n\n        // std::cout << schema.DebugString() << std::endl;\n        std::string exprstr(\"id in [1, 2, 6, 5, 8, 9]\");\n        antlr4::ANTLRInputStream input(exprstr);\n        PlanLexer lexer(&input);\n        antlr4::CommonTokenStream tokens(&lexer);\n        PlanParser parser(&tokens);\n        PlanParser::ExprContext* tree = parser.expr();\n        auto helper = milvus::CreateSchemaHelper(&schema);\n        milvus::PlanCCVisitor visitor(&helper);\n        auto res = std::any_cast<milvus::ExprWithDtype>(visitor.visit(tree));\n        {\n            ::milvus::proto::plan::PlanNode plan;\n            plan.mutable_query()->set_is_count(false);\n            plan.mutable_query()->set_limit(5);\n            plan.mutable_query()->set_allocated_predicates(res.expr);\n            plan.add_output_field_ids(200);\n            plan.add_output_field_ids(202);\n            std::cout << plan.DebugString() << std::endl;\n            RetrieveResult result;\n            ms.Retrieve(collection_name, plan.SerializeAsString(), &result);\n            milvus::proto::segcore::RetrieveResults rs;\n            rs.ParseFromArray(result.retrieve_result_.proto_blob,\n                              result.retrieve_result_.proto_size);\n            std::cout << rs.DebugString() << std::endl;\n        }\n\n        {\n            std::cout << \"===============================\" << std::endl;\n            ::milvus::proto::plan::PlanNode plan;\n            plan.mutable_vector_anns()->set_field_id(201);\n            plan.mutable_vector_anns()->set_allocated_predicates(res.expr);\n            plan.mutable_vector_anns()->set_placeholder_tag(\"$0\");\n            plan.mutable_vector_anns()->set_vector_type(\n                ::milvus::proto::plan::VectorType::FloatVector);\n            plan.mutable_vector_anns()->mutable_query_info()->set_topk(3);\n            plan.mutable_vector_anns()->mutable_query_info()->set_metric_type(\n                \"IP\");\n            plan.mutable_vector_anns()->mutable_query_info()->set_search_params(\n                \"{\\\"nprobe\\\": 10}\");\n            plan.mutable_vector_anns()->mutable_query_info()->set_round_decimal(\n                -1);\n            plan.add_output_field_ids(200);\n            plan.add_output_field_ids(202);\n            std::cout << plan.DebugString() << std::endl;\n\n            milvus::proto::common::PlaceholderGroup raw_group;\n            auto value = raw_group.add_placeholders();\n            value->set_tag(\"$0\");\n            value->set_type(\n                milvus::proto::common::PlaceholderType::FloatVector);\n            std::vector<float> vec{0.3, 0.5, 0.2};\n            value->add_values(vec.data(), vec.size() * sizeof(float));\n\n            auto slice_nqs = std::vector<int64_t>{1};\n            auto slice_topKs = std::vector<int64_t>{3};\n            SearchResult result(slice_nqs, slice_topKs);\n            ms.Search(collection_name,\n                      plan.SerializeAsString(),\n                      raw_group.SerializeAsString(),\n                      &result);\n            milvus::proto::schema::SearchResultData rz;\n            rz.ParseFromArray(result.result_[0].proto_blob,\n                              result.result_[0].proto_size);\n            // std::cout << rz.DebugString() << std::endl;\n\n            milvus::proto::schema::IDs ids;\n            ids.mutable_int_id()->add_data(0);\n            ids.mutable_int_id()->add_data(1);\n            ids.mutable_int_id()->add_data(2);\n            ms.DeleteByIds(collection_name,\n                           ids.SerializeAsString(),\n                           3,\n                           std::vector<std::string>{\"0\", \"1\", \"2\"});\n            ms.Search(collection_name,\n                      plan.SerializeAsString(),\n                      raw_group.SerializeAsString(),\n                      &result);\n            rz.ParseFromArray(result.result_[0].proto_blob,\n                              result.result_[0].proto_size);\n            // std::cout << rz.DebugString() << std::endl;\n\n            ms.ReleaseCollection(collection_name);\n        }\n    }\n\n    {\n        MilvusLocal ms(\"./\");\n        ms.Init();\n        ms.LoadCollection(collection_name);\n        ms.ReleaseCollection(collection_name);\n    }\n\n    std::remove(\"milvus_data.db\");\n}\n\nTEST(MilvusLocal, parser) {\n    auto schema_str = CreateCollection();\n    milvus::proto::schema::CollectionSchema schema;\n    schema.ParseFromString(schema_str);\n\n    // std::string exprstr(\"sc in [1, 2, 3, 4]\");\n    // antlr4::ANTLRInputStream input(exprstr);\n    // PlanLexer lexer(&input);\n    // antlr4::CommonTokenStream tokens(&lexer);\n    // PlanParser parser(&tokens);\n\n    // PlanParser::ExprContext* tree = parser.expr();\n\n    // auto helper = milvus::CreateSchemaHelper(&schema);\n    // milvus::PlanCCVisitor visitor(&helper);\n    // auto res = std::any_cast<milvus::ExprWithDtype>(visitor.visit(tree));\n    // std::cout << res.expr->DebugString() << std::endl;\n    // std::cout << \"---------------\" << std::endl;\n    // std::cout << res.expr->term_expr().DebugString() << std::endl;\n}\n}  // namespace test\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/unittest/milvus_proxy_test.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"milvus_proxy.h\"\n#include <gtest/gtest.h>\n#include <string>\n#include <vector>\n#include \"log/Log.h\"\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"test_util.h\"\n#include <glog/logging.h>\n\nnamespace milvus::local {\nnamespace test {\n\nconst char* tmp_db_name = \"test.db\";\n\nTEST(MilvusProxyTest, CreateCollection) {\n    const char* collection_name = \"test_collection\";\n    {\n        // create new collection\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        EXPECT_FALSE(proxy.Init());\n        proxy.DropCollection(collection_name);\n        auto cr = GetCreateCollectionRequestProto(collection_name);\n        EXPECT_TRUE(proxy.CreateCollection(&cr).IsOk());\n    }\n\n    {\n        // load collection\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        EXPECT_TRUE(proxy.LoadCollection(collection_name).IsOk());\n        // reload is ok\n        EXPECT_TRUE(proxy.LoadCollection(collection_name).IsOk());\n\n        EXPECT_TRUE(proxy.ReleaseCollection(collection_name).IsOk());\n        EXPECT_TRUE(proxy.ReleaseCollection(collection_name).IsOk());\n\n        EXPECT_FALSE(proxy.LoadCollection(\"not_existed\").IsOk());\n    }\n}\n\nTEST(MilvusProxyTest, CreateIndex) {\n    const char* collection_name = \"test_collection\";\n    const char* index_name = \"test_index\";\n\n    ::milvus::local::MilvusProxy proxy(tmp_db_name);\n    EXPECT_TRUE(proxy.Init());\n    proxy.DropCollection(collection_name);\n    auto cr = GetCreateCollectionRequestProto(collection_name);\n    EXPECT_TRUE(proxy.CreateCollection(&cr).IsOk());\n\n    {\n        // create new index\n        auto index_req =\n            GetCreateIndexRequestProto(collection_name, index_name, VEC_NAME);\n        EXPECT_TRUE(proxy.CreateIndex(&index_req).IsOk());\n\n        EXPECT_TRUE(proxy.CreateIndex(&index_req).IsOk());\n    }\n}\n\nTEST(MilvusProxyTest, Insert) {\n    const char* collection_name = \"test_collection\";\n    ::milvus::local::MilvusProxy proxy(tmp_db_name);\n    EXPECT_TRUE(proxy.Init());\n    proxy.DropCollection(collection_name);\n    auto cr = GetCreateCollectionRequestProto(collection_name);\n    EXPECT_TRUE(proxy.CreateCollection(&cr).IsOk());\n\n    {\n        auto data = GetInsertRequestProto(collection_name, 3);\n        ::milvus::proto::schema::IDs ids;\n        proxy.Insert(&data, &ids);\n        EXPECT_EQ(3, ids.int_id().data_size());\n    }\n}\n\nTEST(MilvusProxyTest, search) {\n    const char* collection_name = \"test_collection\";\n    {\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        proxy.DropCollection(collection_name);\n        auto cr = GetCreateCollectionRequestProto(collection_name);\n        EXPECT_TRUE(proxy.CreateCollection(&cr).IsOk());\n        auto data = GetInsertRequestProto(collection_name, 10);\n        ::milvus::proto::schema::IDs ids;\n        proxy.Insert(&data, &ids);\n        EXPECT_EQ(10, ids.int_id().data_size());\n        auto index_req =\n            GetCreateIndexRequestProto(collection_name, \"vindex\", VEC_NAME);\n        EXPECT_TRUE(proxy.CreateIndex(&index_req).IsOk());\n\n        auto search_req = GetSearchRequestProto(\n            collection_name,\n            \"id in [1, 2, 3]\",\n            std::vector<std::vector<float>>{{-1.0, 0.0, 0.0}, {0.0, 0.0, 1.0}},\n            \"2\",\n            \"IP\",\n            \"1\");\n        ::milvus::proto::milvus::SearchResults search_result;\n        EXPECT_TRUE(proxy.Search(&search_req, &search_result).IsOk());\n        // return ids: 2, 3, 2, 1\n        EXPECT_EQ(search_result.results().ids().int_id().data(0), 2);\n        EXPECT_EQ(search_result.results().ids().int_id().data(1), 3);\n        EXPECT_EQ(search_result.results().ids().int_id().data(2), 2);\n        EXPECT_EQ(search_result.results().ids().int_id().data(3), 1);\n    }\n\n    {\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        EXPECT_TRUE(proxy.LoadCollection(collection_name).IsOk());\n        auto search_req = GetSearchRequestProto(\n            collection_name,\n            \"id in [1, 2, 3, 4]\",\n            std::vector<std::vector<float>>{{-1.0, 0.0, 0.0}, {0.0, 0.0, 1.0}},\n            \"2\",\n            \"IP\",\n            \"0\");\n        ::milvus::proto::milvus::SearchResults search_result;\n        EXPECT_TRUE(proxy.Search(&search_req, &search_result).IsOk());\n        // return ids: 1,2,4,3\n        EXPECT_EQ(search_result.results().ids().int_id().data(0), 1);\n        EXPECT_EQ(search_result.results().ids().int_id().data(1), 2);\n        EXPECT_EQ(search_result.results().ids().int_id().data(2), 4);\n        EXPECT_EQ(search_result.results().ids().int_id().data(3), 3);\n    }\n    {\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        EXPECT_TRUE(proxy.LoadCollection(collection_name).IsOk());\n        auto search_req = GetSearchRequestProto(\n            collection_name,\n            \"id in [1, 2, 3, 4]\",\n            std::vector<std::vector<float>>{{-1.0, 0.0, 0.0}, {0.0, 0.0, 1.0}},\n            \"2\",\n            \"IP\",\n            \"20\");\n        ::milvus::proto::milvus::SearchResults search_result;\n        EXPECT_TRUE(proxy.Search(&search_req, &search_result).IsOk());\n        EXPECT_FALSE(search_result.results().has_ids());\n    }\n}\n\nTEST(MilvusProxyTest, query) {\n    const char* collection_name = \"test_collection\";\n    {\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        proxy.DropCollection(collection_name);\n        auto cr = GetCreateCollectionRequestProto(collection_name);\n        EXPECT_TRUE(proxy.CreateCollection(&cr).IsOk());\n        auto data = GetInsertRequestProto(collection_name, 10);\n        ::milvus::proto::schema::IDs ids;\n        proxy.Insert(&data, &ids);\n        EXPECT_EQ(10, ids.int_id().data_size());\n        auto query_req = GetQueryRequestProto(collection_name,\n                                              \"id in [1, 2, 3]\",\n                                              \"2\",\n                                              \"0\",\n                                              std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        EXPECT_TRUE(proxy.Query(&query_req, &query_result).IsOk());\n\n        EXPECT_EQ(\n            query_result.fields_data()[0].scalars().long_data().data_size(), 2);\n    }\n\n    {\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        EXPECT_TRUE(proxy.LoadCollection(collection_name).IsOk());\n        auto query_req = GetQueryRequestProto(\n            collection_name, \"id==1\", \"2\", \"0\", std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        EXPECT_TRUE(proxy.Query(&query_req, &query_result).IsOk());\n        query_result.PrintDebugString();\n    }\n}\n\nTEST(MilvusProxyTest, delete) {\n    const char* collection_name = \"test_collection\";\n    {\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        proxy.DropCollection(collection_name);\n        auto cr = GetCreateCollectionRequestProto(collection_name);\n        EXPECT_TRUE(proxy.CreateCollection(&cr).IsOk());\n        auto data = GetInsertRequestProto(collection_name, 10);\n        ::milvus::proto::schema::IDs ids;\n        proxy.Insert(&data, &ids);\n        EXPECT_EQ(10, ids.int_id().data_size());\n\n        auto delete_req =\n            GetDeleteRequestProto(collection_name, \"id in [1, 2]\");\n        ::milvus::proto::milvus::MutationResult response;\n        EXPECT_TRUE(proxy.Delete(&delete_req, &response).IsOk());\n\n        auto query_req = GetQueryRequestProto(collection_name,\n                                              \"id in [1, 2, 3]\",\n                                              \"3\",\n                                              \"0\",\n                                              std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        EXPECT_TRUE(proxy.Query(&query_req, &query_result).IsOk());\n        EXPECT_EQ(\n            query_result.fields_data()[0].scalars().long_data().data_size(), 1);\n    }\n    {\n        ::milvus::local::MilvusProxy proxy(tmp_db_name);\n        EXPECT_TRUE(proxy.Init());\n        proxy.LoadCollection(collection_name);\n        auto query_req = GetQueryRequestProto(collection_name,\n                                              \"id in [1, 2, 3]\",\n                                              \"3\",\n                                              \"0\",\n                                              std::vector<std::string>{\"id\"});\n        ::milvus::proto::milvus::QueryResults query_result;\n        EXPECT_TRUE(proxy.Query(&query_req, &query_result).IsOk());\n        EXPECT_EQ(\n            query_result.fields_data()[0].scalars().long_data().data_size(), 1);\n    }\n}\n\n}  // namespace test\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/unittest/run_examples.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport sys\nimport pathlib\nimport subprocess\n\n\ndef run_all(py_path):\n    for f in py_path.glob('*.py'):\n        if str(f).endswith('bfloat16_example.py') or str(f).endswith('dynamic_field.py') or str(f).endswith('conftest.py'):\n            continue\n        print(str(f))\n        p = subprocess.Popen(args=[sys.executable, str(f)])\n        p.wait()\n        if p.returncode != 0:\n            return False\n    return True\n\n\nif __name__ == '__main__':\n    examples_dir = pathlib.Path(__file__).absolute().parent.parent.parent / 'examples'\n    if not run_all(examples_dir):\n        exit(-1)\n    pytest = pathlib.Path(__file__).absolute().parent.parent.parent / 'tests'\n    if not run_all(pytest):\n        exit(-1)    \n    exit(0)\n\n\n"
  },
  {
    "path": "src/unittest/storage_test.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"storage/storage.h\"\n#include \"storage/bm25_stats.h\"\n#include <gtest/gtest.h>\n#include <cstdint>\n\nnamespace milvus::local {\n\nTEST(Storage, h) {\n    const char* db_path = \"test.db\";\n    auto db_ptr = std::make_unique<SQLite::Database>(\n        db_path,\n        SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE | SQLite::OPEN_FULLMUTEX);\n    BM25Stats bm25_stats;\n    EXPECT_TRUE(bm25_stats.CreateTables(db_ptr.get()));\n    std::map<uint32_t, int32_t> tokens{};\n    EXPECT_TRUE(bm25_stats.AddTokenDoc(db_ptr.get(), \"test\", \"sparse\", tokens));\n    tokens[1] = 1;\n    tokens[2] = 2;\n    tokens[3] = 3;\n    EXPECT_TRUE(bm25_stats.AddTokenDoc(db_ptr.get(), \"test\", \"sparse\", tokens));\n\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 1),\n              1);\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 2),\n              2);\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 3),\n              3);\n\n    tokens.clear();\n    tokens[1] = 1;\n    tokens[2] = 2;\n    EXPECT_TRUE(bm25_stats.AddTokenDoc(db_ptr.get(), \"test\", \"sparse\", tokens));\n\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 1),\n              2);\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 2),\n              4);\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 3),\n              3);\n\n    EXPECT_TRUE(\n        bm25_stats.DeleteTokenDoc(db_ptr.get(), \"test\", \"sparse\", tokens));\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 1),\n              1);\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 2),\n              2);\n    EXPECT_EQ(bm25_stats.GetTokenDocCount(db_ptr.get(), \"test\", \"sparse\", 3),\n              3);\n\n    EXPECT_TRUE(\n        bm25_stats.AddBM25Stats(db_ptr.get(), \"test\", \"sparse\", 100, 20));\n    {\n        auto [token, doc] =\n            bm25_stats.GetTokenNumAndDocNum(db_ptr.get(), \"test\", \"sparse\");\n        EXPECT_EQ(token, 100);\n        EXPECT_EQ(doc, 20);\n    }\n    EXPECT_TRUE(\n        bm25_stats.DeleteBM25Stats(db_ptr.get(), \"test\", \"sparse\", 20, 10));\n\n    {\n        auto [token, doc] =\n            bm25_stats.GetTokenNumAndDocNum(db_ptr.get(), \"test\", \"sparse\");\n        EXPECT_EQ(token, 80);\n        EXPECT_EQ(doc, 10);\n    }\n\n    std::remove(db_path);\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/unittest/test_util.cpp",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#include \"test_util.h\"\n#include <cstdint>\n#include <string>\n#include <tuple>\n#include <utility>\n#include <vector>\n\n#include \"common.h\"\n#include \"log/Log.h\"\n#include \"type.h\"\n#include \"pb/milvus.pb.h\"\n#include \"pb/msg.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"pb/segcore.pb.h\"\n\nnamespace milvus::local {\nnamespace test {\n\nstd::string\nCreateCollection(const std::string& collection_name,\n                 const std::string& vec_type) {\n    ::milvus::proto::schema::CollectionSchema schema;\n\n    schema.set_name(collection_name);\n    schema.set_enable_dynamic_field(false);\n    auto field1 = schema.add_fields();\n    field1->set_fieldid(PK_ID);\n    field1->set_name(PK_NAME);\n    field1->set_is_primary_key(true);\n    field1->set_data_type(::milvus::proto::schema::DataType::Int64);\n\n    if (vec_type == \"float_vector\") {\n        auto field2 = schema.add_fields();\n        field2->set_fieldid(VEC_ID);\n        field2->set_name(VEC_NAME);\n\n        field2->set_data_type(::milvus::proto::schema::DataType::FloatVector);\n        auto params = field2->add_type_params();\n        params->set_key(VEC_DIM_NAME);\n        params->set_value(std::to_string(VEC_DIM));\n        auto field3 = schema.add_fields();\n        field3->set_fieldid(SCALAR_ID);\n        field3->set_name(SCALAR_NAME);\n        field3->set_data_type(::milvus::proto::schema::DataType::Int32);\n        return schema.SerializeAsString();\n\n    } else {\n        auto field2 = schema.add_fields();\n        field2->set_fieldid(VEC_ID);\n        field2->set_name(SPARSE_VEC);\n        field2->set_data_type(\n            ::milvus::proto::schema::DataType::SparseFloatVector);\n        auto field3 = schema.add_fields();\n        field3->set_fieldid(SCALAR_ID);\n        field3->set_name(VARCHAR_SCALAR_NAME);\n        field3->set_data_type(::milvus::proto::schema::DataType::VarChar);\n        auto p1 = field3->add_type_params();\n        p1->set_key(\"enable_analyzer\");\n        p1->set_value(\"true\");\n        auto p2 = field3->add_type_params();\n        p2->set_key(\"max_length\");\n        p2->set_value(\"1000\");\n        return schema.SerializeAsString();\n    }\n}\n\nstd::string\nCreateBM25Function(const std::string& name,\n                   const std::string& input_name,\n                   const std::string& output_name) {\n    ::milvus::proto::schema::FunctionSchema fschema;\n    fschema.set_name(name);\n    fschema.add_input_field_names(input_name);\n    fschema.add_output_field_names(output_name);\n    fschema.set_type(::milvus::proto::schema::FunctionType::BM25);\n    return fschema.SerializeAsString();\n}\n\nstd::string\nCreateVectorIndex() {\n    milvus::proto::segcore::CollectionIndexMeta index_meta;\n    index_meta.set_maxindexrowcount(1000000);\n    auto field_meta = index_meta.add_index_metas();\n    field_meta->set_index_name(\"vec_index\");\n    field_meta->set_fieldid(VEC_ID);\n    field_meta->set_collectionid(0);\n    field_meta->set_is_auto_index(true);\n\n    auto pair = field_meta->add_index_params();\n    pair->set_key(\"metric_type\");\n    pair->set_value(\"IP\");\n\n    return index_meta.SerializeAsString();\n}\n\nmilvus::local::Rows\nCreateData(int32_t count) {\n    milvus::local::Rows rs;\n    for (int64_t i = 0; i < count; i++) {\n        ::milvus::proto::segcore::InsertRecord r;\n        r.set_num_rows(1);\n\n        // set pk\n        ::milvus::proto::schema::FieldData* pk = r.add_fields_data();\n        pk->set_field_id(PK_ID);\n        pk->set_field_name(PK_NAME);\n        pk->set_type(::milvus::proto::schema::Int64);\n        pk->mutable_scalars()->mutable_long_data()->add_data(i);\n\n        // set vec\n        ::milvus::proto::schema::FieldData* vec = r.add_fields_data();\n        vec->set_field_id(VEC_ID);\n        vec->set_field_name(VEC_NAME);\n        vec->set_type(::milvus::proto::schema::FloatVector);\n        auto v = vec->mutable_vectors();\n        v->set_dim(VEC_DIM);\n        auto vd = v->mutable_float_vector();\n        vd->add_data(0.1);\n        vd->add_data(0.5);\n        vd->add_data(0.4);\n\n        // set scalar\n        ::milvus::proto::schema::FieldData* sc = r.add_fields_data();\n        sc->set_field_id(SCALAR_ID);\n        sc->set_field_name(SCALAR_NAME);\n        sc->set_type(::milvus::proto::schema::Int32);\n        sc->mutable_scalars()->mutable_int_data()->add_data(i);\n        rs.push_back(std::make_tuple(std::to_string(i), r.SerializeAsString()));\n    }\n    return rs;\n}\n\n::milvus::proto::milvus::CreateCollectionRequest\nGetCreateCollectionRequestProto(const std::string& collection_name) {\n    ::milvus::proto::milvus::CreateCollectionRequest r;\n    r.set_collection_name(collection_name);\n    auto schema_str = CreateCollection(collection_name);\n    r.set_schema(schema_str.data());\n    r.set_consistency_level(::milvus::proto::common::ConsistencyLevel::Strong);\n    return r;\n}\n\n::milvus::proto::milvus::LoadCollectionRequest\nGetLoadCollectionRequestProto(const std::string& collection_name) {\n    ::milvus::proto::milvus::LoadCollectionRequest r;\n    r.set_collection_name(collection_name);\n    return r;\n}\n\n::milvus::proto::milvus::CreateIndexRequest\nGetCreateIndexRequestProto(const std::string& collection_name,\n                           const std::string& index_name,\n                           const std::string& field_name) {\n    ::milvus::proto::milvus::CreateIndexRequest r;\n    r.set_index_name(index_name);\n    r.set_collection_name(collection_name);\n    r.set_field_name(field_name);\n\n    auto p1 = r.add_extra_params();\n    p1->set_key(\"params\");\n    p1->set_value(\"{}\");\n    auto p2 = r.add_extra_params();\n    p2->set_key(\"metric_type\");\n    p2->set_value(\"IP\");\n\n    auto p3 = r.add_extra_params();\n    p3->set_key(\"index_type\");\n    p3->set_value(\"AUTOINDEX\");\n\n    return r;\n}\n\n::milvus::proto::milvus::InsertRequest\nGetInsertRequestProto(const std::string& collection_name, int64_t row_num) {\n    ::milvus::proto::milvus::InsertRequest r;\n    r.set_collection_name(collection_name);\n    r.set_num_rows(row_num);\n\n    // set pk\n    ::milvus::proto::schema::FieldData* pk = r.add_fields_data();\n    pk->set_field_id(PK_ID);\n    pk->set_field_name(PK_NAME);\n    pk->set_type(::milvus::proto::schema::Int64);\n    for (int64_t i = 0; i < row_num; ++i) {\n        pk->mutable_scalars()->mutable_long_data()->add_data(i);\n    }\n\n    // set vec\n    ::milvus::proto::schema::FieldData* vec = r.add_fields_data();\n    vec->set_field_id(VEC_ID);\n    vec->set_field_name(VEC_NAME);\n    vec->set_type(::milvus::proto::schema::FloatVector);\n    auto v = vec->mutable_vectors();\n    v->set_dim(VEC_DIM);\n    auto vd = v->mutable_float_vector();\n    for (int64_t i = 0; i < row_num; ++i) {\n        vd->add_data(0.1 * i);\n        vd->add_data(0.5 * i);\n        vd->add_data(0.4 * i);\n    }\n\n    // set scalar\n    ::milvus::proto::schema::FieldData* sc = r.add_fields_data();\n    sc->set_field_id(SCALAR_ID);\n    sc->set_field_name(SCALAR_NAME);\n    sc->set_type(::milvus::proto::schema::Int32);\n    for (int64_t i = 0; i < row_num; ++i) {\n        sc->mutable_scalars()->mutable_int_data()->add_data(i);\n    }\n\n    return r;\n}\n\n::milvus::proto::milvus::UpsertRequest\nGetUpsertRequestProto(const std::string& collection_name, int64_t row_num) {\n    ::milvus::proto::milvus::UpsertRequest r;\n    r.set_collection_name(collection_name);\n    r.set_num_rows(row_num);\n\n    // set pk\n    ::milvus::proto::schema::FieldData* pk = r.add_fields_data();\n    pk->set_field_id(PK_ID);\n    pk->set_field_name(PK_NAME);\n    pk->set_type(::milvus::proto::schema::Int64);\n    for (int64_t i = 0; i < row_num; ++i) {\n        pk->mutable_scalars()->mutable_long_data()->add_data(i);\n    }\n\n    // set vec\n    ::milvus::proto::schema::FieldData* vec = r.add_fields_data();\n    vec->set_field_id(VEC_ID);\n    vec->set_field_name(VEC_NAME);\n    vec->set_type(::milvus::proto::schema::FloatVector);\n    auto v = vec->mutable_vectors();\n    v->set_dim(VEC_DIM);\n    auto vd = v->mutable_float_vector();\n    for (int64_t i = 0; i < row_num; ++i) {\n        vd->add_data(0.1 * i);\n        vd->add_data(0.5 * i);\n        vd->add_data(0.4 * i);\n    }\n\n    // set scalar\n    ::milvus::proto::schema::FieldData* sc = r.add_fields_data();\n    sc->set_field_id(SCALAR_ID);\n    sc->set_field_name(SCALAR_NAME);\n    sc->set_type(::milvus::proto::schema::Int32);\n    for (int64_t i = 0; i < row_num; ++i) {\n        sc->mutable_scalars()->mutable_int_data()->add_data(i);\n    }\n\n    return r;\n}\n\n::milvus::proto::milvus::SearchRequest\nGetSearchRequestProto(const std::string& collection_name,\n                      const std::string& expr,\n                      const std::vector<std::vector<float>>& vecs,\n                      const std::string& topk,\n                      const std::string& metric_type,\n                      const std::string& offset) {\n    ::milvus::proto::milvus::SearchRequest r;\n    r.set_collection_name(collection_name);\n    r.set_dsl(expr);\n    r.set_dsl_type(::milvus::proto::common::DslType::BoolExprV1);\n    r.mutable_output_fields()->Add(SCALAR_NAME);\n    r.mutable_output_fields()->Add(VEC_NAME);\n\n    milvus::proto::common::PlaceholderGroup raw_group;\n    auto value = raw_group.add_placeholders();\n    value->set_tag(milvus::local::kPlaceholderTag);\n    value->set_type(milvus::proto::common::PlaceholderType::FloatVector);\n    for (const auto& vec : vecs) {\n        value->add_values(vec.data(), vec.size() * sizeof(float));\n    }\n\n    r.set_placeholder_group(raw_group.SerializeAsString());\n    r.set_nq(vecs.size());\n\n    auto p1 = r.mutable_search_params()->Add();\n    // p1->set_key(\"search_param\");\n    // p1->set_value(\"{\\\"nprobe\\\":10}\");\n    p1->set_key(\"params\");\n    p1->set_value(\"{\\\"nprobe\\\":10}\");\n\n    auto p2 = r.mutable_search_params()->Add();\n    p2->set_key(\"round_decimal\");\n    p2->set_value(\"-1\");\n\n    auto p3 = r.mutable_search_params()->Add();\n    p3->set_key(\"ignore_growing\");\n    p3->set_value(\"False\");\n\n    auto p4 = r.mutable_search_params()->Add();\n    p4->set_key(\"topk\");\n    p4->set_value(topk);\n\n    auto p5 = r.mutable_search_params()->Add();\n    p5->set_key(\"metric_type\");\n    p5->set_value(metric_type);\n\n    auto p6 = r.mutable_search_params()->Add();\n    p6->set_key(\"offset\");\n    p6->set_value(offset);\n    return r;\n}\n\n::milvus::proto::milvus::QueryRequest\nGetQueryRequestProto(const std::string& collection_name,\n                     const std::string& expr,\n                     const std::string& limit,\n                     const std::string& offset,\n                     const std::vector<std::string>& output_fields) {\n    ::milvus::proto::milvus::QueryRequest r;\n    r.set_collection_name(collection_name);\n    r.set_expr(expr);\n    auto p1 = r.mutable_query_params()->Add();\n    p1->set_key(\"limit\");\n    p1->set_value(limit);\n\n    auto p2 = r.mutable_query_params()->Add();\n    p2->set_key(\"reduce_stop_for_best\");\n    p2->set_value(\"False\");\n\n    auto p3 = r.mutable_query_params()->Add();\n    p3->set_key(\"ignore_growing\");\n    p3->set_value(\"False\");\n\n    auto p4 = r.mutable_query_params()->Add();\n    p4->set_key(\"offset\");\n    p4->set_value(offset);\n    r.set_guarantee_timestamp(1);\n    r.set_use_default_consistency(true);\n    for (const auto& f : output_fields) {\n        r.add_output_fields(f);\n    }\n    return r;\n}\n\n::milvus::proto::milvus::DeleteRequest\nGetDeleteRequestProto(const std::string& collection_name,\n                      const std::string& expr) {\n    ::milvus::proto::milvus::DeleteRequest r;\n    r.set_collection_name(collection_name);\n    r.set_expr(expr);\n    return r;\n}\n\n::milvus::proto::milvus::DescribeCollectionRequest\nGetDescribeCollectionRequest(const std::string& collection_name) {\n    ::milvus::proto::milvus::DescribeCollectionRequest r;\n    r.set_collection_name(collection_name);\n    return r;\n}\n\n}  // namespace test\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/unittest/test_util.h",
    "content": "// Copyright (C) 2019-2024 Zilliz. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n// use this file except in compliance with the License. You may obtain a copy of\n// the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n// License for the specific language governing permissions and limitations under\n// the License.\n\n#pragma once\n#include <cstdint>\n#include <string>\n#include <vector>\n#include \"type.h\"\n#include \"pb/milvus.pb.h\"\n\nnamespace milvus::local {\nnamespace test {\n\n#define PK_NAME \"id\"\n#define PK_ID 200\n\n#define VEC_NAME \"vec\"\n#define SPARSE_VEC \"sparse_vec\"\n#define VEC_ID 201\n#define VEC_DIM_NAME \"dim\"\n#define VEC_DIM 3\n\n#define SCALAR_NAME \"sc\"\n#define VARCHAR_SCALAR_NAME \"vsc\"\n#define SCALAR_ID 202\n\nstd::string\nCreateCollection(const std::string& collection_name = \"test_schema\",\n                 const std::string& vec_type = \"float_vector\");\n\nstd::string\nCreateBM25Function(const std::string&, const std::string&, const std::string&);\n\nstd::string\nCreateVectorIndex();\n\nmilvus::local::Rows\nCreateData(int32_t count);\n\n::milvus::proto::milvus::CreateCollectionRequest\nGetCreateCollectionRequestProto(const std::string& collection_name);\n\n::milvus::proto::milvus::LoadCollectionRequest\nGetLoadCollectionRequestProto(const std::string& collection_name);\n\n::milvus::proto::milvus::CreateIndexRequest\nGetCreateIndexRequestProto(const std::string& collection_name,\n                           const std::string& index_name,\n                           const std::string& field_name);\n\n::milvus::proto::milvus::InsertRequest\nGetInsertRequestProto(const std::string& collection_name, int64_t row_num);\n\n::milvus::proto::milvus::UpsertRequest\nGetUpsertRequestProto(const std::string& collection_name, int64_t row_num);\n\n::milvus::proto::milvus::SearchRequest\nGetSearchRequestProto(const std::string& collection_name,\n                      const std::string& expr,\n                      const std::vector<std::vector<float>>& vecs,\n                      const std::string& topk,\n                      const std::string& metric_type,\n                      const std::string& offset);\n\n::milvus::proto::milvus::QueryRequest\nGetQueryRequestProto(const std::string& collection_name,\n                     const std::string& expr,\n                     const std::string& limit,\n                     const std::string& offset,\n                     const std::vector<std::string>& output_fields);\n\n::milvus::proto::milvus::DeleteRequest\nGetDeleteRequestProto(const std::string& collection_name,\n                      const std::string& expr);\n\n::milvus::proto::milvus::DescribeCollectionRequest\nGetDescribeCollectionRequest(const std::string& collection_name);\n\ninline ::milvus::proto::milvus::DropCollectionRequest\nGetDropCollectionRequest(const std::string& collection_name) {\n    ::milvus::proto::milvus::DropCollectionRequest request;\n    request.set_collection_name(collection_name);\n    return request;\n}\n\n}  // namespace test\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/upsert_task.cpp",
    "content": "#include \"upsert_task.h\"\n#include <cstdint>\n#include <string>\n#include \"schema.pb.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\n\nStatus\nUpsertTask::Process(::milvus::proto::milvus::InsertRequest* insert_q,\n                    ::milvus::proto::schema::IDs* delete_ids) {\n    const ::milvus::proto::schema::FieldSchema* primary_field = nullptr;\n    for (const auto& field_schema : schema_->fields()) {\n        if (field_schema.is_primary_key()) {\n            primary_field = &field_schema;\n            break;\n        }\n    }\n    if (primary_field == nullptr)\n        return Status::ServiceInternal(\"Can not found primary key\");\n\n    for (const auto& field_data : upsert_request_->fields_data()) {\n        if (field_data.field_name() == primary_field->name()) {\n            if (field_data.type() == ::milvus::proto::schema::DataType::Int64) {\n                delete_ids->mutable_int_id()->CopyFrom(\n                    field_data.scalars().long_data());\n            } else if (field_data.type() ==\n                       ::milvus::proto::schema::DataType::VarChar) {\n                delete_ids->mutable_str_id()->CopyFrom(\n                    field_data.scalars().string_data());\n            } else {\n                return Status::ParameterInvalid(\"Primary key error\");\n            }\n            break;\n        }\n    }\n\n    // upsert request to insert request\n    insert_q->mutable_base()->CopyFrom(upsert_request_->base());\n    insert_q->set_db_name(upsert_request_->db_name());\n    insert_q->set_collection_name(upsert_request_->collection_name());\n    insert_q->set_partition_name(upsert_request_->partition_name());\n    insert_q->mutable_fields_data()->CopyFrom(upsert_request_->fields_data());\n    insert_q->mutable_hash_keys()->CopyFrom(upsert_request_->hash_keys());\n    insert_q->set_num_rows(upsert_request_->num_rows());\n    return Status::Ok();\n}\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "src/upsert_task.h",
    "content": "#pragma once\n\n#include \"common.h\"\n#include \"pb/milvus.pb.h\"\n#include \"pb/schema.pb.h\"\n#include \"status.h\"\n\nnamespace milvus::local {\nclass UpsertTask : NonCopyableNonMovable {\n public:\n    UpsertTask(const ::milvus::proto::milvus::UpsertRequest* r,\n               const ::milvus::proto::schema::CollectionSchema* schema)\n        : upsert_request_(r), schema_(schema) {\n    }\n    virtual ~UpsertTask() = default;\n\n public:\n    Status\n    Process(::milvus::proto::milvus::InsertRequest* insert_q,\n            ::milvus::proto::schema::IDs* delete_ids);\n\n private:\n    const ::milvus::proto::milvus::UpsertRequest* upsert_request_;\n    const ::milvus::proto::schema::CollectionSchema* schema_;\n};\n\n}  // namespace milvus::local\n"
  },
  {
    "path": "tests/base/client_base.py",
    "content": "from numpy.core.fromnumeric import _partition_dispatcher\nimport pytest\nimport sys\nfrom pymilvus import DefaultConfig\nfrom milvus_lite.server_manager import server_manager_instance\n\nfrom base.database_wrapper import ApiDatabaseWrapper\n\nsys.path.append(\"..\")\nfrom base.connections_wrapper import ApiConnectionsWrapper\nfrom base.collection_wrapper import ApiCollectionWrapper\nfrom base.partition_wrapper import ApiPartitionWrapper\nfrom base.index_wrapper import ApiIndexWrapper\nfrom base.utility_wrapper import ApiUtilityWrapper\nfrom base.schema_wrapper import ApiCollectionSchemaWrapper, ApiFieldSchemaWrapper\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nfrom utils.util_log import test_log as log\nfrom common import common_func as cf\nfrom common import common_type as ct\n\nfrom pymilvus import ResourceGroupInfo\n\n\nclass Base:\n    \"\"\" Initialize class object \"\"\"\n    connection_wrap = None\n    collection_wrap = None\n    partition_wrap = None\n    index_wrap = None\n    utility_wrap = None\n    collection_schema_wrap = None\n    field_schema_wrap = None\n    database_wrap = None\n    collection_object_list = []\n    resource_group_list = []\n    high_level_api_wrap = None\n\n    def setup_class(self):\n        log.info(\"[setup_class] Start setup class...\")\n\n    def teardown_class(self):\n        log.info(\"[teardown_class] Start teardown class...\")\n\n    def setup_method(self, method):\n        log.info((\"*\" * 35) + \" setup \" + (\"*\" * 35))\n        log.info(\"[setup_method] Start setup test case %s.\" % method.__name__)\n        self.connection_wrap = ApiConnectionsWrapper()\n        self.utility_wrap = ApiUtilityWrapper()\n        self.collection_wrap = ApiCollectionWrapper()\n        self.partition_wrap = ApiPartitionWrapper()\n        self.index_wrap = ApiIndexWrapper()\n        self.collection_schema_wrap = ApiCollectionSchemaWrapper()\n        self.field_schema_wrap = ApiFieldSchemaWrapper()\n        self.database_wrap = ApiDatabaseWrapper()\n        self.high_level_api_wrap = HighLevelApiWrapper()\n\n    def teardown_method(self, method):\n        log.info((\"*\" * 35) + \" teardown \" + (\"*\" * 35))\n        log.info(\"[teardown_method] Start teardown test case %s...\" % method.__name__)\n\n        try:\n            \"\"\" Drop collection before disconnect \"\"\"\n            if not self.connection_wrap.has_connection(alias=DefaultConfig.DEFAULT_USING)[0]:\n                self.connection_wrap.connect(alias=DefaultConfig.DEFAULT_USING, host=cf.param_info.param_host,\n                                             port=cf.param_info.param_port, user=ct.default_user,\n                                             password=ct.default_password)\n\n            if self.collection_wrap.collection is not None:\n                if self.collection_wrap.collection.name.startswith(\"alias\"):\n                    log.info(f\"collection {self.collection_wrap.collection.name} is alias, skip drop operation\")\n                else:\n                    self.collection_wrap.drop(check_task=ct.CheckTasks.check_nothing)\n\n            collection_list = self.utility_wrap.list_collections()[0]\n            for collection_object in self.collection_object_list:\n                if collection_object.collection is not None and collection_object.name in collection_list:\n                    collection_object.drop(check_task=ct.CheckTasks.check_nothing)\n\n            \"\"\" Clean up the rgs before disconnect \"\"\"\n            rgs_list = self.utility_wrap.list_resource_groups()[0]\n            for rg_name in self.resource_group_list:\n                if rg_name is not None and rg_name in rgs_list:\n                    rg = self.utility_wrap.describe_resource_group(name=rg_name, check_task=ct.CheckTasks.check_nothing)[0]\n                    if isinstance(rg, ResourceGroupInfo):\n                        if rg.num_available_node > 0:\n                            self.utility_wrap.transfer_node(source=rg_name,\n                                                            target=ct.default_resource_group_name,\n                                                            num_node=rg.num_available_node)\n                        self.utility_wrap.drop_resource_group(rg_name, check_task=ct.CheckTasks.check_nothing)\n\n        except Exception as e:\n            log.debug(str(e))\n\n        try:\n            \"\"\" Drop roles before disconnect \"\"\"\n            if not self.connection_wrap.has_connection(alias=DefaultConfig.DEFAULT_USING)[0]:\n                self.connection_wrap.connect(alias=DefaultConfig.DEFAULT_USING, host=cf.param_info.param_host,\n                                             port=cf.param_info.param_port, user=ct.default_user,\n                                             password=ct.default_password)\n\n            role_list = self.utility_wrap.list_roles(False)[0]\n            for role in role_list.groups:\n                role_name = role.role_name\n                if role_name not in [\"admin\", \"public\"]:\n                    each_role = self.utility_wrap.init_role(name=role_name)[0]\n                    each_role.drop()\n\n        except Exception as e:\n            log.debug(str(e))\n\n        try:\n            \"\"\" Delete connection and reset configuration\"\"\"\n            res = self.connection_wrap.list_connections()\n            for i in res[0]:\n                self.connection_wrap.remove_connection(i[0])\n\n            # because the connection is in singleton mode, it needs to be restored to the original state after teardown\n            self.connection_wrap.add_connection(default={\"host\": DefaultConfig.DEFAULT_HOST,\n                                                         \"port\": DefaultConfig.DEFAULT_PORT})\n        except Exception as e:\n            log.debug(str(e))\n\n\nclass TestcaseBase(Base):\n    \"\"\"\n    Additional methods;\n    Public methods that can be used for test cases.\n    \"\"\"\n\n    def _connect(self, enable_milvus_client_api=False, enable_milvus_local_api=False, init_collection=False):\n        \"\"\" Add a connection and create the connect \"\"\"\n        if enable_milvus_client_api and not enable_milvus_local_api:\n            if cf.param_info.param_uri:\n                uri = cf.param_info.param_uri\n            else:\n                uri = \"http://\" + cf.param_info.param_host + \":\" + str(cf.param_info.param_port)\n            res, is_succ = self.connection_wrap.MilvusClient(uri=uri,\n                                                             token=cf.param_info.param_token)\n        elif enable_milvus_local_api:\n            path = ct.default_milvus_local_path if enable_milvus_local_api == \"True\" else enable_milvus_local_api\n            if init_collection:\n                print(\"lite connect\")\n                res, is_succ = self.connection_wrap.connect(uri=path)\n            else:\n                print(\"client init url\")\n                uri = server_manager_instance.start_and_get_uri(path)\n                res, is_succ = self.connection_wrap.MilvusClient(uri=uri)\n        else:\n            if cf.param_info.param_user and cf.param_info.param_password:\n                res, is_succ = self.connection_wrap.connect(alias=DefaultConfig.DEFAULT_USING,\n                                                            host=cf.param_info.param_host,\n                                                            port=cf.param_info.param_port,\n                                                            user=cf.param_info.param_user,\n                                                            password=cf.param_info.param_password,\n                                                            secure=cf.param_info.param_secure)\n            else:\n                res, is_succ = self.connection_wrap.connect(alias=DefaultConfig.DEFAULT_USING,\n                                                            host=cf.param_info.param_host,\n                                                            port=cf.param_info.param_port)\n\n        return res\n\n    def init_collection_wrap(self, name=None, schema=None, check_task=None, check_items=None,\n                             enable_dynamic_field=False, with_json=True, **kwargs):\n        name = cf.gen_unique_str('coll_') if name is None else name\n        schema = cf.gen_default_collection_schema(enable_dynamic_field=enable_dynamic_field, with_json=with_json) \\\n            if schema is None else schema\n        if not self.connection_wrap.has_connection(alias=DefaultConfig.DEFAULT_USING)[0]:\n            self._connect(enable_milvus_local_api=\"milvus-lite.db\", init_collection=True)\n        collection_w = ApiCollectionWrapper()\n        collection_w.init_collection(name=name, schema=schema, check_task=check_task,\n                                     check_items=check_items, **kwargs)\n\n        self.collection_object_list.append(collection_w)\n        return collection_w\n\n    def init_multi_fields_collection_wrap(self, name=cf.gen_unique_str()):\n        vec_fields = [cf.gen_float_vec_field(ct.another_float_vec_field_name)]\n        schema = cf.gen_schema_multi_vector_fields(vec_fields)\n        collection_w = self.init_collection_wrap(name=name, schema=schema)\n        df = cf.gen_dataframe_multi_vec_fields(vec_fields=vec_fields)\n        collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        return collection_w, df\n\n    def init_partition_wrap(self, collection_wrap=None, name=None, description=None,\n                            check_task=None, check_items=None, **kwargs):\n        name = cf.gen_unique_str(\"partition_\") if name is None else name\n        description = cf.gen_unique_str(\"partition_des_\") if description is None else description\n        collection_wrap = self.init_collection_wrap() if collection_wrap is None else collection_wrap\n        partition_wrap = ApiPartitionWrapper()\n        partition_wrap.init_partition(collection_wrap.collection, name, description,\n                                      check_task=check_task, check_items=check_items,\n                                      **kwargs)\n        return partition_wrap\n\n    def insert_data_general(self, prefix=\"test\", insert_data=False, nb=ct.default_nb,\n                            partition_num=0, is_binary=False, is_all_data_type=False,\n                            auto_id=False, dim=ct.default_dim,\n                            primary_field=ct.default_int64_field_name, is_flush=True, name=None,\n                            enable_dynamic_field=False, with_json=True, **kwargs):\n        \"\"\"\n\n        \"\"\"\n        self._connect()\n        collection_name = cf.gen_unique_str(prefix)\n        if name is not None:\n            collection_name = name\n        vectors = []\n        binary_raw_vectors = []\n        insert_ids = []\n        time_stamp = 0\n        # 1 create collection\n        default_schema = cf.gen_default_collection_schema(auto_id=auto_id, dim=dim, primary_field=primary_field,\n                                                          enable_dynamic_field=enable_dynamic_field,\n                                                          with_json=with_json)\n        if is_binary:\n            default_schema = cf.gen_default_binary_collection_schema(auto_id=auto_id, dim=dim,\n                                                                     primary_field=primary_field)\n        if is_all_data_type:\n            default_schema = cf.gen_collection_schema_all_datatype(auto_id=auto_id, dim=dim,\n                                                                   primary_field=primary_field,\n                                                                   enable_dynamic_field=enable_dynamic_field,\n                                                                   with_json=with_json)\n        log.info(\"insert_data_general: collection creation\")\n        collection_w = self.init_collection_wrap(name=collection_name, schema=default_schema, **kwargs)\n        pre_entities = collection_w.num_entities\n        if insert_data:\n            collection_w, vectors, binary_raw_vectors, insert_ids, time_stamp = \\\n                cf.insert_data(collection_w, nb, is_binary, is_all_data_type, auto_id=auto_id, dim=dim,\n                               enable_dynamic_field=enable_dynamic_field,\n                               with_json=with_json)\n            if is_flush:\n                collection_w.flush()\n                assert collection_w.num_entities == nb + pre_entities\n\n        return collection_w, vectors, binary_raw_vectors, insert_ids, time_stamp\n\n    def init_collection_general(self, prefix=\"test\", insert_data=False, nb=ct.default_nb,\n                                partition_num=0, is_binary=False, is_all_data_type=False,\n                                auto_id=False, dim=ct.default_dim, is_index=True,\n                                primary_field=ct.default_int64_field_name, is_flush=True, name=None,\n                                enable_dynamic_field=False, with_json=True, random_primary_key=False,\n                                multiple_dim_array=[], is_partition_key=None, vector_data_type=\"FLOAT_VECTOR\",\n                                **kwargs):\n        \"\"\"\n        target: create specified collections\n        method: 1. create collections (binary/non-binary, default/all data type, auto_id or not)\n                2. create partitions if specified\n                3. insert specified (binary/non-binary, default/all data type) data\n                   into each partition if any\n                4. not load if specifying is_index as True\n        expected: return collection and raw data, insert ids\n        \"\"\"\n        log.info(\"Test case of search interface: initialize before test case\")\n        self._connect(enable_milvus_local_api=\"./local_test.db\", init_collection=True)\n        collection_name = cf.gen_unique_str(prefix)\n        if name is not None:\n            collection_name = name\n        vectors = []\n        binary_raw_vectors = []\n        insert_ids = []\n        time_stamp = 0\n        # 1 create collection\n        default_schema = cf.gen_default_collection_schema(auto_id=auto_id, dim=dim, primary_field=primary_field,\n                                                          enable_dynamic_field=enable_dynamic_field,\n                                                          with_json=with_json, multiple_dim_array=multiple_dim_array,\n                                                          is_partition_key=is_partition_key,\n                                                          vector_data_type=vector_data_type)\n        if is_binary:\n            default_schema = cf.gen_default_binary_collection_schema(auto_id=auto_id, dim=dim,\n                                                                     primary_field=primary_field)\n        if vector_data_type == ct.sparse_vector:\n            default_schema = cf.gen_default_sparse_schema(auto_id=auto_id, primary_field=primary_field,\n                                                                     enable_dynamic_field=enable_dynamic_field,\n                                                                     with_json=with_json,\n                                                                     multiple_dim_array=multiple_dim_array)\n        if is_all_data_type:\n            default_schema = cf.gen_collection_schema_all_datatype(auto_id=auto_id, dim=dim,\n                                                                   primary_field=primary_field,\n                                                                   enable_dynamic_field=enable_dynamic_field,\n                                                                   with_json=with_json,\n                                                                   multiple_dim_array=multiple_dim_array)\n        collection_w = self.init_collection_wrap(name=collection_name, schema=default_schema, **kwargs)\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        # 2 add extra partitions if specified (default is 1 partition named \"_default\")\n        if partition_num > 0:\n            cf.gen_partitions(collection_w, partition_num)\n        # 3 insert data if specified\n        if insert_data:\n            collection_w, vectors, binary_raw_vectors, insert_ids, time_stamp = \\\n                cf.insert_data(collection_w, nb, is_binary, is_all_data_type, auto_id=auto_id,\n                               dim=dim, enable_dynamic_field=enable_dynamic_field, with_json=with_json,\n                               random_primary_key=random_primary_key, multiple_dim_array=multiple_dim_array,\n                               primary_field=primary_field, vector_data_type=vector_data_type)\n            if is_flush:\n                assert collection_w.is_empty is False\n                assert collection_w.num_entities == nb\n        # 4 create default index if specified\n        if is_index:\n            # This condition will be removed after auto index feature\n            if is_binary:\n                collection_w.create_index(ct.default_binary_vec_field_name, ct.default_bin_flat_index)\n            elif vector_data_type == ct.sparse_vector:\n                for vector_name in vector_name_list:\n                    collection_w.create_index(vector_name, ct.default_sparse_inverted_index)\n            else:\n                if len(multiple_dim_array) == 0 or is_all_data_type == False:\n                    vector_name_list.append(ct.default_float_vec_field_name)\n                for vector_name in vector_name_list:\n                    # Unlike dense vectors, sparse vectors cannot create flat index.\n                    if ct.sparse_vector in vector_name:\n                        collection_w.create_index(vector_name, ct.default_sparse_inverted_index)\n                    else:\n                        collection_w.create_index(vector_name, ct.default_flat_index)\n\n            collection_w.load()\n\n        return collection_w, vectors, binary_raw_vectors, insert_ids, time_stamp\n\n    def insert_entities_into_two_partitions_in_half(self, half, prefix='query'):\n        \"\"\"\n        insert default entities into two partitions(partition_w and _default) in half(int64 and float fields values)\n        :param half: half of nb\n        :return: collection wrap and partition wrap\n        \"\"\"\n        self._connect()\n        collection_w = self.init_collection_wrap(name=cf.gen_unique_str(prefix))\n        partition_w = self.init_partition_wrap(collection_wrap=collection_w)\n        # insert [0, half) into partition_w\n        df_partition = cf.gen_default_dataframe_data(nb=half, start=0)\n        partition_w.insert(df_partition)\n        # insert [half, nb) into _default\n        df_default = cf.gen_default_dataframe_data(nb=half, start=half)\n        collection_w.insert(df_default)\n        # flush\n        collection_w.num_entities\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load(partition_names=[partition_w.name, \"_default\"])\n        return collection_w, partition_w, df_partition, df_default\n\n    def collection_insert_multi_segments_one_shard(self, collection_prefix, num_of_segment=2, nb_of_segment=1,\n                                                   is_dup=True):\n        \"\"\"\n        init collection with one shard, insert data into two segments on one shard (they can be merged)\n        :param collection_prefix: collection name prefix\n        :param num_of_segment: number of segments\n        :param nb_of_segment: number of entities per segment\n        :param is_dup: whether the primary keys of each segment is duplicated\n        :return: collection wrap and partition wrap\n        \"\"\"\n        collection_w = self.init_collection_wrap(name=cf.gen_unique_str(collection_prefix), shards_num=1)\n\n        for i in range(num_of_segment):\n            start = 0 if is_dup else i * nb_of_segment\n            df = cf.gen_default_dataframe_data(nb_of_segment, start=start)\n            collection_w.insert(df)\n            assert collection_w.num_entities == nb_of_segment * (i + 1)\n        return collection_w\n\n    def init_resource_group(self, name, using=\"default\", timeout=None, check_task=None, check_items=None, **kwargs):\n        if not self.connection_wrap.has_connection(alias=DefaultConfig.DEFAULT_USING)[0]:\n            self._connect()\n        utility_w = ApiUtilityWrapper()\n        res, check_result = utility_w.create_resource_group(name=name, using=using, timeout=timeout,\n                                                            check_task=check_task,\n                                                            check_items=check_items, **kwargs)\n        if res is None and check_result:\n            self.resource_group_list.append(name)\n        return res, check_result\n\n    def init_user_with_privilege(self, privilege_object, object_name, privilege, db_name=\"default\"):\n        \"\"\"\n        init a user and role, grant privilege to the role with the db, then bind the role to the user\n        :param privilege_object: privilege object: Global, Collection, User\n        :type privilege_object: str\n        :param object_name: privilege object name\n        :type object_name: str\n        :param privilege: privilege\n        :type privilege: str\n        :param db_name: database name\n        :type db_name: str\n        :return: user name, user pwd, role name\n        :rtype: str, str, str\n        \"\"\"\n        tmp_user = cf.gen_unique_str(\"user\")\n        tmp_pwd = cf.gen_unique_str(\"pwd\")\n        tmp_role = cf.gen_unique_str(\"role\")\n\n        # create user\n        self.utility_wrap.create_user(tmp_user, tmp_pwd)\n\n        # create role\n        self.utility_wrap.init_role(tmp_role)\n        self.utility_wrap.create_role()\n\n        # grant privilege to the role\n        self.utility_wrap.role_grant(object=privilege_object, object_name=object_name, privilege=privilege, db_name=db_name)\n\n        # bind the role to the user\n        self.utility_wrap.role_add_user(tmp_user)\n\n        return tmp_user, tmp_pwd, tmp_role\n\n"
  },
  {
    "path": "tests/base/collection_wrapper.py",
    "content": "import sys\nimport time\nimport timeout_decorator\nfrom numpy import NaN\n\nfrom pymilvus import Collection\n\nsys.path.append(\"..\")\nfrom check.func_check import ResponseChecker\nfrom utils.api_request import api_request\nfrom utils.wrapper import trace\nfrom utils.util_log import test_log as log\nfrom pymilvus.orm.types import CONSISTENCY_STRONG\nfrom common.common_func import param_info\n\nTIMEOUT = 180\nINDEX_NAME = \"\"\n\n\n# keep small timeout for stability tests\n# TIMEOUT = 5\n\n\nclass ApiCollectionWrapper:\n    collection = None\n\n    def __init__(self, active_trace=False):\n        self.active_trace = active_trace\n\n    def init_collection(self, name, schema=None, using=\"default\", check_task=None, check_items=None,\n                        active_trace=False, **kwargs):\n        self.active_trace = active_trace\n        consistency_level = kwargs.get(\"consistency_level\", CONSISTENCY_STRONG)\n        kwargs.update({\"consistency_level\": consistency_level})\n\n        \"\"\" In order to distinguish the same name of collection \"\"\"\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([Collection, name, schema, using], **kwargs)\n        self.collection = res if is_succ else None\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       name=name, schema=schema, using=using, **kwargs).run()\n        return res, check_result\n\n    @property\n    def schema(self):\n        return self.collection.schema\n\n    @property\n    def description(self):\n        return self.collection.description\n\n    @property\n    def name(self):\n        return self.collection.name\n\n    @property\n    def is_empty(self):\n        self.flush()\n        return self.collection.is_empty\n\n    @property\n    def num_entities(self):\n        self.flush()\n        return self.collection.num_entities\n\n    @property\n    def num_shards(self):\n        return self.collection.num_shards\n\n    @property\n    def num_entities_without_flush(self):\n        return self.collection.num_entities\n\n    @property\n    def primary_field(self):\n        return self.collection.primary_field\n\n    @property\n    def aliases(self):\n        return self.collection.aliases\n\n    @trace()\n    def construct_from_dataframe(self, name, dataframe, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([Collection.construct_from_dataframe, name, dataframe], **kwargs)\n        self.collection = res[0] if is_succ else None\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       name=name, dataframe=dataframe, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop(self, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.drop], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def load(self, partition_names=None, replica_number=NaN, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        replica_number = param_info.param_replica_num if replica_number is NaN else replica_number\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.load, partition_names, replica_number, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       partition_names=partition_names, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def release(self, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.release], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def insert(self, data, partition_name=None, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.insert, data, partition_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       data=data, partition_name=partition_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    # @trace()\n    # def flush(self, check_task=None, check_items=None, **kwargs):\n    #     #TODO:currently, flush is not supported by sdk in milvus\n    #     timeout = kwargs.get(\"timeout\", TIMEOUT)\n    #\n    #     @timeout_decorator.timeout(timeout, timeout_exception=TimeoutError)\n    #     def _flush():\n    #         res = self.collection.num_entities\n    #         return res\n    #     try:\n    #         res = _flush()\n    #         return res, True\n    #     except TimeoutError as e:\n    #         log.error(f\"flush timeout error: {e}\")\n    #         res = None\n    #         return res, False\n\n    @trace()\n    def flush(self, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.flush], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def search(self, data, anns_field, param, limit, expr=None,\n               partition_names=None, output_fields=None, timeout=None # round_decimal=-1,\n               , check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.search, data, anns_field, param, limit,\n                                  expr, partition_names, output_fields, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       data=data, anns_field=anns_field, param=param, limit=limit,\n                                       expr=expr, partition_names=partition_names,\n                                       output_fields=output_fields,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def hybrid_search(self, reqs, rerank, limit,\n                      output_fields=None, timeout=None, round_decimal=-1,\n                      check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        partition_names = None\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.hybrid_search, reqs, rerank, limit,\n                                  partition_names, output_fields, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       reqs=reqs, rerank=rerank, limit=limit,\n                                       output_fields=output_fields,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def search_iterator(self, data, anns_field, param, batch_size, limit=-1, expr=None,\n                        partition_names=None, output_fields=None, timeout=None, round_decimal=-1,\n                        check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.search_iterator, data, anns_field, param, batch_size, limit,\n                                  expr, partition_names, output_fields, timeout, round_decimal], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       data=data, anns_field=anns_field, param=param, limit=limit,\n                                       expr=expr, partition_names=partition_names,\n                                       output_fields=output_fields,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def query(self, expr, output_fields=None, partition_names=None, timeout=None, check_task=None, check_items=None,\n              **kwargs):\n        # time.sleep(5)\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.query, expr, output_fields, partition_names, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       expression=expr, partition_names=partition_names,\n                                       output_fields=output_fields,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def query_iterator(self, batch_size=1000, limit=-1, expr=None, output_fields=None, partition_names=None, timeout=None,\n                       check_task=None, check_items=None, **kwargs):\n        # time.sleep(5)\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.query_iterator, batch_size, limit, expr, output_fields, partition_names,\n                                  timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       batch_size=batch_size, limit=limit, expression=expr,\n                                       output_fields=output_fields, partition_names=partition_names,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    @property\n    def partitions(self):\n        return self.collection.partitions\n\n    @trace()\n    def partition(self, partition_name, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.collection.partition, partition_name])\n        check_result = ResponseChecker(res, func_name, check_task, check_items,\n                                       succ, partition_name=partition_name).run()\n        return res, check_result\n\n    @trace()\n    def has_partition(self, partition_name, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.collection.has_partition, partition_name])\n        check_result = ResponseChecker(res, func_name, check_task, check_items,\n                                       succ, partition_name=partition_name).run()\n        return res, check_result\n\n    @trace()\n    def drop_partition(self, partition_name, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.drop_partition, partition_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, partition_name=partition_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def create_partition(self, partition_name, check_task=None, check_items=None, description=\"\"):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.create_partition, partition_name, description])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       partition_name=partition_name).run()\n        return res, check_result\n\n    @property\n    def indexes(self):\n        return self.collection.indexes\n\n    @trace()\n    def index(self, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.index])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check).run()\n        return res, check_result\n\n    @trace()\n    def create_index(self, field_name, index_params=None, index_name=None, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = 1200 if timeout is None else timeout\n        index_name = INDEX_NAME if index_name is None else index_name\n        index_name = kwargs.get(\"index_name\", index_name)\n        kwargs.update({\"index_name\": index_name})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.create_index, field_name, index_params, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def has_index(self, index_name=None, check_task=None, check_items=None, **kwargs):\n        index_name = INDEX_NAME if index_name is None else index_name\n        index_name = kwargs.get(\"index_name\", index_name)\n        kwargs.update({\"index_name\": index_name})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.has_index], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop_index(self, index_name=None, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        index_name = INDEX_NAME if index_name is None else index_name\n        index_name = kwargs.get(\"index_name\", index_name)\n        kwargs.update({\"timeout\": timeout, \"index_name\": index_name})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.drop_index], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def delete(self, expr, partition_name=None, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.delete, expr, partition_name, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def upsert(self, data, partition_name=None, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.upsert, data, partition_name, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def compact(self, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.compact, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def get_compaction_state(self, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.get_compaction_state, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def get_compaction_plans(self, timeout=None, check_task=None, check_items={}, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.get_compaction_plans, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def wait_for_compaction_completed(self, timeout=None, **kwargs):\n        timeout = TIMEOUT * 3 if timeout is None else timeout\n        res = self.collection.wait_for_compaction_completed(timeout, **kwargs)\n        # log.debug(res)\n        return res\n\n    @trace()\n    def get_replicas(self, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.get_replicas, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def describe(self, timeout=None, check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.describe, timeout])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check).run()\n        return res, check_result\n\n    @trace()\n    def alter_index(self, index_name, extra_params={}, timeout=None,  check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.alter_index, index_name, extra_params, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def set_properties(self, extra_params={}, timeout=None,  check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.collection.set_properties, extra_params, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result"
  },
  {
    "path": "tests/base/connections_wrapper.py",
    "content": "from pymilvus import Connections\nfrom pymilvus import DefaultConfig\nfrom pymilvus import MilvusClient\nimport sys\n\nsys.path.append(\"..\")\nfrom check.func_check import ResponseChecker\nfrom utils.api_request import api_request\n\n\nclass ApiConnectionsWrapper:\n    def __init__(self):\n        self.connection = Connections()\n\n    def add_connection(self, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.connection.add_connection], **kwargs)\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ, **kwargs).run()\n        return response, check_result\n\n    def disconnect(self, alias, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.connection.disconnect, alias])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ, alias=alias).run()\n        return response, check_result\n\n    def remove_connection(self, alias, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.connection.remove_connection, alias])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ, alias=alias).run()\n        return response, check_result\n\n    def connect(self, alias=DefaultConfig.DEFAULT_USING, user=\"\", password=\"\", db_name=\"default\", token: str = \"\",\n                check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        response, succ = api_request([self.connection.connect, alias, user, password, db_name, token], **kwargs)\n        check_result = ResponseChecker(response, func_name, check_task, check_items, succ, alias=alias, user=user,\n                                       password=password, db_name=db_name, token=token, **kwargs).run()\n        return response, check_result\n\n    def has_connection(self, alias=DefaultConfig.DEFAULT_USING, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, succ = api_request([self.connection.has_connection, alias])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, succ, alias=alias).run()\n        return response, check_result\n\n    #  def get_connection(self, alias=DefaultConfig.DEFAULT_USING, check_task=None, check_items=None):\n    #      func_name = sys._getframe().f_code.co_name\n    #      response, is_succ = api_request([self.connection.get_connection, alias])\n    #      check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ, alias=alias).run()\n    #      return response, check_result\n\n    def list_connections(self, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.connection.list_connections])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ).run()\n        return response, check_result\n\n    def get_connection_addr(self, alias, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.connection.get_connection_addr, alias])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ, alias=alias).run()\n        return response, check_result\n    \n    # high level api\n    def MilvusClient(self, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        response, succ = api_request([MilvusClient], **kwargs)\n        check_result = ResponseChecker(response, func_name, check_task, check_items, succ, **kwargs).run()\n        return response, check_result\n"
  },
  {
    "path": "tests/base/database_wrapper.py",
    "content": "import sys\n\nfrom pymilvus import db\n\nfrom utils.api_request import api_request\nfrom check.func_check import ResponseChecker\n\n\nclass ApiDatabaseWrapper:\n    \"\"\" wrapper of database \"\"\"\n    database = db\n\n    def create_database(self, db_name, using=\"default\", timeout=None, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.database.create_database, db_name, using, timeout])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ).run()\n        return response, check_result\n\n    def using_database(self, db_name, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.database.using_database, db_name, using])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ).run()\n        return response, check_result\n\n    def drop_database(self, db_name, using=\"default\", timeout=None, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.database.drop_database, db_name, using, timeout])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ).run()\n        return response, check_result\n\n    def list_database(self, using=\"default\", timeout=None, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.database.list_database, using, timeout])\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ).run()\n        return response, check_result\n"
  },
  {
    "path": "tests/base/high_level_api_wrapper.py",
    "content": "import sys\nimport time\nimport timeout_decorator\nfrom numpy import NaN\n\nfrom pymilvus import Collection\nfrom pymilvus import MilvusClient\n\nsys.path.append(\"..\")\nfrom check.func_check import ResponseChecker\nfrom utils.api_request import api_request\nfrom utils.wrapper import trace\nfrom utils.util_log import test_log as log\nfrom pymilvus.orm.types import CONSISTENCY_STRONG\nfrom common.common_func import param_info\n\nTIMEOUT = 120\nINDEX_NAME = \"\"\n\n\n# keep small timeout for stability tests\n# TIMEOUT = 5\n\n\nclass HighLevelApiWrapper:\n\n    milvus_client = None\n\n    def __init__(self, active_trace=False):\n        self.active_trace = active_trace\n\n    def init_milvus_client(self, uri, user=\"\", password=\"\", db_name=\"\", token=\"\", timeout=None,\n                           check_task=None, check_items=None, active_trace=False, **kwargs):\n        self.active_trace = active_trace\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([MilvusClient, uri, user, password, db_name, token, timeout], **kwargs)\n        self.milvus_client = res if is_succ else None\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       uri=uri, user=user, password=password, db_name=db_name, token=token,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    # elstic update\n    def init_collection(self, name, schema=None, using=\"default\", check_task=None, check_items=None,\n                        active_trace=False, **kwargs):\n        self.active_trace = active_trace\n        consistency_level = kwargs.get(\"consistency_level\", CONSISTENCY_STRONG)\n        kwargs.update({\"consistency_level\": consistency_level})\n\n        \"\"\" In order to distinguish the same name of collection \"\"\"\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([Collection, name, schema, using], **kwargs)\n        self.collection = res if is_succ else None\n        print(\"HighLevelApiWrapper init_collection  >>> \")\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       name=name, schema=schema, using=using, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def create_schema(self, client, timeout=None, check_task=None,\n                      check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.create_schema], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def create_collection(self, client, collection_name, dimension, timeout=None, check_task=None,\n                          check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.create_collection, collection_name, dimension], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name, dimension=dimension,\n                                       **kwargs).run()\n        return res, check_result\n\n    def has_collection(self, client, collection_name, timeout=None, check_task=None,\n                       check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.has_collection, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def insert(self, client, collection_name, data, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.insert, collection_name, data], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name, data=data,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def upsert(self, client, collection_name, data, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.upsert, collection_name, data], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name, data=data,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def search(self, client, collection_name, data, limit=10, filter=None, output_fields=None, search_params=None,\n               timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.search, collection_name, data, filter, limit,\n                                  output_fields, search_params], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name, data=data, limit=limit, filter=filter,\n                                       output_fields=output_fields, search_params=search_params,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def query(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.query, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def get(self, client, collection_name, ids, output_fields=None,\n            timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.get, collection_name, ids, output_fields], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name, ids=ids,\n                                       output_fields=output_fields,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def num_entities(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.num_entities, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def delete(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.delete, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def flush(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.flush, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def describe_collection(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.describe_collection, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_collections(self, client, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.list_collections], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop_collection(self, client, collection_name, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.drop_collection, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_partitions(self, client, collection_name, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.list_partitions, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_indexes(self, client, collection_name, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.list_indexes, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def get_load_state(self, client, collection_name, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.get_load_state, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def prepare_index_params(self, client, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.prepare_index_params], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def load_collection(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.load_collection, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def release_collection(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.release_collection, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def load_partitions(self, client, collection_name, partition_names, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.load_partitions, collection_name, partition_names], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       partition_names=partition_names,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def release_partitions(self, client, collection_name, partition_names, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.release_partitions, collection_name, partition_names], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       partition_names=partition_names,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def rename_collection(self, client, old_name, new_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.rename_collection, old_name, new_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       old_name=old_name,\n                                       new_name=new_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def use_database(self, client, db_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.use_database, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       db_name=db_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def create_partition(self, client, collection_name, partition_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.create_partition, collection_name, partition_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       partition_name=partition_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_partitions(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.list_partitions, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop_partition(self, client, collection_name, partition_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.drop_partition, collection_name, partition_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       partition_name=partition_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def has_partition(self, client, collection_name, partition_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.has_partition, collection_name, partition_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       partition_name=partition_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def get_partition_stats(self, client, collection_name, partition_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.get_partition_stats, collection_name, partition_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       partition_name=partition_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def prepare_index_params(self, client, check_task=None, check_items=None, **kwargs):\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.prepare_index_params], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def create_index(self, client, collection_name, index_params, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.create_index, collection_name, index_params], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       index_params=index_params,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop_index(self, client, collection_name, index_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.drop_index, collection_name, index_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       index_name=index_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def describe_index(self, client, collection_name, index_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.describe_index, collection_name, index_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       index_name=index_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_indexes(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.list_indexes, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def create_alias(self, client, collection_name, alias, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.create_alias, collection_name, alias], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       alias=alias,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop_alias(self, client, alias, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.drop_alias, alias], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       alias=alias,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def alter_alias(self, client, collection_name, alias, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.alter_alias, collection_name, alias], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       collection_name=collection_name,\n                                       alias=alias,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def describe_alias(self, client, alias, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.describe_alias, alias], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       alias=alias,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_aliases(self, client, collection_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.list_aliases, collection_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, collection_name=collection_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def using_database(self, client, db_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.using_database, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check,\n                                       db_name=db_name,\n                                       **kwargs).run()\n        return res, check_result\n\n    def create_user(self, user_name, password, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.create_user, user_name, password], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, user_name=user_name,\n                                       password=password, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop_user(self, user_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.drop_user, user_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, user_name=user_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def update_password(self, user_name, old_password, new_password, reset_connection=False,\n                        timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.update_password, user_name, old_password, new_password,\n                                  reset_connection], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, user_name=user_name, old_password=old_password,\n                                       new_password=new_password, reset_connection=reset_connection,\n                                       **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_users(self, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.list_users], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def describe_user(self, user_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.describe_user, user_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, user_name=user_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def create_role(self, role_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.create_role, role_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, role_name=role_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def drop_role(self, role_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.drop_role, role_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, role_name=role_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def describe_role(self, role_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.describe_role, role_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, role_name=role_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def list_roles(self, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.list_roles], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, check, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def grant_role(self, user_name, role_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.grant_role, user_name, role_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       user_name=user_name, role_name=role_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def revoke_role(self, user_name, role_name, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.revoke_role, user_name, role_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       user_name=user_name, role_name=role_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def grant_privilege(self, role_name, object_type, privilege, object_name, db_name=\"\",\n                        timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.grant_privilege, role_name, object_type, privilege,\n                                  object_name, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       role_name=role_name, object_type=object_type, privilege=privilege,\n                                       object_name=object_name, db_name=db_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def revoke_privilege(self, role_name, object_type, privilege, object_name, db_name=\"\",\n                         timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        kwargs.update({\"timeout\": timeout})\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.milvus_client.revoke_privilege, role_name, object_type, privilege,\n                                  object_name, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       role_name=role_name, object_type=object_type, privilege=privilege,\n                                       object_name=object_name, db_name=db_name, **kwargs).run()\n        return res, check_result\n\n    @trace()\n    def hybrid_search(self, client,   reqs, rerank, limit,\n                      output_fields=None, timeout=None, round_decimal=-1,\n                      check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([client.hybrid_search,   reqs, rerank, limit,\n                                  output_fields, timeout, round_decimal], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       reqs=reqs, rerank=rerank, limit=limit,\n                                       output_fields=output_fields,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result"
  },
  {
    "path": "tests/base/index_wrapper.py",
    "content": "import sys\nfrom pymilvus import Index\n\nsys.path.append(\"..\")\nfrom check.func_check import ResponseChecker\nfrom utils.api_request import api_request\n\nTIMEOUT = 20\nINDEX_NAME = \"\"\n\n\nclass ApiIndexWrapper:\n    index = None\n\n    def init_index(self, collection, field_name, index_params, index_name=None, check_task=None, check_items=None,\n                   **kwargs):\n        disktimeout = 600\n        timeout = kwargs.get(\"timeout\", disktimeout * 2)\n        index_name = INDEX_NAME if index_name is None else index_name\n        index_name = kwargs.get(\"index_name\", index_name)\n        kwargs.update({\"timeout\": timeout, \"index_name\": index_name})\n\n        \"\"\" In order to distinguish the same name of index \"\"\"\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([Index, collection, field_name, index_params], **kwargs)\n        self.index = res if is_succ is True else None\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection=collection, field_name=field_name,\n                                       index_params=index_params, **kwargs).run()\n        return res, check_result\n\n    def drop(self, index_name=None, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        index_name = INDEX_NAME if index_name is None else index_name\n        index_name = kwargs.get(\"index_name\", index_name)\n        kwargs.update({\"timeout\": timeout, \"index_name\": index_name})\n\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.index.drop], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ, **kwargs).run()\n        return res, check_result\n\n    @property\n    def params(self):\n        return self.index.params\n\n    @property\n    def collection_name(self):\n        return self.index.collection_name\n\n    @property\n    def field_name(self):\n        return self.index.field_name\n"
  },
  {
    "path": "tests/base/partition_wrapper.py",
    "content": "import sys\nfrom numpy import NaN\n\nfrom pymilvus import Partition\n\nsys.path.append(\"..\")\nfrom check.func_check import ResponseChecker\nfrom utils.api_request import api_request\nfrom common.common_func import param_info\n\n\nTIMEOUT = 180\n\n\nclass ApiPartitionWrapper:\n    partition = None\n\n    def init_partition(self, collection, name, description=\"\",\n                       check_task=None, check_items=None, **kwargs):\n        \"\"\" In order to distinguish the same name of partition \"\"\"\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([Partition, collection, name, description], **kwargs)\n        self.partition = response if is_succ is True else None\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ,\n                                       **kwargs).run()\n        return response, check_result\n\n    @property\n    def description(self):\n        return self.partition.description if self.partition else None\n\n    @property\n    def name(self):\n        return self.partition.name if self.partition else None\n\n    @property\n    def is_empty(self):\n        self.flush()\n        return self.partition.is_empty if self.partition else None\n\n    @property\n    def num_entities(self):\n        self.flush()\n        return self.partition.num_entities if self.partition else None\n\n    def drop(self, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.drop], **kwargs)\n        check_result = ResponseChecker(res, func_name,\n                                       check_task, check_items, succ, **kwargs).run()\n        return res, check_result\n\n    def load(self, replica_number=NaN, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        replica_number = param_info.param_replica_num if replica_number is NaN else replica_number\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.load, replica_number, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, is_succ=succ,\n                                       **kwargs).run()\n        return res, check_result\n\n    def release(self, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.release], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, is_succ=succ,\n                                       **kwargs).run()\n        return res, check_result\n\n    def flush(self, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.flush], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, is_succ=succ,\n                                       **kwargs).run()\n        return res, check_result\n\n    def insert(self, data, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.insert, data], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, is_succ=succ, data=data,\n                                       **kwargs).run()\n        return res, check_result\n\n    def search(self, data, anns_field, params, limit, expr=None, output_fields=None,\n               check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.search, data, anns_field, params,\n                                 limit, expr, output_fields], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items,\n                                       is_succ=succ, data=data, anns_field=anns_field,\n                                       params=params, limit=limit, expr=expr,\n                                       output_fields=output_fields, **kwargs).run()\n        return res, check_result\n\n    def query(self, expr, output_fields=None, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.partition.query, expr, output_fields, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       expression=expr, output_fields=output_fields,\n                                       timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    def delete(self, expr, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.delete, expr], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, is_succ=succ, expr=expr,\n                                       **kwargs).run()\n        return res, check_result\n\n    def upsert(self, data, check_task=None, check_items=None, **kwargs):\n        timeout = kwargs.get(\"timeout\", TIMEOUT)\n        kwargs.update({\"timeout\": timeout})\n\n        func_name = sys._getframe().f_code.co_name\n        res, succ = api_request([self.partition.upsert, data], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, is_succ=succ, data=data,\n                                       **kwargs).run()\n        return res, check_result\n\n    def get_replicas(self, timeout=None, check_task=None, check_items=None, **kwargs):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.partition.get_replicas, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n"
  },
  {
    "path": "tests/base/schema_wrapper.py",
    "content": "import sys\n\nsys.path.append(\"..\")\nfrom check.func_check import ResponseChecker\nfrom utils.api_request import api_request\nfrom pymilvus import CollectionSchema, FieldSchema\n\n\nclass ApiCollectionSchemaWrapper:\n    collection_schema = None\n\n    def init_collection_schema(self, fields, description=\"\", check_task=None, check_items=None, **kwargs):\n        \"\"\"In order to distinguish the same name of CollectionSchema\"\"\"\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([CollectionSchema, fields, description], **kwargs)\n        self.collection_schema = response if is_succ else None\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ=is_succ, fields=fields,\n                                       description=description, **kwargs).run()\n        return response, check_result\n\n    @property\n    def primary_field(self):\n        return self.collection_schema.primary_field if self.collection_schema else None\n\n    @property\n    def partition_key_field(self):\n        return self.collection_schema.partition_key_field if self.collection_schema else None\n\n    @property\n    def fields(self):\n        return self.collection_schema.fields if self.collection_schema else None\n\n    @property\n    def description(self):\n        return self.collection_schema.description if self.collection_schema else None\n\n    @property\n    def auto_id(self):\n        return self.collection_schema.auto_id if self.collection_schema else None\n\n    @property\n    def enable_dynamic_field(self):\n        return self.collection_schema.enable_dynamic_field if self.collection_schema else None\n\n    @property\n    def to_dict(self):\n        return self.collection_schema.to_dict if self.collection_schema else None\n\n    @property\n    def verify(self):\n        return self.collection_schema.verify if self.collection_schema else None\n\n    def add_field(self, field_name, datatype, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([self.collection_schema.add_field, field_name, datatype], **kwargs)\n        check_result = ResponseChecker(response, func_name, check_task, check_items,\n                                       field_name=field_name, datatype=datatype, **kwargs).run()\n        return response, check_result\n\n\nclass ApiFieldSchemaWrapper:\n    field_schema = None\n\n    def init_field_schema(self, name, dtype, description=\"\", check_task=None, check_items=None, **kwargs):\n        \"\"\"In order to distinguish the same name of FieldSchema\"\"\"\n        func_name = sys._getframe().f_code.co_name\n        response, is_succ = api_request([FieldSchema, name, dtype, description], **kwargs)\n        self.field_schema = response if is_succ else None\n        check_result = ResponseChecker(response, func_name, check_task, check_items, is_succ, name=name, dtype=dtype,\n                                       description=description, **kwargs).run()\n        return response, check_result\n\n    @property\n    def description(self):\n        return self.field_schema.description if self.field_schema else None\n\n    @property\n    def params(self):\n        return self.field_schema.params if self.field_schema else None\n\n    @property\n    def dtype(self):\n        return self.field_schema.dtype if self.field_schema else None\n"
  },
  {
    "path": "tests/base/utility_wrapper.py",
    "content": "from datetime import datetime\nimport time\nfrom pymilvus import utility\nimport sys\n\nsys.path.append(\"..\")\nfrom check.func_check import ResponseChecker\nfrom utils.api_request import api_request\nfrom pymilvus import BulkInsertState\nfrom pymilvus.orm.role import Role\nfrom utils.util_log import test_log as log\n\nTIMEOUT = 20\n\n\nclass ApiUtilityWrapper:\n    \"\"\" Method of encapsulating utility files \"\"\"\n\n    ut = utility\n    role = None\n\n    def do_bulk_insert(self, collection_name, files=\"\", partition_name=None, timeout=None,\n                       using=\"default\", check_task=None, check_items=None, **kwargs):\n        working_tasks = self.get_bulk_insert_working_list()\n        log.info(f\"before bulk load, there are {len(working_tasks)} working tasks\")\n        log.info(f\"files to load: {files}\")\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.do_bulk_insert, collection_name,\n                                    files, partition_name, timeout, using], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name, using=using).run()\n        time.sleep(1)\n        working_tasks = self.get_bulk_insert_working_list()\n        log.info(f\"after bulk load, there are {len(working_tasks)} working tasks\")\n        return res, check_result\n\n    def get_bulk_insert_state(self, task_id, timeout=None, using=\"default\", check_task=None, check_items=None,\n                              **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.get_bulk_insert_state, task_id, timeout, using], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       task_id=task_id, using=using).run()\n        return res, check_result\n\n    def list_bulk_insert_tasks(self, limit=0, collection_name=None, timeout=None, using=\"default\", check_task=None,\n                               check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.list_bulk_insert_tasks, limit, collection_name, timeout, using], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       limit=limit, collection_name=collection_name, using=using).run()\n        return res, check_result\n\n    def get_bulk_insert_pending_list(self):\n        tasks = {}\n        for task in self.ut.list_bulk_insert_tasks():\n            if task.state == BulkInsertState.ImportPending:\n                tasks[task.task_id] = task\n        return tasks\n\n    def get_bulk_insert_working_list(self):\n        tasks = {}\n        for task in self.ut.list_bulk_insert_tasks():\n            if task.state in [BulkInsertState.ImportStarted]:\n                tasks[task.task_id] = task\n        return tasks\n\n    def list_all_bulk_insert_tasks(self, limit=0):\n        tasks, _ = self.list_bulk_insert_tasks(limit=limit)\n        pending = 0\n        started = 0\n        persisted = 0\n        completed = 0\n        failed = 0\n        failed_and_cleaned = 0\n        unknown = 0\n        for task in tasks:\n            print(task)\n            if task.state == BulkInsertState.ImportPending:\n                pending = pending + 1\n            elif task.state == BulkInsertState.ImportStarted:\n                started = started + 1\n            elif task.state == BulkInsertState.ImportPersisted:\n                persisted = persisted + 1\n            elif task.state == BulkInsertState.ImportCompleted:\n                completed = completed + 1\n            elif task.state == BulkInsertState.ImportFailed:\n                failed = failed + 1\n            elif task.state == BulkInsertState.ImportFailedAndCleaned:\n                failed_and_cleaned = failed_and_cleaned + 1\n            else:\n                unknown = unknown + 1\n\n        log.info(\"There are\", len(tasks), \"bulkload tasks.\", pending, \"pending,\", started, \"started,\", persisted,\n                 \"persisted,\", completed, \"completed,\", failed, \"failed\", failed_and_cleaned, \"failed_and_cleaned\",\n                 unknown, \"unknown\")\n\n    def wait_for_bulk_insert_tasks_completed(self, task_ids, target_state=BulkInsertState.ImportCompleted,\n                                             timeout=None, using=\"default\", **kwargs):\n        tasks_state_distribution = {\n            \"success\": set(),\n            \"failed\": set(),\n            \"in_progress\": set()\n        }\n        tasks_state = {}\n        if timeout is not None:\n            task_timeout = timeout\n        else:\n            task_timeout = TIMEOUT\n        start = time.time()\n        end = time.time()\n        log.info(f\"wait bulk load timeout is {task_timeout}\")\n        pending_tasks = self.get_bulk_insert_pending_list()\n        log.info(f\"before waiting, there are {len(pending_tasks)} pending tasks\")\n        while len(tasks_state_distribution[\"success\"]) + len(tasks_state_distribution[\"failed\"]) < len(\n                task_ids) and end - start <= task_timeout:\n            time.sleep(2)\n\n            for task_id in task_ids:\n                if task_id in tasks_state_distribution[\"success\"] or task_id in tasks_state_distribution[\"failed\"]:\n                    continue\n                else:\n                    state, _ = self.get_bulk_insert_state(task_id, task_timeout, using, **kwargs)\n                    tasks_state[task_id] = state\n\n                    if target_state == BulkInsertState.ImportPersisted:\n                        if state.state in [BulkInsertState.ImportPersisted, BulkInsertState.ImportCompleted]:\n                            if task_id in tasks_state_distribution[\"in_progress\"]:\n                                tasks_state_distribution[\"in_progress\"].remove(task_id)\n                            tasks_state_distribution[\"success\"].add(task_id)\n                        elif state.state in [BulkInsertState.ImportPending, BulkInsertState.ImportStarted]:\n                            tasks_state_distribution[\"in_progress\"].add(task_id)\n                        else:\n                            tasks_state_distribution[\"failed\"].add(task_id)\n\n                    if target_state == BulkInsertState.ImportCompleted:\n                        if state.state in [BulkInsertState.ImportCompleted]:\n                            if task_id in tasks_state_distribution[\"in_progress\"]:\n                                tasks_state_distribution[\"in_progress\"].remove(task_id)\n                            tasks_state_distribution[\"success\"].add(task_id)\n                        elif state.state in [BulkInsertState.ImportPending, BulkInsertState.ImportStarted,\n                                             BulkInsertState.ImportPersisted]:\n                            tasks_state_distribution[\"in_progress\"].add(task_id)\n                        else:\n                            tasks_state_distribution[\"failed\"].add(task_id)\n\n            end = time.time()\n        pending_tasks = self.get_bulk_insert_pending_list()\n        log.info(f\"after waiting, there are {len(pending_tasks)} pending tasks\")\n        log.info(f\"task state distribution: {tasks_state_distribution}\")\n        log.info(tasks_state)\n        if len(tasks_state_distribution[\"success\"]) == len(task_ids):\n            log.info(f\"wait for bulk load tasks completed successfully, cost time: {end - start}\")\n            return True, tasks_state\n        else:\n            log.info(f\"wait for bulk load tasks completed failed, cost time: {end - start}\")\n            return False, tasks_state\n\n    def wait_all_pending_tasks_finished(self):\n        task_states_map = {}\n        all_tasks, _ = self.list_bulk_insert_tasks()\n        # log.info(f\"all tasks: {all_tasks}\")\n        for task in all_tasks:\n            if task.state in [BulkInsertState.ImportStarted, BulkInsertState.ImportPersisted]:\n                task_states_map[task.task_id] = task.state\n\n        log.info(f\"current tasks states: {task_states_map}\")\n        pending_tasks = self.get_bulk_insert_pending_list()\n        working_tasks = self.get_bulk_insert_working_list()\n        log.info(\n            f\"in the start, there are {len(working_tasks)} working tasks, {working_tasks} {len(pending_tasks)} pending tasks, {pending_tasks}\")\n        time_cnt = 0\n        pending_task_ids = set()\n        while len(pending_tasks) > 0:\n            time.sleep(5)\n            time_cnt += 5\n            pending_tasks = self.get_bulk_insert_pending_list()\n            working_tasks = self.get_bulk_insert_working_list()\n            cur_pending_task_ids = []\n            for task_id in pending_tasks.keys():\n                cur_pending_task_ids.append(task_id)\n                pending_task_ids.add(task_id)\n            log.info(\n                f\"after {time_cnt}, there are {len(working_tasks)} working tasks, {len(pending_tasks)} pending tasks\")\n            log.debug(f\"total pending tasks: {pending_task_ids} current pending tasks: {cur_pending_task_ids}\")\n        log.info(f\"after {time_cnt}, all pending tasks are finished\")\n        all_tasks, _ = self.list_bulk_insert_tasks()\n        for task in all_tasks:\n            if task.task_id in pending_task_ids:\n                log.info(f\"task {task.task_id} state transfer from pending to {task.state_name}\")\n\n    def wait_index_build_completed(self, collection_name, timeout=None):\n        start = time.time()\n        if timeout is not None:\n            task_timeout = timeout\n        else:\n            task_timeout = TIMEOUT\n        end = time.time()\n        while end - start <= task_timeout:\n            time.sleep(0.5)\n            index_states, _ = self.index_building_progress(collection_name)\n            log.debug(f\"index states: {index_states}\")\n            if index_states[\"total_rows\"] == index_states[\"indexed_rows\"]:\n                log.info(f\"index build completed\")\n                return True\n            end = time.time()\n        log.info(f\"index build timeout\")\n        return False\n\n    def get_query_segment_info(self, collection_name, timeout=None, using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.get_query_segment_info, collection_name, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name, timeout=timeout, using=using).run()\n        return res, check_result\n\n    def loading_progress(self, collection_name, partition_names=None,\n                         using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.loading_progress, collection_name, partition_names, using])\n        check_result = ResponseChecker(res, func_name, check_task,\n                                       check_items, is_succ, collection_name=collection_name,\n                                       partition_names=partition_names, using=using).run()\n        return res, check_result\n\n    def load_state(self, collection_name, partition_names=None, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.load_state, collection_name, partition_names, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name, partition_names=partition_names,\n                                       using=using).run()\n        return res, check_result\n\n    def wait_for_loading_complete(self, collection_name, partition_names=None, timeout=None, using=\"default\",\n                                  check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.wait_for_loading_complete, collection_name,\n                                    partition_names, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name, partition_names=partition_names,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def index_building_progress(self, collection_name, index_name=\"\", using=\"default\",\n                                check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.index_building_progress, collection_name, index_name, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name, index_name=index_name,\n                                       using=using).run()\n        return res, check_result\n\n    def wait_for_index_building_complete(self, collection_name, index_name=\"\", timeout=None, using=\"default\",\n                                         check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.wait_for_index_building_complete, collection_name,\n                                    index_name, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name, index_name=index_name,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def has_collection(self, collection_name, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.has_collection, collection_name, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name, using=using).run()\n        return res, check_result\n\n    def has_partition(self, collection_name, partition_name, using=\"default\",\n                      check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.has_partition, collection_name, partition_name, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name,\n                                       partition_name=partition_name, using=using).run()\n        return res, check_result\n\n    def drop_collection(self, collection_name, timeout=None, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.drop_collection, collection_name, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       collection_name=collection_name,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def list_collections(self, timeout=None, using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.list_collections, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def calc_distance(self, vectors_left, vectors_right, params=None, timeout=None,\n                      using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.calc_distance, vectors_left, vectors_right,\n                                    params, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def load_balance(self, collection_name, src_node_id, dst_node_ids, sealed_segment_ids, timeout=None,\n                     using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.load_balance, collection_name, src_node_id, dst_node_ids,\n                                    sealed_segment_ids, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def create_alias(self, collection_name, alias, timeout=None, using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.create_alias, collection_name, alias, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def drop_alias(self, alias, timeout=None, using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.drop_alias, alias, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def alter_alias(self, collection_name, alias, timeout=None, using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.alter_alias, collection_name, alias, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def list_aliases(self, collection_name, timeout=None, using=\"default\", check_task=None, check_items=None):\n        timeout = TIMEOUT if timeout is None else timeout\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.list_aliases, collection_name, timeout, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       timeout=timeout, using=using).run()\n        return res, check_result\n\n    def mkts_from_datetime(self, d_time=None, milliseconds=0., delta=None):\n        d_time = datetime.now() if d_time is None else d_time\n        res, _ = api_request([self.ut.mkts_from_datetime, d_time, milliseconds, delta])\n        return res\n\n    def mkts_from_hybridts(self, hybridts, milliseconds=0., delta=None):\n        res, _ = api_request([self.ut.mkts_from_hybridts, hybridts, milliseconds, delta])\n        return res\n\n    def create_user(self, user, password, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.create_user, user, password, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ, using=using).run()\n        return res, check_result\n\n    def list_usernames(self, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.list_usernames, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       using=using).run()\n        return res, check_result\n\n    def reset_password(self, user, old_password, new_password, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.reset_password, user, old_password, new_password])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ).run()\n        return res, check_result\n\n    def update_password(self, user, old_password, new_password, check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.update_password, user, old_password, new_password])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ).run()\n        return res, check_result\n\n    def delete_user(self, user, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.delete_user, user, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       using=using).run()\n        return res, check_result\n\n    def list_roles(self, include_user_info: bool, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.list_roles, include_user_info, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ, using=using).run()\n        return res, check_result\n\n    def list_user(self, username: str, include_role_info: bool, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.list_user, username, include_role_info, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ, using=using).run()\n        return res, check_result\n\n    def list_users(self, include_role_info: bool, using=\"default\", check_task=None, check_items=None):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.ut.list_users, include_role_info, using])\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ, using=using).run()\n        return res, check_result\n\n    def init_role(self, name, using=\"default\", check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([Role, name, using], **kwargs)\n        self.role = res if is_succ else None\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       name=name, **kwargs).run()\n        return res, check_result\n\n    def create_role(self, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, is_succ = api_request([self.role.create], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, is_succ,\n                                       **kwargs).run()\n        return res, check_result\n\n    def role_drop(self, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.drop], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def role_is_exist(self, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.is_exist], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def role_add_user(self, username: str, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.add_user, username], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def role_remove_user(self, username: str, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.remove_user, username], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def role_get_users(self, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.get_users], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    @property\n    def role_name(self):\n        return self.role.name\n\n    def role_grant(self, object: str, object_name: str, privilege: str, db_name: str = \"\", check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.grant, object, object_name, privilege, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def role_revoke(self, object: str, object_name: str, privilege: str, db_name: str = \"\", check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.revoke, object, object_name, privilege, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def role_list_grant(self, object: str, object_name: str, db_name: str = \"\", check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.list_grant, object, object_name, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def role_list_grants(self, db_name: str = \"\", check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.role.list_grants, db_name], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def create_resource_group(self, name, using=\"default\", timeout=None, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.create_resource_group, name, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def drop_resource_group(self, name, using=\"default\", timeout=None, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.drop_resource_group, name, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def list_resource_groups(self, using=\"default\", timeout=None, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.list_resource_groups, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def describe_resource_group(self, name, using=\"default\", timeout=None, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.describe_resource_group, name, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def transfer_node(self, source, target, num_node, using=\"default\", timeout=None, check_task=None, check_items=None,\n                      **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.transfer_node, source, target, num_node, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def transfer_replica(self, source, target, collection_name, num_replica, using=\"default\", timeout=None,\n                         check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request(\n            [self.ut.transfer_replica, source, target, collection_name, num_replica, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check, **kwargs).run()\n        return res, check_result\n\n    def rename_collection(self, old_collection_name, new_collection_name, new_db_name=\"\", timeout=None,\n                          check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.rename_collection, old_collection_name, new_collection_name, new_db_name,\n                                  timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       old_collection_name=old_collection_name, new_collection_name=new_collection_name,\n                                       new_db_name=new_db_name, timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    def flush_all(self, using=\"default\", timeout=None, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.flush_all, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       using=using, timeout=timeout, **kwargs).run()\n        return res, check_result\n\n    def get_server_type(self, using=\"default\", check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.get_server_type, using], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       using=using, **kwargs).run()\n        return res, check_result\n\n    def list_indexes(self, collection_name, using=\"default\", timeout=None, check_task=None, check_items=None, **kwargs):\n        func_name = sys._getframe().f_code.co_name\n        res, check = api_request([self.ut.list_indexes, collection_name, using, timeout], **kwargs)\n        check_result = ResponseChecker(res, func_name, check_task, check_items, check,\n                                       collection_name=collection_name, using=using, timeout=timeout, **kwargs).run()\n        return res, check_result\n"
  },
  {
    "path": "tests/check/func_check.py",
    "content": "from pymilvus.client.types import CompactionPlans\nfrom pymilvus import Role\n\nfrom utils.util_log import test_log as log\nfrom common import common_type as ct\nfrom common import common_func as cf\nfrom common.common_type import CheckTasks, Connect_Object_Name\n# from common.code_mapping import ErrorCode, ErrorMessage\nfrom pymilvus import Collection, Partition, ResourceGroupInfo\nfrom utils.api_request import Error\nimport check.param_check as pc\n\n\nclass ResponseChecker:\n    def __init__(self, response, func_name, check_task, check_items, is_succ=True, **kwargs):\n        self.response = response  # response of api request\n        self.func_name = func_name  # api function name\n        self.check_task = check_task  # task to check response of the api request\n        self.check_items = check_items  # check items and expectations that to be checked in check task\n        self.succ = is_succ  # api responses successful or not\n\n        self.kwargs_dict = {}  # not used for now, just for extension\n        for key, value in kwargs.items():\n            self.kwargs_dict[key] = value\n        self.keys = self.kwargs_dict.keys()\n\n    def run(self):\n        \"\"\"\n        Method: start response checking for milvus API call\n        \"\"\"\n        result = True\n        if self.check_task is None:\n            # Interface normal return check\n            result = self.assert_succ(self.succ, True)\n\n        elif self.check_task == CheckTasks.err_res:\n            # Interface return error code and error message check\n            result = self.assert_exception(self.response, self.succ, self.check_items)\n\n        elif self.check_task == CheckTasks.check_nothing:\n            return self.succ\n\n        elif self.check_task == CheckTasks.ccr:\n            # Connection interface response check\n            result = self.check_value_equal(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_collection_property:\n            # Collection interface response check\n            result = self.check_collection_property(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_partition_property:\n            # Partition interface response check\n            result = self.check_partition_property(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_search_results:\n            # Search interface of collection and partition that response check\n            result = self.check_search_results(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_search_iterator:\n            # Search iterator interface of collection and partition that response check\n            result = self.check_search_iterator(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_query_results:\n            # Query interface of collection and partition that response check\n            result = self.check_query_results(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_query_iterator:\n            # query iterator interface of collection and partition that response check\n            result = self.check_query_iterator(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_query_empty:\n            result = self.check_query_empty(self.response, self.func_name)\n\n        elif self.check_task == CheckTasks.check_query_empty:\n            result = self.check_query_not_empty(self.response, self.func_name)\n\n        elif self.check_task == CheckTasks.check_distance:\n            # Calculate distance interface that response check\n            result = self.check_distance(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_delete_compact:\n            result = self.check_delete_compact_plan(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_merge_compact:\n            result = self.check_merge_compact_plan(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_role_property:\n            # Collection interface response check\n            result = self.check_role_property(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_permission_deny:\n            # Collection interface response check\n            result = self.check_permission_deny(self.response, self.succ)\n\n        elif self.check_task == CheckTasks.check_auth_failure:\n            # connection interface response check\n            result = self.check_auth_failure(self.response, self.succ)\n\n        elif self.check_task == CheckTasks.check_rg_property:\n            # describe resource group interface response check\n            result = self.check_rg_property(self.response, self.func_name, self.check_items)\n\n        elif self.check_task == CheckTasks.check_describe_collection_property:\n            # describe collection interface(high level api) response check\n            result = self.check_describe_collection_property(self.response, self.func_name, self.check_items)\n\n        # Add check_items here if something new need verify\n\n        return result\n\n    def assert_succ(self, actual, expect):\n        assert actual is expect, f\"Response of API {self.func_name} expect {expect}, but got {actual}\"\n        return True\n\n    def assert_exception(self, res, actual=True, error_dict=None):\n        assert actual is False\n        assert len(error_dict) > 0\n        if isinstance(res, Error):\n            error_code = error_dict[ct.err_code]\n            assert res.code == error_code or error_dict[ct.err_msg] in res.message, (\n                f\"Response of API {self.func_name} \"\n                f\"expect get error code {error_dict[ct.err_code]} or error message {error_dict[ct.err_code]}, \"\n                f\"but got {res.code} {res.message}\")\n\n        else:\n            log.error(\"[CheckFunc] Response of API is not an error: %s\" % str(res))\n            assert False, (f\"Response of API expect get error code {error_dict[ct.err_code]} or \"\n                           f\"error message {error_dict[ct.err_code]}\"\n                           f\"but success\")\n        return True\n\n    @staticmethod\n    def check_value_equal(res, func_name, params):\n        \"\"\" check response of connection interface that result is normal \"\"\"\n\n        if func_name == \"list_connections\":\n            if not isinstance(res, list):\n                log.error(\"[CheckFunc] Response of list_connections is not a list: %s\" % str(res))\n                assert False\n\n            list_content = params.get(ct.list_content, None)\n            if not isinstance(list_content, list):\n                log.error(\"[CheckFunc] Check param of list_content is not a list: %s\" % str(list_content))\n                assert False\n\n            new_res = pc.get_connect_object_name(res)\n            assert pc.list_equal_check(new_res, list_content)\n\n        if func_name == \"get_connection_addr\":\n            dict_content = params.get(ct.dict_content, None)\n            assert pc.dict_equal_check(res, dict_content)\n\n        if func_name == \"connect\":\n            type_name = type(res).__name__\n            assert not type_name.lower().__contains__(\"error\")\n\n        if func_name == \"has_connection\":\n            value_content = params.get(ct.value_content, False)\n            res_obj = res if res is not None else False\n            assert res_obj == value_content\n\n        return True\n\n    @staticmethod\n    def check_collection_property(res, func_name, check_items):\n        \"\"\"\n        According to the check_items to check collection properties of res, which return from func_name\n        :param res: actual response of init collection\n        :type res: Collection\n\n        :param func_name: init collection API\n        :type func_name: str\n\n        :param check_items: which items expected to be checked, including name, schema, num_entities, primary\n        :type check_items: dict, {check_key: expected_value}\n        \"\"\"\n        exp_func_name = \"init_collection\"\n        exp_func_name_2 = \"construct_from_dataframe\"\n        if func_name != exp_func_name and func_name != exp_func_name_2:\n            log.warning(\"The function name is {} rather than {}\".format(func_name, exp_func_name))\n        if isinstance(res, Collection):\n            collection = res\n        elif isinstance(res, tuple):\n            collection = res[0]\n            log.debug(collection.schema)\n        else:\n            raise Exception(f\"The result to check isn't collection type object: {res}\")\n        if len(check_items) == 0:\n            raise Exception(\"No expect values found in the check task\")\n        if check_items.get(\"name\", None):\n            assert collection.name == check_items.get(\"name\")\n        if check_items.get(\"schema\", None):\n            assert collection.schema == check_items.get(\"schema\")\n        if check_items.get(\"num_entities\", None):\n            if check_items.get(\"num_entities\") == 0:\n                assert collection.is_empty\n            assert collection.num_entities == check_items.get(\"num_entities\")\n        if check_items.get(\"primary\", None):\n            assert collection.primary_field.name == check_items.get(\"primary\")\n        return True\n\n    @staticmethod\n    def check_describe_collection_property(res, func_name, check_items):\n        \"\"\"\n        According to the check_items to check collection properties of res, which return from func_name\n        :param res: actual response of init collection\n        :type res: Collection\n\n        :param func_name: init collection API\n        :type func_name: str\n\n        :param check_items: which items expected to be checked, including name, schema, num_entities, primary\n        :type check_items: dict, {check_key: expected_value}\n        \"\"\"\n        exp_func_name = \"describe_collection\"\n        if func_name != exp_func_name:\n            log.warning(\"The function name is {} rather than {}\".format(func_name, exp_func_name))\n        if len(check_items) == 0:\n            raise Exception(\"No expect values found in the check task\")\n        if check_items.get(\"collection_name\", None) is not None:\n            assert res[\"collection_name\"] == check_items.get(\"collection_name\")\n        if check_items.get(\"auto_id\", False):\n            assert res[\"auto_id\"] == check_items.get(\"auto_id\")\n        if check_items.get(\"enable_dynamic_field\", True):\n            assert res[\"enable_dynamic_field\"] == check_items.get(\"enable_dynamic_field\", True)\n        if check_items.get(\"id_name\", \"id\"):\n            assert res[\"fields\"][0][\"name\"] == check_items.get(\"id_name\", \"id\")\n        if check_items.get(\"vector_name\", \"vector\"):\n            assert res[\"fields\"][1][\"name\"] == check_items.get(\"vector_name\", \"vector\")\n        if check_items.get(\"dim\", None) is not None:\n            assert res[\"fields\"][1][\"params\"][\"dim\"] == check_items.get(\"dim\")\n        assert res[\"fields\"][0][\"is_primary\"] is True\n        assert res[\"fields\"][0][\"field_id\"] == 100 and (res[\"fields\"][0][\"type\"] == 5 or 21)\n        assert res[\"fields\"][1][\"field_id\"] == 101 and res[\"fields\"][1][\"type\"] == 101\n\n        return True\n\n    @staticmethod\n    def check_partition_property(partition, func_name, check_items):\n        exp_func_name = \"init_partition\"\n        if func_name != exp_func_name:\n            log.warning(\"The function name is {} rather than {}\".format(func_name, exp_func_name))\n        if not isinstance(partition, Partition):\n            raise Exception(\"The result to check isn't partition type object\")\n        if len(check_items) == 0:\n            raise Exception(\"No expect values found in the check task\")\n        if check_items.get(\"name\", None):\n            assert partition.name == check_items[\"name\"]\n        if check_items.get(\"description\", None):\n            assert partition.description == check_items[\"description\"]\n        if check_items.get(\"is_empty\", None):\n            assert partition.is_empty == check_items[\"is_empty\"]\n        if check_items.get(\"num_entities\", None):\n            assert partition.num_entities == check_items[\"num_entities\"]\n        return True\n\n    @staticmethod\n    def check_rg_property(rg, func_name, check_items):\n        exp_func_name = \"describe_resource_group\"\n        if func_name != exp_func_name:\n            log.warning(\"The function name is {} rather than {}\".format(func_name, exp_func_name))\n        if not isinstance(rg, ResourceGroupInfo):\n            raise Exception(\"The result to check isn't ResourceGroupInfo type object\")\n        if len(check_items) == 0:\n            raise Exception(\"No expect values found in the check task\")\n        if check_items.get(\"name\", None):\n            assert rg.name == check_items[\"name\"]\n        if check_items.get(\"capacity\", None):\n            assert rg.capacity == check_items[\"capacity\"]\n        if check_items.get(\"num_available_node\", None):\n            assert rg.num_available_node == check_items[\"num_available_node\"]\n        if check_items.get(\"num_loaded_replica\", None):\n            assert dict(rg.num_loaded_replica).items() >= check_items[\"num_loaded_replica\"].items()\n        if check_items.get(\"num_outgoing_node\", None):\n            assert dict(rg.num_outgoing_node).items() >= check_items[\"num_outgoing_node\"].items()\n        if check_items.get(\"num_incoming_node\", None):\n            assert dict(rg.num_incoming_node).items() >= check_items[\"num_incoming_node\"].items()\n        return True\n\n    @staticmethod\n    def check_search_results(search_res, func_name, check_items):\n        \"\"\"\n        target: check the search results\n        method: 1. check the query number\n                2. check the limit(topK) and ids\n                3. check the distance\n        expected: check the search is ok\n        \"\"\"\n        log.info(\"search_results_check: checking the searching results\")\n        if func_name != 'search' or func_name != 'hybrid_search':\n            log.warning(\"The function name is {} rather than {} or {}\".format(func_name, \"search\", \"hybrid_search\"))\n        if len(check_items) == 0:\n            raise Exception(\"No expect values found in the check task\")\n        if check_items.get(\"_async\", None):\n            if check_items[\"_async\"]:\n                search_res.done()\n                search_res = search_res.result()\n        if check_items.get(\"output_fields\", None):\n            assert set(search_res[0][0].entity.fields) == set(check_items[\"output_fields\"])\n            log.info('search_results_check: Output fields of query searched is correct')\n            if check_items.get(\"original_entities\", None):\n                original_entities = check_items[\"original_entities\"][0]\n                pc.output_field_value_check(search_res, original_entities)\n        if len(search_res) != check_items[\"nq\"]:\n            log.error(\"search_results_check: Numbers of query searched (%d) \"\n                      \"is not equal with expected (%d)\"\n                      % (len(search_res), check_items[\"nq\"]))\n            assert len(search_res) == check_items[\"nq\"]\n        else:\n            log.info(\"search_results_check: Numbers of query searched is correct\")\n        enable_milvus_client_api = check_items.get(\"enable_milvus_client_api\", False)\n        # log.debug(search_res)\n        for hits in search_res:\n            searched_original_vectors = []\n            ids = []\n            if enable_milvus_client_api:\n                for hit in hits:\n                    ids.append(hit['id'])\n            else:\n                ids = list(hits.ids)\n            if (len(hits) != check_items[\"limit\"]) \\\n                    or (len(ids) != check_items[\"limit\"]):\n                log.error(\"search_results_check: limit(topK) searched (%d) \"\n                          \"is not equal with expected (%d)\"\n                          % (len(hits), check_items[\"limit\"]))\n                assert len(hits) == check_items[\"limit\"]\n                assert len(ids) == check_items[\"limit\"]\n            else:\n                if check_items.get(\"ids\", None) is not None:\n                    ids_match = pc.list_contain_check(ids,\n                                                      list(check_items[\"ids\"]))\n                    if not ids_match:\n                        log.error(\"search_results_check: ids searched not match\")\n                        assert ids_match\n                elif check_items.get(\"metric\", None) is not None:\n                    if check_items.get(\"vector_nq\") is None:\n                        raise Exception(\"vector for searched (nq) is needed for distance check\")\n                    if check_items.get(\"original_vectors\") is None:\n                        raise Exception(\"inserted vectors are needed for distance check\")\n                    for id in hits.ids:\n                        searched_original_vectors.append(check_items[\"original_vectors\"][id])\n                    cf.compare_distance_vector_and_vector_list(check_items[\"vector_nq\"][i],\n                                                               searched_original_vectors,\n                                                               check_items[\"metric\"], hits.distances)\n                    log.info(\"search_results_check: Checked the distances for one nq: OK\")\n                else:\n                    pass  # just check nq and topk, not specific ids need check\n        log.info(\"search_results_check: limit (topK) and \"\n                 \"ids searched for %d queries are correct\" % len(search_res))\n\n        return True\n\n    @staticmethod\n    def check_search_iterator(search_res, func_name, check_items):\n        \"\"\"\n        target: check the search iterator results\n        method: 1. check the iterator number\n                2. check the limit(topK) and ids\n                3. check the distance\n        expected: check the search is ok\n        \"\"\"\n        log.info(\"search_iterator_results_check: checking the searching results\")\n        if func_name != 'search_iterator':\n            log.warning(\"The function name is {} rather than {}\".format(func_name, \"search_iterator\"))\n        search_iterator = search_res\n        pk_list = []\n        while True:\n            res = search_iterator.next()\n            if len(res) == 0:\n                log.info(\"search iteration finished, close\")\n                search_iterator.close()\n                break\n            if check_items.get(\"batch_size\", None):\n                assert len(res) <= check_items[\"batch_size\"]\n            if check_items.get(\"radius\", None):\n                for distance in res.distances():\n                    if check_items[\"metric_type\"] == \"L2\":\n                        assert distance < check_items[\"radius\"]\n                    else:\n                        assert distance > check_items[\"radius\"]\n            if check_items.get(\"range_filter\", None):\n                for distance in res.distances():\n                    if check_items[\"metric_type\"] == \"L2\":\n                        assert distance >= check_items[\"range_filter\"]\n                    else:\n                        assert distance <= check_items[\"range_filter\"]\n            pk_list.extend(res.ids())\n        assert len(pk_list) == len(set(pk_list))\n        log.info(\"check: total %d results\" % len(pk_list))\n\n        return True\n\n    @staticmethod\n    def check_query_results(query_res, func_name, check_items):\n        \"\"\"\n        According to the check_items to check actual query result, which return from func_name.\n\n        :param: query_res: A list that contains all results\n        :type: list\n\n        :param func_name: Query API name\n        :type func_name: str\n\n        :param check_items: The items expected to be checked, including exp_res, with_vec\n                            The type of exp_res value is as same as query_res\n                            The type of with_vec value is bool, True value means check vector field, False otherwise\n        :type check_items: dict\n        \"\"\"\n        if func_name != 'query':\n            log.warning(\"The function name is {} rather than {}\".format(func_name, \"query\"))\n        if not isinstance(query_res, list):\n            raise Exception(\"The query result to check isn't list type object\")\n        if len(check_items) == 0:\n            raise Exception(\"No expect values found in the check task\")\n        exp_res = check_items.get(\"exp_res\", None)\n        with_vec = check_items.get(\"with_vec\", False)\n        primary_field = check_items.get(\"primary_field\", None)\n        if exp_res is not None:\n            if isinstance(query_res, list):\n                assert pc.equal_entities_list(exp=exp_res, actual=query_res, primary_field=primary_field,\n                                              with_vec=with_vec)\n                return True\n            else:\n                log.error(f\"Query result {query_res} is not list\")\n                return False\n        log.warning(f'Expected query result is {exp_res}')\n\n    @staticmethod\n    def check_query_iterator(query_res, func_name, check_items):\n        \"\"\"\n        target: check the query results\n        method: 1. check the query number\n                2. check the limit(topK) and ids\n                3. check the distance\n        expected: check the search is ok\n        \"\"\"\n        log.info(\"query_iterator_results_check: checking the query results\")\n        if func_name != 'query_iterator':\n            log.warning(\"The function name is {} rather than {}\".format(func_name, \"query_iterator\"))\n        query_iterator = query_res\n        pk_list = []\n        while True:\n            res = query_iterator.next()\n            if len(res) == 0:\n                log.info(\"search iteration finished, close\")\n                query_iterator.close()\n                break\n            for i in range(len(res)):\n                pk_list.append(res[i][ct.default_int64_field_name])\n            if check_items.get(\"limit\", None):\n                assert len(res) <= check_items[\"limit\"]\n        assert len(pk_list) == len(set(pk_list))\n        if check_items.get(\"count\", None):\n            log.info(len(pk_list))\n            assert len(pk_list) == check_items[\"count\"]\n        if check_items.get(\"exp_ids\", None):\n            assert pk_list == check_items[\"exp_ids\"]\n        log.info(\"check: total %d results\" % len(pk_list))\n\n        return True\n\n    @staticmethod\n    def check_query_empty(query_res, func_name):\n        \"\"\"\n        Verify that the query result is empty\n\n        :param: query_res: A list that contains all results\n        :type: list\n\n        :param func_name: Query API name\n        :type func_name: str\n        \"\"\"\n        if func_name != 'query':\n            log.warning(\"The function name is {} rather than {}\".format(func_name, \"query\"))\n        if not isinstance(query_res, list):\n            raise Exception(\"The query result to check isn't list type object\")\n        assert len(query_res) == 0, \"Query result is not empty\"\n\n    @staticmethod\n    def check_query_not_empty(query_res, func_name):\n        \"\"\"\n        Verify that the query result is not empty\n\n        :param: query_res: A list that contains all results\n        :type: list\n\n        :param func_name: Query API name\n        :type func_name: str\n        \"\"\"\n        if func_name != 'query':\n            log.warning(\"The function name is {} rather than {}\".format(func_name, \"query\"))\n        if not isinstance(query_res, list):\n            raise Exception(\"The query result to check isn't list type object\")\n        assert len(query_res) > 0\n\n    @staticmethod\n    def check_distance(distance_res, func_name, check_items):\n        if func_name != 'calc_distance':\n            log.warning(\"The function name is {} rather than {}\".format(func_name, \"calc_distance\"))\n        if not isinstance(distance_res, list):\n            raise Exception(\"The distance result to check isn't list type object\")\n        if len(check_items) == 0:\n            raise Exception(\"No expect values found in the check task\")\n        vectors_l = check_items[\"vectors_l\"]\n        vectors_r = check_items[\"vectors_r\"]\n        metric = check_items.get(\"metric\", \"L2\")\n        sqrt = check_items.get(\"sqrt\", False)\n        cf.compare_distance_2d_vector(vectors_l, vectors_r,\n                                      distance_res,\n                                      metric, sqrt)\n\n        return True\n\n    @staticmethod\n    def check_delete_compact_plan(compaction_plans, func_name, check_items):\n        \"\"\"\n        Verify that the delete type compaction plan\n\n        :param: compaction_plans: A compaction plan\n        :type: CompactionPlans\n\n        :param func_name: get_compaction_plans API name\n        :type func_name: str\n\n        :param check_items: which items you wish to check\n                            plans_num represent the delete compact plans number\n        :type: dict\n        \"\"\"\n        to_check_func = 'get_compaction_plans'\n        if func_name != to_check_func:\n            log.warning(\"The function name is {} rather than {}\".format(func_name, to_check_func))\n        if not isinstance(compaction_plans, CompactionPlans):\n            raise Exception(\"The compaction_plans result to check isn't CompactionPlans type object\")\n\n        plans_num = check_items.get(\"plans_num\", 1)\n        assert len(compaction_plans.plans) == plans_num\n        for plan in compaction_plans.plans:\n            assert len(plan.sources) == 1\n            assert plan.sources[0] != plan.target\n\n    @staticmethod\n    def check_merge_compact_plan(compaction_plans, func_name, check_items):\n        \"\"\"\n        Verify that the merge type compaction plan\n\n        :param: compaction_plans: A compaction plan\n        :type: CompactionPlans\n\n        :param func_name: get_compaction_plans API name\n        :type func_name: str\n\n        :param check_items: which items you wish to check\n                            segment_num represent how many segments are expected to be merged, default is 2\n        :type: dict\n        \"\"\"\n        to_check_func = 'get_compaction_plans'\n        if func_name != to_check_func:\n            log.warning(\"The function name is {} rather than {}\".format(func_name, to_check_func))\n        if not isinstance(compaction_plans, CompactionPlans):\n            raise Exception(\"The compaction_plans result to check isn't CompactionPlans type object\")\n\n        segment_num = check_items.get(\"segment_num\", 2)\n        assert len(compaction_plans.plans) == 1\n        assert len(compaction_plans.plans[0].sources) == segment_num\n        assert compaction_plans.plans[0].target not in compaction_plans.plans[0].sources\n\n    @staticmethod\n    def check_role_property(role, func_name, check_items):\n        exp_func_name = \"create_role\"\n        if func_name != exp_func_name:\n            log.warning(\"The function name is {} rather than {}\".format(func_name, exp_func_name))\n        if not isinstance(role, Role):\n            raise Exception(\"The result to check isn't role type object\")\n        if check_items is None:\n            raise Exception(\"No expect values found in the check task\")\n        if check_items.get(\"name\", None):\n            assert role.name == check_items[\"name\"]\n        return True\n\n    @staticmethod\n    def check_permission_deny(res, actual=True):\n        assert actual is False\n        if isinstance(res, Error):\n            assert \"permission deny\" in res.message\n        else:\n            log.error(\"[CheckFunc] Response of API is not an error: %s\" % str(res))\n            assert False\n        return True\n\n    @staticmethod\n    def check_auth_failure(res, actual=True):\n        assert actual is False\n        if isinstance(res, Error):\n            assert \"auth\" in res.message\n        else:\n            log.error(\"[CheckFunc] Response of API is not an error: %s\" % str(res))\n            assert False\n        return True\n"
  },
  {
    "path": "tests/check/param_check.py",
    "content": "import sys\nimport operator\nfrom common import common_type as ct\n\nsys.path.append(\"..\")\nfrom utils.util_log import test_log as log\n\n\ndef ip_check(ip):\n    if ip == \"localhost\":\n        return True\n\n    if not isinstance(ip, str):\n        log.error(\"[IP_CHECK] IP(%s) is not a string.\" % ip)\n        return False\n\n    return True\n\n\ndef number_check(num):\n    if str(num).isdigit():\n        return True\n\n    else:\n        log.error(\"[NUMBER_CHECK] Number(%s) is not a numbers.\" % num)\n        return False\n\n\ndef exist_check(param, _list):\n    if param in _list:\n        return True\n\n    else:\n        log.error(\"[EXIST_CHECK] Param(%s) is not in (%s).\" % (param, _list))\n        return False\n\n\ndef dict_equal_check(dict1, dict2):\n    if not isinstance(dict1, dict) or not isinstance(dict2, dict):\n        log.error(\"[DICT_EQUAL_CHECK] Type of dict(%s) or dict(%s) is not a dict.\" % (str(dict1), str(dict2)))\n        return False\n    return operator.eq(dict1, dict2)\n\n\ndef list_de_duplication(_list):\n    if not isinstance(_list, list):\n        log.error(\"[LIST_DE_DUPLICATION] Type of list(%s) is not a list.\" % str(_list))\n        return _list\n\n    # de-duplication of _list\n    result = list(set(_list))\n\n    # Keep the order of the elements unchanged\n    result.sort(key=_list.index)\n\n    log.debug(\"[LIST_DE_DUPLICATION] %s after removing the duplicate elements, the list becomes %s\" % (\n        str(_list), str(result)))\n    return result\n\n\ndef list_equal_check(param1, param2):\n    check_result = True\n\n    if len(param1) == len(param1):\n        _list1 = list_de_duplication(param1)\n        _list2 = list_de_duplication(param2)\n\n        if len(_list1) == len(_list2):\n            for i in _list1:\n                if i not in _list2:\n                    check_result = False\n                    break\n        else:\n            check_result = False\n    else:\n        check_result = False\n\n    if check_result is False:\n        log.error(\"[LIST_EQUAL_CHECK] List(%s) and list(%s) are not equal.\" % (str(param1), str(param2)))\n\n    return check_result\n\n\ndef list_contain_check(sublist, superlist):\n    if not isinstance(sublist, list):\n        raise Exception(\"%s isn't list type\" % sublist)\n    if not isinstance(superlist, list):\n        raise Exception(\"%s isn't list type\" % superlist)\n\n    check_result = True\n    for i in sublist:\n        if i not in superlist:\n            check_result = False\n            break\n        else:\n            superlist.remove(i)\n    if not check_result:\n        log.error(\"list_contain_check: List(%s) does not contain list(%s)\"\n                  % (str(superlist), str(sublist)))\n\n    return check_result\n\n\ndef get_connect_object_name(_list):\n    \"\"\" get the name of the objects that returned by the connection \"\"\"\n    if not isinstance(_list, list):\n        log.error(\"[GET_CONNECT_OBJECT_NAME] Type of list(%s) is not a list.\" % str(_list))\n        return _list\n\n    new_list = []\n    for i in _list:\n        if not isinstance(i, tuple):\n            log.error(\"[GET_CONNECT_OBJECT_NAME] The element:%s of the list is not tuple, please check manually.\"\n                      % str(i))\n            return _list\n\n        if len(i) != 2:\n            log.error(\"[GET_CONNECT_OBJECT_NAME] The length of the tuple:%s is not equal to 2, please check manually.\"\n                      % str(i))\n            return _list\n\n        if i[1] is not None:\n            _obj_name = type(i[1]).__name__\n            new_list.append((i[0], _obj_name))\n        else:\n            new_list.append(i)\n\n    log.debug(\"[GET_CONNECT_OBJECT_NAME] list:%s is reset to list:%s\" % (str(_list), str(new_list)))\n    return new_list\n\n\ndef equal_entity(exp, actual):\n    \"\"\"\n    compare two entities containing vector field\n    {\"int64\": 0, \"float\": 0.0, \"float_vec\": [0.09111554112502457, ..., 0.08652634258062468]}\n    :param exp: exp entity\n    :param actual: actual entity\n    :return: bool\n    \"\"\"\n    assert actual.keys() == exp.keys()\n    for field, value in exp.items():\n        if isinstance(value, list):\n            assert len(actual[field]) == len(exp[field])\n            for i in range(0, len(exp[field]), 4):\n                assert abs(actual[field][i] - exp[field][i]) < ct.epsilon\n        else:\n            assert actual[field] == exp[field]\n    return True\n\n\ndef entity_in(entity, entities, primary_field):\n    \"\"\"\n    according to the primary key to judge entity in the entities list\n    :param entity: dict\n            {\"int\": 0, \"vec\": [0.999999, 0.111111]}\n    :param entities: list of dict\n            [{\"int\": 0, \"vec\": [0.999999, 0.111111]}, {\"int\": 1, \"vec\": [0.888888, 0.222222]}]\n    :param primary_field: collection primary field\n    :return: True or False\n    \"\"\"\n    primary_default = ct.default_int64_field_name\n    primary_field = primary_default if primary_field is None else primary_field\n    primary_key = entity.get(primary_field, None)\n    primary_keys = []\n    for e in entities:\n        primary_keys.append(e[primary_field])\n    if primary_key not in primary_keys:\n        return False\n    index = primary_keys.index(primary_key)\n    return equal_entity(entities[index], entity)\n\n\ndef remove_entity(entity, entities, primary_field):\n    \"\"\"\n    according to the primary key to remove an entity from an entities list\n    :param entity: dict\n            {\"int\": 0, \"vec\": [0.999999, 0.111111]}\n    :param entities: list of dict\n            [{\"int\": 0, \"vec\": [0.999999, 0.111111]}, {\"int\": 1, \"vec\": [0.888888, 0.222222]}]\n    :param primary_field: collection primary field\n    :return: entities of removed entity\n    \"\"\"\n    primary_default = ct.default_int64_field_name\n    primary_field = primary_default if primary_field is None else primary_field\n    primary_key = entity.get(primary_field, None)\n    primary_keys = []\n    for e in entities:\n        primary_keys.append(e[primary_field])\n    index = primary_keys.index(primary_key)\n    entities.pop(index)\n    return entities\n\n\ndef equal_entities_list(exp, actual, primary_field, with_vec=False):\n    \"\"\"\n    compare two entities lists in inconsistent order\n    :param with_vec: whether entities with vec field\n    :param exp: exp entities list, list of dict\n    :param actual: actual entities list, list of dict\n    :return: True or False\n    example:\n    exp = [{\"int\": 0, \"vec\": [0.999999, 0.111111]}, {\"int\": 1, \"vec\": [0.888888, 0.222222]}]\n    actual = [{\"int\": 1, \"vec\": [0.888888, 0.222222]}, {\"int\": 0, \"vec\": [0.999999, 0.111111]}]\n    exp = actual\n    \"\"\"\n    exp = exp.copy()\n    if len(exp) != len(actual):\n        return False\n\n    if with_vec:\n        for a in actual:\n            # if vec field returned in query res\n            if entity_in(a, exp, primary_field):\n                try:\n                    # if vec field returned in query res\n                    remove_entity(a, exp, primary_field)\n                except Exception as ex:\n                    log.error(ex)\n    else:\n        for a in actual:\n            if a in exp:\n                try:\n                    exp.remove(a)\n                except Exception as ex:\n                    log.error(ex)\n    return True if len(exp) == 0 else False\n\n\ndef output_field_value_check(search_res, original):\n    \"\"\"\n    check if the value of output fields is correct\n    :param search_res: the search result of specific output fields\n    :param original: the data in the collection\n    :return: True or False\n    \"\"\"\n    limit = len(search_res[0])\n    for i in range(limit):\n        entity = eval(str(search_res[0][i]).split('entity: ', 1)[1])\n        _id = search_res[0][i].id\n        for field in entity.keys():\n            if isinstance(entity[field], list):\n                for order in range(0, len(entity[field]), 4):\n                    assert abs(original[field][_id][order] - entity[field][order]) < ct.epsilon\n            else:\n                num = original[original[ct.default_int64_field_name] == _id].index.to_list()[0]\n                assert original[field][num] == entity[field]\n\n    return True\n"
  },
  {
    "path": "tests/common/bulk_insert_data.py",
    "content": "import copy\nimport json\nimport os\nimport time\n\nimport numpy as np\nimport jax.numpy as jnp\nimport pandas as pd\nimport random\nfrom faker import Faker\nfrom sklearn import preprocessing\nfrom common.common_func import gen_unique_str\nfrom common.minio_comm import copy_files_to_minio\nfrom utils.util_log import test_log as log\n\ndata_source = \"/tmp/bulk_insert_data\"\nfake = Faker()\nBINARY = \"binary\"\nFLOAT = \"float\"\n\n\nclass DataField:\n    pk_field = \"uid\"\n    vec_field = \"vectors\"\n    float_vec_field = \"float_vectors\"\n    image_float_vec_field = \"image_float_vec_field\"\n    text_float_vec_field = \"text_float_vec_field\"\n    binary_vec_field = \"binary_vec_field\"\n    bf16_vec_field = \"bf16_vec_field\"\n    fp16_vec_field = \"fp16_vec_field\"\n    int_field = \"int_scalar\"\n    string_field = \"string_scalar\"\n    bool_field = \"bool_scalar\"\n    float_field = \"float_scalar\"\n    double_field = \"double_scalar\"\n    json_field = \"json\"\n    array_bool_field = \"array_bool\"\n    array_int_field = \"array_int\"\n    array_float_field = \"array_float\"\n    array_string_field = \"array_string\"\n\n\nclass DataErrorType:\n    one_entity_wrong_dim = \"one_entity_wrong_dim\"\n    str_on_int_pk = \"str_on_int_pk\"\n    int_on_float_scalar = \"int_on_float_scalar\"\n    float_on_int_pk = \"float_on_int_pk\"\n    typo_on_bool = \"typo_on_bool\"\n    str_on_float_scalar = \"str_on_float_scalar\"\n    str_on_vector_field = \"str_on_vector_field\"\n    empty_array_field = \"empty_array_field\"\n    mismatch_type_array_field = \"mismatch_type_array_field\"\n\n\ndef gen_file_prefix(is_row_based=True, auto_id=True, prefix=\"\"):\n    if is_row_based:\n        if auto_id:\n            return f\"{prefix}_row_auto\"\n        else:\n            return f\"{prefix}_row_cust\"\n    else:\n        if auto_id:\n            return f\"{prefix}_col_auto\"\n        else:\n            return f\"{prefix}_col_cust\"\n\n\ndef entity_suffix(rows):\n    if rows // 1000000 > 0:\n        suffix = f\"{rows // 1000000}m\"\n    elif rows // 1000 > 0:\n        suffix = f\"{rows // 1000}k\"\n    else:\n        suffix = f\"{rows}\"\n    return suffix\n\n\ndef gen_float_vectors(nb, dim):\n    vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]\n    vectors = preprocessing.normalize(vectors, axis=1, norm='l2')\n    return vectors.tolist()\n\n\ndef gen_str_invalid_vectors(nb, dim):\n    vectors = [[str(gen_unique_str()) for _ in range(dim)] for _ in range(nb)]\n    return vectors\n\n\ndef gen_binary_vectors(nb, dim):\n    # binary: each int presents 8 dimension\n    # so if binary vector dimension is 16，use [x, y], which x and y could be any int between 0 and 255\n    vectors = [[random.randint(0, 255) for _ in range(dim)] for _ in range(nb)]\n    return vectors\n\n\ndef gen_fp16_vectors(num, dim):\n    \"\"\"\n    generate float16 vector data\n    raw_vectors : the vectors\n    fp16_vectors: the bytes used for insert\n    return: raw_vectors and fp16_vectors\n    \"\"\"\n    raw_vectors = []\n    fp16_vectors = []\n    for _ in range(num):\n        raw_vector = [random.random() for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        fp16_vector = np.array(raw_vector, dtype=np.float16).view(np.uint8).tolist()\n        fp16_vectors.append(fp16_vector)\n\n    return raw_vectors, fp16_vectors\n\n\ndef gen_bf16_vectors(num, dim):\n    \"\"\"\n    generate brain float16 vector data\n    raw_vectors : the vectors\n    bf16_vectors: the bytes used for insert\n    return: raw_vectors and bf16_vectors\n    \"\"\"\n    raw_vectors = []\n    bf16_vectors = []\n    for _ in range(num):\n        raw_vector = [random.random() for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        bf16_vector = np.array(jnp.array(raw_vector, dtype=jnp.bfloat16)).view(np.uint8).tolist()\n        bf16_vectors.append(bf16_vector)\n\n    return raw_vectors, bf16_vectors\n\n\ndef gen_row_based_json_file(row_file, str_pk, data_fields, float_vect,\n                            rows, dim, start_uid=0, err_type=\"\", enable_dynamic_field=False,  **kwargs):\n\n    if err_type == DataErrorType.str_on_int_pk:\n        str_pk = True\n    if err_type in [DataErrorType.one_entity_wrong_dim, DataErrorType.str_on_vector_field]:\n        wrong_dim = dim + 8     # add 8 to compatible with binary vectors\n        wrong_row = kwargs.get(\"wrong_position\", start_uid)\n\n    with open(row_file, \"w\") as f:\n        f.write(\"{\")\n        f.write(\"\\n\")\n        f.write('\"rows\":[')\n        f.write(\"\\n\")\n        for i in range(rows):\n            if i > 0:\n                f.write(\",\")\n                f.write(\"\\n\")\n\n            # scalar fields\n            f.write('{')\n            for j in range(len(data_fields)):\n                data_field = data_fields[j]\n                if data_field == DataField.pk_field:\n                    if str_pk:\n                        line = '\"uid\":\"' + str(gen_unique_str()) + '\"'\n                        f.write(line)\n                        # f.write('\"uid\":\"' + str(gen_unique_str()) + '\"')\n                    else:\n                        if err_type == DataErrorType.float_on_int_pk:\n                            f.write('\"uid\":' + str(i + start_uid + random.random()) + '')\n                        else:\n                            f.write('\"uid\":' + str(i + start_uid) + '')\n                if data_field == DataField.int_field:\n                    if DataField.pk_field in data_fields:\n                        # if not auto_id, use the same value as pk to check the query results later\n                        f.write('\"int_scalar\":' + str(i + start_uid) + '')\n                    else:\n                        line = '\"int_scalar\":' + str(random.randint(-999999, 9999999)) + ''\n                        f.write(line)\n                if data_field == DataField.float_field:\n                    if err_type == DataErrorType.int_on_float_scalar:\n                        f.write('\"float_scalar\":' + str(random.randint(-999999, 9999999)) + '')\n                    elif err_type == DataErrorType.str_on_float_scalar:\n                        f.write('\"float_scalar\":\"' + str(gen_unique_str()) + '\"')\n                    else:\n                        line = '\"float_scalar\":' + str(random.random()) + ''\n                        f.write(line)\n                if data_field == DataField.double_field:\n                    if err_type == DataErrorType.int_on_float_scalar:\n                        f.write('\"double_scalar\":' + str(random.randint(-999999, 9999999)) + '')\n                    elif err_type == DataErrorType.str_on_float_scalar:\n                        f.write('\"double_scalar\":\"' + str(gen_unique_str()) + '\"')\n                    else:\n                        line = '\"double_scalar\":' + str(random.random()) + ''\n                        f.write(line)\n                if data_field == DataField.string_field:\n                    f.write('\"string_scalar\":\"' + str(gen_unique_str()) + '\"')\n                if data_field == DataField.bool_field:\n                    if err_type == DataErrorType.typo_on_bool:\n                        f.write('\"bool_scalar\":' + str(random.choice([\"True\", \"False\", \"TRUE\", \"FALSE\", \"0\", \"1\"])) + '')\n                    else:\n                        f.write('\"bool_scalar\":' + str(random.choice([\"true\", \"false\"])) + '')\n                if data_field == DataField.json_field:\n                    data = {\n                        gen_unique_str(): random.randint(-999999, 9999999),\n                    }\n                    f.write('\"json\":' + json.dumps(data) + '')\n                if data_field == DataField.array_bool_field:\n                    if err_type == DataErrorType.empty_array_field:\n                        f.write('\"array_bool\":[]')\n                    elif err_type == DataErrorType.mismatch_type_array_field:\n                        f.write('\"array_bool\": \"mistype\"')\n                    else:\n\n                        f.write('\"array_bool\":[' + str(random.choice([\"true\", \"false\"])) + ',' + str(random.choice([\"true\", \"false\"])) + ']')\n                if data_field == DataField.array_int_field:\n                    if err_type == DataErrorType.empty_array_field:\n                        f.write('\"array_int\":[]')\n                    elif err_type == DataErrorType.mismatch_type_array_field:\n                        f.write('\"array_int\": \"mistype\"')\n                    else:\n                        f.write('\"array_int\":[' + str(random.randint(-999999, 9999999)) + ',' + str(random.randint(-999999, 9999999)) + ']')\n                if data_field == DataField.array_float_field:\n                    if err_type == DataErrorType.empty_array_field:\n                        f.write('\"array_float\":[]')\n                    elif err_type == DataErrorType.mismatch_type_array_field:\n                        f.write('\"array_float\": \"mistype\"')\n                    else:\n                        f.write('\"array_float\":[' + str(random.random()) + ',' + str(random.random()) + ']')\n                if data_field == DataField.array_string_field:\n                    if err_type == DataErrorType.empty_array_field:\n                        f.write('\"array_string\":[]')\n                    elif err_type == DataErrorType.mismatch_type_array_field:\n                        f.write('\"array_string\": \"mistype\"')\n                    else:\n                        f.write('\"array_string\":[\"' + str(gen_unique_str()) + '\",\"' + str(gen_unique_str()) + '\"]')\n\n                if data_field == DataField.vec_field:\n                    # vector field\n                    if err_type == DataErrorType.one_entity_wrong_dim and i == wrong_row:\n                        vectors = gen_float_vectors(1, wrong_dim) if float_vect else gen_binary_vectors(1, (wrong_dim//8))\n                    elif err_type == DataErrorType.str_on_vector_field and i == wrong_row:\n                        vectors = gen_str_invalid_vectors(1, dim) if float_vect else gen_str_invalid_vectors(1, dim//8)\n                    else:\n                        vectors = gen_float_vectors(1, dim) if float_vect else gen_binary_vectors(1, (dim//8))\n                    line = '\"vectors\":' + \",\".join(str(x).replace(\"'\", '\"') for x in vectors) + ''\n                    f.write(line)\n                # not write common for the last field\n                if j != len(data_fields) - 1:\n                    f.write(',')\n            if enable_dynamic_field:\n                d = {str(i+start_uid): i+start_uid, \"name\": fake.name(), \"address\": fake.address()}\n                d_str = json.dumps(d)\n                d_str = d_str[1:-1] # remove {}\n                f.write(\",\" + d_str)\n            f.write('}')\n        f.write(\"\\n\")\n        f.write(\"]\")\n        f.write(\"\\n\")\n        f.write(\"}\")\n        f.write(\"\\n\")\n\n\ndef gen_column_base_json_file(col_file, str_pk, data_fields, float_vect,\n                              rows, dim, start_uid=0, err_type=\"\", **kwargs):\n    if err_type == DataErrorType.str_on_int_pk:\n        str_pk = True\n\n    with open(col_file, \"w\") as f:\n        f.write(\"{\")\n        f.write(\"\\n\")\n        if rows > 0:\n            # data columns\n            for j in range(len(data_fields)):\n                data_field = data_fields[j]\n                if data_field == DataField.pk_field:\n                    if str_pk:\n                        f.write('\"uid\":[\"' + ',\"'.join(str(gen_unique_str()) + '\"' for i in range(rows)) + ']')\n                        f.write(\"\\n\")\n                    else:\n                        if err_type == DataErrorType.float_on_int_pk:\n                            f.write('\"uid\":[' + \",\".join(\n                                str(i + random.random()) for i in range(start_uid, start_uid + rows)) + \"]\")\n                        else:\n                            f.write('\"uid\":[' + \",\".join(str(i) for i in range(start_uid, start_uid + rows)) + \"]\")\n                        f.write(\"\\n\")\n                if data_field == DataField.int_field:\n                    if DataField.pk_field in data_fields:\n                        # if not auto_id, use the same value as pk to check the query results later\n                        f.write('\"int_scalar\":[' + \",\".join(str(i) for i in range(start_uid, start_uid + rows)) + \"]\")\n                    else:\n                        f.write('\"int_scalar\":[' + \",\".join(str(\n                            random.randint(-999999, 9999999)) for i in range(rows)) + \"]\")\n                    f.write(\"\\n\")\n                if data_field == DataField.float_field:\n                    if err_type == DataErrorType.int_on_float_scalar:\n                        f.write('\"float_scalar\":[' + \",\".join(\n                            str(random.randint(-999999, 9999999)) for i in range(rows)) + \"]\")\n                    elif err_type == DataErrorType.str_on_float_scalar:\n                        f.write('\"float_scalar\":[\"' + ',\"'.join(str(\n                            gen_unique_str()) + '\"' for i in range(rows)) + ']')\n                    else:\n                        f.write('\"float_scalar\":[' + \",\".join(\n                            str(random.random()) for i in range(rows)) + \"]\")\n                    f.write(\"\\n\")\n                if data_field == DataField.string_field:\n                    f.write('\"string_scalar\":[\"' + ',\"'.join(str(\n                        gen_unique_str()) + '\"' for i in range(rows)) + ']')\n                    f.write(\"\\n\")\n                if data_field == DataField.bool_field:\n                    if err_type == DataErrorType.typo_on_bool:\n                        f.write('\"bool_scalar\":[' + \",\".join(\n                            str(random.choice([\"True\", \"False\", \"TRUE\", \"FALSE\", \"1\", \"0\"])) for i in range(rows)) + \"]\")\n                    else:\n                        f.write('\"bool_scalar\":[' + \",\".join(\n                            str(random.choice([\"true\", \"false\"])) for i in range(rows)) + \"]\")\n                    f.write(\"\\n\")\n                if data_field == DataField.vec_field:\n                    # vector columns\n                    if err_type == DataErrorType.one_entity_wrong_dim:\n                        wrong_dim = dim + 8  # add 8 to compatible with binary vectors\n                        wrong_row = kwargs.get(\"wrong_position\", 0)\n                        if wrong_row <= 0:\n                            vectors1 = []\n                        else:\n                            vectors1 = gen_float_vectors(wrong_row, dim) if float_vect else \\\n                                gen_binary_vectors(wrong_row, (dim//8))\n                        if wrong_row >= rows -1:\n                            vectors2 = []\n                        else:\n                            vectors2 = gen_float_vectors(rows-wrong_row-1, dim) if float_vect else\\\n                                gen_binary_vectors(rows-wrong_row-1, (dim//8))\n                        vectors_wrong_dim = gen_float_vectors(1, wrong_dim) if float_vect else \\\n                            gen_binary_vectors(1, (wrong_dim//8))\n                        vectors = vectors1 + vectors_wrong_dim + vectors2\n                    elif err_type == DataErrorType.str_on_vector_field:\n                        wrong_row = kwargs.get(\"wrong_position\", 0)\n                        if wrong_row <= 0:\n                            vectors1 = []\n                        else:\n                            vectors1 = gen_float_vectors(wrong_row, dim) if float_vect else \\\n                                gen_binary_vectors(wrong_row, (dim//8))\n                        if wrong_row >= rows - 1:\n                            vectors2 = []\n                        else:\n                            vectors2 = gen_float_vectors(rows - wrong_row - 1, dim) if float_vect else \\\n                                gen_binary_vectors(rows - wrong_row - 1, (dim // 8))\n                        invalid_str_vectors = gen_str_invalid_vectors(1, dim) if float_vect else \\\n                            gen_str_invalid_vectors(1, (dim // 8))\n                        vectors = vectors1 + invalid_str_vectors + vectors2\n                    else:\n                        vectors = gen_float_vectors(rows, dim) if float_vect else gen_binary_vectors(rows, (dim//8))\n                    f.write('\"vectors\":[' + \",\".join(str(x).replace(\"'\", '\"') for x in vectors) + \"]\")\n                    f.write(\"\\n\")\n                if j != len(data_fields) - 1:\n                    f.write(\",\")\n        f.write(\"}\")\n        f.write(\"\\n\")\n\n\ndef gen_vectors_in_numpy_file(dir, data_field, float_vector, rows, dim, vector_type=\"float32\", force=False):\n    file_name = f\"{data_field}.npy\"\n    file = f'{dir}/{file_name}'\n\n    if not os.path.exists(file) or force:\n        # vector columns\n        vectors = []\n        if rows > 0:\n            if vector_type == \"float32\":\n                vectors = gen_float_vectors(rows, dim)\n                arr = np.array(vectors)\n            elif vector_type == \"fp16\":\n                vectors = gen_fp16_vectors(rows, dim)[1]\n                arr = np.array(vectors, dtype=np.dtype(\"uint8\"))\n            elif vector_type == \"bf16\":\n                vectors = gen_bf16_vectors(rows, dim)[1]\n                arr = np.array(vectors, dtype=np.dtype(\"uint8\"))\n            elif vector_type == \"binary\":\n                vectors = gen_binary_vectors(rows, (dim // 8))\n                arr = np.array(vectors, dtype=np.dtype(\"uint8\"))\n            else:\n                vectors = gen_binary_vectors(rows, (dim // 8))\n                arr = np.array(vectors, dtype=np.dtype(\"uint8\"))\n            log.info(f\"file_name: {file_name} data type: {arr.dtype} data shape: {arr.shape}\")\n            np.save(file, arr)\n    return file_name\n\n\ndef gen_string_in_numpy_file(dir, data_field, rows, start=0, force=False):\n    file_name = f\"{data_field}.npy\"\n    file = f\"{dir}/{file_name}\"\n    if not os.path.exists(file) or force:\n        # non vector columns\n        data = []\n        if rows > 0:\n            data = [gen_unique_str(str(i)) for i in range(start, rows+start)]\n        arr = np.array(data)\n        # print(f\"file_name: {file_name} data type: {arr.dtype}\")\n        log.info(f\"file_name: {file_name} data type: {arr.dtype} data shape: {arr.shape}\")\n        np.save(file, arr)\n    return file_name\n\n\ndef gen_dynamic_field_in_numpy_file(dir, rows, start=0, force=False):\n    file_name = f\"$meta.npy\"\n    file = f\"{dir}/{file_name}\"\n    if not os.path.exists(file) or force:\n        # non vector columns\n        data = []\n        if rows > 0:\n            data = [json.dumps({str(i): i, \"name\": fake.name(), \"address\": fake.address()}) for i in range(start, rows+start)]\n        arr = np.array(data)\n        log.info(f\"file_name: {file_name} data type: {arr.dtype} data shape: {arr.shape}\")\n        np.save(file, arr)\n    return file_name\n\n\ndef gen_bool_in_numpy_file(dir, data_field, rows, start=0, force=False):\n    file_name = f\"{data_field}.npy\"\n    file = f\"{dir}/{file_name}\"\n    if not os.path.exists(file) or force:\n        # non vector columns\n        data = []\n        if rows > 0:\n            data = [random.choice([True, False]) for i in range(start, rows+start)]\n        arr = np.array(data)\n        # print(f\"file_name: {file_name} data type: {arr.dtype}\")\n        log.info(f\"file_name: {file_name} data type: {arr.dtype} data shape: {arr.shape}\")\n        np.save(file, arr)\n    return file_name\n\n\ndef gen_json_in_numpy_file(dir, data_field, rows, start=0, force=False):\n    file_name = f\"{data_field}.npy\"\n    file = f\"{dir}/{file_name}\"\n    if not os.path.exists(file) or force:\n        data = []\n        if rows > 0:\n            data = [json.dumps({\"name\": fake.name(), \"address\": fake.address()}) for i in range(start, rows+start)]\n        arr = np.array(data)\n        log.info(f\"file_name: {file_name} data type: {arr.dtype} data shape: {arr.shape}\")\n        np.save(file, arr)\n    return file_name\n\n\ndef gen_int_or_float_in_numpy_file(dir, data_field, rows, start=0, force=False):\n    file_name = f\"{data_field}.npy\"\n    file = f\"{dir}/{file_name}\"\n    if not os.path.exists(file) or force:\n        # non vector columns\n        data = []\n        # arr = np.array([])\n        if rows > 0:\n            if data_field == DataField.float_field:\n                data = [np.float32(random.random()) for _ in range(rows)]\n            elif data_field == DataField.double_field:\n                data = [np.float64(random.random()) for _ in range(rows)]\n            elif data_field == DataField.pk_field:\n                data = [i for i in range(start, start + rows)]\n            elif data_field == DataField.int_field:\n                data = [random.randint(-999999, 9999999) for _ in range(rows)]\n            arr = np.array(data)\n            log.info(f\"file_name: {file_name} data type: {arr.dtype} data shape: {arr.shape}\")\n            np.save(file, arr)\n    return file_name\n\n\ndef gen_vectors(float_vector, rows, dim):\n    vectors = []\n    if rows > 0:\n        if float_vector:\n            vectors = gen_float_vectors(rows, dim)\n        else:\n            vectors = gen_binary_vectors(rows, (dim // 8))\n    return vectors\n\n\ndef gen_data_by_data_field(data_field, rows, start=0, float_vector=True, dim=128, array_length=None):\n    if array_length is None:\n        array_length = random.randint(0, 10)\n\n    data = []\n    if rows > 0:\n        if \"vec\" in data_field:\n            if \"float\" in data_field:\n                data = gen_vectors(float_vector=True, rows=rows, dim=dim)\n                data = pd.Series([np.array(x, dtype=np.dtype(\"float32\")) for x in data])\n            elif \"fp16\" in data_field:\n                data = gen_fp16_vectors(rows, dim)[1]\n                data = pd.Series([np.array(x, dtype=np.dtype(\"uint8\")) for x in data])\n            elif \"bf16\" in data_field:\n                data = gen_bf16_vectors(rows, dim)[1]\n                data = pd.Series([np.array(x, dtype=np.dtype(\"uint8\")) for x in data])\n            elif \"binary\" in data_field:\n                data = gen_vectors(float_vector=False, rows=rows, dim=dim)\n                data = pd.Series([np.array(x, dtype=np.dtype(\"uint8\")) for x in data])\n            else:\n                data = gen_vectors(float_vector=float_vector, rows=rows, dim=dim)\n        elif data_field == DataField.float_field:\n            data = [np.float32(random.random()) for _ in range(rows)]\n        elif data_field == DataField.double_field:\n            data = [np.float64(random.random()) for _ in range(rows)]\n        elif data_field == DataField.pk_field:\n            data = [np.int64(i) for i in range(start, start + rows)]\n        elif data_field == DataField.int_field:\n            data = [np.int64(random.randint(-999999, 9999999)) for _ in range(rows)]\n        elif data_field == DataField.string_field:\n            data = [gen_unique_str(str(i)) for i in range(start, rows + start)]\n        elif data_field == DataField.bool_field:\n            data = [random.choice([True, False]) for i in range(start, rows + start)]\n        elif data_field == DataField.json_field:\n            data = pd.Series([json.dumps({\n                gen_unique_str(): random.randint(-999999, 9999999)\n            }) for i in range(start, rows + start)], dtype=np.dtype(\"str\"))\n        elif data_field == DataField.array_bool_field:\n            data = pd.Series(\n                    [np.array([random.choice([True, False]) for _ in range(array_length)], dtype=np.dtype(\"bool\"))\n                     for i in range(start, rows + start)])\n        elif data_field == DataField.array_int_field:\n            data = pd.Series(\n                    [np.array([random.randint(-999999, 9999999) for _ in range(array_length)], dtype=np.dtype(\"int64\"))\n                     for i in range(start, rows + start)])\n        elif data_field == DataField.array_float_field:\n            data = pd.Series(\n                    [np.array([random.random() for _ in range(array_length)], dtype=np.dtype(\"float32\"))\n                     for i in range(start, rows + start)])\n        elif data_field == DataField.array_string_field:\n            data = pd.Series(\n                    [np.array([gen_unique_str(str(i)) for _ in range(array_length)], dtype=np.dtype(\"str\"))\n                     for i in range(start, rows + start)])\n    return data\n\n\ndef gen_file_name(is_row_based, rows, dim, auto_id, str_pk,\n                  float_vector, data_fields, file_num, file_type, err_type):\n    row_suffix = entity_suffix(rows)\n    field_suffix = \"\"\n    if len(data_fields) > 3:\n        field_suffix = \"multi_scalars_\"\n    else:\n        for data_field in data_fields:\n            if data_field != DataField.vec_field:\n                field_suffix += f\"{data_field}_\"\n\n    vt = \"\"\n    if DataField.vec_field in data_fields:\n        vt = \"float_vectors_\" if float_vector else \"binary_vectors_\"\n\n    pk = \"\"\n    if str_pk:\n        pk = \"str_pk_\"\n    prefix = gen_file_prefix(is_row_based=is_row_based, auto_id=auto_id, prefix=err_type)\n\n    file_name = f\"{prefix}_{pk}{vt}{field_suffix}{dim}d_{row_suffix}_{file_num}_{int(time.time())}{file_type}\"\n    return file_name\n\n\ndef gen_subfolder(root, dim, rows, file_num):\n    suffix = entity_suffix(rows)\n    subfolder = f\"{dim}d_{suffix}_{file_num}\"\n    path = f\"{root}/{subfolder}\"\n    if not os.path.isdir(path):\n        os.mkdir(path)\n    return subfolder\n\n\ndef gen_json_files(is_row_based, rows, dim, auto_id, str_pk,\n                   float_vector, data_fields, file_nums, multi_folder,\n                   file_type, err_type, force, **kwargs):\n    # gen json files\n    files = []\n    start_uid = 0\n    # make sure pk field exists when not auto_id\n    if (not auto_id) and (DataField.pk_field not in data_fields):\n        data_fields.append(DataField.pk_field)\n    for i in range(file_nums):\n        file_name = gen_file_name(is_row_based=is_row_based, rows=rows, dim=dim,\n                                  auto_id=auto_id, str_pk=str_pk, float_vector=float_vector,\n                                  data_fields=data_fields, file_num=i, file_type=file_type, err_type=err_type)\n        file = f\"{data_source}/{file_name}\"\n        if multi_folder:\n            subfolder = gen_subfolder(root=data_source, dim=dim, rows=rows, file_num=i)\n            file = f\"{data_source}/{subfolder}/{file_name}\"\n        if not os.path.exists(file) or force:\n            if is_row_based:\n                gen_row_based_json_file(row_file=file, str_pk=str_pk, float_vect=float_vector,\n                                        data_fields=data_fields, rows=rows, dim=dim,\n                                        start_uid=start_uid, err_type=err_type, **kwargs)\n            else:\n                gen_column_base_json_file(col_file=file, str_pk=str_pk, float_vect=float_vector,\n                                          data_fields=data_fields, rows=rows, dim=dim,\n                                          start_uid=start_uid, err_type=err_type, **kwargs)\n            start_uid += rows\n        if multi_folder:\n            files.append(f\"{subfolder}/{file_name}\")\n        else:\n            files.append(file_name)\n    return files\n\n\ndef gen_dict_data_by_data_field(data_fields, rows, start=0, float_vector=True, dim=128, array_length=None, enable_dynamic_field=False):\n    data = []\n    for r in range(rows):\n        d = {}\n        for data_field in data_fields:\n            if \"vec\" in data_field:\n                if \"float\" in data_field:\n                    float_vector = True\n                    d[data_field] = gen_vectors(float_vector=float_vector, rows=1, dim=dim)[0]\n                if \"binary\" in data_field:\n                    float_vector = False\n                    d[data_field] = gen_vectors(float_vector=float_vector, rows=1, dim=dim)[0]\n                if \"bf16\" in data_field:\n                    d[data_field] = gen_bf16_vectors(1, dim)[1][0]\n                if \"fp16\" in data_field:\n                    d[data_field] = gen_fp16_vectors(1, dim)[1][0]\n            elif data_field == DataField.float_field:\n                d[data_field] = random.random()\n            elif data_field == DataField.double_field:\n                d[data_field] = random.random()\n            elif data_field == DataField.pk_field:\n                d[data_field] = r+start\n            elif data_field == DataField.int_field:\n                d[data_field] =random.randint(-999999, 9999999)\n            elif data_field == DataField.string_field:\n                d[data_field] = gen_unique_str(str(r + start))\n            elif data_field == DataField.bool_field:\n                d[data_field] = random.choice([True, False])\n            elif data_field == DataField.json_field:\n                d[data_field] = {str(r+start): r+start}\n            elif data_field == DataField.array_bool_field:\n                array_length = random.randint(0, 10) if array_length is None else array_length\n                d[data_field] = [random.choice([True, False]) for _ in range(array_length)]\n            elif data_field == DataField.array_int_field:\n                array_length = random.randint(0, 10) if array_length is None else array_length\n                d[data_field] = [random.randint(-999999, 9999999) for _ in range(array_length)]\n            elif data_field == DataField.array_float_field:\n                array_length = random.randint(0, 10) if array_length is None else array_length\n                d[data_field] = [random.random() for _ in range(array_length)]\n            elif data_field == DataField.array_string_field:\n                array_length = random.randint(0, 10) if array_length is None else array_length\n                d[data_field] = [gen_unique_str(str(i)) for i in range(array_length)]\n        if enable_dynamic_field:\n            d[str(r+start)] = r+start\n            d[\"name\"] = fake.name()\n            d[\"address\"] = fake.address()\n        data.append(d)\n\n    return data\n\n\ndef gen_new_json_files(float_vector, rows, dim, data_fields, file_nums=1, array_length=None, file_size=None, err_type=\"\", enable_dynamic_field=False):\n    files = []\n    if file_size is not None:\n        rows = 5000\n    start_uid = 0\n    for i in range(file_nums):\n        file_name = f\"data-fields-{len(data_fields)}-rows-{rows}-dim-{dim}-file-num-{i}-{int(time.time())}.json\"\n        file = f\"{data_source}/{file_name}\"\n        data = gen_dict_data_by_data_field(data_fields=data_fields, rows=rows, start=start_uid, float_vector=float_vector, dim=dim, array_length=array_length, enable_dynamic_field=enable_dynamic_field)\n        # log.info(f\"data: {data}\")\n        with open(file, \"w\") as f:\n            json.dump(data, f)\n        # get the file size\n        if file_size is not None:\n            batch_file_size = os.path.getsize(f\"{data_source}/{file_name}\")\n            log.info(f\"file_size with rows {rows} for {file_name}: {batch_file_size/1024/1024} MB\")\n            # calculate the rows to be generated\n            total_batch = int(file_size*1024*1024*1024/batch_file_size)\n            total_rows = total_batch * rows\n            log.info(f\"total_rows: {total_rows}\")\n            all_data = []\n            for _ in range(total_batch):\n                all_data += data\n            file_name = f\"data-fields-{len(data_fields)}-rows-{total_rows}-dim-{dim}-file-num-{i}-{int(time.time())}.json\"\n            with open(f\"{data_source}/{file_name}\", \"w\") as f:\n                json.dump(all_data, f)\n            batch_file_size = os.path.getsize(f\"{data_source}/{file_name}\")\n            log.info(f\"file_size with rows {total_rows} for {file_name}: {batch_file_size/1024/1024/1024} GB\")\n        files.append(file_name)\n        start_uid += rows\n    return files\n\n\ndef gen_npy_files(float_vector, rows, dim, data_fields, file_size=None, file_nums=1, err_type=\"\", force=False, enable_dynamic_field=False):\n    # gen numpy files\n    files = []\n    start_uid = 0\n    if file_nums == 1:\n        # gen the numpy file without subfolders if only one set of files\n        for data_field in data_fields:\n            if \"vec\" in data_field:\n                vector_type = \"float32\"\n                if \"float\" in data_field:\n                    float_vector = True\n                    vector_type = \"float32\"\n                if \"binary\" in data_field:\n                    float_vector = False\n                    vector_type = \"binary\"\n                if \"bf16\" in data_field:\n                    float_vector = True\n                    vector_type = \"bf16\"\n                if \"fp16\" in data_field:\n                    float_vector = True\n                    vector_type = \"fp16\"\n                file_name = gen_vectors_in_numpy_file(dir=data_source, data_field=data_field, float_vector=float_vector,\n                                                      vector_type=vector_type, rows=rows, dim=dim, force=force)\n            elif data_field == DataField.string_field:  # string field for numpy not supported yet at 2022-10-17\n                file_name = gen_string_in_numpy_file(dir=data_source, data_field=data_field, rows=rows, force=force)\n            elif data_field == DataField.bool_field:\n                file_name = gen_bool_in_numpy_file(dir=data_source, data_field=data_field, rows=rows, force=force)\n            elif data_field == DataField.json_field:\n                file_name = gen_json_in_numpy_file(dir=data_source, data_field=data_field, rows=rows, force=force)\n            else:\n                file_name = gen_int_or_float_in_numpy_file(dir=data_source, data_field=data_field,\n                                                           rows=rows, force=force)\n            files.append(file_name)\n        if enable_dynamic_field:\n            file_name = gen_dynamic_field_in_numpy_file(dir=data_source, rows=rows, force=force)\n            files.append(file_name)\n        if file_size is not None:\n            batch_file_size = 0\n            for file_name in files:\n                batch_file_size += os.path.getsize(f\"{data_source}/{file_name}\")\n            log.info(f\"file_size with rows {rows} for {files}: {batch_file_size/1024/1024} MB\")\n            # calculate the rows to be generated\n            total_batch = int(file_size*1024*1024*1024/batch_file_size)\n            total_rows = total_batch * rows\n            new_files = []\n            for f in files:\n                arr = np.load(f\"{data_source}/{f}\")\n                all_arr = np.concatenate([arr for _ in range(total_batch)], axis=0)\n                file_name = f\n                np.save(f\"{data_source}/{file_name}\", all_arr)\n                log.info(f\"file_name: {file_name} data type: {all_arr.dtype} data shape: {all_arr.shape}\")\n                new_files.append(file_name)\n            files = new_files\n            batch_file_size = 0\n            for file_name in files:\n                batch_file_size += os.path.getsize(f\"{data_source}/{file_name}\")\n            log.info(f\"file_size with rows {total_rows} for {files}: {batch_file_size/1024/1024/1024} GB\")\n\n    else:\n        for i in range(file_nums):\n            subfolder = gen_subfolder(root=data_source, dim=dim, rows=rows, file_num=i)\n            dir = f\"{data_source}/{subfolder}\"\n            for data_field in data_fields:\n                if DataField.vec_field in data_field:\n                    file_name = gen_vectors_in_numpy_file(dir=dir, data_field=data_field, float_vector=float_vector, rows=rows, dim=dim, force=force)\n                else:\n                    file_name = gen_int_or_float_in_numpy_file(dir=dir, data_field=data_field, rows=rows, start=start_uid, force=force)\n                files.append(f\"{subfolder}/{file_name}\")\n            if enable_dynamic_field:\n                file_name = gen_dynamic_field_in_numpy_file(dir=dir, rows=rows, start=start_uid, force=force)\n                files.append(f\"{subfolder}/{file_name}\")\n            start_uid += rows\n    return files\n\n\ndef gen_dynamic_field_data_in_parquet_file(rows, start=0):\n    data = []\n    if rows > 0:\n        data = pd.Series([json.dumps({str(i): i, \"name\": fake.name(), \"address\": fake.address()}) for i in range(start, rows+start)], dtype=np.dtype(\"str\"))\n    return data\n\n\ndef gen_parquet_files(float_vector, rows, dim, data_fields, file_size=None, row_group_size=None, file_nums=1, array_length=None, err_type=\"\", enable_dynamic_field=False):\n    # gen numpy files\n    if err_type == \"\":\n        err_type = \"none\"\n    files = []\n    #  generate 5000 entities and check the file size, then calculate the rows to be generated\n    if file_size is not None:\n        rows = 5000\n    start_uid = 0\n    if file_nums == 1:\n        all_field_data = {}\n        for data_field in data_fields:\n            data = gen_data_by_data_field(data_field=data_field, rows=rows, start=0,\n                                          float_vector=float_vector, dim=dim, array_length=array_length)\n            all_field_data[data_field] = data\n        if enable_dynamic_field:\n            all_field_data[\"$meta\"] = gen_dynamic_field_data_in_parquet_file(rows=rows, start=0)\n        df = pd.DataFrame(all_field_data)\n        log.info(f\"df: \\n{df}\")\n        file_name = f\"data-fields-{len(data_fields)}-rows-{rows}-dim-{dim}-file-num-{file_nums}-error-{err_type}-{int(time.time())}.parquet\"\n        if row_group_size is not None:\n            df.to_parquet(f\"{data_source}/{file_name}\", engine='pyarrow', row_group_size=row_group_size)\n        else:\n            df.to_parquet(f\"{data_source}/{file_name}\", engine='pyarrow')\n        # get the file size\n        if file_size is not None:\n            batch_file_size = os.path.getsize(f\"{data_source}/{file_name}\")\n            log.info(f\"file_size with rows {rows} for {file_name}: {batch_file_size/1024/1024} MB\")\n            # calculate the rows to be generated\n            total_batch = int(file_size*1024*1024*1024/batch_file_size)\n            total_rows = total_batch * rows\n            all_df = pd.concat([df for _ in range(total_batch)], axis=0, ignore_index=True)\n            file_name = f\"data-fields-{len(data_fields)}-rows-{total_rows}-dim-{dim}-file-num-{file_nums}-error-{err_type}-{int(time.time())}.parquet\"\n            log.info(f\"all df: \\n {all_df}\")\n            if row_group_size is not None:\n                all_df.to_parquet(f\"{data_source}/{file_name}\", engine='pyarrow', row_group_size=row_group_size)\n            else:\n                all_df.to_parquet(f\"{data_source}/{file_name}\", engine='pyarrow')\n            batch_file_size = os.path.getsize(f\"{data_source}/{file_name}\")\n            log.info(f\"file_size with rows {total_rows} for {file_name}: {batch_file_size/1024/1024} MB\")\n        files.append(file_name)\n    else:\n        for i in range(file_nums):\n            all_field_data = {}\n            for data_field in data_fields:\n                data = gen_data_by_data_field(data_field=data_field, rows=rows, start=0,\n                                              float_vector=float_vector, dim=dim, array_length=array_length)\n                all_field_data[data_field] = data\n            if enable_dynamic_field:\n                all_field_data[\"$meta\"] = gen_dynamic_field_data_in_parquet_file(rows=rows, start=0)\n            df = pd.DataFrame(all_field_data)\n            file_name = f\"data-fields-{len(data_fields)}-rows-{rows}-dim-{dim}-file-num-{i}-error-{err_type}-{int(time.time())}.parquet\"\n            if row_group_size is not None:\n                df.to_parquet(f\"{data_source}/{file_name}\", engine='pyarrow', row_group_size=row_group_size)\n            else:\n                df.to_parquet(f\"{data_source}/{file_name}\", engine='pyarrow')\n            files.append(file_name)\n            start_uid += rows\n    return files\n\n\ndef prepare_bulk_insert_json_files(minio_endpoint=\"\", bucket_name=\"milvus-bucket\",\n                                   is_row_based=True, rows=100, dim=128,\n                                   auto_id=True, str_pk=False, float_vector=True,\n                                   data_fields=[], file_nums=1, multi_folder=False,\n                                   file_type=\".json\", err_type=\"\", force=False, **kwargs):\n    \"\"\"\n    Generate files based on the params in json format and copy them to minio\n\n    :param minio_endpoint: the minio_endpoint of minio\n    :type minio_endpoint: str\n\n    :param bucket_name: the bucket name of Milvus\n    :type bucket_name: str\n\n    :param is_row_based: indicate the file(s) to be generated is row based or not\n    :type is_row_based: boolean\n\n    :param rows: the number entities to be generated in the file(s)\n    :type rows: int\n\n    :param dim: dim of vector data\n    :type dim: int\n\n    :param auto_id: generate primary key data or not\n    :type auto_id: boolean\n\n    :param str_pk: generate string or int as primary key\n    :type str_pk: boolean\n\n    :param: float_vector: generate float vectors or binary vectors\n    :type float_vector: boolean\n\n    :param: data_fields: data fields to be generated in the file(s):\n            It supports one or all of [pk, vectors, int, float, string, boolean]\n            Note: it automatically adds pk field if auto_id=False\n    :type data_fields: list\n\n    :param file_nums: file numbers to be generated\n    :type file_nums: int\n\n    :param multi_folder: generate the files in bucket root folder or new subfolders\n    :type multi_folder: boolean\n\n    :param file_type: specify the file suffix to be generate\n    :type file_type: str\n\n    :param err_type: inject some errors in the file(s).\n        All errors should be predefined in DataErrorType\n    :type err_type: str\n\n    :param force: re-generate the file(s) regardless existing or not\n    :type force: boolean\n\n    :param **kwargs\n        * *wrong_position* (``int``) --\n        indicate the error entity in the file if DataErrorType.one_entity_wrong_dim\n\n    :return list\n        file names list\n    \"\"\"\n    data_fields_c = copy.deepcopy(data_fields)\n    log.info(f\"data_fields: {data_fields}\")\n    log.info(f\"data_fields_c: {data_fields_c}\")\n\n    files = gen_json_files(is_row_based=is_row_based, rows=rows, dim=dim,\n                           auto_id=auto_id, str_pk=str_pk, float_vector=float_vector,\n                           data_fields=data_fields_c, file_nums=file_nums, multi_folder=multi_folder,\n                           file_type=file_type, err_type=err_type, force=force, **kwargs)\n\n    copy_files_to_minio(host=minio_endpoint, r_source=data_source, files=files, bucket_name=bucket_name, force=force)\n    return files\n\n\ndef prepare_bulk_insert_new_json_files(minio_endpoint=\"\", bucket_name=\"milvus-bucket\",\n                                    rows=100, dim=128, float_vector=True, file_size=None,\n                                    data_fields=[], file_nums=1, enable_dynamic_field=False,\n                                    err_type=\"\", force=False, **kwargs):\n\n    log.info(f\"data_fields: {data_fields}\")\n    files = gen_new_json_files(float_vector=float_vector, rows=rows, dim=dim,  data_fields=data_fields, file_nums=file_nums, file_size=file_size, err_type=err_type, enable_dynamic_field=enable_dynamic_field, **kwargs)\n\n    copy_files_to_minio(host=minio_endpoint, r_source=data_source, files=files, bucket_name=bucket_name, force=force)\n    return files\n\n\ndef prepare_bulk_insert_numpy_files(minio_endpoint=\"\", bucket_name=\"milvus-bucket\", rows=100, dim=128, enable_dynamic_field=False, file_size=None,\n                                    data_fields=[DataField.vec_field], float_vector=True, file_nums=1, force=False):\n    \"\"\"\n    Generate column based files based on params in numpy format and copy them to the minio\n    Note: each field in data_fields would be generated one numpy file.\n\n    :param rows: the number entities to be generated in the file(s)\n    :type rows: int\n\n    :param dim: dim of vector data\n    :type dim: int\n\n    :param: float_vector: generate float vectors or binary vectors\n    :type float_vector: boolean\n\n    :param: data_fields: data fields to be generated in the file(s):\n            it supports one or all of [int_pk, vectors, int, float]\n            Note: it does not automatically add pk field\n    :type data_fields: list\n\n    :param file_nums: file numbers to be generated\n        The file(s) would be  generated in data_source folder if file_nums = 1\n        The file(s) would be generated in different sub-folders if file_nums > 1\n    :type file_nums: int\n\n    :param force: re-generate the file(s) regardless existing or not\n    :type force: boolean\n\n    Return: List\n        File name list or file name with sub-folder list\n    \"\"\"\n    files = gen_npy_files(rows=rows, dim=dim, float_vector=float_vector, file_size=file_size,\n                          data_fields=data_fields, enable_dynamic_field=enable_dynamic_field,\n                          file_nums=file_nums, force=force)\n\n    copy_files_to_minio(host=minio_endpoint, r_source=data_source, files=files, bucket_name=bucket_name, force=force)\n    return files\n\n\ndef prepare_bulk_insert_parquet_files(minio_endpoint=\"\", bucket_name=\"milvus-bucket\", rows=100, dim=128, array_length=None, file_size=None, row_group_size=None,\n                                    enable_dynamic_field=False, data_fields=[DataField.vec_field], float_vector=True, file_nums=1, force=False):\n    \"\"\"\n    Generate column based files based on params in parquet format and copy them to the minio\n    Note: each field in data_fields would be generated one parquet file.\n\n    :param rows: the number entities to be generated in the file(s)\n    :type rows: int\n\n    :param dim: dim of vector data\n    :type dim: int\n\n    :param: float_vector: generate float vectors or binary vectors\n    :type float_vector: boolean\n\n    :param: data_fields: data fields to be generated in the file(s):\n            it supports one or all of [int_pk, vectors, int, float]\n            Note: it does not automatically add pk field\n    :type data_fields: list\n\n    :param file_nums: file numbers to be generated\n        The file(s) would be  generated in data_source folder if file_nums = 1\n        The file(s) would be generated in different sub-folders if file_nums > 1\n    :type file_nums: int\n\n    :param force: re-generate the file(s) regardless existing or not\n    :type force: boolean\n\n    Return: List\n        File name list or file name with sub-folder list\n    \"\"\"\n    files = gen_parquet_files(rows=rows, dim=dim, float_vector=float_vector, enable_dynamic_field=enable_dynamic_field,\n                              data_fields=data_fields, array_length=array_length, file_size=file_size, row_group_size=row_group_size,\n                              file_nums=file_nums)\n    copy_files_to_minio(host=minio_endpoint, r_source=data_source, files=files, bucket_name=bucket_name, force=force)\n    return files\n\n\ndef gen_csv_file(file, float_vector, data_fields, rows, dim, start_uid):\n    with open(file, \"w\") as f:\n        # field name\n        for i in range(len(data_fields)):\n            f.write(data_fields[i])\n            if i != len(data_fields) - 1:\n                f.write(\",\")\n        f.write(\"\\n\")\n\n        for i in range(rows):\n            # field value\n            for j in range(len(data_fields)):\n                data_field = data_fields[j]\n                if data_field == DataField.pk_field:\n                    f.write(str(i + start_uid))\n                if data_field == DataField.int_field:\n                    f.write(str(random.randint(-999999, 9999999)))\n                if data_field == DataField.float_field:\n                    f.write(str(random.random()))\n                if data_field == DataField.string_field:\n                    f.write(str(gen_unique_str()))\n                if data_field == DataField.bool_field:\n                    f.write(str(random.choice([\"true\", \"false\"])))\n                if data_field == DataField.vec_field:\n                    vectors = gen_float_vectors(1, dim) if float_vector else gen_binary_vectors(1, dim//8)\n                    f.write('\"' + ','.join(str(x) for x in vectors) + '\"')\n                if j != len(data_fields) - 1:\n                    f.write(\",\")\n            f.write(\"\\n\")\n\n\ndef gen_csv_files(rows, dim, auto_id, float_vector, data_fields, file_nums, force):\n    files = []\n    start_uid = 0\n    if (not auto_id) and (DataField.pk_field not in data_fields):\n        data_fields.append(DataField.pk_field)\n    for i in range(file_nums):\n        file_name = gen_file_name(is_row_based=True, rows=rows, dim=dim, auto_id=auto_id, float_vector=float_vector, data_fields=data_fields, file_num=i, file_type=\".csv\", str_pk=False, err_type=\"\")\n        file = f\"{data_source}/{file_name}\"\n        if not os.path.exists(file) or force:\n            gen_csv_file(file, float_vector, data_fields, rows, dim, start_uid)\n        start_uid += rows\n        files.append(file_name)\n    return files\n\n\ndef prepare_bulk_insert_csv_files(minio_endpoint=\"\", bucket_name=\"milvus-bucket\", rows=100, dim=128, auto_id=True, float_vector=True, data_fields=[], file_nums=1, force=False):\n    \"\"\"\n    Generate row based files based on params in csv format and copy them to minio\n\n    :param minio_endpoint: the minio_endpoint of minio\n    :type minio_endpoint: str\n\n    :param bucket_name: the bucket name of Milvus\n    :type bucket_name: str\n\n    :param rows: the number entities to be generated in the file\n    :type rows: int\n\n    :param dim: dim of vector data\n    :type dim: int\n\n    :param auto_id: generate primary key data or not\n    :type auto_id: bool\n\n    :param float_vector: generate float vectors or binary vectors\n    :type float_vector: boolean\n\n    :param: data_fields: data fields to be generated in the file(s):\n            It supports one or all of [pk, vectors, int, float, string, boolean]\n            Note: it automatically adds pk field if auto_id=False\n    :type data_fields: list\n\n    :param file_nums: file numbers to be generated\n    :type file_nums: int\n\n    :param force: re-generate the file(s) regardless existing or not\n    :type force: boolean\n    \"\"\"\n    data_fields_c = copy.deepcopy(data_fields)\n    log.info(f\"data_fields: {data_fields}\")\n    log.info(f\"data_fields_c: {data_fields_c}\")\n    files = gen_csv_files(rows=rows, dim=dim, auto_id=auto_id, float_vector=float_vector, data_fields=data_fields_c, file_nums=file_nums, force=force)\n    copy_files_to_minio(host=minio_endpoint, r_source=data_source, files=files, bucket_name=bucket_name, force=force)\n    return files\n"
  },
  {
    "path": "tests/common/code_mapping.py",
    "content": "from enum import Enum\nfrom pymilvus import ExceptionsMessage\n\n\nclass ErrorCode(Enum):\n    ErrorOk = 0\n    Error = 1\n\n\nErrorMessage = {ErrorCode.ErrorOk: \"\",\n                ErrorCode.Error: \"is illegal\"}\n\n\nclass ErrorMap:\n    def __init__(self, err_code, err_msg):\n        self.err_code = err_code\n        self.err_msg = err_msg\n\n\nclass ConnectionErrorMessage(ExceptionsMessage):\n    FailConnect = \"Fail connecting to server on %s:%s. Timeout\"\n    ConnectExist = \"The connection named %s already creating, but passed parameters don't match the configured parameters\"\n\n\nclass CollectionErrorMessage(ExceptionsMessage):\n    CollNotLoaded = \"collection %s was not loaded into memory\"\n\n\nclass PartitionErrorMessage(ExceptionsMessage):\n    pass\n\n\nclass IndexErrorMessage(ExceptionsMessage):\n    WrongFieldName = \"cannot create index on non-vector field: %s\"\n"
  },
  {
    "path": "tests/common/common_func.py",
    "content": "import os\nimport random\nimport math\nimport string\nimport json\nimport time\nimport uuid\nfrom functools import singledispatch\nimport numpy as np\nimport pandas as pd\nimport jax.numpy as jnp\nfrom sklearn import preprocessing\nfrom npy_append_array import NpyAppendArray\nfrom faker import Faker\nfrom pathlib import Path\nfrom minio import Minio\nfrom pymilvus import DataType\nfrom base.schema_wrapper import ApiCollectionSchemaWrapper, ApiFieldSchemaWrapper\nfrom common import common_type as ct\nfrom utils.util_log import test_log as log\nfrom customize.milvus_operator import MilvusOperator\nimport pickle\nimport tensorflow as tf\nfake = Faker()\n\"\"\"\" Methods of processing data \"\"\"\n\n\n@singledispatch\ndef to_serializable(val):\n    \"\"\"Used by default.\"\"\"\n    return str(val)\n\n\n@to_serializable.register(np.float32)\ndef ts_float32(val):\n    \"\"\"Used if *val* is an instance of numpy.float32.\"\"\"\n    return np.float64(val)\n\n\nclass ParamInfo:\n    def __init__(self):\n        self.param_host = \"\"\n        self.param_port = \"\"\n        self.param_handler = \"\"\n        self.param_user = \"\"\n        self.param_password = \"\"\n        self.param_secure = False\n        self.param_replica_num = ct.default_replica_num\n        self.param_uri = \"\"\n        self.param_token = \"\"\n\n    def prepare_param_info(self, host, port, handler, replica_num, user, password, secure, uri, token):\n        self.param_host = host\n        self.param_port = port\n        self.param_handler = handler\n        self.param_user = user\n        self.param_password = password\n        self.param_secure = secure\n        self.param_replica_num = replica_num\n        self.param_uri = uri\n        self.param_token = token\n\n\nparam_info = ParamInfo()\n\n\ndef gen_unique_str(str_value=None):\n    prefix = \"\".join(random.choice(string.ascii_letters + string.digits) for _ in range(8))\n    return \"test_\" + prefix if str_value is None else str_value + \"_\" + prefix\n\n\ndef gen_str_by_length(length=8, letters_only=False):\n    if letters_only:\n        return \"\".join(random.choice(string.ascii_letters) for _ in range(length))\n    return \"\".join(random.choice(string.ascii_letters + string.digits) for _ in range(length))\n\n\ndef gen_digits_by_length(length=8):\n    return \"\".join(random.choice(string.digits) for _ in range(length))\n\n\ndef gen_bool_field(name=ct.default_bool_field_name, description=ct.default_desc, is_primary=False, **kwargs):\n    bool_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.BOOL, description=description,\n                                                              is_primary=is_primary, **kwargs)\n    return bool_field\n\n\ndef gen_string_field(name=ct.default_string_field_name, description=ct.default_desc, is_primary=False,\n                     max_length=ct.default_length, **kwargs):\n    string_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.VARCHAR,\n                                                                description=description, max_length=max_length,\n                                                                is_primary=is_primary, **kwargs)\n    return string_field\n\n\ndef gen_json_field(name=ct.default_json_field_name, description=ct.default_desc, is_primary=False, **kwargs):\n    json_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.JSON, description=description,\n                                                              is_primary=is_primary, **kwargs)\n    return json_field\n\n\ndef gen_array_field(name=ct.default_array_field_name, element_type=DataType.INT64, max_capacity=ct.default_max_capacity,\n                    description=ct.default_desc, is_primary=False, **kwargs):\n\n    array_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.ARRAY,\n                                                               element_type=element_type, max_capacity=max_capacity,\n                                                               description=description, is_primary=is_primary, **kwargs)\n    return array_field\n\n\ndef gen_int8_field(name=ct.default_int8_field_name, description=ct.default_desc, is_primary=False, **kwargs):\n    int8_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.INT8, description=description,\n                                                              is_primary=is_primary, **kwargs)\n    return int8_field\n\n\ndef gen_int16_field(name=ct.default_int16_field_name, description=ct.default_desc, is_primary=False, **kwargs):\n    int16_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.INT16, description=description,\n                                                               is_primary=is_primary, **kwargs)\n    return int16_field\n\n\ndef gen_int32_field(name=ct.default_int32_field_name, description=ct.default_desc, is_primary=False, **kwargs):\n    int32_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.INT32, description=description,\n                                                               is_primary=is_primary, **kwargs)\n    return int32_field\n\n\ndef gen_int64_field(name=ct.default_int64_field_name, description=ct.default_desc, is_primary=False, **kwargs):\n    int64_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.INT64, description=description,\n                                                               is_primary=is_primary, **kwargs)\n    return int64_field\n\n\ndef gen_float_field(name=ct.default_float_field_name, is_primary=False, description=ct.default_desc, **kwargs):\n    float_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.FLOAT, description=description,\n                                                               is_primary=is_primary, **kwargs)\n    return float_field\n\n\ndef gen_double_field(name=ct.default_double_field_name, is_primary=False, description=ct.default_desc, **kwargs):\n    double_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.DOUBLE,  description=description,\n                                                                is_primary=is_primary, **kwargs)\n    return double_field\n\n\ndef gen_float_vec_field(name=ct.default_float_vec_field_name, is_primary=False, dim=ct.default_dim,\n                        description=ct.default_desc, vector_data_type=\"FLOAT_VECTOR\", **kwargs):\n    if vector_data_type == \"SPARSE_FLOAT_VECTOR\":\n        dtype = DataType.SPARSE_FLOAT_VECTOR\n        float_vec_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=dtype,\n                                                                       description=description,\n                                                                       is_primary=is_primary, **kwargs)\n        return float_vec_field\n    if vector_data_type == \"FLOAT_VECTOR\":\n        dtype = DataType.FLOAT_VECTOR\n    elif vector_data_type == \"FLOAT16_VECTOR\":\n        dtype = DataType.FLOAT16_VECTOR\n    elif vector_data_type == \"BFLOAT16_VECTOR\":\n        dtype = DataType.BFLOAT16_VECTOR\n    float_vec_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=dtype,\n                                                                   description=description, dim=dim,\n                                                                   is_primary=is_primary, **kwargs)\n    return float_vec_field\n\n\ndef gen_binary_vec_field(name=ct.default_binary_vec_field_name, is_primary=False, dim=ct.default_dim,\n                         description=ct.default_desc, **kwargs):\n    binary_vec_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.BINARY_VECTOR,\n                                                                    description=description, dim=dim,\n                                                                    is_primary=is_primary, **kwargs)\n    return binary_vec_field\n\n\ndef gen_float16_vec_field(name=ct.default_float_vec_field_name, is_primary=False, dim=ct.default_dim,\n                          description=ct.default_desc, **kwargs):\n    float_vec_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.FLOAT16_VECTOR,\n                                                                   description=description, dim=dim,\n                                                                   is_primary=is_primary, **kwargs)\n    return float_vec_field\n\n\ndef gen_bfloat16_vec_field(name=ct.default_float_vec_field_name, is_primary=False, dim=ct.default_dim,\n                           description=ct.default_desc, **kwargs):\n    float_vec_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.BFLOAT16_VECTOR,\n                                                                   description=description, dim=dim,\n                                                                   is_primary=is_primary, **kwargs)\n    return float_vec_field\n\n\ndef gen_sparse_vec_field(name=ct.default_sparse_vec_field_name, is_primary=False, description=ct.default_desc, **kwargs):\n    sparse_vec_field, _ = ApiFieldSchemaWrapper().init_field_schema(name=name, dtype=DataType.SPARSE_FLOAT_VECTOR,\n                                                                    description=description,\n                                                                    is_primary=is_primary, **kwargs)\n    return sparse_vec_field\n\n\ndef gen_default_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name,\n                                  auto_id=False, dim=ct.default_dim, enable_dynamic_field=False, with_json=True,\n                                  multiple_dim_array=[], is_partition_key=None, vector_data_type=\"FLOAT_VECTOR\",\n                                  **kwargs):\n    if enable_dynamic_field:\n        if primary_field is ct.default_int64_field_name:\n            if is_partition_key is None:\n                fields = [gen_int64_field(), gen_float_vec_field(dim=dim, vector_data_type=vector_data_type)]\n            else:\n                fields = [gen_int64_field(is_partition_key=(is_partition_key == ct.default_int64_field_name)),\n                          gen_float_vec_field(dim=dim, vector_data_type=vector_data_type)]\n        elif primary_field is ct.default_string_field_name:\n            if is_partition_key is None:\n                fields = [gen_string_field(), gen_float_vec_field(dim=dim, vector_data_type=vector_data_type)]\n            else:\n                fields = [gen_string_field(is_partition_key=(is_partition_key == ct.default_string_field_name)),\n                          gen_float_vec_field(dim=dim, vector_data_type=vector_data_type)]\n        else:\n            log.error(\"Primary key only support int or varchar\")\n            assert False\n    else:\n        if is_partition_key is None:\n            int64_field = gen_int64_field()\n            vchar_field = gen_string_field()\n        else:\n            int64_field = gen_int64_field(is_partition_key=(is_partition_key == ct.default_int64_field_name))\n            vchar_field = gen_string_field(is_partition_key=(is_partition_key == ct.default_string_field_name))\n        fields = [int64_field, gen_float_field(), vchar_field, gen_json_field(),\n                  gen_float_vec_field(dim=dim, vector_data_type=vector_data_type)]\n        if with_json is False:\n            fields.remove(gen_json_field())\n\n    if len(multiple_dim_array) != 0:\n        for other_dim in multiple_dim_array:\n            fields.append(gen_float_vec_field(gen_unique_str(\"multiple_vector\"), dim=other_dim,\n                                              vector_data_type=vector_data_type))\n\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id,\n                                                                    enable_dynamic_field=enable_dynamic_field, **kwargs)\n    return schema\n\n\ndef gen_all_datatype_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name,\n                                       auto_id=False, dim=ct.default_dim, enable_dynamic_field=True, **kwargs):\n    fields = [\n        gen_int64_field(),\n        gen_float_field(),\n        gen_string_field(),\n        gen_json_field(),\n        gen_array_field(name=\"array_int\", element_type=DataType.INT64),\n        gen_array_field(name=\"array_float\", element_type=DataType.FLOAT),\n        gen_array_field(name=\"array_varchar\", element_type=DataType.VARCHAR, max_length=200),\n        gen_array_field(name=\"array_bool\", element_type=DataType.BOOL),\n        gen_float_vec_field(dim=dim),\n        gen_float_vec_field(name=\"image_emb\", dim=dim),\n        gen_float_vec_field(name=\"text_emb\", dim=dim),\n        gen_float_vec_field(name=\"voice_emb\", dim=dim),\n    ]\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id,\n                                                                    enable_dynamic_field=enable_dynamic_field, **kwargs)\n    return schema\n\n\ndef gen_array_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name, auto_id=False,\n                                dim=ct.default_dim, enable_dynamic_field=False, max_capacity=ct.default_max_capacity,\n                                max_length=100, with_json=False, **kwargs):\n    if enable_dynamic_field:\n        if primary_field is ct.default_int64_field_name:\n            fields = [gen_int64_field(), gen_float_vec_field(dim=dim)]\n        elif primary_field is ct.default_string_field_name:\n            fields = [gen_string_field(), gen_float_vec_field(dim=dim)]\n        else:\n            log.error(\"Primary key only support int or varchar\")\n            assert False\n    else:\n        fields = [gen_int64_field(), gen_float_vec_field(dim=dim), gen_json_field(),\n                  gen_array_field(name=ct.default_int32_array_field_name, element_type=DataType.INT32,\n                                  max_capacity=max_capacity),\n                  gen_array_field(name=ct.default_float_array_field_name, element_type=DataType.FLOAT,\n                                  max_capacity=max_capacity),\n                  gen_array_field(name=ct.default_string_array_field_name, element_type=DataType.VARCHAR,\n                                  max_capacity=max_capacity, max_length=max_length)]\n        if with_json is False:\n            fields.remove(gen_json_field())\n\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id,\n                                                                    enable_dynamic_field=enable_dynamic_field, **kwargs)\n    return schema\n\n\ndef gen_bulk_insert_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name, with_varchar_field=True,\n                                      auto_id=False, dim=ct.default_dim, enable_dynamic_field=False, with_json=False):\n    if enable_dynamic_field:\n        if primary_field is ct.default_int64_field_name:\n            fields = [gen_int64_field(), gen_float_vec_field(dim=dim)]\n        elif primary_field is ct.default_string_field_name:\n            fields = [gen_string_field(), gen_float_vec_field(dim=dim)]\n        else:\n            log.error(\"Primary key only support int or varchar\")\n            assert False\n    else:\n        fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_json_field(),\n                  gen_float_vec_field(dim=dim)]\n        if with_json is False:\n            fields.remove(gen_json_field())\n        if with_varchar_field is False:\n            fields.remove(gen_string_field())\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id,\n                                                                    enable_dynamic_field=enable_dynamic_field)\n    return schema\n\n\ndef gen_general_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name,\n                                  auto_id=False, is_binary=False, dim=ct.default_dim, **kwargs):\n    if is_binary:\n        fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_binary_vec_field(dim=dim)]\n    else:\n        fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_float_vec_field(dim=dim)]\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id, **kwargs)\n    return schema\n\n\ndef gen_string_pk_default_collection_schema(description=ct.default_desc, primary_field=ct.default_string_field_name,\n                                            auto_id=False, dim=ct.default_dim, **kwargs):\n    fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_json_field(), gen_float_vec_field(dim=dim)]\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id, **kwargs)\n    return schema\n\n\ndef gen_json_default_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name,\n                                       auto_id=False, dim=ct.default_dim, **kwargs):\n    fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_json_field(), gen_float_vec_field(dim=dim)]\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id, **kwargs)\n    return schema\n\n\ndef gen_multiple_json_default_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name,\n                                                auto_id=False, dim=ct.default_dim, **kwargs):\n    fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_json_field(name=\"json1\"),\n              gen_json_field(name=\"json2\"), gen_float_vec_field(dim=dim)]\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id, **kwargs)\n    return schema\n\n\ndef gen_collection_schema_all_datatype(description=ct.default_desc,\n                                       primary_field=ct.default_int64_field_name,\n                                       auto_id=False, dim=ct.default_dim,\n                                       enable_dynamic_field=False, with_json=True, multiple_dim_array=[], **kwargs):\n    if enable_dynamic_field:\n        fields = [gen_int64_field()]\n    else:\n        fields = [gen_int64_field(), gen_int32_field(), gen_int16_field(), gen_int8_field(),\n                  gen_bool_field(), gen_float_field(), gen_double_field(), gen_string_field(),\n                  gen_json_field()]\n        if with_json is False:\n            fields.remove(gen_json_field())\n\n    if len(multiple_dim_array) == 0:\n        fields.append(gen_float_vec_field(dim=dim))\n    else:\n        multiple_dim_array.insert(0, dim)\n        for i in range(len(multiple_dim_array)):\n            fields.append(gen_float_vec_field(name=f\"multiple_vector_{ct.all_float_vector_types[i%3]}\",\n                                              dim=multiple_dim_array[i],\n                                              vector_data_type=ct.all_float_vector_types[i%3]))\n\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                    primary_field=primary_field, auto_id=auto_id,\n                                                                    enable_dynamic_field=enable_dynamic_field, **kwargs)\n    return schema\n\n\ndef gen_collection_schema(fields, primary_field=None, description=ct.default_desc, auto_id=False, **kwargs):\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, primary_field=primary_field,\n                                                                    description=description, auto_id=auto_id, **kwargs)\n    return schema\n\n\ndef gen_default_binary_collection_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name,\n                                         auto_id=False, dim=ct.default_dim, **kwargs):\n    fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_binary_vec_field(dim=dim)]\n    binary_schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                           primary_field=primary_field,\n                                                                           auto_id=auto_id, **kwargs)\n    return binary_schema\n\n\ndef gen_default_sparse_schema(description=ct.default_desc, primary_field=ct.default_int64_field_name,\n                                         auto_id=False, with_json=False, multiple_dim_array=[], **kwargs):\n\n    fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_sparse_vec_field()]\n    if with_json:\n        fields.insert(-1, gen_json_field())\n\n    if len(multiple_dim_array) != 0:\n        for i in range(len(multiple_dim_array)):\n            vec_name = ct.default_sparse_vec_field_name + \"_\" + str(i)\n            vec_field = gen_sparse_vec_field(name=vec_name)\n            fields.append(vec_field)\n    sparse_schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=description,\n                                                                           primary_field=primary_field,\n                                                                           auto_id=auto_id, **kwargs)\n    return sparse_schema\n\n\ndef gen_schema_multi_vector_fields(vec_fields):\n    fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_float_vec_field()]\n    fields.extend(vec_fields)\n    primary_field = ct.default_int64_field_name\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=ct.default_desc,\n                                                                    primary_field=primary_field, auto_id=False)\n    return schema\n\n\ndef gen_schema_multi_string_fields(string_fields):\n    fields = [gen_int64_field(), gen_float_field(), gen_string_field(), gen_float_vec_field()]\n    fields.extend(string_fields)\n    primary_field = ct.default_int64_field_name\n    schema, _ = ApiCollectionSchemaWrapper().init_collection_schema(fields=fields, description=ct.default_desc,\n                                                                    primary_field=primary_field, auto_id=False)\n    return schema\n\n\ndef gen_vectors(nb, dim, vector_data_type=\"FLOAT_VECTOR\"):\n    vectors = []\n    if vector_data_type == \"FLOAT_VECTOR\":\n        vectors = [[random.random() for _ in range(dim)] for _ in range(nb)]\n    elif vector_data_type == \"FLOAT16_VECTOR\":\n        vectors = gen_fp16_vectors(nb, dim)[1]\n    elif vector_data_type == \"BFLOAT16_VECTOR\":\n        vectors = gen_bf16_vectors(nb, dim)[1]\n    elif vector_data_type == \"SPARSE_FLOAT_VECTOR\":\n        vectors = gen_sparse_vectors(nb, dim)\n\n    if dim > 1:\n        if vector_data_type == \"FLOAT_VECTOR\":\n            vectors = preprocessing.normalize(vectors, axis=1, norm='l2')\n            vectors = vectors.tolist()\n    return vectors\n\n\ndef gen_string(nb):\n    string_values = [str(random.random()) for _ in range(nb)]\n    return string_values\n\n\ndef gen_binary_vectors(num, dim):\n    raw_vectors = []\n    binary_vectors = []\n    for _ in range(num):\n        raw_vector = [random.randint(0, 1) for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        # packs a binary-valued array into bits in a unit8 array, and bytes array_of_ints\n        binary_vectors.append(bytes(np.packbits(raw_vector, axis=-1).tolist()))\n    return raw_vectors, binary_vectors\n\n\ndef gen_default_dataframe_data(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=True,\n                               random_primary_key=False, multiple_dim_array=[], multiple_vector_field_name=[],\n                               vector_data_type=\"FLOAT_VECTOR\", auto_id=False, primary_field = ct.default_int64_field_name):\n    if not random_primary_key:\n        int_values = pd.Series(data=[i for i in range(start, start + nb)])\n    else:\n        int_values = pd.Series(data=random.sample(range(start, start + nb), nb))\n    float_values = pd.Series(data=[np.float32(i) for i in range(start, start + nb)], dtype=\"float32\")\n    string_values = pd.Series(data=[str(i) for i in range(start, start + nb)], dtype=\"string\")\n    json_values = [{\"number\": i, \"float\": i*1.0} for i in range(start, start + nb)]\n    float_vec_values = gen_vectors(nb, dim, vector_data_type=vector_data_type)\n    df = pd.DataFrame({\n        ct.default_int64_field_name: int_values,\n        ct.default_float_field_name: float_values,\n        ct.default_string_field_name: string_values,\n        ct.default_json_field_name: json_values,\n        ct.default_float_vec_field_name: float_vec_values\n    })\n\n    if with_json is False:\n        df.drop(ct.default_json_field_name, axis=1, inplace=True)\n    if auto_id is True:\n        if primary_field == ct.default_int64_field_name:\n            df.drop(ct.default_int64_field_name, axis=1, inplace=True)\n        elif primary_field == ct.default_string_field_name:\n            df.drop(ct.default_string_field_name, axis=1, inplace=True)\n    if len(multiple_dim_array) != 0:\n        if len(multiple_vector_field_name) != len(multiple_dim_array):\n            log.error(\"multiple vector feature is enabled, please input the vector field name list \"\n                      \"not including the default vector field\")\n            assert len(multiple_vector_field_name) == len(multiple_dim_array)\n        for i in range(len(multiple_dim_array)):\n            new_float_vec_values = gen_vectors(nb, multiple_dim_array[i], vector_data_type=vector_data_type)\n            df[multiple_vector_field_name[i]] = new_float_vec_values\n\n    return df\n\n\ndef gen_general_default_list_data(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=True,\n                                  random_primary_key=False, multiple_dim_array=[], multiple_vector_field_name=[],\n                                  vector_data_type=\"FLOAT_VECTOR\", auto_id=False,\n                                  primary_field=ct.default_int64_field_name):\n    insert_list = []\n    if not random_primary_key:\n        int_values = pd.Series(data=[i for i in range(start, start + nb)])\n    else:\n        int_values = pd.Series(data=random.sample(range(start, start + nb), nb))\n    float_values = pd.Series(data=[np.float32(i) for i in range(start, start + nb)], dtype=\"float32\")\n    string_values = pd.Series(data=[str(i) for i in range(start, start + nb)], dtype=\"string\")\n    json_values = [{\"number\": i, \"float\": i*1.0} for i in range(start, start + nb)]\n    float_vec_values = gen_vectors(nb, dim, vector_data_type=vector_data_type)\n    insert_list = [int_values, float_values, string_values]\n\n    if with_json is True:\n        insert_list.append(json_values)\n    insert_list.append(float_vec_values)\n\n    if auto_id is True:\n        if primary_field == ct.default_int64_field_name:\n            index = 0\n        elif primary_field == ct.default_string_field_name:\n            index = 2\n        del insert_list[index]\n    if len(multiple_dim_array) != 0:\n        # if len(multiple_vector_field_name) != len(multiple_dim_array):\n        #     log.error(\"multiple vector feature is enabled, please input the vector field name list \"\n        #               \"not including the default vector field\")\n        #     assert len(multiple_vector_field_name) == len(multiple_dim_array)\n        for i in range(len(multiple_dim_array)):\n            new_float_vec_values = gen_vectors(nb, multiple_dim_array[i], vector_data_type=vector_data_type)\n            insert_list.append(new_float_vec_values)\n\n    return insert_list\n\n\ndef gen_default_rows_data(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=True, multiple_dim_array=[],\n                          multiple_vector_field_name=[], vector_data_type=\"FLOAT_VECTOR\", auto_id=False,\n                          primary_field = ct.default_int64_field_name):\n    array = []\n    for i in range(start, start + nb):\n        dict = {ct.default_int64_field_name: i,\n                ct.default_float_field_name: i*1.0,\n                ct.default_string_field_name: str(i),\n                ct.default_json_field_name: {\"number\": i, \"float\": i*1.0},\n                ct.default_float_vec_field_name: gen_vectors(1, dim, vector_data_type=vector_data_type)[0]\n                }\n        if with_json is False:\n            dict.pop(ct.default_json_field_name, None)\n        if auto_id is True:\n            if primary_field == ct.default_int64_field_name:\n                dict.pop(ct.default_int64_field_name)\n            elif primary_field == ct.default_string_field_name:\n                dict.pop(ct.default_string_field_name)\n        array.append(dict)\n        if len(multiple_dim_array) != 0:\n            for i in range(len(multiple_dim_array)):\n                dict[multiple_vector_field_name[i]] = gen_vectors(1, multiple_dim_array[i],\n                                                                  vector_data_type=vector_data_type)[0]\n    log.debug(\"generated default row data\")\n\n    return array\n\n\ndef gen_json_data_for_diff_json_types(nb=ct.default_nb, start=0, json_type=\"json_embedded_object\"):\n    \"\"\"\n    Method: gen json data for different json types. Refer to RFC7159\n    \"\"\"\n    if json_type == \"json_embedded_object\":                 # a json object with an embedd json object\n        return [{json_type: {\"number\": i, \"level2\": {\"level2_number\": i, \"level2_float\": i*1.0, \"level2_str\": str(i)}, \"float\": i*1.0}, \"str\": str(i)}\n                       for i in range(start, start + nb)]\n    if json_type == \"json_objects_array\":                   # a json-objects array with 2 json objects\n        return [[{\"number\": i, \"level2\": {\"level2_number\": i, \"level2_float\": i*1.0, \"level2_str\": str(i)}, \"float\": i*1.0, \"str\": str(i)},\n                 {\"number\": i, \"level2\": {\"level2_number\": i, \"level2_float\": i*1.0, \"level2_str\": str(i)}, \"float\": i*1.0, \"str\": str(i)}\n                 ] for i in range(start, start + nb)]\n    if json_type == \"json_array\":                           # single array as json value\n        return [[i for i in range(j, j + 10)] for j in range(start, start + nb)]\n    if json_type == \"json_int\":                             # single int as json value\n        return [i for i in range(start, start + nb)]\n    if json_type == \"json_float\":                           # single float as json value\n        return [i*1.0 for i in range(start, start + nb)]\n    if json_type == \"json_string\":                          # single string as json value\n        return [str(i) for i in range(start, start + nb)]\n    if json_type == \"json_bool\":                            # single bool as json value\n        return [bool(i) for i in range(start, start + nb)]\n    else:\n        return []\n\n\ndef gen_default_data_for_upsert(nb=ct.default_nb, dim=ct.default_dim, start=0, size=10000):\n    int_values = pd.Series(data=[i for i in range(start, start + nb)])\n    float_values = pd.Series(data=[np.float32(i + size) for i in range(start, start + nb)], dtype=\"float32\")\n    string_values = pd.Series(data=[str(i + size) for i in range(start, start + nb)], dtype=\"string\")\n    json_values = [{\"number\": i, \"string\": str(i)} for i in range(start, start + nb)]\n    float_vec_values = gen_vectors(nb, dim)\n    df = pd.DataFrame({\n        ct.default_int64_field_name: int_values,\n        ct.default_float_field_name: float_values,\n        ct.default_string_field_name: string_values,\n        ct.default_json_field_name: json_values,\n        ct.default_float_vec_field_name: float_vec_values\n    })\n    return df, float_values\n\n\ndef gen_array_dataframe_data(nb=ct.default_nb, dim=ct.default_dim, start=0, auto_id=False,\n                             array_length=ct.default_max_capacity, with_json=False, random_primary_key=False):\n    if not random_primary_key:\n        int_values = pd.Series(data=[i for i in range(start, start + nb)])\n    else:\n        int_values = pd.Series(data=random.sample(range(start, start + nb), nb))\n    float_vec_values = gen_vectors(nb, dim)\n    json_values = [{\"number\": i, \"float\": i * 1.0} for i in range(start, start + nb)]\n\n    int32_values = pd.Series(data=[[np.int32(j) for j in range(i, i + array_length)] for i in range(start, start + nb)])\n    float_values = pd.Series(data=[[np.float32(j) for j in range(i, i + array_length)] for i in range(start, start + nb)])\n    string_values = pd.Series(data=[[str(j) for j in range(i, i + array_length)] for i in range(start, start + nb)])\n\n    df = pd.DataFrame({\n        ct.default_int64_field_name: int_values,\n        ct.default_float_vec_field_name: float_vec_values,\n        ct.default_json_field_name: json_values,\n        ct.default_int32_array_field_name: int32_values,\n        ct.default_float_array_field_name: float_values,\n        ct.default_string_array_field_name: string_values,\n    })\n    if with_json is False:\n        df.drop(ct.default_json_field_name, axis=1, inplace=True)\n    if auto_id:\n        df.drop(ct.default_int64_field_name, axis=1, inplace=True)\n\n    return df\n\n\ndef gen_dataframe_multi_vec_fields(vec_fields, nb=ct.default_nb):\n    \"\"\"\n    gen dataframe data for fields: int64, float, float_vec and vec_fields\n    :param nb: num of entities, default default_nb\n    :param vec_fields: list of FieldSchema\n    :return: dataframe\n    \"\"\"\n    int_values = pd.Series(data=[i for i in range(0, nb)])\n    float_values = pd.Series(data=[float(i) for i in range(nb)], dtype=\"float32\")\n    string_values = pd.Series(data=[str(i) for i in range(nb)], dtype=\"string\")\n    df = pd.DataFrame({\n        ct.default_int64_field_name: int_values,\n        ct.default_float_field_name: float_values,\n        ct.default_string_field_name: string_values,\n        ct.default_float_vec_field_name: gen_vectors(nb, ct.default_dim)\n    })\n    for field in vec_fields:\n        dim = field.params['dim']\n        if field.dtype == DataType.FLOAT_VECTOR:\n            vec_values = gen_vectors(nb, dim)\n        elif field.dtype == DataType.BINARY_VECTOR:\n            vec_values = gen_binary_vectors(nb, dim)[1]\n        df[field.name] = vec_values\n    return df\n\n\ndef gen_dataframe_multi_string_fields(string_fields, nb=ct.default_nb):\n    \"\"\"\n    gen dataframe data for fields: int64, float, float_vec and vec_fields\n    :param nb: num of entities, default default_nb\n    :param vec_fields: list of FieldSchema\n    :return: dataframe\n    \"\"\"\n    int_values = pd.Series(data=[i for i in range(0, nb)])\n    float_values = pd.Series(data=[float(i) for i in range(nb)], dtype=\"float32\")\n    string_values = pd.Series(data=[str(i) for i in range(nb)], dtype=\"string\")\n    df = pd.DataFrame({\n        ct.default_int64_field_name: int_values,\n        ct.default_float_field_name: float_values,\n        ct.default_string_field_name: string_values,\n        ct.default_float_vec_field_name: gen_vectors(nb, ct.default_dim)\n    })\n    for field in string_fields:\n        if field.dtype == DataType.VARCHAR:\n            string_values = gen_string(nb)\n        df[field.name] = string_values\n    return df\n\n\ndef gen_dataframe_all_data_type(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=True,\n                                auto_id=False, random_primary_key=False, multiple_dim_array=[],\n                                multiple_vector_field_name=[], primary_field=ct.default_int64_field_name):\n    if not random_primary_key:\n        int64_values = pd.Series(data=[i for i in range(start, start + nb)])\n    else:\n        int64_values = pd.Series(data=random.sample(range(start, start + nb), nb))\n    int32_values = pd.Series(data=[np.int32(i) for i in range(start, start + nb)], dtype=\"int32\")\n    int16_values = pd.Series(data=[np.int16(i) for i in range(start, start + nb)], dtype=\"int16\")\n    int8_values = pd.Series(data=[np.int8(i) for i in range(start, start + nb)], dtype=\"int8\")\n    bool_values = pd.Series(data=[np.bool_(i) for i in range(start, start + nb)], dtype=\"bool\")\n    float_values = pd.Series(data=[np.float32(i) for i in range(start, start + nb)], dtype=\"float32\")\n    double_values = pd.Series(data=[np.double(i) for i in range(start, start + nb)], dtype=\"double\")\n    string_values = pd.Series(data=[str(i) for i in range(start, start + nb)], dtype=\"string\")\n    json_values = [{\"number\": i, \"string\": str(i), \"bool\": bool(i),\n                    \"list\": [j for j in range(i, i + ct.default_json_list_length)]} for i in range(start, start + nb)]\n    float_vec_values = gen_vectors(nb, dim)\n    df = pd.DataFrame({\n        ct.default_int64_field_name: int64_values,\n        ct.default_int32_field_name: int32_values,\n        ct.default_int16_field_name: int16_values,\n        ct.default_int8_field_name: int8_values,\n        ct.default_bool_field_name: bool_values,\n        ct.default_float_field_name: float_values,\n        ct.default_double_field_name: double_values,\n        ct.default_string_field_name: string_values,\n        ct.default_json_field_name: json_values\n    })\n\n    if len(multiple_dim_array) == 0:\n        df[ct.default_float_vec_field_name] = float_vec_values\n    else:\n        for i in range(len(multiple_dim_array)):\n            df[multiple_vector_field_name[i]] = gen_vectors(nb, multiple_dim_array[i], ct.all_float_vector_types[i%3])\n\n    if with_json is False:\n        df.drop(ct.default_json_field_name, axis=1, inplace=True)\n    if auto_id:\n        if primary_field == ct.default_int64_field_name:\n            df.drop(ct.default_int64_field_name, axis=1, inplace=True)\n        elif primary_field == ct.default_string_field_name:\n            df.drop(ct.default_string_field_name, axis=1, inplace=True)\n    log.debug(\"generated data completed\")\n\n    return df\n\n\ndef gen_general_list_all_data_type(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=True,\n                                   auto_id=False, random_primary_key=False, multiple_dim_array=[],\n                                   multiple_vector_field_name=[], primary_field=ct.default_int64_field_name):\n    if not random_primary_key:\n        int64_values = pd.Series(data=[i for i in range(start, start + nb)])\n    else:\n        int64_values = pd.Series(data=random.sample(range(start, start + nb), nb))\n    int32_values = pd.Series(data=[np.int32(i) for i in range(start, start + nb)], dtype=\"int32\")\n    int16_values = pd.Series(data=[np.int16(i) for i in range(start, start + nb)], dtype=\"int16\")\n    int8_values = pd.Series(data=[np.int8(i) for i in range(start, start + nb)], dtype=\"int8\")\n    bool_values = pd.Series(data=[np.bool_(i) for i in range(start, start + nb)], dtype=\"bool\")\n    float_values = pd.Series(data=[np.float32(i) for i in range(start, start + nb)], dtype=\"float32\")\n    double_values = pd.Series(data=[np.double(i) for i in range(start, start + nb)], dtype=\"double\")\n    string_values = pd.Series(data=[str(i) for i in range(start, start + nb)], dtype=\"string\")\n    json_values = [{\"number\": i, \"string\": str(i), \"bool\": bool(i),\n                    \"list\": [j for j in range(i, i + ct.default_json_list_length)]} for i in range(start, start + nb)]\n    float_vec_values = gen_vectors(nb, dim)\n    insert_list = [int64_values, int32_values, int16_values, int8_values, bool_values, float_values, double_values,\n                   string_values, json_values]\n\n    if len(multiple_dim_array) == 0:\n        insert_list.append(float_vec_values)\n    else:\n        for i in range(len(multiple_dim_array)):\n            insert_list.append(gen_vectors(nb, multiple_dim_array[i], ct.all_float_vector_types[i%3]))\n\n    if with_json is False:\n        # index = insert_list.index(json_values)\n        del insert_list[8]\n    if auto_id:\n        if primary_field == ct.default_int64_field_name:\n            index = insert_list.index(int64_values)\n        elif primary_field == ct.default_string_field_name:\n            index = insert_list.index(string_values)\n        del insert_list[index]\n    log.debug(\"generated data completed\")\n\n    return insert_list\n\n\ndef gen_default_rows_data_all_data_type(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=True,\n                                        multiple_dim_array=[], multiple_vector_field_name=[], partition_id=0,\n                                        auto_id=False, primary_field=ct.default_int64_field_name):\n    array = []\n    for i in range(start, start + nb):\n        dict = {ct.default_int64_field_name: i,\n                ct.default_int32_field_name: i,\n                ct.default_int16_field_name: i,\n                ct.default_int8_field_name: i,\n                ct.default_bool_field_name: bool(i),\n                ct.default_float_field_name: i*1.0,\n                ct.default_double_field_name: i * 1.0,\n                ct.default_string_field_name: str(i),\n                ct.default_json_field_name: {\"number\": i, \"string\": str(i), \"bool\": bool(i),\n                                             \"list\": [j for j in range(i, i + ct.default_json_list_length)]}\n                }\n        if with_json is False:\n            dict.pop(ct.default_json_field_name, None)\n        if auto_id is True:\n            if primary_field == ct.default_int64_field_name:\n                dict.pop(ct.default_int64_field_name, None)\n            elif primary_field == ct.default_string_field_name:\n                dict.pop(ct.default_string_field_name, None)\n        array.append(dict)\n        if len(multiple_dim_array) == 0:\n            dict[ct.default_float_vec_field_name] = gen_vectors(1, dim)[0]\n        else:\n            for i in range(len(multiple_dim_array)):\n                dict[multiple_vector_field_name[i]] = gen_vectors(nb, multiple_dim_array[i],\n                                                                  ct.all_float_vector_types[i])[0]\n    if len(multiple_dim_array) != 0:\n        with open(ct.rows_all_data_type_file_path + f'_{partition_id}' + f'_dim{dim}.txt', 'wb') as json_file:\n            pickle.dump(array, json_file)\n            log.info(\"generated rows data\")\n\n    return array\n\n\ndef gen_default_binary_dataframe_data(nb=ct.default_nb, dim=ct.default_dim, start=0, auto_id=False,\n                                      primary_field=ct.default_int64_field_name):\n    int_values = pd.Series(data=[i for i in range(start, start + nb)])\n    float_values = pd.Series(data=[np.float32(i) for i in range(start, start + nb)], dtype=\"float32\")\n    string_values = pd.Series(data=[str(i) for i in range(start, start + nb)], dtype=\"string\")\n    binary_raw_values, binary_vec_values = gen_binary_vectors(nb, dim)\n    df = pd.DataFrame({\n        ct.default_int64_field_name: int_values,\n        ct.default_float_field_name: float_values,\n        ct.default_string_field_name: string_values,\n        ct.default_binary_vec_field_name: binary_vec_values\n    })\n    if auto_id is True:\n        if primary_field == ct.default_int64_field_name:\n            df.drop(ct.default_int64_field_name, axis=1, inplace=True)\n        elif primary_field == ct.default_string_field_name:\n            df.drop(ct.default_string_field_name, axis=1, inplace=True)\n\n    return df, binary_raw_values\n\n\ndef gen_default_list_data(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=True):\n    int_values = [i for i in range(start, start + nb)]\n    float_values = [np.float32(i) for i in range(start, start + nb)]\n    string_values = [str(i) for i in range(start, start + nb)]\n    json_values = [{\"number\": i, \"string\": str(i), \"bool\": bool(i), \"list\": [j for j in range(0, i)]}\n                   for i in range(start, start + nb)]\n    float_vec_values = gen_vectors(nb, dim)\n    if with_json is False:\n        data = [int_values, float_values, string_values, float_vec_values]\n    else:\n        data = [int_values, float_values, string_values, json_values, float_vec_values]\n    return data\n\n\ndef gen_default_list_sparse_data(nb=ct.default_nb, dim=ct.default_dim, start=0, with_json=False):\n    int_values = [i for i in range(start, start + nb)]\n    float_values = [np.float32(i) for i in range(start, start + nb)]\n    string_values = [str(i) for i in range(start, start + nb)]\n    json_values = [{\"number\": i, \"string\": str(i), \"bool\": bool(i), \"list\": [j for j in range(0, i)]}\n                   for i in range(start, start + nb)]\n    sparse_vec_values = gen_vectors(nb, dim, vector_data_type=\"SPARSE_VECTOR\")\n    if with_json:\n        data = [int_values, float_values, string_values, json_values, sparse_vec_values]\n    else:\n        data = [int_values, float_values, string_values, sparse_vec_values]\n    return data\n\n\ndef gen_default_list_data_for_bulk_insert(nb=ct.default_nb, varchar_len=2000, with_varchar_field=True):\n    str_value = gen_str_by_length(length=varchar_len)\n    int_values = [i for i in range(nb)]\n    float_values = [np.float32(i) for i in range(nb)]\n    string_values = [f\"{str(i)}_{str_value}\" for i in range(nb)]\n    # in case of large nb, float_vec_values will be too large in memory\n    # then generate float_vec_values in each loop instead of generating all at once during generate npy or json file\n    float_vec_values = []  # placeholder for float_vec\n    data = [int_values, float_values, string_values, float_vec_values]\n    if with_varchar_field is False:\n        data = [int_values, float_values, float_vec_values]\n    return data\n\n\ndef prepare_bulk_insert_data(schema=None,\n                             nb=ct.default_nb,\n                             file_type=\"npy\",\n                             minio_endpoint=\"127.0.0.1:9000\",\n                             bucket_name=\"milvus-bucket\"):\n    schema = gen_default_collection_schema() if schema is None else schema\n    dim = get_dim_by_schema(schema=schema)\n    log.info(f\"start to generate raw data for bulk insert\")\n    t0 = time.time()\n    data = get_column_data_by_schema(schema=schema, nb=nb, skip_vectors=True)\n    log.info(f\"generate raw data for bulk insert cost {time.time() - t0} s\")\n    data_dir = \"/tmp/bulk_insert_data\"\n    Path(data_dir).mkdir(parents=True, exist_ok=True)\n    log.info(f\"schema:{schema}, nb:{nb}, file_type:{file_type}, minio_endpoint:{minio_endpoint}, bucket_name:{bucket_name}\")\n    files = []\n    log.info(f\"generate {file_type} files for bulk insert\")\n    if file_type == \"json\":\n        files = gen_json_files_for_bulk_insert(data, schema, data_dir)\n    if file_type == \"npy\":\n        files = gen_npy_files_for_bulk_insert(data, schema, data_dir)\n    log.info(f\"generated {len(files)} {file_type} files for bulk insert, cost {time.time() - t0} s\")\n    log.info(\"upload file to minio\")\n    client = Minio(minio_endpoint, access_key=\"minioadmin\", secret_key=\"minioadmin\", secure=False)\n    for file_name in files:\n        file_size = os.path.getsize(os.path.join(data_dir, file_name)) / 1024 / 1024\n        t0 = time.time()\n        client.fput_object(bucket_name, file_name, os.path.join(data_dir, file_name))\n        log.info(f\"upload file {file_name} to minio, size: {file_size:.2f} MB, cost {time.time() - t0:.2f} s\")\n    return files\n\n\ndef get_column_data_by_schema(nb=ct.default_nb, schema=None, skip_vectors=False, start=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    fields_not_auto_id = []\n    for field in fields:\n        if not field.auto_id:\n            fields_not_auto_id.append(field)\n    data = []\n    for field in fields_not_auto_id:\n        if field.dtype == DataType.FLOAT_VECTOR and skip_vectors is True:\n            tmp = []\n        else:\n            tmp = gen_data_by_type(field, nb=nb, start=start)\n        data.append(tmp)\n    return data\n\n\ndef get_row_data_by_schema(nb=ct.default_nb, schema=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    fields_not_auto_id = []\n    for field in fields:\n        if not field.auto_id:\n            fields_not_auto_id.append(field)\n    data = []\n    for i in range(nb):\n        tmp = {}\n        for field in fields_not_auto_id:\n            tmp[field.name] = gen_data_by_type(field)\n        data.append(tmp)\n    return data\n\n\ndef get_fields_map(schema=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    fields_map = {}\n    for field in fields:\n        fields_map[field.name] = field.dtype\n    return fields_map\n\n\ndef get_int64_field_name(schema=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype == DataType.INT64:\n            return field.name\n    return None\n\n\ndef get_float_field_name(schema=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype == DataType.FLOAT or field.dtype == DataType.DOUBLE:\n            return field.name\n    return None\n\n\ndef get_float_vec_field_name(schema=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype == DataType.FLOAT_VECTOR:\n            return field.name\n    return None\n\n\ndef get_float_vec_field_name_list(schema=None):\n    vec_fields = []\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype in [DataType.FLOAT_VECTOR, DataType.FLOAT16_VECTOR, DataType.BFLOAT16_VECTOR]:\n            vec_fields.append(field.name)\n    return vec_fields\n\n\ndef get_scalar_field_name_list(schema=None):\n    vec_fields = []\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype in [DataType.BOOL, DataType.INT8, DataType.INT16, DataType.INT32, DataType.INT64, DataType.FLOAT,\n                           DataType.DOUBLE, DataType.VARCHAR]:\n            vec_fields.append(field.name)\n    return vec_fields\n\n\ndef get_binary_vec_field_name(schema=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype == DataType.BINARY_VECTOR:\n            return field.name\n    return None\n\n\ndef get_binary_vec_field_name_list(schema=None):\n    vec_fields = []\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype in [DataType.BINARY_VECTOR]:\n            vec_fields.append(field.name)\n    return vec_fields\n\n\ndef get_dim_by_schema(schema=None):\n    if schema is None:\n        schema = gen_default_collection_schema()\n    fields = schema.fields\n    for field in fields:\n        if field.dtype == DataType.FLOAT_VECTOR or field.dtype == DataType.BINARY_VECTOR:\n            dim = field.params['dim']\n            return dim\n    return None\n\n\ndef gen_data_by_type(field, nb=None, start=None):\n    # if nb is None, return one data, else return a list of data\n    data_type = field.dtype\n    if data_type == DataType.BOOL:\n        if nb is None:\n            return random.choice([True, False])\n        return [random.choice([True, False]) for _ in range(nb)]\n    if data_type == DataType.INT8:\n        if nb is None:\n            return random.randint(-128, 127)\n        return [random.randint(-128, 127) for _ in range(nb)]\n    if data_type == DataType.INT16:\n        if nb is None:\n            return random.randint(-32768, 32767)\n        return [random.randint(-32768, 32767) for _ in range(nb)]\n    if data_type == DataType.INT32:\n        if nb is None:\n            return random.randint(-2147483648, 2147483647)\n        return [random.randint(-2147483648, 2147483647) for _ in range(nb)]\n    if data_type == DataType.INT64:\n        if nb is None:\n            return random.randint(-9223372036854775808, 9223372036854775807)\n        if start is not None:\n            return [i for i in range(start, start+nb)]\n        return [random.randint(-9223372036854775808, 9223372036854775807) for _ in range(nb)]\n    if data_type == DataType.FLOAT:\n        if nb is None:\n            return np.float32(random.random())\n        return [np.float32(random.random()) for _ in range(nb)]\n    if data_type == DataType.DOUBLE:\n        if nb is None:\n            return np.float64(random.random())\n        return [np.float64(random.random()) for _ in range(nb)]\n    if data_type == DataType.VARCHAR:\n        max_length = field.params['max_length']\n        max_length = min(20, max_length-1)\n        length = random.randint(0, max_length)\n        if nb is None:\n            return \"\".join([chr(random.randint(97, 122)) for _ in range(length)])\n        return [\"\".join([chr(random.randint(97, 122)) for _ in range(length)]) for _ in range(nb)]\n    if data_type == DataType.JSON:\n        if nb is None:\n            return {\"name\": fake.name(), \"address\": fake.address()}\n        data = [{\"name\": str(i), \"address\": i} for i in range(nb)]\n        return data\n    if data_type == DataType.FLOAT_VECTOR:\n        dim = field.params['dim']\n        if nb is None:\n            return [random.random() for i in range(dim)]\n        return [[random.random() for i in range(dim)] for _ in range(nb)]\n    if data_type == DataType.BFLOAT16_VECTOR:\n        dim = field.params['dim']\n        if nb is None:\n            raw_vector = [random.random() for _ in range(dim)]\n            bf16_vector = jnp.array(raw_vector, dtype=jnp.bfloat16)\n            bf16_vector = np.array(bf16_vector).view(np.uint8).tolist()\n            return bytes(bf16_vector)\n        bf16_vectors = []\n        for i in range(nb):\n            raw_vector = [random.random() for _ in range(dim)]\n            bf16_vector = jnp.array(raw_vector, dtype=jnp.bfloat16)\n            bf16_vector = np.array(bf16_vector).view(np.uint8).tolist()\n            bf16_vectors.append(bytes(bf16_vector))\n        return bf16_vectors\n    if data_type == DataType.FLOAT16_VECTOR:\n        dim = field.params['dim']\n        if nb is None:\n            return [random.random() for i in range(dim)]\n        return [[random.random() for i in range(dim)] for _ in range(nb)]\n    if data_type == DataType.BINARY_VECTOR:\n        dim = field.params['dim']\n        if nb is None:\n            raw_vector = [random.randint(0, 1) for _ in range(dim)]\n            binary_byte = bytes(np.packbits(raw_vector, axis=-1).tolist())\n            return binary_byte\n        return [bytes(np.packbits([random.randint(0, 1) for _ in range(dim)], axis=-1).tolist()) for _ in range(nb)]\n    if data_type == DataType.ARRAY:\n        max_capacity = field.params['max_capacity']\n        element_type = field.element_type\n        if element_type == DataType.INT32:\n            if nb is None:\n                return [random.randint(-2147483648, 2147483647) for _ in range(max_capacity)]\n            return [[random.randint(-2147483648, 2147483647) for _ in range(max_capacity)] for _ in range(nb)]\n        if element_type == DataType.INT64:\n            if nb is None:\n                return [random.randint(-9223372036854775808, 9223372036854775807) for _ in range(max_capacity)]\n            return [[random.randint(-9223372036854775808, 9223372036854775807) for _ in range(max_capacity)] for _ in range(nb)]\n\n        if element_type == DataType.BOOL:\n            if nb is None:\n                return [random.choice([True, False]) for _ in range(max_capacity)]\n            return [[random.choice([True, False]) for _ in range(max_capacity)] for _ in range(nb)]\n\n        if element_type == DataType.FLOAT:\n            if nb is None:\n                return [np.float32(random.random()) for _ in range(max_capacity)]\n            return [[np.float32(random.random()) for _ in range(max_capacity)] for _ in range(nb)]\n        if element_type == DataType.VARCHAR:\n            max_length = field.params['max_length']\n            max_length = min(20, max_length - 1)\n            length = random.randint(0, max_length)\n            if nb is None:\n                return [\"\".join([chr(random.randint(97, 122)) for _ in range(length)]) for _ in range(max_capacity)]\n            return [[\"\".join([chr(random.randint(97, 122)) for _ in range(length)]) for _ in range(max_capacity)] for _ in range(nb)]\n\n    return None\n\n\ndef gen_json_files_for_bulk_insert(data, schema, data_dir):\n    for d in data:\n        if len(d) > 0:\n            nb = len(d)\n    dim = get_dim_by_schema(schema)\n    vec_field_name = get_float_vec_field_name(schema)\n    fields_name = [field.name for field in schema.fields]\n    # get vec field index\n    vec_field_index = fields_name.index(vec_field_name)\n    uuid_str = str(uuid.uuid4())\n    log.info(f\"file dir name: {uuid_str}\")\n    file_name = f\"{uuid_str}/bulk_insert_data_source_dim_{dim}_nb_{nb}.json\"\n    files = [file_name]\n    data_source = os.path.join(data_dir, file_name)\n    Path(data_source).parent.mkdir(parents=True, exist_ok=True)\n    log.info(f\"file name: {data_source}\")\n    with open(data_source, \"w\") as f:\n        f.write(\"{\")\n        f.write(\"\\n\")\n        f.write('\"rows\":[')\n        f.write(\"\\n\")\n        for i in range(nb):\n            entity_value = [None for _ in range(len(fields_name))]\n            for j in range(len(data)):\n                if j == vec_field_index:\n                    entity_value[j] = [random.random() for _ in range(dim)]\n                else:\n                    entity_value[j] = data[j][i]\n            entity = dict(zip(fields_name, entity_value))\n            f.write(json.dumps(entity, indent=4, default=to_serializable))\n            if i != nb - 1:\n                f.write(\",\")\n            f.write(\"\\n\")\n        f.write(\"]\")\n        f.write(\"\\n\")\n        f.write(\"}\")\n    return files\n\n\ndef gen_npy_files_for_bulk_insert(data, schema, data_dir):\n    for d in data:\n        if len(d) > 0:\n            nb = len(d)\n    dim = get_dim_by_schema(schema)\n    vec_field_name = get_float_vec_field_name(schema)\n    fields_name = [field.name for field in schema.fields]\n    files = []\n    uuid_str = uuid.uuid4()\n    for field in fields_name:\n        files.append(f\"{uuid_str}/{field}.npy\")\n    for i, file in enumerate(files):\n        data_source = os.path.join(data_dir, file)\n        #  mkdir for npy file\n        Path(data_source).parent.mkdir(parents=True, exist_ok=True)\n        log.info(f\"save file {data_source}\")\n        if vec_field_name in file:\n            log.info(f\"generate {nb} vectors with dim {dim} for {data_source}\")\n            with NpyAppendArray(data_source, \"wb\") as npaa:\n                for j in range(nb):\n                    vector = np.array([[random.random() for _ in range(dim)]])\n                    npaa.append(vector)\n\n        elif isinstance(data[i][0], dict):\n            tmp = []\n            for d in data[i]:\n                tmp.append(json.dumps(d))\n            data[i] = tmp\n            np.save(data_source, np.array(data[i]))\n        else:\n            np.save(data_source, np.array(data[i]))\n    return files\n\n\ndef gen_default_tuple_data(nb=ct.default_nb, dim=ct.default_dim):\n    int_values = [i for i in range(nb)]\n    float_values = [np.float32(i) for i in range(nb)]\n    string_values = [str(i) for i in range(nb)]\n    float_vec_values = gen_vectors(nb, dim)\n    data = (int_values, float_values, string_values, float_vec_values)\n    return data\n\n\ndef gen_numpy_data(nb=ct.default_nb, dim=ct.default_dim):\n    int_values = np.arange(nb, dtype='int64')\n    float_values = np.arange(nb, dtype='float32')\n    string_values = [np.str_(i) for i in range(nb)]\n    json_values = [{\"number\": i, \"string\": str(i), \"bool\": bool(i),\n                    \"list\": [j for j in range(i, i + ct.default_json_list_length)]} for i in range(nb)]\n    float_vec_values = gen_vectors(nb, dim)\n    data = [int_values, float_values, string_values, json_values, float_vec_values]\n    return data\n\n\ndef gen_default_binary_list_data(nb=ct.default_nb, dim=ct.default_dim):\n    int_values = [i for i in range(nb)]\n    float_values = [np.float32(i) for i in range(nb)]\n    string_values = [str(i) for i in range(nb)]\n    binary_raw_values, binary_vec_values = gen_binary_vectors(nb, dim)\n    data = [int_values, float_values, string_values, binary_vec_values]\n    return data, binary_raw_values\n\n\n\ndef gen_simple_index():\n    index_params = []\n    for i in range(len(ct.all_index_types)):\n        if ct.all_index_types[i] in ct.binary_support:\n            continue\n        dic = {\"index_type\": ct.all_index_types[i], \"metric_type\": \"L2\"}\n        dic.update({\"params\": ct.default_index_params[i]})\n        index_params.append(dic)\n    return index_params\n\n\n\ndef gen_autoindex_params():\n    index_params = [\n        {},\n        {\"metric_type\": \"IP\"},\n        {\"metric_type\": \"L2\"},\n        {\"metric_type\": \"COSINE\"},\n        {\"index_type\": \"AUTOINDEX\"},\n        {\"index_type\": \"AUTOINDEX\", \"metric_type\": \"L2\"},\n        {\"index_type\": \"AUTOINDEX\", \"metric_type\": \"COSINE\"},\n        {\"index_type\": \"IVF_FLAT\", \"metric_type\": \"L2\", \"nlist\": \"1024\", \"m\": \"100\"},\n        {\"index_type\": \"DISKANN\", \"metric_type\": \"L2\"},\n        {\"index_type\": \"IVF_PQ\", \"nlist\": \"128\", \"m\": \"16\", \"nbits\": \"8\", \"metric_type\": \"IP\"},\n        {\"index_type\": \"IVF_SQ8\", \"nlist\": \"128\", \"metric_type\": \"COSINE\"}\n    ]\n    return index_params\n\n\ndef gen_invalid_field_types():\n    field_types = [\n        6,\n        1.0,\n        [[]],\n        {},\n        (),\n        \"\",\n        \"a\"\n    ]\n    return field_types\n\n\ndef gen_invalid_search_params_type():\n    invalid_search_key = 100\n    search_params = []\n    for index_type in ct.all_index_types:\n        if index_type == \"FLAT\":\n            continue\n        # search_params.append({\"index_type\": index_type, \"search_params\": {\"invalid_key\": invalid_search_key}})\n        if index_type in [\"IVF_FLAT\", \"IVF_SQ8\", \"IVF_PQ\"]:\n            for nprobe in ct.get_invalid_ints:\n                ivf_search_params = {\"index_type\": index_type, \"search_params\": {\"nprobe\": nprobe}}\n                search_params.append(ivf_search_params)\n        elif index_type in [\"HNSW\"]:\n            for ef in ct.get_invalid_ints:\n                hnsw_search_param = {\"index_type\": index_type, \"search_params\": {\"ef\": ef}}\n                search_params.append(hnsw_search_param)\n        elif index_type == \"ANNOY\":\n            for search_k in ct.get_invalid_ints:\n                if isinstance(search_k, int):\n                    continue\n                annoy_search_param = {\"index_type\": index_type, \"search_params\": {\"search_k\": search_k}}\n                search_params.append(annoy_search_param)\n        elif index_type == \"SCANN\":\n            for reorder_k in ct.get_invalid_ints:\n                if isinstance(reorder_k, int):\n                    continue\n                scann_search_param = {\"index_type\": index_type, \"search_params\": {\"nprobe\": 8, \"reorder_k\": reorder_k}}\n                search_params.append(scann_search_param)\n        elif index_type == \"DISKANN\":\n            for search_list in ct.get_invalid_ints[1:]:\n                diskann_search_param = {\"index_type\": index_type, \"search_params\": {\"search_list\": search_list}}\n                search_params.append(diskann_search_param)\n    return search_params\n\n\ndef gen_search_param(index_type, metric_type=\"L2\"):\n    search_params = []\n    if index_type in [\"FLAT\", \"IVF_FLAT\", \"IVF_SQ8\", \"IVF_PQ\", \"GPU_IVF_FLAT\", \"GPU_IVF_PQ\"]:\n        if index_type in [\"GPU_FLAT\"]:\n            ivf_search_params = {\"metric_type\": metric_type, \"params\": {}}\n            search_params.append(ivf_search_params)\n        else:\n            for nprobe in [64]:\n                ivf_search_params = {\"metric_type\": metric_type, \"params\": {\"nprobe\": nprobe}}\n                search_params.append(ivf_search_params)\n    elif index_type in [\"BIN_FLAT\", \"BIN_IVF_FLAT\"]:\n        if metric_type not in ct.binary_metrics:\n            log.error(\"Metric type error: binary index only supports distance type in (%s)\" % ct.binary_metrics)\n            # default metric type for binary index\n            metric_type = \"JACCARD\"\n        for nprobe in [64, 128]:\n            binary_search_params = {\"metric_type\": metric_type, \"params\": {\"nprobe\": nprobe}}\n            search_params.append(binary_search_params)\n    elif index_type in [\"HNSW\"]:\n        for ef in [64, 1500, 32768]:\n            hnsw_search_param = {\"metric_type\": metric_type, \"params\": {\"ef\": ef}}\n            search_params.append(hnsw_search_param)\n    elif index_type == \"ANNOY\":\n        for search_k in [1000, 5000]:\n            annoy_search_param = {\"metric_type\": metric_type, \"params\": {\"search_k\": search_k}}\n            search_params.append(annoy_search_param)\n    elif index_type == \"SCANN\":\n        for reorder_k in [1200, 3000]:\n            scann_search_param = {\"metric_type\": metric_type, \"params\": {\"nprobe\": 64, \"reorder_k\": reorder_k}}\n            search_params.append(scann_search_param)\n    elif index_type == \"DISKANN\":\n        for search_list in [20, 300, 1500]:\n            diskann_search_param = {\"metric_type\": metric_type, \"params\": {\"search_list\": search_list}}\n            search_params.append(diskann_search_param)\n    else:\n        log.error(\"Invalid index_type.\")\n        raise Exception(\"Invalid index_type.\")\n    log.debug(search_params)\n\n    return search_params\n\n\ndef gen_autoindex_search_params():\n    search_params = [\n        {},\n        {\"metric_type\": \"IP\"},\n        {\"nlist\": \"1024\"},\n        {\"efSearch\": \"100\"},\n        {\"search_k\": \"1000\"}\n    ]\n    return search_params\n\n\ndef gen_invalid_search_param(index_type, metric_type=\"L2\"):\n    search_params = []\n    if index_type in [\"FLAT\", \"IVF_FLAT\", \"IVF_SQ8\", \"IVF_PQ\"] \\\n            or index_type in [\"BIN_FLAT\", \"BIN_IVF_FLAT\"]:\n        for nprobe in [-1]:\n            ivf_search_params = {\"metric_type\": metric_type, \"params\": {\"nprobe\": nprobe}}\n            search_params.append(ivf_search_params)\n    elif index_type in [\"HNSW\"]:\n        for ef in [-1]:\n            hnsw_search_param = {\"metric_type\": metric_type, \"params\": {\"ef\": ef}}\n            search_params.append(hnsw_search_param)\n    elif index_type == \"ANNOY\":\n        for search_k in [\"-2\"]:\n            annoy_search_param = {\"metric_type\": metric_type, \"params\": {\"search_k\": search_k}}\n            search_params.append(annoy_search_param)\n    elif index_type == \"DISKANN\":\n        for search_list in [\"-1\"]:\n            diskann_search_param = {\"metric_type\": metric_type, \"params\": {\"search_list\": search_list}}\n            search_params.append(diskann_search_param)\n    elif index_type == \"SCANN\":\n        for reorder_k in [-1]:\n            scann_search_param = {\"metric_type\": metric_type, \"params\": {\"reorder_k\": reorder_k, \"nprobe\": 10}}\n            search_params.append(scann_search_param)\n    else:\n        log.error(\"Invalid index_type.\")\n        raise Exception(\"Invalid index_type.\")\n    return search_params\n\n\ndef gen_all_type_fields():\n    fields = []\n    for k, v in DataType.__members__.items():\n        if v != DataType.UNKNOWN:\n            field, _ = ApiFieldSchemaWrapper().init_field_schema(name=k.lower(), dtype=v)\n            fields.append(field)\n    return fields\n\n\ndef gen_normal_expressions():\n    expressions = [\n        \"\",\n        \"int64 > 0\",\n        \"(int64 > 0 && int64 < 400) or (int64 > 500 && int64 < 1000)\",\n        \"int64 not in [1, 2, 3]\",\n        \"int64 in [1, 2, 3] and float != 2\",\n        \"int64 == 0 || float == 10**2 || (int64 + 1) == 3\",\n        \"0 <= int64 < 400 and int64 % 100 == 0\",\n        \"200+300 < int64 <= 500+500\",\n        \"int64 > 400 && int64 < 200\",\n        \"int64 in [300/2, 900%40, -10*30+800, (100+200)*2] or float in [+3**6, 2**10/2]\",\n        \"float <= -4**5/2 && float > 500-1 && float != 500/2+260\"\n    ]\n    return expressions\n\n\ndef gen_json_field_expressions():\n    expressions = [\n        \"json_field['number'] > 0\",\n        \"0 <= json_field['number'] < 400 or 1000 > json_field['number'] >= 500\",\n        \"json_field['number'] not in [1, 2, 3]\",\n        \"json_field['number'] in [1, 2, 3] and json_field['float'] != 2\",\n        \"json_field['number'] == 0 || json_field['float'] == 10**2 || json_field['number'] + 1 == 3\",\n        \"json_field['number'] < 400 and json_field['number'] >= 100 and json_field['number'] % 100 == 0\",\n        \"json_field['float'] > 400 && json_field['float'] < 200\",\n        \"json_field['number'] in [300/2, -10*30+800, (100+200)*2] or json_field['float'] in [+3**6, 2**10/2]\",\n        \"json_field['float'] <= -4**5/2 && json_field['float'] > 500-1 && json_field['float'] != 500/2+260\"\n    ]\n    return expressions\n\n\ndef gen_array_field_expressions():\n    expressions = [\n        \"int32_array[0] > 0\",\n        \"0 <= int32_array[0] < 400 or 1000 > float_array[1] >= 500\",\n        \"int32_array[1] not in [1, 2, 3]\",\n        \"int32_array[1] in [1, 2, 3] and string_array[1] != '2'\",\n        \"int32_array == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\",\n        \"int32_array[1] + 1 == 3 && int32_array[0] - 1 != 1\",\n        \"int32_array[1] % 100 == 0 && string_array[1] in ['1', '2']\",\n        \"int32_array[1] in [300/2, -10*30+800, (200-100)*2] \"\n        \"or (float_array[1] <= -4**5/2 || 100 <= int32_array[1] < 200)\"\n    ]\n    return expressions\n\n\ndef gen_field_compare_expressions(fields1=None, fields2=None):\n    if fields1 is None:\n        fields1 = [\"int64_1\"]\n        fields2 = [\"int64_2\"]\n    expressions = []\n    for field1, field2 in zip(fields1, fields2):\n        expression = [\n            f\"{field1} | {field2} == 1\",\n            f\"{field1} + {field2} <= 10 || {field1} - {field2} == 2\",\n            f\"{field1} * {field2} >= 8 && {field1} / {field2} < 2\",\n            f\"{field1} ** {field2} != 4 and {field1} + {field2} > 5\",\n            f\"{field1} not in {field2}\",\n            f\"{field1} in {field2}\",\n        ]\n        expressions.extend(expression)\n    return expressions\n\n\ndef gen_normal_string_expressions(fields=None):\n    if fields is None:\n        fields = [ct.default_string_field_name]\n    expressions = []\n    for field in fields:\n        expression = [\n            f\"\\\"0\\\"< {field} < \\\"3\\\"\",\n            f\"{field} >= \\\"0\\\"\",\n            f\"({field} > \\\"0\\\" && {field} < \\\"100\\\") or ({field} > \\\"200\\\" && {field} < \\\"300\\\")\",\n            f\"\\\"0\\\" <= {field} <= \\\"100\\\"\",\n            f\"{field} == \\\"0\\\"|| {field} == \\\"1\\\"|| {field} ==\\\"2\\\"\",\n            f\"{field} != \\\"0\\\"\",\n            f\"{field} not in [\\\"0\\\", \\\"1\\\", \\\"2\\\"]\",\n            f\"{field} in [\\\"0\\\", \\\"1\\\", \\\"2\\\"]\"\n        ]\n        expressions.extend(expression)\n    return expressions\n\n\ndef gen_invalid_string_expressions():\n    expressions = [\n        \"varchar in [0, \\\"1\\\"]\",\n        \"varchar not in [\\\"0\\\", 1, 2]\"\n    ]\n    return expressions\n\n\ndef gen_invalid_bool_expressions():\n    expressions = [\n        \"bool\",\n        \"!bool\",\n        \"true\",\n        \"false\",\n        \"int64 > 0 and bool\",\n        \"int64 > 0 or false\"\n    ]\n    return expressions\n\n\ndef gen_normal_expressions_field(field):\n    expressions = [\n        \"\",\n        f\"{field} > 0\",\n        f\"({field} > 0 && {field} < 400) or ({field} > 500 && {field} < 1000)\",\n        f\"{field} not in [1, 2, 3]\",\n        f\"{field} in [1, 2, 3] and {field} != 2\",\n        f\"{field} == 0 || {field} == 1 || {field} == 2\",\n        f\"0 < {field} < 400\",\n        f\"500 <= {field} <= 1000\",\n        f\"200+300 <= {field} <= 500+500\",\n        f\"{field} in [300/2, 900%40, -10*30+800, 2048/2%200, (100+200)*2]\",\n        f\"{field} in [+3**6, 2**10/2]\",\n        f\"{field} <= 4**5/2 && {field} > 500-1 && {field} != 500/2+260\",\n        f\"{field} > 400 && {field} < 200\",\n        f\"{field} < -2**8\",\n        f\"({field} + 1) == 3 || {field} * 2 == 64 || {field} == 10**2\"\n    ]\n    return expressions\n\n\ndef gen_integer_overflow_expressions():\n    expressions = [\n        \"int8 < - 128\",\n        \"int8 > 127\",\n        \"int8 > -129 && int8 < 128\",\n        \"int16 < -32768\",\n        \"int16 >= 32768\",\n        \"int16 > -32769 && int16 <32768\",\n        \"int32 < -2147483648\",\n        \"int32 == 2147483648\",\n        \"int32 < 2147483648 || int32 == -2147483648\",\n        \"int8 in  [-129, 1] || int16 in [32769] || int32 in [2147483650, 0]\"\n    ]\n    return expressions\n\n\ndef l2(x, y):\n    return np.linalg.norm(np.array(x) - np.array(y))\n\n\ndef ip(x, y):\n    return np.inner(np.array(x), np.array(y))\n\n\ndef cosine(x, y):\n    return np.dot(x, y)/(np.linalg.norm(x)*np.linalg.norm(y))\n\n\ndef jaccard(x, y):\n    x = np.asarray(x, np.bool_)\n    y = np.asarray(y, np.bool_)\n    return 1 - np.double(np.bitwise_and(x, y).sum()) / np.double(np.bitwise_or(x, y).sum())\n\n\ndef hamming(x, y):\n    x = np.asarray(x, np.bool_)\n    y = np.asarray(y, np.bool_)\n    return np.bitwise_xor(x, y).sum()\n\n\ndef tanimoto(x, y):\n    x = np.asarray(x, np.bool_)\n    y = np.asarray(y, np.bool_)\n    res = np.double(np.bitwise_and(x, y).sum()) / np.double(np.bitwise_or(x, y).sum())\n    if res == 0:\n        value = float(\"inf\")\n    else:\n        value = -np.log2(res)\n    return value\n\n\ndef tanimoto_calc(x, y):\n    x = np.asarray(x, np.bool_)\n    y = np.asarray(y, np.bool_)\n    return np.double((len(x) - np.bitwise_xor(x, y).sum())) / (len(y) + np.bitwise_xor(x, y).sum())\n\n\ndef substructure(x, y):\n    x = np.asarray(x, np.bool_)\n    y = np.asarray(y, np.bool_)\n    return 1 - np.double(np.bitwise_and(x, y).sum()) / np.count_nonzero(y)\n\n\ndef superstructure(x, y):\n    x = np.asarray(x, np.bool_)\n    y = np.asarray(y, np.bool_)\n    return 1 - np.double(np.bitwise_and(x, y).sum()) / np.count_nonzero(x)\n\n\ndef compare_distance_2d_vector(x, y, distance, metric, sqrt):\n    for i in range(len(x)):\n        for j in range(len(y)):\n            if metric == \"L2\":\n                distance_i = l2(x[i], y[j])\n                if not sqrt:\n                    distance_i = math.pow(distance_i, 2)\n            elif metric == \"IP\":\n                distance_i = ip(x[i], y[j])\n            elif metric == \"HAMMING\":\n                distance_i = hamming(x[i], y[j])\n            elif metric == \"TANIMOTO\":\n                distance_i = tanimoto_calc(x[i], y[j])\n            elif metric == \"JACCARD\":\n                distance_i = jaccard(x[i], y[j])\n            else:\n                raise Exception(\"metric type is invalid\")\n            assert abs(distance_i - distance[i][j]) < ct.epsilon\n\n    return True\n\n\ndef compare_distance_vector_and_vector_list(x, y, metric, distance):\n    \"\"\"\n    target: compare the distance between x and y[i] with the expected distance array\n    method: compare the distance between x and y[i] with the expected distance array\n    expected: return true if all distances are matched\n    \"\"\"\n    if not isinstance(y, list):\n        log.error(\"%s is not a list.\" % str(y))\n        assert False\n    for i in range(len(y)):\n        if metric == \"L2\":\n            distance_i = l2(x, y[i])\n        elif metric == \"IP\":\n            distance_i = ip(x, y[i])\n        elif metric == \"COSINE\":\n            distance_i = cosine(x, y[i])\n        else:\n            raise Exception(\"metric type is invalid\")\n        if abs(distance_i - distance[i]) > ct.epsilon:\n            log.error(\"The distance between %f and %f is not equal with %f\" % (x, y[i], distance[i]))\n            assert abs(distance_i - distance[i]) < ct.epsilon\n\n    return True\n\n\ndef modify_file(file_path_list, is_modify=False, input_content=\"\"):\n    \"\"\"\n    file_path_list : file list -> list[<file_path>]\n    is_modify : does the file need to be reset\n    input_content ：the content that need to insert to the file\n    \"\"\"\n    if not isinstance(file_path_list, list):\n        log.error(\"[modify_file] file is not a list.\")\n\n    for file_path in file_path_list:\n        folder_path, file_name = os.path.split(file_path)\n        if not os.path.isdir(folder_path):\n            log.debug(\"[modify_file] folder(%s) is not exist.\" % folder_path)\n            os.makedirs(folder_path)\n\n        if not os.path.isfile(file_path):\n            log.error(\"[modify_file] file(%s) is not exist.\" % file_path)\n        else:\n            if is_modify is True:\n                log.debug(\"[modify_file] start modifying file(%s)...\" % file_path)\n                with open(file_path, \"r+\") as f:\n                    f.seek(0)\n                    f.truncate()\n                    f.write(input_content)\n                    f.close()\n                log.info(\"[modify_file] file(%s) modification is complete.\" % file_path_list)\n\n\ndef index_to_dict(index):\n    return {\n        \"collection_name\": index.collection_name,\n        \"field_name\": index.field_name,\n        # \"name\": index.name,\n        \"params\": index.params\n    }\n\n\ndef get_index_params_params(index_type):\n    \"\"\"get default params of index params  by index type\"\"\"\n    return ct.default_all_indexes_params[ct.all_index_types.index(index_type)]\n\n\ndef get_search_params_params(index_type):\n    \"\"\"get default params of search params by index type\"\"\"\n    return ct.default_all_search_params_params[ct.all_index_types.index(index_type)]\n\n\ndef assert_json_contains(expr, list_data):\n    opposite = False\n    if expr.startswith(\"not\"):\n        opposite = True\n        expr = expr.split(\"not \", 1)[1]\n    result_ids = []\n    expr_prefix = expr.split('(', 1)[0]\n    exp_ids = eval(expr.split(', ', 1)[1].split(')', 1)[0])\n    if expr_prefix in [\"json_contains\", \"JSON_CONTAINS\", \"array_contains\", \"ARRAY_CONTAINS\"]:\n        for i in range(len(list_data)):\n            if exp_ids in list_data[i]:\n                result_ids.append(i)\n    elif expr_prefix in [\"json_contains_all\", \"JSON_CONTAINS_ALL\", \"array_contains_all\", \"ARRAY_CONTAINS_ALL\"]:\n        for i in range(len(list_data)):\n            set_list_data = set(tuple(element) if isinstance(element, list) else element for element in list_data[i])\n            if set(exp_ids).issubset(set_list_data):\n                result_ids.append(i)\n    elif expr_prefix in [\"json_contains_any\", \"JSON_CONTAINS_ANY\", \"array_contains_any\", \"ARRAY_CONTAINS_ANY\"]:\n        for i in range(len(list_data)):\n            set_list_data = set(tuple(element) if isinstance(element, list) else element for element in list_data[i])\n            if set(exp_ids) & set_list_data:\n                result_ids.append(i)\n    else:\n        log.warning(\"unknown expr: %s\" % expr)\n    if opposite:\n        result_ids = [i for i in range(len(list_data)) if i not in result_ids]\n    return result_ids\n\n\ndef assert_equal_index(index_1, index_2):\n    return index_to_dict(index_1) == index_to_dict(index_2)\n\n\ndef gen_partitions(collection_w, partition_num=1):\n    \"\"\"\n    target: create extra partitions except for _default\n    method: create more than one partitions\n    expected: return collection and raw data\n    \"\"\"\n    log.info(\"gen_partitions: creating partitions\")\n    for i in range(partition_num):\n        partition_name = \"search_partition_\" + str(i)\n        collection_w.create_partition(partition_name=partition_name,\n                                      description=\"search partition\")\n    par = collection_w.partitions\n    assert len(par) == (partition_num + 1)\n    log.info(\"gen_partitions: created partitions %s\" % par)\n\n\ndef insert_data(collection_w, nb=ct.default_nb, is_binary=False, is_all_data_type=False,\n                auto_id=False, dim=ct.default_dim, insert_offset=0, enable_dynamic_field=False, with_json=True,\n                random_primary_key=False, multiple_dim_array=[], primary_field=ct.default_int64_field_name,\n                vector_data_type=\"FLOAT_VECTOR\"):\n    \"\"\"\n    target: insert non-binary/binary data\n    method: insert non-binary/binary data into partitions if any\n    expected: return collection and raw data\n    \"\"\"\n    # par = collection_w.partitions\n    # num = len(par)\n    num = 1\n    vectors = []\n    binary_raw_vectors = []\n    insert_ids = []\n    start = insert_offset\n    log.info(f\"inserting {nb} data into collection {collection_w.name}\")\n    # extract the vector field name list\n    vector_name_list = extract_vector_field_name_list(collection_w)\n    # prepare data\n    for i in range(num):\n        log.debug(\"Dynamic field is enabled: %s\" % enable_dynamic_field)\n        if not is_binary:\n            if not is_all_data_type:\n                if not enable_dynamic_field:\n                    if vector_data_type == \"FLOAT_VECTOR\":\n                        default_data = gen_default_dataframe_data(nb // num, dim=dim, start=start, with_json=with_json,\n                                                                  random_primary_key=random_primary_key,\n                                                                  multiple_dim_array=multiple_dim_array,\n                                                                  multiple_vector_field_name=vector_name_list,\n                                                                  vector_data_type=vector_data_type,\n                                                                  auto_id=auto_id, primary_field=primary_field)\n                    elif vector_data_type in ct.append_vector_type:\n                        default_data = gen_general_default_list_data(nb // num, dim=dim, start=start, with_json=with_json,\n                                                                     random_primary_key=random_primary_key,\n                                                                     multiple_dim_array=multiple_dim_array,\n                                                                     multiple_vector_field_name=vector_name_list,\n                                                                     vector_data_type=vector_data_type,\n                                                                     auto_id=auto_id, primary_field=primary_field)\n\n                else:\n                    default_data = gen_default_rows_data(nb // num, dim=dim, start=start, with_json=with_json,\n                                                         multiple_dim_array=multiple_dim_array,\n                                                         multiple_vector_field_name=vector_name_list,\n                                                         vector_data_type=vector_data_type,\n                                                         auto_id=auto_id, primary_field=primary_field)\n\n            else:\n                if not enable_dynamic_field:\n                    if vector_data_type == \"FLOAT_VECTOR\":\n                        default_data = gen_general_list_all_data_type(nb // num, dim=dim, start=start, with_json=with_json,\n                                                                      random_primary_key=random_primary_key,\n                                                                      multiple_dim_array=multiple_dim_array,\n                                                                      multiple_vector_field_name=vector_name_list,\n                                                                      auto_id=auto_id, primary_field=primary_field)\n                    elif vector_data_type == \"FLOAT16_VECTOR\" or \"BFLOAT16_VECTOR\":\n                        default_data = gen_general_list_all_data_type(nb // num, dim=dim, start=start, with_json=with_json,\n                                                                      random_primary_key=random_primary_key,\n                                                                      multiple_dim_array=multiple_dim_array,\n                                                                      multiple_vector_field_name=vector_name_list,\n                                                                      auto_id=auto_id, primary_field=primary_field)\n                else:\n                    if os.path.exists(ct.rows_all_data_type_file_path + f'_{i}' + f'_dim{dim}.txt'):\n                        with open(ct.rows_all_data_type_file_path + f'_{i}' + f'_dim{dim}.txt', 'rb') as f:\n                            default_data = pickle.load(f)\n                    else:\n                        default_data = gen_default_rows_data_all_data_type(nb // num, dim=dim, start=start,\n                                                                           with_json=with_json,\n                                                                           multiple_dim_array=multiple_dim_array,\n                                                                           multiple_vector_field_name=vector_name_list,\n                                                                           partition_id=i, auto_id=auto_id,\n                                                                           primary_field=primary_field)\n        else:\n            default_data, binary_raw_data = gen_default_binary_dataframe_data(nb // num, dim=dim, start=start,\n                                                                              auto_id=auto_id,\n                                                                              primary_field=primary_field)\n            binary_raw_vectors.extend(binary_raw_data)\n        insert_res = collection_w.insert(default_data)[0]\n        log.info(f\"inserted {nb // num} data into collection {collection_w.name}\")\n        time_stamp = insert_res.timestamp\n        insert_ids.extend(insert_res.primary_keys)\n        vectors.append(default_data)\n        start += nb // num\n    return collection_w, vectors, binary_raw_vectors, insert_ids, time_stamp\n\n\ndef _check_primary_keys(primary_keys, nb):\n    if primary_keys is None:\n        raise Exception(\"The primary_keys is None\")\n    assert len(primary_keys) == nb\n    for i in range(nb - 1):\n        if primary_keys[i] >= primary_keys[i + 1]:\n            return False\n    return True\n\n\ndef get_segment_distribution(res):\n    \"\"\"\n    Get segment distribution\n    \"\"\"\n    from collections import defaultdict\n    segment_distribution = defaultdict(lambda: {\"sealed\": []})\n    for r in res:\n        for node_id in r.nodeIds:\n            if r.state == 3:\n                segment_distribution[node_id][\"sealed\"].append(r.segmentID)\n\n    return segment_distribution\n\n\ndef percent_to_int(string):\n    \"\"\"\n    transform percent(0%--100%) to int\n    \"\"\"\n\n    new_int = -1\n    if not isinstance(string, str):\n        log.error(\"%s is not a string\" % string)\n        return new_int\n    if \"%\" not in string:\n        log.error(\"%s is not a percent\" % string)\n    else:\n        new_int = int(string.strip(\"%\"))\n\n    return new_int\n\n\ndef gen_grant_list(collection_name):\n    grant_list = [{\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Load\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Release\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Compaction\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Delete\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"GetStatistics\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"CreateIndex\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"IndexDetail\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"DropIndex\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Search\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Flush\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Query\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"LoadBalance\"},\n                  {\"object\": \"Collection\", \"object_name\": collection_name, \"privilege\": \"Import\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"All\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"CreateCollection\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"DropCollection\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"DescribeCollection\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"ShowCollections\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"CreateOwnership\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"DropOwnership\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"SelectOwnership\"},\n                  {\"object\": \"Global\", \"object_name\": \"*\", \"privilege\": \"ManageOwnership\"},\n                  {\"object\": \"User\", \"object_name\": \"*\", \"privilege\": \"UpdateUser\"},\n                  {\"object\": \"User\", \"object_name\": \"*\", \"privilege\": \"SelectUser\"}]\n    return grant_list\n\n\ndef install_milvus_operator_specific_config(namespace, milvus_mode, release_name, image,\n                                            rate_limit_enable, collection_rate_limit):\n    \"\"\"\n    namespace : str\n    milvus_mode : str -> standalone or cluster\n    release_name : str\n    image: str -> image tag including repository\n    rate_limit_enable: str -> true or false, switch for rate limit\n    collection_rate_limit: int -> collection rate limit numbers\n    input_content ：the content that need to insert to the file\n    return: milvus host name\n    \"\"\"\n\n    if not isinstance(namespace, str):\n        log.error(\"[namespace] is not a string.\")\n\n    if not isinstance(milvus_mode, str):\n        log.error(\"[milvus_mode] is not a string.\")\n\n    if not isinstance(release_name, str):\n        log.error(\"[release_name] is not a string.\")\n\n    if not isinstance(image, str):\n        log.error(\"[image] is not a string.\")\n\n    if not isinstance(rate_limit_enable, str):\n        log.error(\"[rate_limit_enable] is not a string.\")\n\n    if not isinstance(collection_rate_limit, int):\n        log.error(\"[collection_rate_limit] is not an integer.\")\n\n    if milvus_mode not in [\"standalone\", \"cluster\"]:\n        log.error(\"[milvus_mode] is not 'standalone' or 'cluster'\")\n\n    if rate_limit_enable not in [\"true\", \"false\"]:\n        log.error(\"[rate_limit_enable] is not 'true' or 'false'\")\n\n    data_config = {\n        'metadata.namespace': namespace,\n        'spec.mode': milvus_mode,\n        'metadata.name': release_name,\n        'spec.components.image': image,\n        'spec.components.proxy.serviceType': 'LoadBalancer',\n        'spec.components.dataNode.replicas': 2,\n        'spec.config.common.retentionDuration': 60,\n        'spec.config.quotaAndLimits.enable': rate_limit_enable,\n        'spec.config.quotaAndLimits.ddl.collectionRate': collection_rate_limit,\n    }\n    mil = MilvusOperator()\n    mil.install(data_config)\n    if mil.wait_for_healthy(release_name, NAMESPACE, timeout=TIMEOUT):\n        host = mic.endpoint(release_name, NAMESPACE).split(':')[0]\n    else:\n        raise MilvusException(message=f'Milvus healthy timeout 1800s')\n\n    return host\n\n\ndef get_wildcard_output_field_names(collection_w, output_fields):\n    all_fields = [field.name for field in collection_w.schema.fields]\n    output_fields = output_fields.copy()\n    if \"*\" in output_fields:\n        output_fields.remove(\"*\")\n        output_fields.extend(all_fields)\n    return output_fields\n\n\ndef extract_vector_field_name_list(collection_w):\n    \"\"\"\n    extract the vector field name list\n    collection_w : the collection object to be extracted thea name of all the vector fields\n    return: the vector field name list without the default float vector field name\n    \"\"\"\n    schema_dict = collection_w.schema.to_dict()\n    fields = schema_dict.get('fields')\n    vector_name_list = []\n    for field in fields:\n        if field['type'] == DataType.FLOAT_VECTOR \\\n                or field['type'] == DataType.FLOAT16_VECTOR \\\n                or field['type'] == DataType.BFLOAT16_VECTOR \\\n                or field['type'] == DataType.SPARSE_FLOAT_VECTOR:\n            if field['name'] != ct.default_float_vec_field_name:\n                vector_name_list.append(field['name'])\n\n    return vector_name_list\n\n\ndef get_activate_func_from_metric_type(metric_type):\n    activate_function = lambda x: x\n    if metric_type == \"COSINE\":\n        activate_function = lambda x: (1 + x) * 0.5\n    elif metric_type == \"IP\":\n        activate_function = lambda x: 0.5 + math.atan(x)/ math.pi\n    else:\n        activate_function  = lambda x: 1.0 - 2*math.atan(x) / math.pi\n    return activate_function\n\n\ndef get_hybrid_search_base_results_rrf(search_res_dict_array, round_decimal=-1):\n    \"\"\"\n    merge the element in the dicts array\n    search_res_dict_array : the dict array in which the elements to be merged\n    return: the sorted id and score answer\n    \"\"\"\n    # calculate hybrid search base line\n\n    search_res_dict_merge = {}\n    ids_answer = []\n    score_answer = []\n\n    for i, result in enumerate(search_res_dict_array, 0):\n        for key, distance in result.items():\n            search_res_dict_merge[key] = search_res_dict_merge.get(key, 0) + distance\n\n    if round_decimal != -1 :\n        for k, v in search_res_dict_merge.items():\n            multiplier = math.pow(10.0, round_decimal)\n            v = math.floor(v*multiplier+0.5) / multiplier\n            search_res_dict_merge[k] = v\n\n    sorted_list = sorted(search_res_dict_merge.items(), key=lambda x: x[1], reverse=True)\n\n    for sort in sorted_list:\n        ids_answer.append(int(sort[0]))\n        score_answer.append(float(sort[1]))\n\n    return ids_answer, score_answer\n\n\ndef get_hybrid_search_base_results(search_res_dict_array, weights, metric_types, round_decimal=-1):\n    \"\"\"\n    merge the element in the dicts array\n    search_res_dict_array : the dict array in which the elements to be merged\n    return: the sorted id and score answer\n    \"\"\"\n    # calculate hybrid search base line\n\n    search_res_dict_merge = {}\n    ids_answer = []\n    score_answer = []\n\n    for i, result in enumerate(search_res_dict_array, 0):\n        activate_function = get_activate_func_from_metric_type(metric_types[i])\n        for key, distance in result.items():\n            activate_distance = activate_function(distance)\n            weight = weights[i]\n            search_res_dict_merge[key] = search_res_dict_merge.get(key, 0) + activate_function(distance) * weights[i]\n\n    if round_decimal != -1 :\n        for k, v in search_res_dict_merge.items():\n            multiplier = math.pow(10.0, round_decimal)\n            v = math.floor(v*multiplier+0.5) / multiplier\n            search_res_dict_merge[k] = v\n\n    sorted_list = sorted(search_res_dict_merge.items(), key=lambda x: x[1], reverse=True)\n\n    for sort in sorted_list:\n        ids_answer.append(int(sort[0]))\n        score_answer.append(float(sort[1]))\n\n    return ids_answer, score_answer\n\n\ndef gen_bf16_vectors(num, dim):\n    \"\"\"\n    generate brain float16 vector data\n    raw_vectors : the vectors\n    bf16_vectors: the bytes used for insert\n    return: raw_vectors and bf16_vectors\n    \"\"\"\n    raw_vectors = []\n    bf16_vectors = []\n    for _ in range(num):\n        raw_vector = [random.random() for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        bf16_vector = tf.cast(raw_vector, dtype=tf.bfloat16).numpy()\n        bf16_vectors.append(bf16_vector)\n\n    return raw_vectors, bf16_vectors\n\n\ndef gen_fp16_vectors(num, dim):\n    \"\"\"\n    generate float16 vector data\n    raw_vectors : the vectors\n    fp16_vectors: the bytes used for insert\n    return: raw_vectors and fp16_vectors\n    \"\"\"\n    raw_vectors = []\n    fp16_vectors = []\n    for _ in range(num):\n        raw_vector = [random.random() for _ in range(dim)]\n        raw_vectors.append(raw_vector)\n        fp16_vector = np.array(raw_vector, dtype=np.float16)\n        fp16_vectors.append(fp16_vector)\n\n    return raw_vectors, fp16_vectors\n\n\ndef gen_sparse_vectors(nb, dim):\n    \"\"\"\n    generate sparse vector data\n    return sparse_vectors\n    \"\"\"\n    rng = np.random.default_rng()\n    entities = [\n        {\n         d: rng.random() for d in random.sample(range(dim), random.randint(1, 1))\n        }\n        for _ in range(nb)\n    ]\n    return entities\n\n\ndef gen_vectors_based_on_vector_type(num, dim, vector_data_type):\n    \"\"\"\n    generate float16 vector data\n    raw_vectors : the vectors\n    fp16_vectors: the bytes used for insert\n    return: raw_vectors and fp16_vectors\n    \"\"\"\n    if vector_data_type == \"FLOAT_VECTOR\":\n        vectors = [[random.random() for _ in range(dim)] for _ in range(num)]\n    elif vector_data_type == \"FLOAT16_VECTOR\":\n        vectors = gen_fp16_vectors(num, dim)[1]\n    elif vector_data_type == \"BFLOAT16_VECTOR\":\n        vectors = gen_bf16_vectors(num, dim)[1]\n\n    return vectors"
  },
  {
    "path": "tests/common/common_type.py",
    "content": "\"\"\" Initialized parameters \"\"\"\nport = 19530\nepsilon = 0.000001\nnamespace = \"milvus\"\ndefault_flush_interval = 1\nbig_flush_interval = 1000\ndefault_drop_interval = 3\ndefault_dim = 128\ndefault_nb = 1000\ndefault_nb_medium = 5000\ndefault_max_capacity = 100\ndefault_top_k = 10\ndefault_nq = 2\ndefault_limit = 10\ndefault_batch_size = 1000\nmax_limit = 16384\ndefault_search_params = {\"metric_type\": \"COSINE\", \"params\": {\"nprobe\": 10}}\ndefault_search_ip_params = {\"metric_type\": \"IP\", \"params\": {\"nprobe\": 10}}\ndefault_search_binary_params = {\"metric_type\": \"JACCARD\", \"params\": {\"nprobe\": 10}}\ndefault_index = {\"index_type\": \"IVF_SQ8\", \"metric_type\": \"COSINE\", \"params\": {\"nlist\": 64}}\ndefault_binary_index = {\"index_type\": \"BIN_IVF_FLAT\", \"params\": {\"nlist\": 128}, \"metric_type\": \"JACCARD\"}\ndefault_diskann_index = {\"index_type\": \"DISKANN\", \"metric_type\": \"COSINE\", \"params\": {}}\ndefault_diskann_search_params = {\"metric_type\": \"COSINE\", \"params\": {\"search_list\": 30}}\nmax_top_k = 16384\nmax_partition_num = 4096\nmax_role_num = 10\ndefault_partition_num = 64   # default num_partitions for partition key feature\ndefault_segment_row_limit = 1000\ndefault_server_segment_row_limit = 1024 * 512\ndefault_alias = \"default\"\ndefault_user = \"root\"\ndefault_password = \"Milvus\"\ndefault_bool_field_name = \"bool\"\ndefault_int8_field_name = \"int8\"\ndefault_int16_field_name = \"int16\"\ndefault_int32_field_name = \"int32\"\ndefault_int64_field_name = \"int64\"\ndefault_float_field_name = \"float\"\ndefault_double_field_name = \"double\"\ndefault_string_field_name = \"varchar\"\ndefault_json_field_name = \"json_field\"\ndefault_array_field_name = \"int_array\"\ndefault_int32_array_field_name = \"int32_array\"\ndefault_float_array_field_name = \"float_array\"\ndefault_string_array_field_name = \"string_array\"\ndefault_float_vec_field_name = \"float_vector\"\ndefault_float16_vec_field_name = \"float16_vector\"\ndefault_bfloat16_vec_field_name = \"bfloat16_vector\"\nanother_float_vec_field_name = \"float_vector1\"\ndefault_binary_vec_field_name = \"binary_vector\"\nfloat_type = \"FLOAT_VECTOR\"\nfloat16_type = \"FLOAT16_VECTOR\"\nbfloat16_type = \"BFLOAT16_VECTOR\"\nsparse_vector = \"SPARSE_FLOAT_VECTOR\"\nappend_vector_type = [float16_type, bfloat16_type, sparse_vector]\nvector_data_type_all = [float_type, float16_type, bfloat16_type]\nsparse_vector = \"SPARSE_FLOAT_VECTOR\"\nappend_vector_type = [float16_type, bfloat16_type, sparse_vector]\nall_dense_vector_types = [float_type, float16_type, bfloat16_type]\ndefault_sparse_vec_field_name = \"sparse_vector\"\ndefault_partition_name = \"_default\"\ndefault_resource_group_name = '__default_resource_group'\ndefault_resource_group_capacity = 1000000\ndefault_tag = \"1970_01_01\"\nrow_count = \"row_count\"\ndefault_length = 65535\ndefault_json_list_length = 1\ndefault_desc = \"\"\ndefault_collection_desc = \"default collection\"\ndefault_index_name = \"default_index_name\"\ndefault_binary_desc = \"default binary collection\"\ncollection_desc = \"collection\"\nint_field_desc = \"int64 type field\"\nfloat_field_desc = \"float type field\"\nfloat_vec_field_desc = \"float vector type field\"\nbinary_vec_field_desc = \"binary vector type field\"\nmax_dim = 32768\nmin_dim = 2\nmax_binary_vector_dim = 262144\nmax_sparse_vector_dim = 4294967294\nmin_sparse_vector_dim = 1\ngracefulTime = 1\ndefault_nlist = 128\ncompact_segment_num_threshold = 3\ncompact_delta_ratio_reciprocal = 5  # compact_delta_binlog_ratio is 0.2\ncompact_retention_duration = 40  # compaction travel time retention range 20s\nmax_compaction_interval = 60  # the max time interval (s) from the last compaction\nmax_field_num = 64  # Maximum number of fields in a collection\nmax_vector_field_num = 4  # Maximum number of vector fields in a collection\nmax_name_length = 255  # Maximum length of name for a collection or alias\ndefault_replica_num = 1\ndefault_graceful_time = 5  #\ndefault_shards_num = 1\nmax_shards_num = 16\ndefault_db = \"default\"\nmax_database_num = 64\nmax_collections_per_db = 65536\nmax_collection_num = 65536\nmax_hybrid_search_req_num = 1024\n\n\nIMAGE_REPOSITORY_MILVUS = \"harbor.milvus.io/dockerhub/milvusdb/milvus\"\nNAMESPACE_CHAOS_TESTING = \"chaos-testing\"\n\nNot_Exist = \"Not_Exist\"\nConnect_Object_Name = True\nlist_content = \"list_content\"\ndict_content = \"dict_content\"\nvalue_content = \"value_content\"\n\ncode = \"code\"\nerr_code = \"err_code\"\nerr_msg = \"err_msg\"\nin_cluster_env = \"IN_CLUSTER\"\n\ndefault_flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"COSINE\"}\ndefault_hnsw_index = {\"index_type\": \"HNSW\", \"metric_type\": \"COSINE\", \"params\": {\"M\": 16, \"efConstruction\": 128}}\ndefault_bin_flat_index = {\"index_type\": \"BIN_FLAT\", \"params\": {}, \"metric_type\": \"JACCARD\"}\ndefault_sparse_inverted_index = {\"index_type\": \"SPARSE_INVERTED_INDEX\", \"metric_type\": \"IP\",\n                                 \"params\": {\"drop_ratio_build\": 0.2}}\ndefault_count_output = \"count(*)\"\n\nrows_all_data_type_file_path = \"/tmp/rows_all_data_type\"\n\n\"\"\"\" List of parameters used to pass \"\"\"\nget_invalid_strs = [\n    [],\n    1,\n    [1, \"2\", 3],\n    (1,),\n    {1: 1},\n    None,\n    \"\",\n    \" \",\n    \"12-s\",\n    \"12 s\",\n    \"(mn)\",\n    \"中文\",\n    \"%$#\",\n    \"\".join(\"a\" for i in range(max_name_length + 1))]\n\nget_invalid_type_fields = [\n    1,\n    [1, \"2\", 3],\n    (1,),\n    {1: 1},\n    None,\n    \"\",\n    \" \",\n    \"12-s\",\n    \"12 s\",\n    \"(mn)\",\n    \"中文\",\n    \"%$#\",\n    \"\".join(\"a\" for i in range(max_name_length + 1))]\n\nget_not_string = [\n    [],\n    {},\n    None,\n    (1,),\n    1,\n    1.0,\n    [1, \"2\", 3]\n]\n\nget_not_string_value = [\n    \" \",\n    \"12-s\",\n    \"12 s\",\n    \"(mn)\",\n    \"中文\",\n    \"%$#\",\n    \"a\".join(\"a\" for i in range(256))\n]\n\nget_invalid_vectors = [\n    \"1*2\",\n    [1],\n    [1, 2],\n    [\" \"],\n    ['a'],\n    [None],\n    None,\n    (1, 2),\n    {\"a\": 1},\n    \" \",\n    \"\",\n    \"String\",\n    \" siede \",\n    \"中文\",\n    \"a\".join(\"a\" for i in range(256))\n]\n\nget_invalid_ints = [\n    9999999999,\n    1.0,\n    None,\n    [1, 2, 3],\n    \" \",\n    \"\",\n    -1,\n    \"String\",\n    \"=c\",\n    \"中文\",\n    \"a\".join(\"a\" for i in range(256))\n]\n\nget_invalid_dict = [\n    [],\n    1,\n    [1, \"2\", 3],\n    (1,),\n    None,\n    \"\",\n    \" \",\n    \"12-s\",\n    {1: 1},\n    {\"中文\": 1},\n    {\"%$#\": [\"a\"]},\n    {\"a\".join(\"a\" for i in range(256)): \"a\"}\n]\n\nget_invalid_metric_type = [\n    [],\n    1,\n    [1, \"2\", 3],\n    (1,),\n    {1: 1},\n    \" \",\n    \"12-s\",\n    \"12 s\",\n    \"(mn)\",\n    \"中文\",\n    \"%$#\",\n    \"\".join(\"a\" for i in range(max_name_length + 1))]\n\nget_dict_without_host_port = [\n    {\"host\": \"host\"},\n    {\"\": \"\"}\n]\n\nget_dict_invalid_host_port = [\n    {\"port\": \"port\"},\n    # [\"host\", \"port\"],\n    # (\"host\", \"port\"),\n    {\"host\": -1},\n    {\"port\": [\"192.168.1.1\"]},\n    {\"port\": \"-1\", \"host\": \"hostlocal\"},\n]\n\nget_wrong_format_dict = [\n    {\"host\": \"string_host\", \"port\": {}},\n    {\"host\": 0, \"port\": 19520}\n]\n\n\"\"\" Specially defined list \"\"\"\nall_index_types = [\"FLAT\", \"IVF_FLAT\", \"IVF_SQ8\", \"IVF_PQ\", \"HNSW\", \"SCANN\", \"DISKANN\", \"BIN_FLAT\", \"BIN_IVF_FLAT\",\n                   \"SPARSE_INVERTED_INDEX\", \"SPARSE_WAND\", \"GPU_IVF_FLAT\", \"GPU_IVF_PQ\"]\n\ndefault_index_params = [{\"nlist\": 128}, {\"nlist\": 128}, {\"nlist\": 128}, {\"nlist\": 128, \"m\": 16, \"nbits\": 8},\n                        {\"M\": 48, \"efConstruction\": 500}, {\"nlist\": 128}, {}, {\"nlist\": 128}, {\"nlist\": 128},\n                        {\"drop_ratio_build\": 0.2}, {\"drop_ratio_build\": 0.2}, {\"nlist\": 64}, {\"nlist\": 64, \"m\": 16, \"nbits\": 8}]\n\nHandler_type = [\"GRPC\", \"HTTP\"]\nbinary_support = [\"BIN_FLAT\", \"BIN_IVF_FLAT\"]\ndelete_support = [\"FLAT\", \"IVF_FLAT\", \"IVF_SQ8\", \"IVF_PQ\"]\nivf = [\"FLAT\", \"IVF_FLAT\", \"IVF_SQ8\", \"IVF_PQ\"]\nsparse_support = [\"SPARSE_INVERTED_INDEX\", \"SPARSE_WAND\"]\nskip_pq = [\"IVF_PQ\"]\nfloat_metrics = [\"L2\", \"IP\", \"COSINE\"]\nbinary_metrics = [\"JACCARD\", \"HAMMING\", \"SUBSTRUCTURE\", \"SUPERSTRUCTURE\"]\nstructure_metrics = [\"SUBSTRUCTURE\", \"SUPERSTRUCTURE\"]\nall_scalar_data_types = ['int8', 'int16', 'int32', 'int64', 'float', 'double', 'bool', 'varchar']\n\n\nclass CheckTasks:\n    \"\"\" The name of the method used to check the result \"\"\"\n    check_nothing = \"check_nothing\"\n    err_res = \"error_response\"\n    ccr = \"check_connection_result\"\n    check_collection_property = \"check_collection_property\"\n    check_partition_property = \"check_partition_property\"\n    check_search_results = \"check_search_results\"\n    check_search_iterator = \"check_search_iterator\"\n    check_query_results = \"check_query_results\"\n    check_query_iterator = \"check_query_iterator\"\n    check_query_empty = \"check_query_empty\"  # verify that query result is empty\n    check_query_not_empty = \"check_query_not_empty\"\n    check_distance = \"check_distance\"\n    check_delete_compact = \"check_delete_compact\"\n    check_merge_compact = \"check_merge_compact\"\n    check_role_property = \"check_role_property\"\n    check_permission_deny = \"check_permission_deny\"\n    check_auth_failure = \"check_auth_failure\"\n    check_value_equal = \"check_value_equal\"\n    check_rg_property = \"check_resource_group_property\"\n    check_describe_collection_property = \"check_describe_collection_property\"\n\n\nclass BulkLoadStates:\n    BulkLoadPersisted = \"BulkLoadPersisted\"\n    BulkLoadFailed = \"BulkLoadFailed\"\n    BulkLoadDataQueryable = \"BulkLoadDataQueryable\"\n    BulkLoadDataIndexed = \"BulkLoadDataIndexed\"\n\n\nclass CaseLabel:\n    \"\"\"\n    Testcase Levels\n    CI Regression:\n        L0:\n            part of CI Regression\n            triggered by github commit\n            optional used for dev to verify his fix before submitting a PR(like smoke)\n            ~100 testcases and run in 3 mins\n        L1:\n            part of CI Regression\n            triggered by github commit\n            must pass before merge\n            run in 15 mins\n    Benchmark:\n        L2:\n            E2E tests and bug-fix verification\n            Nightly run triggered by cron job\n            run in 60 mins\n        L3:\n            Stability/Performance/reliability, etc. special tests\n            Triggered by cron job or manually\n            run duration depends on test configuration\n        Loadbalance:\n            loadbalance testcases which need to be run in multi query nodes\n        ClusterOnly:\n            For functions only suitable to cluster mode\n        GPU:\n            For GPU supported cases\n    \"\"\"\n    L0 = \"L0\"\n    L1 = \"L1\"\n    L2 = \"L2\"\n    L3 = \"L3\"\n    RBAC = \"RBAC\"\n    Loadbalance = \"Loadbalance\"  # loadbalance testcases which need to be run in multi query nodes\n    ClusterOnly = \"ClusterOnly\"  # For functions only suitable to cluster mode\n    MultiQueryNodes = \"MultiQueryNodes\"  # for 8 query nodes configs tests, such as resource group\n    GPU = \"GPU\"\n\n"
  },
  {
    "path": "tests/common/constants.py",
    "content": "# constants for old pymilvus API test\n\nimport utils.util_pymilvus as utils\n\ndefault_fields = utils.gen_default_fields()\ndefault_binary_fields = utils.gen_binary_default_fields()\n\ndefault_entity = utils.gen_entities(1)\ndefault_raw_binary_vector, default_binary_entity = utils.gen_binary_entities(1)\n\ndefault_entity_row = utils.gen_entities_rows(1)\ndefault_raw_binary_vector_row, default_binary_entity_row = utils.gen_binary_entities_rows(1)\n\ndefault_entities = utils.gen_entities(utils.default_nb)\ndefault_raw_binary_vectors, default_binary_entities = utils.gen_binary_entities(utils.default_nb)\n\ndefault_entities_new = utils.gen_entities_new(utils.default_nb)\ndefault_raw_binary_vectors_new, default_binary_entities_new = utils.gen_binary_entities_new(utils.default_nb)\n\ndefault_entities_rows = utils.gen_entities_rows(utils.default_nb)\ndefault_raw_binary_vectors_rows, default_binary_entities_rows = utils.gen_binary_entities_rows(utils.default_nb)\n"
  },
  {
    "path": "tests/common/cus_resource_opts.py",
    "content": "from __future__ import print_function\n\nimport os\n\nfrom kubernetes import client, config\nfrom kubernetes.client.rest import ApiException\nfrom utils.util_log import test_log as log\nfrom common.common_type import in_cluster_env\n\n_GROUP = 'milvus.io'\n_VERSION = 'v1alpha1'\n_NAMESPACE = \"default\"\n\n\nclass CustomResourceOperations(object):\n    def __init__(self, kind, group=_GROUP, version=_VERSION, namespace=_NAMESPACE):\n        self.group = group\n        self.version = version\n        self.namespace = namespace\n        if kind.lower()[-1] != \"s\":\n            self.plural = kind.lower() + \"s\"\n        else:\n            self.plural = kind.lower()\n\n        # init k8s client config\n        in_cluster = os.getenv(in_cluster_env, default='False')\n        log.debug(f\"env variable IN_CLUSTER: {in_cluster}\")\n        if in_cluster.lower() == 'true':\n            config.load_incluster_config()\n        else:\n            config.load_kube_config()\n\n    def create(self, body):\n        \"\"\"create or apply a custom resource in k8s\"\"\"\n        pretty = 'true'\n        api_instance = client.CustomObjectsApi()\n        try:\n            api_response = api_instance.create_namespaced_custom_object(self.group, self.version, self.namespace,\n                                                                        plural=self.plural, body=body, pretty=pretty)\n            log.info(f\"create custom resource response: {api_response}\")\n        except ApiException as e:\n            log.error(\"Exception when calling CustomObjectsApi->create_namespaced_custom_object: %s\\n\" % e)\n            raise Exception(str(e))\n        return api_response\n\n    def delete(self, metadata_name, raise_ex=True):\n        \"\"\"delete or uninstall a custom resource in k8s\"\"\"\n        print(metadata_name)\n        try:\n            api_instance = client.CustomObjectsApi()\n            api_response = api_instance.delete_namespaced_custom_object(self.group, self.version, self.namespace,\n                                                                        self.plural,\n                                                                        metadata_name)\n            log.info(f\"delete custom resource response: {api_response}\")\n        except ApiException as e:\n            if raise_ex:\n                log.error(\"Exception when calling CustomObjectsApi->delete_namespaced_custom_object: %s\\n\" % e)\n                raise Exception(str(e))\n\n    def patch(self, metadata_name, body):\n        \"\"\"patch a custom resource in k8s\"\"\"\n        api_instance = client.CustomObjectsApi()\n        try:\n            api_response = api_instance.patch_namespaced_custom_object(self.group, self.version, self.namespace,\n                                                                       plural=self.plural,\n                                                                       name=metadata_name,\n                                                                       body=body)\n            log.debug(f\"patch custom resource response: {api_response}\")\n        except ApiException as e:\n            log.error(\"Exception when calling CustomObjectsApi->patch_namespaced_custom_object: %s\\n\" % e)\n            raise Exception(str(e))\n        return api_response\n\n    def list_all(self):\n        \"\"\"list all the customer resources in k8s\"\"\"\n        pretty = 'true'\n        try:\n            api_instance = client.CustomObjectsApi()\n            api_response = api_instance.list_namespaced_custom_object(self.group, self.version, self.namespace,\n                                                                      plural=self.plural, pretty=pretty)\n            log.debug(f\"list custom resource response: {api_response}\")\n        except ApiException as e:\n            log.error(\"Exception when calling CustomObjectsApi->list_namespaced_custom_object: %s\\n\" % e)\n            raise Exception(str(e))\n        return api_response\n\n    def get(self, metadata_name):\n        \"\"\"get a customer resources by name in k8s\"\"\"\n        try:\n            api_instance = client.CustomObjectsApi()\n            api_response = api_instance.get_namespaced_custom_object(self.group, self.version,\n                                                                     self.namespace, self.plural,\n                                                                     name=metadata_name)\n            # log.debug(f\"get custom resource response: {api_response}\")\n        except ApiException as e:\n            log.error(\"Exception when calling CustomObjectsApi->get_namespaced_custom_object: %s\\n\" % e)\n            raise Exception(str(e))\n        return api_response\n\n    def delete_all(self):\n        \"\"\"delete all the customer resources in k8s\"\"\"\n        cus_objects = self.list_all()\n        if len(cus_objects[\"items\"]) > 0:\n            for item in cus_objects[\"items\"]:\n                metadata_name = item[\"metadata\"][\"name\"]\n                self.delete(metadata_name)\n"
  },
  {
    "path": "tests/common/milvus_sys.py",
    "content": "import ujson\nimport json\nfrom pymilvus.grpc_gen import milvus_pb2 as milvus_types\nfrom pymilvus import connections\n\nsys_info_req = ujson.dumps({\"metric_type\": \"system_info\"})\nsys_statistics_req = ujson.dumps({\"metric_type\": \"system_statistics\"})\nsys_logs_req = ujson.dumps({\"metric_type\": \"system_logs\"})\n\n\nclass MilvusSys:\n    def __init__(self, alias='default'):\n        self.alias = alias\n        self.handler = connections._fetch_handler(alias=self.alias)\n        if self.handler is None:\n            raise Exception(f\"Connection {alias} is disconnected or nonexistent\")\n\n        # TODO: for now it only supports non_orm style API for getMetricsRequest\n        req = milvus_types.GetMetricsRequest(request=sys_info_req)\n        self.sys_info = self.handler._stub.GetMetrics(req, wait_for_ready=True, timeout=None)\n        req = milvus_types.GetMetricsRequest(request=sys_statistics_req)\n        self.sys_statistics = self.handler._stub.GetMetrics(req, wait_for_ready=True, timeout=None)\n        req = milvus_types.GetMetricsRequest(request=sys_logs_req)\n        self.sys_logs = self.handler._stub.GetMetrics(req, wait_for_ready=True, timeout=None)\n\n    @property\n    def build_version(self):\n        \"\"\"get the first node's build version as milvus build version\"\"\"\n        return self.nodes[0].get('infos').get('system_info').get('system_version')\n\n    @property\n    def build_time(self):\n        \"\"\"get the first node's build time as milvus build time\"\"\"\n        return self.nodes[0].get('infos').get('system_info').get('build_time')\n\n    @property\n    def deploy_mode(self):\n        \"\"\"get the first node's deploy_mode as milvus deploy_mode\"\"\"\n        return self.nodes[0].get('infos').get('system_info').get('deploy_mode')\n\n    @property\n    def simd_type(self):\n        \"\"\"\n        get simd type that milvus is running against\n        return the first query node's simd type\n        \"\"\"\n        for node in self.query_nodes:\n            return node.get('infos').get('system_configurations').get('simd_type')\n        raise Exception(\"No query node found\")\n\n    @property\n    def query_nodes(self):\n        \"\"\"get all query nodes in Milvus deployment\"\"\"\n        query_nodes = []\n        for node in self.nodes:\n            if 'querynode' == node.get('infos').get('type'):\n                query_nodes.append(node)\n        return query_nodes\n\n    @property\n    def data_nodes(self):\n        \"\"\"get all data nodes in Milvus deployment\"\"\"\n        data_nodes = []\n        for node in self.nodes:\n            if 'datanode' == node.get('infos').get('type'):\n                data_nodes.append(node)\n        return data_nodes\n\n    @property\n    def index_nodes(self):\n        \"\"\"get all index nodes in Milvus deployment\"\"\"\n        index_nodes = []\n        for node in self.nodes:\n            if 'indexnode' == node.get('infos').get('type'):\n                index_nodes.append(node)\n        return index_nodes\n\n    @property\n    def proxy_nodes(self):\n        \"\"\"get all proxy nodes in Milvus deployment\"\"\"\n        proxy_nodes = []\n        for node in self.nodes:\n            if 'proxy' == node.get('infos').get('type'):\n                proxy_nodes.append(node)\n        return proxy_nodes\n\n    @property\n    def nodes(self):\n        \"\"\"get all the nodes in Milvus deployment\"\"\"\n        all_nodes = json.loads(self.sys_info.response).get('nodes_info')\n        online_nodes = [node for node in all_nodes if node[\"infos\"][\"has_error\"] is False]\n        return online_nodes\n\n    def get_nodes_by_type(self, node_type=None):\n        \"\"\"get milvus nodes by node type\"\"\"\n        target_nodes = []\n        if node_type is not None:\n            for node in self.nodes:\n                if str(node_type).lower() == str(node.get('infos').get('type')).lower():\n                    target_nodes.append(node)\n        return target_nodes\n\n\nif __name__ == '__main__':\n    connections.connect(host=\"10.96.250.111\", port=\"19530\")\n    ms = MilvusSys()\n"
  },
  {
    "path": "tests/common/minio_comm.py",
    "content": "import os\nfrom minio import Minio\nfrom minio.error import S3Error\nfrom utils.util_log import test_log as log\n\n\ndef copy_files_to_bucket(client, r_source, target_files, bucket_name, force=False):\n    # check the bucket exist\n    found = client.bucket_exists(bucket_name)\n    if not found:\n        log.error(f\"Bucket {bucket_name} not found.\")\n        return\n\n    # copy target files from root source folder\n    os.chdir(r_source)\n    for target_file in target_files:\n        found = False\n        try:\n            result = client.stat_object(bucket_name, target_file)\n            found = True\n        except S3Error as exc:\n            pass\n\n        if force or not found:\n            res = client.fput_object(bucket_name, target_file, f\"{r_source}/{target_file}\")\n            log.info(f\"copied {res.object_name} to minio\")\n        else:\n            log.info(f\"skip copy {target_file} to minio\")\n\n\ndef copy_files_to_minio(host, r_source, files, bucket_name, access_key=\"minioadmin\", secret_key=\"minioadmin\",\n                        secure=False, force=False):\n    client = Minio(\n        host,\n        access_key=access_key,\n        secret_key=secret_key,\n        secure=secure,\n    )\n    try:\n        copy_files_to_bucket(client, r_source=r_source, target_files=files, bucket_name=bucket_name, force=force)\n    except S3Error as exc:\n        log.error(\"fail to copy files to minio\", exc)\n\n"
  },
  {
    "path": "tests/config/log_config.py",
    "content": "import os\nfrom pathlib import Path\n\nclass LogConfig:\n    def __init__(self):\n        self.log_debug = \"\"\n        self.log_err = \"\"\n        self.log_info = \"\"\n        self.log_worker = \"\"\n        self.get_default_config()\n\n    @staticmethod\n    def get_env_variable(var=\"CI_LOG_PATH\"):\n        \"\"\" get log path for testing \"\"\"\n        try:\n            log_path = os.environ[var]\n            return str(log_path)\n        except Exception as e:\n            # now = datetime.datetime.now().strftime(\"%Y-%m-%d-%H-%M-%S\")\n            log_path = f\"/tmp/ci_logs\"\n            print(\"[get_env_variable] failed to get environment variables : %s, use default path : %s\" % (str(e), log_path))\n            return log_path\n\n    @staticmethod\n    def create_path(log_path):\n        print(\"[create_path] folder(%s) is not exist.\" % log_path)\n        print(\"[create_path] create path now...\")\n        folder_path = Path(str(log_path))\n        folder_path.mkdir(parents=True, exist_ok=True)\n\n    def get_default_config(self):\n        \"\"\" Make sure the path exists \"\"\"\n        log_dir = self.get_env_variable()\n        self.log_debug = \"%s/ci_test_log.debug\" % log_dir\n        self.log_info = \"%s/ci_test_log.log\" % log_dir\n        self.log_err = \"%s/ci_test_log.err\" % log_dir\n        work_log = os.environ.get('PYTEST_XDIST_WORKER')\n        if work_log is not None:\n            self.log_worker = f'{log_dir}/{work_log}.log'\n\n        self.create_path(log_dir)\n\n\nlog_config = LogConfig()\n"
  },
  {
    "path": "tests/conftest.py",
    "content": "import logging\n\nimport pytest\nimport functools\nimport socket\n\nimport common.common_type as ct\nimport common.common_func as cf\nfrom utils.util_log import test_log as log\nfrom common.common_func import param_info\nfrom check.param_check import ip_check, number_check\nfrom config.log_config import log_config\nfrom utils.util_pymilvus import get_milvus, gen_unique_str, gen_default_fields, gen_binary_default_fields\nfrom pymilvus.orm.types import CONSISTENCY_STRONG\n\ntimeout = 60\ndimension = 128\ndelete_timeout = 60\n\n\ndef pytest_addoption(parser):\n    parser.addoption(\"--host\", action=\"store\", default=\"localhost\", help=\"service's ip\")\n    parser.addoption(\"--service\", action=\"store\", default=\"\", help=\"service address\")\n    parser.addoption(\"--port\", action=\"store\", default=19530, help=\"service's port\")\n    parser.addoption(\"--user\", action=\"store\", default=\"\", help=\"user name for connection\")\n    parser.addoption(\"--password\", action=\"store\", default=\"\", help=\"password for connection\")\n    parser.addoption(\"--db_name\", action=\"store\", default=\"default\", help=\"database name for connection\")\n    parser.addoption(\"--secure\", type=bool, action=\"store\", default=False, help=\"secure for connection\")\n    parser.addoption(\"--milvus_ns\", action=\"store\", default=\"chaos-testing\", help=\"milvus_ns\")\n    parser.addoption(\"--http_port\", action=\"store\", default=19121, help=\"http's port\")\n    parser.addoption(\"--handler\", action=\"store\", default=\"GRPC\", help=\"handler of request\")\n    parser.addoption(\"--tag\", action=\"store\", default=\"all\", help=\"only run tests matching the tag.\")\n    parser.addoption('--dry_run', action='store_true', default=False, help=\"\")\n    parser.addoption('--database_name', action='store', default=\"default\", help=\"name of database\")\n    parser.addoption('--partition_name', action='store', default=\"partition_name\", help=\"name of partition\")\n    parser.addoption('--connect_name', action='store', default=\"connect_name\", help=\"name of connect\")\n    parser.addoption('--descriptions', action='store', default=\"partition_des\", help=\"descriptions of partition\")\n    parser.addoption('--collection_name', action='store', default=\"collection_name\", help=\"name of collection\")\n    parser.addoption('--search_vectors', action='store', default=\"search_vectors\", help=\"vectors of search\")\n    parser.addoption('--index_param', action='store', default=\"index_param\", help=\"index_param of index\")\n    parser.addoption('--data', action='store', default=\"data\", help=\"data of request\")\n    parser.addoption('--clean_log', action='store_true', default=False, help=\"clean log before testing\")\n    parser.addoption('--schema', action='store', default=\"schema\", help=\"schema of test interface\")\n    parser.addoption('--err_msg', action='store', default=\"err_msg\", help=\"error message of test\")\n    parser.addoption('--term_expr', action='store', default=\"term_expr\", help=\"expr of query quest\")\n    parser.addoption('--check_content', action='store', default=\"check_content\", help=\"content of check\")\n    parser.addoption('--field_name', action='store', default=\"field_name\", help=\"field_name of index\")\n    parser.addoption('--replica_num', type='int', action='store', default=ct.default_replica_num, help=\"memory replica number\")\n    parser.addoption('--minio_host', action='store', default=\"localhost\", help=\"minio service's ip\")\n    parser.addoption('--uri', action='store', default=\"\", help=\"uri for high level api\")\n    parser.addoption('--token', action='store', default=\"\", help=\"token for high level api\")\n    parser.addoption(\"--request_duration\", action=\"store\", default=\"10m\", help=\"request_duration\")\n    parser.addoption(\"--enable_milvus_local_api\", action=\"store\", default=False, help=\"use milvus local\")\n\n\n@pytest.fixture\ndef host(request):\n    return request.config.getoption(\"--host\")\n\n\n@pytest.fixture\ndef service(request):\n    return request.config.getoption(\"--service\")\n\n\n@pytest.fixture\ndef port(request):\n    return request.config.getoption(\"--port\")\n\n\n@pytest.fixture\ndef user(request):\n    return request.config.getoption(\"--user\")\n\n\n@pytest.fixture\ndef password(request):\n    return request.config.getoption(\"--password\")\n\n\n@pytest.fixture\ndef db_name(request):\n    return request.config.getoption(\"--db_name\")\n\n\n@pytest.fixture\ndef secure(request):\n    return request.config.getoption(\"--secure\")\n\n\n@pytest.fixture\ndef milvus_ns(request):\n    return request.config.getoption(\"--milvus_ns\")\n\n\n@pytest.fixture\ndef http_port(request):\n    return request.config.getoption(\"--http_port\")\n\n\n@pytest.fixture\ndef handler(request):\n    return request.config.getoption(\"--handler\")\n\n\n@pytest.fixture\ndef tag(request):\n    return request.config.getoption(\"--tag\")\n\n\n@pytest.fixture\ndef dry_run(request):\n    return request.config.getoption(\"--dry_run\")\n\n\n@pytest.fixture\ndef connect_name(request):\n    return request.config.getoption(\"--connect_name\")\n\n\n@pytest.fixture\ndef database_name(request):\n    return request.config.getoption(\"--database_name\")\n\n\n@pytest.fixture\ndef partition_name(request):\n    return request.config.getoption(\"--partition_name\")\n\n\n@pytest.fixture\ndef descriptions(request):\n    return request.config.getoption(\"--descriptions\")\n\n\n@pytest.fixture\ndef collection_name(request):\n    return request.config.getoption(\"--collection_name\")\n\n\n@pytest.fixture\ndef search_vectors(request):\n    return request.config.getoption(\"--search_vectors\")\n\n\n@pytest.fixture\ndef index_param(request):\n    return request.config.getoption(\"--index_param\")\n\n\n@pytest.fixture\ndef data(request):\n    return request.config.getoption(\"--data\")\n\n\n@pytest.fixture\ndef clean_log(request):\n    return request.config.getoption(\"--clean_log\")\n\n\n@pytest.fixture\ndef schema(request):\n    return request.config.getoption(\"--schema\")\n\n\n@pytest.fixture\ndef err_msg(request):\n    return request.config.getoption(\"--err_msg\")\n\n\n@pytest.fixture\ndef term_expr(request):\n    return request.config.getoption(\"--term_expr\")\n\n\n@pytest.fixture\ndef check_content(request):\n    log.error(\"^\" * 50)\n    log.error(\"check_content\")\n    return request.config.getoption(\"--check_content\")\n\n\n@pytest.fixture\ndef field_name(request):\n    return request.config.getoption(\"--field_name\")\n\n\n@pytest.fixture\ndef minio_host(request):\n    return request.config.getoption(\"--minio_host\")\n\n\n@pytest.fixture\ndef uri(request):\n    return request.config.getoption(\"--uri\")\n\n\n@pytest.fixture\ndef token(request):\n    return request.config.getoption(\"--token\")\n\n\n@pytest.fixture\ndef request_duration(request):\n    return request.config.getoption(\"--request_duration\")\n\n\n@pytest.fixture\ndef enable_milvus_local_api(request):\n    return request.config.getoption(\"--enable_milvus_local_api\")\n\n\n\"\"\" fixture func \"\"\"\n\n\n@pytest.fixture(scope=\"session\", autouse=True)\ndef initialize_env(request):\n    \"\"\" clean log before testing \"\"\"\n    host = request.config.getoption(\"--host\")\n    port = request.config.getoption(\"--port\")\n    handler = request.config.getoption(\"--handler\")\n    user = request.config.getoption(\"--user\")\n    password = request.config.getoption(\"--password\")\n    secure = request.config.getoption(\"--secure\")\n    clean_log = request.config.getoption(\"--clean_log\")\n    replica_num = request.config.getoption(\"--replica_num\")\n    uri = request.config.getoption(\"--uri\")\n    token = request.config.getoption(\"--token\")\n\n    \"\"\" params check \"\"\"\n    assert ip_check(host) and number_check(port)\n\n    \"\"\" modify log files \"\"\"\n    file_path_list = [log_config.log_debug, log_config.log_info, log_config.log_err]\n    if log_config.log_worker != \"\":\n        file_path_list.append(log_config.log_worker)\n    cf.modify_file(file_path_list=file_path_list, is_modify=clean_log)\n\n    log.info(\"#\" * 80)\n    log.info(\"[initialize_milvus] Log cleaned up, start testing...\")\n    param_info.prepare_param_info(host, port, handler, replica_num, user, password, secure, uri, token)\n\n\n@pytest.fixture(params=ct.get_invalid_strs)\ndef get_invalid_string(request):\n    yield request.param\n\n\n@pytest.fixture(params=cf.gen_simple_index())\ndef get_index_param(request):\n    yield request.param\n\n\n@pytest.fixture(params=ct.get_invalid_strs)\ndef get_invalid_collection_name(request):\n    yield request.param\n\n\n@pytest.fixture(params=ct.get_invalid_strs)\ndef get_invalid_field_name(request):\n    yield request.param\n\n\n@pytest.fixture(params=ct.get_invalid_strs)\ndef get_invalid_index_type(request):\n    yield request.param\n\n\n# TODO: construct invalid index params for all index types\n@pytest.fixture(params=[{\"metric_type\": \"L3\", \"index_type\": \"IVF_FLAT\"},\n                        {\"metric_type\": \"L2\", \"index_type\": \"IVF_FLAT\", \"err_params\": {\"nlist\": 10}},\n                        {\"metric_type\": \"L2\", \"index_type\": \"IVF_FLAT\", \"params\": {\"nlist\": -1}}])\ndef get_invalid_index_params(request):\n    yield request.param\n\n\n@pytest.fixture(params=ct.get_invalid_strs)\ndef get_invalid_partition_name(request):\n    yield request.param\n\n\n@pytest.fixture(params=ct.get_invalid_dict)\ndef get_invalid_vector_dict(request):\n    yield request.param\n\n\ndef pytest_configure(config):\n    # register an additional marker\n    config.addinivalue_line(\n        \"markers\", \"tag(name): mark test to run only matching the tag\"\n    )\n\n\ndef pytest_runtest_setup(item):\n    tags = list()\n    for marker in item.iter_markers(name=\"tag\"):\n        for tag in marker.args:\n            tags.append(tag)\n    if tags:\n        cmd_tag = item.config.getoption(\"--tag\")\n        if cmd_tag != \"all\" and cmd_tag not in tags:\n            pytest.skip(\"test requires tag in {!r}\".format(tags))\n\n\ndef pytest_runtestloop(session):\n    if session.config.getoption('--dry_run'):\n        total_num = 0\n        file_num = 0\n        tags_num = 0\n        res = {\"total_num\": total_num, \"tags_num\": tags_num}\n        for item in session.items:\n            print(item.nodeid)\n            if item.fspath.basename not in res:\n                res.update({item.fspath.basename: {\"total\": 1, \"tags\": 0}})\n            else:\n                res[item.fspath.basename][\"total\"] += 1\n            res[\"total_num\"] += 1\n            for marker in item.own_markers:\n                if marker.name == \"tags\" and \"0331\" in marker.args:\n                    res[\"tags_num\"] += 1\n                    res[item.fspath.basename][\"tags\"] += 1\n        print(res)\n        return True\n\n\ndef check_server_connection(request):\n    host = request.config.getoption(\"--host\")\n    port = request.config.getoption(\"--port\")\n\n    connected = True\n    if host and (host not in ['localhost', '127.0.0.1']):\n        try:\n            socket.getaddrinfo(host, port, 0, 0, socket.IPPROTO_TCP)\n        except Exception as e:\n            print(\"Socket connnet failed: %s\" % str(e))\n            connected = False\n    return connected\n\n\n# @pytest.fixture(scope=\"session\", autouse=True)\n# def change_mutation_result_to_primary_keys():\n#     def insert_future_decorator(func):\n#         @functools.wraps(func)\n#         def change(*args, **kwargs):\n#             try:\n#                 return func(*args, **kwargs).primary_keys\n#             except Exception as e:\n#                 raise e\n#         return change\n#\n#     from pymilvus import MutationFuture\n#     MutationFuture.result = insert_future_decorator(MutationFuture.result)\n#\n#     def insert_decorator(func):\n#         @functools.wraps(func)\n#         def change(*args, **kwargs):\n#             if kwargs.get(\"_async\", False):\n#                 return func(*args, **kwargs)\n#             try:\n#                 return func(*args, **kwargs).primary_keys\n#             except Exception as e:\n#                 raise e\n#         return change\n#     Milvus.insert = insert_decorator(Milvus.insert)\n#     yield\n\n\n@pytest.fixture(scope=\"module\")\ndef connect(request):\n    host = request.config.getoption(\"--host\")\n    service_name = request.config.getoption(\"--service\")\n    port = request.config.getoption(\"--port\")\n    http_port = request.config.getoption(\"--http_port\")\n    handler = request.config.getoption(\"--handler\")\n    if handler == \"HTTP\":\n        port = http_port\n    try:\n        milvus = get_milvus(host=host, port=port, handler=handler)\n        # reset_build_index_threshold(milvus)\n    except Exception as e:\n        logging.getLogger().error(str(e))\n        pytest.exit(\"Milvus server can not connected, exit pytest ...\")\n\n    def fin():\n        try:\n            milvus.close()\n            pass\n        except Exception as e:\n            logging.getLogger().info(str(e))\n\n    request.addfinalizer(fin)\n    return milvus\n\n\n@pytest.fixture(scope=\"module\")\ndef dis_connect(request):\n    host = request.config.getoption(\"--host\")\n    service_name = request.config.getoption(\"--service\")\n    port = request.config.getoption(\"--port\")\n    http_port = request.config.getoption(\"--http_port\")\n    handler = request.config.getoption(\"--handler\")\n    if handler == \"HTTP\":\n        port = http_port\n    milvus = get_milvus(host=host, port=port, handler=handler)\n    milvus.close()\n    return milvus\n\n\n@pytest.fixture(scope=\"module\")\ndef args(request):\n    host = request.config.getoption(\"--host\")\n    service_name = request.config.getoption(\"--service\")\n    port = request.config.getoption(\"--port\")\n    http_port = request.config.getoption(\"--http_port\")\n    handler = request.config.getoption(\"--handler\")\n    if handler == \"HTTP\":\n        port = http_port\n    args = {\"ip\": host, \"port\": port, \"handler\": handler, \"service_name\": service_name}\n    return args\n\n\n@pytest.fixture(scope=\"module\")\ndef milvus(request):\n    host = request.config.getoption(\"--host\")\n    port = request.config.getoption(\"--port\")\n    http_port = request.config.getoption(\"--http_port\")\n    handler = request.config.getoption(\"--handler\")\n    if handler == \"HTTP\":\n        port = http_port\n    return get_milvus(host=host, port=port, handler=handler)\n\n\n@pytest.fixture(scope=\"function\")\ndef collection(request, connect):\n    ori_collection_name = getattr(request.module, \"collection_id\", \"test\")\n    collection_name = gen_unique_str(ori_collection_name)\n    log.debug(f'collection_name: {collection_name}')\n    try:\n        default_fields = gen_default_fields()\n        connect.create_collection(collection_name, default_fields, consistency_level=CONSISTENCY_STRONG)\n    except Exception as e:\n        pytest.exit(str(e))\n\n    def teardown():\n        if connect.has_collection(collection_name):\n            connect.drop_collection(collection_name, timeout=delete_timeout)\n\n    request.addfinalizer(teardown)\n    assert connect.has_collection(collection_name)\n    return collection_name\n\n\n# customised id\n@pytest.fixture(scope=\"function\")\ndef id_collection(request, connect):\n    ori_collection_name = getattr(request.module, \"collection_id\", \"test\")\n    collection_name = gen_unique_str(ori_collection_name)\n    log.debug(f'id_collection_name: {collection_name}')\n    try:\n        fields = gen_default_fields(auto_id=False)\n        connect.create_collection(collection_name, fields, consistency_level=CONSISTENCY_STRONG)\n    except Exception as e:\n        pytest.exit(str(e))\n\n    def teardown():\n        if connect.has_collection(collection_name):\n            connect.drop_collection(collection_name, timeout=delete_timeout)\n\n    request.addfinalizer(teardown)\n    assert connect.has_collection(collection_name)\n    return collection_name\n\n\n@pytest.fixture(scope=\"function\")\ndef binary_collection(request, connect):\n    ori_collection_name = getattr(request.module, \"collection_id\", \"test\")\n    collection_name = gen_unique_str(ori_collection_name)\n    try:\n        fields = gen_binary_default_fields()\n        connect.create_collection(collection_name, fields, consistency_level=CONSISTENCY_STRONG)\n    except Exception as e:\n        pytest.exit(str(e))\n\n    def teardown():\n        collection_names = connect.list_collections()\n        if connect.has_collection(collection_name):\n            connect.drop_collection(collection_name, timeout=delete_timeout)\n\n    request.addfinalizer(teardown)\n    assert connect.has_collection(collection_name)\n    return collection_name\n\n\n# customised id\n@pytest.fixture(scope=\"function\")\ndef binary_id_collection(request, connect):\n    ori_collection_name = getattr(request.module, \"collection_id\", \"test\")\n    collection_name = gen_unique_str(ori_collection_name)\n    try:\n        fields = gen_binary_default_fields(auto_id=False)\n        connect.create_collection(collection_name, fields, consistency_level=CONSISTENCY_STRONG)\n    except Exception as e:\n        pytest.exit(str(e))\n\n    def teardown():\n        if connect.has_collection(collection_name):\n            connect.drop_collection(collection_name, timeout=delete_timeout)\n\n    request.addfinalizer(teardown)\n    assert connect.has_collection(collection_name)\n    return collection_name\n\n# for test exit in the future\n# @pytest.hookimpl(hookwrapper=True, tryfirst=True)\n# def pytest_runtest_makereport():\n#     result = yield\n#     report = result.get_result()\n#     if report.outcome == \"failed\":\n#         msg = \"The execution of the test case fails and the test exits...\"\n#         log.error(msg)\n#         pytest.exit(msg)\n\n"
  },
  {
    "path": "tests/customize/README.md",
    "content": "Verify user is able to easily customize Milvus deployment with various configuration items.\n\nTo be updated..."
  },
  {
    "path": "tests/customize/milvus_operator.py",
    "content": "import json\nimport os\nimport time\nfrom benedict import benedict\nfrom utils.util_log import test_log as log\nfrom common.cus_resource_opts import CustomResourceOperations as CusResource\n\ntemplate_yaml = os.path.join(os.path.dirname(__file__), 'template/default.yaml')\nMILVUS_GRP = 'milvus.io'\n# MILVUS_VER = 'v1alpha1'\nMILVUS_VER = 'v1beta1'\n# MILVUS_PLURAL = 'milvusclusters'\nMILVUS_PLURAL = 'milvuses'\n# MILVUS_KIND = 'MilvusCluster'\nMILVUS_KIND = 'Milvus'\n\n\nclass MilvusOperator(object):\n    def __init__(self):\n        self.group = MILVUS_GRP\n        self.version = MILVUS_VER\n        self.plural = MILVUS_PLURAL.lower()\n\n    @staticmethod\n    def _update_configs(configs, template=None):\n        \"\"\"\n        Method: update the template with customized configs\n        Params:\n            configs: a dict type of configurations that describe the properties of milvus to be deployed\n            template: Optional. Pass the template file location if there is a template to apply\n        Return: a dict type customized configs\n        \"\"\"\n        if not isinstance(configs, dict):\n            log.error(\"customize configurations must be in dict type\")\n            return None\n\n        if template is None:\n            # d_configs = benedict()\n            log.debug(f'template yaml {template_yaml}')\n            d_configs = benedict.from_yaml(template_yaml)\n            d_configs['apiVersion'] = f'{MILVUS_GRP}/{MILVUS_VER}'\n            d_configs['kind'] = MILVUS_KIND\n        else:\n            d_configs = benedict.from_yaml(template)\n\n        for key in configs.keys():\n            d_configs[key] = configs[key]\n\n        # return a python dict if it is not none\n        return d_configs._dict if d_configs._dict is not None else d_configs\n\n    def install(self, configs, template=None):\n        \"\"\"\n        Method: apply a custom resource object to install milvus\n        Params:\n            configs: a dict type of configurations that describe the properties of milvus to be deployed\n            template: Optional. Pass the template file location if there is a template to apply\n        Return: custom resource object instance\n        \"\"\"\n        new_configs = self._update_configs(configs, template)\n        log.debug(new_configs)\n        namespace = new_configs['metadata'].get('namespace', 'default')\n        # apply custom resource object to deploy milvus\n        cus_res = CusResource(kind=self.plural, group=self.group,\n                              version=self.version, namespace=namespace)\n        log.info(f'install milvus with configs: {json.dumps(new_configs, indent=4)}')\n        return cus_res.create(new_configs)\n\n    def uninstall(self, release_name, namespace='default', delete_depends=True, delete_pvc=True):\n        \"\"\"\n        Method: delete custom resource object to uninstall milvus\n        Params:\n            release_name: release name of milvus\n            namespace: namespace that the milvus is running in\n            delete_depends: whether to delete the dependent etcd, pulsar and minio services. default: True\n            delete_pvc: whether to delete the data persistent pvc volumes. default: True\n        \"\"\"\n        cus_res = CusResource(kind=self.plural, group=self.group,\n                              version=self.version, namespace=namespace)\n        del_configs = {}\n        if delete_depends:\n            del_configs = {'spec.dependencies.etcd.inCluster.deletionPolicy': 'Delete',\n                           'spec.dependencies.pulsar.inCluster.deletionPolicy': 'Delete',\n                           'spec.dependencies.storage.inCluster.deletionPolicy': 'Delete'\n                           }\n        if delete_pvc:\n            del_configs.update({'spec.dependencies.etcd.inCluster.pvcDeletion': True,\n                                'spec.dependencies.pulsar.inCluster.pvcDeletion': True,\n                                'spec.dependencies.storage.inCluster.pvcDeletion': True\n                                })\n        if delete_depends or delete_pvc:\n            self.upgrade(release_name, del_configs, namespace=namespace)\n        cus_res.delete(release_name)\n\n    def upgrade(self, release_name, configs, namespace='default'):\n        \"\"\"\n        Method: patch custom resource object to upgrade milvus\n        Params:\n            release_name: release name of milvus\n            configs: a dict type like configurations to be upgrade milvus\n            namespace: namespace that the milvus is running in\n        \"\"\"\n        if not isinstance(configs, dict):\n            log.error(\"customize configurations must be in dict type\")\n            return None\n\n        d_configs = benedict()\n\n        for key in configs.keys():\n            d_configs[key] = configs[key]\n\n        cus_res = CusResource(kind=self.plural, group=self.group,\n                              version=self.version, namespace=namespace)\n        log.debug(f\"upgrade milvus with configs: {d_configs}\")\n        cus_res.patch(release_name, d_configs)\n\n    def wait_for_healthy(self, release_name, namespace='default', timeout=600):\n        \"\"\"\n        Method: wait a milvus instance until healthy or timeout\n        Params:\n            release_name: release name of milvus\n            namespace: namespace that the milvus is running in\n            timeout: default: 600 seconds\n        \"\"\"\n        cus_res = CusResource(kind=self.plural, group=self.group,\n                              version=self.version, namespace=namespace)\n        starttime = time.time()\n        log.info(f\"start to check healthy: {starttime}\")\n        while time.time() < starttime + timeout:\n            time.sleep(10)\n            res_object = cus_res.get(release_name)\n            mic_status = res_object.get('status', None)\n            if mic_status is not None:\n                if 'Healthy' == mic_status.get('status'):\n                    log.info(f\"milvus healthy in {time.time() - starttime} seconds\")\n                    return True\n                else:\n                    log.info(f\"milvus status is: {mic_status.get('status')}\")\n        log.info(f\"end to check healthy until timeout {timeout}\")\n        return False\n\n    def endpoint(self, release_name, namespace='default'):\n        \"\"\"\n        Method: get Milvus endpoint by name and namespace\n        Return: a string type endpoint. e.g: host:port\n        \"\"\"\n        endpoint = None\n        cus_res = CusResource(kind=self.plural, group=self.group,\n                              version=self.version, namespace=namespace)\n        res_object = cus_res.get(release_name)\n        if res_object.get('status', None) is not None:\n            endpoint = res_object['status']['endpoint']\n\n        return endpoint\n"
  },
  {
    "path": "tests/customize/template/default.yaml",
    "content": "apiVersion: milvus.io/v1beta1\nkind: Milvus\nmetadata:\n  name: my-release\n  namespace: chaos-testing\n  labels:\n    app: milvus\nspec:\n  config:\n    log:\n      level: debug\n    common:\n      simdType: avx\n  components: {}\n  dependencies:\n    etcd:\n      inCluster:\n        deletionPolicy: Delete\n        pvcDeletion: true\n        values:\n          metrics:\n            podMonitor:\n              enabled: true\n    storage:\n      inCluster:\n        deletionPolicy: Delete\n        pvcDeletion: true\n        values:\n          metrics:\n            podMonitor:\n              enabled: true\n  "
  },
  {
    "path": "tests/customize/template/minimum.yaml",
    "content": "apiVersion: milvus.io/v1alpha1\nkind: MilvusCluster\nmetadata:\n  name: my-release\n  labels:\n    app: milvus\nspec:\n  components:\n    image: milvusdb/milvus:master-latest\n  config:\n    knowhere:\n      simdType: avx2\n  dependencies:\n    etcd:\n      inCluster:\n        deletionPolicy: Delete\n        pvcDeletion: true \n        values:\n          replicaCount: 1 \n    pulsar:\n      inCluster:\n        deletionPolicy: Delete\n        pvcDeletion: true \n        values:\n          components:\n            autorecovery: false\n          zookeeper:\n            replicaCount: 1\n          bookkeeper:\n            replicaCount: 1\n          broker:\n            replicaCount: 1\n            configData:\n              ## Enable `autoSkipNonRecoverableData` since bookkeeper is running\n              ## without persistence\n              autoSkipNonRecoverableData: \"true\"\n              managedLedgerDefaultEnsembleSize: \"1\"\n              managedLedgerDefaultWriteQuorum: \"1\"\n              managedLedgerDefaultAckQuorum: \"1\"\n          proxy:\n            replicaCount: 1\n    storage:\n      inCluster:\n        deletionPolicy: Delete\n        pvcDeletion: true \n        values:\n          mode: standalone"
  },
  {
    "path": "tests/customize/test_customize_segment_size.py",
    "content": "import pytest\nimport time\n\nfrom pymilvus import connections\nfrom utils.util_log import test_log as log\nfrom base.collection_wrapper import ApiCollectionWrapper\nfrom base.utility_wrapper import ApiUtilityWrapper\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom milvus_operator import MilvusOperator\nfrom common.milvus_sys import MilvusSys\nfrom common.common_type import CaseLabel\n\n\nnamespace = 'chaos-testing'\n\n\ndef _install_milvus(seg_size):\n    release_name = f\"mil-segsize-{seg_size}-\" + cf.gen_digits_by_length(6)\n    cus_configs = {'spec.components.image': 'milvusdb/milvus:master-latest',\n                   'metadata.namespace': namespace,\n                   'metadata.name': release_name,\n                   'spec.components.proxy.serviceType': 'LoadBalancer',\n                   'spec.config.dataCoord.segment.maxSize': seg_size\n                   }\n    milvus_op = MilvusOperator()\n    log.info(f\"install milvus with configs: {cus_configs}\")\n    milvus_op.install(cus_configs)\n    healthy = milvus_op.wait_for_healthy(release_name, namespace, timeout=1200)\n    log.info(f\"milvus healthy: {healthy}\")\n    if healthy:\n        endpoint = milvus_op.endpoint(release_name, namespace).split(':')\n        log.info(f\"milvus endpoint: {endpoint}\")\n        host = endpoint[0]\n        port = endpoint[1]\n        return release_name, host, port\n    else:\n        return release_name, None, None\n\n\nclass TestCustomizeSegmentSize:\n\n    def teardown_method(self):\n        pass\n        milvus_op = MilvusOperator()\n        milvus_op.uninstall(self.release_name, namespace)\n        connections.disconnect(\"default\")\n        connections.remove_connection(\"default\")\n\n    @pytest.mark.tags(CaseLabel.L3)\n    @pytest.mark.parametrize('seg_size, seg_count', [(128, 10), (1024, 2)])\n    def test_customize_segment_size(self, seg_size, seg_count):\n        \"\"\"\n       steps\n       \"\"\"\n        log.info(f\"start to install milvus with segment size {seg_size}\")\n        release_name, host, port = _install_milvus(seg_size)\n        self.release_name = release_name\n        assert host is not None\n        conn = connections.connect(\"default\", host=host, port=port)\n        assert conn is not None\n        mil = MilvusSys(alias=\"default\")\n        log.info(f\"milvus build version: {mil.build_version}\")\n\n        log.info(f\"start to e2e verification: {seg_size}\")\n        # create\n        name = cf.gen_unique_str(\"segsiz\")\n        t0 = time.time()\n        collection_w = ApiCollectionWrapper()\n        collection_w.init_collection(name=name,\n                                     schema=cf.gen_default_collection_schema(),\n                                     timeout=40)\n        tt = time.time() - t0\n        assert collection_w.name == name\n        entities = collection_w.num_entities\n        log.info(f\"assert create collection: {tt}, init_entities: {entities}\")\n\n        # insert\n        nb = 50000\n        data = cf.gen_default_list_data(nb=nb)\n        t0 = time.time()\n        _, res = collection_w.insert(data)\n        tt = time.time() - t0\n        log.info(f\"assert insert: {tt}\")\n        assert res\n        # insert 2 million entities\n        rounds = 40\n        for _ in range(rounds-1):\n            _, res = collection_w.insert(data)\n        entities = collection_w.num_entities\n        assert entities == nb * rounds\n\n        # load\n        collection_w.load()\n        utility_wrap = ApiUtilityWrapper()\n        segs, _ = utility_wrap.get_query_segment_info(collection_w.name)\n        log.info(f\"assert segments: {len(segs)}\")\n        assert len(segs) == seg_count\n\n        # search\n        search_vectors = cf.gen_vectors(1, ct.default_dim)\n        search_params = {\"metric_type\": \"L2\", \"params\": {\"nprobe\": 16}}\n        t0 = time.time()\n        res_1, _ = collection_w.search(data=search_vectors,\n                                       anns_field=ct.default_float_vec_field_name,\n                                       param=search_params, limit=1, timeout=30)\n        tt = time.time() - t0\n        log.info(f\"assert search: {tt}\")\n        assert len(res_1) == 1\n        collection_w.release()\n\n        # index\n        d = cf.gen_default_list_data()\n        collection_w.insert(d)\n        log.info(f\"assert index entities: {collection_w.num_entities}\")\n        _index_params = {\"index_type\": \"IVF_SQ8\", \"params\": {\"nlist\": 64}, \"metric_type\": \"L2\"}\n        t0 = time.time()\n        index, _ = collection_w.create_index(field_name=ct.default_float_vec_field_name,\n                                             index_params=_index_params,\n                                             name=cf.gen_unique_str(), timeout=120)\n        tt = time.time() - t0\n        log.info(f\"assert index: {tt}\")\n        assert len(collection_w.indexes) == 1\n\n        # search\n        t0 = time.time()\n        collection_w.load()\n        tt = time.time() - t0\n        log.info(f\"assert load: {tt}\")\n        search_vectors = cf.gen_vectors(1, ct.default_dim)\n        t0 = time.time()\n        res_1, _ = collection_w.search(data=search_vectors,\n                                       anns_field=ct.default_float_vec_field_name,\n                                       param=search_params, limit=1, timeout=30)\n        tt = time.time() - t0\n        log.info(f\"assert search: {tt}\")\n\n        # query\n        term_expr = f'{ct.default_int64_field_name} in [1001,1201,4999,2999]'\n        t0 = time.time()\n        res, _ = collection_w.query(term_expr, timeout=30)\n        tt = time.time() - t0\n        log.info(f\"assert query result {len(res)}: {tt}\")\n\n"
  },
  {
    "path": "tests/customize/test_simd_compat.py",
    "content": "import pytest\nimport time\n\nfrom pymilvus import connections\nfrom utils.util_log import test_log as log\nfrom base.collection_wrapper import ApiCollectionWrapper\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom milvus_operator import MilvusOperator\nfrom common.milvus_sys import MilvusSys\nfrom common.common_type import CaseLabel\n\n# sorted by the priority order of the simd\n# | configuration | possible returned SIMD |\n# |--------|----------|\n# | auto | avx512 / avx2 / sse4_2|\n# | avx512 | avx512 / avx2 / sse4_2|\n# | avx2 | avx2 / sse4_2|\n# | avx | sse4_2|\n# | sse4_2 | sse4_2|\nsupported_simd_types = [\"avx512\", \"avx2\", \"avx\", \"sse4_2\"]\nnamespace = 'chaos-testing'\n\n\ndef _install_milvus(simd):\n    release_name = f\"mil-{simd.replace('_','-')}-\" + cf.gen_digits_by_length(6)\n    cus_configs = {'spec.components.image': 'harbor.milvus.io/milvus/milvus:master-latest',\n                   'metadata.namespace': namespace,\n                   'metadata.name': release_name,\n                   'spec.config.common.simdType': simd\n                   }\n    milvus_op = MilvusOperator()\n    log.info(f\"install milvus with configs: {cus_configs}\")\n    milvus_op.install(cus_configs)\n    healthy = milvus_op.wait_for_healthy(release_name, namespace, timeout=1200)\n    log.info(f\"milvus healthy: {healthy}\")\n    if healthy:\n        endpoint = milvus_op.endpoint(release_name, namespace).split(':')\n        log.info(f\"milvus endpoint: {endpoint}\")\n        host = endpoint[0]\n        port = endpoint[1]\n        return release_name, host, port\n    else:\n        return release_name, None, None\n\n\nclass TestSimdCompatibility:\n\n    def teardown_method(self):\n        milvus_op = MilvusOperator()\n        milvus_op.uninstall(self.release_name, namespace)\n\n    @pytest.mark.tags(CaseLabel.L3)\n    @pytest.mark.parametrize('simd', supported_simd_types)\n    def test_simd_compat_e2e(self, simd):\n        \"\"\"\n       steps\n       1. [test_milvus_install]: set up milvus with customized simd configured\n       2. [test_simd_compat_e2e]: verify milvus is working well\n       4. [test_milvus_cleanup]: delete milvus instances in teardown\n       \"\"\"\n        log.info(f\"start to install milvus with simd {simd}\")\n        release_name, host, port = _install_milvus(simd)\n        time.sleep(10)\n        self.release_name = release_name\n        assert host is not None\n        conn = connections.connect(\"default\", host=host, port=port)\n        assert conn is not None\n        mil = MilvusSys(alias=\"default\")\n        log.info(f\"milvus build version: {mil.build_version}\")\n        log.info(f\"milvus simdType: {mil.simd_type}\")\n        assert str(mil.simd_type).lower() == simd.lower()\n\n        log.info(f\"start to e2e verification: {simd}\")\n        # create\n        prefix = \"simd_\"\n        name = cf.gen_unique_str(prefix)\n        t0 = time.time()\n        collection_w = ApiCollectionWrapper()\n        collection_w.init_collection_wrap(name=name)\n        tt = time.time() - t0\n        assert collection_w.name == name\n        entities = collection_w.num_entities\n        log.info(f\"assert create collection: {tt}, init_entities: {entities}\")\n\n        # insert\n        for _ in range(10):\n            data = cf.gen_default_list_data(nb=300)\n            t0 = time.time()\n            _, res = collection_w.insert(data)\n            tt = time.time() - t0\n            log.info(f\"assert insert: {tt}\")\n            assert res\n\n        # flush\n        t0 = time.time()\n        _, check_result = collection_w.flush(timeout=180)\n        assert check_result\n        assert collection_w.num_entities == len(data[0]) + entities\n        tt = time.time() - t0\n        entities = collection_w.num_entities\n        log.info(f\"assert flush: {tt}, entities: {entities}\")\n\n        # index\n        index_params = {\"index_type\": \"IVF_SQ8\", \"params\": {\"nlist\": 64}, \"metric_type\": \"L2\"}\n        t0 = time.time()\n        index, _ = collection_w.create_index(field_name=ct.default_float_vec_field_name,\n                                             index_params=index_params,\n                                             index_name=cf.gen_unique_str())\n        index, _ = collection_w.create_index(field_name=ct.default_string_field_name,\n                                             index_params={},\n                                             index_name=cf.gen_unique_str())\n        tt = time.time() - t0\n        log.info(f\"assert index: {tt}\")\n        assert len(collection_w.indexes) == 2\n\n        # load\n        collection_w.load()\n\n        # search\n        search_vectors = cf.gen_vectors(1, ct.default_dim)\n        search_params = {\"metric_type\": \"L2\", \"params\": {\"nprobe\": 16}}\n        t0 = time.time()\n        res_1, _ = collection_w.search(data=search_vectors,\n                                       anns_field=ct.default_float_vec_field_name,\n                                       param=search_params, limit=1)\n        tt = time.time() - t0\n        log.info(f\"assert search: {tt}\")\n        assert len(res_1) == 1\n\n        # release\n        collection_w.release()\n\n        # insert\n        d = cf.gen_default_list_data()\n        collection_w.insert(d)\n\n        # search\n        t0 = time.time()\n        collection_w.load()\n        tt = time.time() - t0\n        log.info(f\"assert load: {tt}\")\n        nq = 5\n        topk = 5\n        search_vectors = cf.gen_vectors(nq, ct.default_dim)\n        t0 = time.time()\n        res, _ = collection_w.search(data=search_vectors,\n                                     anns_field=ct.default_float_vec_field_name,\n                                     param=search_params, limit=topk)\n        tt = time.time() - t0\n        log.info(f\"assert search: {tt}\")\n        assert len(res) == nq\n        assert len(res[0]) <= topk\n        # query\n        term_expr = f'{ct.default_int64_field_name} in [1, 2, 3, 4]'\n        t0 = time.time()\n        res, _ = collection_w.query(term_expr)\n        tt = time.time() - t0\n        log.info(f\"assert query result {len(res)}: {tt}\")\n        assert len(res) >= 4\n\n"
  },
  {
    "path": "tests/data/train_embeddings.csv",
    "content": "path,label,vector\n./train/brain_coral/n01917289_1783.JPEG,brain_coral,\"[0.001221718150191009, 0.019385283812880516, 0.0012966834474354982, -0.05869423225522041, -0.07314745336771011, 0.009818739257752895, -0.012571299448609352, 0.01936987228691578, 0.013926480896770954, 0.012706195004284382, -0.052923139184713364, 0.009748490527272224, -0.06815765053033829, -0.04255993291735649, 0.018230020999908447, -0.037875499576330185, 0.024184122681617737, 0.059950366616249084, 0.017211226746439934, 0.03073771297931671, -0.020521296188235283, -0.024839947000145912, -0.00846018549054861, -0.057747043669223785, 0.02150764875113964, 0.03388987481594086, 0.007583513390272856, 0.008437358774244785, 0.01229020208120346, 0.009813790209591389, -0.02302813157439232, -0.012931917794048786, 0.022550180554389954, 0.026420213282108307, -0.01120482012629509, 0.014809561893343925, -0.010993415489792824, 0.010669862851500511, 0.020848875865340233, 0.028226274996995926, 0.02036280743777752, -0.0035496894270181656, -0.009294223971664906, 0.0029178974218666553, -0.004718594718724489, -0.09612877666950226, -0.009631907567381859, 0.049230773001909256, 0.012917592190206051, 0.05222393944859505, -0.04392702132463455, -0.0036753222811967134, 0.021286237984895706, -0.0059196799993515015, -0.05065504461526871, 0.004512702580541372, -0.03858316317200661, -0.04840949922800064, 0.014436020515859127, -0.030610544607043266, 0.07143566012382507, 0.03150143846869469, 0.0014469764428213239, -0.04632197320461273, -0.024495359510183334, 0.03744146227836609, 0.021294962614774704, 0.0333864800632, 0.019304761663079262, 0.002186872996389866, 0.0068594468757510185, 0.009355125948786736, -0.014642133377492428, -0.054781410843133926, -0.00626756576821208, -0.01919372007250786, -0.01720968261361122, 0.0007040352211333811, 0.05765358358621597, -0.07006881386041641, 0.024907104671001434, -0.00892073567956686, -0.027642177417874336, -0.06236721947789192, 0.0043600862845778465, 0.017025552690029144, 0.09016869217157364, 0.008515060879290104, 0.04664630815386772, 0.011623155325651169, 0.0032848224509507418, -0.06795591115951538, -0.6259476542472839, -0.007728567346930504, -0.025071177631616592, 0.00011937286762986332, 0.039217978715896606, -0.031032774597406387, -0.06342501193284988, -0.029736774042248726, -0.01001911610364914, 0.03174501284956932, -0.046531084924936295, 0.03392285481095314, 0.039682645350694656, -0.05001003295183182, -0.12021227180957794, 0.014744549058377743, -0.012904336676001549, 0.008932258933782578, 0.005187372211366892, -0.019940296187996864, -0.0028669172897934914, -0.003918901085853577, -0.03165661543607712, -0.02342270128428936, 0.06060972809791565, 0.03113136813044548, 0.009707986377179623, 0.043800871819257736, 0.035453423857688904, -0.02417859435081482, -0.03860082849860191, -0.0010492188157513738, -0.04815253987908363, 0.040451399981975555, 0.0051850383169949055, -0.00031929914257489145, 0.061612293124198914, 0.033727020025253296, 0.06716141104698181, -0.018795758485794067, -0.03186720237135887, 0.08439403772354126, 0.028561435639858246, 0.03500004857778549, 0.018373921513557434, -0.07822065055370331, -0.00968142133206129, -0.009037631563842297, -0.0006754738278687, -0.0006758966483175755, -0.043954119086265564, 0.051497932523489, -0.013305061496794224, -0.03768585994839668, -0.041958119720220566, -0.012403735890984535, -0.006560985930263996, 0.002182713942602277, -0.019771432504057884, -0.027173619717359543, 0.013592621311545372, 0.019726527854800224, -0.014863594435155392, 0.011970067396759987, 0.05852051451802254, -0.0070762294344604015, -0.020926719531416893, 0.02160836197435856, -0.0239261444658041, -0.017207840457558632, -0.017299210652709007, -0.0008296205196529627, -0.008649470284581184, -0.02409556321799755, -0.039505958557128906, 0.04034298658370972, 0.014762120321393013, -0.014202671125531197, -0.007209654897451401, 0.04877933859825134, 0.0058827148750424385, 0.008805567398667336, 0.029077809303998947, 0.04879843816161156, -0.15259991586208344, -0.006606928072869778, -0.044722236692905426, 0.01155830081552267, 0.025887807831168175, -0.021578649058938026, -0.02978898212313652, 0.0005227273795753717, 0.0316801443696022, -0.005391034297645092, -0.019648844376206398, -0.025077860802412033, 0.02826586551964283, 0.025150548666715622, -0.010993001982569695, -0.03380497172474861, 0.03955618292093277, -0.0138495909050107, 0.06079041212797165, -0.02818967029452324, 0.009694435633718967, 0.002082411665469408, 0.056310027837753296, -0.033551208674907684, -0.008376296609640121, -0.03443599492311478, 0.002174908062443137, 0.05802189186215401, 0.025996537879109383, 0.00869351252913475, 0.05604097992181778, -0.03300655633211136, 0.028668126091361046, -0.005312946625053883, -0.004241508897393942, 0.0665111243724823, -0.0404139868915081, -0.027791008353233337, 0.047970328480005264, 0.041513893753290176, 0.027446750551462173, -0.01832973212003708, -0.02976425737142563, -0.023539137095212936, 0.07758922129869461, 0.006750558968633413, 0.0003101127513218671, -0.019799431785941124, 0.04228958860039711, -0.031824756413698196, 0.03140674903988838, -0.02710939757525921, -0.033283259719610214, 0.03930933028459549, -0.016562877222895622, -0.0064820898696780205, 0.00426897406578064, -0.0695774108171463, -0.04427722096443176, -0.032380156219005585, 0.01827336847782135, -0.02894454449415207, 0.005540952552109957, 0.003995177336037159, -0.02588990144431591, 0.02499106153845787, 0.04812454804778099, 0.013987633399665356, 0.047479841858148575, -0.00930949579924345, -0.002293654251843691, 0.008119403384625912, -0.004450938198715448, -0.014123366214334965, 0.004239714238792658, 0.008748475462198257, 0.012639671564102173, 0.04891880974173546, -0.04597224295139313, -0.008786633610725403, -0.0025974821764975786, -0.013477222993969917, -0.0004558212822303176, -0.0024495646357536316, 0.017340440303087234, -0.006223208270967007, -0.00542718730866909, -0.033118780702352524, 0.01291426457464695, 0.03207503259181976, 0.04568491131067276, 0.01345248706638813, -0.0409737303853035, -0.030906356871128082, 0.00465419003739953, -0.004034377634525299, -0.014891531318426132, -0.020851364359259605, -0.010582742281258106, -0.016865426674485207, -0.06460393965244293, 0.016306644305586815, -0.0253023449331522, 0.010285922326147556, 0.010201609693467617, 0.023495299741625786, 0.02520771510899067, 0.012172509916126728, 0.030864292755723, -0.0014350998681038618, 0.008326390758156776, -0.04995478689670563, 0.0008675490389578044, -0.01759454607963562, -0.027484361082315445, -0.0028969082050025463, 0.04590573161840439, 0.0497613288462162, -0.002413267269730568, 0.023223204538226128, 0.010706713423132896, -0.007484216243028641, 0.0054794964380562305, 0.02646036632359028, -0.04441550746560097, -0.021489158272743225, -0.027319932356476784, 0.05399017035961151, 0.018553080037236214, 0.05461462587118149, -0.04428033158183098, 0.045155465602874756, 0.04466323181986809, -0.018545938655734062, -0.007688949815928936, 0.011336770839989185, 0.08427230268716812, 0.023578306660056114, 0.030584005638957024, 0.006102858576923609, -0.016971135511994362, 0.033741313964128494, -0.02787940204143524, -0.05533058941364288, 0.003088860074058175, 0.3039807379245758, -0.003395779523998499, -0.01063270028680563, 0.005414784420281649, -0.0011391661828383803, -0.025765664875507355, 0.003914338536560535, -0.007290754932910204, -0.011946084909141064, -0.03791847079992294, -0.011175365187227726, 0.02184748649597168, -0.07230505347251892, -0.04358438402414322, -0.02792268432676792, -0.053413379937410355, -0.008991723880171776, -0.029400693252682686, 0.02880329079926014, 0.02150757797062397, -0.011530823074281216, -0.004593593999743462, -0.0007110543665476143, 0.02570359781384468, -0.014085776172578335, -0.008367540314793587, -0.014532211236655712, 0.006445315200835466, 0.02315516024827957, -0.020979339256882668, 0.02595711126923561, 0.01831023581326008, 0.03225408494472504, -0.04528190940618515, -0.03713070601224899, 0.026804868131875992, -0.031775765120983124, 0.00837370753288269, -0.006575821433216333, 0.0036296278703957796, -0.013106582686305046, 0.010968723334372044, -0.005508617497980595, 0.001803478691726923, -0.018464792519807816, -0.00031942359055392444, -0.10293339937925339, 0.011012648232281208, 0.008059212937951088, -0.01774260215461254, -0.007777142804116011, 0.012344634160399437, 0.0007159134838730097, 0.05562476068735123, 0.024525852873921394, 0.04337157681584358, -0.01108828466385603, -0.020193802192807198, -0.010093411430716515, 0.009932332672178745, -0.02831672690808773, -0.01681121252477169, -0.029746320098638535, -0.02308264560997486, -0.002508130855858326, 0.0021620572078973055, 0.0019277663668617606, -0.049627434462308884, -0.07957715541124344, 0.0029747653752565384, -0.02422175370156765, 0.010684613138437271, 0.026240745559334755, -0.022674966603517532, -0.02035714127123356, 0.03441911190748215, 0.05665254965424538, -0.05284406244754791, -0.051573120057582855, -0.0015692983288317919, -0.02510220557451248, 0.015741022303700447, 0.005480002146214247, -0.0006552161648869514, -0.05601179972290993, -0.02185860648751259, 0.03188024461269379, -0.025694245472550392, -0.035124678164720535, 0.10171634703874588, 0.001869317959062755, 0.011409019120037556, -0.0023135256487876177, -0.019047560170292854, -0.021358031779527664, 0.00725221261382103, 0.0015804298454895616, -0.01375295128673315, 0.014687266200780869, -0.0071539985947310925, 0.014539686031639576, 0.033473603427410126, -0.09310445189476013, 0.03505554795265198, 0.004325835965573788, 0.0003844561579171568, 0.01416606456041336, -0.015537984669208527, -0.03878694772720337, -0.009785465896129608, 0.015604461543262005, 0.025009306147694588, -0.015820268541574478, 0.00027974971453659236, -0.013252857141196728, 0.008904673159122467, 0.003266391344368458, 0.023797621950507164, 0.00570606580004096, 0.013980093412101269, -0.06584031134843826, -0.026356449350714684, -0.047652363777160645, -0.004817895125597715, -0.011806580238044262, 0.003813729854300618, -0.0402517132461071, 0.033773474395275116, 0.008595536462962627, 0.026618387550115585, -0.03511270508170128, 0.013947744853794575, -0.02425958216190338, 0.04903092235326767, -0.00011286354856565595, 0.009353292174637318, 0.04392123967409134, 0.01428733766078949, -0.005682367831468582, -0.013255510479211807, 0.05889745056629181, -0.024579312652349472, -0.030495306476950645, 0.0333281084895134, -0.022689608857035637, 0.0074622672982513905, -0.004539880435913801, -0.004759244155138731, -0.05106324329972267, 0.008984125219285488, -0.04986017942428589, 0.011842883192002773, -0.06618290394544601, -0.025831589475274086, 0.027168264612555504, -0.018176747485995293, 0.009196448139846325, -0.019454728811979294, -0.0036425322759896517, 0.011614187620580196, -0.02067616768181324, -0.013262901455163956, -0.022966844961047173, -0.008114003576338291, 0.008427989669144154, -0.009798438288271427, 0.01706165261566639, 0.01622101105749607, 0.02603824995458126, -0.0376153290271759, -0.003192473202943802, 0.017432857304811478, -0.03504026308655739, -0.016897136345505714, -0.0028924262151122093, 0.016650879755616188, 0.01776239648461342, -0.01094372570514679, 0.036773283034563065, 0.014697672799229622, -0.00983431376516819, -0.00021365514839999378, 0.02606816031038761, 0.03596058115363121, -0.031501129269599915, 0.0002436949871480465, 0.016978342086076736, -0.03333284705877304, 0.0001591629843460396, 0.0015672218287363648, 0.012397180311381817]\"\n./train/brain_coral/n01917289_4317.JPEG,brain_coral,\"[-0.0035346506629139185, 0.05662623047828674, -0.006546225864440203, 0.018148371949791908, -0.02343796007335186, 0.03359470143914223, -0.010615892708301544, -0.019308285787701607, 0.029026925563812256, 0.012703489512205124, -0.024220015853643417, 0.014141703955829144, -0.03520560264587402, -0.006465750280767679, -0.024893825873732567, -0.03040763922035694, 0.06816482543945312, 0.02185847982764244, -0.007838425226509571, 0.0006191319553181529, -0.06328409165143967, -0.012101993896067142, -0.01729797199368477, -0.07177019864320755, 0.035082053393125534, 0.07275072485208511, 0.03840383514761925, -0.013599958270788193, 0.022904332727193832, -0.0174654982984066, 0.0005695597501471639, -0.0029985385481268167, 0.025365682318806648, 0.004728809930384159, 0.03755638375878334, -0.008654817938804626, -0.007565413136035204, 0.014116642996668816, -0.005352620966732502, 0.08305922895669937, -0.045063212513923645, -0.02395275980234146, -0.0030176101718097925, 0.020628750324249268, 0.05485522747039795, -0.15082788467407227, 0.021712306886911392, 0.03947906568646431, 0.03716788813471794, 0.032059963792562485, 0.004549226723611355, 0.027067380025982857, 0.029321644455194473, -0.019146505743265152, -0.04771728813648224, -0.00999420415610075, 0.012951602227985859, -0.060554079711437225, 0.01820671372115612, -0.002367178676649928, 0.04899837449193001, -0.018231861293315887, 0.00985976867377758, -0.012163713574409485, -0.049652110785245895, 0.02671213261783123, -0.013333864510059357, 0.014994795434176922, -0.02897394262254238, -0.027375932782888412, -0.009200889617204666, 0.012565316632390022, -0.041034430265426636, -0.015007981099188328, 0.0252289567142725, -0.05104199796915054, -0.004728095140308142, 0.005118922796100378, 0.002101179677993059, -0.02697649970650673, -0.0057145883329212666, 0.0007005869410932064, 0.022599637508392334, -0.07764431834220886, 0.016284974291920662, 0.045175254344940186, 0.11135180294513702, -0.027547962963581085, 0.0017774682492017746, 0.013852040283381939, 0.007007112260907888, -0.018953416496515274, -0.6018176078796387, 0.03397924825549126, 0.007545778062194586, 0.01881307177245617, -0.0067797270603477955, -0.025720203295350075, -0.11550389975309372, -0.02984602563083172, -0.04009420797228813, 0.010347317904233932, -0.013363104313611984, 0.017257973551750183, -0.010943346656858921, -0.0068943677470088005, -0.13841816782951355, -0.018115561455488205, -0.051630087196826935, 0.03511476889252663, 0.025243977084755898, -0.051111530512571335, 0.006692747585475445, 0.009289529174566269, -0.006142623722553253, 0.00943254679441452, 0.1108407974243164, 0.050990279763936996, 0.024779682978987694, 0.034255728125572205, -0.002413279376924038, -0.01730242930352688, -0.0188672486692667, 0.006881274748593569, -0.02722799777984619, -0.0026960186660289764, -0.04409237951040268, -0.021037908270955086, 0.020027389749884605, -0.001512201619334519, 0.040768176317214966, 0.009897264651954174, -0.03522362932562828, 0.07762308418750763, 0.015474103391170502, 0.05864917114377022, 0.02129516191780567, -0.08628851920366287, -0.019719962030649185, 0.008573314175009727, -0.0037077206652611494, 0.028401538729667664, -0.07833240926265717, 0.07100043445825577, 0.008359044790267944, -0.011631587520241737, -0.012857002206146717, 0.01328237447887659, -0.03348309174180031, -0.018765104934573174, -0.01651536300778389, -0.01260745245963335, 0.04853980615735054, 0.00742303766310215, -0.007245857734233141, 0.003189630573615432, 0.012495351955294609, 0.0307345949113369, -0.026669222861528397, -0.013740173541009426, -0.06703022867441177, -0.03652043640613556, 0.001635305117815733, -0.006468937266618013, -0.05171310529112816, -0.0013190535828471184, -0.06918428838253021, 0.0662977397441864, -0.0024899898562580347, 0.006748323328793049, 0.020511075854301453, 0.016545815393328667, -0.022000549361109734, -0.03411495313048363, -0.006807886529713869, -0.0033615357242524624, -0.008284587413072586, 0.006578691769391298, -0.010544474236667156, -0.027730261906981468, -0.015550400130450726, -0.007572605740278959, -0.03631191328167915, 0.0006284655537456274, 0.016359908506274223, 0.01686336100101471, 0.016850393265485764, -0.009148934856057167, 0.003145830938592553, 0.023247050121426582, 0.0007291871006600559, 0.00998793076723814, 0.016345907002687454, -0.0009847626788541675, 0.03722359240055084, -0.025116270408034325, 0.0031950282864272594, -0.04425588995218277, 0.026922062039375305, -0.030216896906495094, 0.004084683954715729, 0.005412565544247627, -0.02523030899465084, 0.03200026601552963, -0.012179155834019184, -0.015155969187617302, 0.015889964997768402, -0.0630267783999443, 0.017201844602823257, -0.016987601295113564, -0.032432880252599716, 0.06991249322891235, -0.059704702347517014, -0.030150197446346283, 0.01093253307044506, 0.005847826134413481, 0.036060117185115814, 0.01714879460632801, 0.058922845870256424, 0.012033389881253242, 0.05951855704188347, 0.01814277656376362, -0.011763869784772396, -0.0665980875492096, 0.004006145987659693, 0.005934175569564104, -0.001672628684900701, -0.021181616932153702, -0.002746175043284893, 0.024427691474556923, -0.04350672662258148, 0.00777314230799675, 0.021808035671710968, 0.012730845250189304, -0.01309180073440075, 0.029628736898303032, 0.004213433247059584, 0.016964031383395195, 0.015475060790777206, 0.0033002065028995275, -0.04933961480855942, 0.032746706157922745, -0.010037182830274105, -0.02380494214594364, -0.005571553949266672, 0.005194603465497494, 0.003465911140665412, 0.010903059504926205, -0.07320915907621384, 0.021770743653178215, 0.04289271682500839, 0.05149680748581886, 0.029697149991989136, 0.05052043870091438, -0.04040173813700676, 0.007988466881215572, -0.0034778413828462362, 0.004820669535547495, 0.060350269079208374, 0.01790103316307068, 0.014949515461921692, 0.02151348441839218, 0.036654993891716, -0.009902575053274632, -0.003905113087967038, -0.003404183080419898, 0.021204177290201187, -0.001075381995178759, -0.013545380905270576, -0.013370396569371223, 0.019951574504375458, 0.016165342181921005, -0.020365269854664803, 0.0181951392441988, -0.034105364233255386, -0.02855762653052807, -0.013179103843867779, -0.017361003905534744, 0.022782620042562485, 0.00830661691725254, 0.01770482212305069, 0.00891081802546978, 0.022276531904935837, -0.00024927264894358814, 0.028535695746541023, 0.014937818050384521, -0.061516277492046356, -0.06576494127511978, -0.0006669149152003229, -0.004640038125216961, 0.008748194202780724, -0.044126298278570175, 0.004954325035214424, 0.0234039518982172, -3.861808363581076e-05, 0.012791840359568596, -0.027665548026561737, 0.012563085183501244, 0.013536513783037663, 0.05000300332903862, -0.0315568670630455, -0.012933477759361267, -0.016719577834010124, 0.02746349573135376, 0.05546285957098007, 0.02129710651934147, -0.03311627730727196, 0.0119816018268466, 0.05338208004832268, -0.005023131147027016, 0.05031517893075943, -0.002792343031615019, 0.07746055722236633, 0.025575866922736168, -0.00889764167368412, -0.039300285279750824, -0.007629699073731899, 0.051874417811632156, -0.051472920924425125, -0.07472678273916245, 0.038079727441072464, 0.2637408375740051, -0.03454411402344704, -0.07563488185405731, 0.042710255831480026, 0.0055932640098035336, 0.023459844291210175, 0.013203036040067673, -0.021488338708877563, -0.022663669660687447, -0.01688467152416706, -0.0013909833505749702, 0.014828233048319817, -0.008173340000212193, -0.02757025696337223, -0.028315190225839615, -0.012136731296777725, -0.020602496340870857, 0.03816873952746391, 0.04935569316148758, -0.008788990788161755, -0.021309401839971542, -0.021345969289541245, 0.03348550200462341, 0.0005472784396260977, -0.007988746277987957, -0.03779127448797226, -0.011939851567149162, -0.005325864069163799, 0.008328658528625965, -0.012332357466220856, 0.005897667724639177, 0.03132413700222969, -0.025319745764136314, -0.019017772749066353, 0.004862639587372541, 0.018101723864674568, -0.07932012528181076, -0.017369482666254044, -0.01223890483379364, 0.047466449439525604, -0.02903013490140438, 0.00878403801470995, 0.007419889327138662, -0.05099180340766907, -0.003329923376441002, 0.01588583178818226, -0.06426668167114258, -0.03124677948653698, -0.018406923860311508, -0.000667548447381705, -0.03063742071390152, -0.007698176894336939, 0.025855259969830513, 0.08066485077142715, -0.007319597993046045, 0.014409373514354229, -0.019469456747174263, -0.033879946917295456, -0.008407322689890862, -0.033224813640117645, -0.0372307226061821, -0.048728130757808685, -0.01956865005195141, 0.0324256457388401, -0.05041824281215668, -0.01579068787395954, 0.027795596048235893, -0.06995304673910141, -0.07902522385120392, -0.016323495656251907, -0.006068381946533918, 0.02549322508275509, 0.02233492024242878, -0.005861957557499409, -0.05196446552872658, 0.04171157628297806, 0.010494782589375973, -0.029686087742447853, 0.00697956420481205, 0.01929616741836071, 0.00478693563491106, 0.019971659407019615, -0.011411833576858044, 0.03627149388194084, -0.027709651738405228, -0.03284553065896034, -0.027316777035593987, -0.018496448174118996, 0.005455233622342348, 0.04284586012363434, -0.03484726324677467, 0.026607364416122437, 0.003985297866165638, -0.0005465889698825777, 0.012526004575192928, 0.07124942541122437, -0.036317043006420135, -0.0362858772277832, 0.0010768789798021317, 0.0293856430798769, -0.056667812168598175, -0.006813930347561836, -0.04773714393377304, 0.03235090523958206, -0.024110808968544006, 0.05911170691251755, 0.04873655363917351, 0.02908339351415634, -0.00535031221807003, -0.020791195333003998, 0.022339683026075363, 0.06790285557508469, 0.005071578547358513, -0.006280467379838228, -0.010160928592085838, -0.0008954498916864395, 0.03536129370331764, 0.005365451332181692, -0.016348715871572495, 0.006985573098063469, -0.008925951085984707, -0.029928935691714287, -0.06205638498067856, -0.021203532814979553, -0.01571105606853962, 0.009924612939357758, -0.030449192970991135, 0.017424456775188446, 0.02462223917245865, 0.0022559312637895346, 0.008291262201964855, 0.028960207477211952, -0.0796857550740242, 0.018536752089858055, -0.05839689075946808, 0.05648409575223923, 0.02563333883881569, -0.02323971502482891, -0.03564165532588959, -0.009778953157365322, 0.06060228869318962, -0.015349053777754307, -0.005661006551235914, 0.05016116797924042, -0.05273061618208885, -0.03825591877102852, -0.0026195587124675512, 0.04060006141662598, 0.01841512694954872, 0.028893206268548965, -0.005008779000490904, 0.02174580655992031, 0.005083051975816488, 0.018596136942505836, -0.022104982286691666, 0.024230020120739937, 0.04089144989848137, -0.03100738301873207, -0.0019483559299260378, 0.03284509852528572, -0.0016634139465168118, -0.0004970395821146667, 0.00673564150929451, -0.007875566370785236, 0.04084210470318794, -0.005788496229797602, 0.023096753284335136, 0.03745684400200844, 0.04444529488682747, -0.02418791875243187, 0.013106084428727627, -0.0016506874235346913, -0.08404789865016937, 0.0031760744750499725, 0.026327477768063545, 0.0162209440022707, 4.5100397983333096e-05, -0.029763439670205116, 0.01566014438867569, 0.008345335721969604, -0.006100584287196398, 0.012035632506012917, 0.02017470821738243, 0.04867299273610115, -0.037856489419937134, 0.03968527913093567, -0.013988298363983631, -0.03829678148031235, 0.06683263927698135, -0.043642789125442505, -0.01224011741578579]\"\n./train/brain_coral/n01917289_765.JPEG,brain_coral,\"[0.014164197258651257, -0.0024078513961285353, -0.020693127065896988, 0.014125490561127663, -0.05186880752444267, -0.048621244728565216, -0.038626983761787415, 0.005568904336541891, 0.018612565472722054, 0.0025265044532716274, -0.03621451184153557, -0.0032830191776156425, 0.06408753246068954, 0.015709539875388145, 0.03684704750776291, -0.015743382275104523, -0.002703967737033963, 0.05411682277917862, 0.0021316143684089184, -0.013320923782885075, -0.06277459859848022, 0.02442651242017746, 0.007865587249398232, -0.07765968888998032, -0.0020447729621082544, -0.015789175406098366, -0.018699178472161293, -0.02527361549437046, 0.00043353423825465143, 0.014598974026739597, -0.00632471265271306, -0.009535265155136585, -0.026513444259762764, -0.031262170523405075, 0.027239082381129265, 0.0072206417098641396, -0.0048000393435359, -0.02608088217675686, 0.0167438555508852, 0.1383960098028183, 0.044255517423152924, -0.012020106427371502, -0.0026599643751978874, 0.018102433532476425, 0.021843595430254936, -0.06442821025848389, -0.006894918158650398, 0.006415418349206448, -0.04553873836994171, 0.019438674673438072, 0.002379688434302807, 0.013176405802369118, -0.008774510584771633, -0.016790006309747696, -0.05672341585159302, 0.012280775234103203, -0.02758503518998623, 0.010736276395618916, -0.017929188907146454, -0.02672831527888775, 0.027232849970459938, -0.027759641408920288, 0.01859496906399727, 0.037359584122896194, 0.02710828371345997, -0.017413651570677757, 0.024967005476355553, 0.10749220848083496, 0.04323463886976242, -0.0062866793014109135, 0.008933093398809433, -0.040517475455999374, 0.008768362924456596, -0.030296621844172478, -0.005174541845917702, 0.05552505701780319, 0.008851645514369011, -0.005730961449444294, 0.010433126240968704, -0.03267822787165642, -0.000706608931068331, 0.0038532097823917866, -0.007132350001484156, -0.04251588135957718, 0.05081722140312195, 0.00888276007026434, 0.04370304197072983, -0.020544754341244698, -0.00034311512717977166, 0.02951008826494217, 0.024494223296642303, -0.028902115300297737, -0.6203188896179199, 0.00936109572649002, -0.027312567457556725, 0.02175315096974373, 0.016896149143576622, -0.03341570496559143, -0.008615926839411259, -0.08721306920051575, -0.005025862250477076, 0.013924098573625088, -0.07975930720567703, 0.0038076606579124928, 0.04519256204366684, 0.025679610669612885, -0.2066219300031662, -0.004548500757664442, -0.028402606025338173, 0.004520033951848745, 0.03016483224928379, -0.029008515179157257, 0.021866746246814728, 0.020075442269444466, -0.010660446248948574, -0.057111456990242004, 0.02484986186027527, -0.015213494189083576, -0.004142126068472862, 0.013902736827731133, -0.003557224292308092, 0.013223156332969666, -0.03351901099085808, -0.017904147505760193, -0.03936821594834328, 0.0017140936106443405, 0.030471833422780037, 0.004614141304045916, 0.01509706862270832, -0.036043062806129456, 0.04296676442027092, 0.03141496330499649, -0.01393505185842514, 0.08139383792877197, 0.015994761139154434, 0.011486695148050785, 0.004291613586246967, -0.003550427732989192, 0.02127469889819622, -0.046455446630716324, 0.02181077189743519, -0.02639806643128395, -0.04042408987879753, -0.0036199174355715513, -0.0014569010818377137, -0.04222479835152626, -0.02399398759007454, 0.029071154072880745, -0.016070201992988586, 0.02020438015460968, 0.017950180917978287, -0.006446303799748421, 0.002830107929185033, -0.0032222485169768333, 0.0008942632703110576, -0.006153308320790529, 0.0005408073193393648, 0.00533779663965106, 0.024184362962841988, 0.045668307691812515, -0.02826365828514099, -0.027374127879738808, -0.020896241068840027, 0.044162556529045105, 0.01827186904847622, 0.022646108642220497, -0.00629041250795126, 0.03926371783018112, -0.002533613471314311, 0.012497806921601295, -0.0040849121287465096, 0.04799439013004303, -0.004770941101014614, 0.011935784481465816, 0.01961791329085827, -0.003053531749173999, -0.09481249749660492, -0.0073720491491258144, -0.04702837020158768, 0.007443617098033428, 0.05622953549027443, 0.006914329715073109, -0.0033298993948847055, -0.005629046820104122, -0.00940453726798296, 0.003931019920855761, 0.00017350881535094231, -0.08230755478143692, -0.020257165655493736, 0.03495809808373451, 0.004514231812208891, -0.01138500776141882, 0.005933583714067936, -0.02093084342777729, 0.007272976916283369, -0.011807875707745552, 0.021066147834062576, 0.03227626532316208, 0.019431019201874733, 0.010105594992637634, 0.002075033960863948, -0.023832911625504494, 0.0029695474077016115, 0.031137289479374886, 0.01778503507375717, 0.014381660148501396, 0.06479302793741226, -0.0271307323127985, 0.023230386897921562, 0.01973632350564003, -0.0005330830463208258, 0.01134943962097168, -0.0335158035159111, -0.021837178617715836, 0.04864976182579994, 0.013195916078984737, 0.043631523847579956, -0.00028800146537832916, -0.04513726755976677, -0.03317948430776596, 0.04710468277335167, 0.04588126763701439, -0.0740317553281784, -0.028631292283535004, 0.0008680972969159484, -0.016005277633666992, -0.005460620857775211, 0.013848247937858105, -0.010029858909547329, 0.007395854685455561, -0.008083145134150982, 0.00609584990888834, 0.00032866891706362367, -0.029626768082380295, -0.017834488302469254, -0.07446925342082977, 0.018426457419991493, 0.007866229861974716, 0.025378810241818428, 0.0003977430460508913, 0.029514718800783157, 0.05088000372052193, 0.024988515302538872, -0.02210211381316185, -0.014494848437607288, -0.040715645998716354, -0.016702476888895035, 0.038103487342596054, -0.03194107487797737, -0.014222348108887672, 0.03118462674319744, 0.014275322668254375, 0.003931001760065556, 0.018029557541012764, -0.024766884744167328, 0.03007131814956665, 0.049651533365249634, -0.0076760174706578255, 0.16021740436553955, -0.0006287540309131145, 0.057513054460287094, -0.010426651686429977, -0.008189184591174126, 0.08145025372505188, -0.022119779139757156, -0.04889674857258797, 0.013836907222867012, 0.03125379979610443, -0.04282832890748978, -0.02567628212273121, 0.021317439153790474, -0.014251447282731533, 0.024502892047166824, 0.03155798837542534, 0.028115784749388695, -0.01929440163075924, -0.06074907258152962, 0.04158841073513031, -0.02675444632768631, -0.0238706786185503, 0.03091748245060444, 0.0282971803098917, 0.02328573353588581, 0.010668744333088398, 0.0129238935187459, 0.003584642196074128, -0.049333322793245316, -0.03636608272790909, 0.006304028443992138, -0.012806292623281479, -0.0073682451620697975, 0.009132924489676952, -0.03471153602004051, -0.00046040513552725315, -0.01429101824760437, 0.0003945543139707297, 0.07232611626386642, 0.007237594109028578, 0.05962739139795303, 0.05238458141684532, -0.028159480541944504, -0.0156744085252285, 0.00028548832051455975, 0.019615601748228073, 0.028009306639432907, -0.01953914389014244, 0.022870616987347603, 0.04262262582778931, 0.07043293863534927, -0.011897262185811996, -0.004208454862236977, -0.011510743759572506, 0.0812472254037857, 0.022707151249051094, -0.0011362965451553464, 0.005712025333195925, 0.014074020087718964, 0.07049238681793213, -0.07364796847105026, -0.03537619113922119, 0.02458633854985237, 0.10735378414392471, -0.036825548857450485, -0.041420698165893555, 0.07540551573038101, 0.01140530128031969, -0.011356796137988567, 0.03164081647992134, 0.010110867209732533, -0.007724021561443806, -0.0032002225052565336, -0.022649381309747696, 0.01908680610358715, -0.02635256201028824, -0.005191638134419918, -0.005953507497906685, -0.007826190441846848, -0.05087525397539139, -0.025851920247077942, 0.015143584460020065, -0.026632003486156464, -0.02359597571194172, 0.0008984400192275643, -0.02290843240916729, 0.008689959533512592, 0.01903548650443554, -0.018284669145941734, 0.03049718216061592, 0.002814788604155183, 0.0400698184967041, 0.061134204268455505, -0.023934559896588326, 0.03376057371497154, 0.043923795223236084, -0.0009706718265078962, -0.018127385526895523, -0.015772083774209023, -0.08005917817354202, 0.03846651688218117, 0.02038603276014328, 0.04243502765893936, -0.03394318372011185, 0.01389408204704523, 0.023513546213507652, 0.01606745831668377, 0.002110379049554467, 0.023547468706965446, -0.18169005215168, -0.007654329761862755, 0.02284890227019787, 0.01259469985961914, 0.04828767478466034, 0.03377027064561844, 0.012909816578030586, 0.03732939064502716, 0.0021576627623289824, 0.09182474762201309, -0.011520253494381905, -0.07159098237752914, -0.001427975483238697, -0.04296916723251343, -0.015491115860641003, 0.024331875145435333, -0.020956408232450485, -0.007697051391005516, 0.017726240679621696, 0.017536642029881477, -0.01571659743785858, -0.02332453988492489, -0.03734724223613739, -0.06388294696807861, -0.0005511351628229022, 0.0007305804756470025, 0.02003813348710537, -0.04127991199493408, -0.014687723480165005, 0.05504611134529114, 0.04465226083993912, -0.09891118109226227, -0.009410101920366287, -0.016707809641957283, -0.04004039987921715, -0.008110404014587402, -0.014039197005331516, -0.005451940931379795, -0.01579020544886589, 0.023235512897372246, 0.014199179597198963, 0.01974080316722393, -0.04275210574269295, 0.05346451699733734, 0.021824821829795837, -0.011505666188895702, -0.023432118818163872, -0.0005010849563404918, -0.04383514076471329, 0.026785042136907578, 0.03125796839594841, -0.02829795889556408, -0.012873442843556404, -0.006285638082772493, 0.007889307104051113, -0.014432757161557674, -0.029124952852725983, 0.06172161549329758, -0.041301827877759933, 0.006052809301763773, 0.0778292641043663, -0.07293860614299774, -0.009304599836468697, -0.01094637718051672, -0.02603442594408989, 5.451541437651031e-05, -0.04855833575129509, -0.015150467865169048, 0.011604057624936104, 0.005521630868315697, 0.02611953392624855, 0.04100227355957031, 0.028920339420437813, -0.031222131103277206, -0.009469239041209221, -0.023292196914553642, -0.017026511952280998, -0.016903890296816826, -0.04599207267165184, 0.01365770772099495, -0.007063748314976692, -0.0037514111027121544, 0.014770912006497383, -0.028613341972231865, -0.06088222563266754, -0.008265034295618534, -0.07413607835769653, 0.016276082023978233, -0.03630638122558594, 0.01198494527488947, 0.006152692716568708, 0.02410264126956463, -0.04267509654164314, 0.012672645039856434, 0.020486751571297646, -0.010836529545485973, 0.015692099928855896, 0.011452130042016506, -0.04312790557742119, 0.033248744904994965, -0.022645331919193268, -0.009259083308279514, -0.004286001902073622, -0.04570821300148964, -0.026141030713915825, 0.03075231984257698, -0.01053661946207285, -0.0236465223133564, -0.019150810316205025, -0.012375532649457455, -0.012372682802379131, -0.041557639837265015, -0.007395348511636257, -0.0033912467770278454, -0.031852371990680695, 0.02270866185426712, 0.0019058706238865852, -0.018549025058746338, -0.0117440614849329, -0.016027124598622322, 0.006487192120403051, 0.0058392975479364395, 0.0415889136493206, 0.002004072768613696, -0.009133223444223404, 0.0270755086094141, -0.06956266611814499, -0.013258879072964191, -0.03142261132597923, 0.016932640224695206, 0.022082149982452393, -0.0013963603414595127, 0.02769565023481846, 0.015369853004813194, -0.042785439640283585, -0.028319241479039192, 0.014013205654919147, 0.04633069410920143, -0.034307267516851425, 0.0014869198203086853, -0.04015924409031868, -0.019370319321751595, 0.04572893679141998, 0.0072915940545499325, 0.013897990807890892]\"\n./train/brain_coral/n01917289_1079.JPEG,brain_coral,\"[0.038912225514650345, 0.01806790940463543, 0.00023707015498075634, -0.03852386400103569, -0.058701593428850174, -0.027913998812437057, -0.013419334776699543, 0.0367317758500576, 0.013160083442926407, -0.017745565623044968, -0.03524596244096756, 0.04685594514012337, -0.024645650759339333, -0.01413408387452364, -0.013075891882181168, -0.016125408932566643, 0.0822748988866806, 0.08708959817886353, -0.015820510685443878, 0.01054526399821043, -0.046657685190439224, -0.021413113921880722, 0.02717651054263115, -0.05863280966877937, 0.04673377051949501, 0.03207198902964592, -0.005497436970472336, -0.023064101114869118, 0.01905898191034794, 0.01568916067481041, 0.004803818184882402, -0.005781729239970446, 0.010654679499566555, -0.009114465676248074, 0.01773378811776638, 0.001977465348318219, -0.021827176213264465, -0.023053694516420364, 0.04735191538929939, 0.10093075037002563, 0.013589063659310341, -0.003017357550561428, -0.011589224450290203, 0.022483523935079575, -0.02023591473698616, -0.11250817030668259, 0.0019716033712029457, 0.01937892474234104, 0.017573989927768707, 0.05138383060693741, -0.04428211227059364, -0.025876734405755997, 0.010951703414320946, -0.0431208536028862, -0.04832765460014343, -0.004930510651320219, -0.03054073639214039, -0.05708151310682297, 0.0036253388971090317, -0.0696641057729721, 0.08002401143312454, -0.012600534595549107, -0.007635702844709158, -0.002730629639700055, -0.011437050998210907, 0.011546673253178596, 0.023360837250947952, 0.034862153232097626, 0.061278924345970154, -0.032424334436655045, 0.01901385560631752, -0.0399496890604496, -0.01065403688699007, -0.06599507480859756, -0.01803114078938961, -0.014882444404065609, -0.015798548236489296, 0.04187120869755745, 0.06176896020770073, -0.05189545452594757, 0.023403044790029526, 0.00549068721011281, -0.005201814696192741, -0.05615974962711334, -0.008331517688930035, 0.001982392743229866, 0.0789434164762497, 0.007104796357452869, -0.0022554812021553516, 0.0354917049407959, 0.03992610424757004, -0.06620954722166061, -0.5997709631919861, 0.004960144404321909, -0.029549522325396538, 0.0008966445457190275, 0.06097151339054108, -0.04400147497653961, -0.07063636928796768, 0.025750987231731415, -0.010966681875288486, 0.030701909214258194, -0.04096748307347298, -0.00799713283777237, -0.002300436608493328, -0.018517421558499336, -0.17623993754386902, 0.012258199043571949, -0.017547620460391045, 0.011635017581284046, 0.03428293392062187, 0.007412702776491642, -0.021918093785643578, -0.005297275725752115, -0.01890791393816471, -0.057425156235694885, 0.06591687351465225, -0.01233886368572712, -0.006092427764087915, 0.03806278109550476, -0.00017413104069419205, -0.048095155507326126, -0.04835837706923485, -0.05204920843243599, -0.04185440391302109, 0.040772709995508194, 0.001787107321433723, -0.004107009153813124, 0.03208700940012932, -0.034988053143024445, 0.003336889436468482, -0.007952332496643066, -0.01558589655905962, 0.08072023093700409, 0.007221754640340805, 0.031728923320770264, 0.006611012388020754, -0.05282966047525406, 0.00881221517920494, 0.014321212656795979, 0.033009033650159836, -0.0002583040331955999, -0.05736105889081955, 0.019054189324378967, -0.026761775836348534, -0.01210459042340517, -0.010335099883377552, -0.01852681301534176, 0.01627950370311737, 0.01489071361720562, -0.03220812603831291, -0.043142981827259064, -0.036088645458221436, -0.007615088950842619, -0.014638688415288925, 0.06755836308002472, 0.029202766716480255, -0.0016548667335882783, -0.007876728661358356, 0.0021428216714411974, -0.060725193470716476, -0.011483740992844105, -0.0255507193505764, 0.019224863499403, 0.0018451301148161292, -0.0033590917009860277, -0.03183218836784363, 0.03863200917840004, 0.028777122497558594, -0.017500098794698715, -0.005981673486530781, 0.006638894323259592, -0.014118451625108719, 0.015421178191900253, 0.03413627669215202, 0.03133917972445488, -0.09203597903251648, -0.0011311059352010489, 0.0036955007817596197, -0.02011510357260704, -0.01740032434463501, -0.000772087718360126, 0.002574219834059477, -0.014965768903493881, 0.017830297350883484, -0.010358703322708607, 0.014467047527432442, -0.005014743655920029, 0.059986140578985214, 0.03256795182824135, 0.014319751411676407, 0.011261757463216782, 0.03249400854110718, -0.028059961274266243, 0.1092943325638771, -0.01933991350233555, 0.014990639872848988, 0.014430967159569263, 0.013407454825937748, 0.013754324987530708, -0.03530825302004814, -0.004187775310128927, -0.006831655744463205, 0.06734111905097961, -0.029584527015686035, 0.0168213602155447, 0.052061449736356735, -0.031440749764442444, 0.009432622231543064, -0.012969955801963806, -0.012158253230154514, 0.029176898300647736, -0.020167293027043343, -0.06566304713487625, 0.04910755157470703, 0.050599463284015656, 8.753096381042269e-08, -0.055107634514570236, -0.045783691108226776, -0.024097662419080734, 0.08064227551221848, 0.04633181914687157, -0.010180129669606686, -0.043052881956100464, 0.05520331487059593, -0.019076161086559296, -0.0023687512148171663, -0.02585470862686634, 0.009618770331144333, 0.028648946434259415, 0.005347302183508873, -0.03601650148630142, 0.027579281479120255, -0.02716863714158535, -0.03060961700975895, -0.02127414010465145, 0.019226668402552605, -0.031911659985780716, -0.01674043759703636, 0.017805151641368866, -0.011626284569501877, 0.042691830545663834, 0.027260472998023033, 0.01322109717875719, -0.005239886697381735, 0.007032020948827267, 0.013675513677299023, 0.04633864387869835, -0.031561121344566345, -0.011294984258711338, 0.039109621196985245, 0.012249338440597057, 0.008866125717759132, 0.033372413367033005, 0.003520280122756958, -0.005459364969283342, -0.005192616954445839, -0.013447347097098827, 0.055032987147569656, 0.0042066415771842, 0.025138700380921364, 0.011421742849051952, -0.007851780392229557, 0.006925035733729601, -0.0410812608897686, -0.03252634406089783, 0.04388297721743584, 0.03610014542937279, -0.028973106294870377, -0.0147278793156147, -0.008805324323475361, -0.0016701248241588473, 0.008880894631147385, -0.02265651896595955, -0.027955766767263412, -0.032365791499614716, -0.027974804863333702, 0.0308750718832016, -0.022076856344938278, -0.012197460047900677, 0.0232941135764122, 0.05287570133805275, -0.00807225052267313, 0.018589846789836884, -0.015216190367937088, 0.02322385460138321, -0.029221853241324425, -0.07212097942829132, 0.01065891794860363, -0.02276766300201416, -0.030854709446430206, 0.009052028879523277, 0.005200696177780628, 0.02689393050968647, -0.008149540983140469, 0.02480284310877323, 0.02545279823243618, 0.000275374943157658, 0.05006411671638489, -0.011895166710019112, -0.028631849214434624, -0.019612545147538185, -0.022019021213054657, 0.03600257635116577, -0.016666295006871223, 0.03870922699570656, 0.0035298701841384172, 0.031170884147286415, 0.034520454704761505, 0.0018910965882241726, 0.07294141501188278, -0.045426301658153534, 0.08057920634746552, 0.004322039429098368, 0.030189432203769684, 0.020973673090338707, -0.049841683357954025, 0.04548264294862747, -0.05223603546619415, -0.04378100112080574, 0.02913615293800831, 0.25252389907836914, -0.06147170066833496, -0.039787258952856064, 0.04336303099989891, -0.007992153987288475, -0.006362824700772762, 0.01437583938241005, 0.0006705867708660662, -0.00024500206927768886, -0.03146502748131752, -0.04373989999294281, 0.018724070861935616, -0.0687064379453659, -0.006957496050745249, -0.05598410964012146, -0.04142176732420921, -0.01897784136235714, 0.006859293673187494, 0.03878245875239372, 0.020253513008356094, -0.004822116810828447, -0.006279704160988331, 0.006148947402834892, 0.03548483923077583, 0.0073198010213673115, 0.005797917954623699, -0.0071646240539848804, 0.013142785988748074, 0.04841690883040428, 0.01514731626957655, -0.010035165585577488, 0.02961266040802002, 0.027209201827645302, -0.030988041311502457, -0.038701195269823074, 0.040285855531692505, -0.09482467174530029, 0.028437310829758644, -0.005389396566897631, -0.0029448727145791054, -0.018100401386618614, 0.025748636573553085, -0.0038549627643078566, -0.06342901289463043, 0.012193959206342697, -0.003898088587448001, -0.08457440137863159, 0.02157779596745968, 0.02676970139145851, -0.0013398415176197886, 0.017924312502145767, -0.00666919257491827, -0.003524203784763813, 0.06365862488746643, 0.050417907536029816, 0.017155854031443596, -0.01605679653584957, -0.08246099203824997, -0.03507959470152855, -0.025509295985102654, -0.03023502789437771, -0.02440844662487507, 0.016849540174007416, -0.005686944350600243, 0.011187457479536533, 0.016754575073719025, -0.02035672403872013, -0.0383424311876297, -0.055282916873693466, -0.013706429861485958, -0.016790930181741714, 0.014824618585407734, 0.01777557283639908, -0.014224565587937832, -0.059857409447431564, 0.02059967815876007, 0.049222253262996674, -0.036074280738830566, -0.020600423216819763, -0.025873271748423576, -0.02323264069855213, 0.009258399717509747, 0.023374086245894432, 0.03627721965312958, -0.02626447193324566, 0.02137037180364132, 0.02426370047032833, -0.013904242776334286, -0.0198840219527483, 0.07084668427705765, 0.003207683563232422, 0.017664575949311256, -0.03631581366062164, 0.01580549217760563, -0.019529080018401146, 0.042083702981472015, 0.040120720863342285, -0.005222539883106947, 0.0082083223387599, 0.0447889119386673, 0.001522596343420446, 0.0012348080053925514, -0.04094742238521576, 0.03727986291050911, -0.03456743806600571, 0.04197361320257187, 0.04940427467226982, 0.035224396735429764, -0.06572597473859787, -0.03510027378797531, 0.0035129853058606386, 0.07085905224084854, -0.000609134673140943, -0.005170895718038082, -0.005702244583517313, -0.014449384063482285, 0.0526176393032074, -0.012077988125383854, 0.013375772163271904, -0.04419396072626114, -0.06564532220363617, -0.0036461246199905872, -0.02862740121781826, 0.02096736431121826, 0.005605899263173342, -0.0015967441722750664, -0.0067869205959141254, -0.03298245742917061, 0.023389143869280815, 0.006752107758074999, -0.03760537877678871, 0.01622956432402134, -0.04652532935142517, 0.04958254471421242, -0.043309930711984634, 0.037898194044828415, 0.03230994567275047, 0.013524684123694897, -0.033315856009721756, -0.030270133167505264, 0.001637317705899477, 0.006545145530253649, 0.010069254785776138, 0.029688343405723572, 0.01104008685797453, -0.0010991188464686275, 0.00046055621351115406, 0.0017691879766061902, -0.019880518317222595, -0.01119572576135397, -0.04539167135953903, 0.051035284996032715, -0.03284919634461403, -0.045775096863508224, -0.013190786354243755, 0.008777379989624023, -0.0038090485613793135, -0.02543489821255207, 0.00677487812936306, 0.010115012526512146, -0.019578175619244576, 0.006543862633407116, -0.0005651062238030136, -8.719972538528964e-05, 0.017997097223997116, 0.020978042855858803, -0.02079092711210251, 0.02340199053287506, 0.025369444862008095, -0.043679963797330856, -0.0013179872184991837, 0.03342761471867561, -0.0322025828063488, 0.016777869313955307, -0.011295781470835209, 0.04026825726032257, 0.021841080859303474, -0.0024473408702760935, 0.012854959815740585, 0.009824445471167564, -0.028606120496988297, -0.004616886377334595, 0.033436037600040436, 0.036298707127571106, -0.03188231959939003, 0.0197409950196743, -0.009559388272464275, 0.014656939543783665, 0.02464335225522518, 0.005446465685963631, 0.009038642980158329]\"\n./train/brain_coral/n01917289_2484.JPEG,brain_coral,\"[0.05507666990160942, 0.015379576943814754, -0.00749883521348238, 0.00519414059817791, -0.04877340421080589, -0.0409923791885376, -0.054283831268548965, -0.03186291456222534, 0.03863987699151039, -0.0008869633311405778, -0.058267831802368164, 0.023397453129291534, -0.010483969002962112, 0.034654922783374786, 0.0008682682528160512, -0.05172604322433472, 0.071042999625206, 0.0819540023803711, -0.01688583567738533, -0.010976514779031277, -0.054569218307733536, -0.008058176375925541, 0.014418456703424454, -0.06205743923783302, 0.004825621377676725, 0.023349616676568985, -0.020689427852630615, -0.008749308995902538, 0.039608292281627655, 0.005740939173847437, 0.01287701167166233, -0.00323764281347394, -0.023532982915639877, -0.023570725694298744, 0.010082068853080273, -0.016949789598584175, -0.01835848018527031, -0.01924416795372963, 0.026695551350712776, 0.1686481386423111, 0.022034000605344772, 0.005296051036566496, -0.027226632460951805, 0.029305703938007355, 0.024155059829354286, -0.09164199233055115, 0.00723682576790452, 0.04754374176263809, -0.00768313417211175, 0.018537454307079315, -0.0155639024451375, -0.027290724217891693, -0.008007201366126537, -0.0367518849670887, -0.0753302350640297, 0.007986710406839848, -0.02139357104897499, -0.0222454983741045, -0.010146453976631165, -0.05321589112281799, 0.07706759870052338, -0.027361111715435982, 0.002219080226495862, -0.024386407807469368, -0.009967037476599216, 0.01039008516818285, -0.006373845972120762, 0.09699277579784393, 0.0289210993796587, -0.020768871530890465, 0.036619897931814194, -0.05611289665102959, 0.007165851071476936, -0.05989617109298706, 0.011953027918934822, 0.0002951327769551426, -0.004076380282640457, 0.027850572019815445, 0.010274611413478851, -0.017902301624417305, -0.022961780428886414, 0.01966583915054798, 0.017595143988728523, -0.056074533611536026, 0.05524398759007454, 0.01990519091486931, 0.08660687506198883, -0.023041844367980957, -0.008857817389070988, 0.04850396886467934, 0.015127000398933887, -0.04128670319914818, -0.5254279971122742, 0.000796411419287324, -0.017591940239071846, 0.012438689358532429, 0.01880102977156639, -0.04226981848478317, -0.058071788400411606, -0.00499296747148037, -0.004595884587615728, 0.03198280185461044, -0.07153909653425217, -0.031986746937036514, 0.0190456323325634, 0.00430073169991374, -0.11747822910547256, -0.0005411507445387542, -0.021448271349072456, 0.04666995257139206, 0.03643294796347618, -0.030992813408374786, -0.0033590139355510473, 0.01067621260881424, -0.008280518464744091, -0.03359946236014366, 0.09121689200401306, 0.0081638153642416, -0.01620866358280182, 0.03505854308605194, 0.006291994359344244, -0.04921291396021843, -0.0599849596619606, -0.016374770551919937, -0.018060745671391487, 0.003259231336414814, 0.0014957557432353497, -0.009999912232160568, 0.038033824414014816, -0.012894039042294025, 0.0329730398952961, 0.011565573513507843, -0.009929892607033253, 0.07422150671482086, 0.0025388493668287992, 0.028896009549498558, 0.0076498002745211124, -0.01706830970942974, 0.017757898196578026, -0.06447134912014008, 0.04454218968749046, -0.0030115218833088875, -0.0808207094669342, 0.01777050271630287, -0.004253118298947811, -0.01581927388906479, -0.029264438897371292, 0.0005403142422437668, -0.009268191643059254, 0.029945485293865204, -0.0032112132757902145, -0.007474037352949381, -0.0332937128841877, 0.021887578070163727, -0.025837380439043045, 0.037294019013643265, 0.002686284016817808, -0.006363458000123501, 0.020899828523397446, 0.03376820683479309, -0.03436025232076645, -0.010117672383785248, -0.030000949278473854, 0.004613746423274279, 0.0014412784948945045, -0.017617573961615562, -0.002586544957011938, 0.04195424169301987, 0.023258263245224953, 0.017515750601887703, 0.016863474622368813, 0.04671802744269371, -0.01112313847988844, 0.0454719103872776, -0.013958596624433994, 0.07193208485841751, -0.10408800840377808, -0.001563574536703527, -0.03723453730344772, 0.006321378517895937, 0.0504680834710598, -0.006999375764280558, 0.0007039306219667196, -0.006535873282700777, -0.005330515094101429, -0.004852435551583767, 0.010138364508748055, -0.04033847153186798, 0.028252996504306793, 0.041592709720134735, 0.0032199311535805464, -0.0366152822971344, 0.04337949678301811, -0.025299765169620514, 0.05690253898501396, -0.044010840356349945, 0.03328867629170418, 0.028119022026658058, 0.01785283163189888, -0.015654949471354485, -0.02363240346312523, -0.04815685376524925, -0.03991136699914932, 0.06197616457939148, 0.004444566555321217, -0.0009398434194736183, 0.06124311685562134, -0.030693603679537773, 0.0248834528028965, 0.003293215297162533, -0.03236458823084831, 0.028871886432170868, -0.03931537643074989, -0.03921450302004814, 0.05581343546509743, 0.043234433978796005, 0.03786931931972504, -0.010894663631916046, -0.010387826710939407, -0.021482842043042183, 0.09795050323009491, 0.02533448114991188, -0.04269569367170334, -0.004825867246836424, 0.039453838020563126, -0.03596900403499603, -0.026500575244426727, 0.027133965864777565, -0.015034569427371025, 0.025821449235081673, -0.0008947006426751614, -0.021474016830325127, 0.02894682064652443, -0.023105623200535774, -0.011818532831966877, -0.06934376060962677, 0.0233870018273592, -0.0020366047974675894, 0.0366043895483017, 0.027350982651114464, 0.034153033047914505, 0.05089285224676132, 0.043754417449235916, 0.006731166038662195, 0.02908511832356453, -0.001949525554664433, 0.008571282960474491, 0.054558590054512024, -0.03792739659547806, -0.02079091966152191, 0.05324297770857811, 0.007441201712936163, 0.06409943103790283, 0.04054548218846321, -0.0025521789211779833, 0.05687817931175232, 0.009685472585260868, 0.008274028077721596, 0.15202781558036804, 0.0383923277258873, 0.020161554217338562, -0.009662552736699581, 0.02652614936232567, 0.038866110146045685, -0.04486970975995064, -0.04370685666799545, 0.050569016486406326, 0.006866443436592817, -0.03044090047478676, -0.016219276934862137, -0.017610089853405952, -0.0190373994410038, -0.006395113654434681, 0.00459545711055398, -0.016623418778181076, -0.0010119971120730042, -0.05658270791172981, 0.04826229065656662, -0.03776903450489044, -0.014447669498622417, 0.035170529037714005, -0.004961547441780567, -0.004917162470519543, -0.008895146660506725, -0.0006509236409328878, 0.028132030740380287, -0.020052582025527954, -0.05958212539553642, 0.0046250647865235806, -0.018460964784026146, 0.016280947253108025, 0.0012780993711203337, -0.009229769930243492, 0.03470636159181595, 0.0057768141850829124, -0.0014835919719189405, 0.050535306334495544, 0.0009263944812119007, 0.05011814087629318, 0.0425308421254158, -0.010894551873207092, -0.04895782843232155, -0.021817434579133987, 0.032462913542985916, -0.01372967753559351, 0.00989431980997324, 0.036073148250579834, 0.06741280853748322, 0.06234872713685036, 0.01573508232831955, 0.050458770245313644, -0.03845583274960518, 0.07397211343050003, 0.013487688265740871, 0.009719299152493477, 0.005615349393337965, -0.011985164135694504, 0.047318339347839355, -0.08104050159454346, -0.033345144242048264, 0.03606584668159485, 0.25542935729026794, -0.03129973262548447, -0.060038067400455475, 0.06070178747177124, -0.009208926931023598, -0.013513638637959957, -0.013547624461352825, 0.011069766245782375, -0.04300171136856079, -0.0005759980413131416, -0.0165520291775465, 0.03899618238210678, -0.015051894821226597, -0.012868373654782772, -0.03303426131606102, -0.028326159343123436, -0.048350740224123, -0.021083848550915718, 0.040506187826395035, -0.004105472471565008, -0.007085283752530813, -0.014514087699353695, -0.03084338828921318, 0.02408173494040966, 0.008054769597947598, -0.02032257616519928, 0.004078429192304611, 0.002314451616257429, 0.020996620878577232, 0.04100680723786354, 0.029299186542630196, 0.007754135876893997, 0.062043871730566025, -0.017639508470892906, -0.03694494441151619, -0.010938940569758415, -0.08733714371919632, 0.02091800980269909, 0.02999833971261978, 0.04073702171444893, -0.033577192574739456, 0.016500310972332954, -0.001009901287034154, -0.040666673332452774, -0.002660448430106044, -0.008295439183712006, -0.12787824869155884, -0.014170706272125244, -0.016912998631596565, -0.00022652283951174468, 0.013193986378610134, 0.0313127376139164, 0.011136386543512344, 0.03700408339500427, 0.057511020451784134, 0.04458703100681305, -0.001389365759678185, -0.09805804491043091, -0.04376785457134247, -0.04743090271949768, -0.02935066819190979, 0.016009513288736343, 0.022539973258972168, -0.01989356055855751, 0.010268323123455048, 0.022427162155508995, -0.027284901589155197, -0.03190762549638748, -0.0924047902226448, -0.046884968876838684, 0.0019010750111192465, -0.0011539688566699624, 0.032556645572185516, -0.021591467782855034, -0.028193246573209763, 0.046744637191295624, 0.0029887156561017036, -0.10596143454313278, -0.008646218106150627, -0.013943502679467201, -0.03453144431114197, -0.013205050490796566, -0.00869543757289648, 0.013368349522352219, -0.023661889135837555, 0.012132585979998112, 0.0260144229978323, 0.013164904899895191, -0.039561156183481216, 0.07841736078262329, -0.004457461182028055, -0.008190992288291454, -0.031552545726299286, -0.008884256705641747, -0.03543868288397789, 0.0298463087528944, 0.060680922120809555, -0.035881731659173965, 0.01467161439359188, 0.031409554183483124, -0.006012483034282923, -0.012067096307873726, -0.01856827735900879, 0.045199789106845856, -0.0046273949556052685, 0.045104656368494034, 0.05340546369552612, 0.04214278608560562, -0.012350923381745815, -0.006556008476763964, -0.03763120248913765, 0.04279829189181328, -0.009126976132392883, -0.02472555637359619, -0.0014486220898106694, -0.011946587823331356, 0.021999230608344078, 0.012793059460818768, 0.008118142373859882, -0.026958590373396873, -0.019758163020014763, -0.026845145970582962, -0.0207530464977026, -0.010549608618021011, -0.024317527189850807, 0.02140156365931034, -0.060164421796798706, 0.006349672097712755, 0.036886535584926605, 0.0014398901257663965, -0.06545688956975937, -0.008502503857016563, -0.06004820019006729, 0.013938234187662601, -0.03258123993873596, 0.0198596753180027, 0.04108629375696182, 0.015229860320687294, -0.022646425291895866, -0.0012827073223888874, 0.05805578455328941, 0.012865678407251835, -0.02356121689081192, 0.03859712556004524, -0.02098928391933441, 0.005994981620460749, -0.00986066646873951, 0.03300071507692337, -0.028302662074565887, -0.03765076398849487, -0.050104547291994095, 0.012462878599762917, -0.03704933822154999, -0.048666518181562424, -0.004851127974689007, -0.014466376975178719, 0.007893591187894344, -0.020449746400117874, -0.012773334048688412, 0.006612356286495924, -0.0376940481364727, 0.011529588140547276, 0.001575613860040903, -0.024194270372390747, 0.030002877116203308, 0.00903929490596056, 0.01059694867581129, 0.018230291083455086, 0.04507501795887947, -0.0434405654668808, -0.00282356608659029, 0.013535605743527412, -0.04894368723034859, 0.03197599574923515, -0.02565190941095352, 0.044435374438762665, 0.003685327945277095, -0.026290670037269592, 0.046243492513895035, 0.027644790709018707, -0.04727296903729439, -0.048285093158483505, 0.025491761043667793, 0.025903400033712387, -0.015036444179713726, 0.036710359156131744, -0.04303087294101715, 0.010982812382280827, 0.04680660367012024, 0.0015577712329104543, 0.004722308833152056]\"\n./train/brain_coral/n01917289_1082.JPEG,brain_coral,\"[0.01281997561454773, 0.005894457455724478, 0.012932969257235527, -0.06641177088022232, -0.0683240070939064, 0.015379040502011776, -0.025871848687529564, 0.019130758941173553, 0.043279796838760376, -0.01090285461395979, -0.03309614211320877, 0.016481533646583557, -0.05019741877913475, -0.04107280448079109, 0.0004495503380894661, -0.037662237882614136, 0.00759456492960453, 0.06571037322282791, 0.028190936893224716, 0.041273877024650574, -0.04380977526307106, -0.00771605409681797, -0.012727589346468449, -0.07270872592926025, 0.02791466936469078, 0.03378216177225113, -0.012395837344229221, 0.013284717686474323, 0.012973864562809467, 0.004958619829267263, -0.009506228379905224, -0.006835390347987413, 0.013393706642091274, 0.025129366666078568, -0.017310461029410362, -0.019180506467819214, -0.014670860022306442, -0.0030163023620843887, 0.029156522825360298, 0.053556688129901886, 0.032842375338077545, -0.012213385663926601, -0.02094428986310959, -0.009830196388065815, -0.014634476974606514, -0.15030351281166077, -0.0034142539370805025, 0.04620105028152466, -0.003038248047232628, 0.040513474494218826, -0.0635092630982399, 0.017356328666210175, 0.0224857646971941, -0.023977462202310562, -0.06877262145280838, 0.014745714142918587, -0.055801451206207275, -0.045435454696416855, 0.02804710902273655, -0.04558899998664856, 0.08680012822151184, -0.0002747638791333884, -0.0013579264050349593, -0.037298377603292465, -0.04414895176887512, 0.025761282071471214, 0.02743266522884369, 0.022505206987261772, 0.03294305503368378, 0.03644349053502083, -0.0030219496693462133, -0.02104535885155201, -0.010163296945393085, -0.0448073111474514, -0.00042971159564331174, -0.034834109246730804, -0.00164504861459136, 0.032599739730358124, 0.05077311396598816, -0.08204878866672516, 0.017367584630846977, 0.011462732218205929, -0.002524866256862879, -0.057088807225227356, 0.01871759630739689, 0.03986542671918869, 0.10699770599603653, -0.003937221132218838, 0.015593382529914379, 0.029652372002601624, -0.0016244141152128577, -0.06243515387177467, -0.5953307151794434, -0.01116594672203064, -0.027046790346503258, 0.01357133686542511, 0.036855749785900116, -0.0273596178740263, -0.05855806916952133, -0.04141915217041969, -0.0175990741699934, 0.021186240017414093, -0.07050570845603943, 0.0387490876019001, 0.018028315156698227, -0.03201357275247574, -0.14006023108959198, 0.01019893866032362, -0.028229419142007828, 0.027111820876598358, 0.021905455738306046, -0.02796967141330242, 0.010194561444222927, 0.018414996564388275, -0.017831219360232353, -0.03967718034982681, 0.07677806913852692, 0.04263615235686302, 0.02605750970542431, 0.039460428059101105, 0.01601235195994377, -0.004597303923219442, -0.06320838630199432, 0.0312928669154644, -0.03588955104351044, 0.04947224631905556, -0.008662267588078976, 0.008452572859823704, 0.06072443723678589, 0.006387764122337103, 0.07212254405021667, -0.03507198020815849, -0.035096123814582825, 0.0801820158958435, 0.03999945893883705, 0.031461868435144424, 0.021766159683465958, -0.05269920080900192, -0.014086741022765636, -0.014846458099782467, 0.012161326594650745, -0.009517567232251167, -0.042122937738895416, 0.04149198904633522, 0.0044428762048482895, -0.015054221265017986, -0.03636576980352402, -0.01720249652862549, 0.005881591700017452, 0.0073343063704669476, -0.001803046092391014, -0.025604132562875748, -0.02013130486011505, -0.00038043002132326365, -0.010669740848243237, 0.02062108740210533, 0.02675948664546013, 0.016096550971269608, 0.010042255744338036, 0.035810086876153946, -0.031717509031295776, -0.01902703568339348, -0.005951412487775087, -0.01941288821399212, -0.022093014791607857, -0.015567978844046593, -0.04445734992623329, 0.03174407780170441, -0.0017093475908041, -0.011208525858819485, 0.006899552885442972, 0.03229716420173645, 0.0061241742223501205, -0.0004265730385668576, 0.05525976046919823, 0.005456879269331694, -0.11542700231075287, -0.024528266862034798, -0.04554522782564163, -0.0039575607515871525, 0.02668219432234764, -0.02072877809405327, -0.01184038631618023, -0.003536668373271823, 0.04317403957247734, -0.018893931061029434, -0.003420780645683408, -0.022062066942453384, 0.035498153418302536, 0.020444810390472412, -0.010571155697107315, -0.043773628771305084, 0.06477102637290955, 0.009806642308831215, 0.06458226591348648, -0.026274386793375015, 0.007240812759846449, -0.03517632931470871, 0.028193695470690727, -0.03846270591020584, 0.005563211161643267, -0.021873213350772858, 0.03189567103981972, 0.05161932855844498, 0.016552520915865898, 0.020870298147201538, 0.06033362075686455, -0.03216821700334549, 0.012111220508813858, -0.006982849445194006, -0.03227939084172249, 0.06101522967219353, -0.035143543034791946, -0.049425382167100906, 0.05387857183814049, 0.041795678436756134, 0.003148695221170783, -0.04558120295405388, -0.051287855952978134, -0.019902292639017105, 0.05659728869795799, -0.00015907791384961456, 0.001133046462200582, -0.004740349017083645, 0.06358884274959564, -0.018562976270914078, 0.06677890568971634, -0.050137635320425034, -0.03735704347491264, 0.03998992219567299, -0.00790312234312296, -0.018352558836340904, 0.03936230018734932, -0.03067665733397007, -0.03555456921458244, -0.05026984214782715, 0.017684942111372948, -0.04146011546254158, 0.0299117099493742, 0.02249538153409958, -0.02898046188056469, 0.01593291014432907, 0.056066807359457016, -0.0024777823127806187, 0.04583581164479256, -0.025789938867092133, -0.00453916983678937, -0.0019326609326526523, -0.009971726685762405, -0.004717470146715641, 0.018603213131427765, 0.004145925864577293, 0.0106691624969244, 0.06737020611763, -0.03329874202609062, -0.03946642950177193, -0.0055608986876904964, -0.014398706145584583, 0.04459797963500023, -0.01074113231152296, 0.019145281985402107, -0.002851310884580016, -0.011089975014328957, 0.02601255290210247, -0.019517719745635986, 0.04419736936688423, 0.06276725232601166, 0.0010205358266830444, -0.038061559200286865, -0.006051641423255205, -0.010344029404222965, -0.010308152064681053, 0.008555727079510689, -0.012255052104592323, -0.01464243046939373, -0.036454904824495316, -0.05596642941236496, 0.0361841581761837, -0.012106643058359623, 0.006104869302362204, 0.009554929099977016, 0.029217800125479698, 0.012967417016625404, -0.016421593725681305, 0.010665546171367168, 0.0006170407868921757, -0.0639587864279747, -0.03976510092616081, 0.016000421717762947, -0.01926230452954769, -0.03553394600749016, 0.006612741854041815, 0.019024690613150597, 0.049901701509952545, 0.004748361650854349, 0.0034094355069100857, -0.004671214614063501, -0.0025584110990166664, 0.04331863671541214, -0.006295878440141678, -0.04053638502955437, -0.02306627295911312, -0.04398057237267494, 0.06012694910168648, 0.007988553494215012, 0.066439688205719, -0.024558722972869873, 0.03222305327653885, 0.024709925055503845, 0.0057572959922254086, 0.04408833757042885, 0.006733521353453398, 0.08003261685371399, 0.01834612339735031, 0.01806100830435753, 0.014892677776515484, -0.02275068499147892, 0.026702091097831726, -0.0361967533826828, -0.05887776240706444, 0.008884933777153492, 0.28401249647140503, -0.005197336431592703, -0.028150098398327827, 0.03143078088760376, -0.02188771404325962, 0.0035900967195630074, 0.017939243465662003, -0.0025249102618545294, -0.007564217317849398, -0.038871824741363525, -0.0152654517441988, 0.0005669002421200275, -0.036295175552368164, -0.03307656571269035, -0.009380578063428402, -0.04774472862482071, -0.027788838371634483, -0.005021265242248774, 0.04814499244093895, 0.004893172532320023, -0.00813320092856884, -0.016003930941224098, -0.00275798374786973, 0.03531211242079735, 0.00588977849110961, -0.022002700716257095, 0.01718682423233986, -0.023847924545407295, 0.03488292172551155, 0.021291583776474, -0.008926472626626492, -0.00021080153237562627, 0.024900805205106735, -0.04974529147148132, -0.03666016086935997, 0.04315405339002609, -0.0688367635011673, 0.01959441415965557, -0.012893547303974628, -0.014364810660481453, -0.0019238507375121117, 0.012510795146226883, -0.0153139503672719, -0.022007524967193604, -0.020195478573441505, 0.00930784922093153, -0.10919217765331268, 0.0033382782712578773, 0.03309259191155434, 0.011711632832884789, 0.02041665092110634, 0.02658293955028057, 0.005909308325499296, 0.06401323527097702, 0.03300369903445244, 0.026274995878338814, -0.011734653264284134, -0.0387272909283638, -0.018490774556994438, 0.016343459486961365, -0.0467718206346035, -0.008908754214644432, -0.03139482066035271, -0.0008785698446445167, 0.014434285461902618, 0.01157031673938036, -0.011328245513141155, -0.039073146879673004, -0.01957959122955799, 0.005938075017184019, -0.006622792221605778, 0.02637444995343685, 0.020993975922465324, -0.014572699554264545, -0.017474520951509476, 0.018745219334959984, 0.063042551279068, -0.029053298756480217, -0.015388495288789272, 0.00040134257869794965, -0.026494285091757774, -0.017787348479032516, -0.03536631166934967, 0.0242776982486248, -0.04741765931248665, -0.017960064113140106, 0.027218323200941086, -0.01723596639931202, -0.016146061941981316, 0.10565540194511414, 0.004014031030237675, 0.010105708613991737, -0.03823298588395119, -0.009993067011237144, -0.008456110022962093, 0.025713102892041206, 0.004968171939253807, 0.012953858822584152, 0.01744866371154785, -0.020434362813830376, -0.003131506033241749, -0.006449232343584299, -0.06615769118070602, 0.057453226298093796, 0.00986839272081852, 0.03238844871520996, 0.008747135289013386, 0.02624049410223961, -0.03835567831993103, 0.0005253042327240109, 0.013872090727090836, 0.05389003828167915, 0.0031165627297014, -0.017426738515496254, -0.00023667796631343663, 0.017917364835739136, 0.001996217994019389, 0.023675166070461273, -0.01019003614783287, -0.004202307667583227, -0.07612502574920654, -0.041962627321481705, -0.05392902344465256, 0.005363223142921925, -0.031071441248059273, 0.03669159486889839, -0.026162227615714073, 0.039060503244400024, -0.006176587659865618, -0.0059347739443182945, -0.04390159621834755, 0.010933548212051392, -0.013175618834793568, 0.07454493641853333, -0.03480499982833862, 0.006855371408164501, 0.033220190554857254, 0.024918101727962494, -0.01828068122267723, 0.005240262020379305, 0.042547546327114105, -0.0182172991335392, -0.00027662600041367114, 0.03275160491466522, 0.0028145606629550457, 0.01705770008265972, 0.011592530645430088, 0.003382275812327862, -0.03357291221618652, -0.02016393467783928, -0.01663520745933056, 0.015973743051290512, -0.038341328501701355, 0.004121109377592802, 0.00583614269271493, -0.015094969421625137, 0.014135084114968777, -0.04397553205490112, 0.016234135255217552, 0.012333554215729237, -0.022128289565443993, -0.01691485568881035, -0.015597820281982422, 0.005837590899318457, 0.018481247127056122, 0.008373900316655636, 0.01666387729346752, 0.010547643527388573, 0.038387518376111984, -0.03587651625275612, -0.004512229468673468, 0.020273501053452492, -0.039809588342905045, -0.022876083850860596, 0.009541595354676247, -0.004345233552157879, 0.02084493264555931, 0.006470306310802698, 0.02471165545284748, -0.001245092018507421, -0.03267171233892441, -0.001893700915388763, 0.016047634184360504, 0.04998588562011719, -0.007331917528063059, 0.0017323991050943732, 0.02064727060496807, 0.003244235413148999, 0.01826143078505993, -0.007401301525533199, 0.01257232204079628]\"\n./train/brain_coral/n01917289_1538.JPEG,brain_coral,\"[0.03906926512718201, 0.04955126345157623, -0.023420853540301323, -0.0026995562948286533, 0.0017356141470372677, 0.008694981224834919, 0.00500206183642149, -0.020979618653655052, 0.04794033244252205, 0.036049894988536835, 0.02758963406085968, 0.008271549828350544, -0.03679266199469566, 0.007038597483187914, -0.04147816076874733, -0.013654799200594425, 0.03454851731657982, 0.03358469530940056, -0.016097038984298706, -0.03902750462293625, -0.061735257506370544, 0.0198996402323246, 0.023272981867194176, -0.050029680132865906, -0.006907932460308075, 0.037618737667798996, 0.025029273703694344, -0.003387865610420704, -0.04055626317858696, 0.006674348842352629, -0.006717671640217304, 0.006406577304005623, -0.008607042022049427, -0.009968673810362816, 0.050646767020225525, -0.020550720393657684, -0.009022513404488564, 0.024425439536571503, 0.028248513117432594, 0.1406174749135971, 0.00961235910654068, 0.01314295083284378, -0.010129145346581936, -0.0008602944435551763, 0.04678867757320404, -0.03436940908432007, -0.011271430179476738, 0.04729068651795387, 0.029383206740021706, 0.0355297289788723, -0.01670517958700657, -0.018491700291633606, 0.0197629164904356, -0.04697512090206146, -0.04039335623383522, 0.02416704036295414, -0.02657294273376465, -0.02033008635044098, 0.015195400454103947, -0.01534681860357523, 0.0045474376529455185, -0.04553893953561783, -0.02263261191546917, 0.019896650686860085, -0.008452831767499447, -0.014192941598594189, -0.03030656836926937, 0.12068507075309753, -0.010859666392207146, 0.01212919969111681, 0.011059228330850601, -0.00815292913466692, -0.02244798094034195, -0.027089470997452736, 0.031347986310720444, -0.025199849158525467, -0.006541375070810318, -0.02728954330086708, -0.003296421142295003, -0.04297554865479469, 0.034057725220918655, -0.004687882494181395, -0.0036099771969020367, -0.08780553936958313, 0.009155556559562683, -0.0010023294016718864, 0.02774415910243988, -0.004631862509995699, -0.007279268931597471, -0.02918975241482258, -0.003712153062224388, -0.03792746737599373, -0.5650420784950256, 0.013508680276572704, -0.0024298792704939842, 0.015889039263129234, 0.028163189068436623, 0.03778545558452606, -0.0771167129278183, -0.06340862810611725, -0.008071038872003555, 0.004512911196798086, -0.006376413628458977, -0.01028919406235218, -0.02081429585814476, -0.01969926245510578, -0.1569201797246933, -0.01672733947634697, -0.014976304024457932, 0.007762048859149218, -0.007404746487736702, -0.021160556003451347, -0.0235787071287632, 0.029093893244862556, 0.026914238929748535, -0.04203546419739723, 0.038961414247751236, -0.009364422410726547, 0.03379041701555252, 0.024466879665851593, 0.02827020175755024, -0.005467109847813845, 0.002415184397250414, -0.054464586079120636, -0.02347753196954727, 0.02170185185968876, 0.016154969111084938, -0.033345963805913925, 0.0019057588651776314, 0.010754571296274662, -0.00932245422154665, -0.016279911622405052, 0.018302438780665398, 0.08308511227369308, 0.013215183280408382, 0.015388457104563713, 0.04161212965846062, -0.029339253902435303, 0.012703350745141506, 0.012687967158854008, 0.00866498053073883, 0.020437579602003098, -0.03952867165207863, 0.009264471009373665, -0.03575712814927101, -0.04759451374411583, -0.022650357335805893, -0.027489682659506798, -0.026833469048142433, 0.0006469027139246464, -0.01192670501768589, -0.0025340707506984472, -0.007542602717876434, -0.01885092258453369, -0.04053141176700592, 0.03257134556770325, 0.015091324225068092, 0.0010406805668026209, -0.011558889411389828, -0.020946569740772247, -0.09532541036605835, -0.021733267232775688, 0.0006442987942136824, 0.020605307072401047, 0.004987041931599379, -0.039728306233882904, 0.007433115970343351, 0.017433393746614456, -0.028461165726184845, 0.004940371494740248, -0.0328793078660965, 0.028203774243593216, -0.004696873482316732, -0.027038710191845894, -0.025803320109844208, 0.03320081904530525, -0.06735223531723022, 0.01811094768345356, -0.05713261663913727, -0.028865918517112732, 0.058070797473192215, 0.056566592305898666, -0.02175401709973812, -0.01618358865380287, 0.01791958510875702, -5.186162889003754e-05, 0.009195546619594097, 0.017513664439320564, 0.007732401601970196, -0.0020104479044675827, 0.020805148407816887, -0.024569503962993622, -0.016864849254488945, -0.014974157325923443, 0.003914309665560722, -0.04466643184423447, 0.00899122841656208, -0.017651183530688286, 0.056796833872795105, -0.0337398424744606, -0.0017351113492622972, -0.044172514230012894, -0.03159934654831886, 0.04277346283197403, -0.013702698051929474, -0.01456027664244175, 0.0041489670984447, 0.009964744560420513, -0.0038641050923615694, 0.057639967650175095, -0.05727732554078102, 0.07066282629966736, -0.010417753830552101, -0.01430483814328909, 0.011947311460971832, 0.005154249258339405, 0.06136038899421692, 0.011338855139911175, 0.032755833119153976, -0.003480845596641302, 0.06973286718130112, 0.05751064792275429, -0.01112721860408783, -0.017999544739723206, 0.03769925236701965, -0.01758667826652527, -0.0239375289529562, -0.04271187260746956, 0.04440814256668091, -0.005220634397119284, -0.04935884475708008, 0.008005009032785892, 0.005926741287112236, -0.003620302537456155, 0.04226060211658478, -0.06307903677225113, 0.034324321895837784, -0.0119283776730299, 0.014605225063860416, 0.03397749736905098, -0.01358829252421856, 0.01393557246774435, 0.010357892140746117, -0.002070157090201974, -0.009109987877309322, 0.017660802230238914, 0.04691556468605995, 0.03301352635025978, -0.07136266678571701, 0.008276447653770447, -0.019027596339583397, 0.0056512486189603806, 0.009461951442062855, 0.02103724703192711, -0.026239460334181786, 0.016266340389847755, -0.01131509430706501, -0.004372014664113522, 0.11000694334506989, 0.018635142594575882, 0.04279102385044098, 0.03369355574250221, 0.028824826702475548, 0.0597592368721962, 0.020709889009594917, -0.04666532948613167, 0.054501961916685104, 0.05796929821372032, 0.009190051816403866, -0.04523887857794762, -0.019391074776649475, 0.013167927041649818, -0.015440190210938454, 0.0239383727312088, -0.044682350009679794, 0.01796579360961914, -0.036577723920345306, 0.012768000364303589, -0.06821458041667938, -0.024206198751926422, 0.002011151285842061, 0.019172752276062965, -0.02776109240949154, -0.018956458196043968, -0.006554413121193647, 0.006124286446720362, -0.09794902801513672, -0.04755712300539017, 0.021093882620334625, -0.033522311598062515, 0.033624254167079926, -0.015212844125926495, -0.03168483451008797, -0.00384814222343266, -0.039502035826444626, -0.02646450325846672, 0.1520848423242569, 0.023188157007098198, 0.016995174810290337, 0.02431449107825756, -0.0018192460993304849, -0.04667241871356964, -0.02883812040090561, -0.030374927446246147, 0.007746283430606127, 0.0033123751636594534, -0.01999387890100479, -0.010089486837387085, 0.04200274124741554, 0.018031829968094826, -0.028687261044979095, -0.0302259624004364, 0.08298278599977493, 0.024502569809556007, -0.016178438439965248, -0.037238460034132004, 0.045610759407281876, 0.07325959950685501, -0.04270843788981438, -0.08590789139270782, 0.05494416132569313, 0.23399008810520172, -0.0362403579056263, -0.07908805459737778, 0.02183707430958748, -0.026633676141500473, -0.014780349098145962, -0.007107083685696125, -0.02457747794687748, -0.02605360746383667, 0.040233563631772995, -0.03780772164463997, 0.02853414975106716, -0.04393108934164047, -0.04846189543604851, -0.023597221821546555, -0.02050616592168808, -0.007726824842393398, 0.02574368566274643, 0.04520025849342346, -0.0008305732626467943, 0.014835783280432224, -0.013733777217566967, -0.002895730547606945, 0.014568997547030449, 0.027586830779910088, -0.044080354273319244, 0.006154354196041822, -0.03547633811831474, 0.03423557057976723, 0.03283172473311424, -0.0037125360686331987, 0.027552783489227295, -0.012804397381842136, 0.01728810928761959, 0.011527114547789097, -0.03510317578911781, -0.1283147782087326, 0.007471274118870497, 0.0036150997038930655, 0.060412172228097916, -0.02027914486825466, -0.002846138784661889, 0.014816969633102417, -0.08273712545633316, 0.007288997992873192, 0.027078446000814438, -0.10605765134096146, 0.0577266588807106, 0.0005632899701595306, 0.00042115908581763506, 0.013189938850700855, 0.023322897031903267, -0.0027487785555422306, 0.061565104871988297, -0.043341562151908875, 0.009154342114925385, 0.014431224204599857, -0.043402448296546936, -0.020215999335050583, -0.006656815763562918, -0.023224350064992905, -0.046812888234853745, 0.013114077039062977, 0.02423899993300438, 0.027078118175268173, 0.0004721869481727481, 0.009592309594154358, -0.04047154635190964, 0.006325532682240009, -0.08023026585578918, -0.030877934768795967, -0.007829890586435795, 0.013407101854681969, -0.03536887466907501, -0.04948997497558594, -0.018165959045290947, 0.03020537458360195, -0.08037274330854416, -0.03639404475688934, -0.023152366280555725, 0.00543071748688817, -0.018135178834199905, 0.006881864741444588, 0.012400077655911446, 0.010877380147576332, -0.01898409239947796, 0.019146272912621498, 0.007152961101382971, -0.023664934560656548, 0.05444513261318207, -0.01503096055239439, 0.009938299655914307, 0.029304463416337967, -0.034972917288541794, 0.03944072127342224, 0.0687517449259758, 0.011553064920008183, -0.022196117788553238, 0.05666553974151611, -0.027761831879615784, -0.03991503641009331, 0.01178001333028078, -0.010489520616829395, 0.012624463066458702, -0.06366203725337982, 0.018432026728987694, 0.026364518329501152, 0.015139355324208736, -0.02208300307393074, -0.03117220290005207, 0.007969613187015057, 0.07424578070640564, 0.00826232973486185, -0.0528787225484848, -0.022009586915373802, -0.04078235849738121, 0.027699341997504234, -0.013323717750608921, -0.0323159396648407, -0.009530778974294662, 0.0044016544707119465, -0.036210283637046814, -0.006198304705321789, -0.07599236071109772, -0.025703977793455124, 0.0028761618304997683, 0.01331799291074276, -0.026178402826189995, 0.046747565269470215, 0.00023596780374646187, -0.012970581650733948, 0.03259330242872238, -0.06723226606845856, 0.027018921449780464, -0.03106733411550522, 0.1069951206445694, 0.00932501070201397, -0.017127685248851776, -0.046072136610746384, -0.03281452879309654, 0.026592057198286057, -0.0038855154998600483, 0.0035914520267397165, 0.04523254185914993, -0.004822430666536093, -0.017117004841566086, 0.019583728164434433, 0.009458678774535656, 0.011064590886235237, 0.03611619397997856, -0.0022815812844783068, 0.002484476426616311, -0.03416146710515022, -0.0474250465631485, -0.02199794165790081, 0.009495994076132774, 0.004004388581961393, -0.010845858603715897, 0.0011071381159126759, -0.011409355327486992, -0.05211423337459564, 0.004922054708003998, 0.026889408007264137, 0.001734543009661138, -0.012392460368573666, -0.05105391889810562, 0.0233172494918108, 0.014742778614163399, 0.018863392993807793, -0.04740092530846596, 0.010716937482357025, 0.04018447548151016, -0.07057835906744003, 0.022091465070843697, -0.010946854948997498, 0.031935855746269226, -0.013349806889891624, 0.010553807020187378, -0.023207057267427444, 0.021696588024497032, 0.0041603827849030495, 0.013893529772758484, 0.026358013972640038, 0.006186945363879204, 0.014761964790523052, 0.017871731892228127, 0.018083106726408005, -0.0020121911074966192, 0.05426529794931412, -0.06516410410404205, -0.0015352024929597974]\"\n./train/brain_coral/n01917289_4069.JPEG,brain_coral,\"[0.042633119970560074, -0.011637305840849876, 0.001577759045176208, -0.02126309648156166, -0.10066644102334976, -0.017439862713217735, -0.012602720409631729, -0.03824217617511749, 0.06866492331027985, -0.02887042984366417, -0.009532236494123936, 0.06437459588050842, -0.04043206572532654, -0.03285113349556923, -0.02494126744568348, -0.04610978811979294, 0.0260145403444767, 0.05312716215848923, -0.027951376512646675, 0.0018975241109728813, -0.08103097230195999, -0.02074780873954296, -0.0069478582590818405, -0.0789380595088005, 0.028471792116761208, -0.01131110917776823, -0.04096497967839241, -0.011820518411695957, 0.02268267050385475, 0.025878528133034706, -0.00893686804920435, -0.01855858974158764, -0.0002677476149983704, -0.040783606469631195, -0.027819087728857994, -0.016500450670719147, -0.0235583633184433, -0.042161233723163605, 0.0033181956969201565, 0.15810352563858032, 0.023789871484041214, -0.005986896809190512, -0.04107551649212837, 0.0020081661641597748, -0.009589598514139652, -0.1453312337398529, -0.008861650712788105, 0.05269535258412361, -0.011903198435902596, -0.005786715541034937, -0.024675589054822922, -0.048207562416791916, -0.02809864841401577, -0.04877757653594017, -0.08856932818889618, 0.005054723005741835, -0.08385153859853745, -0.028701534494757652, 0.011950436048209667, -0.02893739379942417, 0.08190025389194489, -0.02168133109807968, -0.008330726996064186, -0.019133880734443665, -0.020853107795119286, 0.020331449806690216, 0.013195441104471684, 0.06283964961767197, 0.0699542909860611, -0.00598469004034996, 0.011392030864953995, -0.07258408516645432, 0.005193233489990234, -0.0661529004573822, 0.016532758250832558, 0.03894522413611412, -0.045647792518138885, 0.03769368678331375, 0.03726399317383766, -0.02868388034403324, -0.010103016160428524, 0.03502805158495903, -0.0048889718018472195, 0.015988385304808617, 0.0091475835070014, -0.0030842451378703117, 0.10481967777013779, -0.022069478407502174, 0.0012704703258350492, 0.04624871909618378, 0.019967013970017433, -0.032707154750823975, -0.35496512055397034, -0.02828080952167511, -0.02882608398795128, 0.024996411055326462, 0.015954338014125824, -0.01732284389436245, -0.08246905356645584, 0.005553090013563633, -0.00705288490280509, 0.024926356971263885, -0.07794877886772156, 0.00977973360568285, -0.03876177594065666, 0.01515637245029211, -0.13701121509075165, 0.019092822447419167, -0.031897202134132385, 0.028583383187651634, 0.04187915474176407, -0.026951387524604797, -0.015592475421726704, 0.014777359552681446, 0.004459337797015905, -0.03277938440442085, 0.0549328476190567, -0.04924647882580757, -0.01669657602906227, 0.08712105453014374, 0.037589602172374725, -0.026198411360383034, -0.04650668427348137, 0.0044487579725682735, -0.0325431302189827, 0.02110130526125431, 0.023249274119734764, 0.01068431232124567, 0.022855492308735847, -0.018918534740805626, -0.02111922949552536, -0.01980370096862316, 0.014707624912261963, 0.05745202302932739, -0.02113228850066662, 0.014993724413216114, 0.01593426987528801, -0.012614424340426922, 0.021386906504631042, -0.025792323052883148, 0.032228920608758926, 0.021719135344028473, -0.06279725581407547, -0.0022402447648346424, 0.013266121968626976, 0.003147857030853629, -0.021470820531249046, -0.026341954246163368, 0.00018200169142801315, 0.04928131774067879, -0.017496535554528236, 0.007159180007874966, -0.04352954402565956, 0.02018442191183567, -0.04914068058133125, 0.026493633165955544, 0.03746512532234192, 0.004821633920073509, 0.03115643747150898, 0.01260236743837595, -0.022269072011113167, -0.0015207842225208879, -0.03519642725586891, 0.016927672550082207, -0.002786792116239667, -0.0015364584978669882, -0.007938945665955544, 0.052821215242147446, 0.001905888319015503, -0.007046045269817114, -0.0017779201734811068, 0.03493361920118332, 0.028692476451396942, 0.014876256696879864, -0.0032811560668051243, 0.043478526175022125, -0.11563587188720703, 0.022541336715221405, -0.00034125117235817015, 0.0017052650218829513, 0.017870686948299408, -0.007252580486238003, -0.01855587400496006, 0.02569252997636795, 2.990549364767503e-05, 0.008197109214961529, 0.010544958524405956, -0.019656924530863762, 0.08266706764698029, 0.005614821799099445, 0.01243016216903925, 0.0002620462328195572, 0.07125052809715271, -0.04865465685725212, 0.09653236716985703, -0.05659308657050133, 0.040247928351163864, 0.0021101017482578754, 0.03570326045155525, -0.0043679517693817616, -0.008795936591923237, -0.011232520453631878, 0.020619582384824753, 0.06001489609479904, -0.007033577188849449, 0.023332715034484863, 0.04108329862356186, 0.000689851411152631, 0.0006808520993217826, -0.038979239761829376, -0.027291249483823776, 0.026737280189990997, -0.06220642849802971, -0.06492330133914948, 0.05893367901444435, 0.07870671898126602, 0.04470879212021828, -0.033324506133794785, 0.0059449984692037106, -0.0036222978960722685, 0.05722357705235481, 0.012298491783440113, -0.02533920854330063, -0.007417258806526661, 0.057566430419683456, -0.055558133870363235, 0.015167774632573128, 0.00411220220848918, 0.009990490972995758, 0.04995088651776314, -0.02853059023618698, -0.03693598136305809, 0.03230192884802818, -0.02819240093231201, -0.009017102420330048, -0.045262064784765244, -0.0008874559425748885, -0.03450155258178711, 0.04000449180603027, 0.05720837041735649, -0.011228244751691818, 0.010235226713120937, 0.01342642679810524, -0.008221047930419445, -0.0010613109916448593, -0.043630871921777725, -0.01838909089565277, 0.04917406663298607, -0.01021258719265461, 0.02171163633465767, 0.034282732754945755, 0.0003765280998777598, 0.03634874150156975, 0.05077454820275307, -0.029088767245411873, 0.03150409087538719, 0.031319014728069305, 0.01945449411869049, 0.17037101089954376, 0.018718795850872993, 0.03711019456386566, -0.014117758721113205, 0.01254891138523817, 0.03893648087978363, -0.03702308610081673, -0.03273491561412811, 0.07073646038770676, 0.0661030113697052, -0.03216368332505226, -0.03758575767278671, -0.023418504744768143, -0.006190493702888489, -0.06279648095369339, 0.01049384567886591, 0.0037989714182913303, -0.026777787134051323, -0.07354382425546646, 0.052022650837898254, -0.019008105620741844, -0.05191332474350929, 0.022012723609805107, 0.02191483974456787, -0.00871208868920803, 0.012534418143332005, 0.03365426883101463, 0.00967981107532978, -0.0005028421874158084, -0.08179924637079239, 0.018887819722294807, -0.01609490066766739, -0.01851542480289936, 0.0059799677692353725, 0.006992778740823269, -0.004087565932422876, 0.010586661286652088, -0.025428589433431625, 0.07280213385820389, 0.029383912682533264, 0.06656445562839508, 0.020093098282814026, -0.0338284857571125, -0.04953955486416817, -0.022417251020669937, 0.037893373519182205, 0.011458292603492737, 0.07628250867128372, 0.01811091974377632, 0.03749501705169678, 0.039837174117565155, -0.010074332356452942, 0.024822885170578957, -0.033570803701877594, 0.057163823395967484, -0.022154485806822777, -0.014580556191504002, 0.025779038667678833, -0.01825452409684658, 0.03718128800392151, -0.06907576322555542, 0.028523145243525505, 0.008610176853835583, 0.32167184352874756, -0.04789632931351662, -0.10204025357961655, 0.04142257198691368, -0.0046652257442474365, 0.03139254450798035, -0.021322090178728104, -0.0013705501332879066, -0.10961299389600754, -0.009089904837310314, -0.052777841687202454, 0.0455404594540596, -0.00789988785982132, -0.03155192732810974, 0.0022094815503805876, 0.019548669457435608, -0.03791487589478493, -0.021776624023914337, 0.05369296297430992, 0.014988741837441921, 0.04138905927538872, -0.012923793867230415, -0.029050741344690323, 0.0005422068643383682, 0.004383563995361328, -0.01695706881582737, 0.04173004999756813, -0.002592354081571102, 0.014309629797935486, 0.04789451137185097, 0.05476246774196625, -0.0041035814210772514, 0.06078684329986572, -0.0288777407258749, -0.059161700308322906, 0.0006219827337190509, -0.08374065160751343, 0.06100408360362053, 0.02687947452068329, 0.028356555849313736, -0.0019835704006254673, 0.008933484554290771, -0.009248657152056694, -0.017119500786066055, 0.010469603352248669, -0.0024410004261881113, -0.08770409226417542, -0.015401163138449192, 0.019047504290938377, 0.0005558657576330006, 0.01386653259396553, 0.01665668748319149, -0.004311281256377697, 0.05692737549543381, 0.0778505951166153, 0.017782045528292656, 0.016932852566242218, -0.038518425077199936, -0.04965285211801529, -0.022250810638070107, -0.0505218468606472, 0.016290124505758286, 0.0019900701008737087, 0.01088288240134716, 0.05978528782725334, 0.028483090922236443, -0.01824037730693817, -0.040094900876283646, -0.0912097841501236, -0.03188856691122055, -0.006062565371394157, 0.01684321090579033, 0.011944591999053955, -0.002026753965765238, 0.004576473496854305, 0.03520330414175987, 0.01654430665075779, -0.09287013113498688, 0.05416078120470047, -0.01718628779053688, -0.035735584795475006, -0.042013708502054214, -0.01209487859159708, -0.021578002721071243, 0.005507209803909063, -0.010307978838682175, 0.05937297269701958, 0.00018334270862396806, -0.029912099242210388, 0.08139053732156754, -0.014952074736356735, -0.03439927473664284, -0.06900817155838013, 0.01886797696352005, -0.044651493430137634, 0.026170754805207253, 0.062080103904008865, -0.020818151533603668, -0.003637271700426936, 0.010228910483419895, -0.009077729657292366, 0.026567330583930016, -0.04372530058026314, 0.017110565677285194, -0.026381714269518852, 0.08178842812776566, 0.030685419216752052, 0.08196902275085449, -0.06648984551429749, -0.01698792353272438, -0.024228312075138092, 0.006012937519699335, 9.78800599114038e-05, -0.043664418160915375, 0.039412301033735275, -0.008604461327195168, 0.011646564118564129, 0.009141498245298862, 0.0053284307941794395, -0.03781129792332649, -0.06485823541879654, -0.03609594702720642, -0.031018249690532684, -0.015889747068285942, -0.027613431215286255, 0.008679094724357128, 0.001823322381824255, 0.015281891450285912, 0.014617832377552986, -0.013812302611768246, -0.10413755476474762, -0.03283795341849327, -0.051696937531232834, 0.0368085578083992, -0.10400282591581345, -0.042197518050670624, 0.031277451664209366, 0.00024479060084559023, -0.02885770983994007, -0.003628112841397524, 0.034243084490299225, 0.00769288744777441, -0.046617291867733, -0.0019087055698037148, -0.02203192189335823, 0.00600383710116148, 0.004343471489846706, 0.02669275738298893, -0.03463995084166527, -0.013423576019704342, -0.016486365348100662, 0.00249235681258142, -0.023010289296507835, -0.04296398162841797, -0.04238417372107506, -0.0399908646941185, 0.027545172721147537, -0.029670240357518196, -0.0024297924246639013, 0.003442301880568266, -0.044205084443092346, -0.011641417630016804, 8.514880028087646e-05, -0.011606075800955296, 0.00042916537495329976, -0.0148209473118186, -1.3483437214745209e-05, -0.011434992775321007, 0.025360899046063423, -0.026832284405827522, -0.014820276759564877, 0.02586226910352707, -0.026398159563541412, 0.033623069524765015, -0.05200781673192978, 0.016690997406840324, -0.023114530369639397, 0.008795893751084805, 0.025785274803638458, -0.0026709313970059156, -0.038993485271930695, -0.06336726993322372, 0.007270248606801033, 0.06703818589448929, -0.011703487485647202, 0.039650365710258484, -0.01744360662996769, 0.02124916762113571, 0.03405960649251938, 0.006768384482711554, -0.03160915896296501]\"\n./train/brain_coral/n01917289_4021.JPEG,brain_coral,\"[0.020552314817905426, 0.009100654162466526, 0.021495038643479347, 0.007343200035393238, -0.05506056919693947, -0.05225171893835068, -0.012782135047018528, -0.030221477150917053, 0.04626089334487915, -0.0023178060073405504, -0.036780085414648056, 0.030599122866988182, 0.020002590492367744, 0.022765258327126503, -0.02952764555811882, -0.05623020604252815, 0.015582757070660591, 0.07937750965356827, -0.020113417878746986, -0.033721230924129486, -0.03736376389861107, -0.009205921553075314, -0.03590742126107216, -0.057003602385520935, -0.0038851704448461533, -0.00988792534917593, -0.04536949470639229, -0.010367185808718204, -0.0015644681407138705, 0.033918820321559906, -0.018410874530673027, 0.0032559167593717575, 0.00672817463055253, -0.03795991465449333, 0.00450713699683547, -0.01185352262109518, -0.027655478566884995, -0.026450982317328453, -0.0007222761632874608, 0.13211272656917572, 0.0501101091504097, 0.0009380182600580156, -0.04357856884598732, 0.003750912845134735, 0.004911778960376978, -0.1411539614200592, 0.0236312597990036, 0.045586809515953064, 0.002903339685872197, -0.0026154560036957264, -0.027881931513547897, -0.02457232028245926, -0.03285575658082962, -0.04675951227545738, -0.08303578197956085, 0.035731274634599686, -0.03361017256975174, -0.0034553254954516888, 0.002157712122425437, -0.05786298215389252, 0.09413614869117737, -0.021385131403803825, 0.0047635966911911964, -0.025690991431474686, -0.03841753676533699, 0.01725125126540661, -0.014082709327340126, 0.12463295459747314, 0.03084591031074524, -0.00501847080886364, 0.0037024174816906452, -0.048589181154966354, -0.03405873849987984, -0.06782842427492142, -0.007595343515276909, 0.03898844122886658, -0.015384584665298462, 0.009851687587797642, 0.011337690986692905, -0.042824886739254, 0.0004539442015811801, 0.01021724846214056, -0.012158917263150215, -0.013763421215116978, 0.0415014773607254, 0.0006798969116061926, 0.12182028591632843, -0.03658901900053024, -0.012885432690382004, 0.02668295055627823, 0.01934235356748104, -0.043293047696352005, -0.48791131377220154, -0.001604630844667554, -0.020180782303214073, 0.03434782102704048, 0.015575929544866085, -0.023456653580069542, -0.04689386114478111, -0.014233849011361599, 0.005725625436753035, 0.017000867053866386, -0.060353267937898636, 0.01222850289195776, 0.0017455569468438625, 0.006965167820453644, -0.16365216672420502, -0.0035775532014667988, -0.032393842935562134, 0.032648127526044846, 0.03042314201593399, -0.033505987375974655, -0.03346153721213341, -0.007314019370824099, -0.004853290971368551, -0.025392556563019753, 0.0342327356338501, -0.024983637034893036, 0.023752912878990173, 0.051867760717868805, 0.004737557843327522, -0.029439233243465424, -0.056575413793325424, -0.009744394570589066, -0.023020707070827484, 0.008900230750441551, 0.026967812329530716, 0.02290983684360981, 0.009385790675878525, 0.018832625821232796, -0.009078610688447952, -0.017048310488462448, -0.011761155910789967, 0.06998301297426224, 0.0031743491999804974, 0.00889327097684145, -0.006251743994653225, -0.03389891982078552, 0.013171285390853882, -0.020130803808569908, 0.025293942540884018, 0.008405722677707672, -0.06259133666753769, 0.0007075231405906379, -0.011765262112021446, 0.004881270695477724, -0.02915618009865284, -0.0065020909532904625, -0.02276846207678318, 0.04021059349179268, -0.003991874400526285, -0.03158946707844734, -0.03352376073598862, -0.006043367087841034, -0.03492608293890953, 0.008679880760610104, 0.05111129954457283, -0.013610213994979858, 0.014014367014169693, 0.031410057097673416, -0.033668484538793564, -0.04430726543068886, 0.003605602076277137, 0.027853447943925858, -0.0025830871891230345, -0.02174198627471924, 0.026193086057901382, 0.04869266599416733, 0.006609227973967791, 0.010744900442659855, 0.006992122624069452, 0.006800055969506502, 0.013197560794651508, -0.018360471352934837, -0.013353940099477768, 0.04753561317920685, -0.06824622303247452, 0.015146227553486824, -0.03460170701146126, 0.006351021118462086, 0.06078460067510605, -0.011018048040568829, 0.02325531281530857, 0.02509080059826374, 0.010706057772040367, 0.005578962620347738, 0.01124479342252016, -0.044449176639318466, 0.046202290803194046, 0.006970119196921587, 0.01584518887102604, -0.01529585849493742, 0.06792546063661575, -0.007099741604179144, 0.035851381719112396, -0.05363215506076813, 0.02983637899160385, 0.01289396919310093, 0.028919413685798645, -0.02260209433734417, 0.013704321347177029, -0.036039143800735474, -0.008641553111374378, 0.054070502519607544, 0.023708347231149673, 0.00978647917509079, 0.05171544849872589, -0.023844121024012566, 0.01911615952849388, -0.0019185153068974614, -0.03349076956510544, 0.06694098562002182, -0.03911600261926651, 0.008008758537471294, 0.08922755718231201, 0.05394275486469269, 0.06999286264181137, -0.031856488436460495, 0.011726542375981808, -0.018544498831033707, 0.05931875482201576, 0.019893398508429527, -0.039749037474393845, -0.0069061871618032455, 0.04848551005125046, -0.02157731167972088, -0.001919604022987187, 0.06373646855354309, -0.0153911542147398, 0.02704177238047123, -0.0018903776071965694, -0.018032191321253777, 0.019877655431628227, -0.036349546164274216, 0.0037054731510579586, -0.066560760140419, -0.017516588792204857, -0.0364111103117466, 0.02694925107061863, 0.0035725985653698444, 0.01759827323257923, 0.009758556261658669, 0.051677852869033813, 0.011933522298932076, 0.005666738376021385, -0.012067824602127075, -0.012734193354845047, 0.05271172150969505, -0.03795216232538223, 0.018953029066324234, 0.02747037075459957, 0.015504499897360802, 0.0392509326338768, 0.03190523013472557, -0.0347801148891449, 0.04495678097009659, 0.020274482667446136, 0.0025594299659132957, 0.17184442281723022, 0.020068306475877762, 0.05424225330352783, -0.016139468178153038, -0.025038275867700577, -0.009093771688640118, -0.04646507650613785, -0.03621595352888107, 0.0502355694770813, 0.03181840479373932, -0.04079964756965637, -0.06661824882030487, -0.009228221140801907, 0.01254364661872387, -0.019391309469938278, 0.02989916503429413, 0.015525220893323421, -0.01335892640054226, -0.05625870078802109, 0.014343406073749065, -0.06407185643911362, -0.03864108398556709, 0.033851027488708496, 0.02467566728591919, -0.02594325877726078, 0.01782987080514431, -0.0002451987820677459, -0.0019104690290987492, 0.010846464894711971, -0.056570716202259064, -0.0011009544832631946, -0.050281718373298645, -0.008535720407962799, -0.027774851769208908, 0.006132822018116713, 0.004774153232574463, 0.003034666646271944, -0.001988094300031662, 0.11248832941055298, 0.017619039863348007, 0.047302644699811935, 0.03963671997189522, -0.04850931465625763, -0.053570590913295746, -0.011707932688295841, 0.03433166816830635, 0.024890964850783348, -0.004456370137631893, -0.0012119659222662449, 0.04634273424744606, 0.04227796941995621, 0.013309948146343231, 0.018646378070116043, -0.007859408855438232, 0.06979319453239441, 0.01572079211473465, 0.006729596760123968, 0.0025477400049567223, 0.002910506445914507, 0.042080704122781754, -0.05218107998371124, 0.00221493118442595, 0.0291438065469265, 0.2585635781288147, -0.060790110379457474, -0.07567021250724792, 0.026913587003946304, -0.008086437359452248, 0.0005582098965533078, -0.022416556254029274, -0.004131191410124302, -0.0437636561691761, -0.013194585219025612, -0.045236051082611084, 0.06153884157538414, -0.042081110179424286, -0.04235336184501648, -0.021809164434671402, -0.004932137206196785, -0.006476935464888811, -0.04083380475640297, 0.023301418870687485, -0.00559456879273057, -0.011785589158535004, -0.014412976801395416, -0.017869267612695694, 0.014362159185111523, 0.001797525561414659, -0.02599283494055271, 0.04248669371008873, -0.01614140160381794, 0.026087794452905655, 0.06253690272569656, 0.011459993198513985, 0.015238859690725803, 0.03922314941883087, -0.017794618383049965, -0.01180789154022932, 0.020381174981594086, -0.06625638157129288, 0.04430697485804558, 0.013854341581463814, 0.05583713948726654, -0.01700977049767971, 0.02709796279668808, -0.007816128432750702, -0.07631780207157135, 0.03180366009473801, -0.022502562031149864, -0.13362032175064087, -0.024862583726644516, 0.00946804229170084, -0.010263191536068916, 0.04845162108540535, 0.002447080099955201, 0.03227870911359787, 0.05611315742135048, 0.054666657000780106, 0.06936167925596237, 0.026381686329841614, -0.09161580353975296, -0.017095012590289116, -0.013147672638297081, -0.023986946791410446, -0.022738881409168243, 0.0028973270673304796, 0.006724607665091753, 0.01617249846458435, 0.036556027829647064, -0.018623637035489082, -0.05424979701638222, -0.05921994149684906, -0.03932136297225952, -0.011230305768549442, -0.0005813464522361755, 0.04345778375864029, -0.010528629645705223, -0.03638523444533348, 0.03459490090608597, 0.02383424900472164, -0.08449608087539673, -0.0053688352927565575, -0.020914923399686813, -0.02517782151699066, -0.026496317237615585, -0.051913682371377945, 0.009270966053009033, -0.021432451903820038, -0.0007951405132189393, 0.08513104170560837, 0.020178547129034996, -0.05280827730894089, 0.09082383662462234, -0.014021683484315872, -0.020903892815113068, -0.018942302092909813, -0.035491202026605606, -0.02748679183423519, 0.03979859501123428, 0.03293074294924736, -0.046633895486593246, -0.014024706557393074, -0.012447510845959187, 0.02092829905450344, 0.035760682076215744, -0.03675442188978195, 0.019787631928920746, -0.009908205829560757, 0.027223479002714157, 0.044562604278326035, 0.003619532100856304, -0.016445882618427277, -0.02181071788072586, -0.05544009059667587, 0.031195804476737976, -0.020143480971455574, -0.03877340629696846, 0.012132077477872372, -0.008765468373894691, -0.014278644695878029, -0.008823608048260212, -0.0032519849482923746, -0.038278281688690186, -0.020129842683672905, -0.025829721242189407, -0.021241778507828712, -0.002121365861967206, -0.026325354352593422, 0.047344375401735306, -0.0421372689306736, 0.01600232534110546, 0.057067081332206726, -0.01127244159579277, -0.06658296287059784, -0.041903380304574966, -0.04251778498291969, 0.025677984580397606, -0.04243725165724754, -0.013859976083040237, 0.041000522673130035, 0.008455348201096058, -0.028545809909701347, -0.028292110189795494, 0.025107048451900482, 0.005931340157985687, -0.06556035578250885, 0.032951850444078445, 0.008767074905335903, 0.002279972657561302, -0.010049363598227501, -0.0015812581405043602, -0.04513376206159592, -0.027004530653357506, -0.03412441164255142, 0.001190095441415906, -0.04634102061390877, -0.033354632556438446, -0.028911741450428963, -0.012228211387991905, 0.025707954540848732, -0.03915504366159439, -0.0020516403019428253, -0.037673305720090866, -0.03239461034536362, 0.02625260129570961, 0.011062073521316051, -0.00641865748912096, 0.037495870143175125, -0.02691946178674698, -0.008637048304080963, -0.05653204396367073, 0.03424759581685066, -0.028560398146510124, -0.016805686056613922, 0.03201742842793465, -0.045412857085466385, 0.04028794914484024, -0.02045900747179985, 0.0289077777415514, 0.004340304061770439, 0.009779359214007854, 0.038250427693128586, -0.03396346792578697, -0.023223059251904488, -0.08410054445266724, -0.011609402485191822, 0.03927300497889519, -0.02436044067144394, 0.03001357987523079, -0.02986067719757557, -0.0025063336361199617, 0.052372340112924576, 0.024131255224347115, -0.0008719706675037742]\"\n./train/brain_coral/n01917289_1022.JPEG,brain_coral,\"[0.02037084847688675, -0.007647702470421791, 0.017677675932645798, -0.01982281170785427, -0.031470656394958496, -0.009951162151992321, -0.028087854385375977, 0.03742925077676773, 0.004077325575053692, -0.016604822129011154, -0.04165179654955864, 0.004211266990751028, -0.05196744203567505, 0.02866896241903305, 0.00565241789445281, 0.013383464887738228, 0.0684722512960434, 0.03683677315711975, 0.009442408569157124, 0.024637971073389053, -0.076491579413414, -0.00635487399995327, -0.01284330990165472, -0.040327053517103195, 0.024514926597476006, -0.025455353781580925, 0.02314496971666813, 0.009746260941028595, -0.01856720633804798, -0.02242572046816349, 0.012313669547438622, -0.013074382208287716, 0.018463116139173508, -0.03200918808579445, 0.02289826236665249, -0.02458048239350319, -0.015308352187275887, 0.0037793528754264116, 0.02336074411869049, -0.1360211968421936, 0.008292454294860363, -0.006820224691182375, -0.01625991053879261, 0.01995035819709301, -0.0058448235504329205, -0.0645279809832573, -0.05392957106232643, 0.04463944956660271, -0.01005280390381813, -0.00676585640758276, -0.01302989199757576, -0.0038970436435192823, 0.018380289897322655, -0.048983607441186905, -0.006235363893210888, 0.030351122841238976, -0.023977385833859444, -0.01639559306204319, -0.03145437315106392, -0.04262889549136162, 0.1035747155547142, -0.015882980078458786, 0.023563632741570473, 0.01140834204852581, -0.051986683160066605, 0.011302386410534382, 0.012538124807178974, 0.017992934212088585, 0.009629642590880394, -0.00019055692246183753, 0.0010566803393885493, 0.014776045456528664, -0.03752637282013893, 0.0009704964468255639, -0.016268722712993622, -0.03474091365933418, -0.054111603647470474, 0.03740173578262329, 0.03663189336657524, -0.0017044697888195515, 0.011407273821532726, 0.0013591520255431533, 0.0030082690063863993, -0.05595783516764641, -0.01578233577311039, -0.010928710922598839, 0.18313263356685638, -0.008886258117854595, 0.04225221276283264, 0.008006257005035877, 0.02709590084850788, -0.029126470908522606, -0.6460835337638855, -0.015223103575408459, 0.0009798260871320963, 0.019297076389193535, 0.03076152130961418, -0.03233681246638298, -0.0721113309264183, -0.034244731068611145, -0.010595201514661312, -0.007888752035796642, 0.02133561670780182, 0.015797054395079613, 0.03474101796746254, -0.06119845062494278, -0.09044528007507324, 0.015781033784151077, -0.02356201969087124, 0.013519367203116417, -0.017127137631177902, -0.03943488374352455, -0.017545679584145546, 0.025736218318343163, 0.02043882943689823, -0.011809251271188259, 0.0753609910607338, -0.02062622830271721, 0.01934674195945263, 0.01303917821496725, -0.05856733024120331, -0.04442792385816574, -0.031501878052949905, 0.0305331964045763, -0.013515690341591835, -0.008925353176891804, -0.027320748195052147, -0.03843243047595024, -0.016616204753518105, 0.0046499669551849365, 0.057902127504348755, -0.02768799103796482, -0.02107084169983864, 0.0885978564620018, 0.00776210380718112, 0.013758896850049496, 0.005713246297091246, -0.08566942811012268, 0.004418277647346258, -0.03681830316781998, -0.01914139837026596, -0.010757794603705406, -0.07240185141563416, 0.01746966317296028, -0.023758461698889732, 0.019379669800400734, 0.003835073672235012, 0.03287187218666077, 0.03338555991649628, -0.021241674199700356, -0.06971564888954163, -0.023354249075055122, -0.02759484201669693, -0.0004848384123761207, -0.014013845473527908, 0.01385558396577835, 0.009719117544591427, 0.0016198217635974288, 0.007001939695328474, -0.01420613657683134, -0.017190556973218918, 0.0059104012325406075, -0.00024916944676078856, -0.008077244274318218, 0.0015224508242681623, 0.02158779464662075, -0.06532274931669235, -0.02704496495425701, 0.02917632833123207, 0.004086628556251526, -0.031218884512782097, -0.018935665488243103, -0.0047047375701367855, 0.02567100152373314, 0.00162324751727283, -0.009332370944321156, -0.10299865156412125, 0.018528657034039497, -0.0370611734688282, -0.04562551528215408, -0.05204426124691963, 0.016883350908756256, -0.03395063802599907, -0.007542254403233528, -0.02645343542098999, -0.019386935979127884, 0.004902759101241827, 0.02620251290500164, 0.017156722024083138, 0.037813544273376465, 0.03866570442914963, -0.02343042939901352, 0.02339642308652401, -0.04020160064101219, 0.050534430891275406, -0.0030594116542488337, -0.021370887756347656, -0.026088105514645576, 0.019763421267271042, -0.026216158643364906, -0.0013261805288493633, -0.03914486989378929, 0.010861015878617764, -0.009527212008833885, 0.011170407757163048, -0.009714876301586628, 0.04073202982544899, -0.009883183985948563, 0.02990669757127762, -0.017429526895284653, -0.049027133733034134, 0.07180216908454895, -0.044411372393369675, -0.07158669084310532, 0.01892198622226715, 0.02815139852464199, 0.01911904476583004, -0.012741160579025745, -0.053235601633787155, 0.015274986624717712, 0.06300712376832962, 0.03491926193237305, -0.0014238858129829168, -0.02288796938955784, -0.005570374429225922, -0.04586666449904442, 0.028894789516925812, -0.011193742044270039, -0.025452740490436554, 0.011036071926355362, -0.04153155907988548, -0.010964496061205864, 0.033902380615472794, 0.035685811191797256, -0.03216027840971947, 0.07520609349012375, -0.007231970317661762, 0.009580692276358604, -0.015922773629426956, -0.010483331978321075, -0.009293549694120884, 0.027101976796984673, 0.020161563530564308, 0.008602623827755451, 0.01645796187222004, -0.033684659749269485, -0.009764332324266434, 0.03434626758098602, 0.018056754022836685, -0.06303508579730988, -0.008170678280293941, -0.021716218441724777, 0.0213270615786314, 0.02122725173830986, -0.003826064756140113, 0.028074949979782104, 0.02353779599070549, -0.021862344816327095, 0.061896633356809616, -0.03325090557336807, 0.02895769104361534, -0.011332357302308083, -0.018502358347177505, 0.023195581510663033, 0.030674545094370842, 0.025896262377500534, 0.015493570826947689, -0.08150233328342438, -0.045701634138822556, 0.013931389898061752, -0.012169234454631805, 0.007792777847498655, 0.023420555517077446, -0.03503384068608284, -0.0453948900103569, -0.009627888910472393, -0.0022122433874756098, 0.013761892914772034, -0.042504649609327316, -0.020845256745815277, 0.022145964205265045, 0.02392849698662758, 0.03791056573390961, 0.006838702131062746, -0.006891957018524408, 0.01693321019411087, -0.07882440835237503, -0.03929014131426811, 0.010126943700015545, 0.03183543682098389, -0.00041070874431170523, 0.003420458408072591, 0.0030101719312369823, 0.012878586538136005, 0.04737769439816475, -0.009390373714268208, -0.03574995696544647, -0.0319506898522377, 0.02233113907277584, -0.015271059237420559, -0.014668604359030724, -0.03306613117456436, -0.0454237200319767, 0.04765874892473221, -0.0206262469291687, -0.0036869116593152285, -0.00683649443089962, -0.009128358215093613, -0.0024109005462378263, 0.018795380368828773, 0.01911395601928234, -0.0011780213098973036, 0.08837588876485825, 0.05553848296403885, 0.038291871547698975, 0.053843818604946136, -0.024073684588074684, 0.01534148771315813, -0.027549272403120995, -0.031220687553286552, -0.0005696596344932914, 0.23783208429813385, -0.02654138021171093, -0.0031191278249025345, -0.01575394719839096, 0.02848481945693493, -0.006978889461606741, 0.0474386140704155, 0.027037017047405243, 0.03501690551638603, -0.014807400293648243, -0.01377404946833849, 0.047898873686790466, -0.024198034778237343, -0.0004384314233902842, -0.009285811334848404, 0.01240573264658451, -0.005543424282222986, -0.007209321018308401, 0.03341054171323776, -0.005210688803344965, -0.012622103095054626, -0.008226812817156315, 0.050691135227680206, -0.014239896088838577, 0.05309472233057022, 0.0037067781668156385, 0.013496561907231808, 0.004666357301175594, 0.018680253997445107, 0.03877443075180054, 0.0030893227085471153, 0.038596272468566895, 0.055235445499420166, -0.017370810732245445, -0.02011382021009922, 0.027062471956014633, -0.034474652260541916, -0.002893338445574045, 0.004125961568206549, -0.051598791033029556, 0.013296213932335377, 0.015040921978652477, -0.06258945912122726, -0.02078951895236969, -0.012393133714795113, -0.026470964774489403, -0.14409653842449188, -0.017348211258649826, 0.015581019222736359, 0.0015889343339949846, -0.002754234243184328, -0.028692156076431274, 0.010707158595323563, 0.01673886924982071, -0.0011594250099733472, 0.00962620135396719, 0.012823052704334259, -0.05210394039750099, -0.0060911402106285095, -0.03981112316250801, 0.024079395458102226, -0.026794379577040672, 0.0021759560331702232, 0.006654297932982445, 0.009596803225576878, 0.0008144596358761191, 0.02452918328344822, -0.018229585140943527, -0.037380438297986984, -0.003437913255766034, 0.01506341528147459, 0.004339974839240313, 0.000329189671901986, -0.02480258047580719, -0.021674009039998055, 0.04850572720170021, 0.009864344261586666, -0.030819116160273552, -0.003359084017574787, 0.014267480000853539, -0.017769161611795425, 0.05464820936322212, -0.03855369985103607, 0.021931495517492294, -0.016128256916999817, -0.007742365822196007, -0.019917601719498634, -0.0033625795040279627, -0.032359518110752106, -0.0025282748974859715, -0.0005751175922341645, -0.003395787440240383, -0.03560197353363037, 0.04065917804837227, 0.006000547669827938, -0.00529197882860899, 0.012782761827111244, 0.040260788053274155, 0.039029575884342194, 0.01475492399185896, -0.03823317959904671, -0.044966522604227066, -0.03615599125623703, -0.020492499694228172, -0.005815933924168348, 0.0030328689608722925, -0.004159178584814072, -0.03815891966223717, -0.022891774773597717, -0.022989092394709587, -0.011947079561650753, -0.02292742393910885, -0.006417122669517994, 0.005321265663951635, -0.01709846965968609, -0.028825528919696808, 0.04081946238875389, 0.03568217158317566, -0.010448657907545567, 0.06447219103574753, -0.07205232977867126, -0.05035123974084854, -0.04948807135224342, 0.0514952577650547, 3.182764658049564e-06, 0.03753726929426193, -0.001671434030868113, 0.014185278676450253, -0.007670554798096418, 0.00718418974429369, -0.014297664165496826, 0.014698500744998455, -0.08002962172031403, 0.025227094069123268, -0.026656636968255043, 0.021703537553548813, 0.05827191472053528, 0.012411111034452915, 0.013722407631576061, -0.017039967700839043, 0.014901946298778057, -0.005474053788930178, 0.017343951389193535, -0.000309282768284902, 0.023821350187063217, -0.0004181344120297581, -0.02479393593966961, 0.019780881702899933, 0.036770857870578766, -0.006416903343051672, -0.01912904903292656, 0.019307004287838936, -0.006168140564113855, -0.007058917079120874, 0.013506020419299603, 0.011729356832802296, -0.01566913351416588, -0.02812701277434826, 0.03515700250864029, 0.025041017681360245, -0.003951112274080515, -0.0025746654719114304, 0.008974670432507992, -0.041662219911813736, 0.002725018188357353, 0.03134843707084656, 0.031000131741166115, 0.015773063525557518, -0.005529874004423618, 0.0031584131065756083, -0.0175381638109684, 0.002649056725203991, -0.01570282131433487, -0.018325941637158394, 0.03443681821227074, 0.032416366040706635, -0.02754902094602585, 0.004701398313045502, 0.0184394009411335, 0.0027751296292990446, -0.03797201067209244, 0.008109316229820251, 0.002853680867701769, 0.030838195234537125, -0.006840870715677738, 0.013343265280127525, 0.03312103822827339, -0.010797097347676754, 0.03175454959273338, -0.028644895181059837, -0.005793408490717411]\"\n./train/Rhodesian_ridgeback/n02087394_6382.JPEG,Rhodesian_ridgeback,\"[0.02308417297899723, -0.013243380934000015, -0.0011919172247871757, 0.025169191882014275, 0.014239191077649593, -0.0657489001750946, 0.04157138988375664, 0.06472545862197876, 0.0018119843443855643, -0.01085776649415493, -0.03395659849047661, -0.002928738249465823, 0.007339686620980501, -0.023188825696706772, 0.03630947321653366, 0.02269255369901657, 0.12181247025728226, -0.025292368605732918, 0.032340388745069504, -0.010079457424581051, -0.030457938089966774, -0.019505197182297707, 0.014523853547871113, 0.008477265015244484, -0.004381861537694931, -0.0017177934059873223, 0.03824477270245552, 0.0009682498057372868, 0.005322229117155075, 0.007173600140959024, 0.005672393832355738, 0.006073012948036194, -0.015965400263667107, 0.012695889919996262, -0.006711302325129509, 0.034853510558605194, -0.02459079958498478, -0.019755598157644272, -0.0030319762881845236, 0.14294230937957764, -0.037602830678224564, 0.02768511138856411, -0.0012277445057407022, 0.01967369206249714, -0.004233500920236111, 0.05185554921627045, -0.023571571335196495, -0.007335159927606583, 0.022079383954405785, 0.01789535954594612, -0.020326897501945496, 0.009221176616847515, 0.007814510725438595, 0.036281172186136246, 0.03746308386325836, -0.03603244200348854, 0.04464716464281082, 0.0393059104681015, 0.02384301647543907, -0.02805081009864807, 0.07112420350313187, 0.021915599703788757, 0.04489470273256302, 0.018362410366535187, -0.01032483484596014, -0.0017045268323272467, 0.019352054223418236, 0.052096229046583176, 0.015755873173475266, 0.016499994322657585, 0.044089868664741516, -0.008277129381895065, 0.04340771585702896, -0.01996210217475891, -0.047513771802186966, -0.009614044800400734, -0.02183287777006626, -0.005737907253205776, 0.011905459687113762, -0.0031244494020938873, 0.010101508349180222, -0.03803924843668938, 0.0067970035597682, -0.10000960528850555, 0.026616668328642845, -0.04641132801771164, 0.0719316229224205, -0.0065320925787091255, 0.0235440656542778, -0.019915984943509102, -0.011605681851506233, -0.03407461568713188, -0.686102569103241, 0.037870313972234726, -0.026033738628029823, -0.009214666672050953, 0.0053483047522604465, 0.008706730790436268, -0.029935194179415703, 0.10559388995170593, -0.017501777037978172, 0.0025657666847109795, 0.021034182980656624, -0.021548662334680557, 0.007231469266116619, -0.034995805472135544, 0.013639913871884346, 0.02912517450749874, 0.017743289470672607, -0.02912086993455887, 0.00758344167843461, -0.019725732505321503, 0.035037893801927567, -0.015384136699140072, 0.005531858652830124, -0.015205256640911102, 0.01533540803939104, -0.035633593797683716, 0.026342667639255524, -0.02704468183219433, 0.0385383702814579, -0.029329068958759308, 0.009420477785170078, 0.0033848173916339874, 0.0292982030659914, -0.016751078888773918, 0.03563440963625908, 0.010881530120968819, 0.002747170627117157, -0.03971535339951515, 0.03573324531316757, 0.010124724358320236, -0.023400021716952324, 0.08867970108985901, -0.04155530780553818, 0.03901910036802292, 0.01888192817568779, -0.04308389872312546, -0.023020364344120026, -0.007523694075644016, 0.03743257001042366, 0.010046628303825855, -0.016884401440620422, -0.006885663140565157, 0.0033059308771044016, 0.024232033640146255, -0.02440335415303707, 0.029460808262228966, -0.01077456958591938, -0.004936025012284517, -0.05040370300412178, 0.004216311499476433, 0.01644541323184967, 0.004694309085607529, -0.02598286047577858, 0.05482034385204315, -0.022819770500063896, -0.014457395300269127, -0.011072582565248013, 0.027884026989340782, -0.03146982938051224, -0.0031402448657900095, -0.003753026481717825, -0.0028569006826728582, 0.009028357453644276, -0.058234624564647675, -0.016158662736415863, 0.037865739315748215, 0.0012431625509634614, 0.02558949589729309, -0.005825836211442947, -0.002474182052537799, 0.04242189601063728, -0.017856961116194725, 0.02904997207224369, -0.0016461710911244154, 0.02967512235045433, 0.019543658941984177, 0.049438443034887314, 0.00018281386292073876, -0.03366461396217346, 0.010182569734752178, 0.02327582612633705, -0.0640421137213707, 0.02568628638982773, -0.014651513658463955, -0.021118931472301483, -0.011640595272183418, -0.024282235652208328, 0.0443638414144516, 0.01587750017642975, 0.00457781134173274, 0.006171954330056906, 0.02122187614440918, 0.046856556087732315, 0.006560173351317644, 0.009890185669064522, -0.00683186948299408, -0.11367084830999374, -0.012845740653574467, -0.03074374794960022, 0.03257380798459053, 0.008926098234951496, -0.0014574421802535653, -0.05544530600309372, -0.041575055569410324, 0.007297259755432606, -0.02869582362473011, 0.011752557009458542, 0.04576411098241806, 0.004945625551044941, -0.0015152321429923177, 0.0284246988594532, 0.03141586109995842, 0.013939635828137398, -0.0157669298350811, -0.004252928774803877, 0.006553925108164549, 0.08617712557315826, -0.02314973808825016, 0.06521929800510406, 0.10466964542865753, -0.029243651777505875, -0.007345487829297781, -0.015958376228809357, -0.015705348923802376, -0.024048510938882828, -0.04595770686864853, 0.0073736985214054585, 0.01520211435854435, 0.00275917025282979, 0.009457594715058804, -0.0022441742476075888, 0.03690330311655998, -0.013296636752784252, -0.037248268723487854, -0.013672137632966042, -0.010086788795888424, 0.016497032716870308, -0.02944866381585598, 0.0066977255046367645, 0.023179955780506134, -0.010388088412582874, -0.01709543727338314, -0.0107598677277565, 0.034659165889024734, 0.05455595627427101, -0.09690243750810623, 0.005332504864782095, 0.029650118201971054, 0.010695659555494785, 0.018422508612275124, -0.006281358189880848, -0.006532489322125912, 0.02671656757593155, 0.009258575737476349, 0.004446523729711771, -0.015570143237709999, -0.0665777325630188, -0.013350307010114193, -0.013022365048527718, 0.019069379195570946, 0.014206853695213795, -0.04077300801873207, 0.008040565066039562, -0.010341468267142773, 0.007761290762573481, -0.018447820097208023, -0.037095583975315094, 0.011566268280148506, -0.023041600361466408, -0.003037508809939027, 0.051740534603595734, -0.014792634174227715, 0.013364074751734734, 0.00034846863127313554, -0.02366427332162857, 0.002325209556147456, -0.0038722152821719646, 0.027441484853625298, -0.01792282611131668, -0.002832104917615652, -0.005275101866573095, -0.03038209117949009, -0.01052909530699253, 0.00891028717160225, -0.02045639418065548, 0.003812001785263419, 0.009644805453717709, 0.03325188532471657, -0.00030954432440921664, -0.007831153459846973, -0.046224772930145264, 0.01267195213586092, -0.00110698863863945, 0.003914746455848217, 0.029664885252714157, 0.02961743250489235, 0.05029679462313652, 0.0023566195741295815, 0.008263573981821537, -0.017217978835105896, -0.029691200703382492, 0.0012515621492639184, 0.02381080389022827, -0.007409439422190189, -0.004301964771002531, 0.035902757197618484, 0.029441317543387413, 0.010375967249274254, -0.03464960679411888, 0.06893931329250336, 0.08862821757793427, -0.0005867581930942833, -3.9136979467002675e-05, 0.02205132134258747, 0.004947176668792963, 0.011149519123136997, -0.03743429109454155, -0.05442076921463013, 0.04053838923573494, 0.042739059776067734, -0.06458980590105057, 0.05115669220685959, 0.01921525038778782, -0.015300467610359192, -0.026996038854122162, 0.0634428933262825, 0.03540928661823273, 0.023802174255251884, -0.01780756376683712, -0.05041998624801636, 0.012999407947063446, -0.014846239238977432, 0.03528640791773796, -0.007771408651024103, 0.001280738739296794, 0.021902915090322495, 0.021053723990917206, -0.06184793636202812, 0.016858700662851334, -0.06559113413095474, -0.022622497752308846, -0.00634013069793582, 0.04672214388847351, 0.008856664411723614, 0.0005530653288587928, 0.015405083075165749, -0.01601838693022728, -0.0032613498624414206, -0.03510686010122299, 0.016617082059383392, 0.026413537561893463, 0.022918302565813065, -0.002218767534941435, 0.04870320484042168, 0.0022095704916864634, -0.032224223017692566, 0.005881450604647398, 0.011279494501650333, 0.0377279631793499, 0.010849189013242722, -0.034236613661050797, -0.015039135701954365, -0.07178745418787003, 0.026244448497891426, -0.005576918832957745, -0.0544213131070137, -0.011933778412640095, -0.050966836512088776, 0.02270747348666191, -0.012329911813139915, -0.03152836859226227, 0.004414761438965797, -0.04554259777069092, 0.015316477045416832, 0.13975149393081665, 0.0300371665507555, -0.05469843000173569, 0.02192898467183113, 0.021824492141604424, -0.047085586935281754, 0.05059652775526047, 0.05455033853650093, 0.017912475392222404, -0.020954106003046036, -0.018221687525510788, 0.022795340046286583, -0.004282161593437195, -0.13296733796596527, -0.0499921478331089, -0.06724570691585541, -0.01459234394133091, -0.0015016025863587856, 0.010842657648026943, -0.005170388147234917, 0.03069988638162613, -0.013032454997301102, -0.04528467729687691, -0.04975782707333565, -0.005773667246103287, 0.021383773535490036, -0.0009807921014726162, 0.03722834214568138, 0.02154170162975788, -0.016569625586271286, -0.011417833156883717, -0.030077779665589333, 0.010075600817799568, -0.03229297697544098, 0.08344234526157379, -0.0028047088999301195, 0.01825813762843609, 0.026695676147937775, 0.02617711015045643, 0.012928903102874756, -0.0032679312862455845, 0.028218768537044525, 0.03291582316160202, -0.050454702228307724, -0.0050392248667776585, 0.05351518839597702, -0.012955636717379093, 0.012584292329847813, 0.007567898370325565, -0.010187141597270966, -0.011926345527172089, 0.006621440872550011, 0.005144740920513868, -0.0019006904913112521, 0.0033350579906255007, 0.05995004624128342, 0.035307105630636215, 0.021082185208797455, -0.005104515235871077, -0.012576342560350895, -0.029700856655836105, 0.048547033220529556, -0.027034025639295578, -0.029907917603850365, 0.03277132287621498, -0.02132326178252697, -0.01782977022230625, -0.04319557175040245, 0.02027750387787819, -0.03620484843850136, 0.00565809803083539, 0.007830170914530754, 0.024277107790112495, -0.04031585901975632, 0.01617119088768959, -0.01814967766404152, 0.032375894486904144, 0.01130883302539587, -0.0037063532508909702, -0.0025116608012467623, 0.020978331565856934, 0.030643349513411522, 0.045297473669052124, -0.00048486259765923023, -0.02082754671573639, -0.020237930119037628, -0.016977528110146523, -0.009105159901082516, 0.051274970173835754, 0.04560249298810959, -0.06302233040332794, 0.029230240732431412, -0.02784580923616886, -0.036111220717430115, 0.01592285931110382, -0.005340958945453167, -0.0035265740007162094, -0.039947759360075, -0.009185572154819965, -0.0004828325763810426, 0.008954321034252644, -3.92104520869907e-05, -0.012892201542854309, -0.01975710503757, 0.023718522861599922, -0.038783036172389984, 0.014624500647187233, 0.006012895610183477, -0.03479320555925369, -0.0163680799305439, 0.007833491079509258, -0.027294520288705826, 0.025847241282463074, 0.024027204141020775, 0.00038975843926891685, -0.007308861706405878, -0.010038609616458416, -0.0433305986225605, 0.042142074555158615, -0.002495399909093976, -0.0051120612770318985, 0.07440738379955292, -0.03124675340950489, 0.016038144007325172, -0.03223884105682373, -0.021043747663497925, 0.00303500983864069, 0.018113285303115845, 0.007134533487260342, -0.0020660380832850933, -0.05069791525602341, -0.0194572564214468, -0.017220890149474144, 0.031514301896095276, 0.0008832751191221178, -0.012822096236050129]\"\n./train/Rhodesian_ridgeback/n02087394_8852.JPEG,Rhodesian_ridgeback,\"[0.02117527276277542, 0.03553718701004982, -0.02268850989639759, 0.0392468124628067, 0.0014685774222016335, -0.027038495987653732, 0.010597196407616138, 0.0018308187136426568, -0.010761154815554619, -0.023972634226083755, 0.031564097851514816, -0.003818017430603504, 0.04992454871535301, -0.0005204602493904531, 0.04849961772561073, -0.015648284927010536, -0.024959733709692955, 0.03955164551734924, -0.0326613150537014, -0.05562414973974228, -0.07124499976634979, 0.017978640273213387, 0.0025220916140824556, -0.08993011713027954, -0.0028449073433876038, -0.003224316518753767, 0.005568830296397209, -0.00865926779806614, -0.010858837515115738, -0.007267537526786327, 0.025674108415842056, 0.006176689639687538, 0.003656126093119383, -0.008408168330788612, -0.019473165273666382, 0.034374017268419266, 0.037043966352939606, 0.0008388737915083766, 0.002935869386419654, 0.036868058145046234, -0.022390291094779968, 0.005020489916205406, -0.01850225031375885, -0.03482494503259659, -0.00678364047780633, -0.01129715796560049, 0.024055441841483116, -0.03268428146839142, -0.03796076774597168, 0.020494893193244934, 0.021928565576672554, 0.002718704054132104, 0.008223634213209152, 0.051086511462926865, 0.04069150239229202, 0.06564091891050339, -0.014160070568323135, 0.030112547799944878, 0.02055695280432701, -0.011335675604641438, -0.044978462159633636, 0.0223019327968359, 0.030714822933077812, 0.06425247341394424, -0.03559847176074982, -0.031472429633140564, 0.013776830397546291, 0.10357861965894699, 0.01589849777519703, 0.022187186405062675, 0.02830522321164608, -0.01074372697621584, -0.0006875767139717937, 0.014891412109136581, -0.06442248076200485, 0.018149523064494133, 0.0024030336644500494, -0.006998702883720398, -0.0313735269010067, 0.02591196820139885, 0.07087705284357071, 0.02877000905573368, 0.017210084944963455, -0.0002654658746905625, 0.05199426785111427, -0.026020415127277374, 0.029660603031516075, 0.01526765525341034, 0.039959121495485306, -0.0365675687789917, -0.04072759300470352, -0.008458275347948074, -0.6624232530593872, 0.01743043214082718, -0.01074658427387476, 0.02231523022055626, -0.010997380129992962, 0.028312765061855316, -0.06838919967412949, 0.015174663625657558, 0.0005889015737921, 0.06344211101531982, -0.010327301919460297, 0.004336589947342873, -0.013552573509514332, -0.001065169693902135, -0.01686888188123703, -0.015364201739430428, -0.013647313229739666, -0.019918985664844513, 0.04395458474755287, -0.045380495488643646, 0.02161519043147564, -0.07293511927127838, -0.007488104049116373, -0.04126892611384392, -0.05674704909324646, 0.016025209799408913, 0.043038222938776016, -0.02258637361228466, -0.017880916595458984, 0.025058317929506302, 0.002477772533893585, 0.011426078155636787, 0.003361589042469859, -0.03576537221670151, 0.027405869215726852, -0.0028881963808089495, -0.02625737525522709, -0.0021049981005489826, 0.036034341901540756, -0.0026610023342072964, -0.012969018891453743, 0.08768381923437119, -0.008113141171634197, 0.03558991849422455, -0.02034481056034565, -0.01430926751345396, 0.0010706356260925531, 0.058470096439123154, 0.015228490345180035, 0.015510144643485546, -0.032141946256160736, 0.0055601997300982475, -0.01425198558717966, 0.0553775355219841, 0.014625776559114456, 0.03966519609093666, 0.00014150208153296262, -0.003671289188787341, -0.031434353440999985, 0.0024042113218456507, 0.06156796216964722, 0.02592497318983078, -0.03148602694272995, 0.02560907043516636, -0.018355999141931534, -0.045867934823036194, -0.018705066293478012, 0.03936217352747917, -0.06752033531665802, 0.00407438725233078, -0.032434746623039246, -0.03697807714343071, -0.007760059554129839, -0.002106150845065713, -0.06682291626930237, 0.030769431963562965, 0.021215952932834625, 0.05346294492483139, -0.04435550794005394, 0.016343679279088974, -0.013933940790593624, -0.019290247932076454, 0.013660638593137264, -0.02880728244781494, -0.005626555997878313, 0.041064899414777756, 0.01707322895526886, 0.013569277711212635, -0.026533080264925957, -0.027263974770903587, 0.03366691246628761, -0.029719308018684387, -0.010925267823040485, -0.017708567902445793, 0.003404999850317836, 0.037325818091630936, -0.021210771054029465, 0.003501404542475939, 0.04638824984431267, 0.011814280413091183, 0.005126279778778553, -0.005572848487645388, -0.10412293672561646, 0.011139443144202232, 0.02777773328125477, -0.003238013945519924, -0.011167891323566437, -0.012683053500950336, -0.001514289528131485, -0.004490428604185581, 0.02230544574558735, 0.022100316360592842, 0.0034838623832911253, -0.018809346482157707, -0.014910235069692135, -0.016513830050826073, 0.01371788326650858, 0.038245800882577896, -0.07562121003866196, -0.022699769586324692, 0.03349436819553375, 0.028789378702640533, 0.00877500232309103, -0.0204326044768095, -0.0020721140317618847, 0.03699633851647377, 0.03521065413951874, 0.017990102991461754, 0.041218459606170654, 0.01642143353819847, -0.006140982732176781, 0.02483588084578514, -0.012430171482264996, -0.03231165185570717, 0.0006137196905910969, -0.03559276461601257, 0.015844523906707764, 0.036987319588661194, 0.002681221580132842, 0.0031359833665192127, -0.016917139291763306, 0.06390156596899033, -0.006330080330371857, -0.05907990783452988, -0.005650807172060013, -0.050172001123428345, 0.010060192085802555, 0.031004369258880615, -0.007302736397832632, 0.03863460570573807, 0.03132789582014084, -0.012101789936423302, 9.216603939421475e-05, 0.00010236418165732175, 0.04392009973526001, 0.00406624935567379, 1.1358495612512343e-05, 0.05982978269457817, 0.012331613339483738, -0.007369071710854769, 0.009046184830367565, 0.005937753710895777, -0.013286130502820015, -0.0350256972014904, 0.008945322595536709, -0.0033138704020529985, 0.033899322152137756, -0.028893228620290756, -0.029802698642015457, 0.0502135269343853, 0.007009517401456833, -0.0643424540758133, -0.004665716551244259, 0.003584332298487425, -0.028035016730427742, -0.01414347905665636, -0.0033573152031749487, 0.058106593787670135, 0.04862087219953537, 0.004479182884097099, 0.0721408799290657, 0.03315078467130661, 0.0026157675310969353, 0.007108660414814949, -0.00555716548115015, 0.018083563074469566, -0.019385073333978653, -0.005692837294191122, -0.0039393240585923195, -0.006873246748000383, -0.03757679834961891, 0.011117208749055862, 0.001958576962351799, 0.06410913914442062, -0.12724941968917847, 0.04873267933726311, -0.01936481148004532, 0.02254795841872692, -0.01400560513138771, 0.0367068275809288, -0.0563482865691185, 0.012573259882628918, 0.037220295518636703, -0.04163191094994545, 0.025498520582914352, 0.0013253184733912349, -0.0060380990616977215, -0.001074079074896872, 0.01954513229429722, -0.023029720410704613, -0.030884653329849243, -0.016219234094023705, 0.025102678686380386, -0.05987905338406563, 0.059495266526937485, 0.018566424027085304, 0.04387154057621956, 0.054677706211805344, -0.026608901098370552, 0.031729795038700104, 0.08757682889699936, -0.021633099764585495, 0.04144270345568657, -0.025642046704888344, 0.012031935155391693, 0.04613283649086952, -0.0273493193089962, -0.0022090221755206585, 0.046132877469062805, 0.007153309881687164, -0.04095515236258507, 0.03852458298206329, 0.018728164955973625, -0.03324544057250023, 0.01856211945414543, 0.01009265799075365, 0.0003969431563746184, -0.009762430563569069, 0.06278369575738907, 0.00882750004529953, 0.03789820522069931, -0.035327132791280746, -0.018837230280041695, -0.03621026128530502, -0.02190023846924305, 0.018522731959819794, -0.02117118239402771, -0.08352851867675781, 0.005366807337850332, -0.06155601143836975, 0.017610106617212296, 0.03397803381085396, 0.012247993610799313, 0.0019394587725400925, 0.010103516280651093, 0.029866911470890045, 0.023590512573719025, 0.014139287173748016, -0.04924546927213669, 0.0101967453956604, 0.07073723524808884, 0.06178585812449455, -0.005487464834004641, 0.07524049282073975, -0.009966216050088406, -0.10661272704601288, -0.011368982493877411, -0.027904311195015907, 0.11011992394924164, 0.0007708658231422305, -0.0014838165370747447, 0.019889282062649727, -0.02613353170454502, 0.008819193579256535, 0.001089064171537757, 0.033030033111572266, -0.01694083958864212, -0.01534521859139204, 0.007599352393299341, -0.0020449140574783087, -0.03656617924571037, 0.0020722723565995693, -0.0014190024230629206, -0.023229286074638367, 0.16486728191375732, -0.03104112297296524, 0.01804439350962639, -0.005494855344295502, 0.028935741633176804, -0.017352338880300522, 0.028461718931794167, -0.016008030623197556, -0.005133362021297216, 0.02953382022678852, 0.022606221958994865, -0.031214436516165733, 0.023548472672700882, -0.06678176671266556, -0.0506204329431057, -0.06396453827619553, 0.0677538588643074, 0.0417502261698246, -0.0067047420889139175, -0.01025195699185133, -0.007375617045909166, 0.020232925191521645, -0.026022829115390778, -0.041280318051576614, -0.016046587377786636, -0.017479775473475456, 0.028981903567910194, 0.007784842513501644, -0.0010392825352028012, -0.009222102351486683, 0.0003623109369073063, -0.025889353826642036, 0.027524007484316826, -0.027775749564170837, 0.009910566732287407, -0.02144443243741989, -0.008407671004533768, 0.009253290481865406, -0.005515203811228275, 0.020170509815216064, 0.03177470713853836, 0.0054661282338202, -0.02581113763153553, -0.02961703948676586, 0.022745830938220024, -0.004079309292137623, -0.012626877054572105, 0.04384428262710571, 0.007094684988260269, -0.026521585881710052, -0.022314567118883133, -0.021157460287213326, 0.012678492814302444, -0.0032175749074667692, 0.010943197645246983, 0.0457882359623909, -0.09093289822340012, -0.004140617325901985, -0.0405520536005497, -0.021588122472167015, -0.06100822985172272, 0.00434318371117115, -0.007781725376844406, -0.0323566310107708, 0.03093528002500534, 0.05599706619977951, -0.013678009621798992, -0.01947423443198204, 0.022561976686120033, -0.018908046185970306, 0.049091190099716187, -0.019837556406855583, 0.019930031150579453, -0.042111463844776154, -0.0562775656580925, -0.053799211978912354, 0.022296616807579994, 0.02172345481812954, -0.02389504760503769, -0.006245301105082035, 0.02925233542919159, -0.04275323823094368, 0.051229264587163925, 0.03369337320327759, 0.02963765524327755, -0.017231808975338936, -0.019723229110240936, -0.00218613026663661, -0.00596383074298501, 0.014062386937439442, -0.03416500613093376, 0.036682579666376114, -0.0006757914088666439, 0.003915059845894575, 0.017443351447582245, -0.03805407136678696, 0.01887303777039051, -0.001454069628380239, 0.03020704723894596, -0.004931644070893526, -0.01396971195936203, -0.0059991078451275826, -0.05137663707137108, -0.029432352632284164, 0.017778947949409485, -0.030966445803642273, 0.030313562601804733, -0.001942880917340517, -0.001385117182508111, 0.035472020506858826, -0.01647980511188507, -0.007057815324515104, 0.024929104372859, 0.002242302754893899, -0.033489979803562164, -0.018771693110466003, 0.03873817250132561, -0.04495556652545929, 0.011362278833985329, -0.056489188224077225, 0.0313723050057888, 0.04540208727121353, 0.003716537728905678, -0.013648361898958683, -0.0028073794674128294, -0.0036564278416335583, -0.004123531747609377, -0.020683592185378075, -0.00915680080652237, -0.07274562120437622, -0.03462470322847366, 0.028845256194472313, -0.02484499290585518, 0.05669154226779938, -0.012846777215600014, -0.01913396641612053]\"\n./train/Rhodesian_ridgeback/n02087394_12174.JPEG,Rhodesian_ridgeback,\"[-0.03086918033659458, 0.024168148636817932, -0.05309091508388519, 0.006514130625873804, 0.03497198596596718, 0.00817420519888401, 0.04406194016337395, -0.04169313237071037, -0.046891532838344574, 0.06751111149787903, -0.04959094524383545, -0.010879363864660263, 0.047751620411872864, 0.010411113500595093, 0.024224381893873215, 0.02484786882996559, -0.06990192085504532, -0.019997481256723404, -0.01791338063776493, -0.0027031535282731056, -0.07807371765375137, -0.008958560414612293, -0.010051419958472252, 0.023789454251527786, -0.02375824749469757, 0.030276093631982803, -0.013596837408840656, -0.000685571925714612, 0.007348744664341211, -0.021469777449965477, 0.025877244770526886, 0.02810506895184517, -0.004018981009721756, -0.0023099593818187714, 0.07212576270103455, 0.03772716969251633, 0.014273272827267647, -0.03982068970799446, -0.051254961639642715, 0.12223758548498154, -0.029030459001660347, -0.014455249533057213, 0.01005676668137312, -0.012648036703467369, 0.004007882438600063, -0.07323451340198517, 0.006782740354537964, 0.003596676280722022, -0.019327053800225258, 0.032696258276700974, -0.0004677400866057724, 0.021713970229029655, 0.020921342074871063, 0.01398865319788456, 0.012189644388854504, 0.039885248988866806, 0.02900977060198784, -0.02441113442182541, -0.022473318502306938, 0.015184286050498486, 0.029485410079360008, -0.01024904940277338, 0.05633985623717308, 0.016964027658104897, 0.024577971547842026, -0.0095626600086689, 0.040596313774585724, 0.0043316129595041275, 0.042583122849464417, -0.054622821509838104, 0.029759332537651062, 0.006114080082625151, -0.0009593348950147629, 0.07552628219127655, -0.033436764031648636, 0.011782105080783367, -0.05483897402882576, 0.019378215074539185, -0.014048170298337936, 0.013212703168392181, 0.026511428877711296, 0.03577524051070213, -0.010725020430982113, 0.009533502161502838, 0.018160030245780945, 0.004683412611484528, 0.021851196885108948, -0.006500596180558205, 0.07239262759685516, 0.014543237164616585, -0.008500747382640839, -0.024587620049715042, -0.5545616149902344, 0.0033189672976732254, -0.04267087206244469, 0.02905740961432457, 0.007314181420952082, 0.047171156853437424, -0.030670909211039543, 0.0959658995270729, 0.007336747366935015, 0.040900975465774536, 0.045615702867507935, -0.0178330410271883, 0.03773640841245651, -0.06090069189667702, -0.027618566527962685, -0.008163182064890862, -0.06269772350788116, 0.037212397903203964, 0.026652880012989044, -0.057051703333854675, 0.030150357633829117, -0.027606485411524773, -0.02186562307178974, -0.042103417217731476, -0.016062233597040176, -0.034016795456409454, 0.03541165590286255, 0.014402925968170166, 0.0056815012358129025, 0.018749946728348732, 0.03228025510907173, -0.029143020510673523, -0.027306679636240005, -0.02713829092681408, -0.017825355753302574, -0.012507667765021324, -0.027902187779545784, -0.019944582134485245, 0.06417407840490341, 0.0059363399632275105, 0.01994732953608036, 0.08226735144853592, -0.0052250525914132595, 0.026378348469734192, 0.01356449443846941, -0.09864018112421036, -0.06536606699228287, 0.009367982856929302, 0.004542903043329716, 0.0540754608809948, -0.022325055673718452, 0.06227540597319603, -0.018691711127758026, 0.05242898687720299, 0.03486095368862152, 0.00819886103272438, -0.06254244595766068, 0.005129646509885788, -0.011927183717489243, 0.014293975196778774, 0.12253255397081375, -0.002495321910828352, -0.05328299105167389, -0.0010853966232389212, 0.004536142572760582, 0.010753737762570381, 0.00930415652692318, -0.025439703837037086, -0.07922166585922241, -0.0018646086100488901, 0.042458176612854004, -0.031200503930449486, -0.01153327152132988, 0.0073826792649924755, 0.05938204005360603, 0.018430523574352264, -0.03811407461762428, -0.018422119319438934, -0.03240660950541496, -0.03548293560743332, -0.004430414643138647, -0.0026067167054861784, 0.03822696581482887, -0.014269864186644554, -0.04941723123192787, 0.012778653763234615, 0.030109498649835587, -0.004525596275925636, 0.015994416549801826, -0.0008788332343101501, 0.013488647527992725, -0.02223745919764042, -0.013419308699667454, 0.013791108503937721, 0.00897969864308834, 0.0033531992230564356, -0.0021993406116962433, 0.013999247923493385, -0.029988689348101616, 0.006661329884082079, 0.011661043390631676, 0.07663145661354065, -0.1275886744260788, 0.018410272896289825, 0.009996375069022179, 0.019706960767507553, -0.03311099484562874, 0.00968179851770401, -0.028543217107653618, -0.034393273293972015, 0.045674849301576614, 0.04245048016309738, 0.017926445230841637, -0.05772166699171066, -0.032887835055589676, -0.037928257137537, 0.010944200679659843, 0.034760598093271255, -0.00013456979650072753, -0.024780260398983955, 0.03792691230773926, -0.0241837240755558, -0.011017478071153164, -0.008532345294952393, 0.03808842599391937, 0.039687611162662506, 0.07059814035892487, -0.0668552815914154, 0.014530175365507603, -0.026241786777973175, -0.009345580823719501, 0.008748007006943226, -0.05985543131828308, -0.01122466940432787, 0.008582774549722672, 0.008793748915195465, -0.014010647311806679, -0.0274956151843071, 0.007313963957130909, 0.012400517240166664, 0.0017268109368160367, -0.01675562560558319, 0.010103924199938774, -0.10187804698944092, -0.015898222103714943, -0.027452684938907623, 0.02073722705245018, 0.0009699968504719436, -0.023005381226539612, -0.016260595992207527, 0.04137668013572693, -0.018475038930773735, -0.02878529578447342, 0.01788189820945263, 0.017488669604063034, 0.001783807179890573, 0.050963595509529114, 0.026377977803349495, -0.015192508697509766, 0.015640346333384514, -0.0048707653768360615, 0.004044670145958662, -0.005566886626183987, -0.03934169188141823, -0.003866204060614109, -0.01612909324467182, 0.012281914241611958, -8.665496716275811e-05, -0.0006222633528523147, 0.045187439769506454, -0.059804294258356094, -0.09628172963857651, -0.012665198184549809, -0.0007282962324097753, 0.016331255435943604, 0.02153019607067108, -0.006208302453160286, 0.08989786356687546, 0.0171514842659235, -0.00023660367878619581, 0.0632479190826416, -0.05120743811130524, -0.014693629927933216, -0.003530708607286215, 0.0341513529419899, 0.032831355929374695, -0.023771770298480988, 0.027441730722784996, -0.000507875403854996, 0.012827443890273571, -0.07310214638710022, -0.004172152373939753, 0.010023392736911774, 0.03352797403931618, 0.009837452322244644, -0.016114607453346252, -0.026155415922403336, 0.03449929878115654, -0.011240758933126926, -0.008873947896063328, -0.007201190106570721, 0.012700080871582031, -0.003876630449667573, 0.0008322513895109296, 0.012883699499070644, 0.049339547753334045, -0.01764332875609398, 0.004570713732391596, -0.06977690756320953, -0.020602677017450333, -0.009185749106109142, 0.027479877695441246, 0.04104778543114662, -0.0495302639901638, 0.029896648600697517, 0.0733310878276825, 0.05580880492925644, 0.012025323696434498, -0.008946011774241924, 0.0477481409907341, 0.08220235258340836, 0.013361995108425617, 0.026905613020062447, -0.037451744079589844, 0.044498737901449203, 0.0073314993642270565, -0.018557893112301826, 0.08615486323833466, 0.05571416765451431, -0.11423735320568085, -0.029839355498552322, 0.042901843786239624, 0.00671578012406826, 1.5768062439747155e-05, -0.029911311343312263, 0.029663756489753723, 0.01775755174458027, -0.040092650800943375, -0.007598749827593565, -0.015460018999874592, 0.021206745877861977, -0.04666876792907715, 0.014887218363583088, -0.0033224362414330244, -0.020020507276058197, 0.009782101027667522, -0.008494746871292591, -0.032388873398303986, 0.05498036369681358, -0.019184989854693413, 0.027552705258131027, 0.006869690492749214, 0.04624404013156891, 0.008825480937957764, 0.010744193568825722, 0.008189376443624496, -0.004722654819488525, 0.03230036795139313, -0.015763266012072563, -0.026067491620779037, 0.034285012632608414, 0.01785019412636757, 0.0014992095530033112, -0.020896684378385544, -0.01615285500884056, -0.04015714302659035, -0.04515786096453667, 0.025957947596907616, 0.02495485357940197, 0.025961004197597504, -0.03139371797442436, 0.006863649468868971, -0.08393827080726624, 0.011834009550511837, -0.0023223257157951593, -0.07150805741548538, 0.04202226176857948, 0.002535005798563361, 0.007231026887893677, 0.004659401718527079, -0.017695056274533272, 0.019931292161345482, 0.027737554162740707, 0.045152805745601654, 0.20776931941509247, -0.04407394304871559, 0.01655980385839939, 0.030449867248535156, 0.016030220314860344, 0.019431201741099358, -0.007509213872253895, -0.025318872183561325, 0.03686373308300972, -0.012389784678816795, 0.00644567608833313, 0.015914855524897575, 0.030161380767822266, -0.04225430265069008, -0.06444475799798965, -0.005442110355943441, 0.0418325737118721, -0.0008086543530225754, 0.01218516007065773, 0.020419906824827194, -0.04339192062616348, 0.008804895915091038, -0.02080981805920601, 0.0036370668094605207, -0.024442186579108238, -0.05487003177404404, -0.06807782500982285, 0.00819520466029644, 0.03316614031791687, 0.015080803073942661, -0.010217742994427681, -0.028945012018084526, 0.06997557729482651, -0.00587481539696455, 0.004052473697811365, 0.03187553212046623, -0.060307662934064865, -0.008728515356779099, -0.01459675282239914, -0.004245666787028313, -0.017512699589133263, 0.0322406142950058, 0.02157110720872879, -0.0795174241065979, 0.02219199761748314, -0.05102706328034401, -0.015825260430574417, 0.018786607310175896, 0.0005769160925410688, -0.05687011033296585, 0.006057250779122114, -0.01934223249554634, 0.02805439569056034, 0.0115060368552804, 0.002311351243406534, 0.042828042060136795, 0.02300306037068367, -0.05632317066192627, -0.01907169818878174, -0.03768955543637276, -0.06738924980163574, -3.516851575113833e-05, 0.05094895139336586, 0.02522970549762249, -0.022420886904001236, 0.03884052857756615, -0.00863982830196619, 0.06084766611456871, 0.034093257039785385, -0.020049620419740677, 0.0317535400390625, 0.018615512177348137, -0.06706502288579941, -0.007101304829120636, -0.06420230865478516, -0.015210979618132114, 0.0047750286757946014, -0.0012403319124132395, -0.003637352492660284, -0.0892806425690651, 0.026847103610634804, -0.02101978287100792, -0.007463699672371149, 0.03769724816083908, 0.02557559497654438, -0.00952755194157362, -0.07215117663145065, 0.009772149845957756, 0.02003059908747673, 0.015777869150042534, 0.01652851328253746, 0.02440200187265873, -0.019062282517552376, 0.020421089604496956, 0.0629846602678299, -0.020681986585259438, 0.03945184871554375, -0.016545452177524567, 0.04522128775715828, 0.017452966421842575, 0.004518025554716587, -0.02423085831105709, -0.03697263449430466, -0.03157258778810501, 0.030664166435599327, -0.003164798952639103, -0.014002247713506222, 0.03190823644399643, -0.01183986198157072, 0.026814309880137444, -0.01970338076353073, -0.008670587092638016, -0.006495154462754726, -0.03930578753352165, -0.07284470647573471, -0.03334931656718254, 0.06961982697248459, -0.05289515107870102, 0.04970262572169304, -0.022120626643300056, 0.04995162785053253, 0.07895231992006302, -0.037347108125686646, 0.020965533331036568, -0.09566529840230942, -0.04811815172433853, 0.0011132550425827503, -0.013706407509744167, 0.01452195830643177, -0.006706167943775654, -0.0628184899687767, -0.02206309884786606, -0.039974313229322433, 0.06240648031234741, 0.04189047962427139, 0.020106319338083267]\"\n./train/Rhodesian_ridgeback/n02087394_239.JPEG,Rhodesian_ridgeback,\"[-0.02468119189143181, 0.007838333025574684, -0.009321535006165504, 0.036771468818187714, 0.008914920501410961, -0.05654223635792732, -0.006102464161813259, 0.007773431017994881, -0.024319136515259743, 0.022314956411719322, -0.03308839350938797, -0.010141417384147644, -0.020755257457494736, -0.0033387537114322186, 0.033640168607234955, 0.0005637580179609358, -0.0001393196580465883, 0.019807590171694756, 0.008322685956954956, -0.0410686731338501, -0.0035929034929722548, 0.010888820514082909, -0.014872225932776928, 0.0203776303678751, -1.2863358278991655e-05, -0.0280766561627388, -0.007979374378919601, 0.006366834510117769, -0.004978151060640812, -0.010800421237945557, 0.019570836797356606, 0.03872976452112198, -0.041977282613515854, -0.0419432558119297, -0.02761465683579445, -0.014535229653120041, -0.011720826849341393, -0.014270075596868992, -0.024780986830592155, 0.14215707778930664, -0.007114018779247999, -0.013286150060594082, 0.0016217271331697702, -0.03526578098535538, -0.020039331167936325, -0.029935559257864952, 0.004931064788252115, 0.01675478368997574, -0.018991803750395775, 0.012681043706834316, 0.03058873675763607, 0.00801934115588665, -0.012936011888086796, 0.022426774725317955, 0.046450987458229065, 0.015687787905335426, 0.06761574745178223, 0.011801724322140217, -0.041993409395217896, -0.05269629508256912, 0.00032143082353286445, 0.02302200347185135, 0.024059705436229706, 0.05401613190770149, -0.01351971086114645, -0.024896962568163872, -0.005530844442546368, 0.10181241482496262, -0.01957712695002556, -0.023142367601394653, 0.025810981169342995, 0.013507508672773838, -0.003916857298463583, -0.015817787498235703, 0.00988065917044878, 0.016837233677506447, 0.015358831733465195, -0.010739649645984173, 0.013234660029411316, -0.027737928554415703, 0.004781038500368595, 0.007999047636985779, -0.03135266155004501, -0.03354266285896301, -0.0012720334343612194, 0.020518776029348373, 0.09220007061958313, -0.030422868207097054, 0.0543857105076313, -0.0418122261762619, -0.037442583590745926, -0.061546362936496735, -0.6501213312149048, 0.022301798686385155, -0.025934619829058647, 0.040657591074705124, 0.05378061532974243, -0.0022877445444464684, -0.007527282927185297, 0.09553909301757812, -0.02515603043138981, -0.013413875363767147, 0.0036533824168145657, -0.015101974830031395, 0.03826761990785599, -0.011173476465046406, 0.0022404249757528305, -0.013632374815642834, 0.022579777985811234, -0.023826129734516144, -0.010196654126048088, -0.0597977489233017, -0.013992187567055225, 0.009885583072900772, 0.004004133399575949, -0.05654512345790863, -0.014864567667245865, 0.005350994411855936, 0.010243857279419899, -0.0015507909702137113, 0.010246112011373043, -0.01230231486260891, 0.0457824170589447, 0.04446909949183464, -0.019008956849575043, -0.03169399872422218, -0.02533993124961853, 0.010172604583203793, 0.014679980464279652, -0.04057670384645462, 0.018808910623192787, 0.0007133653853088617, -0.04884018748998642, 0.08445889502763748, -0.06086498498916626, 0.027913831174373627, 0.019015690311789513, -0.06450024247169495, -0.015614936128258705, 0.023080473765730858, 0.014563199132680893, -0.026221908628940582, 0.011975092813372612, -0.022906729951500893, 0.0007936768233776093, 0.009073363617062569, 0.0017619223799556494, -0.027696704491972923, 0.0018413690850138664, 0.03241008520126343, -0.036928657442331314, 0.030879056081175804, 0.02963702566921711, -0.003297810908406973, -0.03679700195789337, 0.02488028258085251, 0.02158745750784874, -0.014170011505484581, 0.01063544675707817, -0.0006279160152189434, -0.008487694896757603, 0.0008398566278629005, 0.0041219634003937244, 0.014655636623501778, 0.0003427859046496451, -0.05145804584026337, 0.017563682049512863, 0.033982377499341965, 0.034681741148233414, 0.004829802084714174, -0.01834987848997116, 0.01409748662263155, 0.03544004261493683, -0.030189096927642822, -0.024860579520463943, -0.06905528903007507, 0.05968893691897392, 0.03877520561218262, -0.01272260956466198, 0.01816270686686039, -0.007050622254610062, -0.028414582833647728, 0.02577079087495804, -0.059728726744651794, -0.017860034480690956, -0.0009455466060899198, -0.019822947680950165, -0.00025199592346325517, -0.014156396500766277, 0.010806229896843433, 0.03847639262676239, -0.0049263713881373405, -0.027567358687520027, 0.015624327585101128, -0.014938297681510448, -0.0072091687470674515, -0.0033906097523868084, -0.009704941883683205, -0.13921111822128296, -0.05312728509306908, 0.020584961399435997, 0.021656803786754608, -0.01348191499710083, 0.05266626924276352, -0.018054606392979622, -0.0386742539703846, -0.0038458318449556828, -0.04035518690943718, -0.00462913466617465, 0.06421037763357162, -0.05988965183496475, 0.018750889226794243, 0.021898280829191208, 0.04484326019883156, 0.0031342143192887306, -0.02493736892938614, -0.027436206117272377, -0.01803595758974552, 0.09094663709402084, -0.006589759141206741, 0.05056225135922432, 0.02483294904232025, -0.03571039065718651, -0.010231412947177887, -0.006969031412154436, -0.029624152928590775, -0.007857137359678745, -0.031322889029979706, 0.0005282396450638771, -0.001058247871696949, -0.004382142797112465, -0.026569847017526627, -0.014727926813066006, 0.02189406007528305, 0.011824843473732471, -0.05677145719528198, -0.034665752202272415, -0.02232607640326023, 0.012651781551539898, 0.005065899342298508, 0.017312675714492798, 0.012285856530070305, 0.016742141917347908, 0.0030492418445646763, -0.010458918288350105, 0.053715646266937256, 0.06383255869150162, -0.07194673269987106, -0.007455969695001841, 0.04890238121151924, 0.03673087805509567, -0.014292404986917973, -0.019763929769396782, -0.008412498049438, -0.00885831005871296, -0.01654713600873947, 0.015412956476211548, -0.004596931394189596, -0.07834620773792267, -0.02655874192714691, -0.04333488643169403, 0.018799372017383575, 0.004709822591394186, 0.03790416568517685, -0.0010122753446921706, -0.024596817791461945, -0.029659347608685493, 0.05035508796572685, -0.017479926347732544, 0.01266385242342949, 0.00773279694840312, 0.03458774462342262, 0.024527302011847496, -0.035331450402736664, 0.020039960741996765, -0.0030770041048526764, -0.0040705581195652485, 0.019726833328604698, -0.017480770125985146, -0.004277363419532776, -0.012574712745845318, 0.016914399340748787, -0.033865973353385925, -0.018922461196780205, 0.009299551136791706, 0.044207215309143066, -0.1391516774892807, 0.017852826043963432, 0.005613981280475855, 0.024919459596276283, 0.017346957698464394, 0.010803911834955215, 0.015672339126467705, -0.012983490712940693, -0.02204972691833973, 0.006798188202083111, 0.031913548707962036, 0.0017669423250481486, 0.02234557457268238, 0.017055662348866463, -0.005098490975797176, -0.013861029408872128, -0.013973517343401909, 0.009761188179254532, 0.03719603642821312, 0.00040045735659077764, -0.015015320852398872, 0.05241014063358307, -0.010407719761133194, 0.035446614027023315, -0.016320660710334778, 0.05658811703324318, 0.08431367576122284, 0.022797076031565666, 0.006643847096711397, -0.005808996502310038, 0.05041789636015892, 0.04288984462618828, -0.028446044772863388, -0.034504905343055725, 0.0260367039591074, 0.061052318662405014, -0.025448208674788475, 0.022344321012496948, 0.003635099856182933, 0.002954852767288685, -0.01049141027033329, 0.03717251867055893, -0.0014858319191262126, -0.0035116076469421387, -0.01795385405421257, 0.0018281119409948587, 0.00018976966384798288, -0.05639205127954483, 0.0036828976590186357, 0.014799575321376324, -0.01233104057610035, 0.021892936900258064, -0.01455322839319706, -0.014603898860514164, -0.0008000044617801905, -0.05940721929073334, 0.02355768531560898, -0.008679759688675404, 0.05344017967581749, -0.00569763733074069, 0.011562683619558811, 0.03846120834350586, -0.030982736498117447, -0.004149939864873886, -0.11287710815668106, 0.008174050599336624, 0.0042945328168570995, 0.01681615225970745, -0.016093961894512177, 0.02565639652311802, 0.021853500977158546, -0.08089493215084076, 0.01681363396346569, 0.04290187731385231, -0.04269524663686752, 0.013504517264664173, -0.015146671794354916, 0.01131061464548111, 0.032765962183475494, 0.02904626727104187, -0.004948735702782869, -0.08425995707511902, 0.016489028930664062, -0.006451059598475695, 0.006651907227933407, 0.00554331298917532, 0.0009166753734461963, 0.0029076440259814262, -0.018803194165229797, -0.016801871359348297, 0.18798814713954926, 0.03598644211888313, -0.044466570019721985, 0.027726532891392708, 0.014685244299471378, -0.06263291835784912, -0.0035613677464425564, -0.017361339181661606, 0.03338950127363205, -0.015994707122445107, 0.016846174374222755, 0.029103459790349007, 0.03681737184524536, -0.0965530127286911, 0.01318363007158041, -0.040157195180654526, 0.005985667929053307, -0.04388689622282982, -0.03876923397183418, 0.0007065713289193809, -0.0070512741804122925, 0.003924395889043808, -0.07243485003709793, -0.014090355485677719, -0.02210092544555664, 0.02560214325785637, 0.031288065016269684, -0.00538196787238121, -0.014959057793021202, -0.0009111134568229318, 0.015311118215322495, -0.021618500351905823, 0.061564259231090546, -0.02420208416879177, 0.10680551826953888, -0.014599322341382504, -0.020831558853387833, -0.008304239250719547, -0.006732345093041658, -0.008068769238889217, -0.012885243631899357, 0.006287217140197754, -0.0003183972730766982, -0.0583205372095108, 0.0051317643374204636, 0.010785670951008797, -0.004859624430537224, -0.0062844837084412575, 0.021874090656638145, 0.00548176234588027, -0.04820827394723892, -0.03845154121518135, 0.02498508058488369, 0.013427319005131721, -0.004496804438531399, 0.02174060046672821, -0.011864510364830494, 0.01590186171233654, -0.0007730001234449446, -0.028637932613492012, -0.0489724837243557, 0.002883836394175887, -0.01345914974808693, -0.003469955874606967, 0.005895473062992096, -0.00442151352763176, 0.002935044700279832, -0.012333492748439312, 0.009404825046658516, -0.011504225432872772, 0.017153456807136536, -0.0035069051664322615, -0.01036550011485815, -0.028856823220849037, -0.04536672309041023, -0.016447557136416435, -0.0006375397206284106, -0.0010761324083432555, -0.021652016788721085, -0.035683151334524155, 0.018284743651747704, 0.01790144294500351, 0.006737259216606617, 0.05343909189105034, 0.02776646427810192, -0.012868975289165974, -0.0019910295959562063, -0.013911601155996323, 0.05834371596574783, 0.02413013018667698, -0.07296336442232132, 0.02469782903790474, -0.05118692293763161, -0.031988706439733505, 0.03322182595729828, -0.007122768089175224, -0.010436310432851315, -0.05542847514152527, -0.028351252898573875, -0.038721129298210144, -0.0024519693106412888, -0.020693141967058182, -0.055306702852249146, -0.06378260999917984, 0.00422519538551569, 0.031236669048666954, 0.013281511142849922, -0.0019389573717489839, -0.02453329786658287, 0.0010274869855493307, -0.042573291808366776, -0.02874159999191761, 0.0009167025564238429, 0.002118397271260619, 0.003367598867043853, -0.06564156711101532, 0.035959094762802124, -0.04756713658571243, 0.015922630205750465, -0.0278417207300663, 0.00678986543789506, 0.054020076990127563, -0.017182517796754837, 0.0042760372161865234, -0.0590076819062233, -0.024216467514634132, -0.03177454695105553, -0.015308823436498642, 0.006049538031220436, 0.01811477355659008, -0.06326744705438614, 0.0038730488158762455, -0.06829989701509476, 0.07792995125055313, -0.03273272141814232, -0.02447505295276642]\"\n./train/Rhodesian_ridgeback/n02087394_10810.JPEG,Rhodesian_ridgeback,\"[0.007226224988698959, 0.013921394012868404, -0.0006083652260713279, -0.009141561575233936, 0.014924641698598862, -0.032617732882499695, 0.05528629571199417, -0.0019942892249673605, 0.021932752802968025, 0.013182957656681538, -0.04723135381937027, 0.04242211580276489, 0.023192651569843292, 0.007664789445698261, 0.006145045626908541, 0.051220040768384933, 0.13021720945835114, 0.00039335686597041786, 0.016790922731161118, 0.0010965028777718544, -0.0234982892870903, 0.026545315980911255, 0.055852483958005905, -0.008405949920415878, -0.04023875296115875, 0.01798396185040474, 0.011373529210686684, -0.011814883910119534, 0.015672951936721802, 0.006600991822779179, 0.05088141933083534, 0.025444908067584038, 0.03733747825026512, 0.013935666531324387, 0.012255796231329441, -0.0006596525781787932, -0.007653084117919207, -0.03798949345946312, -0.027989769354462624, 0.12435315549373627, -0.03150155395269394, 0.004731158725917339, 0.029539303854107857, -0.023474205285310745, -0.012219378724694252, -0.08646795153617859, -0.044688742607831955, 0.0534282810986042, 0.04631976783275604, 0.039267610758543015, 0.01967167668044567, -0.013103227131068707, 0.018278364092111588, 0.03500301390886307, 0.06082017719745636, 0.012553909793496132, 0.048980962485075, 0.03158130869269371, -0.03840288519859314, -0.04446346312761307, 0.17722110450267792, 0.027917034924030304, 0.02152416668832302, -0.038459599018096924, -0.0075683556497097015, -0.00815240666270256, 0.03850669413805008, -0.008448012173175812, 0.0012778433738276362, 0.005741799715906382, -0.015558337792754173, -0.011286594904959202, 0.04246869310736656, 0.006280780304223299, -0.03950400650501251, -0.017629727721214294, -0.0575605146586895, 0.020188966765999794, -0.022279683500528336, 0.006370397750288248, -0.006667206063866615, 0.008772799745202065, 0.009369362145662308, -0.014963049441576004, 0.07057163119316101, -0.01664581149816513, -0.02880759909749031, 0.0015096700517460704, 0.05272992327809334, 0.002023320645093918, -0.0210234634578228, -0.030112456530332565, -0.6025317907333374, 0.09046626836061478, -0.015554008074104786, -0.007096264977008104, 0.05395956709980965, 0.007895967923104763, -0.08783115446567535, 0.0791180208325386, -0.023639995604753494, 0.0006516786525025964, -0.008246852084994316, -0.015323447063565254, 0.045885760337114334, -0.017338061705231667, -0.0735139548778534, 0.009826483204960823, -0.024455459788441658, -0.019157221540808678, -0.008904452435672283, 0.017712559551000595, -0.004926105495542288, 0.021708497777581215, -0.031148111447691917, -0.0213975477963686, 0.020290061831474304, -0.027231333777308464, 0.03205057233572006, -0.0024217937607318163, 0.01477925106883049, -0.05014393478631973, -0.006875942461192608, 0.02668091468513012, -0.003903868142515421, 0.018879849463701248, -0.01005061250180006, -0.012624022550880909, -0.006230880040675402, -0.03012533113360405, 0.05827001482248306, -0.06968551129102707, 0.02136661671102047, 0.07877807319164276, -0.03203441575169563, 0.015561556443572044, 0.04669317975640297, -0.03394497185945511, 0.015759967267513275, -0.02417856454849243, 0.005834169685840607, 0.03380422294139862, -0.010642275214195251, 0.030509304255247116, 0.005687872879207134, 0.012360043823719025, -0.0017846196424216032, 0.03660126402974129, -0.034376099705696106, -0.012331848032772541, -0.031821418553590775, 0.0004641480918508023, 0.052943985909223557, 0.019568460062146187, -0.08140404522418976, 0.0045487103052437305, 0.002575105521827936, 0.006664950400590897, 0.02878100983798504, 0.005665237549692392, -0.02954982779920101, 0.01742502488195896, 0.010065543465316296, -0.0041378941386938095, 0.04638691991567612, -0.015262826345860958, -0.03973677381873131, -0.010790016502141953, -0.0009175380109809339, 0.006646328140050173, 0.00777402613312006, -0.010992025956511497, 0.04706624895334244, 0.01005326583981514, 0.013016900978982449, 0.0348622091114521, 0.06846308708190918, 0.0018368292367085814, 0.04465991631150246, -0.032638855278491974, -0.0031431587412953377, -0.042292725294828415, 0.027373861521482468, -0.028277389705181122, -0.0002715520095080137, -0.04381906986236572, -0.0032604290172457695, -0.001556086353957653, -0.023785924538969994, 0.005992539692670107, 0.001572593697346747, -0.025776831433176994, -0.025045501068234444, -0.022719597443938255, 0.002348375739529729, 0.01618754304945469, 0.02249632216989994, -0.008339092135429382, -0.05684598907828331, -0.04726618528366089, -0.06146125867962837, -0.00036794040352106094, 0.032360948622226715, -0.02382992021739483, -0.009007182903587818, -0.036249443888664246, -0.011575340293347836, -0.013292742893099785, 0.05046069249510765, 0.01735234446823597, -0.0006363015854731202, -0.024716444313526154, 0.019284285604953766, 0.034095413982868195, -0.014568585902452469, 0.005953826941549778, -0.016295388340950012, 0.03589961677789688, 0.049602095037698746, -0.04033295065164566, 0.04907071962952614, 0.09381253272294998, 0.03550494834780693, -0.02678670547902584, -0.023180365562438965, -0.02200399525463581, 0.0018673182930797338, -0.014303622767329216, 0.004415139555931091, -0.030444633215665817, 0.03482968360185623, -0.0050806161016225815, 0.007869268767535686, 0.018791107460856438, 0.011131917126476765, -0.046129874885082245, 0.029567822813987732, -0.02358320727944374, -0.014284403994679451, -0.03453037142753601, 0.013958723284304142, -0.02144128456711769, 0.06052717939019203, -0.033789247274398804, 0.020500343292951584, 0.020214896649122238, -0.005627268459647894, -0.02746857888996601, 0.022583795711398125, 0.06052200123667717, -6.975634278205689e-06, 0.019770972430706024, 0.009292942471802235, 0.027578234672546387, 0.008549901656806469, -0.016204843297600746, -0.01487048901617527, -0.01594327576458454, 0.04994189366698265, -0.06029714271426201, -0.025575077161192894, 0.03311505168676376, -0.00023253522522281855, -0.04421316459774971, -0.028778046369552612, 0.012345883063971996, -0.014330090954899788, 0.0032340281177312136, 0.02172153815627098, 0.02517639845609665, -0.03302193433046341, 0.0059682102873921394, 0.026885686442255974, -0.0278194397687912, 0.03807428851723671, 0.015620389021933079, 0.018164657056331635, 0.02358824759721756, -0.01776832528412342, 0.03747398778796196, -0.02372162416577339, 0.05405639857053757, -0.0017165230819955468, -0.0059245736338198185, 0.02194897085428238, -0.0006317595252767205, 0.10539280623197556, 0.030298257246613503, -0.02664991468191147, 0.03289765492081642, -0.029761267825961113, 0.019793733954429626, -0.024885986000299454, 0.02833898365497589, -0.027718978002667427, 0.009303677827119827, 0.018256833776831627, 0.00991124752908945, -0.029901746660470963, 0.014097912237048149, -0.002158955205231905, -0.017505571246147156, 0.025585629045963287, 0.010781132616102695, 0.038400691002607346, -0.030488256365060806, -0.037327203899621964, 0.025313973426818848, 0.031325340270996094, 0.0020143981091678143, -0.010020873509347439, 0.050595588982105255, 0.07864309102296829, -0.04148445278406143, -0.024744810536503792, -0.001566624385304749, 0.007565822917968035, 0.04346043989062309, 0.005387798883020878, -0.07991943508386612, 0.035660162568092346, 0.04074571281671524, -0.04003284126520157, 0.015989547595381737, 0.025920549407601357, 0.03905202075839043, -0.008540905080735683, 0.037719693034887314, 0.0207842867821455, 0.0032253884710371494, -0.004984131082892418, -0.048183050006628036, 0.04134422540664673, -0.032508086413145065, 0.034137703478336334, -0.009008499793708324, 0.002735558431595564, 0.02348516695201397, 0.04092741012573242, -0.04783264175057411, 0.03165965527296066, 0.006873239763081074, 0.012854418717324734, 0.01750885508954525, 0.05059048905968666, 0.009289621375501156, 0.056427016854286194, 0.010079700499773026, -0.019774330779910088, -0.007108082063496113, -0.05520900338888168, -0.000350261980202049, 0.031082697212696075, 0.00027991124079562724, 0.02616637758910656, -0.017918359488248825, -0.0037497475277632475, -0.11623793095350266, -0.008468418382108212, 0.013518291525542736, 0.054946139454841614, 0.013882145285606384, -0.0013332647504284978, -0.03634705767035484, -0.09283868223428726, 0.007761828135699034, 0.03383060172200203, -0.13107912242412567, 0.010862914845347404, 0.017068378627300262, -0.01932012103497982, 0.009703642688691616, -0.011679118499159813, -0.010983973741531372, -0.02900022827088833, 0.01930386573076248, 0.15592201054096222, -0.0088090430945158, 0.013187882490456104, 0.006411551032215357, 0.009338581003248692, 0.0772821307182312, 0.0021355634089559317, 0.04098280146718025, 0.039013903588056564, 0.03970248997211456, -0.0362837091088295, -0.0025180024094879627, 0.038046449422836304, 0.005310803186148405, -0.03544681519269943, -0.021324828267097473, 0.00045830526505596936, -0.036919768899679184, -0.017637303099036217, -0.014549439772963524, 0.020341984927654266, -0.04793135076761246, -0.042646005749702454, -0.027828432619571686, -0.030444806441664696, -0.022175338119268417, 0.03423888608813286, 0.04470581188797951, 0.019717717543244362, -0.03277499973773956, 0.03172837570309639, -0.04801201820373535, 0.023982325568795204, -0.05461293086409569, 0.0686824768781662, -0.015262192115187645, 0.02296433411538601, -0.007452025078237057, -0.0071670799516141415, 0.027783498167991638, -0.02378123812377453, -0.04114565625786781, 0.06602665036916733, -0.08918885886669159, -0.011414140462875366, 0.006910861004143953, -0.017581529915332794, 0.04265192151069641, -0.006679933052510023, 0.0005930094630457461, 0.0018236541654914618, 0.017484404146671295, -0.0812457725405693, -0.03927332162857056, -0.004229821730405092, 0.06012742593884468, 0.09503975510597229, -0.01653769053518772, 0.022348415106534958, -0.008157886564731598, 0.004823175724595785, 0.04037284478545189, 0.01242245826870203, 0.005530125927180052, -0.009360638447105885, 0.04850120097398758, -0.03942335769534111, -0.008850650861859322, 0.0017608106136322021, 0.02159726805984974, 0.029813431203365326, 0.04443274810910225, -0.029494069516658783, -0.01431019976735115, 0.022968607023358345, -0.004557475913316011, 0.016451450064778328, -0.022550800815224648, -0.023702386766672134, -0.00767878582701087, 0.06757336109876633, 0.021706337109208107, -0.00957897212356329, -0.004645687062293291, 0.058239150792360306, -0.0016145291738212109, -0.003157577943056822, 0.059160664677619934, -0.02493821457028389, 0.028708890080451965, -0.022162050008773804, -0.016104668378829956, -0.04646095260977745, -0.022110985592007637, 0.10325073450803757, -0.039289526641368866, 0.013128986582159996, -0.035218462347984314, -0.0039042900316417217, -0.013764727860689163, 0.0016802630852907896, -0.012944351881742477, -0.011330163106322289, -0.009682339616119862, -0.010197073221206665, -0.04588603228330612, 0.021185457706451416, 0.02849634177982807, 0.007573490496724844, -0.008708823472261429, 0.009174525737762451, -0.03972255438566208, 0.005314575973898172, -0.022888651117682457, -0.029660511761903763, -0.016558628529310226, 0.04848957434296608, -0.02906486578285694, 0.02170192264020443, -0.03615400940179825, 0.022589467465877533, 0.07509852945804596, 0.012858596630394459, 0.010565542615950108, -0.05896903574466705, -0.006168900523334742, 0.0006262952229008079, -0.016750501468777657, -0.04270175099372864, 0.010386757552623749, -0.0468684621155262, 0.008214878849685192, -0.012789204716682434, 0.033028293401002884, -0.009277735836803913, -0.004368272610008717]\"\n./train/Rhodesian_ridgeback/n02087394_5664.JPEG,Rhodesian_ridgeback,\"[-0.02899125963449478, 0.03317302092909813, -0.0056635173968970776, 0.051880862563848495, 0.020769653841853142, -0.06420018523931503, 0.009078173898160458, 0.01534159667789936, -0.02136036567389965, 0.009404926560819149, -0.02849351242184639, -0.021982558071613312, -0.0009343514684587717, -0.019103670492768288, 0.020693626254796982, 0.006080609746277332, -0.047292035073041916, 0.0441165454685688, 0.0007503512315452099, -0.02591431327164173, -0.030626608058810234, -0.0055090212263166904, 0.024271203204989433, 0.034598175436258316, -0.0060048652812838554, -0.010374167002737522, -0.028979185968637466, -0.02509286440908909, -0.012571495026350021, -0.0015516109997406602, 0.004989545326679945, 0.0153352627530694, -0.004781673196703196, -0.02917875163257122, -0.021997319534420967, -0.0018986407667398453, 0.0015051111113280058, -0.02113638073205948, -0.014559620060026646, 0.08158941566944122, -0.0497429296374321, 0.015013061463832855, -0.0050403401255607605, -0.000431773834861815, -0.005014166235923767, -0.08234797418117523, 0.009571998380124569, -0.021019134670495987, 0.027435699477791786, 0.015013981610536575, 0.012391946278512478, 0.00021641621424350888, -0.00034203039831481874, 0.01583845540881157, 0.02525361441075802, 0.027804799377918243, 0.045331817120313644, 0.017620006576180458, -0.018305959179997444, -0.0025042137131094933, -0.027067003771662712, 0.0005499146645888686, 0.04426385462284088, 0.0361085869371891, -0.017168788239359856, -0.0139418113976717, 0.05973569303750992, 0.09564018994569778, -0.0023968724999576807, -0.017233440652489662, 0.01907203532755375, 0.021845199167728424, 0.009419302456080914, -0.005755740217864513, -0.002473371336236596, -0.004112685564905405, 0.007018249947577715, -0.017793728038668633, 0.01807456836104393, -0.0044454303570091724, -0.024624042212963104, 0.00977333728224039, -0.030791286379098892, -0.00645156716927886, 0.0010398293379694223, 0.03774317353963852, 0.12020669132471085, -0.023105740547180176, 0.017054444178938866, -0.012883668765425682, -0.005070478655397892, -0.0218976978212595, -0.6687414646148682, 0.026382936164736748, -0.0033923331648111343, 0.03130587190389633, -0.0025204881094396114, 0.021614758297801018, -0.03985346481204033, 0.039742324501276016, -0.026139583438634872, 0.007673740852624178, 0.0005516718374565244, 0.007009470835328102, 0.061289429664611816, -0.01980026811361313, -0.01707221008837223, -0.01189662516117096, 0.0335712656378746, -0.023798270151019096, -0.014213915914297104, -0.0744561105966568, 0.0005315548041835427, -0.032933589071035385, -0.010645320639014244, -0.052195701748132706, 0.0013187958393245935, -0.009622400626540184, 0.03893904387950897, -0.00990702398121357, -0.005194651894271374, -0.004412974696606398, 0.05449303239583969, -0.009056542068719864, -0.01677851192653179, -0.043453242629766464, 0.015695294365286827, 0.022366924211382866, -0.010561501607298851, -0.016204416751861572, 0.03216039761900902, 0.0067282323725521564, 0.008623975329101086, 0.0830380842089653, -0.0476309172809124, 0.03123825415968895, 0.04469377174973488, -0.03141419589519501, -0.014686837792396545, 0.032261237502098083, 0.026554079726338387, -0.0021584047935903072, -0.004658900201320648, 0.019859949126839638, -0.01283192541450262, 0.035814572125673294, 0.005516296252608299, 0.01182579156011343, -0.0001253167138202116, 0.03563090041279793, -0.029903851449489594, 0.01290950644761324, -0.011912277899682522, -0.01621834747493267, 0.0007000274490565062, 0.017712727189064026, 0.00047010331763885915, -0.024272233247756958, 0.029620664194226265, 0.002198748756200075, -0.0056657628156244755, 0.005117048509418964, 0.0210663340985775, 0.024727363139390945, 0.0088590607047081, -0.04946642369031906, -0.034177228808403015, 0.04603486508131027, 0.025594443082809448, 0.003979829140007496, 0.004685498308390379, 0.03142007440328598, 0.03714568167924881, -0.0020953950006514788, -0.007560182828456163, -0.020925933495163918, 0.062040749937295914, 0.026691477745771408, -0.004299047868698835, 0.009044292382895947, -0.028917819261550903, -0.037869539111852646, 0.01253444142639637, -0.04090210795402527, 0.023598916828632355, 0.0052816360257565975, 0.028542501851916313, 0.004850335419178009, -0.0015500924782827497, 0.02110716514289379, 0.012287060730159283, -0.008800851181149483, -0.016656411811709404, 0.014476132579147816, -0.038900766521692276, 0.009464207105338573, -0.018827414140105247, -0.004445016849786043, -0.13830652832984924, -0.06870057433843613, 0.01196067314594984, 0.044193416833877563, 0.01390149723738432, 0.03321501985192299, -0.020122529938817024, -0.029451223090291023, -0.012480824254453182, -0.03196804225444794, -0.005488364025950432, 0.06113226339221001, -0.030015675351023674, 0.054348837584257126, 0.019695015624165535, 0.006325938738882542, -0.022043215110898018, -0.009563909843564034, -0.0022671918850392103, -0.00022107336553744972, 0.10860148072242737, -0.02547561377286911, 0.03664178401231766, 0.054123785346746445, -0.01934310421347618, -0.02711808867752552, -0.006958452984690666, -0.017772728577256203, -0.0060814921744167805, -0.036247462034225464, 0.020515060052275658, -0.003074157750234008, -0.013314420357346535, -0.000990789383649826, 0.00798744149506092, 0.05230648070573807, 0.0023875883780419827, -0.08806008100509644, -0.012066343799233437, -0.01366499438881874, 0.036085933446884155, 0.003130603116005659, 0.016109993681311607, 0.04860995337367058, 0.008369076997041702, -0.04390409588813782, -0.018928799778223038, 0.06673108786344528, 0.047999706119298935, -0.06254883110523224, -0.0025205144193023443, 0.053391233086586, 0.02455795556306839, 0.03976339101791382, -0.0124595295637846, 0.006803099066019058, -0.003811528906226158, -0.017130183055996895, 0.0025536478497087955, 1.1099989023932721e-05, -0.08441822975873947, -0.020321274176239967, -0.03725282847881317, 0.01639149896800518, 0.010954436846077442, -0.02547464706003666, 0.016374310478568077, -0.01771024614572525, -0.017406029626727104, 0.014631487429141998, -0.010482391342520714, 0.017377745360136032, -0.012861530296504498, 0.004589062184095383, 0.05949326604604721, -0.01478650700300932, 0.008377167396247387, -0.013352613896131516, -0.012098685838282108, -0.019996564835309982, -0.017609180882573128, 0.0021491076331585646, 0.004550434183329344, -0.009235282428562641, -0.04194963350892067, 0.010917898267507553, 0.0045678988099098206, 0.005227130372077227, -0.1707666516304016, 0.0040830327197909355, -0.019079284742474556, 0.005045165307819843, 0.023809609934687614, -0.0017692982219159603, -0.04096761345863342, 0.010906202718615532, -0.004705298691987991, 0.00032793378341011703, 0.027692480012774467, 0.005507953930646181, 0.01916452683508396, 0.005283137783408165, -0.01802179031074047, -0.01575501635670662, -0.018261754885315895, -0.012666094116866589, 0.050518978387117386, -0.008324157446622849, -0.03819156065583229, 0.030769342556595802, 0.020657235756516457, -0.009159449487924576, -0.011455385014414787, 0.056267257779836655, 0.08289042860269547, 0.001709852833300829, -0.0007173172780312598, -0.015731848776340485, 0.05644689500331879, 0.040269382297992706, -0.034240495413541794, -0.06975814700126648, 0.041663821786642075, 0.062407638877630234, -0.05071653053164482, 0.034957706928253174, 0.04427885264158249, 0.007310608867555857, -0.009548316709697247, 0.03504781424999237, -0.019467880949378014, 0.0022904789075255394, -0.014706185087561607, -0.003187738126143813, 0.0185844749212265, -0.05407913774251938, 0.016787603497505188, -0.003495751181617379, 0.03519802168011665, 0.012059365399181843, 0.02347663603723049, -0.020031800493597984, -0.0028405545745044947, -0.0662422925233841, -0.0020065666176378727, 0.010300529189407825, 0.025752563029527664, -0.0024913260713219643, -0.005373949185013771, 0.05000823363661766, -0.05659361183643341, -0.009565966203808784, -0.06887227296829224, 0.010844958946108818, -0.0029021224472671747, 0.02431466616690159, -0.006606523413211107, -0.008993360213935375, -0.012151696719229221, -0.04203194007277489, 0.024523591622710228, 0.0388193316757679, -0.005334748420864344, 0.013638350181281567, 0.010461137630045414, 0.028602086007595062, 0.011249208822846413, 0.023059260100126266, -0.007460279855877161, -0.04306686297059059, -0.005131469573825598, -0.04031535983085632, 0.03248302638530731, 0.019335610792040825, 0.027179578319191933, 0.03539060801267624, 0.0021969731897115707, -0.002558665117248893, 0.16423161327838898, 0.007741499226540327, -0.0032485362607985735, 0.02770886942744255, -0.013194803148508072, -0.06399160623550415, -0.019458765164017677, 0.0002508023171685636, 0.022298870608210564, -0.043787796050310135, 0.023636819794774055, -0.008097057230770588, 0.026316434144973755, -0.10122396051883698, 0.03327816724777222, -0.057976920157670975, 0.014517621137201786, -0.0198570154607296, -0.026674684137105942, -0.008526419289410114, -0.011256416328251362, -0.03797948360443115, -0.07090343534946442, -0.043420761823654175, 0.002760916016995907, -0.012878610752522945, 0.0058709727600216866, 0.012465283274650574, -0.0191149041056633, 0.005056711379438639, -0.018059201538562775, -0.011447652243077755, 0.07260122150182724, -0.028732651844620705, 0.09141276776790619, -0.018376227468252182, -0.03193899616599083, 0.021540377289056778, -0.029249772429466248, -0.028530413284897804, -0.008041385561227798, 0.027270998805761337, 0.011418740265071392, -0.0455777645111084, -0.0014680601889267564, 0.013910937123000622, 0.0031895427964627743, 0.006718674674630165, 0.012035044841468334, -0.025311972945928574, -0.021473649889230728, -0.03185028210282326, -0.08194359391927719, 0.0164197888225317, 0.00979262962937355, 0.04966532811522484, -0.010446375235915184, 0.01566840335726738, -0.015222330577671528, -0.0444253608584404, -0.04159804806113243, 0.04177352041006088, 0.013865907676517963, -0.027828440070152283, 0.004446592181921005, -0.021875567734241486, -0.004991617053747177, -0.0038658829871565104, 0.027306467294692993, -0.0008922039414756, 0.011428352445363998, -0.004000414628535509, -0.004183437209576368, -0.04033149033784866, -0.0489530935883522, -0.021568160504102707, 0.018427085131406784, 0.043983884155750275, -0.035818591713905334, -0.009139039553701878, 0.05121038109064102, 0.012474238872528076, 0.02672913856804371, 0.01328091137111187, 0.01584203913807869, -0.042358316481113434, 0.02025638148188591, -0.049744248390197754, 0.05996574088931084, 0.017071137204766273, -0.05571309104561806, 0.032898589968681335, -0.009432122111320496, -0.019865455105900764, 0.04423270374536514, -0.011207809671759605, -0.001263551996089518, -0.04339727759361267, -0.04177422448992729, -0.023061972111463547, -0.009665058925747871, -0.003706139512360096, -0.03627753630280495, -0.06341040134429932, -0.011131052859127522, -0.005590340588241816, 0.017808733507990837, -0.001147085684351623, -0.026920899748802185, 0.009099168702960014, -0.022000638768076897, -0.017107252031564713, -0.007074524648487568, -0.01798495091497898, 0.005491181276738644, -0.05296119302511215, 0.02982616052031517, -0.03177192062139511, -0.0007685291348025203, -0.02558046579360962, -0.00012990149843972176, 0.06399178504943848, -0.009679695591330528, 0.031911976635456085, -0.037188488990068436, -0.0011856136843562126, -0.009918508119881153, -0.006001745816320181, 0.06618742644786835, -0.012014362961053848, -0.06722822785377502, 0.013764957897365093, -0.034705210477113724, 0.06160711124539375, -0.0395762175321579, -0.027266358956694603]\"\n./train/Rhodesian_ridgeback/n02087394_21329.JPEG,Rhodesian_ridgeback,\"[-0.025644954293966293, 0.011788693256676197, 0.0026109954342246056, 0.016171714290976524, 0.027771446853876114, -0.042158279567956924, 0.024537591263651848, 0.004382104612886906, -0.0021457839757204056, -0.0008596029365435243, -0.028129752725362778, -0.019504664465785027, -0.002774318912997842, -0.004253287799656391, 0.054629988968372345, 0.03129402920603752, 0.07170689851045609, -0.010222033597528934, 0.020030895248055458, -0.04429040476679802, -0.03236914798617363, 0.004376193042844534, -0.0024940534494817257, 0.02599390037357807, -0.030154196545481682, -0.02302185632288456, -0.013667773455381393, -0.016141312196850777, 0.004762436728924513, -0.005045976489782333, 0.03292896971106529, 0.04346372187137604, -0.002176003996282816, -0.03128829225897789, -0.022921578958630562, 0.0039257449097931385, -0.010048070922493935, 0.016750339418649673, -0.03080504760146141, 0.10472717136144638, -0.016140123829245567, -0.021189970895648003, 0.018344560638070107, -0.047129906713962555, 0.005727600771933794, -0.03610925376415253, 0.009691761806607246, -0.00033173238625749946, 0.0018060028087347746, 0.021783677861094475, 0.003660057205706835, 0.06099478900432587, -0.000556741317268461, 0.006964638829231262, 0.034975048154592514, -0.009077858179807663, 0.01732163317501545, 0.023123648017644882, -0.011486887000501156, -0.008652196265757084, 0.0807466059923172, 0.0014830997679382563, 0.034714821726083755, 0.05016372352838516, -0.026186103001236916, -0.02065110392868519, 0.009096772409975529, 0.11917635798454285, -0.03398175910115242, -0.003480239538475871, -0.0068206931464374065, -0.02357565425336361, -0.006128582172095776, 0.031040064990520477, -0.03561031445860863, -0.007383811753243208, -0.02890627644956112, -0.019498765468597412, 0.018268132582306862, -0.04955250024795532, 0.010183206759393215, 0.03240815922617912, 0.0012724197003990412, -0.030280178412795067, 0.010178483091294765, 0.037682391703128815, 0.01203247532248497, -0.032345447689294815, 0.04458693042397499, -0.007564929313957691, -0.025783106684684753, -0.03570055961608887, -0.6622034311294556, 0.0014273611595854163, -0.01834641583263874, 0.003823856357485056, -0.01881660893559456, 0.04561949521303177, -0.12107190489768982, 0.049631986767053604, -0.004952603951096535, -0.0005461013060994446, -0.03781336173415184, -0.017296629026532173, 0.06125437468290329, -0.02632027491927147, -0.02873791754245758, 0.02219029888510704, 0.0343799963593483, -0.02825171872973442, -0.020036660134792328, -0.0328347310423851, 0.016035689041018486, 0.016918795183300972, 0.01241068821400404, -0.004462217912077904, 0.004111241549253464, -0.03226235881447792, 0.00517880916595459, -0.029242871329188347, -0.006478437688201666, 0.03455231338739395, 0.04317901283502579, 0.02623119205236435, -0.009342311881482601, -0.023981839418411255, 0.01203689444810152, 0.024590009823441505, -0.007558037061244249, -0.0061245812103152275, 0.0381922721862793, 0.005801633466035128, -0.017405226826667786, 0.08336497843265533, -0.018793025985360146, 0.013292995281517506, 0.02776542864739895, -0.04975418373942375, -0.002898583421483636, -0.004053050652146339, -0.004689967259764671, 0.000594292301684618, 0.0023250156082212925, 0.035285625606775284, 0.005297048017382622, 0.011374574154615402, 0.02419702522456646, -0.01311406772583723, -0.02798323892056942, 0.007048311643302441, -0.013019335456192493, 0.02174455113708973, 0.060570620000362396, -0.048571716994047165, -0.056159865111112595, 0.02951068803668022, -0.04205096513032913, -0.018308252096176147, -0.004529127851128578, -0.009113536216318607, 0.0074289157055318356, 0.03103996254503727, 0.008451277390122414, -0.023916037753224373, 0.01392521895468235, -0.031716395169496536, -0.051374442875385284, 0.04205471649765968, -0.0043908073566854, 0.05324190482497215, 0.006863588932901621, 0.05280836299061775, 0.02124115452170372, -0.00896894559264183, 0.004470017738640308, -0.04858876392245293, 0.042917508631944656, -0.01150206197053194, 0.03547441214323044, -0.0038341470062732697, -0.02797600068151951, -0.0160579401999712, 0.042095351964235306, -0.03873775899410248, 0.011635111644864082, 0.02075224556028843, -0.04488939046859741, -0.005969759542495012, -0.011906388215720654, 0.05092490464448929, 0.021016407757997513, 0.015768636018037796, -0.01057265792042017, 0.011142848990857601, -0.06637565046548843, 0.016939086839556694, 0.004884950816631317, -0.01447509415447712, -0.07906493544578552, -0.05967545136809349, -0.0014194872928783298, 0.002088648732751608, 0.011758694425225258, 0.04434015229344368, -0.019103266298770905, -0.05648462474346161, -0.016620714217424393, -0.017031904309988022, -0.01300597470253706, 0.0359085388481617, -0.007043435703963041, -0.008278400637209415, 0.01175836194306612, 0.022739237174391747, -0.006324228830635548, -0.01640457473695278, -0.002583601512014866, 0.0048134177923202515, 0.10999178886413574, -0.01716848462820053, 0.04293223097920418, 0.0513681024312973, 0.016099341213703156, -0.001422857167199254, -0.027098624035716057, 0.016563311219215393, -0.012531907297670841, -0.026567181572318077, 0.008221397176384926, 0.02061346173286438, 0.009164472110569477, 0.020680570974946022, -0.00421835295855999, 0.04915255308151245, 0.01526966504752636, -0.07453181594610214, -0.0034621325321495533, -0.02942204475402832, 0.021079258993268013, 0.01775815337896347, 0.0009702324750833213, 0.012294934131205082, 0.004947331268340349, -0.0005273113492876291, 0.0027121384628117085, 0.036609917879104614, 0.0256170816719532, -0.03537235036492348, 0.01760173961520195, 0.04982484132051468, 0.008681437000632286, 0.02266821637749672, -0.0023944468703120947, 0.004989785607904196, -0.006461573764681816, -0.005009779240936041, 0.016930976882576942, 0.014575187116861343, 0.009175701066851616, -0.002199903130531311, -0.05381016805768013, 0.03996694087982178, 0.01647818647325039, -0.004829865414649248, 0.009475278668105602, 0.015348817221820354, -0.014873822219669819, 0.01640428602695465, -0.0025570159777998924, 0.009300191886723042, -0.016702551394701004, -0.0008093433571048081, 0.0422838069498539, 0.0030071923974901438, -0.02282690815627575, -0.053735073655843735, -0.010127965360879898, 0.018019836395978928, 0.007419808302074671, -0.005276944953948259, -0.017474137246608734, 0.015166079625487328, -0.03200840577483177, -0.041907768696546555, -0.008382173255085945, -0.006779431831091642, -0.0858762338757515, 0.0002040460822172463, -0.021960848942399025, 0.008011038415133953, 0.0010644126450642943, 0.004337712656706572, -0.044461071491241455, 0.007108933292329311, -0.00536023173481226, -0.0013003165367990732, 0.00789677444845438, 0.030141348019242287, 0.040765430778265, -0.022869134321808815, -0.010270718485116959, -0.0498930849134922, -0.02901153452694416, -0.008916277438402176, 0.012891219928860664, -0.03452771529555321, -0.012877574190497398, 0.05099581182003021, 0.028505690395832062, 0.04416007548570633, -0.01797490380704403, 0.0638846904039383, 0.08324956893920898, 0.02545366995036602, -0.014803873375058174, -0.029267380014061928, 0.042088668793439865, 0.005084700416773558, -0.05229417234659195, -0.07358596473932266, 0.056039199233055115, 0.05830933153629303, -0.02035602554678917, 0.008825298398733139, 0.002361758379265666, 0.017490779981017113, -0.00514292623847723, 0.03579942137002945, -0.006845276337116957, 0.0030151642858982086, -0.0013347931671887636, -0.017913317307829857, 0.014731827192008495, -0.009371884167194366, 0.0390726737678051, -0.012538653798401356, 0.01773012988269329, 0.003668559482321143, 0.003936268389225006, -0.013389300554990768, -0.012860741466283798, -0.06936734914779663, -0.004331421107053757, -0.006985301151871681, 0.04190022870898247, -0.015531999059021473, -0.005874295718967915, 0.031586240977048874, -0.026165010407567024, -0.010173738934099674, -0.042204324156045914, 0.02203083410859108, 0.021154768764972687, 0.030788902193307877, 0.008047898299992085, 0.002137921517714858, 0.01688753068447113, -0.06731123477220535, 0.017307836562395096, 0.004893491975963116, 0.020352959632873535, 0.016877882182598114, 0.01996215060353279, 0.010774222202599049, 0.005597269162535667, 0.018421992659568787, -0.024363743141293526, -0.04744899272918701, -0.023392273113131523, -0.0327572226524353, 0.006421930156648159, 0.008136816322803497, -0.02045786753296852, 0.002293241210281849, -0.018625324591994286, -0.0149290282279253, 0.20191439986228943, 0.0006443529855459929, -0.0036639876198023558, 0.03126014024019241, 0.05497602000832558, -0.06519157439470291, 0.0079015102237463, -0.015276411548256874, 0.008022595196962357, 0.0048521715216338634, -0.00689621502533555, -0.0016830795211717486, 0.049778133630752563, -0.12009825557470322, -0.01633497141301632, -0.06702516227960587, 0.043436937034130096, -0.0432589128613472, -0.010373277589678764, 0.003971364349126816, -0.004931390751153231, -0.006626570131629705, -0.051244352012872696, -0.06593025475740433, -0.018903309479355812, -0.019727585837244987, -0.054786182940006256, -0.01350716408342123, 0.023054683580994606, -0.005894715432077646, -0.00554518261924386, -0.0035425571259111166, 0.09167280048131943, -0.020510265603661537, 0.07983238995075226, -0.002931776689365506, -0.05774858593940735, -0.028020888566970825, -0.023466145619750023, -0.0026169875636696815, -0.020034685730934143, 0.042016543447971344, 0.026261763647198677, -0.028548797592520714, 0.012765792198479176, 0.036944907158613205, 0.021937144920229912, -0.01527348905801773, 0.002541514113545418, 0.010117321275174618, -0.027502864599227905, -0.009687402285635471, -0.12157442420721054, -0.013442193157970905, 0.0244749803096056, 0.03686755150556564, -0.017554711550474167, -0.0013593145413324237, -0.01715654321014881, -0.04997723922133446, -0.08105137199163437, 0.013181813061237335, -0.004246455617249012, -0.0037547950632870197, 0.023323072120547295, -0.011301024816930294, 0.015407013706862926, -0.027005797252058983, 0.003489146241918206, -0.01826423406600952, 0.015756506472826004, -0.0021992733236402273, -0.012370392680168152, -0.05881796404719353, -0.02991430088877678, -0.013476029969751835, 0.024882353842258453, 5.7712819398147985e-05, -0.013314126059412956, -0.018161296844482422, 0.05158856883645058, 0.0035179019905626774, 0.02611461654305458, 0.01761043071746826, 0.032898910343647, -0.008502214215695858, 0.03140421211719513, -0.011625842191278934, 0.04640812799334526, 0.008075340650975704, -0.04191175475716591, 0.01720743253827095, -0.053411245346069336, -0.05274084955453873, 0.07659730315208435, 0.0037060438189655542, -0.018737221136689186, -0.04976237192749977, -0.016231719404459, -0.036049649119377136, -0.014230899512767792, -0.01576736941933632, -0.012481880374252796, -0.03904184699058533, 0.01606222242116928, 0.016831686720252037, 0.007436744403094053, -0.027527043595910072, -0.01368696615099907, 0.0021376097574830055, -0.05290458723902702, -0.02871835045516491, -0.007197425700724125, -0.036878954619169235, -0.00967331137508154, -0.04731877148151398, 0.053018294274806976, -0.01711968518793583, 0.005203284323215485, -0.011030996218323708, 0.009212091565132141, 0.08657190203666687, -0.024397239089012146, 0.03070426546037197, -0.07221223413944244, -0.01961439661681652, 0.00521020358428359, -0.01310091745108366, 0.0018001069547608495, -0.034422263503074646, -0.04142124950885773, 0.030120590701699257, -0.03848738223314285, 0.06972593814134598, -0.021260228008031845, -0.000786780787166208]\"\n./train/Rhodesian_ridgeback/n02087394_5846.JPEG,Rhodesian_ridgeback,\"[-0.005391986574977636, 0.017691053450107574, 0.0022305939346551895, -0.012397385202348232, 0.014924729242920876, -0.05478691682219505, 0.032143961638212204, 0.0588843859732151, 0.07151506841182709, 0.019826281815767288, -0.01983918994665146, 0.01525361742824316, -0.01885691098868847, -0.011924251914024353, 0.01608782634139061, 0.01831902377307415, 0.0016319771530106664, -0.019304264336824417, -0.013436757028102875, 0.0199236199259758, -0.08029139041900635, 0.0021957061253488064, -0.0013394082197919488, 0.012649846263229847, -0.013112913817167282, -0.021702837198972702, 0.04071122407913208, 0.003955436870455742, 0.014486312866210938, 0.017860647290945053, -0.03698559105396271, -0.00844564102590084, -0.03285542130470276, 0.008930519223213196, -0.02994823455810547, 0.04052222892642021, 0.030189286917448044, -0.04700770229101181, -0.013658326119184494, 0.14125680923461914, -0.08621508628129959, 0.005365687422454357, 0.00021489293430931866, 0.007651452906429768, 0.0028803166933357716, 0.03873344510793686, 0.005647776648402214, -0.016823407262563705, 0.042077381163835526, 0.01751539669930935, -0.014504188671708107, 0.014438329264521599, -0.004290490876883268, 0.0018486634362488985, 0.0387326180934906, 0.055541280657052994, -0.047976259142160416, 0.03161672502756119, 0.006789746694266796, -0.03008427657186985, 0.06121120974421501, 0.005827050656080246, 0.03452357277274132, 0.05331454053521156, -0.02450154721736908, -0.013078983873128891, -0.006638368591666222, 0.023762745782732964, -0.024478258565068245, -0.005798616912215948, -0.0019510671263560653, -0.02250448428094387, -0.021393632516264915, 0.022788599133491516, -0.03344695270061493, -0.027303343638777733, -0.050680432468652725, -6.894405669299886e-05, 0.01734408363699913, -0.006977749988436699, 0.014659307897090912, -0.035194721072912216, -0.0404941700398922, -0.03645014762878418, 0.015078487806022167, -6.957248115213588e-05, 0.10016521066427231, -0.009901348501443863, 0.07822477072477341, 0.0071303993463516235, -0.019525859504938126, -0.01373169757425785, -0.6278891563415527, 0.07291746139526367, -0.062298472970724106, 0.01598794013261795, 0.012573099695146084, 0.011693781241774559, -0.0929255560040474, 0.06209933012723923, -0.007604517508298159, 0.005246815271675587, -0.03430387005209923, -0.006129328161478043, 0.024625152349472046, 0.0029108307790011168, 0.11188171803951263, -0.003630821593105793, 0.004116780124604702, -0.04975070431828499, 0.009676617570221424, 0.0017332235584035516, 0.025375353172421455, 0.002497987123206258, 0.007689016871154308, 0.009950736537575722, -0.08766285330057144, -0.0704977884888649, 0.007708231918513775, -0.013334348797798157, 0.03273578733205795, 0.017867324873805046, 0.03048928640782833, 0.032036226242780685, -0.014318895526230335, -0.013653857633471489, -0.0011197928106412292, 0.0388350673019886, -0.047362376004457474, -0.04986664652824402, 0.07445409148931503, 0.0590493381023407, 0.015262359753251076, 0.08631650358438492, -0.06709418445825577, 0.009015017189085484, 0.05177266150712967, -0.023866688832640648, -0.02357330732047558, -0.028702061623334885, 0.01105351559817791, -0.012946891598403454, 0.02034696750342846, -0.006287009920924902, -0.013452112674713135, 0.02603726275265217, 0.007644022814929485, -0.03729768469929695, 0.051674336194992065, 0.006163427140563726, -0.01630619540810585, -0.0035728663206100464, -0.053432244807481766, 0.03527335077524185, -0.024424677714705467, -0.006453230045735836, -0.04623183608055115, -0.01399326603859663, 0.007457921747118235, 0.024413075298070908, 0.016773799434304237, 0.004407459404319525, -0.025203824043273926, 0.017599575221538544, -0.03436971455812454, -0.043637681752443314, -0.10021776705980301, -0.010239524766802788, 0.010912532918155193, 0.03055335208773613, 0.04005587473511696, 0.0011694723507389426, 0.020687779411673546, -0.03158596158027649, -0.042366620153188705, 0.012841039337217808, -0.0299274493008852, -0.009464872069656849, 0.016470078378915787, -0.025435276329517365, -0.031794410198926926, 0.011128194630146027, 0.039540424942970276, -0.06662911921739578, -0.043987296521663666, -0.03537382185459137, -0.02097848616540432, 0.0025822171010077, -0.018338119611144066, 0.01937953755259514, 0.030911607667803764, 0.019923802465200424, -0.010854248888790607, -0.013998638838529587, -0.0030666207894682884, 0.007958909496665001, 0.03342549502849579, -0.02750435099005699, -0.13337551057338715, -0.005681950133293867, -0.02084488794207573, 0.045521367341279984, 0.0035258049611002207, -0.00746307335793972, -0.04519635811448097, -0.04544134810566902, 0.028682835400104523, -0.01649555191397667, -0.024268288165330887, 0.047294843941926956, 0.0034121170174330473, 0.00538440840318799, 0.02332933433353901, 0.01649387739598751, 0.009051177650690079, -0.06454499810934067, -0.03293003514409065, -0.0020585916936397552, 0.011031092144548893, -0.02467307448387146, 0.02058599330484867, 0.03628186509013176, -0.007103626150637865, 0.007631917484104633, -0.013025371357798576, -0.031263913959264755, 0.0019947586115449667, -0.07610946893692017, -0.0010777569841593504, -0.018483538180589676, 0.004764973185956478, 0.01402492169290781, -0.006277474574744701, 0.09451508522033691, -0.020821304991841316, -0.007637777831405401, 0.004989268258213997, -0.012099593877792358, 0.027708811685442924, -0.03655256703495979, 0.03384053707122803, 0.02097843587398529, 0.0183493010699749, -0.014925920404493809, 0.017190277576446533, 0.026871806010603905, 0.02551736868917942, -0.03322552144527435, 0.020625993609428406, 0.016381267458200455, 0.06351812183856964, 0.008886816911399364, 0.03397113084793091, -0.03275459632277489, 0.006632815580815077, 0.010901892557740211, 0.0013139396905899048, -0.01451388280838728, -0.04187629744410515, -0.027936968952417374, -0.03242424130439758, 0.00392987160012126, 0.05376756936311722, -0.03849327936768532, 0.004115990363061428, -0.007081995718181133, -0.040776412934064865, -0.00838315300643444, -0.005117494147270918, 0.017038270831108093, 0.02352968230843544, -0.010183400474488735, 0.04182342439889908, 0.002848950680345297, -0.010281047783792019, -0.002194163389503956, -0.012245864607393742, 0.020849697291851044, 0.011312051676213741, 0.020414268597960472, -0.019972410053014755, 0.008832997642457485, -0.02482936717569828, -0.0330527164041996, 0.025440914556384087, 0.018525971099734306, 0.007276801858097315, 0.03592492267489433, -0.01518238615244627, 0.047653328627347946, 0.02141023613512516, -0.027678804472088814, -0.03696908429265022, 0.02051270566880703, -0.008394142612814903, 0.026472387835383415, 0.10085442662239075, 0.037785664200782776, 0.06335127353668213, 0.013652759604156017, -0.004250367637723684, -0.013871575705707073, -0.004932180512696505, -0.013431623578071594, 0.007477251812815666, 0.014480357989668846, 0.0005252280388958752, 0.016255399212241173, 0.004309349227696657, -0.011592834256589413, -0.01573210209608078, 0.05300014466047287, 0.0861005112528801, -0.00027667279937304556, -0.02370787411928177, -0.012792913243174553, 0.001622582320123911, 0.052370522171258926, -0.004937384277582169, 0.01942494511604309, 0.03685326129198074, 0.029232880100607872, -0.009726098738610744, -0.03663291782140732, 0.052209626883268356, -0.03708072006702423, 0.009106023237109184, 0.03445904701948166, -0.011473577469587326, -0.0016386540373787284, -0.0059858523309230804, -0.019241809844970703, 0.013552459888160229, -0.03814413771033287, 0.015528273768723011, 0.020209329202771187, -0.0001974956103367731, 0.0228281132876873, -0.03676580637693405, -0.021239373832941055, 0.04316273331642151, -0.026680458337068558, 0.021695466712117195, 0.005663976073265076, 0.007053046952933073, 0.0028948872350156307, 0.05081503838300705, 0.0070738703943789005, -0.02431575208902359, 0.013718661852180958, -0.009567040018737316, 0.03148091956973076, 0.04135219007730484, 0.018594665452837944, -0.02778344601392746, 0.06554219871759415, -0.051547594368457794, -0.07740899920463562, -0.0015624799998477101, -0.008472120389342308, 0.04297628998756409, -0.00906402338296175, -0.019807100296020508, -0.07438536733388901, -0.10814590752124786, 0.04143177345395088, 0.028607821092009544, 0.02243051305413246, -0.021722441539168358, 0.0007777286227792501, -0.013272945769131184, 0.03949497640132904, -0.050396110862493515, -0.0028940036427229643, 0.0054226466454565525, -0.000869342009536922, 0.19810111820697784, 0.002547759562730789, -0.028329890221357346, 0.027520351111888885, 0.011642142198979855, -0.037674807012081146, 0.027082841843366623, 0.028230171650648117, -0.008089377544820309, -0.024764811620116234, -0.004594744648784399, -0.018147548660635948, 0.045349203050136566, -0.10666856914758682, 0.0035193643998354673, -0.06858539581298828, 0.009097951464354992, 0.045434024184942245, 0.015563732013106346, -0.010489290580153465, 0.015973959118127823, 0.025033308193087578, -0.07072363048791885, -0.016767462715506554, -0.009582191705703735, 0.027290958911180496, -0.003426824463531375, 0.006395412143319845, 0.006399312522262335, 0.028240734711289406, -0.0029522560071200132, 0.018539896234869957, -0.038044992834329605, -0.02467244863510132, 0.0890941247344017, -0.0007015911978669465, -0.005614669527858496, -0.00700412318110466, 0.007868952117860317, -0.004608053248375654, 0.0036456710658967495, 0.00710019888356328, -0.008661936968564987, -0.06836719810962677, -0.02397197112441063, 0.01165942195802927, 0.03592205420136452, 0.025678036734461784, 0.0016793393297120929, -0.007712677586823702, -0.03029772825539112, -0.0017517536180093884, 0.01974976249039173, -0.017513714730739594, -0.06451152265071869, 0.030192574486136436, 0.018391078338027, 0.032764825969934464, -0.037879690527915955, -0.03625855594873428, -0.06459753215312958, 0.04810040816664696, 0.005171953234821558, 0.019549669697880745, 0.015476541593670845, 0.00808633305132389, -0.006902987603098154, -0.014877340756356716, 0.01514826063066721, -0.011177574284374714, 0.038105305284261703, -0.024714728817343712, -0.006672631949186325, -0.024556130170822144, -0.006063050124794245, 0.0297069251537323, 0.01693647913634777, 0.060974862426519394, -0.022725354880094528, -0.042329221963882446, -0.012718919664621353, 0.044596392661333084, -0.009680472314357758, 0.051052045077085495, 0.016775311902165413, 0.003033250104635954, 0.00685113575309515, 0.02385883964598179, 0.01781260408461094, 0.027649853378534317, -0.04782991111278534, 0.019228409975767136, -0.006728203035891056, -0.008597920648753643, -0.009056184440851212, -0.023312794044613838, -0.015597645193338394, 0.0034731216728687286, 0.0005337924812920392, -0.015489204786717892, -0.023672373965382576, -0.006827234756201506, -0.03733714297413826, -0.04256891831755638, -0.04138247296214104, -0.03548938408493996, -0.00011985704622929916, -0.007676995825022459, 0.0035624003503471613, 0.028521249070763588, 0.003494899719953537, -0.04887307807803154, 0.021632278338074684, -0.03447125107049942, -0.05285876616835594, -0.05549907311797142, -0.031803976744413376, -0.012178911827504635, -3.320666655781679e-05, 0.011355203576385975, 0.008316188119351864, 0.01939818449318409, 0.010616258718073368, -0.04401259869337082, 0.02993876487016678, 0.00255530490539968, 0.020799769088625908, 0.021544253453612328, -0.044433269649744034, -0.019841980189085007, -0.05082302913069725, 0.028465744107961655, 0.004468484316021204, -0.008348950184881687, 0.04269899055361748, -0.04126589372754097]\"\n./train/Rhodesian_ridgeback/n02087394_278.JPEG,Rhodesian_ridgeback,\"[-0.010339646600186825, 0.03905864059925079, -0.04427637532353401, 0.03662688285112381, 0.00551714189350605, -0.04597872495651245, 0.020785879343748093, -0.004985305480659008, 0.028318464756011963, 0.022074051201343536, 0.009960295632481575, 0.013138801790773869, -0.0455985963344574, -0.01822056621313095, 0.015963178128004074, -0.014736722223460674, 0.04574273154139519, 0.011314240284264088, -0.02903951331973076, 0.011861455626785755, -0.052854057401418686, 0.007721449714154005, -0.014218444935977459, 0.001264224760234356, 0.010907000862061977, 0.01584598235785961, 0.004897905979305506, -0.0014795337338000536, 0.006465176586061716, -0.006136247888207436, -0.01899932511150837, 0.012732642702758312, -0.023714790120720863, -0.015033792704343796, -0.10992522537708282, 0.017254678532481194, 0.006113577168434858, -0.08104635775089264, -0.0007259405683726072, 0.11210425198078156, -0.03016890026628971, 0.0072476621717214584, -0.03543993458151817, -0.0400056391954422, 0.005719995591789484, -0.06976001709699631, 0.052959661930799484, 0.027112282812595367, 0.005807176697999239, 0.03563360869884491, -0.04620663449168205, 0.0033028069883584976, -0.010153735987842083, -0.001875001355074346, 0.010101289488375187, 0.001711782068014145, -0.037188973277807236, 0.03054759092628956, -0.025636514648795128, -0.01918015070259571, -0.03482460975646973, 0.004015339072793722, 0.06685641407966614, 0.0636986494064331, -0.039200808852910995, -0.015290392562747002, 0.05902404710650444, 0.05844423174858093, -0.03405583277344704, -0.021355587989091873, 0.01009396743029356, -0.021286554634571075, 0.016300112009048462, 0.0504414401948452, 0.01121311355382204, 0.005597311072051525, -0.015102432109415531, -0.016404779627919197, -0.008734338916838169, -0.03029402159154415, 0.001691907411441207, -0.012130534276366234, -0.012961125932633877, -0.008497582748532295, 0.025414396077394485, 0.03128167241811752, 0.08056488633155823, -0.043505970388650894, 0.050271742045879364, -0.011639711447060108, 0.025482743978500366, -0.030322914943099022, -0.6253664493560791, 0.03459562733769417, -0.055482883006334305, 0.012391149066388607, 0.012750346213579178, 0.01617354154586792, -0.05431871861219406, 0.08593559265136719, -0.02808159962296486, -0.01393354032188654, -0.018558986485004425, -0.0002472304040566087, 0.05528553947806358, -0.032639630138874054, 0.035755280405282974, -0.002731448272243142, 0.03607450798153877, -0.018773602321743965, -0.0512390173971653, -0.07964260131120682, 0.010252592153847218, 0.004775128792971373, -0.01423320360481739, -0.02933850698173046, -0.03135278820991516, -0.009535428136587143, 0.026022231206297874, 0.011426218785345554, 0.022747017443180084, -0.028731312602758408, 0.024174410849809647, 0.04738447815179825, -0.013125111348927021, -0.04748585447669029, 0.010225223377346992, -0.004672934301197529, -0.04546641558408737, -0.05583610758185387, 0.06216898560523987, 0.011568200774490833, 0.021136987954378128, 0.08159518986940384, -0.029202355071902275, 0.04151567816734314, 0.02192777581512928, -0.05828089267015457, -0.04711170494556427, 0.011390202678740025, 0.035115838050842285, -0.04187607765197754, 0.022716650739312172, 0.024820681661367416, 0.02747446671128273, 0.08838433772325516, 0.020428581163287163, -0.029786452651023865, -0.0061128283850848675, 0.023757239803671837, -0.06296823173761368, 0.023331457749009132, -0.004303973168134689, 0.021055836230516434, -0.0035291104577481747, 0.013990840874612331, -0.03844522312283516, -0.010804795660078526, 0.04165119677782059, 0.02086591348052025, 0.012927064672112465, 0.0025722146965563297, 0.013199616223573685, 0.023993713781237602, 0.0017928474117070436, -0.02474644035100937, -0.045871589332818985, 0.0035952934995293617, 0.012057088315486908, 0.01944211684167385, 0.00914702657610178, 0.03542560711503029, 0.015575747936964035, -0.01503022387623787, 0.01601666398346424, -0.0007900021155364811, 0.04980982840061188, -0.016770852729678154, 0.019268201664090157, -0.007674922235310078, -0.04065057262778282, -0.02252037078142166, 0.02805248834192753, -0.07464098930358887, 0.006647870410233736, 0.0012190809939056635, 0.03838586434721947, 0.01713525503873825, 0.002001642482355237, 0.026383524760603905, 0.044038623571395874, 0.013380360789597034, 0.015412012115120888, -0.022183002904057503, -0.013287652283906937, 0.00842969212681055, 0.0038699216675013304, -0.0009747152216732502, -0.12413594126701355, -0.05280923843383789, 0.0032940588425844908, 0.04085042327642441, 0.026330117136240005, -0.0025973289739340544, -0.02851216122508049, -0.055750031024217606, 0.0018411146011203527, -0.0014864678960293531, -0.011191185563802719, 0.04252554848790169, -0.024646354839205742, 0.02822248637676239, 0.008612736128270626, 0.009592890739440918, -0.004712221212685108, -0.029055288061499596, -0.005250677932053804, 0.03286055102944374, 0.1300635188817978, 0.004856949206441641, 0.016598768532276154, 0.011676136404275894, -0.027349082753062248, 0.006959372665733099, -0.02128349058330059, -0.004276379942893982, -0.007771203760057688, -0.02621028758585453, -0.006979340221732855, -0.00040776815149001777, -0.043349653482437134, 0.020826350897550583, -0.005194316152483225, 0.04159267991781235, -0.006700410507619381, -0.040112558752298355, -0.030939551070332527, 0.004938547499477863, 0.021298792213201523, -0.000610376475378871, 0.012197067961096764, 0.001866475329734385, 0.015017175115644932, -0.039579279720783234, -0.0421413853764534, 0.11013729125261307, 0.03867311030626297, -0.018050717189908028, 0.024639885872602463, 0.07793807983398438, 0.04843248426914215, 0.036105092614889145, 0.009914636611938477, -0.01588389463722706, 0.023626485839486122, 0.013631586916744709, -0.010209927335381508, 0.0034170823637396097, 0.04283933714032173, 0.008499417454004288, -0.03253105655312538, 0.008534083142876625, 0.022205032408237457, -0.047001272439956665, 0.01823495142161846, -0.028662586584687233, -0.015105652622878551, -0.001545483828522265, -0.019111139699816704, 0.025424282997846603, -0.003460813546553254, -0.009727584198117256, 0.045108139514923096, 0.007440049666911364, 0.004899084568023682, -0.008343128487467766, -0.04112769663333893, -0.0009356951923109591, -0.000721571734175086, 0.009531855583190918, -0.009370222687721252, 0.018491597846150398, -0.039615388959646225, 0.010291960090398788, 0.03548731654882431, 0.039062321186065674, 0.013994067907333374, 0.03096366487443447, 0.001438224338926375, 0.012929492630064487, -0.006101786158978939, 0.009842721745371819, -0.02487514726817608, 0.016457684338092804, -0.013144533149898052, -0.000488738645799458, 0.04236304759979248, 0.016956353560090065, 0.017405185848474503, -0.003421591827645898, -0.02130814827978611, -0.017995232716202736, -0.020069703459739685, 0.02569887973368168, 0.020381495356559753, 0.016940584406256676, -0.012860779650509357, 0.041444338858127594, 0.006919574458152056, 0.02470771037042141, -0.029069768264889717, 0.10165641456842422, 0.08133862912654877, 0.021030429750680923, -0.015282310545444489, 0.006195817142724991, 0.03328251466155052, 0.04618784412741661, -0.004665839485824108, 0.019654758274555206, 0.023723609745502472, 0.055645331740379333, -0.023958571255207062, -0.015302691608667374, 0.03263932466506958, -0.025554919615387917, 0.0024383896961808205, 0.018219025805592537, -0.034334681928157806, -0.030754728242754936, -0.0002863049157895148, -0.030023369938135147, 0.04845021665096283, -0.06081711873412132, -0.01245646458119154, -0.0035543020348995924, -0.022041000425815582, 0.009853284806013107, -0.012411502189934254, 0.01162793766707182, 0.020216014236211777, -0.06177813932299614, 0.018150554969906807, 0.009610772132873535, 0.035439711064100266, -0.008880493231117725, 0.007272801361978054, 0.04798315837979317, -0.025047892704606056, 0.009011071175336838, -0.03753677010536194, 0.009424131363630295, 0.03418385237455368, 0.0050114355981349945, 0.0031013721600174904, 0.06500803679227829, -0.0077776541002094746, -0.07803486287593842, 0.0009260940132662654, 0.018818266689777374, 0.03430402651429176, 0.037848103791475296, -0.018709102645516396, -0.0009421348222531378, -0.10412932187318802, 0.044580817222595215, 0.01118628028780222, -0.011788470670580864, 0.013160953298211098, -0.03624584525823593, -0.015419976785779, 0.001031195279210806, -0.013861681334674358, -0.014244203455746174, 0.005248270463198423, 0.022436266764998436, 0.18767544627189636, 0.03114473447203636, 0.00848979502916336, -0.002582792192697525, 0.004706553183495998, -0.071590356528759, 0.008604518137872219, 0.04340184107422829, 0.019459465518593788, 0.01153312437236309, -0.001330107799731195, 0.017178572714328766, 0.011835595592856407, -0.15417605638504028, -0.04224853217601776, -0.037229180335998535, 0.0067863259464502335, -0.013778339140117168, 0.005521815270185471, 0.000912082614377141, 0.01519855111837387, 0.01563907042145729, -0.006373416166752577, -0.04189238324761391, 0.024179477244615555, -0.01185719482600689, 0.0033335741609334946, 0.03178953751921654, 0.0203982163220644, -0.026241041719913483, -0.006019388325512409, -0.002936444478109479, -0.014133582822978497, -0.03979257866740227, 0.058772698044776917, 0.030349677428603172, -0.03891360014677048, -0.006352592259645462, 0.014638759195804596, -0.013930131681263447, -0.05014433339238167, 0.026797432452440262, 0.03206631913781166, -0.08416776359081268, -0.008693108335137367, 0.03349630534648895, 0.03053007833659649, 0.0023501520045101643, 0.0030981325544416904, -0.01582353003323078, -0.025495363399386406, -0.02294282801449299, 0.09190244972705841, 0.0017727595986798406, -0.04356176778674126, 0.04215346649289131, 0.019068360328674316, 0.003989627119153738, -0.02982833795249462, -0.010998078621923923, -0.021844757720828056, -0.0032506175339221954, -0.0013119373470544815, 0.025579404085874557, -0.010794324800372124, -0.025199169293045998, 0.0029234394896775484, -0.022888874635100365, 0.020953526720404625, -0.026302799582481384, 0.029941217973828316, -0.032815657556056976, -0.020572198554873466, -0.038577452301979065, -0.02488905005156994, -0.03084566257894039, -0.0018726526759564877, 0.041550327092409134, 0.0024749445728957653, -0.01272634044289589, 0.047561004757881165, 0.05571592226624489, 0.02687990479171276, 0.025921069085597992, 0.026074379682540894, -0.01706778258085251, 0.01265327725559473, -0.00642224820330739, 0.03604493662714958, 0.034928757697343826, -0.07311214506626129, 0.017128895968198776, -0.03593098744750023, -0.009071087464690208, 0.07357773929834366, -0.03288194164633751, 0.010925577022135258, -0.06774624437093735, -0.002780209993943572, -0.043391648679971695, 0.012464969418942928, -0.012836279347538948, -0.05816589295864105, -0.04275109991431236, 0.005992147605866194, -0.002063536085188389, 0.010000335983932018, -0.007597373798489571, -0.012625264003872871, -0.006160091143101454, -0.014300685375928879, -0.007889405824244022, -0.0007093461463227868, -0.05250920355319977, -0.027687763795256615, -0.07024407386779785, 0.014195474795997143, -0.03941229358315468, 0.03239751607179642, -0.013227191753685474, 0.012571141123771667, 0.04286530613899231, 0.0020289767999202013, 0.03436876833438873, -0.0388738177716732, -0.02269362099468708, -0.004185244906693697, 0.035088878124952316, -0.005091797094792128, -0.014979379251599312, -0.03544396534562111, 0.01736312545835972, -0.03522193804383278, 0.09472496807575226, -0.000720694602932781, -0.012291007675230503]\"\n./train/Rhodesian_ridgeback/n02087394_9675.JPEG,Rhodesian_ridgeback,\"[-0.00642926013097167, 0.011774574406445026, -0.004965600557625294, 0.04012444615364075, 0.010282550938427448, -0.05951981246471405, 0.04351610317826271, 0.018611568957567215, 0.0240706168115139, -0.01737959124147892, -0.031554996967315674, 0.00315316254273057, 0.00831983145326376, -0.012495854869484901, 0.042606208473443985, 0.01496666669845581, 0.1559801995754242, -0.0013113179011270404, -0.007786909118294716, -0.023591604083776474, 0.02200344018638134, -0.009734619408845901, 0.010083937086164951, 0.023845111951231956, -0.026486439630389214, 0.020027441903948784, 0.03857468441128731, 0.005846306681632996, -0.02698405086994171, 0.04064135625958443, -0.00482893455773592, 0.012634741142392159, -0.0506618432700634, -0.003953630104660988, -0.008416024036705494, 0.007637512870132923, 0.01946677267551422, -0.04076175391674042, -0.034122876822948456, 0.14289268851280212, -0.05139057710766792, -0.009689860977232456, -0.007429969031363726, 0.00633455952629447, -0.02563011460006237, -0.0051863729022443295, 0.021861441433429718, 0.004759176168590784, 0.01813994161784649, 0.017356660217046738, 0.018291765823960304, -0.0027140886522829533, 0.007460246328264475, 0.0027377717196941376, 0.0027467806357890368, 0.028744017705321312, -0.003513308707624674, 0.07206111401319504, -0.012749267742037773, -0.03480541706085205, 0.09280239790678024, 0.011946047656238079, 0.06715364754199982, 0.06422613561153412, -0.035047341138124466, -0.01071441825479269, 0.01852513663470745, 0.05992438271641731, -0.06256405264139175, 0.0024755082558840513, 0.006311909761279821, -0.019784996286034584, 0.0032218352425843477, 0.016136301681399345, -0.033726491034030914, -0.04123867675662041, -0.014547637663781643, -0.00037727138260379434, -0.01577398180961609, -0.002146792598068714, -0.0060698906891047955, -0.017982391640543938, -0.049015771597623825, -0.01649750955402851, 0.018942585214972496, 0.025703871622681618, 0.10904256254434586, -0.0132160484790802, 0.074368916451931, -0.014198323711752892, -0.029945416375994682, -0.04863398149609566, -0.6151195168495178, 0.006860040128231049, -0.06993436813354492, 0.0027735133189707994, 0.0011932518100365996, 0.02735515497624874, -0.038601890206336975, 0.07096002995967865, -0.023458285257220268, 0.020493026822805405, 0.023046597838401794, -0.006876177620142698, 0.03469378128647804, -0.018653297796845436, 0.10893097519874573, -0.004278414882719517, 0.010904542170464993, -0.006127052009105682, -0.00868159532546997, -0.024870041757822037, 0.016196435317397118, -0.010376927442848682, -0.013851182535290718, -0.0008336373139172792, -0.033030614256858826, -0.04957796633243561, 0.020622000098228455, 0.0058760009706020355, 0.0860554575920105, -0.014481180347502232, 0.0036034511867910624, -0.031051458790898323, -0.0004360431630630046, -0.02730606310069561, -0.00929574016481638, 0.034491848200559616, -0.050488922744989395, -0.03299088776111603, 0.055560871958732605, -0.017317967489361763, -0.03200691565871239, 0.08397991955280304, -0.04717012494802475, 0.00789358839392662, 0.04954368621110916, -0.057898081839084625, -0.025936231017112732, -0.0018493420211598277, 0.017925841733813286, -0.0102737070992589, -0.028565993532538414, 0.000946461979765445, -0.022759879007935524, 0.012448247522115707, 0.015391524881124496, 0.020134707912802696, 0.017757903784513474, 0.0023167147301137447, -0.060375332832336426, 0.03998134285211563, -0.10616463422775269, 0.0008265558863058686, -0.013567100279033184, 0.02829347737133503, -0.04765458405017853, -0.028429143130779266, 0.015662185847759247, 0.03198317438364029, -0.021400969475507736, 0.00930675771087408, -0.016660533845424652, 0.031660210341215134, 0.0035506202839314938, -0.04929794371128082, 0.026781778782606125, 0.026949003338813782, 0.026936164125800133, 0.044458720833063126, -0.02692827768623829, 0.01469477079808712, 0.029811816290020943, 0.0030284447129815817, 0.014625340700149536, -0.04623761400580406, 0.04210658371448517, -0.02005605213344097, 0.03337322548031807, -0.00781743973493576, -0.014045911841094494, 0.0019360474543645978, 0.06732098013162613, -0.040646374225616455, -0.023043114691972733, -0.010694232769310474, -0.01959412917494774, -0.004592665936797857, 0.006634973920881748, 0.01807990111410618, 0.044423121958971024, 0.03100660629570484, 0.00800128560513258, 0.010038346983492374, -0.020097212865948677, -0.007911799475550652, -0.005155733320862055, -0.006756444461643696, -0.11818107962608337, -0.05529450625181198, -0.015813153237104416, -0.009594175964593887, 0.03677485138177872, 0.031157564371824265, -0.06377432495355606, -0.040151339024305344, -0.0071733249351382256, -0.007805191911756992, -0.012845823541283607, 0.05622439458966255, -0.011010861955583096, 0.010363527573645115, 0.022755973041057587, 0.05505211278796196, -0.005571553949266672, -0.01835271529853344, -0.010758987627923489, -0.014315851032733917, 0.10752670466899872, -0.029224133118987083, 0.0902826189994812, 0.06972993165254593, -0.0038571900222450495, -0.018022196367383003, -0.03740731626749039, -0.020056862384080887, -0.005674014333635569, -0.05963445082306862, -0.03357917070388794, -0.011032938957214355, -0.011509658768773079, -0.004048537462949753, -0.0053857602179050446, 0.0557682067155838, -0.03176291286945343, -0.041240498423576355, -0.010314892046153545, -0.04114950820803642, 0.0175529383122921, -0.023838277906179428, 0.0074266353622078896, 0.008983980864286423, 0.010077117942273617, -0.024026889353990555, -0.022875575348734856, 0.06631719321012497, 0.040883976966142654, -0.04893544316291809, 0.0383126474916935, 0.05661330744624138, 0.020968537777662277, 0.03307196497917175, 0.010013550519943237, -0.010557168163359165, 0.017561353743076324, 0.027614044025540352, -0.011178292334079742, -0.01706625334918499, -0.0028855332639068365, -0.015750033780932426, -0.019120000302791595, 0.018231183290481567, -0.0140139851719141, -0.049715541303157806, -0.0037412424571812153, -0.020753251388669014, 0.005906159523874521, -0.029907749965786934, -0.013996242545545101, 0.027413444593548775, -0.019033964723348618, 0.012185250408947468, 0.041765179485082626, 0.015318097546696663, 0.017573215067386627, -0.03443941846489906, -0.035206831991672516, 0.023611871525645256, -0.015443755313754082, -0.00880451686680317, -0.04299072548747063, 0.03617670014500618, -0.045859720557928085, -0.004159544128924608, 0.009945434518158436, -0.005853855982422829, 0.08166142553091049, 0.012666634283959866, -0.012232569977641106, 0.00781438872218132, -0.02153339609503746, -0.030307257547974586, -0.008866784162819386, 0.00850406289100647, -0.01617431454360485, -0.0008618741994723678, 0.048884619027376175, 0.03690401092171669, 0.0304561760276556, -0.009432272054255009, -0.019926710054278374, -0.0038591737393289804, -0.015279050916433334, -0.0009286064887419343, 0.01314376201480627, -0.009784070774912834, -0.010536900721490383, -0.0018841003766283393, 0.031573377549648285, 0.05093998461961746, 0.013900729827582836, 0.07754374295473099, 0.08378559350967407, 0.000137176743010059, -0.008587849326431751, 0.022899813950061798, 8.025380338949617e-06, 0.031342875212430954, -0.016752135008573532, -0.0782231017947197, 0.041723594069480896, 0.07858502119779587, -0.038192253559827805, -0.012742962688207626, 0.03633275255560875, -0.0026385069359093904, -0.026247384026646614, 0.055805135518312454, 0.021487167105078697, 0.01107367780059576, -0.023563992232084274, -0.03245487064123154, 0.014745412394404411, -0.05405285954475403, 0.04178627207875252, -0.022519558668136597, -0.03464629501104355, 0.04280424118041992, 0.04035640135407448, -0.012905756942927837, -0.00023919210070744157, -0.034464333206415176, 0.001804935629479587, 0.030950814485549927, 0.06342165172100067, 0.010443100705742836, 0.04172161966562271, 0.030189674347639084, -0.01600562408566475, -0.02124182879924774, -0.0027787447907030582, 0.007406942080706358, 0.023458832874894142, 0.03603058308362961, 0.009768177755177021, 0.03515554592013359, -0.030251068994402885, -0.07192102074623108, 0.001408088719472289, 0.005960332229733467, 0.03265371918678284, -0.029677720740437508, 0.007905089296400547, 0.0036639333702623844, -0.08592956513166428, 0.04420589655637741, 0.01558740809559822, -0.008742449805140495, 0.002078457036986947, 0.0005252031842246652, -0.05216806009411812, 0.024311650544404984, -0.029121320694684982, 0.014193949289619923, 0.002997110364958644, 0.014119686558842659, 0.1624218374490738, 0.026860006153583527, -0.019261790439486504, 0.03590904176235199, 0.02450716681778431, -0.03685178607702255, 0.027380509302020073, -0.0011913619237020612, 0.03536242991685867, -0.011817136779427528, -0.04089560732245445, 0.0040316046215593815, 0.026966935023665428, -0.0683479905128479, -0.010340536944568157, -0.10408109426498413, -0.010748367756605148, 0.0012477377895265818, -0.0032117050141096115, -0.024553129449486732, 0.01285347156226635, -0.004240044392645359, -0.04027936980128288, 0.004287989344447851, -0.003858507378026843, 0.02043241076171398, 0.03458452969789505, -0.0024946946650743484, 0.007284277584403753, 0.0017304776702076197, 0.018781205639243126, -0.021469995379447937, 0.008085250854492188, -0.04203220084309578, 0.0923193171620369, 0.003358728252351284, -0.020038971677422523, 0.01913110725581646, 0.019377920776605606, -0.02146841026842594, 0.005836763884872198, 0.014379963278770447, 0.03446222096681595, -0.037708479911088943, 0.011470352299511433, 0.052154116332530975, 0.016650214791297913, 0.026143943890929222, -0.00041798330494202673, -0.00370265101082623, -0.06521797925233841, -0.03125125169754028, 0.025966795161366463, 0.006217402871698141, -0.024058986455202103, 0.03556165099143982, 0.05257745459675789, -0.022912589833140373, -0.025228364393115044, -0.04399696737527847, -0.04792570695281029, 0.009131664410233498, 0.048689160495996475, 0.008531025610864162, 0.020337818190455437, -0.03921192139387131, 0.0009881387231871486, -0.03895493596792221, 0.022328417748212814, -0.0007098002824932337, -0.008249212987720966, -0.03984755650162697, -0.01825314573943615, -0.02659331075847149, -0.0098453089594841, -0.01660744473338127, -8.1525620771572e-05, 0.04894537851214409, -0.0044367252849042416, 0.0011095397640019655, 0.03205812722444534, 0.04114533215761185, 0.020660467445850372, 0.008132324554026127, -0.005370392929762602, 0.019445175305008888, -0.007983095943927765, -0.020692357793450356, 0.05891582742333412, 0.06700751930475235, -0.04171498492360115, 0.009947318583726883, -0.015272402204573154, -0.03143974393606186, 0.027523156255483627, -0.03975512087345123, -0.016607360914349556, -0.038646914064884186, -0.003964670933783054, -0.004689487628638744, 0.010895202867686749, -0.0105355903506279, -0.021120702847838402, -0.00645969295874238, 0.023680031299591064, -0.029380323365330696, 0.018542470410466194, -0.01914518140256405, -0.03470741584897041, -0.0004111460584681481, -0.015175784938037395, -0.03559740632772446, -0.008343890309333801, -0.017721472308039665, -0.03265424817800522, -0.040455035865306854, 0.03331737220287323, -0.046896208077669144, 0.04792838171124458, -0.020706715062260628, 0.036482397466897964, 0.0633036270737648, -0.028765330091118813, 0.014786149375140667, -0.01980029046535492, -0.023905020207166672, 0.007440534885972738, 0.0057053049094974995, -0.006119414232671261, -0.013450154103338718, -0.05321452021598816, -0.0235038660466671, -0.02494187466800213, 0.06946761161088943, 0.016357455402612686, 0.011189817450940609]\"\n./train/magpie/n01582220_6305.JPEG,magpie,\"[0.018827656283974648, -0.024615561589598656, 0.0293282363563776, -0.016135459765791893, -0.03245780989527702, 0.03514721244573593, 0.02763618901371956, 0.03535673767328262, 0.07810372859239578, 0.016499517485499382, -0.0012562614865601063, 0.05151311680674553, -0.042830999940633774, -0.04592282697558403, -0.0017729810206219554, 0.012361395172774792, 0.06660493463277817, 0.01802103966474533, -0.03484049066901207, 0.028711333870887756, 0.022854790091514587, -0.024903589859604836, 0.01204458624124527, -0.034657903015613556, -0.03403854742646217, 0.007625197991728783, 0.008113615214824677, -0.005570975132286549, 0.032691292464733124, -0.00315682590007782, 0.04148256406188011, 0.027817683294415474, -0.0019673812203109264, 0.04231281951069832, 0.06823498755693436, -0.06196039915084839, 0.011346722021698952, -0.03352397307753563, 0.05014587193727493, 0.18125498294830322, 0.0290727186948061, 0.04617666080594063, -0.0035515292547643185, -0.023684725165367126, 0.07034630328416824, -0.16925127804279327, 0.029002757743000984, 0.037657231092453, 0.03319118544459343, -0.022623950615525246, 0.007120820693671703, 0.022583605721592903, 0.003786057233810425, -0.031998880207538605, 0.011543006636202335, 0.020930299535393715, -0.026586279273033142, 0.0272187739610672, -0.019081834703683853, 0.02272575907409191, 0.17716841399669647, -0.03517872840166092, -0.03901701048016548, 0.02855078876018524, -0.05527477711439133, 0.00012810222688131034, 0.041298530995845795, -0.013177312910556793, -0.05802835896611214, -0.001893130480311811, -0.006147097330540419, -0.02573542110621929, 0.01273611281067133, 0.011987520381808281, -0.02724033035337925, -0.02136179432272911, 0.023510338738560677, -0.01950092241168022, -0.04780557379126549, -0.0752376914024353, -0.03189455345273018, -0.0072960155084729195, -0.010745815001428127, -0.010285058058798313, 0.02283707819879055, 0.00264256470836699, -0.05260142311453819, 0.023816702887415886, 0.053955044597387314, 0.003068899968639016, 0.008760971017181873, -0.0837271586060524, -0.48289525508880615, -0.034004390239715576, -0.008714662864804268, 0.020840220153331757, 0.01942824199795723, 0.03857716917991638, -0.1064440906047821, 0.06810073554515839, 0.02460627444088459, 0.0006159464828670025, -0.012722511775791645, 0.004570556804537773, 0.009495123289525509, 0.04238494113087654, 0.0014125303132459521, 0.04358721897006035, 0.03160882368683815, -0.061208389699459076, 0.06583219766616821, -0.015935758128762245, 0.038883958011865616, -0.013600080274045467, -0.013192912563681602, -0.01611938513815403, 0.03449252247810364, -0.015214809216558933, 0.042917173355817795, 0.0083873700350523, 0.04308173060417175, -0.0335669070482254, 0.007892094552516937, 0.04217178747057915, -0.02447384037077427, -0.0032950667664408684, 0.057585708796978, 0.039330098778009415, -0.013039353303611279, -0.023667048662900925, -0.03469773381948471, -0.07116732746362686, -0.06904327869415283, 0.07900821417570114, -0.012688251212239265, -0.028951434418559074, -0.03215756267309189, -0.07290086895227432, 0.016015581786632538, 0.05881794914603233, 0.012797832489013672, -0.00020610801584552974, 0.07982444763183594, 0.015658337622880936, 0.007552145980298519, -0.0009723257971927524, -0.012229140847921371, -0.032932136207818985, 0.02205234207212925, -0.019587507471442223, -0.03332267701625824, 0.010585533455014229, 0.005030203144997358, -0.011524391360580921, 0.0386664979159832, 0.018889253959059715, 0.010414505377411842, 0.015288013964891434, 0.010142264887690544, -0.06952351331710815, 0.0026073053013533354, -0.06397499889135361, 0.028309455141425133, -0.02388712763786316, 0.022124197334051132, 0.005805507767945528, -0.07694584876298904, 0.003609689883887768, 0.05337866395711899, 0.05683017522096634, -0.012204747647047043, -0.004302687477320433, 0.03419233486056328, -0.027286987751722336, 0.022267349064350128, -0.06973061710596085, 0.04834144935011864, -0.02306673862040043, -0.027902454137802124, -0.0105135478079319, -0.05667004734277725, -0.017103424295783043, -0.002543976530432701, -0.011321641504764557, -0.036580584943294525, -0.010841352865099907, 0.014590620063245296, 0.00015263217210303992, 0.07822557538747787, 0.04072045162320137, 0.03713531047105789, -0.018214991316199303, 0.0688062384724617, 0.027509968727827072, 0.06472431868314743, -0.019534794613718987, -0.07046764343976974, 0.004104030318558216, -0.04858775436878204, 0.10078790038824081, -0.04802703484892845, 0.04685457795858383, 0.06751231849193573, 0.002098524011671543, 0.029212553054094315, 0.03553464636206627, -0.03342635929584503, -0.049773141741752625, -0.0036267030518501997, 0.022025899961590767, -0.016620926558971405, 0.047242507338523865, -0.022596921771764755, 0.015844054520130157, -0.039429351687431335, -0.04199626296758652, -0.013968798331916332, -0.029827117919921875, 0.04137323051691055, -0.06541036069393158, 0.05988244712352753, -0.07827461510896683, -0.008621102198958397, 0.04107898846268654, -0.01927870325744152, -0.02173776552081108, -0.007645321544259787, 0.0027409500908106565, 0.01208761241286993, 0.031077664345502853, -0.0718325525522232, -0.026154622435569763, 0.004763956647366285, 0.005333162844181061, -0.005255814641714096, 0.006261635571718216, 0.005613194312900305, -0.013619291596114635, -0.0070898146368563175, 0.01430173497647047, 0.01675896719098091, -0.02349281683564186, 0.0031418497674167156, -0.01507906336337328, -0.012598204426467419, 0.0546768419444561, 0.0008061155676841736, -0.042153868824243546, -0.03754917159676552, -0.010180382989346981, 0.0060064163990318775, 0.016933780163526535, 0.051194529980421066, 0.0002584594185464084, -0.017311330884695053, -0.056363414973020554, -0.026099564507603645, 0.045178644359111786, 0.05458437278866768, 0.03922485560178757, -0.015043593943119049, 0.01975635625422001, -0.047742269933223724, 0.06167758256196976, 0.04718456044793129, -0.0012431119102984667, 0.044951219111680984, 0.045783527195453644, 0.07533808052539825, 0.027329273521900177, 0.0027797971852123737, 0.006039970088750124, 0.0083633903414011, -0.047861889004707336, 0.03139689564704895, -0.025066547095775604, 0.03579997271299362, 0.022677363827824593, 0.04139960557222366, -0.03197820857167244, 0.010648764669895172, 0.05341184884309769, -0.03660346940159798, 0.004987338092178106, -0.009289707988500595, 0.05034167319536209, -0.022230306640267372, -0.05405929684638977, -0.012412209995090961, 0.023405583575367928, -0.03016992099583149, 0.012151060625910759, 0.014858442358672619, 0.022612271830439568, 0.04535754397511482, -0.020900217816233635, 0.04916117712855339, -0.05145430937409401, 0.05058713257312775, -0.06058567762374878, -0.05382015183568001, 0.011961638927459717, 0.017763948068022728, 0.03345884382724762, 0.008241651579737663, 0.08363321423530579, 0.06291977316141129, -0.006945734843611717, 0.023350095376372337, -0.005072975065559149, -0.002968858228996396, 0.0162441935390234, 0.07860051840543747, -0.0099860904738307, -0.00014036381617188454, 0.049050938338041306, -0.04022374004125595, 0.026052962988615036, 0.003980063367635012, -0.023936187848448753, 0.008564280346035957, 0.1677229404449463, -0.0016842774348333478, 0.019501544535160065, -0.031067268922924995, 0.017881371080875397, -0.022479381412267685, -0.04022018983960152, -0.03219716250896454, -0.03844815492630005, -0.034644220024347305, -0.015409181825816631, -0.040217310190200806, 0.04221230745315552, -0.0215977281332016, -0.01842563971877098, -0.007390881888568401, 0.04451281577348709, -0.008431381545960903, -0.013206608593463898, -0.04682400822639465, -0.028428899124264717, -0.0023818761110305786, 0.020847024396061897, 0.014550499618053436, -0.015050939284265041, 0.06152911111712456, 0.028762774541974068, 0.017239609733223915, -0.0117634953930974, 0.01730508543550968, 0.03572648763656616, 0.02246314473450184, -0.02823050320148468, -0.035101279616355896, 0.076643206179142, 0.012799303978681564, -0.12835732102394104, 0.008497282862663269, -0.0032462538219988346, 0.024495316669344902, 0.0014239012962207198, 0.009956886060535908, -0.010444113984704018, -0.009880856610834599, -0.003483743406832218, -0.016522593796253204, -0.03443937003612518, -0.03492997959256172, 0.04547533392906189, -0.019817396998405457, 0.005572588182985783, 0.02962495945394039, 0.0034744562581181526, 0.014807053841650486, 0.03318481892347336, 0.054766252636909485, 0.008004894480109215, -0.03542323410511017, 0.01803155057132244, -0.035466454923152924, 0.012429727241396904, 0.054875411093235016, -0.07571226358413696, -0.03627216815948486, 0.06498254090547562, -0.008632311597466469, 0.03131505101919174, -0.008580134250223637, -0.034100864082574844, -0.02699950523674488, -0.0493195541203022, 0.026191236451268196, -0.017028721049427986, 0.0051125893369317055, -0.0005799022037535906, -0.03859693184494972, -0.00845345202833414, -0.05573398619890213, -0.05846928432583809, -0.011251057498157024, 0.023934610188007355, -0.04379287362098694, -0.002817793982103467, 0.01587926223874092, -0.0004937896155752242, 0.06132238730788231, 0.026758408173918724, 0.003524522529914975, 0.019649703055620193, 0.036177899688482285, 0.022814935073256493, 0.04080281779170036, 0.011952662840485573, -0.032642919570207596, -0.023525632917881012, 0.020891550928354263, -0.005885724909603596, 0.04027673229575157, 0.037472136318683624, 0.0025419951416552067, 0.01619061641395092, -0.008238391019403934, -0.07900701463222504, -0.025203468278050423, -0.05450286343693733, 0.04800764471292496, -0.009256750345230103, 0.14329232275485992, -0.03408517688512802, 0.027076425030827522, -0.019037092104554176, -0.04450215399265289, 0.02104870229959488, -0.014385869726538658, -0.04948332533240318, 0.019127802923321724, -0.017832783982157707, -0.05691763758659363, -0.05071759596467018, 0.026873808354139328, -0.05186035484075546, -0.020169300958514214, -0.038070522248744965, 0.015190396457910538, 0.026914222165942192, -0.02224641479551792, 0.023385904729366302, 0.01237243041396141, -0.027538150548934937, -0.049125682562589645, -0.03205236792564392, -0.007461700588464737, 0.019089408218860626, 0.024555379524827003, -0.020044436678290367, 0.052476268261671066, 0.045300476253032684, -0.011742628179490566, -0.018285227939486504, -0.047239527106285095, -0.0008571780053898692, 0.031017715111374855, 0.007418784312903881, -0.030855506658554077, -0.07381892949342728, 0.00635927077382803, 0.01840704306960106, 0.007481150329113007, -0.0374949648976326, -0.035440366715192795, -0.008510146290063858, -0.032463397830724716, -0.0034047323279082775, -0.024263696745038033, -0.009369195438921452, 0.0046998257748782635, 0.018688149750232697, -0.012986365705728531, -0.0026885224506258965, -0.038365304470062256, 0.001897667534649372, 0.014090548269450665, 0.027172842994332314, 0.0908467173576355, 0.014697374776005745, -0.021754935383796692, 0.007802898529917002, -0.020912429317831993, -0.019221488386392593, -0.00014825395192019641, 0.009452423080801964, 0.03470393642783165, -0.031228376552462578, 0.024859780445694923, 0.02316765859723091, -0.017549145966768265, -0.01092354767024517, -0.04285452887415886, -0.025636132806539536, -0.02466859109699726, -0.011322235688567162, 0.04688114672899246, 0.0022036449518054724, 0.0061861309222877026, -0.06876593083143234, -0.04155696555972099, 0.028165165334939957, 0.01294831745326519, -0.04623892530798912, 0.010454652830958366, -0.043927717953920364]\"\n./train/magpie/n01582220_4738.JPEG,magpie,\"[0.015292543917894363, 0.04362116754055023, 0.007628725841641426, 0.010881729423999786, 0.024764642119407654, -0.028060877695679665, 0.015642408281564713, 0.034400854259729385, -0.026378842070698738, -0.019405851140618324, 0.060798175632953644, -0.02391183376312256, -0.030604101717472076, 0.008744425140321255, 0.0062012444250285625, -0.019226154312491417, -0.06654196977615356, 0.015261747874319553, 0.0133421765640378, 0.00031115702586248517, -0.03837903216481209, 0.01389097049832344, -0.006151710636913776, -0.016190852969884872, -0.0006221572984941304, 0.023233860731124878, 0.011779648251831532, -0.04565407708287239, -0.0008539786213077605, -0.016862327232956886, 0.033465441316366196, 0.024116002023220062, -0.024621104821562767, -0.03438469022512436, 0.011165285483002663, 0.032041940838098526, -0.021838141605257988, 0.03340648487210274, -0.011534401215612888, 0.029355688020586967, 0.03630291298031807, -0.015560242347419262, 0.011608929373323917, 0.02569614350795746, 0.013816500082612038, -0.06796122342348099, 0.04509451240301132, -0.007411142811179161, -0.01855507120490074, -0.0004913398297503591, 0.008464328944683075, 0.0344240628182888, -0.009068472310900688, -0.040071386843919754, -0.009907249361276627, 0.004836720414459705, 0.02947678416967392, 0.02772100828588009, 0.04083435237407684, 0.009934700094163418, 0.007236739620566368, 0.03550399839878082, -0.010371611453592777, 0.0016419297317042947, -0.013490607962012291, 0.004963058512657881, 0.020114324986934662, 0.030515236780047417, -0.044690825045108795, -0.022471608594059944, -0.016025634482502937, 0.005246938671916723, -0.000961273442953825, -0.0027406001463532448, 0.01645161397755146, -0.003134198021143675, -0.019512232393026352, -0.0013432599371299148, -0.0316682904958725, -0.04076208174228668, 0.032295867800712585, -0.016572415828704834, -0.028100358322262764, 0.012039109133183956, 0.026408441364765167, 0.0295528806746006, 0.02933339588344097, -0.030469004064798355, -0.05447564646601677, -0.035112302750349045, 0.036493755877017975, 0.0062155346386134624, -0.723410964012146, 0.049980852752923965, 0.033118270337581635, 0.0064483280293643475, -0.012397044338285923, 0.0005580342840403318, -0.04268363490700722, -0.090152308344841, 0.06099698320031166, -0.037466634064912796, -0.009161040186882019, 0.004536510910838842, 0.02621791698038578, -0.025167951360344887, -0.16159211099147797, 0.008790630847215652, 0.022449247539043427, -0.03704758733510971, 0.00659923953935504, -0.07869014143943787, -0.007483740337193012, -0.015615520998835564, 0.0254527498036623, -0.024565087631344795, -0.01041739247739315, -0.014908761717379093, 0.053242314606904984, -0.02757398784160614, 0.013679598458111286, -0.03592604771256447, -0.02901599369943142, -0.033242713660001755, 0.018963031470775604, -0.02708645537495613, -0.0022854479029774666, -0.016438744962215424, -0.023610947653651237, -0.008900837041437626, 0.0007468771073035896, -0.014244122430682182, -0.005053380969911814, 0.09242809563875198, -0.011175067164003849, 0.028849652037024498, -0.020103134214878082, -0.0774155706167221, 0.014662282541394234, 0.03758082538843155, 0.01056104339659214, 0.018141478300094604, 0.004249155055731535, 0.008989978581666946, -0.048224180936813354, 0.005501713138073683, -0.027458876371383667, 0.04953726381063461, -0.02592974528670311, -0.02510792762041092, 0.014651221223175526, -0.05696415528655052, 0.0990077555179596, -0.03580901399254799, -0.009076593443751335, 0.014648576267063618, 0.01585194282233715, 0.0031883951742202044, 0.02152062952518463, -0.03420904651284218, -0.01671396940946579, -0.03349573165178299, 0.05441536381840706, 0.009206750430166721, 0.0009060743032023311, 0.017128046602010727, 0.02248063124716282, 0.08571243286132812, 0.006619016639888287, 0.005048224236816168, 0.025560559704899788, 0.010621224530041218, 0.03134305030107498, -0.03717535361647606, -0.0047188978642225266, 0.017248019576072693, -0.02087998576462269, -0.004864026326686144, -0.033183202147483826, 0.011387995444238186, 0.05571609362959862, -0.02756722830235958, -0.011252609081566334, 0.013212359510362148, -0.0398319736123085, -0.008801698684692383, 0.023348933085799217, 0.012485031969845295, -0.0288934838026762, 0.013075500726699829, -0.023967856541275978, 0.02294921688735485, 0.035590097308158875, 0.05370105430483818, -0.05443383753299713, -0.0067819408141076565, -0.02571907453238964, -0.013299120590090752, -0.035441961139440536, 0.03242989629507065, 0.011898577213287354, 0.035903021693229675, 0.010319323278963566, 0.036474354565143585, 0.017367662861943245, 0.028596332296729088, -0.00392181659117341, -0.010078608058393002, -0.009102673269808292, 0.01669410988688469, -0.01271507516503334, 0.03721829876303673, -0.0033143965993076563, 0.0053446609526872635, -0.021032676100730896, 0.0038706460036337376, -0.01594540849328041, 0.0076245651580393314, -0.03335675597190857, -0.029007550328969955, 0.009731240570545197, 0.009813249111175537, 0.026320038363337517, 0.008397960104048252, 0.01193604338914156, -0.01210549846291542, -0.02027355693280697, -0.03472243249416351, 0.005647755693644285, 0.029901932924985886, -0.03314487263560295, -0.031211066991090775, 0.007565952837467194, 0.03376330807805061, 0.04191206768155098, -0.03501250222325325, -0.00945955142378807, -0.029086850583553314, 0.00021361267135944217, -0.009715300984680653, -0.018144454807043076, 0.00817896518856287, -0.024071790277957916, 0.005298272240906954, -0.03403734415769577, -0.030542075634002686, -0.026339996606111526, 0.029550019651651382, -0.03843849152326584, -0.002932529663667083, -0.038182493299245834, 0.019305581226944923, 0.005823551677167416, 0.005167664960026741, -0.034143295139074326, -0.007297220174223185, -0.028276534751057625, 0.009492923505604267, 0.09181998670101166, -0.002737307921051979, 0.009362038224935532, 0.019764624536037445, -0.04695770889520645, 0.09877237677574158, 0.06857520341873169, -0.010206594131886959, -0.02630007080733776, -0.02218206785619259, 0.02517954632639885, 0.010195115581154823, -0.004452789667993784, 0.03330954536795616, 0.03667016699910164, -0.002140727825462818, -0.0027986548375338316, -0.019514575600624084, -0.02467435412108898, -0.006857725791633129, -0.035954490303993225, 0.001157983555458486, 0.010107404552400112, 0.02416033111512661, -0.00827929936349392, 0.02372407168149948, -0.01988592930138111, 0.005561378784477711, -0.13592998683452606, 0.0010525216348469257, -0.027079110965132713, -0.04417426884174347, 0.01956019550561905, 0.009517453610897064, -0.010299097746610641, 0.022585753351449966, -0.023238275200128555, 0.009026971645653248, -0.03052825853228569, 0.017246481031179428, 0.037423331290483475, -0.005584127269685268, -0.005500560160726309, 0.016084283590316772, -0.024341728538274765, 0.05004560202360153, 0.040337953716516495, -0.04513762146234512, 0.014430333860218525, 0.0018014527158811688, -0.0013214477803558111, 0.016018139198422432, -0.039687879383563995, -0.03240526467561722, 0.09242105484008789, 0.009267939254641533, 0.025185737758874893, 0.01675095222890377, 0.009192817844450474, 0.006052776239812374, -0.0011536118108779192, -0.03454437851905823, 0.013807956129312515, 0.1253250390291214, -0.013222324661910534, -0.005432587116956711, -0.005076639819890261, -0.02589392103254795, -0.01468055322766304, 0.029781552031636238, -0.019871609285473824, 0.03212330862879753, -0.03459027782082558, -0.01828559674322605, -0.021286072209477425, -0.017216410487890244, 0.019827423617243767, 0.009406271390616894, 0.000876918260473758, 0.010098577477037907, 0.01954353041946888, 0.049981739372015, -0.012543430551886559, -0.009900071658194065, 0.010634014382958412, -0.011177988722920418, 0.021585732698440552, 0.01682884991168976, -0.004464026540517807, 0.008922670036554337, 0.0013542802771553397, 0.04957123473286629, -0.011684070341289043, -0.017570309340953827, 0.03656087815761566, 0.02331305854022503, 0.001436342136003077, -0.0343707911670208, -0.022281425073742867, 0.007957116700708866, 0.033222801983356476, 0.03625232353806496, 0.016592657193541527, 0.018603861331939697, 0.011347517371177673, 0.01957123726606369, 0.04113222658634186, 0.046121906489133835, -0.0022929320111870766, 0.016904663294553757, -0.018557393923401833, 0.0166187547147274, 0.04009866341948509, 0.03216003626585007, 0.02940535917878151, 0.0199104193598032, 0.024269821122288704, 0.0054918378591537476, 0.0983755812048912, -0.0331866592168808, 0.005157677456736565, -0.0014421085361391306, -0.021916819736361504, 0.04308468848466873, 0.0021009657066315413, -0.048449765890836716, 0.015130113810300827, 0.003777915146201849, 0.011070817708969116, -0.012897426262497902, 0.005770217161625624, 0.024336358532309532, -0.021595096215605736, -0.04987045004963875, 0.01366752665489912, 0.0054285237565636635, -0.025217754766345024, 0.0031486384104937315, -0.05758152902126312, -0.019981445744633675, 0.005793343298137188, -0.0031918748281896114, -0.0027462937869131565, 0.019523872062563896, 0.0009617586038075387, -0.046589046716690063, -0.014474228024482727, -0.013061139732599258, -0.033738985657691956, 0.00817074440419674, 0.05630903318524361, 0.0021445087622851133, 0.016129519790410995, 0.042166367173194885, -0.007851673290133476, -0.006206936668604612, -0.021921128034591675, -0.009595335461199284, 0.025778070092201233, -0.015114947222173214, 0.014435471035540104, -0.0035971435718238354, 0.008622578345239162, -0.00989049207419157, -0.00040162226650863886, -0.03878065571188927, -0.023942360654473305, -0.024929963052272797, 0.009157990105450153, -0.007103538606315851, 0.04282687231898308, 0.012099622748792171, 0.014189760200679302, -0.0018507374916225672, -0.016197457909584045, -0.05576727166771889, -0.0028458847664296627, -0.022536123171448708, -0.05089329928159714, 0.0019077083561569452, -0.019712114706635475, -0.01215920690447092, -0.00858595222234726, 0.04485935717821121, 0.036845095455646515, -0.01163542177528143, 0.009444479830563068, 0.03787963464856148, -0.0035606324672698975, 0.023029157891869545, -0.02839764952659607, -0.013131772167980671, -0.019699951633810997, -0.0003447371709626168, -0.013293489813804626, -0.031459856778383255, -0.02446313388645649, -0.027221808210015297, 0.03463547304272652, 0.006658816244453192, -0.03473907709121704, -0.033393051475286484, 0.002355840289965272, -0.005386143457144499, -0.008775263093411922, -0.01592782884836197, -0.0069448151625692844, 0.0167456716299057, 0.04944247752428055, 0.00924029853194952, -0.025206493213772774, -0.00812359806150198, -0.03190092742443085, 0.06038760021328926, 0.023148538544774055, -0.019096167758107185, -0.013492745347321033, -0.007536614779382944, -0.027696793898940086, -0.020360639318823814, -0.01911020837724209, -0.003652525832876563, -0.016740530729293823, 0.04090915992856026, 0.020000778138637543, 0.05291207879781723, 0.060914747416973114, -0.033816419541835785, -0.04768993332982063, -0.017012711614370346, -0.027694299817085266, 0.006100979167968035, 0.023735668510198593, 0.00226080184802413, 0.036687370389699936, -0.07430973649024963, -0.024137217551469803, -0.006822190713137388, 0.00756458006799221, 0.03342881426215172, -0.01236827950924635, -0.00016500747005920857, -0.00994571577757597, -0.015337999910116196, -0.002646353328600526, 0.04395749792456627, 0.11052598804235458, -0.012579129077494144, -0.015063229016959667, -0.0035240082070231438, 0.006523562129586935, 0.031079670414328575, -0.005635326262563467, -0.010728334076702595]\"\n./train/magpie/n01582220_36701.JPEG,magpie,\"[0.0038012422155588865, 0.008829733356833458, 0.020646171644330025, -0.04830809310078621, -0.019023820757865906, 0.04931731894612312, 0.055902738124132156, 0.007528930902481079, 0.028065888211131096, 0.0060812802985310555, 0.019125794991850853, 0.014628889970481396, -0.006963544059544802, -0.009189363569021225, 0.0010980211663991213, 0.03102555312216282, 0.02353353425860405, 0.05442259460687637, 0.012164871208369732, -0.013217187486588955, -0.0055826022289693356, -0.014750157482922077, 0.010403093881905079, -0.03466472402215004, -0.04512110352516174, -0.0017288874369114637, 0.03307700157165527, -0.015622124075889587, -0.002773246495053172, 0.02624332532286644, 0.04720228910446167, 0.01741199940443039, -0.012699568644165993, 0.03761204704642296, 0.03718610852956772, 1.3609343113785144e-05, 0.012340844608843327, -0.008588333614170551, 0.048535775393247604, 0.11929484456777573, 0.03455844521522522, 0.043138422071933746, 0.042972393333911896, -0.06344597786664963, 0.05238969996571541, -0.11022157222032547, 0.017935018986463547, 0.045824095606803894, 0.0427490659058094, 0.029981257393956184, 0.004151367116719484, 0.013719766400754452, 0.003286851104348898, -0.06746656447649002, -0.023563504219055176, 0.005529319401830435, 0.011819425970315933, 0.04143655672669411, -0.002309212228283286, 0.015865366905927658, 0.1113843023777008, 0.0009842469589784741, -0.04159742221236229, 0.02856174297630787, -0.05456705391407013, -0.06104112043976784, 0.01771613582968712, 0.09048959612846375, 0.029330633580684662, 0.001685615163296461, -0.01437695324420929, 0.013745742850005627, 0.0021897521801292896, 0.01141362451016903, -0.026531023904681206, -0.031209144741296768, 0.05705752223730087, 0.053702160716056824, -0.03551480919122696, -0.10166356712579727, -0.020382005721330643, 0.013564295135438442, 0.018996121361851692, -0.027827655896544456, 0.03834344446659088, -0.01024806872010231, 0.04985499754548073, 0.020703226327896118, 0.07269089668989182, -0.045629918575286865, 0.040915753692388535, -0.0387125238776207, -0.5435478091239929, -0.008902394212782383, 0.04032127186655998, 0.0072176456451416016, 0.02241494134068489, -0.0022947443649172783, -0.1228312999010086, 0.0371415801346302, 0.00516860093921423, 0.02466612309217453, -0.030870800837874413, -0.00864415243268013, -0.012650665827095509, 0.016807379201054573, -0.16414648294448853, 0.02037021331489086, -0.00985594093799591, -0.046918898820877075, -0.006921252701431513, -0.052688341587781906, -0.0021941408049315214, -0.024030527099967003, -0.021091556176543236, -0.026609396561980247, 0.017425402998924255, 7.016147719696164e-05, 0.09554189443588257, -0.007886726409196854, 0.09921900182962418, 0.024939415976405144, -0.02010837197303772, 0.033359453082084656, 0.03570246696472168, 0.005649589002132416, 0.003035628702491522, 0.017825819551944733, -0.008440401405096054, 0.0027367710135877132, -0.018655823543667793, -0.021022174507379532, -0.005781305022537708, 0.08116918802261353, 0.009028543718159199, -0.018803369253873825, -0.007247240282595158, -0.04883604124188423, 0.04127276688814163, 0.052563074976205826, 0.009775674901902676, 0.01850331760942936, 0.04160256311297417, 0.04519013687968254, 0.023913705721497536, 0.020633256062865257, 0.006027385592460632, 0.02262905240058899, 0.007711239159107208, 0.011989496648311615, 0.012140489183366299, -0.018412292003631592, 0.0290160421282053, -0.06383804231882095, 0.07620824873447418, 0.02716846391558647, 0.005918459501117468, -0.08787857741117477, -0.004122466780245304, -0.0037063295021653175, -0.04338490217924118, -0.02313442900776863, 0.010914457030594349, -0.04350244998931885, -0.0363382063806057, -0.043969616293907166, -0.029420552775263786, 0.011797388084232807, -0.002091948874294758, 0.046075332909822464, -0.003969493787735701, -7.564237603219226e-05, -0.02560023032128811, -0.04885466396808624, -0.05058823898434639, -0.012737504206597805, -0.0023563839495182037, 0.017143191769719124, 0.004035729914903641, -0.00754529656842351, 0.030006837099790573, -0.018154267221689224, -0.002684615086764097, -0.010481675155460835, -0.03324431926012039, -0.018459944054484367, 0.02228817716240883, -0.052662547677755356, 0.013151997700333595, 0.05299370735883713, 0.00879918597638607, 0.02168431505560875, 0.07412309944629669, -0.012722887098789215, 0.02957170270383358, 0.0018413279904052615, -0.008102186024188995, -0.009343165904283524, -0.0069299316965043545, 0.05598539113998413, -0.0013221626868471503, 0.01973859593272209, 0.031541962176561356, 0.029200991615653038, -0.003070338163524866, -0.0192895345389843, -0.04508843645453453, -0.023122617974877357, -0.014171660877764225, 0.05681987851858139, -0.04455002397298813, 0.039436616003513336, 9.057568240677938e-05, 0.0480821430683136, -0.038364604115486145, -0.014147095382213593, -0.010897820815443993, 0.009971593506634235, 0.08952117711305618, -0.07730120420455933, 0.048760782927274704, 0.03983088210225105, -0.025183262303471565, 0.010649451054632664, 0.036291759461164474, 0.061445269733667374, -0.009343947283923626, 0.02784675359725952, 0.01028990838676691, 0.040325552225112915, -0.04212355241179466, -0.01449439488351345, 0.0422515794634819, 0.001385127892717719, -0.0101992879062891, -0.024595322087407112, 0.0006124246865510941, 0.03408167138695717, 0.005558823235332966, 0.004193051718175411, 0.010340132750570774, 0.019430963322520256, -0.025288226082921028, -0.023421885445713997, 0.05472584441304207, 0.04331621527671814, 0.006466955412179232, -0.02375073917210102, -0.019622275605797768, -0.009841563180088997, -0.010652575641870499, 0.04637102037668228, 0.03708931803703308, -0.05316415801644325, -0.004034750163555145, 0.022062471136450768, 0.0065296003594994545, 0.01845461316406727, 0.12379566580057144, 0.008786496706306934, -0.018533779308199883, 0.04285670071840286, -0.020692680031061172, -0.0317535325884819, 0.0038173175416886806, -0.06089308112859726, 0.05343691259622574, 0.0200953409075737, 0.06502945721149445, 0.012514149770140648, 0.0005179984727874398, -0.0026344838552176952, 0.034452129155397415, -0.01855549030005932, 0.007787375245243311, -0.007969606667757034, 0.017475871369242668, -0.00778370862826705, 0.010692761279642582, 0.010501943528652191, 0.013878819532692432, 0.04780464619398117, -0.06428501009941101, -0.014909631572663784, -0.016006354242563248, 0.0006635376485064626, -0.06591572612524033, -0.02444431185722351, -0.05609367415308952, -0.00838969461619854, -0.015002069063484669, -0.08871480077505112, 0.0051044560968875885, -0.02827935479581356, 0.0006605547969229519, -0.03975808620452881, 0.10316620767116547, -0.005599030293524265, 0.0184513907879591, 0.011479378677904606, -0.022410107776522636, 0.0193896796554327, -0.006494097411632538, 0.002491406397894025, 0.03158826008439064, 0.06271207332611084, 0.029619600623846054, 0.0073328400030732155, 0.04903588816523552, 0.026041777804493904, 0.0315118171274662, 0.021085556596517563, 0.08105088770389557, -0.018438376486301422, 0.0069531966000795364, 0.01666434109210968, -0.04530351608991623, 0.042550478130578995, -0.016338881105184555, -0.07646804302930832, 0.029624473303556442, 0.1292826384305954, 0.02739754319190979, 0.0012455449905246496, 0.010942252352833748, -0.01641077548265457, 0.007675982546061277, -0.01769135147333145, -0.04802084341645241, -0.02304070256650448, 0.0033672533463686705, 0.00825160276144743, -0.06401559710502625, 0.059513770043849945, -0.03077632375061512, 0.076617032289505, -0.0017090064939111471, -0.01791561208665371, -0.03797120973467827, 0.03662492334842682, -0.05342810973525047, -0.056662820279598236, -0.0028465166687965393, 0.033268749713897705, -0.012507878243923187, -0.018182365223765373, 0.032629769295454025, 0.037882447242736816, 0.02650102972984314, 0.006212768144905567, -0.04098347947001457, 0.013448775745928288, 0.061415623873472214, -0.03419099375605583, -0.037280239164829254, 0.030320342630147934, -0.0013534536119550467, -0.1208607479929924, 0.001136938575655222, 0.010947097092866898, 0.06483475118875504, 0.005021937191486359, -0.019216354936361313, 0.046178240329027176, -0.03859354928135872, -0.00996895506978035, -0.003905697027221322, -0.11044671386480331, -0.03436971455812454, 0.0333179347217083, -0.011242331936955452, 0.03485031798481941, 0.03381991386413574, -0.02233007736504078, 0.024635639041662216, 0.01286420039832592, 0.06664509326219559, 0.005412530619651079, -0.052761565893888474, 0.02002304419875145, -0.04996877163648605, 0.0006841456633992493, 0.034085117280483246, -0.059960924088954926, -0.02526191994547844, 0.0549573190510273, -0.05149875953793526, 0.008835929445922375, -0.005569571629166603, 0.01757555454969406, -0.020466281101107597, -0.03788890317082405, -0.0016812199028208852, 0.02783297747373581, -0.031176025047898293, -0.03263973072171211, -0.026436345651745796, 0.015497738495469093, -0.08009810000658035, -0.06416580826044083, -0.029710553586483, 0.001785449800081551, -0.02218662016093731, -0.05620833858847618, 0.0017392609734088182, 0.039619866758584976, 0.03526095673441887, 0.025005077943205833, 0.052641499787569046, -0.011920124292373657, 0.03823254257440567, 0.018175706267356873, -0.012777084484696388, 0.020028462633490562, -0.06857515871524811, -0.005736943334341049, 0.030978620052337646, -0.026738960295915604, 0.007407179102301598, -0.031020114198327065, 0.011410881765186787, 0.007515931501984596, 0.03313516825437546, -0.04033176600933075, 0.008242391981184483, -0.007210214622318745, -0.049588851630687714, -0.01359749585390091, 0.02291884459555149, 0.00872005894780159, 0.05653131380677223, 0.04028964787721634, 0.060668982565402985, -0.022726956754922867, -0.035649076104164124, -0.061943620443344116, 0.04338115081191063, -0.007866333238780499, -0.0467379130423069, -0.01836193911731243, 0.023799307644367218, -0.0147122573107481, -0.020874053239822388, -0.04931187257170677, 0.024256214499473572, -0.003682763548567891, 0.001679842360317707, -0.02432132698595524, -0.02871464379131794, -0.008244635537266731, -0.004117252305150032, -0.04170014336705208, -0.02373519167304039, -0.024100132286548615, -0.014188142493367195, 0.009565561078488827, 0.05605604127049446, -0.029116315767169, -0.012036141008138657, 0.01248566061258316, 0.001943450071848929, -0.008608868345618248, 0.012824096716940403, -0.007605184800922871, 0.016188932582736015, 0.01598120667040348, 0.018185630440711975, -0.03446528688073158, 0.00805705413222313, -0.009521448984742165, -0.024141110479831696, 0.046275123953819275, -0.026368096470832825, -0.018588611856102943, -0.01909104734659195, 0.003027021884918213, -0.023859476670622826, 0.003697426524013281, 0.03303392976522446, -0.0213956069201231, -0.034134913235902786, -0.021102532744407654, -0.04143386706709862, 0.011398518458008766, 0.058912649750709534, 0.031097378581762314, -0.0004001560155302286, 0.026465142145752907, -0.025955846533179283, -0.025454100221395493, -0.027968842536211014, -0.021172448992729187, -0.0026222383603453636, -0.07088986039161682, 0.039667051285505295, -0.010684865526854992, 0.0073723215609788895, -0.007927323691546917, -0.03018614463508129, -0.019112585112452507, -0.04693733528256416, -0.029228689149022102, -0.018803805112838745, 0.04986631125211716, 0.042195871472358704, -0.04359305277466774, -0.021035034209489822, 0.04523124545812607, 0.006032581441104412, 0.04899601638317108, -0.007983697578310966, -0.025190232321619987]\"\n./train/magpie/n01582220_9174.JPEG,magpie,\"[0.024160467088222504, 0.007093454245477915, 0.019073106348514557, -0.02497195266187191, 0.011849849484860897, -0.010847390629351139, 0.03934988006949425, -0.0002885344729293138, 0.07353007793426514, 0.039961736649274826, 0.00034936057636514306, 0.05012034252285957, -0.017881684005260468, -0.02358383499085903, -0.0010736872209236026, 0.0038277709390968084, 0.13183367252349854, 0.058457739651203156, -0.012599710375070572, -0.0015261288499459624, -0.01837468519806862, -0.004037331324070692, -0.012911153957247734, -0.04344477131962776, -0.026901183649897575, 0.008952738717198372, 0.007692967541515827, -0.0160780418664217, 0.03191006928682327, -0.04048678278923035, 0.05708583444356918, 0.06406109780073166, -0.002853631041944027, 0.03014311008155346, 0.010645010508596897, -0.041936565190553665, -0.01490311324596405, -0.0117448465898633, 0.024436650797724724, 0.15548887848854065, 0.012371374294161797, -0.0218665711581707, 0.04407937452197075, -0.034821994602680206, 0.08314365148544312, -0.01915360800921917, 0.034689173102378845, -0.001920580747537315, 0.008992938324809074, -0.01130161713808775, 0.004737488459795713, 0.044334378093481064, -0.011102725751698017, -0.06634591519832611, -0.016643192619085312, -0.018466774374246597, -0.00509846955537796, 0.005855091847479343, 0.027209296822547913, 0.0012536841677501798, 0.13288940489292145, 0.007361594587564468, 0.02211327664554119, 0.03303981199860573, -0.02314656972885132, -0.029837939888238907, 0.012309645302593708, 0.041593510657548904, -0.05628880485892296, -0.008294855244457722, -0.016773955896496773, -0.012951894663274288, -0.002307925373315811, 0.007505937945097685, -0.00012787558080162853, -0.020838387310504913, 0.011492602527141571, -0.0061366925947368145, -0.06358571350574493, -0.09156710654497147, -0.032094694674015045, 0.017406396567821503, 0.02179970033466816, -0.03566784784197807, 0.027256669476628304, -0.003827367676422, -0.015556535683572292, 0.021336140111088753, 0.04989886283874512, -0.020778963342308998, 0.0033111823722720146, -0.042029377073049545, -0.5591980814933777, -0.018316512927412987, 0.007089986000210047, -0.012013779953122139, -0.03538649156689644, -0.0019055482698604465, -0.10490685701370239, 0.0464041642844677, 0.030099300667643547, 0.002691939240321517, 0.0024128840304911137, -0.01875971630215645, -0.014639213681221008, 0.006653680000454187, -0.07801038026809692, 0.04803793504834175, -0.0001672878861427307, -0.07044114172458649, 0.031514186412096024, -0.05908753350377083, 0.03760094195604324, 0.005185714457184076, -0.001722776680253446, -0.025217993184924126, 0.034776315093040466, -0.0391242690384388, 0.015164596028625965, -0.01508896704763174, 0.049217648804187775, -0.03208686783909798, -0.0005495739751495421, -0.004294337704777718, 0.001891521387733519, -0.02055932581424713, 0.036526575684547424, 0.04197143763303757, 0.012211252935230732, -0.028711138293147087, -0.011292953044176102, -0.0064398376271128654, -0.07223217189311981, 0.08537102490663528, -0.0015733791515231133, -0.005380399990826845, -0.025686059147119522, -0.04125167429447174, 0.02835271507501602, 0.03292396292090416, 0.030288226902484894, 0.014428142458200455, 0.03312288597226143, 0.012942712754011154, -0.0005749272531829774, 0.018235716968774796, 0.001226428896188736, -0.02465469017624855, -0.03620892018079758, -0.03566613048315048, -0.02746814303100109, 0.004429561085999012, 0.07448557764291763, -0.06726329028606415, 0.04413578659296036, 0.050667859613895416, 0.0360848605632782, -0.0015272214077413082, -0.020729070529341698, -0.014267168939113617, -0.04422175884246826, -0.042066022753715515, 0.03461253643035889, -0.06393881142139435, 0.023546477779746056, 0.005863412749022245, 0.020660419017076492, 0.048475876450538635, 0.044789303094148636, 0.07250277698040009, -0.0014954545767977834, 0.021231871098279953, -0.004137168172746897, -0.012521357275545597, -0.01960640586912632, -0.015301333740353584, 0.046174705028533936, 0.011521166190505028, 0.030773833394050598, -0.01371778640896082, -0.000434816291090101, -0.02249135635793209, 0.013185111805796623, -0.004227050114423037, -0.02363690175116062, -0.007175542414188385, 0.013524675741791725, -0.01083192229270935, 0.025601565837860107, 0.052843254059553146, 0.003497722325846553, -0.004094867035746574, 0.07059191167354584, 0.032397981733083725, 0.08016367256641388, 0.0007817231235094368, -0.03284246847033501, -0.013202344998717308, -0.06313006579875946, 0.08638224005699158, -0.03140845149755478, 0.008022040128707886, 0.06664121150970459, 0.026024537160992622, 0.028139924630522728, 0.00692152651026845, -0.043695807456970215, -0.07444547861814499, -0.009171117097139359, 0.006991663482040167, -0.02140534110367298, 0.0829557478427887, -0.014280297793447971, 0.007290803827345371, -0.049052126705646515, -0.026399852707982063, -0.017196109518408775, 0.008392718620598316, 0.10099492967128754, -0.00890007708221674, 0.06359001994132996, -0.016995543614029884, -0.0025605240371078253, 0.03160478547215462, -0.03740058094263077, 0.03253684565424919, -0.030784206464886665, 0.03217415139079094, 0.01682494767010212, 0.03899560123682022, -0.08566401153802872, -0.042682331055402756, 0.011642749421298504, 0.02517121098935604, 0.003639258909970522, -0.012818302027881145, 0.0043023740872740746, 0.03459515422582626, -0.01299612782895565, 0.021098019555211067, 0.027451282367110252, -0.00040464921039529145, -0.007524039130657911, -0.01076809037476778, 0.015606734901666641, 0.04350476711988449, 0.0257802102714777, -0.05857046693563461, -0.0652090385556221, 0.005292191170156002, 0.014034935273230076, 0.07533488422632217, 0.06740040332078934, 0.01025830116122961, -0.0005542162689380348, -0.022829405963420868, -0.02116856910288334, 0.01948942057788372, 0.0359378457069397, 0.02264237403869629, -0.029865985736250877, 0.019094198942184448, -0.020829902961850166, 0.04902824014425278, 0.037194158881902695, -0.06069646775722504, 0.024780992418527603, 0.012714999727904797, 0.0691947415471077, 0.030716214329004288, 0.001551494817249477, -0.007465094327926636, 0.036070965230464935, -0.035359229892492294, 0.02511664852499962, -0.02369074709713459, -0.001989488024264574, -0.018030859529972076, 0.00284755602478981, -0.013539100997149944, 0.02853364311158657, 0.01657368429005146, -0.07989802956581116, -0.011099009774625301, -0.004972872324287891, 0.01921026036143303, 0.06202762573957443, -0.03198898583650589, -0.07197672128677368, 0.03638819605112076, 0.027367044240236282, -0.016812097281217575, -0.024425072595477104, -0.0011781038483604789, 0.0018834329675883055, -0.015112644992768764, 0.052254773676395416, -0.0238084364682436, 0.057045016437768936, 0.001644094125367701, -0.0623043030500412, 0.026133863255381584, 0.0060457573272287846, 0.01579425111413002, 0.03945454955101013, 0.0230529997497797, 0.05572323873639107, 0.04560920596122742, 0.05280375853180885, -0.010556241497397423, 0.04519740864634514, -0.0014746158849447966, 0.08513842523097992, 0.0003461302840150893, 0.016469011083245277, 0.024240294471383095, -0.010911987163126469, 0.028248528018593788, 0.00694246543571353, -0.048344653099775314, 0.01788283884525299, 0.17764800786972046, -0.0012313094921410084, 0.027182232588529587, -0.0058734230697155, -0.0203128382563591, -0.009332248009741306, -0.028635213151574135, -0.024131502956151962, -0.02534724585711956, -0.008746733888983727, 0.044231072068214417, -0.026596570387482643, 0.03965161740779877, -0.021966461092233658, 0.005577948410063982, -0.009413330815732479, -0.0031762050930410624, -0.018551232293248177, 0.0404222197830677, -0.060946498066186905, -0.050404757261276245, -0.012903100810945034, 0.034003790467977524, 0.007958239875733852, 0.011308015324175358, 0.01504530105739832, -0.007592208683490753, 0.014820147305727005, 0.0123501131311059, 0.0009878387209028006, -0.009952067397534847, 0.026920432224869728, -0.027846092358231544, -0.03655385226011276, 0.020822983235120773, 0.006281594280153513, -0.1266481727361679, -0.025199538096785545, 0.01657397672533989, 0.05939395725727081, -0.027491329237818718, 0.01870228722691536, 0.0181090347468853, -0.03167564421892166, -0.002583073452115059, -0.007969173602759838, -0.043534550815820694, -0.03577686473727226, 0.033099088817834854, -0.013704787939786911, 0.002888633171096444, 0.01950657367706299, 0.018055617809295654, 0.00822446122765541, 0.027875656262040138, 0.08280688524246216, 0.0031817611306905746, -0.051395900547504425, 0.016961656510829926, -0.05867300182580948, -0.01557796448469162, 0.05602820962667465, -0.04760974273085594, -0.04100887104868889, 0.049678102135658264, -0.010309642180800438, -0.0009282982791773975, -0.01718190312385559, -0.08685006946325302, -0.023924613371491432, -0.028190841898322105, 0.023116661235690117, 0.0043211448937654495, -0.014335491694509983, -0.010885187424719334, -0.04996220022439957, 0.006016165018081665, -0.0764925628900528, -0.0410352386534214, -0.021604374051094055, -0.0014018719084560871, -0.038938671350479126, -0.004331620410084724, -0.0006884632748551667, 0.010979775339365005, 0.037739988416433334, 0.027785243466496468, 0.01817951165139675, 0.023051468655467033, 0.01945107989013195, 0.016077203676104546, 0.02433989942073822, 0.01831074431538582, -0.016537997871637344, 0.006579318083822727, 0.004825262352824211, -0.02433966100215912, -0.004908944945782423, -0.011562207713723183, 0.02305513620376587, 0.015940256416797638, -0.024168238043785095, -0.007666043471544981, 0.0014097335515543818, -0.01776377111673355, 0.038612835109233856, 0.033639587461948395, 0.10767996311187744, -0.003733118763193488, 0.049429114907979965, -0.008152573369443417, 0.07034875452518463, -0.016688473522663116, 0.007732133846729994, -0.0533306859433651, 0.0024239318445324898, 0.01718831993639469, -0.015078617259860039, -0.029803097248077393, -0.0032651452347636223, 0.015175482258200645, -0.04272256791591644, -0.04642597958445549, 0.031953390687704086, -0.0026879359502345324, -0.02597433514893055, -0.007914516143500805, 0.0007166499854065478, -0.04002115875482559, -0.029179958626627922, -0.08463072776794434, -0.005967558361589909, -0.0011628874344751239, -0.010588291101157665, -0.006620184052735567, 0.05052255466580391, 0.011477751657366753, -0.016957247629761696, -0.028367355465888977, -0.02144753746688366, 0.01822798326611519, 0.04277347773313522, 0.03586737439036369, -0.01965181902050972, -0.03424927592277527, 0.016632530838251114, -0.01004241593182087, -0.022837502881884575, -0.01189753133803606, -0.014798690564930439, -0.025130676105618477, -0.031084910035133362, -0.00337382429279387, -0.007632450666278601, -0.0041726198978722095, 0.014692491851747036, 0.007099108770489693, 0.001522693200968206, -0.007602477911859751, -0.024402230978012085, -0.018283359706401825, 0.008135149255394936, 0.0558716282248497, 0.08308357745409012, 0.03957244008779526, 0.007914732210338116, 0.014765379019081593, -0.005076931789517403, -0.026593996211886406, -0.020071789622306824, 0.031864989548921585, 0.018167415633797646, -0.07646191865205765, 0.05492674931883812, 0.013440031558275223, 0.03392993286252022, 0.02309064194560051, -0.0681287944316864, -0.004298768937587738, -0.05320064350962639, -0.01815691776573658, 0.02020857483148575, 0.04271760582923889, 0.049738023430109024, -0.06704781949520111, -0.04431435093283653, 0.004337422549724579, 0.0046394383534789085, 0.04796897992491722, 0.004748394712805748, -0.03285367414355278]\"\n./train/magpie/n01582220_7366.JPEG,magpie,\"[-0.02371249347925186, -0.009645716287195683, -0.0016209741588681936, 0.0009060637094080448, 0.03450147062540054, 0.017253641039133072, 0.045869432389736176, 0.00015077926218509674, 0.01883888430893421, 0.007792784366756678, -0.011369054205715656, 0.003610048210248351, -0.03737921640276909, -0.01980692148208618, -0.01555605698376894, 0.03726719692349434, 0.018710212782025337, 0.05424460396170616, 0.002905221888795495, -0.008288638666272163, 0.012730400077998638, -0.0002417399373371154, 0.004015324171632528, -0.05399547144770622, -0.02729376219213009, 0.007152630016207695, 0.017088813707232475, -0.0007526837289333344, 0.023802585899829865, 0.04117068275809288, 0.002698026830330491, 0.03441814333200455, -0.02958955056965351, 0.041378241032361984, 0.028502514585852623, 0.0066034127958118916, -0.024601560086011887, -0.020483501255512238, 0.021470557898283005, 0.14096757769584656, 0.011897043325006962, 0.03595246002078056, 0.03948592767119408, -0.06017713621258736, 0.06763345748186111, -0.0949864611029625, 0.04709884151816368, 0.008256764151155949, -0.005962083116173744, 0.009331847541034222, 0.0058221472427248955, 0.024431856349110603, 0.01817258633673191, -0.04231194034218788, -0.037667348980903625, 0.027587836608290672, -0.013861940242350101, 0.02033231407403946, -0.013440192677080631, 0.0007481640204787254, 0.09274820983409882, 0.01777949184179306, -0.011011690832674503, 0.043052226305007935, -0.059042878448963165, -0.027257505804300308, 0.05293184146285057, 0.05314425751566887, -0.03803861886262894, -0.010822998359799385, -0.013901042751967907, 0.009247802197933197, -0.008278192952275276, -0.00035889894934371114, -0.0008545722812414169, -0.053942885249853134, 0.02614651992917061, -0.0037872137036174536, -0.05745084211230278, -0.06477154046297073, -0.027296731248497963, -0.008507554419338703, -0.021436680108308792, 0.0030326705891638994, 0.03808005899190903, -0.006414963863790035, 0.0483364574611187, 0.036890286952257156, 0.05692692846059799, -0.05640621483325958, 0.033510297536849976, -0.045481789857149124, -0.5896441340446472, -0.05971495062112808, 0.017108481377363205, -0.018148507922887802, -0.04542689770460129, -0.013390611857175827, -0.10496780276298523, 0.01621687039732933, 0.016685033217072487, 0.002735704416409135, 0.0023957767989486456, -0.010169627144932747, 0.026985839009284973, 0.0031044569332152605, -0.07542374730110168, 0.005354748107492924, -0.016724560409784317, -0.03826900199055672, 0.023078594356775284, -0.07031402736902237, 0.018373822793364525, 0.0016768774949014187, 0.011864947155117989, -0.08081497997045517, 0.0016661698464304209, -0.0550600029528141, 0.06589753925800323, -0.01828802563250065, 0.03755198046565056, 0.030726581811904907, 0.024764368310570717, -0.03181871771812439, 0.01469501107931137, -0.01596648618578911, 0.027697645127773285, 0.018910404294729233, 0.009384779259562492, -0.007583658676594496, -0.014306318014860153, -0.054540760815143585, 0.0020458924118429422, 0.08330405503511429, -0.0012431618524715304, 0.0053216335363686085, -0.025013312697410583, -0.051935646682977676, 0.026648031547665596, 0.050655364990234375, 0.011194187216460705, -0.03311809524893761, 0.04280814900994301, 0.005124401766806841, 0.025355717167258263, 0.005933243315666914, 0.005913678091019392, -0.032133858650922775, -0.0041751740500330925, -0.005216552410274744, -0.0044196234084665775, -0.014219448901712894, 0.03959666192531586, -0.0615244060754776, 0.04761654511094093, 0.004071869887411594, 0.013410443440079689, 0.020280128344893456, -0.013231414370238781, -0.011288641020655632, -0.07747237384319305, -0.04851044341921806, 0.042905233800411224, -0.021356679499149323, 0.026564190164208412, -0.04310188814997673, -0.010483593679964542, 0.049964845180511475, 9.295800737163518e-06, 0.06796199828386307, 0.0266974326223135, 0.012772434391081333, 0.00649450346827507, -0.03917109966278076, -0.032210711389780045, -0.025563716888427734, -0.00806321483105421, 0.010443711653351784, -0.06285403668880463, -0.01832546293735504, 0.013120660558342934, -0.03830739110708237, 0.03909694403409958, 0.035706527531147, 0.012591601349413395, 0.01654517464339733, -0.000490622769575566, -0.009967484511435032, 0.03008981980383396, 0.026224946603178978, 0.011994645930826664, 0.009188218042254448, 0.078854501247406, 0.0388774536550045, 0.044858478009700775, -0.015029014088213444, -0.008711522445082664, -0.031271468847990036, -0.04590999707579613, 0.046848148107528687, -0.018268456682562828, 0.018510906025767326, 0.005675468593835831, 0.030786359682679176, 0.02925882861018181, 0.031498219817876816, -0.006721229758113623, -0.03736579418182373, -0.042268916964530945, 0.03274755924940109, -0.06001751869916916, 0.032222550362348557, -0.039339251816272736, 0.01710750162601471, -0.05827859416604042, -0.055774055421352386, 0.009993472136557102, -0.0017749837134033442, 0.12804384529590607, -0.031546659767627716, 0.04006920009851456, -0.011744220741093159, 0.0068099964410066605, 0.04645772650837898, -0.07127464562654495, 0.03096800670027733, -0.04756840318441391, 0.04281078279018402, -0.014393161050975323, 0.01254145335406065, -0.08580081164836884, -0.051926545798778534, 0.031230712309479713, 0.05752906948328018, -0.010008521378040314, -0.08386486768722534, -0.024363147094845772, 0.04540593922138214, 0.021651364862918854, 0.03286708891391754, -0.011724749580025673, 0.019426435232162476, -0.011646843515336514, 0.019748343154788017, 0.025686245411634445, 0.07704199105501175, 0.009262263774871826, -0.03891934081912041, -0.02029307372868061, 0.0004677810939028859, -0.010666752234101295, 0.05706944316625595, 0.045682694762945175, 0.008713888004422188, -0.02351740002632141, -0.017031611874699593, -0.0408802255988121, 0.0377885103225708, 0.030523139983415604, 0.020501116290688515, -0.02478906698524952, 0.042474500834941864, -0.02438884600996971, -0.05548354610800743, 0.05513571575284004, -0.038919687271118164, 0.06209726259112358, 0.0032807132229208946, 0.0445636548101902, 0.02169184945523739, -0.0038499864749610424, -0.0047645424492657185, 0.0494098998606205, -0.0060448176227509975, 0.008292526938021183, -0.03999287635087967, -0.011831640265882015, -0.026623934507369995, -0.006210496183484793, 0.005779314786195755, 0.012642020359635353, 0.013506862334907055, -0.08722223341464996, 0.03122289851307869, -0.017810843884944916, 0.00032396052847616374, -0.030853301286697388, -0.013738471083343029, -0.015376482158899307, 0.03496458753943443, 0.025028171017766, -0.05438316613435745, 0.03943595290184021, -0.000770176004152745, 0.025169722735881805, -0.007630534470081329, 0.0217487420886755, -0.016348881646990776, -0.004442897159606218, -0.015246191993355751, -0.05783356726169586, 0.003921967465430498, 0.0004141897370573133, 0.032078810036182404, -0.0029484378173947334, 0.044036004692316055, 0.01785258762538433, 0.01599115878343582, 0.05203761160373688, 0.016923654824495316, 0.02243489772081375, -0.002124682068824768, 0.08306946605443954, -0.009397629648447037, 0.0034093570429831743, 0.0314192995429039, -0.021766087040305138, 0.0018191237468272448, -0.0005448040319606662, -0.03754255920648575, 0.0700313076376915, 0.10442429780960083, -0.0074350908398628235, 0.04256679490208626, 0.0006438189884647727, -0.010146372020244598, -0.00042094249511137605, 0.010988553985953331, -0.06122883781790733, -0.01995663344860077, -0.028236834332346916, -0.013168396428227425, -0.04039132967591286, 0.054447926580905914, -0.013779534958302975, 0.029885459691286087, -0.024430057033896446, -0.023661989718675613, -0.02928551845252514, 0.06979049742221832, -0.059790100902318954, -0.05481935665011406, -0.026651544496417046, 0.03734477981925011, -0.03275313600897789, -0.02079956792294979, 0.014755476266145706, 0.026086220517754555, 0.02051837369799614, 0.017664382234215736, -0.0671733170747757, -0.017646262422204018, 0.06474141776561737, -0.016305407509207726, -0.04590162634849548, 0.03963400423526764, 0.014316030777990818, -0.028582798317074776, -0.015106341801583767, 0.01596560887992382, 0.032853227108716965, -0.024650132283568382, 0.046455416828393936, 0.006571703590452671, -0.004508602432906628, -0.031301386654376984, 0.006803995929658413, -0.05042421817779541, -0.051634281873703, 0.045706260949373245, -0.03778461739420891, 0.047002162784338, 0.04195791482925415, 0.012229595333337784, 0.044756680727005005, 0.017167646437883377, 0.0515735000371933, 0.02663460560142994, -0.05065072700381279, -0.0027743412647396326, -0.052658163011074066, 0.005582258105278015, 0.004518348257988691, -0.03770330548286438, -0.0443434864282608, 0.02642912045121193, -0.007909665815532207, 0.023577099665999413, -0.020433560013771057, -0.11792270839214325, -0.015074889175593853, -0.016118858009576797, 0.023293590173125267, 0.010771043598651886, 0.008984006941318512, 0.004243169911205769, -0.03981875255703926, 0.005594640504568815, -0.07644125819206238, -0.02730107679963112, -0.008916007354855537, 0.0181130263954401, -0.07814857363700867, 0.009019787423312664, -0.041332535445690155, -0.008365674875676632, 0.05143185704946518, 0.017079990357160568, 0.07064754515886307, 0.014201432466506958, -0.011817172169685364, 0.009931755252182484, -0.001758753671310842, 0.012164009734988213, -0.013428740203380585, 0.005709748715162277, -0.025297006592154503, -0.018301887437701225, 0.01075462531298399, -0.01961885206401348, 0.024464666843414307, 0.012998536229133606, -0.04649478569626808, -0.040985070168972015, 0.0039030914194881916, -0.040474291890859604, 0.009073516353964806, 0.011244934052228928, 0.11282296478748322, -0.04979439452290535, 0.03351539000868797, 0.032350946217775345, 0.04551555588841438, -0.0541534461081028, -0.015545069240033627, -0.019887080416083336, 0.014615794643759727, -0.021302776411175728, -0.028616556897759438, -0.022875133901834488, -0.004495840985327959, -0.07032947987318039, -0.021478958427906036, -0.006923959590494633, 0.02135641686618328, -0.0046139066107571125, -0.03474412485957146, -0.007048803847283125, 0.008907963521778584, -0.018625101074576378, -0.022529246285557747, -0.047638460993766785, -0.007102517411112785, 0.03537321090698242, -0.010920519009232521, -0.021615345031023026, 0.03008086606860161, 0.031270258128643036, -0.045721635222435, 0.0029615098610520363, -0.00925447791814804, 0.02451382949948311, -0.011767839081585407, 0.0012935498962178826, -0.010982238687574863, -0.016170267015695572, 0.009393093176186085, -0.00595080154016614, -0.006945550441741943, 0.02787531539797783, -0.02437962032854557, 0.029440734535455704, -0.005597281269729137, 0.02771615795791149, -0.019454266875982285, -0.028641143813729286, -0.034604281187057495, 0.04030117020010948, -0.030671285465359688, -0.04259669408202171, 0.02579449489712715, 0.0035982157569378614, 0.007022105623036623, 0.04987793415784836, 0.047403909265995026, 0.015043174847960472, 0.00042390363523736596, 0.042437948286533356, -0.04457980394363403, -0.04633547365665436, -0.002276413841173053, 0.0009596302988938987, 0.02855350449681282, -0.046462081372737885, 0.032227855175733566, 0.02154456079006195, 0.032071150839328766, 0.013303489424288273, -0.0418667271733284, -0.02397536300122738, -0.033488303422927856, -0.001763464999385178, 0.0057095675729215145, 0.037892166525125504, 0.08667585253715515, -0.045697104185819626, -0.04911282658576965, 0.014063685201108456, 0.0031428332440555096, 0.06721703708171844, 0.015605724416673183, -0.020957602187991142]\"\n./train/magpie/n01582220_8930.JPEG,magpie,\"[-0.00112565525341779, 0.02546440251171589, 0.012047139927744865, -0.03276028484106064, 0.012055620551109314, 0.00964032206684351, 0.03826441988348961, 0.015533886849880219, 0.0370512530207634, 0.01405534241348505, 0.006301657296717167, 0.00865269172936678, 0.04431404918432236, -0.0030768210999667645, 0.007015124894678593, 0.02138284407556057, 0.06634464114904404, 0.04021112248301506, -0.025113021954894066, 0.001337815192528069, -0.018167488276958466, -0.001944337273016572, 0.001497034216299653, -0.03335808217525482, -0.04536749795079231, 0.05153121426701546, 0.01848698779940605, -0.05739543214440346, -0.016551628708839417, 0.0011333976872265339, 0.04555647075176239, 0.041424460709095, -0.005163437686860561, 0.02434537187218666, 0.051395826041698456, 0.013767840340733528, -0.020520977675914764, 0.03226440027356148, 0.02115347422659397, 0.11415638774633408, 0.02381863072514534, -0.00040505442302674055, 0.031443435698747635, -0.042003996670246124, 0.07360096275806427, -0.07399679720401764, 0.008254801854491234, 0.002696232171729207, 0.056658677756786346, -0.01166100800037384, 0.026444129645824432, 0.02670886740088463, 0.0027462742291390896, -0.05785804241895676, -0.028699861839413643, 0.04817257821559906, -0.006272474303841591, 0.021232737228274345, -0.030727427452802658, 0.0040565375238657, 0.1291009932756424, -0.0047866967506706715, -0.008150012232363224, 0.013988073915243149, -0.05034605786204338, -0.02358354814350605, 0.051405616104602814, 0.018571021035313606, -0.009928890503942966, -0.019587917253375053, 0.0005826536798849702, -0.04014939069747925, -0.037720732390880585, -0.00034924561623483896, 0.03813565894961357, -0.017953678965568542, 0.021806562319397926, -0.017750518396496773, -0.034694232046604156, -0.12139065563678741, -0.030787881463766098, 0.012590666301548481, 0.0038627658504992723, -0.027249416336417198, 0.019467566162347794, -0.012295144610106945, 0.012673822231590748, 0.016133762896060944, 0.02332511730492115, -0.02127910405397415, 0.005232284311205149, -0.06512340158224106, -0.5682567358016968, -0.030987568199634552, -0.023864613845944405, 0.02294139936566353, -0.042571112513542175, -0.0373971201479435, -0.09950713068246841, -0.013458378612995148, 0.020367665216326714, -0.009799855761229992, -0.008574379608035088, 0.027059189975261688, -0.03718922659754753, 0.02894505113363266, -0.16350795328617096, 0.04485379159450531, 0.009755424223840237, -0.02139291539788246, 0.01635933667421341, -0.07929398119449615, 0.03661178797483444, -0.019189439713954926, -0.0022889100946485996, -0.013579455204308033, 0.04817584529519081, -0.03773549199104309, 0.04699484631419182, -0.01077202893793583, 0.07294129580259323, 0.04446760565042496, 0.014170212671160698, 0.033294565975666046, 0.005378412548452616, -0.023177262395620346, 0.014706633053719997, 0.030917227268218994, -0.011213073506951332, -0.006961210630834103, 0.008062316104769707, -0.025882909074425697, -0.019633406773209572, 0.08422079682350159, 0.047075141221284866, -0.020802438259124756, -0.04345356300473213, -0.01111573912203312, -0.012081518769264221, 0.008153454400599003, -0.022778533399105072, 0.03509002551436424, 0.04756614565849304, 0.03407687693834305, 0.024890858680009842, -0.002188000362366438, -0.015737535431981087, -0.04480910301208496, 0.02456088550388813, -0.01975998841226101, -0.05239621922373772, 0.019129790365695953, 0.03491165116429329, -0.06219632551074028, 0.06717115640640259, -0.014389242976903915, 0.052160557359457016, -0.020391859114170074, -0.03474903106689453, -0.0297583919018507, 0.014651933684945107, -0.009696987457573414, 0.022394685074687004, -0.01811094768345356, -0.010005527175962925, -0.01156611368060112, 0.0011528806062415242, 0.038232285529375076, 0.01928715966641903, 0.08856440335512161, 0.00014753871073480695, 0.012783937156200409, -0.01387330424040556, -0.004090902861207724, 0.005870455410331488, -0.026471389457583427, -0.0022361911833286285, -0.010081466287374496, -0.015968358144164085, -0.007181791588664055, 0.014837289229035378, -0.022114858031272888, -0.00044222993892617524, 0.01681447960436344, -0.06402567774057388, -0.0018232723232358694, 0.005503151100128889, -0.0081002376973629, 0.02908927947282791, 0.04474323242902756, 0.022917522117495537, -0.015398586168885231, 0.03921692073345184, 0.045244716107845306, 0.05401911586523056, -0.010812629945576191, -0.032422155141830444, -0.016924679279327393, -0.06426380574703217, 0.06929168850183487, -0.010896222665905952, -0.011807979084551334, 0.031934235244989395, 0.07074195891618729, 0.04613673314452171, 0.04096414893865585, -0.018763521686196327, -0.09985372424125671, 0.00950019620358944, 0.02971271425485611, 0.0071065546944737434, 0.04482930898666382, 0.0048678237944841385, 0.027152441442012787, -0.03656395897269249, -0.06703604012727737, -0.02230748161673546, -0.0019943546503782272, 0.04791095480322838, -0.016761653125286102, 0.020591819658875465, 0.01762789860367775, 0.013315999880433083, 0.02334427647292614, 0.01928282156586647, 0.011084601283073425, -0.03277968987822533, 0.0375661700963974, -0.01615140400826931, 0.03298268839716911, -0.036006517708301544, -0.004686516709625721, 0.0689597874879837, 0.007298620417714119, 0.015540308319032192, 0.012938928790390491, 0.0504276342689991, -0.006247133947908878, 0.021900223568081856, 0.016594884917140007, 0.010235191322863102, 0.01691308617591858, -0.006922014523297548, -0.034883636981248856, 0.00818298477679491, 0.000979356816969812, 0.01048441044986248, -0.04975460469722748, -0.06959331780672073, -0.039774227887392044, 0.022137293592095375, 0.05571797862648964, 0.044002942740917206, -0.010503682307898998, -0.020954754203557968, -0.05609755963087082, -0.022987723350524902, -0.014620305970311165, -0.029227495193481445, -0.0031756190583109856, -0.019399408251047134, 0.008848058059811592, -0.0187649205327034, 0.04271302372217178, 0.0333530455827713, -0.06213878467679024, -0.006334239151328802, -0.009311113506555557, 0.048780132085084915, 0.035340774804353714, -0.0056940484791994095, -0.015952901914715767, 0.03213610127568245, -0.03054971992969513, 0.03766165301203728, -0.023380674421787262, 0.027094991877675056, -0.01317492313683033, 0.008053110912442207, 0.012710846960544586, 0.0479305163025856, -0.0008132632356137037, -0.04917497560381889, -0.021136105060577393, -0.015785235911607742, 0.02233853191137314, -0.06167694181203842, -0.03732045739889145, -0.03747693449258804, -0.011669988743960857, -0.01864132657647133, -0.0273840744048357, 0.0022262409329414368, 0.019798994064331055, -0.011769979260861874, -0.010552028194069862, 0.0636180192232132, -0.02012818679213524, 0.0644337460398674, 0.000880122825037688, -0.02511628158390522, -0.018079861998558044, -0.0011117112590000033, -0.02308133989572525, 0.04663402587175369, 0.05577520653605461, 0.02551918290555477, 0.02187766321003437, 0.0517970472574234, -0.0010723562445491552, -0.0009439339046366513, 0.05135022848844528, 0.08396995812654495, -0.01960960403084755, 0.010755769908428192, 0.029035702347755432, -0.05923265963792801, 0.0052268835715949535, 0.0035809434484690428, -0.06053074076771736, 0.03882410004734993, 0.09381368011236191, -0.004267187789082527, 0.019228627905249596, -0.017844168469309807, -0.05199246108531952, 9.029927605297416e-05, -0.028653034940361977, -0.018589278683066368, -0.033788468688726425, 0.005057363770902157, 0.04801621660590172, -0.0759601816534996, 0.06502202898263931, -0.011557161808013916, 0.035304710268974304, 0.0003027821076102555, 0.024669615551829338, -0.006493933964520693, 0.0618303008377552, -0.044983550906181335, -0.06368256360292435, -0.0213085375726223, 0.04142550751566887, -0.045841507613658905, 0.03316571190953255, 0.054809607565402985, -0.00636277487501502, -0.0010475782910361886, 0.010239921510219574, -0.043494097888469696, -0.001290464773774147, 0.030330516397953033, -0.06805925816297531, -0.04552794247865677, 0.019116850569844246, 0.008888456039130688, -0.12419604510068893, 0.01556363608688116, 0.011084215715527534, 0.05087375268340111, -0.008463346399366856, -0.0030738050118088722, 0.041040558367967606, 0.005325307138264179, -0.004633887205272913, 0.0010829685488715768, -0.0828186646103859, -0.08447712659835815, 0.03314920887351036, 0.007280614227056503, 0.0077348737977445126, 0.07335692644119263, -0.015802260488271713, 0.005143212154507637, 0.054731786251068115, 0.10102953761816025, -0.0007177017396315932, -0.06481056660413742, 0.0004705816099885851, -0.03749556466937065, -0.04021289199590683, 0.045557901263237, -0.056117329746484756, -0.039801646023988724, 0.059732478111982346, -0.03332623466849327, -0.01643122360110283, -0.023004302754998207, -0.029489802196621895, -0.02254590392112732, -0.034478019922971725, 0.015882717445492744, -0.030576063320040703, -0.009861139580607414, -0.013212610967457294, -0.050627920776605606, 0.010795427486300468, -0.10261395573616028, -0.06456639617681503, -0.001244210172444582, 0.010790649801492691, -0.0566386915743351, -0.006610299926251173, 0.03847161680459976, 0.009328813292086124, 0.06858476251363754, 0.00042605699854902923, 0.021949848160147667, 0.0042291912250220776, 0.011550135910511017, 0.013787642121315002, -0.021104084327816963, 0.01199472788721323, -0.056790050119161606, 0.016031892970204353, 0.030858950689435005, -0.002703997539356351, -0.0094309002161026, -0.017985055223107338, 0.0010227893944829702, -0.017614006996154785, 0.009312450885772705, -0.07149040699005127, -0.03432111814618111, -0.011678951792418957, 0.023608099669218063, 0.04624071344733238, 0.026456933468580246, -0.03364245966076851, 0.014256807044148445, 0.015771977603435516, 0.012187824584543705, -0.03173083811998367, -0.03950490429997444, -0.06769250333309174, 0.051758959889411926, 0.007906798273324966, -0.0019248195458203554, -0.02246972918510437, 0.0018401870038360357, -0.023706326261162758, -0.05092212185263634, -0.005502129439264536, 0.037226706743240356, 0.03789139539003372, -0.02896469086408615, 0.00643089460209012, -0.008319464512169361, -0.04183514788746834, 0.012094623409211636, -0.09278808534145355, 0.013990935869514942, -0.03848994895815849, -0.01973646692931652, 0.021263161674141884, 0.045331891626119614, -0.013253975659608841, -0.002482114126905799, -0.026699988171458244, 0.0017627475317567587, 0.01792280375957489, 0.02383444644510746, 0.055685531347990036, 0.017044665291905403, -0.023409295827150345, 0.00788106583058834, -0.000676533323712647, -0.022302912548184395, 0.008167106658220291, -0.022939888760447502, 0.012909549288451672, -0.0019081628415733576, -0.019797060638666153, 0.021546075120568275, -0.012059240601956844, 0.002972803544253111, 0.0017843388486653566, -0.0015322361141443253, 0.006855033803731203, -0.004677300341427326, -0.0009277092176489532, -0.013665935955941677, 0.03597632795572281, 0.03078432008624077, -0.02632199041545391, -0.0021405366715043783, 0.006968184374272823, -0.05902819707989693, -0.036453377455472946, -0.03173745423555374, 0.02965620346367359, 0.030528295785188675, -0.061380352824926376, 0.049225110560655594, 0.013674608431756496, -0.013550542294979095, 0.044028643518686295, -0.0711965411901474, -0.003692447440698743, -0.017107609659433365, -0.0261248629540205, -0.012633491307497025, 0.01337867509573698, 0.05530655384063721, -0.052388425916433334, -0.024989239871501923, 0.025054490193724632, -0.006167660467326641, 0.037586987018585205, 0.023223554715514183, -0.047719791531562805]\"\n./train/magpie/n01582220_5870.JPEG,magpie,\"[0.02721446380019188, 0.052603598684072495, 0.011121390387415886, -0.021226119250059128, 0.028998088091611862, 0.03684080019593239, 0.040427178144454956, 0.003815658390522003, 0.020972339436411858, -0.004809136968106031, 0.016760507598519325, 0.024895422160625458, 0.009051117114722729, 0.0021383154671639204, 0.0029488566797226667, -0.0023073183838278055, -0.015159009955823421, 0.028645167127251625, -0.02647707425057888, 0.02202826738357544, -0.0347573421895504, -0.03126255050301552, 0.012507937848567963, -0.04985321685671806, -0.014464253559708595, 0.03050452470779419, 0.04850401729345322, -0.014051363803446293, -0.02278324030339718, 0.012548190541565418, 0.015127482824027538, 0.0692000538110733, 0.03990809991955757, 0.025178592652082443, 0.051014531403779984, 0.00026510158204473555, 0.0020226631313562393, 0.031171133741736412, 0.0205028485506773, 0.11713559925556183, 0.042731087654829025, 0.04140693321824074, 0.06574037671089172, -0.05232734978199005, 0.06426537781953812, -0.07632030546665192, 0.013880464248359203, 0.032359734177589417, 0.011034621857106686, -0.02019016444683075, 0.03356942534446716, 0.02408660762012005, -0.013437274843454361, -0.05679707229137421, -0.009157353080809116, 0.021101180464029312, 0.004537724424153566, 0.029836928471922874, 0.014082299545407295, 0.04073469340801239, 0.05401778221130371, 0.01112520880997181, 0.007498587481677532, -0.0014628836652264, -0.03881435841321945, 0.002116382820531726, 0.05708447843790054, 0.0351322777569294, -0.02840319089591503, 0.008327456191182137, 0.001106958487071097, -0.008491392247378826, 0.007138695102185011, 0.025352519005537033, 0.030059756711125374, -0.015502383932471275, 0.02883909083902836, -0.0030941579025238752, -0.03903663158416748, -0.06918872892856598, -0.034859463572502136, -0.0344410203397274, 0.010455901734530926, -0.028598224744200706, 0.035044554620981216, -0.0008768747793510556, 0.035088349133729935, -0.003419548273086548, 0.020621536299586296, -0.02452712692320347, 0.01050837803632021, -0.042998190969228745, -0.6445350050926208, -0.01883791945874691, 0.020826485008001328, -0.00365491327829659, -0.03346892446279526, -0.019640525802969933, -0.11036773025989532, -0.0016463017091155052, 0.021030934527516365, -0.00715994369238615, -0.013220266439020634, 0.03821062296628952, 0.04362751916050911, -0.03906520456075668, -0.08673354983329773, 0.018347004428505898, 0.019576987251639366, -0.04080171138048172, 0.02010294981300831, -0.07608472555875778, 0.021546389907598495, -0.028586555272340775, 0.04617730900645256, -0.02747376449406147, 0.02513878047466278, -0.002689679153263569, 0.04366495832800865, 5.395268453867175e-05, 0.0021393527276813984, -0.007394408341497183, -0.002096185926347971, 0.017069950699806213, 0.0073751104064285755, -0.02318420074880123, -0.003904490265995264, 0.05029948428273201, 0.009014205075800419, -0.02567313238978386, 0.0013917491305619478, -0.034852102398872375, -0.0004907951224595308, 0.08482398092746735, -0.003614588873460889, 0.000475340464618057, 0.00775187648832798, -0.05785268917679787, 0.002081336220726371, 0.05840526521205902, 0.0023515508510172367, -0.02490139566361904, 0.046431854367256165, 0.004971204325556755, 0.023512249812483788, 0.007840224541723728, -0.020875615999102592, -0.02742004208266735, -0.021003391593694687, 0.002474358770996332, -0.013585148379206657, -0.008588951081037521, 0.01806112378835678, -0.05622715875506401, 0.0671164020895958, 0.006877783685922623, 0.02809746563434601, 0.01246190257370472, 0.003891684813424945, -0.044861532747745514, -0.008383776061236858, -0.05377513915300369, 0.08284665644168854, -0.02478325180709362, -0.031534381210803986, 0.013218945823609829, -0.03151411563158035, 0.02832632325589657, 0.011357746087014675, 0.0698942318558693, 0.04601483419537544, 0.03939768299460411, 0.006035353057086468, -0.04681861028075218, -0.00461389496922493, -0.034752607345581055, -0.03581417724490166, 0.019443010911345482, -0.020159641280770302, 0.006422411650419235, 0.029057079926133156, -0.007477427367120981, -0.022130951285362244, 0.005089427810162306, -0.018784478306770325, -0.0076602790504693985, 0.0393378883600235, -0.00022393939434550703, -0.008246303535997868, 0.038983654230833054, 0.022873979061841965, 0.023321500048041344, 0.05648977681994438, 0.047253839671611786, 0.02108941413462162, -0.03140299767255783, -0.06516654044389725, -0.004904748406261206, -0.05354990065097809, 0.07179663330316544, -0.022907178848981857, 0.02238934114575386, 0.02920627035200596, 0.024717941880226135, 0.03595126420259476, 0.03795340284705162, 0.0022419618908315897, -0.05728916823863983, -0.014879068359732628, 0.018786877393722534, -0.023380974307656288, 0.0368991419672966, -0.002452161628752947, 0.03222374990582466, -0.03792374208569527, -0.033050183206796646, -0.029204262420535088, 0.010952172800898552, 0.09553134441375732, -0.04249458387494087, 0.03437862545251846, 0.002945474348962307, 0.010320160537958145, 0.04582377150654793, 0.0022057185415178537, 0.04806296154856682, 0.012099425308406353, 0.014105659909546375, 0.0037313480861485004, 0.04270186647772789, -0.06856843829154968, -0.024197641760110855, 0.034924060106277466, 0.051023177802562714, 0.007948161102831364, -0.022925516590476036, 0.014470508322119713, 0.02589479647576809, 0.001276194816455245, 0.016230765730142593, 0.0043340218253433704, 0.0004233502550050616, -0.013101790100336075, -0.02630612440407276, 0.017647385597229004, 0.053184788674116135, 0.013331866823136806, -0.04837833717465401, -0.02624826319515705, -0.003022043500095606, -0.046637456864118576, 0.0852048397064209, 0.053645700216293335, 0.001980086322873831, -0.024233849719166756, 0.006540506146848202, -0.016505226492881775, -0.009026377461850643, 0.039273470640182495, 0.030977293848991394, -0.0028201667591929436, 0.03722933679819107, -0.00909703504294157, 0.03298152983188629, 0.07179022580385208, -0.01811944879591465, 0.03663168102502823, 0.011744806542992592, 0.06447494029998779, 0.02563181333243847, -0.009929755702614784, -0.015106539241969585, 0.0017257832223549485, -0.0015325581189244986, 0.0391039103269577, -0.019567107781767845, 0.024892229586839676, -0.019483063369989395, 0.018360517919063568, -0.006345998961478472, 0.04955526813864708, 0.05678660422563553, -0.03258041664958, -0.007480238098651171, -0.011801013723015785, 0.01601647026836872, -0.028047023341059685, 0.0071088108234107494, -0.045738428831100464, -0.005487082526087761, -0.010381616652011871, -0.01491838414222002, -9.48274100665003e-06, 0.02963332086801529, -0.00023277659784071147, -0.011808440089225769, 0.01781727559864521, 0.02004646696150303, -0.009104713797569275, -0.030880454927682877, -0.014798760414123535, 0.06047341600060463, -0.009467802941799164, 0.005327897146344185, 0.006757180206477642, 0.02586510218679905, -0.00350237637758255, 0.011385026387870312, 0.028145210817456245, 0.008475573733448982, 0.02193506248295307, -0.0006217693444341421, 0.08470691740512848, -0.0038127372972667217, -0.015261808410286903, 0.033352382481098175, -0.013748652301728725, 0.02666395530104637, 0.0043973312713205814, -0.06199129298329353, 0.06465120613574982, 0.16973495483398438, 0.006246146745979786, -0.017706692218780518, -0.01796705834567547, -0.036026086658239365, 0.010114999487996101, -0.012053395621478558, -0.038820646703243256, -0.013238524086773396, -0.036882903426885605, -0.019900675863027573, -0.0582861453294754, 0.02568686380982399, 0.00521654449403286, 0.020204853266477585, -0.0002709112304728478, 0.016332799568772316, -0.012576894834637642, 0.02654600888490677, -0.03597955033183098, -0.042608004063367844, -0.03484714403748512, 0.009665957652032375, -0.02366930991411209, -0.017412282526493073, 0.007973232306540012, 0.021777793765068054, 0.018144981935620308, 0.018159126862883568, -0.006650939118117094, 0.012674620375037193, 0.058429840952157974, -0.009846774861216545, -0.029535289853811264, 0.028085723519325256, 0.0075401123613119125, -0.07186473160982132, -0.03515526279807091, 0.045660704374313354, 0.08120657503604889, 0.007025731727480888, -0.062305934727191925, 0.03726150840520859, 0.015646370127797127, -0.008985774591565132, -0.021916111931204796, -0.021964525803923607, -0.050963178277015686, 0.04354735091328621, 0.016166260465979576, 0.025511253625154495, 0.05330440774559975, -0.012121589854359627, 0.038635991513729095, 0.01064765453338623, 0.08110740780830383, 0.02337961457669735, -0.05010388419032097, 0.00844673439860344, -0.030513713136315346, 0.006286729127168655, -0.004796361085027456, -0.0765465572476387, -0.01206472422927618, 0.05567546188831329, -0.04704884812235832, -0.0022317832335829735, -0.028409402817487717, -0.06610223650932312, 0.030726183205842972, -0.015400683507323265, 0.013682902790606022, -0.009819671511650085, 0.003679967951029539, 0.011909195221960545, -0.0021522806491702795, -0.01058086846023798, -0.0962708592414856, -0.039208635687828064, -0.005331016145646572, 0.015114972367882729, -0.030930722132325172, -0.016986481845378876, 0.013827241957187653, -0.004053674638271332, 0.024912556633353233, -0.013877995312213898, 0.028200916945934296, 0.02268059179186821, 0.025215579196810722, 0.05793144926428795, -0.017666246742010117, -0.015531758777797222, -0.02536884881556034, 0.016089173033833504, 0.009472785517573357, -0.014410139061510563, -0.0031283951830118895, -0.011232974007725716, 0.03874252736568451, -0.023032531142234802, -0.009118404239416122, -0.02162916399538517, -0.04865060746669769, -0.03573872894048691, 0.02779369056224823, 0.009242271073162556, 0.10380067676305771, -0.01400151476264, 0.020084790885448456, 0.027063781395554543, -0.01923392154276371, -0.00893991906195879, -0.03146233409643173, -0.039928462356328964, 0.03430863469839096, 0.013277345336973667, -0.02507718652486801, -0.04031406342983246, 0.03927960619330406, 0.007197529077529907, -0.008261051028966904, -0.029691418632864952, 0.02726883627474308, 0.019898349419236183, 0.007616595830768347, 0.01885729655623436, -0.01178368553519249, -0.0273180790245533, -0.03520644083619118, -0.07576793432235718, -0.012689076364040375, 0.028832947835326195, 0.020710760727524757, -0.01144587155431509, 0.04652336239814758, 0.01072824839502573, -0.04149962589144707, 0.007418589200824499, -0.03277404606342316, 0.0154582429677248, 0.0022277424577623606, 0.001120538217946887, -0.03032289631664753, -0.03414853289723396, -0.0008177064009942114, -0.0003315364592708647, 0.022021226584911346, -0.013247000984847546, -0.05188534036278725, 0.023500090464949608, -0.011216221377253532, -0.01084478572010994, 0.01961454562842846, -0.03582365810871124, -0.011650120839476585, 0.0077536385506391525, -0.012198705226182938, 0.004142060410231352, -0.022898975759744644, 0.0102253258228302, 0.010129903443157673, 0.03758542239665985, 0.058722324669361115, 0.018149735406041145, 0.0038992883637547493, -0.01022933330386877, -0.0044240802526474, -0.037139829248189926, -0.01365562342107296, 0.0053397309966385365, 0.005730201955884695, -0.058385271579027176, 0.018738403916358948, 0.015480400994420052, 0.006488417275249958, 0.02890988439321518, -0.05864869803190231, -0.006865397561341524, -0.05094011873006821, -0.013562015257775784, 0.028653481975197792, 0.04775562882423401, 0.08707009255886078, -0.07214374095201492, -0.02569577470421791, 0.02203252539038658, 0.0019741528667509556, 0.05176243931055069, -0.02502979338169098, -0.016292793676257133]\"\n./train/magpie/n01582220_9114.JPEG,magpie,\"[-0.021464139223098755, 0.01047519687563181, 0.0304369255900383, -0.044101592153310776, 0.04237538203597069, -0.019581854343414307, 0.05084025114774704, 0.020807454362511635, 0.035158559679985046, 0.001971604535356164, 0.011056228540837765, 0.005577949341386557, 0.012753850780427456, -0.012391900643706322, 0.0021333422046154737, 0.004864285234361887, 0.010834029875695705, 0.005398605018854141, -0.0013975526671856642, 0.03315986320376396, -0.006931839976459742, -0.015504534356296062, 0.024589918553829193, -0.05145225673913956, -0.03208710998296738, 0.034500010311603546, 0.010476828552782536, -0.030444107949733734, -0.043980035930871964, 0.03457419201731682, -0.005262596067041159, 0.0184017326682806, 0.005363957025110722, 0.014713283628225327, -0.0005653556436300278, -0.01375124603509903, 0.0051915645599365234, 0.038489192724227905, 0.026554079726338387, 0.14044737815856934, 0.004693536087870598, 0.026720227673649788, 0.04102446883916855, -0.036187902092933655, 0.055613838136196136, -0.0869632288813591, -0.024159474298357964, 0.03704144433140755, 0.012114283628761768, -0.02845742553472519, 0.009630091488361359, -0.004406477324664593, -0.0007525944383814931, -0.06941040605306625, -0.026442375034093857, 0.03461301699280739, 0.006912937853485346, 0.050969719886779785, -0.001422422588802874, 0.04207688570022583, 0.06409361213445663, 0.03536428138613701, -0.0032641557045280933, 0.005349094979465008, -0.04034176096320152, -0.036267831921577454, 0.02662794105708599, 0.08382397890090942, -0.010612567886710167, -0.026100967079401016, -0.011952103115618229, 0.0024430290795862675, 0.002616456476971507, 0.0011031123576685786, 0.02853894978761673, -0.011795179918408394, 0.004504702519625425, -0.02084161713719368, -0.01327219046652317, -0.07088276743888855, -0.03390436992049217, 0.005779096856713295, -0.03541164472699165, -0.038936831057071686, 0.08172272145748138, 0.013153983280062675, 0.027012847363948822, -0.030590951442718506, 0.06156482174992561, -0.06081287935376167, 0.033799584954977036, -0.02085283026099205, -0.5894887447357178, -0.03563672676682472, 0.016627108678221703, -0.004349624738097191, -0.004672660026699305, -0.019487138837575912, -0.10405777394771576, 0.029750024899840355, -0.005836258642375469, 0.0035853476729243994, 0.002194408094510436, 0.031996749341487885, 0.005044473335146904, 0.00821932777762413, -0.16194842755794525, 0.03690608590841293, 0.03913707658648491, -0.038029465824365616, -0.030601000413298607, -0.023048898205161095, 0.0199742428958416, -0.008090557530522346, 0.031469304114580154, -0.00647295406088233, 0.04910041391849518, -0.03505919501185417, 0.042296621948480606, 0.037325579673051834, 0.03651022911071777, 0.003468903247267008, 0.00634697824716568, 0.03080536611378193, 0.026511989533901215, 0.0003253016620874405, 0.03487122058868408, 0.024207377806305885, -0.02735809050500393, -0.014007632620632648, 0.008478951640427113, -0.007018932141363621, -0.0014716075966134667, 0.07858482003211975, 0.04239477589726448, -0.002990811364725232, 0.029287589713931084, -0.044934190809726715, 0.01226253155618906, 0.028001587837934494, 0.013168940320611, -0.022482430562376976, 0.023309633135795593, 0.009241717867553234, -0.005176643840968609, -0.014242989011108875, -0.043261826038360596, 0.013038958422839642, 0.006577593274414539, -0.019459232687950134, 0.023584870621562004, 0.052164167165756226, -0.012765568681061268, -0.048025961965322495, 0.05128614231944084, -0.017813600599765778, 0.04987478256225586, 0.006140363402664661, 0.004918565042316914, -0.03411918506026268, -0.019994080066680908, -0.028702396899461746, 0.03523535281419754, 0.014730997383594513, -0.03194810822606087, -0.023423930630087852, -0.04013825207948685, 0.01821998506784439, 0.027305403724312782, 0.06486937403678894, 0.05696774274110794, 0.014715764671564102, 0.006180203519761562, -0.06154390797019005, -0.020146628841757774, -0.0001325299817835912, -0.05160960182547569, 0.005293588619679213, -0.051430054008960724, -0.010285905562341213, 0.0481988862156868, -0.007635306566953659, -0.007067415397614241, 0.0316508524119854, -0.00020035469788126647, -0.02335912361741066, 0.04573371261358261, -0.0004257140099070966, 0.01660851761698723, 0.04139121249318123, 0.0023870316799730062, 0.017100263386964798, 0.04643302038311958, 0.028539808467030525, -0.02409164048731327, -0.029515907168388367, -0.031453896313905716, -0.01887321099638939, -0.04679035767912865, 0.019650114700198174, 0.003987055737525225, -0.0072038061916828156, 0.021944018080830574, 0.07426587492227554, 0.01963813044130802, 0.047562308609485626, 0.009891434572637081, -0.06417511403560638, -0.008341901004314423, 0.01901957578957081, -0.04064110666513443, 0.026457780972123146, 0.004977939184755087, 0.041655246168375015, -0.050756167620420456, -0.03801856189966202, -1.1301144695607945e-05, 0.011546719819307327, 0.0704219862818718, -0.04851127043366432, 0.037058643996715546, 0.060400549322366714, -0.004909541457891464, 0.047481171786785126, -0.013338149525225163, 0.02071472816169262, -0.03358406573534012, 0.02219308912754059, 0.007584691513329744, 0.042409833520650864, -0.06122986599802971, -0.040972184389829636, 0.05520159751176834, 0.011807910166680813, -0.0008004626142792404, -0.06236043572425842, 0.006775208283215761, 0.00228584511205554, -0.002216694876551628, 0.006790624000132084, -0.0023766332305967808, -0.013783385045826435, -0.03145473822951317, -0.052024200558662415, 0.011099584400653839, 0.00942471344023943, 0.014667298644781113, -0.08814574033021927, -0.010185323655605316, -0.00446055643260479, -0.04193395376205444, 0.048094458878040314, 0.03441912680864334, -0.0034040173050016165, 0.011647152714431286, -0.002230822341516614, -0.021026041358709335, -0.003368082921952009, 0.16368769109249115, 0.008072043769061565, -0.01574445515871048, 0.001876127440482378, 0.0030836511868983507, 0.04979190602898598, 0.02662212774157524, -0.0034630976151674986, 0.032393209636211395, -0.01979578472673893, 0.02729293331503868, 0.03619766980409622, -0.023598812520503998, -0.015327486209571362, 0.02165708877146244, 0.02729968912899494, 0.030474048107862473, 0.019377470016479492, 0.020069686695933342, -0.02622571960091591, -0.007555528078228235, 0.01150481030344963, 0.04806823655962944, 0.03097984939813614, -0.06246194988489151, -0.03617994487285614, -0.005624090321362019, 0.007323582656681538, -0.13008929789066315, -0.05535544455051422, -0.07243993878364563, -0.0369957871735096, -0.007755643222481012, -0.01511238794773817, -0.03325045108795166, 0.02511587180197239, 0.01537144836038351, -0.017788322642445564, 0.1503438502550125, -0.016001319512724876, 0.013148041442036629, -0.013302838429808617, -0.0014122321736067533, 0.011519449763000011, 0.005087248515337706, 0.0007900818018242717, 0.005395024083554745, 0.016329776495695114, -0.02640429139137268, 0.031934503465890884, 0.04802587628364563, -0.021075280383229256, -0.005178365856409073, 0.01241071056574583, 0.07837080210447311, -0.0044301897287368774, 0.002678339835256338, -0.014740628190338612, 0.014180182479321957, 0.019756140187382698, 0.014254127629101276, -0.06626152992248535, 0.03423554450273514, 0.06068233400583267, -0.029411330819129944, -0.009913792833685875, -0.0037684652488678694, -0.013715406879782677, 0.02458808943629265, -0.04258395731449127, -0.05286859720945358, -0.009261790663003922, -0.051769256591796875, 0.005992176942527294, -0.04200449585914612, 0.004426910076290369, -0.005907668266445398, 0.04463344067335129, 0.014231393113732338, 0.047339946031570435, -0.00892605446279049, 0.004040527623146772, -0.04306457191705704, -0.04498584568500519, -0.03949260711669922, 0.010101228952407837, -0.012041252106428146, 0.00019171192252542824, 0.0176838468760252, 0.0006078315782360733, -0.016495291143655777, -0.016602151095867157, -0.03275280445814133, 0.017322247847914696, 0.04099290072917938, -0.035106759518384933, -0.032147280871868134, -0.0010153691982850432, -0.002508011180907488, -0.08874957263469696, -0.006287787575274706, 0.022961562499403954, 0.09454292804002762, -0.021641289815306664, -0.033597566187381744, 0.03905252367258072, -0.0037358326371759176, -0.018032753840088844, -0.0389077328145504, -0.08683715760707855, -0.07953617721796036, 0.04535793885588646, -0.012691761367022991, -0.0056426371447741985, 0.027707384899258614, 0.0068697272799909115, 0.025671128183603287, 0.024726537987589836, 0.10606803745031357, 0.012650123797357082, -0.08436614274978638, 0.013257674872875214, -0.010854724794626236, -0.008740969933569431, -0.012249674648046494, -0.04883992299437523, -0.011339650489389896, 0.0774301216006279, -0.03156866878271103, 0.027869390323758125, -0.046923283487558365, 0.07201649248600006, -0.01489650271832943, -0.03987850993871689, -0.0022270118352025747, -0.010351983830332756, 0.021398577839136124, -0.027860013768076897, 0.0032004881650209427, 0.00086966622620821, -0.15271314978599548, -0.06367145478725433, -0.010732925496995449, 0.017187533900141716, -0.023852430284023285, -0.007495356258004904, 0.011181505396962166, 0.02116543799638748, 0.005852330941706896, -0.018398117274045944, 0.032934702932834625, -0.02815060503780842, 0.006079418584704399, 0.03032485954463482, -0.019518472254276276, -0.0014239208539947867, -0.047078296542167664, 0.03374145179986954, -0.000641902384813875, -0.01228210050612688, -0.0008348394185304642, -0.030578115954995155, 0.007769971154630184, 0.010994921438395977, -8.169444481609389e-05, 0.012126587331295013, -0.05103065073490143, -0.015544218942523003, 0.008880315348505974, 0.04214302822947502, -0.030265092849731445, -0.026811176910996437, 0.015219174325466156, 0.041905634105205536, 0.022267524152994156, -0.020310120657086372, -0.027806000784039497, -0.04514453932642937, 0.028511065989732742, -0.002121153986081481, -0.021555569022893906, -0.06958524137735367, 0.020433781668543816, -0.01682450622320175, -0.031772710382938385, -0.027621347457170486, 0.045154474675655365, 0.03898796811699867, 7.706537144258618e-05, 0.015527550131082535, 0.029260458424687386, -0.005620542913675308, -0.018412968143820763, -0.06839203089475632, -0.006863339804112911, -0.03771113604307175, -0.003194124437868595, -0.020403221249580383, 0.022620955482125282, 0.008548643440008163, -0.012702606618404388, -0.00049525749636814, -0.026071486994624138, 0.04684777185320854, 0.017170753329992294, -0.026600096374750137, -0.007451260462403297, 0.02328350581228733, -0.008738173171877861, 0.015410495921969414, 0.01907379925251007, -0.027491571381688118, 0.005504608154296875, 0.01152441743761301, -0.031609777361154556, -0.023314785212278366, 0.031861092895269394, -0.013086865656077862, -0.03465700522065163, 0.03321380540728569, -0.0005114009836688638, 0.011277670040726662, -0.0018411320634186268, -0.033671047538518906, -0.024427471682429314, 0.015409172512590885, 0.01048248540610075, 0.011301097460091114, -0.021032653748989105, -0.002570532262325287, -0.04854467138648033, -0.013149761594831944, 0.006636922247707844, -0.02349812164902687, -0.007563426624983549, -0.03870590403676033, 0.03653358295559883, 0.033137399703264236, 0.008942208252847195, 0.040399517863988876, -0.02951541543006897, -0.0024163885973393917, -0.005808964837342501, -0.01222173310816288, 0.02200852520763874, 0.012244717217981815, 0.04229230061173439, -0.04334888979792595, -0.040793951600790024, 0.009069355204701424, 0.01283949427306652, 0.05325431004166603, -0.021472401916980743, -0.02893964573740959]\"\n./train/magpie/n01582220_10712.JPEG,magpie,\"[-0.026607904583215714, -0.011466811411082745, -0.012620311230421066, 0.019881760701537132, 0.016633806750178337, 0.02497093193233013, 0.03777454048395157, -0.006279908120632172, -0.028369830921292305, 0.016199128702282906, 0.03127364069223404, 0.037619903683662415, -0.031108228489756584, -0.0055695646442472935, 0.021500105038285255, 0.026333564892411232, 0.046729207038879395, 0.05657913163304329, 0.0065145003609359264, -0.01158673595637083, 0.007593668065965176, -0.0019529360579326749, 0.02824932523071766, -0.03974735364317894, -0.019626973196864128, 0.01851228065788746, 0.044756460934877396, 0.005137820728123188, -0.006428947206586599, 0.03280721604824066, 0.018673712387681007, 0.06935165822505951, -0.039107806980609894, -0.008609011769294739, -0.04655933007597923, -0.0159921757876873, -0.021889828145503998, -0.009563526138663292, 0.026868725195527077, 0.029024774208664894, 0.045726846903562546, 0.02769407629966736, 0.035695020109415054, -0.09333430230617523, 0.055473167449235916, -0.0380723811686039, 0.0199575237929821, -0.002448753919452429, -0.0197629164904356, 0.014038676396012306, 0.012398059479892254, 0.050389617681503296, 0.001761875580996275, -0.05584799870848656, -0.03589293733239174, 0.045702021569013596, -0.0038089489098638296, 0.045596711337566376, 0.012101074680685997, -0.044251393526792526, 0.09630392491817474, 0.040040746331214905, -0.01670151576399803, 0.008252983912825584, -0.06355415284633636, -0.004041959531605244, 0.013997805304825306, 0.05818278715014458, -0.013010092079639435, -0.0009255806216970086, -0.0150612723082304, -0.0020335777662694454, -0.0038800095207989216, 0.012423829175531864, 0.017080379649996758, -0.026616450399160385, -0.008427081629633904, -0.005434438120573759, -0.01028183288872242, -0.05760788917541504, 0.012936613522469997, 0.0009125646902248263, -0.03659892454743385, -0.008691525086760521, 0.05334226042032242, 0.007652198895812035, 0.04291623830795288, -0.04222801700234413, -0.000698596762958914, -0.033783961087465286, 0.01860174722969532, -0.07216420769691467, -0.6021720170974731, -0.012552076019346714, 0.03493381291627884, -0.008479677140712738, -0.016714556142687798, 0.029049444943666458, -0.024455396458506584, 0.024860799312591553, 0.013105754740536213, -0.051113568246364594, 0.05908166244626045, -0.024431994184851646, 0.05964858829975128, 0.008319818414747715, -0.00704649044200778, 0.000464772863779217, 0.02634720504283905, -0.06098078563809395, 0.029815586283802986, -0.02787797711789608, 0.016877802088856697, 0.016016706824302673, 0.030563639476895332, -0.03024642914533615, -0.010192938148975372, -0.01699904352426529, 0.019013501703739166, -0.035137902945280075, 0.018461480736732483, -0.011407371610403061, -0.0015299832448363304, -0.023636892437934875, 0.02018435299396515, -0.04376322031021118, 0.006712895818054676, 0.016344791278243065, 0.0025821144226938486, -0.008010271936655045, -0.03521662950515747, -0.03785562142729759, -0.023711875081062317, 0.08582395315170288, -0.03570796176791191, 0.018836399540305138, -0.01839178428053856, -0.049613069742918015, 0.008657180704176426, 0.02466460131108761, 0.012462446466088295, 0.001673343824222684, 0.014187938533723354, 0.00832336861640215, 0.012520705349743366, 0.04122934490442276, -0.027875088155269623, -0.02264712192118168, 0.014546851627528667, -0.00501417089253664, -0.01908203400671482, -0.020123548805713654, 0.03023763932287693, -0.08546149730682373, 0.00846849661320448, 0.03060349076986313, -0.005363535601645708, 0.031334444880485535, 0.028986938297748566, -0.04598454758524895, -0.05377072095870972, -0.036606620997190475, 0.021541418507695198, -0.007818957790732384, 0.019856436178088188, -0.05717216804623604, 0.005306602921336889, 0.03813327103853226, 0.04211311414837837, 0.03801792487502098, 0.011381305754184723, 0.01879405416548252, -0.010677555575966835, -0.028349336236715317, -0.005175299476832151, -0.04631220921874046, -0.007991796359419823, 0.0033292733132839203, -0.052135758101940155, -0.006605557166039944, -0.011742166243493557, -0.007351215463131666, 0.025840777903795242, 0.03734639286994934, -0.01443777047097683, 0.016310440376400948, 0.025134023278951645, 0.003749625291675329, 0.03917134553194046, -0.011678081005811691, 0.008792342618107796, 0.01859613135457039, 0.06609682738780975, 0.043141525238752365, 0.057978156954050064, 0.00034715112997218966, -0.06580384075641632, -0.01785128191113472, -0.07733772695064545, 0.06305438280105591, 0.01953190565109253, 0.016989361494779587, 0.033783331513404846, 0.04904557392001152, -0.0014710150426253676, 0.025477740913629532, -0.005748958792537451, -0.051596738398075104, 0.004260113462805748, 0.006244449410587549, -0.02723805420100689, 0.052194107323884964, -0.03166820481419563, 0.04679016396403313, -0.014527959749102592, -0.028521452099084854, -0.0276094451546669, 0.019704150035977364, 0.06539218872785568, -0.013398903422057629, 0.06337147951126099, -0.04674818366765976, 0.011517121456563473, 0.032537490129470825, -0.007914797402918339, 0.03575257584452629, -0.025554688647389412, 0.014211909845471382, -0.016926676034927368, -0.014646336436271667, -0.02830587886273861, -0.04691758751869202, 0.005106305703520775, 0.05757357180118561, 0.012546978890895844, -0.0462246872484684, 0.017688527703285217, 0.020225049927830696, 0.037332598119974136, 0.0024242778308689594, -0.020724326372146606, 0.004020397551357746, -0.02864738181233406, -0.0005527944304049015, 0.014072202146053314, 0.09236735105514526, -0.0039253574796020985, -0.018110258504748344, -0.007867518812417984, 0.0358315147459507, -0.03592929244041443, 0.04625535011291504, 0.011554143391549587, 0.00416019931435585, 0.010509960353374481, -0.0398719385266304, -0.026974817737936974, 0.03424464166164398, 0.060966189950704575, 0.028264665976166725, -0.0030008703470230103, 0.03517097979784012, -0.013381293043494225, 0.0574973002076149, 0.07735711336135864, -0.0060197473503649235, 0.06470680981874466, -0.02422177977859974, 0.01078152284026146, 0.01353942509740591, -0.030239559710025787, 0.009156023152172565, 0.024638166651129723, 0.010000665672123432, 0.036941058933734894, -0.0175970196723938, -0.005193066783249378, -0.0452486127614975, -0.008922897279262543, -0.004932910669595003, 0.0012577279703691602, 0.04021931067109108, -0.04110075533390045, 0.003189362585544586, -0.016922425478696823, -0.027196288108825684, -0.029607705771923065, -0.020543724298477173, -0.01878688484430313, -0.0024296066258102655, -0.0034875802230089903, -0.017397381365299225, -0.02231588400900364, -0.012455987744033337, 0.01892612688243389, -0.014982267282903194, 0.02477690391242504, 0.024082066491246223, 0.04663296416401863, -0.0059134080074727535, -0.05583823844790459, -0.036672431975603104, 0.009708143770694733, -0.007309447042644024, -0.01841471530497074, 0.048437681049108505, -0.002201516879722476, 0.00686388136819005, 0.04642399027943611, 0.02292303554713726, -0.051623161882162094, -0.007577050477266312, 0.08564507216215134, -0.02214350365102291, -0.004707372281700373, 0.039709046483039856, 0.00041046939441002905, 0.02845596708357334, 0.010039490647614002, -0.03562028706073761, 0.05361136794090271, 0.24227194488048553, 0.008504723198711872, 0.009164276532828808, -0.022732481360435486, -0.001708017778582871, -0.009404445998370647, 0.01301612425595522, -0.007487643044441938, -0.0058731697499752045, -0.02132493443787098, 0.0025307058822363615, -0.038134776055812836, 0.006595805287361145, -0.0035828675609081984, 0.01102682575583458, -0.016723237931728363, -0.036869216710329056, -0.0035176484379917383, 0.0686432495713234, -0.043113745748996735, -0.0338565930724144, -0.06512746959924698, 0.03315168619155884, -0.0335322804749012, -0.012475397437810898, 0.01987013965845108, 0.04351913183927536, 0.004878560546785593, 0.024497443810105324, -0.0662907212972641, -0.022847650572657585, 0.04528975114226341, -0.014324836432933807, -0.035356029868125916, -0.003338199108839035, 0.033408474177122116, 0.047535885125398636, 0.004426464904099703, 0.03861038386821747, 0.02455662190914154, -0.011218090541660786, 0.04826570302248001, -0.01332262996584177, 0.02196357399225235, -0.0009385798475705087, 0.013767663389444351, -0.057151664048433304, -0.031318001449108124, 0.06003797426819801, -0.03593851998448372, 0.01162281446158886, 0.0032192650251090527, -0.01580711267888546, 0.04107508808374405, 0.02020793966948986, 0.030061734840273857, 0.04223454371094704, -0.09468171745538712, -0.023288452997803688, -0.02250843495130539, 0.009622294455766678, 0.02300860546529293, -0.041700731962919235, -0.021900417283177376, 0.038314174860715866, -0.03288258612155914, 0.0322667621076107, -0.026678914204239845, -0.01763378083705902, 0.00023100928228814155, -0.053171269595623016, 0.021134860813617706, 0.03849305957555771, -0.03992578759789467, -0.04524930194020271, -0.03854411840438843, 0.0023841606453061104, -0.05965288355946541, -0.022047579288482666, -0.031652819365262985, 0.008509238250553608, -0.006491081323474646, -0.010956858284771442, -0.028576305136084557, 0.009076463989913464, 0.021113332360982895, -0.006976043805480003, 0.01910318061709404, 0.039631202816963196, -0.04315432533621788, 0.007304104045033455, 0.006329575087875128, 0.023568911477923393, -0.0024906606413424015, 0.019807910546660423, 0.005100997630506754, -0.02968081831932068, 0.05604835972189903, -0.010023019276559353, 0.005010905675590038, 0.0008812341256998479, -0.04477877542376518, 0.019557172432541847, -0.03469470515847206, -0.020822081714868546, 0.03178078308701515, -0.018518658354878426, 0.21177814900875092, -0.017692930996418, 0.020088480785489082, 0.026162611320614815, -0.019857168197631836, -0.027144620195031166, -0.004120515193790197, -0.024068422615528107, 0.029687216505408287, -0.0043264878913760185, -0.04199621081352234, -0.057289160788059235, 0.0316443033516407, -0.024722106754779816, -0.003869539825245738, -0.004315606784075499, -0.0027292969170957804, -0.02696232870221138, -0.054654497653245926, -0.013856510631740093, -0.005058071110397577, -0.01563762128353119, -0.044135890901088715, -0.06663483381271362, -0.026579681783914566, 0.06935890763998032, -0.047039445489645004, 0.022869182750582695, 0.02848871238529682, 0.0019243393326178193, -0.02442340739071369, -0.001449297065846622, -0.036112334579229355, 0.01155080460011959, 0.018295438960194588, 0.015682362020015717, 0.0008461009128950536, -0.025950349867343903, 0.011605268344283104, -0.01115945540368557, 0.008949129842221737, 0.01715284399688244, -0.06856101006269455, 0.013518617488443851, 0.027725979685783386, -0.0005545354215428233, -0.0039035140071064234, -0.022472981363534927, -0.008072501048445702, 0.030853062868118286, -0.020799634978175163, -0.038421377539634705, -0.028125500306487083, -0.0027822842821478844, 0.00103016069624573, 0.025699865072965622, 0.06575188040733337, 0.00925673171877861, 0.014575888402760029, 0.02987634763121605, -0.04749644920229912, 0.03699981048703194, -0.0008104642620310187, -0.006269342266023159, 0.027418013662099838, -0.08257885277271271, 0.054953742772340775, 0.01732902228832245, 0.0352570004761219, -0.004446100443601608, -0.05042492225766182, -0.02991987019777298, -0.0039821225218474865, -0.02664395608007908, 0.026308614760637283, 0.0351797379553318, 0.11235533654689789, -0.02648826502263546, -0.04523378610610962, 0.020262451842427254, 0.03358561918139458, 0.020637081936001778, 0.050401318818330765, 0.026157937943935394]\"\n./train/magpie/n01582220_6915.JPEG,magpie,\"[0.004143659491091967, 0.049068160355091095, 0.01457479689270258, -0.011238853447139263, 0.03075021132826805, 0.028907079249620438, 0.002911347197368741, -0.001657250802963972, -0.018759233877062798, 0.015981465578079224, 0.011476386338472366, 0.024626919999718666, -0.08337893337011337, -0.029162773862481117, 0.02736371010541916, -0.001985885202884674, -0.03450118377804756, -0.0059612710028886795, -0.0035692332312464714, 0.05067067593336105, 0.00825472641736269, -0.019964834675192833, 0.0054072109051048756, -0.03527330607175827, -0.012371232733130455, 0.0070979539304971695, -0.0240856371819973, -0.011363358236849308, 0.003306921571493149, -0.004131243098527193, 0.01375339925289154, -0.021049557253718376, -0.013962413184344769, 0.04764513298869133, 0.07005153596401215, -0.006188036873936653, 0.00225463486276567, -0.03157131373882294, 0.021719809621572495, 0.14119288325309753, 0.005021162796765566, 0.005619138944894075, 0.012818843126296997, 0.010052470490336418, 0.008579741232097149, -0.1857924461364746, 0.056058067828416824, -0.02460404671728611, 0.03220801427960396, -0.0033052093349397182, -0.02177617698907852, 0.031406402587890625, -0.017044996842741966, -0.04457555338740349, -0.012348645366728306, -0.0027227874379605055, -0.07716178148984909, 0.04384312778711319, 0.018046658486127853, 0.034433893859386444, 0.052710212767124176, -0.032114457339048386, 7.358119091804838e-06, 0.032663166522979736, -0.019820034503936768, 0.029503021389245987, 0.06231261044740677, 0.030213171616196632, -0.06706604361534119, -0.022561026737093925, -0.002108130371198058, -0.0035429929848760366, -0.0009973377455025911, -0.004135185852646828, 0.054717451333999634, -0.018231365829706192, 0.021239647641777992, -0.004239062312990427, -0.06326542049646378, -0.049154624342918396, 0.009103426709771156, -0.004065282642841339, -0.0205732062458992, 0.0041910638101398945, -0.008443902246654034, -0.03552912175655365, -0.0043520438484847546, 0.01600726693868637, -0.001386912539601326, 0.001318640075623989, 0.021982943639159203, -0.031613368541002274, -0.5795839428901672, -0.060252416878938675, 0.021667635068297386, 0.004090653732419014, 0.006591196171939373, -0.027077069506049156, -0.10227370262145996, -0.002271832199767232, 0.005328234750777483, -0.05295721814036369, -0.016846906393766403, 0.00678431149572134, 0.003291348461061716, -0.01591123454272747, 0.0003725560090970248, 0.015281813219189644, 0.01367385033518076, -0.0038911672309041023, 0.035032968968153, -0.03691869601607323, 0.0427958220243454, -0.04276609420776367, 0.030372891575098038, -0.0031606813427060843, 0.007531376089900732, 0.02767004817724228, 0.01808982901275158, 0.008244815282523632, 0.02320529706776142, -0.01648634858429432, -0.03713243827223778, -0.05186084285378456, -0.009592504240572453, -0.017132017761468887, -0.008280772715806961, 0.01985807903110981, -0.007750054821372032, -0.045487191528081894, 0.01239206362515688, -0.06314397603273392, -0.0003101775946561247, 0.08417466282844543, -0.03280098736286163, -0.011059656739234924, -0.028131045401096344, -0.06627954542636871, 0.015444486401975155, 0.0129261314868927, 0.00044050972792319953, -0.044341523200273514, 0.08689002692699432, -0.000718416937161237, -0.02026546746492386, 0.024766182526946068, -0.03804263472557068, -0.004973308648914099, 0.021798167377710342, -0.004708998836576939, -0.06158840283751488, -0.03740433230996132, -0.003209504531696439, 0.003101167967543006, 0.00523516396060586, 0.006608552765101194, 0.07178263366222382, 0.010395332239568233, 0.02580920420587063, -0.07724451273679733, -0.013978235423564911, -0.03582118824124336, 0.018726836889982224, -0.005921861156821251, 0.06485728174448013, -0.008807755075395107, -0.023894451558589935, 0.011706302873790264, 0.06929642707109451, 0.019569309428334236, 0.00792984664440155, 0.03451518341898918, -0.001832404755987227, 0.01270974799990654, 0.007856679148972034, -0.01213913131505251, 0.056934576481580734, 0.012339017353951931, -0.03853367269039154, -0.019067998975515366, 0.02245817892253399, -0.036991510540246964, -0.021420374512672424, 0.008875959552824497, -0.002119826851412654, -0.002312419703230262, 0.0965879037976265, -0.010585504584014416, 0.03327135369181633, 0.02722710743546486, 0.0135857705026865, -0.025777388364076614, 0.0333750918507576, 0.045499593019485474, -0.029179299250245094, -0.022749802097678185, 0.0021901223808526993, -0.054666053503751755, -0.06721930205821991, 0.048005640506744385, -0.0027186316438019276, 0.05125069245696068, 0.035620421171188354, 0.016070997342467308, 0.02568536438047886, 0.045576564967632294, -0.01654619723558426, -0.07472552359104156, -0.032438766211271286, 0.02977983094751835, -0.011705092154443264, 0.08650200814008713, -0.002855312777683139, -0.008468969725072384, -0.016066433861851692, -0.02947155386209488, -0.024128507822752, -0.015588058158755302, 0.06501485407352448, -0.024903541430830956, 0.02655388042330742, 0.03853064402937889, -0.0030853948555886745, 0.016590986400842667, 0.011890437453985214, -0.0013555362820625305, -0.03580591455101967, 0.032174766063690186, 0.021561259403824806, 0.014902154915034771, -0.02657165564596653, -0.030879460275173187, 0.016440225765109062, -0.01458519697189331, 0.0052475896663963795, 0.03595120087265968, -0.03147557005286217, 0.020567599684000015, 0.0035354855936020613, -0.016265161335468292, -0.015109466388821602, 0.016765575855970383, -0.005017516203224659, -0.05324094370007515, -0.05423632636666298, 0.11668933182954788, 0.002270533237606287, 0.04611791670322418, -0.011399420909583569, -0.019195443019270897, -0.026516681537032127, 0.027357403188943863, 0.01904813013970852, 0.019446469843387604, -0.04727322608232498, -0.027992235496640205, -0.02532039023935795, 0.016136454418301582, 0.003851503599435091, 0.06426702439785004, -0.038509879261255264, 0.022345639765262604, -0.03520655259490013, 0.11991171538829803, 0.07026220113039017, 0.00034371481160633266, 0.06231306120753288, -0.06508668512105942, 0.04109940677881241, 0.00688133342191577, 0.0245536919683218, -0.0036859079264104366, 0.024149922654032707, 0.0066624912433326244, 0.043697308748960495, -0.04469549283385277, -0.035899411886930466, -0.02413029596209526, 0.012449590489268303, 0.008389783091843128, -0.02190747857093811, 0.008257118053734303, -0.0015306358691304922, -0.022585628554224968, 0.008106373250484467, 0.06302038580179214, -0.06541463732719421, -0.013245675712823868, -0.03233780711889267, 0.00937881413847208, 0.03434356302022934, -0.012621360830962658, 0.020451735705137253, 0.027614803984761238, 0.029280707240104675, -0.0006167255924083292, 0.01721915975213051, -0.0022795898839831352, 0.013714696280658245, -0.017101814970374107, -0.04698949679732323, 0.04775714874267578, -0.006326519418507814, 0.037836622446775436, 0.010722958482801914, -0.003635002765804529, 0.03120054304599762, -0.011476260609924793, 0.05508636683225632, -0.006344572640955448, -0.0005410437588579953, 0.0445193313062191, 0.08379136770963669, -0.04784625023603439, 0.023691236972808838, 0.028742996975779533, -0.0232632365077734, 0.018536433577537537, 0.0361042283475399, 0.0029530024621635675, 0.060597725212574005, 0.11615385115146637, 0.012944389134645462, 0.05453500896692276, -0.062422994524240494, -0.009670664556324482, -0.020340703427791595, 0.009042799472808838, -0.054504506289958954, -0.02184399589896202, -0.00883864052593708, 0.0008204469340853393, -0.04251573979854584, -0.014513375237584114, 0.004512618761509657, 0.05160575732588768, 0.011851917952299118, -0.010565194301307201, 0.0012433113297447562, 0.018341148272156715, -0.019748305901885033, -0.019732914865016937, -0.0097682885825634, 0.0077183363027870655, -0.033512458205223083, 0.007624192163348198, 0.0336076021194458, -0.007660646922886372, 0.05298882722854614, -0.012781759724020958, 0.024699848145246506, 0.05220288783311844, 0.016938336193561554, 0.019643599167466164, -0.0373242050409317, 0.005312077701091766, 0.051972776651382446, -0.09598979353904724, 0.008293258026242256, 0.013343751430511475, -0.023932455107569695, -0.02657982148230076, 0.028701363131403923, 0.02223784849047661, -0.009816938079893589, -0.050606127828359604, -0.045265860855579376, -0.057744815945625305, -0.04338165000081062, 0.048975348472595215, 0.004406976979225874, 0.018942706286907196, 0.05724520608782768, 0.016104916110634804, 0.06201735883951187, 0.02952958643436432, 0.10545927286148071, -0.022616585716605186, -0.02396535314619541, -0.017198627814650536, -0.04139002412557602, -0.05633005127310753, -0.011518309824168682, -0.10053050518035889, -0.02604053169488907, 0.0009397880639880896, 0.0054123238660395145, 0.030730564147233963, -0.020752646028995514, -0.11734601110219955, -0.01648706942796707, -0.0846472680568695, 0.06321805715560913, -0.015338953584432602, 0.01647343300282955, -0.030000953003764153, -0.01616761088371277, -0.0190570168197155, -0.0884215384721756, -0.06123151257634163, -0.0049066320061683655, 0.0013794528786092997, -0.035298191010951996, -0.01833472214639187, -0.04220237582921982, -0.015264299698174, -0.008667766116559505, -0.0073442114517092705, 0.03565827012062073, 0.020418895408511162, -0.041652582585811615, 0.021062344312667847, -0.0072674984112381935, 0.017971236258745193, -0.01991529017686844, -0.004614377394318581, 0.001240498386323452, -0.028586797416210175, -0.027014661580324173, -0.015205418691039085, 0.04499354586005211, -0.029774941504001617, -0.0037079439498484135, -0.025342334061861038, -0.02820003777742386, 0.020759224891662598, -0.0032101834658533335, 0.025236045941710472, 0.1226259246468544, 0.0020220146980136633, 0.004879393614828587, -0.003962431102991104, -0.050919853150844574, -0.012277335859835148, 0.016431959345936775, -0.07598106563091278, -0.020659415051341057, 0.00022128099226392806, 0.017168840393424034, -0.0388350784778595, 0.031867314130067825, -0.02331400103867054, 0.01191009022295475, -0.020988047122955322, 0.03611333668231964, 0.030634939670562744, -0.009272606112062931, -0.015516533516347408, 0.0166485458612442, -0.009717556647956371, -0.012796605937182903, -0.05966358259320259, -0.021603122353553772, 0.01044865045696497, -0.02628624625504017, 0.005766925401985645, 0.012365695089101791, 0.002313744043931365, 0.016216594725847244, -0.04842959716916084, -0.0017835469916462898, -0.01707575097680092, -0.014141195453703403, 0.02229800447821617, 0.00520090339705348, -0.03189132362604141, 0.014184021390974522, 0.008628140203654766, -0.03750037029385567, -0.012045111507177353, -0.033798765391111374, 0.018958628177642822, -0.0006065763300284743, 0.017735261470079422, -0.012399440631270409, -0.017759907990694046, -0.009580699726939201, -0.029107630252838135, -0.026605114340782166, -0.014860779047012329, -0.029983526095747948, 0.00686071440577507, 0.03976267948746681, 0.0033037327229976654, 0.06851048767566681, 0.0115872323513031, 0.02299812249839306, -0.021076783537864685, -0.021003108471632004, -0.026726212352514267, 0.005678002722561359, -0.010457344353199005, 0.02840505912899971, -0.0451875701546669, 0.03498206287622452, 0.06664972007274628, 0.004933478310704231, -0.0008509003091603518, -0.07724155485630035, 0.01327351201325655, -0.039094213396310806, -0.005534225143492222, 0.010626907460391521, -0.002819716464728117, 0.031513627618551254, -0.046013955026865005, -0.062490154057741165, -0.007400722708553076, 7.467919203918427e-05, -0.010164565406739712, 0.024696340784430504, -0.03855942189693451]\"\n./train/jean/n03594734_42955.JPEG,jean,\"[-0.009250803850591183, 0.012322312220931053, 0.02808552421629429, 0.05902959033846855, 0.000236805179156363, 0.016972830519080162, -0.06358473747968674, 0.01959928311407566, 0.012879122979938984, -0.020618172362446785, 0.039544478058815, -0.013559355400502682, -0.004450248554348946, 0.0066564129665493965, -0.019406842067837715, 0.008249912410974503, 0.03352469205856323, 0.00783276092261076, 0.004279797896742821, -0.058034706860780716, -0.0023238479625433683, 0.015972832217812538, 0.04728401079773903, 0.0007459920016117394, 0.054776210337877274, 0.027463076636195183, -0.00033179996535182, -0.00999362301081419, -0.04692128673195839, -0.033154744654893875, 0.03861751779913902, 0.014732747338712215, -0.020029574632644653, -0.0397295281291008, 0.003313852474093437, 0.035192687064409256, 0.034947969019412994, 0.05463278293609619, 0.004939456935971975, 0.0884433388710022, -0.025316303595900536, -0.021343722939491272, -0.00443622563034296, -0.010279453359544277, 0.01890520565211773, 0.029648730531334877, 0.042756352573633194, -0.025339186191558838, -0.005122830625623465, 0.005722492001950741, 0.02730323001742363, 0.012556749396026134, 0.01585051231086254, -0.00044027541298419237, 0.010338140651583672, 0.05342378467321396, 0.01932423748075962, 0.04872087389230728, -0.0503542423248291, 0.003177863312885165, 0.03528203070163727, 0.04559268802404404, 0.003669929690659046, 0.02168172225356102, -0.01855250634253025, -0.009707729332149029, -0.010127518326044083, 0.011435340158641338, 0.002900907536968589, 0.037099599838256836, 0.007495556026697159, 0.023352570831775665, 0.015085137449204922, 0.0007247452740557492, 0.010711953975260258, 0.014913385733962059, 0.02057541161775589, 0.008210137486457825, 0.020718025043606758, 0.06594257801771164, -0.010777311399579048, -0.014126508496701717, 0.02321736142039299, -0.03437319025397301, 0.03246500343084335, 0.02042238786816597, -0.032857540994882584, 0.0011381570948287845, -0.02593720518052578, 0.023078272119164467, 0.02907896414399147, -0.02611195482313633, -0.6710094213485718, 0.07594990730285645, 0.0335288867354393, 0.019464850425720215, 0.02164452336728573, -0.0011839051730930805, -0.03576503321528435, 0.08085495233535767, -0.0005088116158731282, -0.057477694004774094, -0.04341501742601395, -0.027414284646511078, -0.03470764309167862, 0.01277427189052105, -0.004088974092155695, -0.00739296805113554, -0.04540560394525528, 0.04345197603106499, 0.016030365601181984, -0.0013486008392646909, 0.020697014406323433, -0.031564850360155106, -0.014166298322379589, -0.006084361579269171, 0.00563681498169899, -0.034898385405540466, -0.005243981722742319, 0.010533281601965427, -0.012735564261674881, -0.0634777620434761, -0.0338299423456192, -0.04211946949362755, -0.018051285296678543, 0.006610114127397537, -0.004034935496747494, -0.06855188310146332, 0.009186885319650173, 0.015276600606739521, 0.0044186413288116455, 0.06683209538459778, -0.004149787127971649, 0.09300220012664795, -0.035629626363515854, 0.034540001302957535, 0.0024009747430682182, -0.01976882666349411, 0.0035262068267911673, 0.025070156902074814, -0.006088922265917063, 0.008677905425429344, -0.01631687767803669, 0.019537312909960747, -0.001983505906537175, 0.005082234274595976, -0.000993979163467884, 0.08240504562854767, -0.021119626238942146, -0.012021937407553196, 0.021243324503302574, -0.05781254544854164, 0.13348394632339478, -0.029164426028728485, -0.024603161960840225, 0.0072661349549889565, 0.006144283339381218, 0.06872962415218353, -0.01617470569908619, -0.015974445268511772, 0.015185133554041386, -0.04275774955749512, -0.0052709635347127914, -0.050331950187683105, -0.003957974258810282, 0.017119377851486206, -0.03443940356373787, -0.008888037875294685, 0.026665261015295982, 0.0079936059191823, -0.039144184440374374, -0.03208094835281372, 0.011229869909584522, -0.034017372876405716, 0.02032984048128128, -0.013037120923399925, 0.0975218340754509, -0.014820028096437454, 0.03994664177298546, 0.019710760563611984, -0.014451451599597931, -0.030619444325566292, 0.013754768297076225, -0.018753085285425186, -0.02778182551264763, 0.031901028007268906, 0.04806138947606087, 0.005936720874160528, 0.01619800552725792, 0.00620461069047451, 0.03211366385221481, 0.0281694196164608, -0.01704261638224125, 0.02651543915271759, -0.03204226866364479, -0.043978020548820496, 0.019733048975467682, -0.009967472404241562, -0.023531263694167137, -0.004858158994466066, -0.002712259301915765, 0.020804764702916145, 0.004494397900998592, 0.067225880920887, 0.001987377181649208, -0.03114987351000309, 0.008251573890447617, 0.026795659214258194, -0.044480834156274796, 0.015311102382838726, -0.020868714898824692, 0.050753578543663025, 0.0006563772330991924, 0.049232494086027145, -0.04124262556433678, 0.004418450407683849, -0.01777629740536213, 0.008661714382469654, -0.015230730175971985, 0.030031638219952583, -0.009307309053838253, 0.029294373467564583, -0.022470945492386818, -0.029186801984906197, 0.005961475893855095, -0.05370142310857773, 0.017357250675559044, -0.021147530525922775, 0.012754862196743488, 0.0066425614058971405, 0.02195614203810692, -0.009074554778635502, -0.04489981383085251, 0.04115290567278862, -0.0013640583492815495, -0.07444220036268234, -0.00883606355637312, 0.009413975290954113, -0.005124643445014954, 0.026715846732258797, 0.01744442619383335, 0.007413033861666918, -0.032652318477630615, -0.02554798126220703, 0.0003874099929817021, -0.06750645488500595, 0.016459723934531212, 0.03183800354599953, -0.005817078985273838, 0.005294490605592728, 0.030391324311494827, -0.023660363629460335, -0.019225379452109337, 0.01950709894299507, 0.021407967433333397, -0.011007456108927727, -0.01622665859758854, 0.009636290371418, -0.07088295370340347, 0.005804048851132393, 0.03042440488934517, -0.00011163221643073484, 0.03540128469467163, 0.10661344230175018, 0.02699308656156063, 0.006974473129957914, 0.00975125003606081, 0.02097119204699993, 0.02386264130473137, 0.022881299257278442, 0.006954931654036045, -0.012821418233215809, 0.01938825100660324, -0.019428232684731483, -0.008736073970794678, -0.0026451728772372007, 0.0050881169736385345, 0.011129633523523808, 0.016952278092503548, -0.01626388542354107, -0.018901949748396873, -0.0028063824865967035, -0.10760054737329483, -0.026457590982317924, -0.023331016302108765, -0.020209498703479767, 0.08091450482606888, 0.04239701107144356, 0.009016483090817928, -8.822129530017264e-06, 0.028406580910086632, -0.0008531513740308583, -0.022961720824241638, 0.010512830689549446, 0.016485122963786125, -0.031702179461717606, -0.08732893317937851, -0.012450150214135647, 0.006614765152335167, 0.01970357447862625, 0.0022850900422781706, -0.009359003975987434, -0.015410173684358597, -0.018098419532179832, -0.01086166687309742, -0.020652392879128456, -0.018736111000180244, -0.005495141260325909, 0.025753283873200417, 0.006370019633322954, -0.010565871372818947, -0.004140132572501898, 0.09300120174884796, 0.04824464023113251, 0.005831289105117321, 0.031238161027431488, 0.06513447314500809, 0.020221101120114326, -0.019702879711985588, 0.0086594233289361, -0.037666790187358856, 0.16599395871162415, -0.014936745166778564, 0.002909093163907528, -0.025998195633292198, -0.034388285130262375, 0.026970122009515762, 0.011245465837419033, -0.02020813152194023, 0.021295737475156784, -0.014058580622076988, 0.00900267530232668, 0.04483219236135483, 0.004495789296925068, -0.004212616942822933, 0.006187107879668474, 0.05912170559167862, 0.0024884771555662155, -0.002575341612100601, -0.000666618172544986, -0.02485045976936817, -0.009737911634147167, 0.017022589221596718, 0.024977456778287888, 0.0012263433309271932, -0.009119956754148006, -0.004788726568222046, 0.025131596252322197, 0.014296373352408409, -0.02105609141290188, 0.0882173404097557, 0.008802216500043869, 0.008603649213910103, 0.013786215335130692, 0.014916681684553623, -0.05220433697104454, -0.03344753384590149, 0.0807005763053894, -0.002660841913893819, -0.035743825137615204, 0.10405983030796051, 0.001695261220447719, -0.02255472168326378, -0.008949985727667809, 0.07277025282382965, 0.011412173509597778, -0.02818618342280388, 0.0021167874801903963, 0.00015423998411279172, 0.0015751906903460622, 0.0551476813852787, 0.034893665462732315, 0.005997140426188707, 0.00419655442237854, 0.0011125397868454456, -0.013648518361151218, 0.10840362310409546, -0.008385304361581802, -0.004754204303026199, 0.03609840199351311, 0.019851980730891228, 0.0003585583181120455, 0.02489081583917141, -0.04845976456999779, -0.01994137465953827, 0.019239669665694237, 0.05189340189099312, -0.022383904084563255, -0.04196125268936157, -0.03463062271475792, 0.0495946891605854, -0.016662972047924995, 0.0176981333643198, 0.0015696301124989986, -0.02778850495815277, -0.027847249060869217, -0.026062235236167908, 0.0030490958597511053, 0.040390852838754654, -0.009633942507207394, -0.014426371082663536, 0.0407639741897583, 0.07324813306331635, 0.0257757306098938, -0.02985106036067009, 0.005054202396422625, -0.003956955391913652, -0.0063992878422141075, 0.02649587206542492, -0.014454741962254047, -0.03084515780210495, -0.02391740493476391, 0.012923024594783783, -0.013894502073526382, -0.02781366929411888, -0.012089484371244907, 0.0031628443393856287, 0.04006722569465637, -0.06870902329683304, -0.03779842332005501, 0.010300770401954651, -0.05473863333463669, 0.012862448580563068, 0.0314016118645668, 0.03778437525033951, 0.008624257519841194, -0.05498100817203522, -0.002358386991545558, -0.062120456248521805, 0.07304611057043076, 0.02299979329109192, 0.021271666511893272, 0.012458143755793571, -0.003193598473444581, 0.00576023617759347, -0.004017241299152374, -0.0007747133495286107, 0.003485211404040456, 0.03488025814294815, -0.0038815645966678858, -0.015336093492805958, -0.0048915003426373005, 0.011277551762759686, 0.0021961817983537912, -0.014253146015107632, -0.006455938331782818, -0.027345888316631317, 0.016945568844676018, -0.0033816485665738583, -0.07249298691749573, -0.03719721734523773, 0.03917410969734192, 0.05740126222372055, -0.06705238670110703, -0.012046699412167072, -0.009371628984808922, -0.005113016813993454, -0.03074638545513153, -0.01532105915248394, 0.012975155375897884, 0.010523570701479912, -0.012312267906963825, -0.024165989831089973, -0.008778279647231102, -0.0018493181560188532, -0.014636178500950336, -0.007346898317337036, 0.0051817623898386955, 0.006863399408757687, 0.027738971635699272, 0.014428178779780865, 0.015736864879727364, 0.02993049845099449, -0.006569392047822475, 0.017704594880342484, -0.044990044087171555, -0.019098686054348946, -0.003101193346083164, 0.0006872275262139738, -0.05461610108613968, 0.007526044733822346, 0.012102875858545303, 0.043844472616910934, -0.0012323800474405289, -0.02584674023091793, 0.02879941463470459, -0.024603860452771187, -0.049868594855070114, -0.013202890753746033, -0.04302944242954254, -0.004900199361145496, -0.026200640946626663, 0.015155604109168053, -0.0552833192050457, -0.06955073028802872, 0.03164966031908989, 0.006622417829930782, 0.004079601261764765, 0.026619190350174904, -0.019994724541902542, 0.025235746055841446, -0.006844880059361458, 0.02119741216301918, 0.008792771026492119, 0.06498711556196213, 0.0043671391904354095, -0.06662975251674652, -0.01936175860464573, 0.017290113493800163, 0.05422491952776909, -0.04774321988224983, 0.02406579628586769]\"\n./train/jean/n03594734_54417.JPEG,jean,\"[0.03459589183330536, 0.0032141038682311773, 0.006180970463901758, 0.016795562580227852, 0.012557215057313442, 0.053737640380859375, -0.014674331992864609, -0.04599811136722565, 0.011172055266797543, -0.0005053899949416518, -0.015667814761400223, -0.039289217442274094, 0.008570482954382896, -0.013188575394451618, 0.033998772501945496, 0.030950849875807762, -0.03669792041182518, 0.03206120803952217, 0.007431856356561184, 0.008337318897247314, -0.03359003737568855, 0.023825496435165405, -0.022496389225125313, -0.032001543790102005, -0.006282797548919916, 0.028273427858948708, -0.022146031260490417, 0.015182078815996647, -0.05252915993332863, -0.005385795142501593, -0.013098791241645813, 0.021913282573223114, 0.0021178140304982662, 0.006941625382751226, 0.03456928953528404, 0.0236516110599041, 0.02816499024629593, 0.06346326321363449, 0.0007243360741995275, -0.07229486107826233, -0.029686065390706062, 0.012539074756205082, 0.008300866931676865, -0.039008527994155884, -0.010875648818910122, 0.20271797478199005, 0.01736346259713173, 0.044261254370212555, 0.04939506575465202, 0.0049839625135064125, -0.0024767431896179914, 0.03534650802612305, 0.0019974347669631243, 0.0070791388861835, -0.018091296777129173, 0.04631287604570389, -0.004508038982748985, -0.06701119989156723, 0.03616439178586006, 0.0022297282703220844, 0.005244649015367031, -0.04131923243403435, 0.04230549558997154, 0.03183107450604439, 0.002778921741992235, -0.02164888009428978, -0.018048042431473732, 0.14194564521312714, 0.004581120330840349, 0.014774833805859089, 0.0012510607484728098, 0.00550356088206172, 0.04068301245570183, 0.03501880168914795, 0.00851159542798996, 0.013152322731912136, -0.0017520836554467678, 0.00047245059977285564, 0.023139262571930885, 0.0214094091206789, 0.03765416145324707, 0.024909794330596924, 0.008325701579451561, -0.0397317111492157, 0.0031591164879500866, -0.0037046626675873995, 0.004694529343396425, -0.03633830323815346, 0.024978462606668472, -0.009107854217290878, 0.023207271471619606, -0.046726539731025696, -0.5446058511734009, -0.026935577392578125, 0.027194814756512642, 0.029402248561382294, -0.04107488691806793, 0.03621392697095871, 0.062069423496723175, 0.054985493421554565, -0.005969509482383728, 0.04276454076170921, 0.015932923182845116, 0.03239933028817177, 0.03512411564588547, 0.031290456652641296, -0.0671006590127945, 0.003534757997840643, -0.010950017720460892, -0.013986633159220219, 0.04960855469107628, -0.10234292596578598, -0.02228485234081745, -0.008464100770652294, -0.03442180156707764, 0.03145448490977287, 0.026040421798825264, -0.019052330404520035, 0.016116909682750702, 0.05096961930394173, -0.004086403641849756, 0.053580671548843384, -0.033767540007829666, -0.08693771809339523, 0.020033737644553185, -0.027888374403119087, 0.02287941426038742, 0.009863501414656639, -0.04338567331433296, 0.00497572822496295, 0.04455951228737831, 0.030322764068841934, -0.0031173424795269966, 0.0834893211722374, -0.009331121109426022, 0.0017177138943225145, -0.005869515240192413, -0.021907774731516838, -0.0212319977581501, 0.02991059049963951, -0.024473674595355988, -0.022095805034041405, -0.04945271834731102, -0.00098015449475497, -0.002763633383437991, -0.043764565140008926, -0.07324594259262085, -0.030673861503601074, -0.010249470360577106, -0.038011498749256134, -0.047621604055166245, 0.013686602003872395, -0.005522285588085651, 0.009834879077970982, 0.05313534662127495, -0.015121576376259327, -0.001049891347065568, 0.009680378250777721, -0.016963057219982147, -0.00973921362310648, -0.06159442290663719, 0.00927054975181818, 0.0013980543008074164, -0.021469080820679665, 0.022984489798545837, 0.0008773072040639818, 0.0006212428561411798, -0.0032948998268693686, 0.03182607889175415, 0.051744285970926285, 0.013199808076024055, 0.024311484768986702, -0.0014730532420799136, -0.0955318883061409, -0.0728529542684555, -0.07726041972637177, 0.016432706266641617, 0.00018580566393211484, -0.05015026405453682, -0.007865587249398232, 0.021685540676116943, 0.0017120350385084748, 0.04990267753601074, 0.027872230857610703, -0.03188345208764076, 0.03758653625845909, 0.032291240990161896, -0.009306011721491814, -0.024576988071203232, 0.043738409876823425, -0.043814949691295624, -0.010423011146485806, 0.04514000937342644, -9.460085129830986e-05, 0.0051521118730306625, -0.006015520542860031, -0.017973901703953743, -0.06333457678556442, 0.026716338470578194, -0.008723403327167034, 0.0014049314195290208, 0.0142266396433115, 0.03024635650217533, 0.011856594122946262, 0.06225377693772316, -0.010854107327759266, -0.031827256083488464, -0.006133079528808594, -0.016209274530410767, 0.019004732370376587, -0.06698735803365707, -0.007671052124351263, -0.0022695441730320454, 0.0272910688072443, 0.017041541635990143, -0.028431903570890427, -0.04160701110959053, -0.049872711300849915, -0.06509216874837875, 0.033436667174100876, -0.08631464838981628, -0.019031979143619537, -0.019101716578006744, -0.04706285893917084, 0.017031608149409294, -0.019190512597560883, 0.006831638980656862, 0.021281670778989792, 0.0009450857760384679, 0.038489893078804016, -0.005144525319337845, -0.01629500836133957, -0.021174468100070953, 0.014604905620217323, -0.008622893132269382, -0.053777702152729034, 0.008330917917191982, -0.03933343663811684, -0.04378556087613106, -0.029419414699077606, 0.01430830080062151, 0.05855146795511246, -0.0825839713215828, 0.011077872477471828, 0.0012652920559048653, 0.05714802071452141, 0.012189019471406937, 0.01886526308953762, 0.046005379408597946, 0.014625323005020618, -0.02057652734220028, -0.0074534001760184765, 0.013886867091059685, 0.036532141268253326, 0.026653733104467392, -0.004653465934097767, 0.013161329552531242, 0.007388136349618435, 0.13076601922512054, 0.0008026235154829919, 0.06316705048084259, 0.012826402671635151, 0.007612420711666346, 0.014680149033665657, 0.012937101535499096, 0.0035363028291612864, -0.030543968081474304, 0.03947383910417557, 0.0257368516176939, -0.03819912299513817, -0.010655208490788937, 0.01924959011375904, 0.053211942315101624, -0.010407771915197372, 0.0068090553395450115, -0.04437786340713501, -0.010187662206590176, -0.030269606038928032, -0.03142671659588814, -0.01152266189455986, 0.009298916906118393, -0.016266224905848503, -0.10761386156082153, 0.0031812957022339106, -0.0251407902687788, -0.02256517857313156, 0.11981162428855896, -0.002743573160842061, -0.016204535961151123, -0.03325445577502251, -0.03769983351230621, -0.015706446021795273, 0.009241522289812565, -0.027009282261133194, 0.008881502784788609, -0.03197631984949112, 0.024747323244810104, 0.01595715805888176, -0.0015021058497950435, -0.01997288130223751, 0.03302893787622452, 0.0049940431490540504, 0.009748000651597977, -0.04327692463994026, 0.0055805379524827, 0.005336563102900982, 0.009782589972019196, 0.014434872195124626, 0.009973612613976002, -0.01610538549721241, -0.0021507416386157274, 0.0052222153171896935, 0.0832914188504219, 0.05056695267558098, -0.006331141572445631, -0.005727216135710478, -0.027205223217606544, 0.05863098427653313, -0.003908692859113216, 0.1640438735485077, -0.001473629497922957, 0.018390314653515816, 0.0014244362246245146, -0.016951078549027443, -0.009230625815689564, -0.035518988966941833, -0.020480753853917122, 0.0187605582177639, 0.004457724280655384, -0.04450586810708046, -0.002680458128452301, -0.04141499102115631, -0.015927428379654884, -0.0049190763384103775, 0.017757058143615723, -0.0006599496118724346, 0.003346922341734171, -0.0032970644533634186, 0.0019964799284934998, 0.03532659262418747, -0.0040093339048326015, 0.00972142443060875, -0.01685583032667637, 0.050697050988674164, 0.02757805958390236, -0.01749335788190365, 0.0184802059084177, 0.024975335225462914, 0.03142508864402771, 0.007356136571615934, 0.03292921185493469, 0.0442730113863945, 0.03676542267203331, 0.005031588952988386, 0.0036385213024914265, -0.02613212540745735, -0.039729245007038116, 0.09519609063863754, -0.016121558845043182, 0.0002457669179420918, -0.03406459838151932, 0.012232727371156216, 0.020625898614525795, 0.15110856294631958, -0.05866692215204239, -0.0004588295123539865, 0.015700191259384155, -0.07525159418582916, -0.019168870523571968, 0.031511832028627396, -0.010744336061179638, 0.007066797930747271, 0.007447861600667238, 0.003474270459264517, 0.04702205955982208, 0.03739708662033081, 0.12229405343532562, 0.022168893367052078, -0.019215408712625504, 0.018069088459014893, -0.013569723814725876, 0.006820587906986475, 0.004168996587395668, 0.02258678898215294, -0.020855693146586418, -0.04356931895017624, -0.02644035592675209, -0.038919270038604736, 0.006969272159039974, 0.19725386798381805, -0.037039127200841904, -0.010785884223878384, -0.0031222247052937746, 0.008579881861805916, -0.015181123279035091, -0.02044624462723732, -0.0004942267551086843, 0.0022393923718482256, 0.019755858927965164, 0.07967483252286911, 0.0028198750223964453, 0.009613770991563797, 0.0058938683941960335, -0.00949653796851635, -0.021583590656518936, -0.02931235171854496, -0.026010505855083466, -0.02203526720404625, -0.016391851007938385, 0.0388658381998539, 0.020899873226881027, -0.0029924712143838406, -0.003165804548189044, 0.02898329682648182, 0.04462392255663872, -0.01524279173463583, -0.02869768626987934, -0.029567016288638115, -0.03620070964097977, -0.023992428556084633, -0.0531577430665493, -0.05928860604763031, 0.025680916383862495, 0.017761029303073883, -0.012686114758253098, 0.004734857939183712, 0.0008687840308994055, 0.026378577575087547, 0.14743220806121826, 0.03499620407819748, -0.012974719516932964, 0.012524024583399296, 0.018312601372599602, 0.003224920714274049, 2.6190376956947148e-05, 0.006832062266767025, -0.056229934096336365, 0.014183643274009228, -0.004362177103757858, -0.024065272882580757, 0.007708615157753229, 0.03584616258740425, 0.015877284109592438, 0.021963592618703842, 0.024648934602737427, -0.03052307479083538, 0.004869939759373665, -0.007517841644585133, 0.03962166607379913, 0.005827122367918491, -0.024849476292729378, 0.006111276801675558, -0.008767015300691128, -0.09715936332941055, -0.01940944232046604, -0.05307433009147644, 0.0063306717202067375, -0.030432047322392464, -0.03980459272861481, 0.012579516507685184, -0.028940603137016296, -0.013048706576228142, -0.020731117576360703, -0.004077371675521135, 0.014802445657551289, 0.004488598555326462, -0.0037544481456279755, -0.005062522366642952, -0.0156880971044302, -0.020615242421627045, 0.0038397852331399918, 0.012636179104447365, -0.01200867909938097, -0.04274279251694679, -0.07254946231842041, -0.058661866933107376, -0.008112113922834396, 0.002341554267331958, -0.023578044027090073, -0.03991503268480301, -0.013521555811166763, -0.055928606539964676, 0.023580854758620262, 0.003941800910979509, -0.01783289760351181, -0.012533309869468212, -0.026433425024151802, -0.01367372926324606, 0.002684390638023615, 0.019574064761400223, -0.012904263101518154, 0.0008979302947409451, 0.027897406369447708, -0.04784446954727173, -0.009806102141737938, -0.006041964050382376, 0.03805265575647354, 0.012121662497520447, 0.016065320000052452, -0.014076193794608116, 0.039394304156303406, -0.03246364742517471, 0.004435465671122074, 0.029172096401453018, 0.0967276319861412, -0.02633434534072876, -0.007028376217931509, 0.04668568819761276, -0.006609960924834013, 0.08231144398450851, -0.0113457590341568, -0.0030177393928170204]\"\n./train/jean/n03594734_43949.JPEG,jean,\"[0.005384139716625214, 0.0005604744073934853, 0.022056719288229942, 0.06237775459885597, -0.038242608308792114, 0.005809865891933441, -0.026240212842822075, 0.031151004135608673, 0.007179402746260166, -0.0007662788848392665, 0.01909918338060379, -0.013565662316977978, 0.06211262196302414, 0.020527640357613564, -0.02475900575518608, 0.021965745836496353, 0.10374125093221664, 0.03582170605659485, 0.05424589663743973, -0.0672532320022583, -0.0009857326513156295, 0.03518732264637947, 0.04211939871311188, -0.07276798039674759, 0.020452100783586502, 0.05072780326008797, 0.024569952860474586, -0.018149420619010925, -0.0053034014999866486, 0.0066693793050944805, -0.002251958940178156, 0.00999748520553112, -0.011442800983786583, 0.004263828042894602, 0.03096815198659897, -0.00931953452527523, 0.0015312375035136938, 0.0017194561660289764, 0.0038824700750410557, 0.12940391898155212, -0.033945731818675995, -0.03168250992894173, -0.054048266261816025, -0.0022929012775421143, 0.03371043503284454, 0.029803909361362457, 0.02978457510471344, 0.005156164523214102, -0.031438201665878296, -0.014660300686955452, 0.04286710172891617, -0.0352005697786808, 0.008851385675370693, 0.013342738151550293, -0.023580651730298996, 0.014965442009270191, -0.012352421879768372, -0.011498453095555305, 0.0246619563549757, 0.009073416702449322, 0.020464587956666946, 0.017391882836818695, -0.021582311019301414, 0.031053995713591576, -0.028420530259609222, 0.05636594071984291, -0.027045607566833496, 0.06712901592254639, -0.0016294840024784207, 0.006294324062764645, -0.005855259485542774, 0.03683089092373848, 0.04295725002884865, -0.022120630368590355, 0.006923481356352568, -0.015387719497084618, 0.027756785973906517, -0.011205237358808517, 0.03239726275205612, -0.01412511058151722, -0.010186513885855675, -0.01706114038825035, -0.04357405751943588, -0.043447818607091904, 0.04778825864195824, -0.004192998167127371, -0.02812165580689907, -0.04288320988416672, 0.03184880316257477, 0.016118502244353294, 0.02389906346797943, -0.0010222942801192403, -0.6615744829177856, 0.0569414384663105, 0.02263159491121769, 0.01251891441643238, 0.06018565967679024, 0.050626739859580994, -0.012159050442278385, 0.030867548659443855, 0.025964532047510147, 0.012184870429337025, -0.04533068835735321, -0.017446883022785187, 0.04655039682984352, 0.037000834941864014, -0.1072111576795578, 0.016235431656241417, -0.014300559647381306, -0.005849103908985853, 0.00043584598461166024, -0.016154387965798378, -0.0027922724839299917, 0.020331205800175667, 0.006579156033694744, 0.020701924338936806, -0.04526183009147644, -0.06848910450935364, 0.005972986575216055, -0.016448261216282845, 0.01661643758416176, -0.060009557753801346, -0.016530277207493782, 0.029776638373732567, 0.012124447152018547, 0.03263159468770027, -0.02694384753704071, -0.022014226764440536, 0.010276083834469318, -0.0009291486931033432, 0.00993164163082838, -0.012621361762285233, -0.01416591927409172, 0.09337867051362991, -0.01986558735370636, 0.04614280164241791, -0.005667227320373058, -0.04991242662072182, -0.017750384286046028, -0.004633708391338587, 0.015657519921660423, 0.03578433394432068, -0.028291640803217888, 0.028930578380823135, 0.030757922679185867, 0.004448737483471632, -0.018266817554831505, -0.05305107310414314, 0.02810770273208618, -0.011931180953979492, 0.0012419973500072956, 0.0012246125843375921, 0.11790047585964203, -0.07520259916782379, 0.003066716715693474, -0.023969855159521103, -0.017030766233801842, -0.01310472097247839, 0.06454721838235855, 0.0404517762362957, -0.041727304458618164, -0.019251132383942604, -0.005081434268504381, -0.021903015673160553, -0.0005601728917099535, -0.024795804172754288, 0.0020201695151627064, 0.0543246865272522, 0.004246066324412823, 0.07026828825473785, -0.025800084695219994, 0.013233919627964497, 0.0079727778211236, -0.038971830159425735, 0.008598873391747475, 0.00951386708766222, 0.07391981035470963, -0.008582329377532005, 0.04517684131860733, 0.022529717534780502, 0.014717478305101395, -0.0422992929816246, -0.002114958595484495, -0.0052534532733261585, -0.019982201978564262, 0.05645573511719704, 0.052617672830820084, 0.025674957782030106, 0.004972062073647976, 0.014123954810202122, 0.015811223536729813, 0.04506023973226547, -0.057287994772195816, 0.004406712483614683, 0.02104494534432888, -0.04317955672740936, 0.00941938254982233, -0.011516074649989605, -0.029513206332921982, -0.0039044853765517473, -0.03559877723455429, -0.017078621312975883, -0.004030666314065456, 0.034475114196538925, -0.0010250096675008535, -0.031777385622262955, -0.0483175590634346, 0.01669239066541195, -0.00437482725828886, 0.018565770238637924, -0.018443487584590912, 0.004331185482442379, -0.024525217711925507, 0.046115629374980927, 0.008653342723846436, -0.025888187810778618, -0.002527416218072176, 0.017252644523978233, -0.03763648495078087, 0.0020263579208403826, -0.01448435802012682, 0.04766456410288811, -0.02248239703476429, -0.007751923520117998, -0.02779366821050644, 0.022188015282154083, -0.016366994008421898, -0.0225919671356678, -0.0010577865177765489, 0.007360944524407387, 0.033169958740472794, -0.0007093599997460842, -0.005063877906650305, -0.00033513683592900634, 0.030829312279820442, -0.044992826879024506, -0.01983966864645481, -0.03409121185541153, 0.016804080456495285, 0.030460920184850693, 0.01350368745625019, -0.01345987431704998, -0.047899097204208374, 0.002590837422758341, -0.02592698484659195, -0.0065269251354038715, -0.009843763895332813, 0.002846682444214821, 0.006940868217498064, 0.061788175255060196, -0.0036597480066120625, 7.697127148276195e-05, 0.02624177187681198, -0.01486967597156763, -0.01468909066170454, 0.0181385800242424, -0.05800292640924454, 0.0170739833265543, -0.08068300783634186, 0.017955824732780457, 0.025138327851891518, 0.006172216963022947, 0.011103142984211445, 0.046000681817531586, 0.0005230528186075389, -0.03587639331817627, -0.013842337764799595, 0.02985551208257675, 0.050530292093753815, -0.0031532554421573877, -0.048905305564403534, 0.003795928554609418, -0.02647441253066063, 0.023203661665320396, -0.020566830411553383, -0.017628949135541916, -0.03225160017609596, -0.019465962424874306, -0.0073747336864471436, 0.003224398009479046, 0.0180524792522192, -0.004913595970720053, -0.061499711126089096, 0.032183051109313965, -0.02251584827899933, -0.02392585761845112, 0.025477368384599686, -0.010473175905644894, -0.04622241482138634, -0.020704984664916992, 0.025312844663858414, 0.04385675489902496, 0.013261568732559681, 0.005821171682327986, -0.012005381286144257, 0.021961327642202377, -0.05058588087558746, -0.02800692617893219, 0.02602178230881691, 0.031637731939554214, 0.014106901362538338, -0.021899588406085968, -0.013979211449623108, -0.00014139620179776102, -0.020550791174173355, -0.036704275757074356, -0.040734756737947464, 0.06786929070949554, -3.5031771403737366e-05, 0.0014991175848990679, -0.02661909908056259, -0.004136039409786463, 0.09333793818950653, 0.058270037174224854, 0.0009215320460498333, 0.06700722128152847, 0.040821611881256104, 0.019536051899194717, 0.0005030740867368877, -0.01565174013376236, -0.02144562639296055, 0.1243678480386734, -0.040882401168346405, -0.06700685620307922, 0.0036216871812939644, 0.0018005403690040112, -0.0419311486184597, -0.044969864189624786, 0.0021600769832730293, 0.022847997024655342, -0.005325599107891321, -0.01872384175658226, 0.02374892123043537, -0.005036687478423119, 0.040285561233758926, 0.002034772653132677, -0.005614066496491432, 0.03883497044444084, 0.0072397212497889996, 0.01950354315340519, -0.009558177553117275, 0.005514331627637148, -0.0077634043991565704, 0.017574632540345192, 0.015329551883041859, -0.015979627147316933, -0.016596214845776558, 0.030369708314538002, 0.01243579387664795, -0.004618503153324127, 0.05006147548556328, -0.02062637358903885, 0.013121734373271465, -0.008106544613838196, -0.030576882883906364, 0.001794134033843875, 0.003994893282651901, 0.12221208214759827, 0.018938355147838593, -0.011304750107228756, 0.06168820336461067, 0.01782580465078354, -0.02019832469522953, -0.04085727035999298, 0.10297434777021408, -0.025482436642050743, -0.01719677448272705, 0.010819296352565289, -0.007228091359138489, 0.03117542900145054, 0.012119846418499947, 0.010580262169241905, 0.002873095218092203, -0.00030363028054125607, 0.02654382400214672, 0.021921515464782715, 0.10174944996833801, -0.006912982556968927, 0.0213803481310606, -0.004097628872841597, 0.028946226462721825, -0.028976574540138245, 0.04537723585963249, -0.05816352367401123, 0.016617845743894577, 0.003764163935557008, 0.009027495980262756, -0.027577634900808334, -0.02800239622592926, -0.08120272308588028, -0.0869230404496193, 0.019206231459975243, 0.027154630050063133, 0.01610264554619789, 0.012726647779345512, 0.007955209352076054, 0.02089179866015911, -0.015790754929184914, 0.05280483886599541, -0.003785663517192006, -0.018874866887927055, 0.051814716309309006, 0.09466832876205444, 0.023023074492812157, 0.01252170279622078, -0.029514573514461517, -0.0006779135437682271, -0.0009592006681486964, -0.04725360870361328, 0.005291900131851435, -0.0030482651200145483, 0.010386253707110882, 0.02903035841882229, -0.03271719068288803, -0.005158631131052971, -0.009163021109998226, 0.0024484796449542046, -0.013943965546786785, -0.007411076221615076, -0.018395643681287766, 0.013857358135282993, -0.009290352463722229, 0.02658921293914318, 0.08501224219799042, 0.003693240461871028, -0.014312801882624626, -0.034091517329216, -0.004812336526811123, 0.047523632645606995, -0.013608270324766636, 0.024852175265550613, 0.04774204641580582, 0.05499592423439026, 0.0007217992097139359, -0.003447467228397727, 0.027630232274532318, -0.026661653071641922, 0.023339778184890747, 0.021280305460095406, 0.005077281966805458, 0.0042786370031535625, -0.02063821256160736, 0.00228450377471745, -0.04209037497639656, -0.006756443064659834, 0.0039950180798769, -0.002047046786174178, 0.015371897257864475, -0.020065180957317352, -0.05600827559828758, -0.06856034696102142, 0.006945015862584114, 0.013411104679107666, -0.010323276743292809, -0.004458795301616192, -0.005137507803738117, 0.038633160293102264, -0.0010921313660219312, -0.03205404430627823, -0.039518631994724274, -0.040164701640605927, -0.02080790139734745, -0.015061317943036556, -0.057714346796274185, 0.04966989532113075, -0.04483197256922722, -0.030303364619612694, 0.009804361499845982, -0.0019579711370170116, 0.009092450141906738, 0.03805893659591675, 0.029196206480264664, 0.024797571823000908, -0.005079813301563263, 0.008887635543942451, -0.03536214679479599, 0.027068957686424255, -0.005047260317951441, -0.028057970106601715, -0.020371830090880394, 0.004110309761017561, -0.02954355627298355, 0.04610816761851311, -0.01058388501405716, -0.005839231889694929, 0.024042120203375816, 0.00047185385483317077, 0.026374148204922676, -0.04614023491740227, -0.020000506192445755, 0.0006193991866894066, 0.0065586864948272705, 0.022866718471050262, -0.06819094717502594, -0.03679394721984863, 0.0019869720563292503, 0.0052899811416864395, 0.04659387841820717, 0.01276194117963314, 0.00586628308519721, -0.07486347109079361, 0.010069104842841625, -0.025012647733092308, 0.02191348746418953, 0.02635444886982441, 0.026750760152935982, -0.013848259113729, -0.008952016942203045, 0.008897703140974045, 0.055879250168800354, -0.011386322788894176, 0.07375964522361755]\"\n./train/jean/n03594734_6277.JPEG,jean,\"[-0.019220562651753426, 0.024717286229133606, -0.00964001938700676, 0.004655081778764725, -0.03944068029522896, 0.020604457706212997, -0.016848653554916382, -0.10451135039329529, 0.03295749053359032, 0.014575486071407795, 0.030898336321115494, 0.007368828170001507, 0.048814818263053894, 0.0009533989941701293, 0.015426497906446457, -0.009953558444976807, 0.1353660523891449, 0.006987568456679583, -0.016271263360977173, -0.03795282542705536, -0.03770376741886139, 0.017830828204751015, 0.03055090270936489, -0.024212468415498734, 0.017855476588010788, 0.01824437826871872, 0.0160063449293375, 0.028832923620939255, 0.024514544755220413, 0.0184274110943079, 0.0252299252897501, -0.01893637515604496, -0.009914465248584747, 0.021763775497674942, 0.002950162161141634, -0.00020202041196171194, 0.02680116333067417, 0.044018909335136414, -0.025730160996317863, 0.06459260731935501, -0.01871855929493904, -0.03859420493245125, -0.01912391185760498, 0.0028938131872564554, 0.01424546167254448, -0.007689789403229952, -0.01318434439599514, 0.010062889195978642, -0.029552631080150604, 0.013688463717699051, 0.022827455773949623, -0.012859731912612915, -0.005667535588145256, -0.0076690781861543655, 0.0017879616934806108, -0.008233116939663887, 0.0037649041041731834, 0.027697009965777397, 0.006451333407312632, 0.007259667385369539, 0.11828700453042984, 0.018801618367433548, 0.02172704227268696, 0.025718167424201965, -0.008514097891747952, -0.0021197872702032328, 0.032929517328739166, -0.03567000851035118, 0.0167947206646204, 0.03246842697262764, 0.016888704150915146, 0.006789127830415964, 0.0013910665875300765, 0.05695226788520813, 0.010263185948133469, 0.006951471325010061, 0.04595690220594406, -0.025429895147681236, 0.010987791232764721, 0.03145138546824455, -0.03781910240650177, -0.03949544206261635, -0.006587303709238768, -0.011193476617336273, 0.028706738725304604, -0.005860654637217522, -0.04091551899909973, -0.03774452954530716, -0.01078587956726551, 0.03900722786784172, 0.014817156828939915, -0.007477976847440004, -0.5872605443000793, 0.03809521347284317, 0.013411627151072025, 0.01687702350318432, 0.030685823410749435, 0.07169965654611588, 0.03280147910118103, 0.13099709153175354, 0.012834648601710796, 0.0033102466259151697, -0.015106730163097382, -0.06314551085233688, -0.001217295415699482, 0.027098188176751137, -0.02360248938202858, -0.04568914324045181, 0.03019309788942337, -0.010346414521336555, 0.034231677651405334, 0.0035997808445245028, 0.020469751209020615, 0.003153885481879115, -0.003081665374338627, 0.02859344333410263, 0.027896055951714516, -0.013904630206525326, -0.04786119982600212, -0.02975734882056713, 0.030897926539182663, 0.010100330226123333, -0.014897143468260765, 0.005819079000502825, -0.02939792349934578, 0.04728415608406067, -0.02271779626607895, -0.004572713281959295, -0.0034583904780447483, 0.011710583232343197, 0.024782521650195122, 0.015696506947278976, -0.04243237525224686, 0.06962229311466217, -0.0005591714871115983, 0.00631692074239254, 0.0404815748333931, 0.02774268388748169, -0.019514165818691254, -0.014587796293199062, -0.011232131160795689, 0.01616116799414158, -0.01381518505513668, 0.04325317591428757, -0.006382044404745102, 0.017391186207532883, -0.017687281593680382, 0.002802269533276558, 0.010276632383465767, 0.022847235202789307, 0.033914774656295776, 0.014022033661603928, 0.11969195306301117, -0.03311491757631302, -0.0007927822880446911, 0.01279495470225811, 0.0006803838768973947, 0.007869113236665726, -0.022016506642103195, 0.03564392402768135, -0.010039379820227623, 0.020246433094143867, 0.01551510114222765, -0.04874655604362488, -0.01595032587647438, 0.009512252174317837, 0.00847038347274065, -0.006587126757949591, 0.011934078298509121, 0.055849749594926834, -0.012872722931206226, 0.047935135662555695, -0.007562956772744656, -0.009320535697042942, 0.028777698054909706, -0.001313761342316866, 0.12311787903308868, 0.0008019625092856586, -0.007167843170464039, 0.004701992496848106, 0.037042781710624695, -0.006031556986272335, 0.04252643138170242, -0.009194836020469666, -0.015227999538183212, 0.02532324194908142, 0.008993738330900669, -0.012888782657682896, -0.029983164742588997, 0.033666349947452545, -0.012752179056406021, 0.03268706798553467, -0.020671598613262177, -0.004962096456438303, 0.02721305936574936, -0.031202904880046844, 0.025769660249352455, 0.010240850038826466, -0.03201622515916824, 0.033948712050914764, -0.006034079473465681, -0.05129820853471756, -0.002356745069846511, 0.026031261309981346, 0.011275838129222393, -0.04000046104192734, -0.03301789611577988, 0.04714873060584068, -0.02632272243499756, -0.030702557414770126, -0.022722478955984116, -0.011336381547152996, -0.0176283810287714, 0.032472845166921616, -0.05197647586464882, 0.042164839804172516, -0.04024888947606087, 0.034055136144161224, 0.004300463479012251, -0.0016908871475607157, -0.02443619817495346, -0.06463035196065903, 0.011008324101567268, 0.002626235829666257, -0.011908077634871006, 0.02618805505335331, 0.007536816410720348, -0.058947280049324036, 0.022519076243042946, 0.018315818160772324, 0.03084770031273365, 0.0009801771957427263, -0.031769879162311554, 0.04106759652495384, 0.013127066195011139, -0.019020408391952515, 0.006915432866662741, -0.012016555294394493, -0.015508247539401054, -0.002010883530601859, 0.03150847926735878, 0.04730885848402977, -0.04441562294960022, 0.011927017942070961, -0.01262728963047266, 0.009012287482619286, 0.003709478536620736, 0.018248457461595535, 0.01222369633615017, 0.03257349878549576, 0.03686701878905296, -0.023738853633403778, -0.018032630905508995, 0.0028671494219452143, 0.014035376720130444, -0.03197898343205452, -0.0074718971736729145, 0.0076950909569859505, -0.014539324678480625, -0.028468772768974304, 0.01969394087791443, -0.0067177205346524715, 0.028482496738433838, -0.022724032402038574, 0.011057371273636818, -0.015216791070997715, 0.0033461584243923426, 0.011118861846625805, 0.055488333106040955, 0.026654580608010292, -0.049606405198574066, 0.014691900461912155, 0.03077523782849312, -0.002111291280016303, 0.02671409770846367, -0.018076514825224876, -0.01713571324944496, 0.013636788353323936, 0.004687362350523472, -0.008293543010950089, -0.008239141665399075, 0.008391952142119408, -0.11053653806447983, 0.00821757037192583, 0.027985259890556335, 0.0105227530002594, 0.21451270580291748, 0.004472055472433567, -0.0031930075492709875, -0.037774380296468735, 0.06980036944150925, 0.02042275480926037, -0.010000590234994888, -0.005386334843933582, 0.027151288464665413, 0.00167977181263268, -0.050434477627277374, 0.010295437648892403, 0.016949614509940147, 0.06172306463122368, -0.06822887808084488, 0.03359087184071541, 0.07123701274394989, -0.02790948562324047, 0.044726695865392685, -0.08324050158262253, 0.0017690809909254313, 0.02146044373512268, -0.020773563534021378, 0.02895171195268631, 0.04888792708516121, 0.007255125790834427, 0.06942562013864517, 0.0668303370475769, 0.027126960456371307, -0.01947391964495182, 0.014345969073474407, 0.041971027851104736, -0.016345856711268425, -0.022462967783212662, -0.039064303040504456, 0.2475004643201828, -0.004485790152102709, -0.015227972529828548, 0.02852904424071312, -0.002100548706948757, 0.00020236104319337755, 0.007100760005414486, 0.041262734681367874, -0.03243725746870041, -0.008274526335299015, 0.005620541982352734, 0.026933282613754272, -0.023716552183032036, 0.004668996669352055, 0.03873163089156151, 0.026823285967111588, -0.03459496796131134, -0.020634550601243973, -0.0015979859745129943, -0.016096707433462143, 0.047767266631126404, -0.005342497956007719, 0.046623483300209045, 0.0018613362917676568, -0.02396085485816002, -0.01995968632400036, 0.04890032485127449, 0.03983806073665619, 0.006515451241284609, 0.06555034220218658, 0.024164624512195587, -0.02224133163690567, 0.05272936448454857, 0.05309682711958885, -0.029609760269522667, -0.019367367029190063, 0.06621803343296051, -0.03907525911927223, -0.046136077493429184, 0.11123617738485336, -0.02360530197620392, 0.010012620128691196, 0.024246864020824432, 0.04181671515107155, -0.006171969696879387, 0.03215267136693001, -0.012245132587850094, -0.004610806703567505, -0.01970800571143627, 0.019259966909885406, 0.015410300344228745, -0.002709123305976391, 0.018126105889678, -0.008747117593884468, -0.002409889129921794, 0.08520599454641342, -0.03296826034784317, 0.04998194798827171, 0.004518924746662378, 0.04226663336157799, -0.03796974569559097, -0.029596073552966118, -0.01665731891989708, -0.02728482149541378, 0.004041016101837158, -0.004766629543155432, -0.02448316663503647, 0.015136949717998505, 0.01809203065931797, -0.06180231273174286, 0.045258328318595886, 0.02173740789294243, 0.018516112118959427, -0.026405759155750275, 0.028628677129745483, 0.011324663646519184, -0.015854401513934135, 0.050848718732595444, 0.011586296372115612, 0.0006051996606402099, 0.05193395912647247, 0.10317157953977585, 0.026360606774687767, -0.004637964069843292, -0.026936179026961327, -0.01605471968650818, -0.009202574379742146, -0.040126197040081024, 0.05772516131401062, -0.0034030494280159473, -0.017990970984101295, 0.019783614203333855, -0.015232520177960396, -0.045580796897411346, 0.012415642850100994, 0.024541379883885384, -0.020288608968257904, -0.02315640263259411, -0.0384565144777298, -0.0032805639784783125, 0.03277123346924782, -0.024691252037882805, 0.10032518953084946, 0.05558503791689873, 0.007953306660056114, 0.009788799099624157, -0.006227351725101471, -0.06471212208271027, 0.0032078351359814405, 0.03363851457834244, 0.022024912759661674, 0.022594530135393143, 0.013232424855232239, -0.014677433297038078, 0.0027669048868119717, 0.0016072129365056753, 0.027720170095562935, 0.036309290677309036, 0.05654482915997505, 0.0007359957089647651, 0.033562205731868744, 0.034600939601659775, 0.030612997710704803, 0.040247172117233276, -0.07962816953659058, -0.04596684128046036, 0.000842834182549268, 0.009921013377606869, -0.008033419027924538, -0.06151759251952171, 0.03058401495218277, 0.04940849170088768, -0.059317782521247864, 0.003929860424250364, -0.021498678252100945, -0.020534781739115715, 0.002784173237159848, -0.009048149921000004, 0.028428329154849052, 0.019595419988036156, -0.009011122398078442, 0.009923432022333145, -0.0028429918456822634, -0.0019513237057253718, -0.008391874842345715, 0.024614127352833748, -0.009447097778320312, -0.007351917214691639, -0.004359281621873379, -0.020089032128453255, 0.018201246857643127, 0.014467447996139526, 0.015853049233555794, 0.013488966040313244, -0.03158680722117424, 0.015499369241297245, -0.02963239885866642, -0.013839310966432095, -0.04137803986668587, -0.00847906619310379, -0.0066124266013503075, 0.004134650807827711, -0.03132520243525505, 0.0035241662990301847, 0.03293558210134506, -0.010813433676958084, 0.014223854057490826, 0.0105642881244421, -0.032251302152872086, 0.008709067478775978, -0.015025151893496513, -0.06997100263834, -0.02516862377524376, -0.008502586744725704, 0.0048204949125647545, -0.02292061783373356, -0.002096828306093812, 0.030922600999474525, 0.018194027245044708, 0.0351748988032341, -0.009993432089686394, -0.02920580469071865, 0.010986695066094398, 0.06650547683238983, -0.004544876981526613, -0.030922571197152138, -0.0013224165886640549, 0.00807326938956976, 0.12624263763427734, -0.023779142647981644, 0.04821734130382538]\"\n./train/jean/n03594734_24159.JPEG,jean,\"[0.010868342593312263, 0.01871558465063572, 0.015267259441316128, 0.00272343005053699, -0.02959972620010376, -0.0017163503216579556, -0.008350824937224388, -0.011647334322333336, 0.020928258076310158, 0.007770449388772249, 0.04013310372829437, -0.014042616821825504, 0.028422480449080467, 0.029466573148965836, -0.016471385955810547, 0.004357824567705393, 0.08719909191131592, 0.017259838059544563, -0.010290474630892277, -0.026883672922849655, 0.03157258778810501, -0.010694600641727448, -0.01268729567527771, -0.04910366237163544, 0.021032636985182762, 0.006732075475156307, -0.009415331296622753, 0.0008495888905599713, 0.013686704449355602, -0.014371559955179691, 0.022396400570869446, 0.00980012770742178, 0.00017182821466121823, 0.007060657255351543, 0.023716194555163383, -0.028178934007883072, 0.01288866251707077, 0.01793324202299118, -0.0030787114519625902, 0.07420177757740021, -0.01750495657324791, 0.024094700813293457, 0.003413897706195712, 0.018218912184238434, 0.007197806145995855, 0.1213216707110405, 0.01280094776302576, 0.014567801728844643, -0.0005421494133770466, 0.0055866120383143425, 0.010666726157069206, -0.01515259314328432, -0.017494451254606247, 0.011945405974984169, -0.00439161853864789, 0.05255189538002014, 0.03708264231681824, 0.015820488333702087, -0.03998780623078346, 0.0013210491742938757, 0.08421408385038376, 0.003575538285076618, -0.009407196193933487, 0.004960955586284399, 0.013518601655960083, -0.023760594427585602, -0.010996448807418346, 0.016188615933060646, 0.027926642447710037, -0.027858247980475426, 0.000787261058576405, 0.013317822478711605, 0.004875349812209606, 0.03435768932104111, 0.005267905071377754, -0.02220437116920948, 0.016966067254543304, 0.012456213124096394, 0.007024367805570364, 0.022384800016880035, 0.0011392130982130766, -0.025405291467905045, 0.014561324380338192, -0.018106132745742798, 0.00967492163181305, 0.002705432241782546, 0.0008471233304589987, -0.01659703627228737, -0.01568746007978916, 0.021686742082238197, 0.00038939897785894573, -0.004618926905095577, -0.7639380097389221, -0.024647675454616547, 0.027523627504706383, -0.008660959079861641, 0.006111662834882736, -0.00607893755659461, 0.007374943234026432, 0.06469294428825378, -0.03154006600379944, -0.009099547751247883, 0.006676800083369017, -0.005902510602027178, 0.027209576219320297, -0.003562249941751361, 0.09140241891145706, 0.003358538495376706, -0.008776514790952206, -0.0016709910705685616, -0.018972238525748253, 0.006485875230282545, 0.028845753520727158, -0.009442867711186409, -0.01622120477259159, -0.011569288559257984, 0.01562747359275818, -0.015371222980320454, -0.01264389418065548, 0.006072022020816803, 0.005169479176402092, -0.06331054121255875, -0.010039971210062504, 0.007055893074721098, -0.016123071312904358, 0.007496166508644819, -0.013866749592125416, -0.017101025208830833, 0.013604297302663326, 0.01574227772653103, 0.02092806063592434, 0.01802709698677063, -0.007922901771962643, 0.08894050121307373, -0.040386270731687546, 0.04544719308614731, 0.0032036779448390007, -0.05820021778345108, -0.0159183070063591, 0.009200194850564003, 0.004000743851065636, -0.03309172764420509, -0.03909476101398468, 0.015829024836421013, 0.005558428354561329, 0.034216735512018204, -0.013028446584939957, 0.03107239119708538, 0.020436599850654602, -0.0026254260446876287, -0.006470716092735529, 0.009453373961150646, 0.07240094989538193, 0.0002201739844167605, -0.0029879703652113676, -0.005797912832349539, -0.02823631651699543, 0.020904995501041412, -0.03328000009059906, 0.015249750576913357, -0.01362928468734026, -0.0016856432193890214, 0.023717209696769714, -0.015712479129433632, -0.006051153410226107, 0.01413506455719471, 0.0004359828308224678, 0.035025835037231445, -0.0033736680634319782, 0.012009384110569954, -0.002370619447901845, 0.022404469549655914, 0.004071645438671112, -0.02483181841671467, -0.03222833201289177, 0.0035404886584728956, 0.08780614286661148, -0.003176321741193533, 0.03596007451415062, -0.012744909152388573, 0.04377879202365875, -0.041786327958106995, -0.0014840394724160433, 0.0015147392405197024, 0.0015000882558524609, 0.005061745177954435, 0.0038688783533871174, -0.016849661245942116, 0.02422954887151718, 0.00686579430475831, 0.03553925082087517, -0.005958838388323784, 0.017621228471398354, -0.011553882621228695, 0.01613522134721279, -0.015083016827702522, -0.022866565734148026, -0.004807886201888323, -0.027176223695278168, 0.0015859251143410802, -0.0409817136824131, -0.013062168844044209, 0.006091452203691006, -0.01466295588761568, 0.009522873908281326, -0.017435690388083458, 0.028875263407826424, 0.004558397922664881, 0.009758303873240948, 0.0020483783446252346, -0.04082322120666504, 0.035205550491809845, -0.01777915470302105, 0.06260503828525543, 0.01892426796257496, 0.03442135825753212, -0.0018131054239347577, 0.007363584358245134, 0.006307654548436403, 0.015351244248449802, 0.051595620810985565, -0.013729618862271309, -0.008825983852148056, -0.01991596445441246, 0.00714698014780879, -0.028359171003103256, 0.001245418912731111, -0.022650321945548058, 0.004726665560156107, 0.009695875458419323, -0.016555901616811752, 0.0015685149701312184, -0.037534985691308975, 0.019997460767626762, -0.006704316008836031, -0.035014744848012924, -0.015340570360422134, -0.00011540477134985849, -0.0005098450346849859, 0.02213825099170208, 0.02614813670516014, 0.005879752337932587, -0.0002542873262427747, -0.02549964189529419, -0.030413983389735222, -0.004567896015942097, -0.005886301398277283, -0.002087595872581005, 0.017106354236602783, 0.0207537729293108, 0.0015220920322462916, 0.026577984914183617, 0.026506837457418442, 0.020676620304584503, 0.0401502326130867, -0.030947955325245857, 0.004994206130504608, 0.0031370162032544613, -0.07933328300714493, -0.036438457667827606, -0.0375361405313015, -0.022771082818508148, 0.004102634731680155, 0.01114965695887804, -0.014382959343492985, -0.005725170020014048, 0.01525035034865141, 0.0014515265356749296, 0.02281067706644535, -0.01807583123445511, 0.0030519787687808275, 0.023966006934642792, 0.06253843754529953, 0.01207582838833332, 0.005564916413277388, -0.010069643147289753, -0.0037019243463873863, 0.012311927042901516, 0.0115048848092556, -0.00622541131451726, -0.008816537447273731, -0.0027425852604210377, -0.06723066419363022, 0.011771626770496368, -0.0026510292664170265, -0.034728989005088806, 0.04331095516681671, 0.004099217709153891, 0.026456331834197044, -0.015204207971692085, -0.012207104824483395, -0.012070753611624241, -0.014346460811793804, 0.012770870700478554, 0.020685967057943344, -0.022480109706521034, -0.08007344603538513, 0.004036588594317436, 0.011739742010831833, 0.0071062492206692696, 0.0005367494304664433, 0.007368107326328754, 0.04185080900788307, 0.017230382189154625, 0.026837456971406937, -0.09860993176698685, -0.023661989718675613, 0.022158486768603325, 0.005866704508662224, -0.00484071671962738, 0.00416551623493433, -0.04833798110485077, 0.0887923538684845, 0.023646816611289978, 0.030620679259300232, 0.03344551846385002, 0.00878579169511795, 0.07380201667547226, -0.03126786649227142, -0.019893676042556763, -0.005469853989779949, 0.06605920940637589, -0.0019603611435741186, -0.03793487697839737, 0.00029685540357604623, -0.01548851653933525, -0.013468083925545216, -0.011376217007637024, 0.0010709791677072644, 0.06614667922258377, -0.01818809099495411, -0.04926100745797157, 0.02446851134300232, -0.02445623278617859, -0.012430072762072086, -0.009148446843028069, 0.017357030883431435, -0.001050127437338233, 0.016065021976828575, 0.031192200258374214, -0.0009642568766139448, 0.0046470738016068935, -0.028483331203460693, -0.002115720184519887, -0.008412417955696583, 0.016067782416939735, 0.010786283761262894, 0.013090417720377445, 0.003907197155058384, 0.03754624351859093, 0.113937608897686, -0.014570602215826511, 0.021731305867433548, 0.0006398663390427828, 0.007378232665359974, 0.04283857345581055, -0.023228315636515617, 0.0886043831706047, -0.015354327857494354, -0.03211348503828049, 0.017232442274689674, 0.03362059220671654, 0.006462659686803818, 0.0497271865606308, -0.009605631232261658, -0.011126326397061348, 0.005213373340666294, -0.0376213937997818, 0.04052598774433136, 0.015562045387923717, 0.014452207833528519, 0.0255288053303957, -0.0031214456539601088, -0.028407054021954536, 0.0063614691607654095, -0.002809548983350396, 0.12673139572143555, 0.00516201788559556, 0.014306953176856041, 0.03241701051592827, 0.00013892495189793408, -0.059991270303726196, 0.0017610453069210052, -0.014414777047932148, -0.01880739815533161, 0.032501086592674255, 0.016718124970793724, -0.04072917625308037, -0.01526353508234024, 0.07946452498435974, -0.09105455130338669, 0.014210582710802555, -0.008781438693404198, 0.009967678226530552, 0.0017750983824953437, 0.027430670335888863, 0.02494630217552185, -0.004508334677666426, 0.012958134524524212, 0.020723383873701096, -0.034394681453704834, 0.027635809034109116, 0.11128158867359161, 0.014781841076910496, 0.004380596335977316, -0.012552709318697453, 0.02794710546731949, 0.00030563524342142045, -0.02310936152935028, -0.021422188729047775, 0.01403516624122858, -0.0059362114407122135, 0.003347183344885707, -0.03529899939894676, -0.007907044142484665, -0.014981643296778202, 0.034471143037080765, 0.03254339471459389, -0.031541742384433746, -0.01569822058081627, -0.02160981111228466, 0.03310171887278557, 0.02097012847661972, 0.02324056066572666, 0.003062369767576456, 0.015913264825940132, -0.018963754177093506, -0.018031982704997063, 0.08732450008392334, 0.03629397600889206, 0.010525837540626526, 0.023663047701120377, 0.09664236754179001, -0.0032574650831520557, -0.01802641525864601, 0.009284269995987415, 0.011096249334514141, 0.0034467040095478296, 0.013928066939115524, 0.03315480425953865, 0.014352712780237198, 0.058761946856975555, 0.00024970664526335895, 0.002609426621347666, 0.00316821807064116, 0.01335460226982832, 0.01673448458313942, 0.014348478987812996, -0.01285166572779417, 0.012046203017234802, 0.008883580565452576, -0.018490422517061234, 0.006382599472999573, 0.011946534737944603, 0.003109591780230403, 0.02116517350077629, 0.015453262254595757, 0.020256374031305313, 0.010325247421860695, 0.05577011778950691, 0.03243977949023247, -0.0023574531078338623, -0.03562603518366814, -0.014914223924279213, -0.003418134758248925, 0.012583767995238304, -0.030413703992962837, -0.023627761751413345, -0.001861330820247531, 0.0018395426450297236, 0.02334056794643402, -0.011196721345186234, 0.00188669771887362, -0.024107370525598526, -0.018740570172667503, -0.004339372739195824, 0.025059737265110016, -0.002090656431391835, -0.004964321851730347, -0.0003604160447139293, -0.006474816706031561, -0.012503557838499546, -0.038704607635736465, 0.0007573782349936664, -0.022380487993359566, -0.0056401463225483894, -0.005248475354164839, 0.005364641547203064, 0.0019959399942308664, -0.030642857775092125, 0.01317458227276802, -0.019580041989684105, -0.006059072911739349, -0.04015515744686127, -0.015303167514503002, -0.009661735966801643, -0.036195576190948486, -0.0197795070707798, 0.0028483399655669928, 0.008663494139909744, -0.025569453835487366, 0.01871437020599842, -0.018295489251613617, 0.00894463062286377, 0.06953819841146469, -0.032800380140542984, 0.01412203162908554, 0.0027800516691058874, -0.006681911181658506, 0.08049354702234268, -0.00985292624682188, -0.004441693425178528]\"\n./train/jean/n03594734_9714.JPEG,jean,\"[-0.009134986437857151, 0.03921075165271759, 0.03525053709745407, 0.005668971687555313, 0.004338265862315893, -0.007020590361207724, -0.006882478483021259, 0.00826993864029646, -0.02702222764492035, -7.319793803617358e-05, 0.027612369507551193, -0.043377142399549484, -0.005647329613566399, 0.02943223901093006, 0.008730181492865086, -0.031236615031957626, -0.0038105829153209925, -0.0020977724343538284, 0.02372226119041443, -0.035238467156887054, -0.019032292068004608, 0.002009755000472069, 0.03298744186758995, -0.02449977584183216, 0.044280752539634705, 0.06340591609477997, -0.030266549438238144, 0.007656428962945938, -0.02297338843345642, -0.03145899996161461, 0.03663483262062073, -0.004038655199110508, -0.013484368100762367, -0.020061541348695755, -0.0031431971583515406, -0.015710314735770226, 0.025240587070584297, -0.017313743010163307, 0.004223180003464222, 0.06317298859357834, -0.001721603563055396, -0.009013012051582336, -0.03522621467709541, 0.01099491212517023, 0.017953231930732727, -0.19098080694675446, 0.04515455663204193, -0.021905753761529922, -0.02946009300649166, 0.005790542811155319, -0.033924490213394165, 0.03631838038563728, 0.01962747983634472, -0.030832653865218163, -0.00984378531575203, 0.09717129170894623, 0.010976841673254967, 0.023800961673259735, 0.015308079309761524, -0.025630123913288116, -0.00414964510127902, 0.03999336063861847, 0.004493105690926313, 0.021173084154725075, -0.05342509225010872, 0.010545355267822742, 0.008923297747969627, 0.06602015346288681, 0.0008176873088814318, 0.004392106086015701, 0.0012511826353147626, -0.008654589764773846, -0.009675932116806507, 0.01744900830090046, 0.01591167412698269, 0.026464072987437248, -0.011998791247606277, -0.0019430785905569792, -0.04288056865334511, -0.05420731008052826, 0.04483475536108017, 0.02149069309234619, 0.007373455446213484, -0.0006483050528913736, 0.023892777040600777, 0.037891414016485214, 0.001074326690286398, -0.002122160280123353, -0.04086875915527344, 0.03034229762852192, -0.03582342714071274, -0.05777578055858612, -0.6815584897994995, -0.016151314601302147, 0.02000478282570839, -0.022141676396131516, 0.0005382458330132067, 0.008813442662358284, -0.028146330267190933, -0.11525730043649673, 0.01829095371067524, 0.0018124360358342528, -0.028932688757777214, 0.03422011807560921, -0.005491182208061218, -0.008005072362720966, -0.05791718512773514, 0.00983075238764286, -0.041940443217754364, 0.02496781386435032, 0.0199875608086586, -0.07693207263946533, 0.026701129972934723, -0.0022282665595412254, 0.0028324744198471308, -0.0807836651802063, -0.0006485566846095026, -0.014536295086145401, -0.007779812440276146, -0.011368236504495144, -0.033848587423563004, -0.02347453311085701, -0.03072330914437771, -0.004591208882629871, -0.009114472195506096, -0.024388901889324188, -0.014770044945180416, -0.07138483226299286, -0.005270202178508043, -0.007910387590527534, 0.02499324642121792, -0.013775639235973358, -0.05662645772099495, 0.08828816562891006, -0.03524087369441986, 0.06187058240175247, 0.018482299521565437, -0.023458164185285568, -0.04007181152701378, 0.02189471945166588, 0.030437147244811058, -0.04467025771737099, -0.10418196767568588, 0.05272582545876503, -0.0115615613758564, -0.003537080017849803, -0.029020879417657852, 0.01736525446176529, -0.039151523262262344, 0.030020616948604584, 0.018738113343715668, 0.0038631160277873278, 0.04620044678449631, 0.04157232493162155, -0.021129630506038666, 0.005571785848587751, 0.01703484356403351, 0.03651144355535507, 0.022999994456768036, 0.0014224954647943377, -0.047710370272397995, -0.020186204463243484, -0.030201172456145287, -0.02840675413608551, -7.028193795122206e-05, -0.031281616538763046, 0.014064407907426357, 0.014165901578962803, 0.015973739326000214, 0.03484554588794708, -0.017340674996376038, 0.00945278536528349, 0.0013896364253014326, -0.03895837068557739, 0.030235346406698227, 0.001071087084710598, 0.031116290017962456, 0.012241117656230927, -0.05991921201348305, 0.006136161740869284, 0.062254901975393295, -0.040148600935935974, 0.03411733731627464, -0.0030865913722664118, -0.03572378307580948, 0.030109262093901634, 0.054210346192121506, -0.001956242835149169, 0.012930992059409618, 0.021738778799772263, -0.01185770332813263, 0.018246417865157127, -0.0025679320096969604, 0.03727991506457329, -0.018419526517391205, -0.0026864639949053526, -0.00023560300178360194, -0.04448077082633972, 0.014484611339867115, -0.012333636172115803, 0.015314070507884026, 0.012672007083892822, 0.04107977822422981, 0.023486198857426643, -0.0025732070207595825, -0.009289265610277653, -0.026443589478731155, -0.009039937518537045, -0.014272228814661503, 0.06020252779126167, -0.04648016020655632, 0.05913932994008064, 0.03378477692604065, 0.03531147539615631, -0.0298371110111475, 0.031588006764650345, 0.03114841692149639, 0.025739703327417374, -0.022020522505044937, 0.004241655580699444, -0.005883777514100075, 0.006850637495517731, 0.03956533223390579, -0.03615007922053337, 0.028641002252697945, -0.00915677659213543, -0.004897489212453365, -0.008970282040536404, 0.027606457471847534, 0.019021164625883102, -0.014271214604377747, -0.0025018099695444107, -0.0025370747316628695, 0.02891353704035282, 0.03184778615832329, -0.054494552314281464, 0.00703973276540637, -0.0018195179291069508, -0.0013524135574698448, -0.01605871319770813, -0.010690443217754364, -0.006321703549474478, 0.00025302357971668243, 0.010669533163309097, -0.005720817018300295, -0.030380940064787865, 0.017643939703702927, 0.03124893456697464, -0.04115087538957596, 0.016169551759958267, 0.01488671824336052, -0.03187672793865204, -0.028312450274825096, 0.02257269248366356, -0.007268051151186228, 0.0039118025451898575, 0.0008765596430748701, 0.03577185422182083, 0.09032538533210754, 0.032028794288635254, 0.033614691346883774, -0.02342253178358078, -0.032685860991477966, 0.16131892800331116, 0.027222977951169014, 0.01229785941541195, 0.06225330010056496, 0.018353162333369255, -0.0064041162841022015, 0.014845852740108967, -0.01158040203154087, 0.007227471098303795, 0.017464829608798027, -0.013246101327240467, 0.006218647118657827, -0.006819550879299641, -0.01810901239514351, -0.016070857644081116, -0.009356222115457058, -0.014548050239682198, -0.002338175429031253, -0.018365461379289627, -0.004330592229962349, -0.012384534813463688, 0.02354647032916546, 0.011375919915735722, -0.06758984923362732, -0.04282854497432709, -0.012751513160765171, -0.036202434450387955, 0.01239161379635334, 0.033942777663469315, -0.005236759781837463, 0.002985222963616252, -0.027589427307248116, -0.02840951271355152, -0.05083780735731125, 0.012596262618899345, 0.0339023619890213, 0.01578592136502266, -0.030163981020450592, -0.029872460290789604, -0.02330530807375908, 0.02697637304663658, 0.01566319540143013, 0.0037260507233440876, -0.01108736451715231, 0.0008349972194992006, 0.0102468840777874, -0.018769053742289543, -0.003811574773862958, 0.010980631224811077, 0.08825698494911194, 0.049533821642398834, 0.010931000113487244, -0.01281284261494875, 0.018764391541481018, 0.007504700217396021, -0.05709916353225708, -0.041953183710575104, 0.010077445767819881, 0.11821822822093964, 0.010469887405633926, -0.03931468725204468, 0.03113873116672039, 0.011113542132079601, -0.028421778231859207, 0.02464619278907776, 0.024308286607265472, 0.01797175221145153, -0.0018878846894949675, -0.01786341331899166, 0.02060910500586033, -0.052696119993925095, 0.00010760295845102519, -0.020242873579263687, 0.026039617136120796, 0.016332533210515976, 0.0055786925368011, 0.011831507086753845, -0.019681353121995926, 0.027193713933229446, -0.00329328840598464, 0.004220827016979456, 0.013650858774781227, -0.019330305978655815, -0.04490595683455467, 0.06596356630325317, 0.03031895123422146, -0.008325425907969475, 0.02819824032485485, -0.002212454564869404, -0.01467340998351574, -0.0025643205735832453, 0.02893681265413761, 0.019633812829852104, 0.01647321879863739, -0.0007566751446574926, 0.024082105606794357, -0.019382894039154053, 0.05317577347159386, 0.018499869853258133, 0.02431194856762886, 0.01592899113893509, 0.04615677148103714, 0.026344092562794685, 0.01036833692342043, -0.03355267643928528, 0.011110627092421055, 0.024166161194443703, 0.05081744119524956, 0.022555502131581306, 0.0047439164482057095, 0.01886674016714096, 0.029901843518018723, 0.01791541278362274, 0.08138392865657806, 0.017302468419075012, -0.04082951694726944, 0.02138066478073597, 0.0018625942757353187, -0.009378012269735336, 0.044444695115089417, -0.04272082820534706, -0.02273079752922058, -0.0018511434318497777, 0.002674124436452985, 0.0071490113623440266, -0.047150883823633194, -0.03718484938144684, -0.03904811292886734, -0.055396951735019684, 0.0024965358898043633, -0.005041155498474836, -0.04202193021774292, -0.019267398864030838, 0.0058262040838599205, -0.011700008995831013, 0.01033943984657526, -0.00457634637132287, -0.018177097663283348, 0.034324899315834045, 0.02771979197859764, -0.010401569306850433, -0.03813622519373894, -0.0316198505461216, -0.002732423134148121, -0.0017364907544106245, -0.02195267379283905, 0.007176192943006754, 0.05001905933022499, 0.018557460978627205, 0.001960733672603965, -0.019921142607927322, 0.037038158625364304, -0.01458648033440113, 0.054415568709373474, -0.013695001602172852, -0.07102423906326294, 0.0394890196621418, -0.006315319798886776, -0.02957361564040184, 0.027810178697109222, -0.03915134072303772, 0.004134254064410925, -0.011378795839846134, -0.007433726917952299, 0.0066596693359315395, -0.0024547220673412085, 0.015556261874735355, 0.04019543156027794, 0.015775540843605995, -0.03245026245713234, -0.029516760259866714, -0.010834257118403912, -0.004302376881241798, -0.05429167300462723, 0.01321353018283844, -0.008566375821828842, -0.009314185939729214, -0.0076734148897230625, 0.02101180888712406, 0.012842920608818531, 0.01720336824655533, -0.03585457801818848, -0.0019923774525523186, -0.0005935553926974535, -0.009494470432400703, 0.02225668542087078, -0.029551152139902115, -0.01947426237165928, -0.014214287512004375, 0.015260724350810051, -0.1120201051235199, -0.0061029838398098946, -0.03732654079794884, 0.01511622965335846, -0.03232899308204651, -0.0065028369426727295, -0.04177168756723404, 0.002539220033213496, -0.01135808601975441, -0.029649952426552773, -0.026093682274222374, 0.02386733703315258, 0.023208558559417725, -0.040407486259937286, -0.024726932868361473, -0.037382978945970535, -0.03072262741625309, -0.02276133932173252, 0.034005776047706604, -0.003327053738757968, -0.04089104384183884, 0.026456816121935844, -0.03523353487253189, 0.00953145045787096, -0.01678653247654438, -0.034679267555475235, -0.03652067855000496, -0.007158024702221155, 0.05322793498635292, 0.01317732036113739, 0.020593302324414253, -0.007316172122955322, 0.022068843245506287, -0.00803996343165636, -0.05160336196422577, -0.01361123751848936, 0.030824843794107437, 0.047114092856645584, -0.0032002434600144625, 0.06522864103317261, -0.08670363575220108, -0.02314511314034462, 0.036710891872644424, 0.009993511252105236, -0.013001385144889355, 0.0128525635227561, 0.001944083720445633, -0.020813245326280594, 0.019853267818689346, -0.0030715567991137505, 0.03883309289813042, 0.07446344196796417, -0.009661451913416386, -0.02583443373441696, 0.020120158791542053, -0.036666207015514374, 0.043870214372873306, -0.0016123006353154778, -4.787339094036724e-06]\"\n./train/jean/n03594734_32813.JPEG,jean,\"[-0.009363916702568531, 0.010428757406771183, -0.015395153313875198, 0.041781648993492126, -0.0029708652291446924, -0.008751732297241688, -0.05462757498025894, -0.035740338265895844, -0.0008784861420281231, 0.031538765877485275, 0.05457746982574463, -0.0005049121682532132, -0.05191979557275772, 0.01924949698150158, -0.07061571627855301, -0.06237589195370674, 0.11912652850151062, 0.03313304856419563, 0.02757549285888672, -0.0037485011853277683, -0.017601221799850464, 0.019877035170793533, 0.03658661991357803, -0.006198260001838207, -0.006220818031579256, -0.011079344898462296, -0.03542918339371681, 0.029847847297787666, 0.02864178828895092, 0.008601030334830284, 0.016149010509252548, 0.053820498287677765, -0.010971006937325, -0.03802959620952606, 0.022574828937649727, 0.04378784820437431, 0.007233757060021162, -0.029586128890514374, -0.014372420497238636, 0.04380644112825394, 0.011312153190374374, -0.030733581632375717, -0.04299236088991165, -0.03234720602631569, 0.02484000101685524, 0.13219672441482544, 0.018989715725183487, 0.020059138536453247, -0.0745544359087944, 0.004955534357577562, 0.009251724928617477, 0.026838593184947968, -0.02881329506635666, 0.0011323336511850357, 0.03178434073925018, -0.03859083354473114, -0.03130152076482773, 0.01636216975748539, -0.055831871926784515, 0.029284046962857246, 0.006925327703356743, -0.005438774358481169, 0.018814319744706154, -0.011367627419531345, -0.03118596039712429, -0.04305205121636391, -0.044659122824668884, 0.024696413427591324, 0.04249849170446396, -0.010966120287775993, -0.036242153495550156, 0.027390798553824425, 0.01543585304170847, -0.00948128942400217, -0.0064729140140116215, 0.011545626446604729, 0.039477597922086716, -0.013886000961065292, -0.031185416504740715, 0.007621085271239281, -0.0036180708557367325, -0.016864251345396042, -0.03142552450299263, -0.04152204468846321, -0.011126158758997917, 0.013419217430055141, 0.0329098142683506, -0.03694426268339157, 0.04877554997801781, 0.005996819585561752, -0.009591802023351192, -0.013350768014788628, -0.4863452911376953, 0.016726940870285034, 0.025142628699541092, 0.01461818814277649, -0.016764504835009575, 0.0037457970902323723, -0.022702785208821297, -0.06574056297540665, 0.05123300477862358, -0.009580584242939949, 0.012710729613900185, -0.010151749476790428, 0.049587104469537735, 0.0003647980047389865, 0.12764447927474976, 0.030060967430472374, -0.04112759977579117, -0.0028007137589156628, 0.04012124985456467, -0.024041742086410522, 0.01672745868563652, -0.02018066495656967, -0.01799648255109787, 0.008500627242028713, 0.0068311975337564945, 0.018658647313714027, 0.015510809607803822, 0.04990927129983902, -0.04859374463558197, -0.04163297638297081, -0.025010019540786743, 0.06360463798046112, 0.011586809530854225, 0.00744049996137619, 0.000828928779810667, -0.03737723454833031, -0.005582056473940611, 0.05075826123356819, 0.013346978463232517, -0.07263342291116714, -0.016499219462275505, 0.08796606957912445, 0.028422163799405098, -0.02399720437824726, -0.07172505557537079, 0.03696230426430702, -0.02266581542789936, -0.024360183626413345, -0.03812892735004425, -0.02063049003481865, -0.07347714155912399, 0.07745083421468735, -0.003948281053453684, -0.0010228768223896623, -0.00871339626610279, 0.01339794136583805, -0.04271094873547554, -0.03781329467892647, -0.02776646800339222, 0.0032174105290323496, 0.10623347014188766, -0.011582172475755215, 0.02225114218890667, -0.00472178403288126, -0.0018955403938889503, 0.04320960119366646, -0.029912332072854042, 0.03921273723244667, -0.07161203771829605, -0.043894678354263306, -0.025913886725902557, 0.003007040824741125, -0.020037997514009476, 0.01759316399693489, 0.026826897636055946, 0.013179788365960121, -0.04710375517606735, 0.021746333688497543, 0.03075963631272316, 7.282917067641392e-05, 0.0004572944017127156, -0.03749984875321388, -0.003889822168275714, -0.024329891428351402, 0.03645426407456398, 0.004260548390448093, 0.047796573489904404, 0.022307371720671654, 0.01275298185646534, -0.07652612775564194, 0.08440054953098297, -0.02479575015604496, -0.00548657076433301, 0.0322529636323452, 0.0963752269744873, -0.0008520605624653399, 0.02446921356022358, 0.04225699603557587, -0.003318857867270708, -0.034954000264406204, 0.01632050611078739, -0.030538301914930344, 0.010429280810058117, 0.010599201545119286, 0.08705810457468033, 0.019854102283716202, -0.015092381276190281, -0.048208463937044144, -0.00430799275636673, 0.022623883560299873, 0.04406600445508957, 0.03755444660782814, 0.01535185519605875, 0.04067029803991318, -0.028910871595144272, -0.03471044450998306, -0.06782873719930649, 0.041370149701833725, -0.08982548862695694, -0.021987363696098328, 0.017166148871183395, 0.03881854936480522, 0.07178732007741928, 0.029340878129005432, -0.04436132311820984, 0.03689294680953026, -0.04226049408316612, 0.0048712389543652534, 0.009525241330265999, -0.04958541691303253, -0.09339798241853714, -0.02885531634092331, 0.04765207692980766, 0.02994224615395069, 0.025693390518426895, -0.03446633741259575, -0.006707966327667236, 0.0996849536895752, -0.019904667511582375, 0.00913158804178238, 0.031146857887506485, 0.03599843010306358, 0.03195038437843323, -0.04019801318645477, -0.05524226650595665, 0.008117950521409512, -0.0036591130774468184, 0.03265126049518585, 0.014612791128456593, -0.0033943348098546267, -0.02289644256234169, 0.017885558307170868, 0.030760807916522026, -0.035294461995363235, 0.03469022735953331, 0.04165368899703026, -0.008526981808245182, -0.03478250280022621, 0.05467119440436363, 0.007649117615073919, 0.018375450745224953, 0.021457653492689133, 0.01842057891190052, -0.032725121825933456, -0.045560043305158615, -0.032946981489658356, -0.03706474229693413, -0.0032892306335270405, 0.029629820957779884, -0.013688430190086365, -0.051746170967817307, 0.00467286491766572, -0.01656835898756981, -0.0021646874956786633, -0.03790552169084549, -0.016043633222579956, -0.012965858913958073, -0.019469579681754112, 0.011113282293081284, 0.00153735198546201, -0.027171626687049866, 0.006806802004575729, 0.028256310150027275, -0.022676821798086166, -0.012569339014589787, 0.053053125739097595, -0.06032612547278404, 0.006530026905238628, -0.013240080326795578, -0.018203308805823326, -0.06173035502433777, -0.0032746046781539917, 0.020805172622203827, 0.004939827602356672, 0.08862601220607758, 0.019914181903004646, -0.013078741729259491, 0.03502243012189865, 0.05030152201652527, -0.02453465946018696, 0.011865472421050072, 0.017102934420108795, -0.028324546292424202, -0.005109832156449556, -0.06865305453538895, -0.024464646354317665, 0.0069371480494737625, 0.014133704826235771, -0.0075414287857711315, -0.0007623337442055345, -0.03209235891699791, 0.0362776480615139, -0.0056029376573860645, -0.014493121765553951, -0.019349858164787292, 0.016470016911625862, -0.050440605729818344, -0.014688970521092415, -0.002788056619465351, 0.011150929145514965, 0.08768521994352341, 0.09920350462198257, -0.07095127552747726, -0.008623127825558186, -0.003346160752698779, -0.0732647255063057, 0.0006381754647009075, 0.04024259373545647, -0.015436617657542229, 0.15675471723079681, -0.007101456634700298, -0.06737630814313889, 0.028939127922058105, 0.03355497866868973, -0.004093187861144543, -0.01513039693236351, 0.0186788197606802, -0.03787046670913696, -0.003563124919310212, -0.048575762659311295, 0.03261958062648773, -0.01456096675246954, -0.00831771269440651, 0.023757029324769974, -0.004130208399146795, 0.003336395602673292, -0.0374491922557354, 0.01902170479297638, 0.004009617492556572, 0.007597811054438353, 0.012704613618552685, 0.037367355078458786, -0.04293128475546837, 0.01817469857633114, -0.03927576169371605, 0.04874036833643913, 0.053653914481401443, 0.06618107855319977, 0.04945167154073715, -0.021924825385212898, -0.017006389796733856, -0.019282395020127296, -0.036456149071455, 0.026982756331562996, -0.01081270445138216, 0.15970845520496368, -0.01806461066007614, -0.04930373281240463, 0.010151341557502747, 0.01537278387695551, 0.024739742279052734, -0.01488814502954483, 0.03692298382520676, -0.029285237193107605, -0.01525657158344984, 0.08952300995588303, -0.004605820868164301, 0.06921757012605667, 0.03844190016388893, -0.019154027104377747, 0.00376363517716527, 8.00357447587885e-05, 0.07062084227800369, -0.008982853032648563, 0.029105914756655693, 0.04187367483973503, -0.007088630460202694, 0.01627936027944088, 0.04100770130753517, 0.0033147004432976246, -0.012311795726418495, -0.07171235978603363, -0.03562553972005844, 0.03282475471496582, 0.018334785476326942, 0.0286080501973629, -0.0212406013160944, -0.14177177846431732, -0.048605889081954956, -0.036741774529218674, -0.01768595352768898, 0.0027823084965348244, 0.01198312547057867, -0.07109485566616058, 0.011126337572932243, -0.014383843168616295, 0.01096976175904274, 0.005053537432104349, -0.06377413123846054, -0.00012102033360861242, 0.06700736284255981, 0.044209398329257965, 0.004026265349239111, -0.024608829990029335, 0.009377796202898026, 0.02787197381258011, -0.0321938656270504, -0.011253074742853642, -0.02853778563439846, -0.013967504724860191, 0.03500230237841606, 0.0050976392813026905, -0.08198543637990952, -0.007940790615975857, -0.0036104971077293158, 0.03863685578107834, -0.02778344415128231, -0.004980036988854408, -0.054509326815605164, -0.023646889254450798, 0.028368839994072914, 0.09972341358661652, -0.03111368976533413, -0.027803312987089157, -0.005146704148501158, -0.023412929847836494, -0.08912859857082367, 0.022813869640231133, 0.005689264740794897, 0.0007427496020682156, 0.07936963438987732, 0.005326034035533667, 0.04458053037524223, 0.0044274539686739445, 0.036541908979415894, 0.04964978247880936, 0.033397067338228226, -0.00938434712588787, 0.028947990387678146, -0.05370120704174042, -0.005651154555380344, 0.003937885630875826, -0.016388531774282455, -0.0537492036819458, -0.050959087908267975, 0.012390322051942348, -0.025725821033120155, -0.0635317862033844, -0.004643630236387253, -0.03514278680086136, -0.03910316899418831, -0.030951986089348793, 0.010775833390653133, 0.003471348201856017, 0.0403188019990921, 0.012588654644787312, -0.026667414233088493, 0.05626264214515686, 0.0015337865334004164, -0.04407783970236778, 0.02543013170361519, 0.00028147330158390105, 0.06004617363214493, 0.04954531788825989, -0.04022857919335365, -0.047115325927734375, 0.022375356405973434, 0.03218213468790054, 0.019382433965802193, 0.017608195543289185, 0.07602240145206451, -0.010697241872549057, 0.08909071236848831, -0.07703045010566711, 0.008671428076922894, -0.02088448591530323, -0.010094854980707169, -0.04756804555654526, 0.038011565804481506, 0.021772410720586777, 0.0379474014043808, -0.003954372368752956, 0.008349156007170677, -0.019479012116789818, -0.006377424579113722, -0.020299511030316353, 0.017790714278817177, -0.05730002745985985, -0.030508778989315033, 0.014690592885017395, 0.03944860026240349, -0.022001223638653755, -0.0007675797678530216, -0.037691231817007065, 0.018469298258423805, 0.03377237915992737, -0.02506111189723015, -0.0509149432182312, -0.05837945640087128, 0.0015602040803059936, -0.05275818705558777, 0.04124831035733223, 0.03551248088479042, -0.08392006158828735, -0.002174869878217578, 0.01156991720199585, 0.014368060044944286, 0.054701704531908035, -0.009814431890845299, 0.05871652811765671]\"\n./train/jean/n03594734_16188.JPEG,jean,\"[-0.0029063948895782232, 0.021027371287345886, -0.014468035660684109, 0.0376032330095768, -0.02600681781768799, 0.017190605401992798, 0.026088306680321693, -0.005443091504275799, 0.04366198554635048, 0.022876199334859848, 0.01777157001197338, 0.023643771186470985, 0.008618745021522045, 0.03594265505671501, -0.0364069938659668, -0.053626906126737595, 0.1240021213889122, 0.02776692435145378, 0.00784018449485302, -0.018989453092217445, -0.008937026374042034, 0.007410610560327768, 0.04558151587843895, -0.030215764418244362, 0.03360038623213768, 0.020690791308879852, -0.030527187511324883, -0.004636789672076702, -0.020740024745464325, 0.044317543506622314, -0.018766433000564575, 0.033719465136528015, 0.01182133611291647, -0.038883160799741745, 0.0311060082167387, 0.04778032377362251, -0.00835983082652092, 0.024104055017232895, -0.012763990089297295, -0.01675417274236679, -0.05906219035387039, -0.031039707362651825, -0.010938492603600025, 0.0017115336377173662, 0.013917607255280018, 0.06841398775577545, 0.03194650262594223, 0.014965093694627285, -0.06853090226650238, -0.0022596418857574463, 0.06689133495092392, 0.010811148211359978, 0.010259194299578667, 0.007533464580774307, 0.04876001924276352, 0.03550644963979721, 0.011263439431786537, 0.03342077508568764, -0.0636591836810112, 0.005264395382255316, 0.06311849504709244, 0.02005048096179962, -0.028158046305179596, 0.0240582674741745, -0.009107072837650776, 0.013578352518379688, 0.004720059223473072, 0.09369315207004547, -0.004003665875643492, -0.020765898749232292, -0.0260140560567379, 0.0038049165159463882, -0.0397305004298687, -0.018789617344737053, 0.030607620254158974, -0.0017984448932111263, 0.04025351256132126, -0.0136826541274786, 0.0025573628954589367, 0.002025228925049305, 0.01992652378976345, -0.028411800041794777, -0.00445153983309865, -0.005086217075586319, 0.00995302852243185, 0.027181051671504974, 0.0347568541765213, -0.006901465356349945, 0.052672456949949265, -0.00102545868139714, 0.03170860558748245, -0.021563870832324028, -0.7048259973526001, -0.0001378805609419942, -0.0061462270095944405, 0.012785932049155235, 0.03129995986819267, -0.005616628564894199, 0.012389925308525562, 0.055806487798690796, -0.007365581579506397, -0.01871132105588913, 0.003863545833155513, -0.007725868374109268, 0.05240725353360176, 0.024574192240834236, 0.09312143176794052, 0.01328875683248043, -0.015728924423456192, -0.011286965571343899, 0.015916453674435616, -0.022005073726177216, -0.020216694101691246, -0.03337171673774719, -0.008314928039908409, -0.010430260561406612, 0.011630330234766006, -0.05580097436904907, 0.015592570416629314, 0.015992237254977226, -0.020490162074565887, -0.018666420131921768, -0.021402878686785698, 0.012810271233320236, -0.01851469837129116, 0.014025130309164524, -0.016419826075434685, 0.009984886273741722, 0.018519818782806396, 0.06198927015066147, -0.008634014055132866, 0.0017093009082600474, 0.041907183825969696, 0.08856360614299774, -0.01627674698829651, -0.011671261861920357, 0.009379884228110313, -0.010281269438564777, -0.05150969326496124, 0.011573554947972298, -0.015160703100264072, -0.038772765547037125, -0.06120848283171654, 0.03958852216601372, 0.03477298095822334, -0.04688168689608574, -0.019518975168466568, -0.025397315621376038, -0.01778283715248108, -0.003343891818076372, -0.03289226442575455, -0.019676197320222855, 0.11600890755653381, -0.0014009634032845497, 0.0048029315657913685, -0.02499021776020527, -0.0002726332750171423, 0.0015958674484863877, 0.0027095915284007788, -0.00047764027840457857, -0.02316325716674328, -0.04766229912638664, 0.034543976187705994, -0.01396208442747593, -0.023731736466288567, 0.024157164618372917, -0.006599259562790394, -0.01079944521188736, 0.021848469972610474, 0.016362644731998444, 0.011591335758566856, 0.03096599690616131, -0.03901585936546326, -0.03186981752514839, -0.0044179209508001804, -0.0045991395600140095, 0.04752412438392639, -0.005977343302220106, 0.00045107712503522635, -0.035719871520996094, -0.011104222387075424, -0.08460202813148499, 0.018983792513608932, -0.010433351621031761, 0.0050476002506911755, 0.015395947732031345, 0.01949354261159897, 0.007267100270837545, 0.00990154966711998, 0.019981328397989273, 0.0231475867331028, 0.03695335611701012, -0.006094166077673435, 0.001153753139078617, -0.025227850303053856, -0.02762673608958721, -0.043637704104185104, 0.005514776799827814, -0.04254342243075371, -0.006836265325546265, -0.01283675990998745, 0.016093747690320015, -0.01524235587567091, -0.002047348767518997, 0.03509211167693138, 0.004012685269117355, 0.01047996524721384, -0.01100114919245243, -0.029704412445425987, 0.017869962379336357, -0.07995293289422989, -0.037127524614334106, -0.005341087467968464, 0.015341872349381447, 0.045894648879766464, 0.016457878053188324, -0.028175173327326775, -0.009543124586343765, -0.0004694631206803024, 0.04757709056138992, -0.04379839450120926, 0.0003213988966308534, -0.0030396003276109695, -0.031588681042194366, 0.03588023781776428, 0.05172770097851753, -0.008471286855638027, -0.02433345466852188, -0.040589213371276855, 0.028808023780584335, -0.0029551719781011343, 0.012781788595020771, 0.012061245739459991, 0.05033537372946739, 0.028864527121186256, -0.05452713370323181, -0.013394534587860107, -0.007223630324006081, -0.01690671220421791, -0.010799779556691647, -0.014615707099437714, 0.0061419145204126835, 0.007920597679913044, 0.015524047426879406, -0.0364854596555233, 0.024151720106601715, 0.020989354699850082, 0.013221795670688152, -0.03957533836364746, 0.02569158934056759, -0.0024382774718105793, 0.03270129859447479, 0.03739645704627037, -0.03691538795828819, -0.0006733559421263635, -0.04306735843420029, 0.005466659087687731, -0.012446587905287743, -0.040243420749902725, -0.006711328402161598, 0.021097566932439804, 0.021313298493623734, -0.016812769696116447, 0.05798191949725151, 0.013272127136588097, 0.008620135486125946, -0.029354311525821686, -0.0044817011803388596, 0.02194909192621708, -0.005184783134609461, 0.03714719042181969, 0.0013285053428262472, -0.0440981462597847, -0.015284588560461998, 0.027643412351608276, -0.042486246675252914, -0.02364518865942955, -0.03693258389830589, -0.014523319900035858, -0.007056706584990025, -0.00016531998699065298, -0.006976103410124779, -0.033664338290691376, -0.009677155874669552, 0.011141262017190456, -0.005191328935325146, 0.06588596105575562, 0.015984972938895226, -0.020675046369433403, -0.006925446446985006, 0.010107823647558689, 0.03318876028060913, 0.02254108525812626, -0.00832907110452652, -0.03914180025458336, 0.02994406223297119, -0.07505099475383759, -0.024767080321907997, -0.03193006291985512, 0.0018777898512780666, -0.002210906706750393, -0.020629962906241417, 0.001321418327279389, 0.00963536649942398, 0.01316088531166315, -0.04927430674433708, -0.041229162365198135, 0.029545200988650322, -0.03146522492170334, 0.011418979614973068, -0.007239589001983404, -0.008465835824608803, 0.08843453228473663, 0.04081523418426514, 0.005133466329425573, 0.021957023069262505, 0.0068242428824305534, 0.036235835403203964, -0.02841614931821823, -0.0007256141398102045, -0.040211424231529236, 0.13238993287086487, 0.01544405147433281, -0.010037385858595371, -0.0008648356888443232, -0.027471624314785004, 0.007938607595860958, 0.006476189009845257, -0.010623381473124027, 0.013290648348629475, -0.0326109379529953, -0.03119146265089512, 0.04310261458158493, 0.02183045633137226, -0.007685144431889057, 0.03694428876042366, 0.023872010409832, 0.010164509527385235, 0.01276707649230957, 0.057174425572156906, -0.028091788291931152, 0.019778257235884666, -0.006750084459781647, 0.00948631577193737, -0.022313881665468216, -0.00036103904130868614, -0.011243999004364014, -0.011942222714424133, 0.036735132336616516, 0.004689059220254421, 0.1147923469543457, 0.010656553320586681, -0.021288897842168808, -0.03178028389811516, -0.005287021864205599, -0.017754826694726944, -0.05031967535614967, 0.08976316452026367, 0.005284320097416639, -0.06001904606819153, -0.005244382191449404, 0.026636827737092972, -0.0165491234511137, -0.005266426131129265, 0.08237259089946747, 0.056615300476551056, -0.0016125867841765285, -0.06194637715816498, 0.04902269318699837, 0.03569011390209198, -0.005154552403837442, 0.018684161826968193, 0.030668672174215317, -0.01769276149570942, 0.027471350505948067, -0.018320618197321892, 0.07690349221229553, 0.02495979331433773, -0.027844572439789772, 0.02257373370230198, -0.028533633798360825, -0.040160246193408966, 0.009380890987813473, -0.020265091210603714, -0.012780494056642056, -0.007934927940368652, 0.008714867755770683, -0.0004132982576265931, 0.008372693322598934, -0.10886143893003464, 0.007606063969433308, -0.0011848579160869122, 0.03447989746928215, -0.007152843754738569, -0.050878748297691345, 0.002138530369848013, 0.01176848728209734, -0.017998483031988144, -0.026700740680098534, 0.01365059893578291, -0.014315496198832989, 0.0030567676294595003, 0.11815300583839417, 0.0225174892693758, -0.006179787218570709, 0.00980474054813385, -0.02372611314058304, -0.011057538911700249, -0.052157677710056305, 0.03727421537041664, -0.0247445460408926, 0.03924630954861641, -0.002936023287475109, -0.00529869319871068, 0.001685862778685987, -0.016066506505012512, -0.06849566847085953, -0.009829582646489143, -0.01869642734527588, -0.0237642303109169, -0.026225408539175987, -0.04396330565214157, 0.0008423837716691196, 0.006705013569444418, -0.014160491526126862, -0.005126843228936195, -0.02674967050552368, -0.052913565188646317, -0.022741906344890594, 0.009075872600078583, 0.006500774994492531, 0.03344607725739479, -0.04239184781908989, 0.004942859522998333, 0.014017361216247082, 0.0324254035949707, 0.020680978894233704, 0.014554964378476143, -0.02282753959298134, 0.0036742694210261106, 0.010257663205265999, -0.033017758280038834, 0.015703879296779633, -0.04137725383043289, 6.679580837953836e-05, 0.0004646815941669047, 0.006140219513326883, 0.021621717140078545, -0.04161648452281952, 0.0075032818131148815, -0.060781266540288925, 0.028435207903385162, 0.002859867410734296, -0.040124423801898956, -0.018658673390746117, 0.030782977119088173, 0.019604457542300224, -0.02381180226802826, -0.008526487275958061, -0.008003398776054382, 0.027081722393631935, -0.026070227846503258, 0.023041630163788795, 0.015924977138638496, 0.024897586554288864, -0.0048806071281433105, -0.009656820446252823, -0.006606312468647957, 0.016449496150016785, 0.015420567244291306, 0.023846302181482315, 0.03136115148663521, 0.017400167882442474, -0.03912174329161644, 0.016346538439393044, -0.049601055681705475, 0.0032128822058439255, -5.834957119077444e-05, -0.024794012308120728, -0.025120535865426064, -0.019519442692399025, 0.005805997643619776, 0.00021340060629881918, 0.02119707502424717, -0.013154841959476471, 0.005486250855028629, -0.006501158233731985, -0.026642700657248497, 0.00028668579761870205, -0.039910487830638885, -0.038650669157505035, -0.0026663593016564846, -0.017628604546189308, -0.029050786048173904, 0.004509801510721445, 0.015420072712004185, 0.003088671248406172, 0.05307294800877571, -0.0561971515417099, 0.009770526550710201, -0.028214916586875916, 0.015360419638454914, -0.00370827061124146, 0.003044331446290016, 0.038777291774749756, 0.011676202528178692, 0.015142703428864479, -0.01102481409907341, -0.04346364736557007, 0.08094070106744766, -0.011509029194712639, 0.021699272096157074]\"\n./train/jean/n03594734_38343.JPEG,jean,\"[0.005129501689225435, -0.02052535116672516, 0.002287328476086259, 0.05208679288625717, -0.044076960533857346, 0.02562316134572029, -0.028221728280186653, -0.05305327847599983, 0.011904824525117874, 0.025780031457543373, 0.020631898194551468, 0.016953550279140472, -0.03694227710366249, -0.018167397007346153, -0.02469945326447487, -0.0006375666125677526, 0.1818729043006897, -0.0036934870295226574, 0.04931251332163811, -0.057414423674345016, 0.019580168649554253, 0.06518727540969849, 0.06335584819316864, -0.01906673237681389, 0.03044087253510952, 0.05724777653813362, -0.023677116259932518, 0.009324532002210617, -0.011734509840607643, 0.007049631793051958, -0.0011146408505737782, -0.027750801295042038, -0.016817161813378334, -0.019147101789712906, 0.001857368042692542, 0.048448868095874786, 0.02940807305276394, 0.003594338661059737, 0.009771019220352173, 0.05195004120469093, -0.060692355036735535, 0.005220957566052675, -0.0130991879850626, 0.003945291042327881, -0.017685040831565857, -0.011858020909130573, 0.01572791300714016, -0.014836227521300316, -0.033537376672029495, 0.039375804364681244, 0.009114505723118782, -0.045807790011167526, 0.05214942619204521, 0.009692233987152576, -0.0030953981913626194, -0.007314406801015139, -0.01692330092191696, 0.016670117154717445, -0.03181701526045799, -0.03353041782975197, 0.08006949722766876, 0.024073775857686996, 0.0049232845194637775, 0.023062264546751976, -0.021646765992045403, -0.024342555552721024, -0.001389644225127995, 0.049642227590084076, -0.003987779840826988, -0.03348948433995247, -0.01207521092146635, 0.004553855396807194, -4.083911335328594e-05, 0.016812486574053764, -0.02576603926718235, -0.005074667744338512, 0.03657388314604759, -0.020754186436533928, 0.026773720979690552, -0.00569064961746335, -0.049178704619407654, -0.0662602111697197, -0.03134378790855408, -0.007244657259434462, 0.015937956050038338, 0.04473087564110756, 0.007400526199489832, -0.032714612782001495, 0.003964951261878014, -0.007253807038068771, 0.04062197357416153, 0.00043986481614410877, -0.543774425983429, 0.0020591493230313063, 0.03208573907613754, 0.018270188942551613, 0.04793144389986992, 0.0472654290497303, 0.02693909965455532, 0.09637876600027084, 0.003736486891284585, -0.026894433423876762, 0.004524144809693098, -0.025922415778040886, 0.015776146203279495, 0.009697393514215946, -0.018035879358649254, 0.029502060264348984, -0.007509803399443626, 0.025722524151206017, -0.022185983136296272, -0.005852839443832636, 0.025143004953861237, 0.008127975277602673, 0.0058410693891346455, 0.014484792947769165, -0.0005910992040298879, -0.05106518417596817, 6.458574353018776e-05, 0.041829824447631836, 0.022403107956051826, -0.037562061101198196, -0.028118237853050232, -0.013731714338064194, -0.026732854545116425, -0.0036233363207429647, -0.02304600365459919, 0.0011757895117625594, 0.002930412534624338, 0.043550364673137665, 0.019325917586684227, -0.020743858069181442, -0.04457990825176239, 0.07284735888242722, 0.014556890353560448, 0.0355428084731102, -0.0009076886344701052, 0.04806634038686752, -0.014258304610848427, 0.0035829946864396334, -0.006533788982778788, -0.04752304404973984, -0.061086155474185944, 0.011116055771708488, -0.02529118023812771, 0.004149502143263817, -0.011546394787728786, 0.016710549592971802, -0.007522208150476217, -0.027421070262789726, -0.0019463164499029517, -0.025546232238411903, -0.002648541470989585, -0.01728000119328499, -0.01575593650341034, -0.0004953142488375306, 0.0013184023555368185, 0.05682104453444481, 0.02393149584531784, 0.003733891760930419, -0.0460285060107708, 0.0019727912731468678, -0.0063967411406338215, -0.03220842033624649, 0.014802081510424614, -0.027035292237997055, 0.07062617689371109, 0.015927618369460106, 0.022595707327127457, 0.008955025114119053, -0.03158425912261009, 0.03570055961608887, -0.030158868059515953, -0.0023053123150020838, -0.04415479302406311, -0.01272925641387701, 0.1456119269132614, -0.0340154655277729, -0.021430904045701027, -0.007966390810906887, 0.02627216838300228, -0.01656258851289749, 0.026788227260112762, 0.01408142875880003, -0.032696399837732315, 0.03538478538393974, 0.0009695008629933, -0.011793275363743305, -0.01827223040163517, -0.014232075773179531, 0.017331590875983238, 0.0007569644949398935, -0.03185327723622322, 0.04892584681510925, -0.008917677216231823, -0.030513323843479156, -0.012452170252799988, 0.011221874505281448, 0.013184682466089725, 0.004643725231289864, -0.020272353664040565, -0.002879220759496093, 0.0075822374783456326, 0.014888761565089226, 0.006096863653510809, -0.020463377237319946, -0.03403936326503754, 0.01068416889756918, -0.06519658118486404, 0.028610428795218468, -0.06888752430677414, 0.05659087747335434, -0.02455204725265503, -0.035432085394859314, 0.0012789814500138164, 0.014997262507677078, 0.013669206760823727, 0.01741848886013031, -0.005052656400948763, 0.00813938956707716, -0.049008868634700775, 0.009225658141076565, -0.0036024274304509163, 0.0032622660510241985, -0.003697420470416546, -0.01020385604351759, 0.04764914512634277, 0.009066118858754635, -0.019623540341854095, 0.029731517657637596, -0.0029579598922282457, 0.02063915506005287, -0.015541568398475647, 0.015852849930524826, 0.03502163290977478, -0.004901187028735876, -0.06426352262496948, -0.010882522910833359, -0.019439905881881714, -0.005267991218715906, 0.04542923346161842, 0.03784874081611633, -0.012213178910315037, 0.003591757034882903, 0.060500796884298325, -0.00823599100112915, -0.012876451015472412, 0.07729685306549072, 0.014818045310676098, 0.052810873836278915, 0.021497348323464394, 0.004043581895530224, 0.03781607002019882, 0.015424349345266819, 0.0013014563592150807, -0.007313067559152842, -0.043807502835989, -0.005685605574399233, -0.03183954581618309, -0.03032713569700718, 0.04260466620326042, 0.010295760817825794, -0.005468212999403477, 0.06942270696163177, 0.019360829144716263, -0.027482744306325912, -0.006598285399377346, 0.027503008022904396, 0.008765947073698044, 0.04736854135990143, -0.02827516943216324, 0.01632882095873356, 0.029239175841212273, -0.0010447789682075381, 0.005766098853200674, 0.010707058943808079, -0.012221936136484146, 0.048358410596847534, -0.00406202208250761, -0.04645402356982231, -0.01218116469681263, -0.007714484352618456, -0.06982362270355225, 0.0201396644115448, 0.02210894413292408, -0.03158088028430939, 0.25193408131599426, 0.0016636403743177652, -0.02529587782919407, -0.014770178124308586, 0.03130776807665825, 0.009013088420033455, 0.00035335877328179777, 0.013133767060935497, -0.026349708437919617, -0.031235145404934883, -0.05053689703345299, -0.03579799830913544, -0.019839610904455185, 0.03716176748275757, -0.062469013035297394, -0.010858847759664059, -0.007725422736257315, 0.001609104685485363, -0.014163719490170479, -0.00489832041785121, -0.055077165365219116, 0.02463160827755928, -0.05885661765933037, 0.028615329414606094, 0.0008865237468853593, 0.03320503979921341, 0.07263494282960892, 0.06159402057528496, -0.022725064307451248, 0.052349530160427094, 0.030451593920588493, 0.03563908115029335, -0.011885016225278378, -0.008143533021211624, -0.033539846539497375, 0.29530683159828186, -0.041397955268621445, -0.04250626266002655, -0.01719370298087597, -0.03241991996765137, -0.017800265923142433, -0.007358701899647713, 0.010844217613339424, -0.037751682102680206, -0.03199809044599533, -0.04456515982747078, 0.03332861512899399, 0.0329803004860878, 0.015954477712512016, 0.026936441659927368, 0.030477387830615044, 0.0005929201142862439, -0.027574710547924042, 0.04235037416219711, -0.016033124178647995, 0.04003973305225372, 0.017801066860556602, 0.06283707916736603, 0.006331578828394413, 0.009838314726948738, -0.013792509213089943, 0.01258842647075653, 0.02182542346417904, 0.009236331097781658, 0.08840615302324295, -0.012526428326964378, -0.020482124760746956, 0.059857793152332306, -0.017496006563305855, -0.026071149855852127, -0.004055711440742016, 0.07764104008674622, -0.044902343302965164, -0.04439183324575424, -0.006577725987881422, 0.007555653806775808, -0.058347951620817184, 0.02112525887787342, 0.011815479025244713, -0.04305143281817436, 0.0029675045516341925, 0.048224739730358124, -0.030197346583008766, 0.005495979450643063, 0.0383569672703743, 0.04177200421690941, 0.03855595737695694, 0.02097354270517826, -0.005777947138994932, -0.021141180768609047, 0.047681476920843124, -0.003346298588439822, 0.017140522599220276, 0.012476936914026737, -0.0024298420175909996, 0.013187912292778492, 0.01726485975086689, -0.009526818059384823, -0.0002218857262050733, 0.05641739070415497, -0.018838459625840187, -0.04057943820953369, -0.0026477922219783068, 0.0035262671299278736, -0.010558189824223518, -0.024808375164866447, 0.0010755020193755627, 0.000510111334733665, -0.042735613882541656, 0.0007797671132721007, 0.02526172250509262, -0.028616072610020638, 0.07627499103546143, 0.08532904833555222, -0.00923083070665598, 0.011460664682090282, 0.17365291714668274, 0.02809922583401203, -0.013897642493247986, 0.01106290239840746, 0.008150734938681126, 0.02200961858034134, -0.06145470216870308, 0.046587150543928146, -0.013882114551961422, 0.023732146248221397, 0.0036556303966790438, -0.03405912220478058, -0.01976669952273369, 0.004212276078760624, 0.026122896000742912, -0.015980074182152748, -0.016809988766908646, 0.011735089123249054, 0.010525843128561974, -0.037212107330560684, 0.006349517032504082, 0.10859442502260208, -0.0022963914088904858, -0.006477014161646366, -0.03762916103005409, -0.0015870239585638046, -0.03095979429781437, -0.006403201259672642, -0.038000885397195816, -0.009389057755470276, 0.06296979635953903, 0.023791400715708733, -0.004135057795792818, -0.0031737296376377344, -0.020757058635354042, 0.03372322395443916, 0.06929698586463928, -0.027419963851571083, 0.021601704880595207, -0.022327488288283348, -0.0034617381170392036, -0.02312706597149372, -0.014540805481374264, -0.012502113357186317, -0.010024623945355415, -0.006686368957161903, 0.021219374611973763, -0.013125435449182987, -0.0597049742937088, -0.00757038127630949, -0.0031001190654933453, -0.032096296548843384, 0.01643836498260498, 0.04025328904390335, 0.011591549031436443, -0.005589902866631746, -0.005140257067978382, 0.03998490422964096, -0.012955105863511562, -0.005946590565145016, 0.022535793483257294, -0.033715203404426575, 0.03527189418673515, 0.007196477614343166, -0.022817697376012802, -0.012908565811812878, 0.004271452780812979, 0.013652280904352665, -0.012661350890994072, -0.013660997152328491, 0.01014947984367609, -0.053513314574956894, 0.016415223479270935, -0.013512385077774525, 0.006067649461328983, -0.003141198307275772, -0.02214226685464382, 0.01914600469172001, -0.00914570689201355, -0.042027465999126434, 0.03834829106926918, -0.005003137979656458, -0.05346701294183731, 0.03113570064306259, -0.0156828835606575, 0.011660094372928143, 0.008836092427372932, -0.028507081791758537, -0.014462015591561794, -0.005371596198529005, -0.017822979018092155, -0.023721348494291306, -0.04676303640007973, -0.004494838882237673, -0.00783954281359911, 0.04434102028608322, 0.02129780687391758, -0.016744529828429222, -0.031016921624541283, 0.0042395154014229774, -0.016640592366456985, 0.02881462499499321, 0.044416554272174835, 0.0003123805799987167, -0.02741682343184948, 0.020170491188764572, -0.008250060491263866, 0.08912299573421478, -0.0055054668337106705, 0.09389524161815643]\"\n./train/jean/n03594734_4800.JPEG,jean,\"[0.0021229367703199387, 0.008529282175004482, -0.0035486011765897274, 0.03826257586479187, -0.027114588767290115, 0.05836280435323715, -0.02130945958197117, 0.05845630168914795, -0.003833070630207658, 0.03612609580159187, 0.008067586459219456, -0.002312262076884508, 0.006037954706698656, -0.0166904516518116, -0.02800832688808441, 0.014477658085525036, 0.09463228285312653, 0.030733361840248108, 0.02029009908437729, 0.006475971080362797, 0.019459523260593414, 0.02183191478252411, 0.0113486023619771, -0.013421808369457722, 0.008070812560617924, 0.0053499420173466206, -0.013322942890226841, 0.0006972561241127551, 0.010216175578534603, 0.0028692889027297497, 0.015441072173416615, -0.031147122383117676, -0.00392330763861537, -0.03459658846259117, -0.00597107969224453, 0.019264377653598785, 0.022409653291106224, -0.03226745128631592, -0.002522876253351569, 0.04470014572143555, -0.030272625386714935, 0.0051315827295184135, -0.03535643592476845, 0.016809847205877304, 0.015362518839538097, -0.07400642335414886, 0.046750813722610474, -0.007360534276813269, 0.0003565555962268263, 0.003211330622434616, 0.00048769707791507244, -0.051553405821323395, 0.015093334950506687, -0.007458659820258617, 0.0018822895362973213, 0.01728552021086216, -0.005069664679467678, 0.015818120911717415, -0.05463710427284241, 0.006998006720095873, 0.09329541027545929, -0.018923254683613777, -0.00410090945661068, 0.006918884348124266, -0.04592925310134888, 0.02181234583258629, -0.01750040613114834, 0.04323141276836395, 0.017403433099389076, -0.005587500985711813, 0.028378482908010483, -0.0019172056345269084, -0.01713906042277813, 0.044814981520175934, -0.015862111002206802, -0.010255735367536545, 0.03927776589989662, 0.012897166423499584, -0.02130304090678692, 0.01841334067285061, -0.03371038660407066, -0.0257578045129776, 0.007691232953220606, -0.034286338835954666, -0.023352064192295074, 0.004386645741760731, 0.11133592575788498, 0.0018914409447461367, 0.02628299407660961, -0.02081143856048584, 0.017702016979455948, -0.06313260644674301, -0.704035222530365, 0.047944143414497375, 0.019656427204608917, -0.006562472321093082, 0.02233177050948143, 0.025985926389694214, 0.018297899514436722, 0.0898943543434143, -0.000493774248752743, -0.020253673195838928, -0.005154975689947605, -0.016253884881734848, 0.03221164643764496, -0.005639615468680859, -0.10682693123817444, 0.00037014440749771893, -0.004313274752348661, 0.031024333089590073, -0.029027029871940613, 0.00456561055034399, -0.009507293812930584, -0.013183983974158764, 0.004651764407753944, 0.0042511229403316975, -0.02392229065299034, -0.016177518293261528, 0.03430619090795517, 0.042384084314107895, -0.015537546947598457, -0.12392810732126236, -0.02895571105182171, -0.01355607621371746, -0.009653646498918533, 0.005709163844585419, -0.045405901968479156, -0.010118461214005947, 0.019330540671944618, 0.012055088765919209, 0.01230141893029213, -0.003787357360124588, -0.011384287849068642, 0.08753450214862823, -0.013050098903477192, 0.036969855427742004, -0.07194513082504272, -0.04769231006503105, -0.013494672253727913, -0.014638657681643963, 0.01113403495401144, -0.002437652088701725, -0.0722479373216629, 0.034450847655534744, -0.01796969398856163, 0.025365840643644333, 0.006007857155054808, -0.05040517449378967, -0.010040516033768654, -0.010588202625513077, 0.001733926241286099, 0.010354939848184586, 0.02028603106737137, 0.023577438667416573, -0.001265701954253018, -0.024622952565550804, 0.035653289407491684, -0.013536959886550903, 0.027925411239266396, 0.04214007407426834, -0.03566558659076691, -0.038807738572359085, 0.021208487451076508, -0.00908696185797453, 0.013786752708256245, -0.041732147336006165, -0.029100656509399414, 0.041596584022045135, 0.010630869306623936, 0.03982812538743019, -0.03497033566236496, -0.029154013842344284, 0.008710874244570732, -0.03301224112510681, 0.006302384193986654, -0.02176661603152752, 0.031928565353155136, -0.02360774762928486, 0.003688151016831398, -0.0023575748782604933, -0.016305837780237198, -0.021153075620532036, 0.027289198711514473, -0.005842435173690319, -0.008404931053519249, 0.036047786474227905, 0.04254266992211342, -0.004255247768014669, -0.0009500433225184679, 0.01127084344625473, 0.043979521840810776, -0.0075011542066931725, -0.02298780344426632, -0.005289743188768625, 0.017389439046382904, -0.02163512073457241, -0.028350697830319405, -0.003749184077605605, -0.055561210960149765, -0.026254083961248398, -0.032953668385744095, 0.009889228269457817, -0.03708776831626892, 0.0389338955283165, 0.021922755986452103, 0.0011433011386543512, 0.019058534875512123, 0.0027318827342242002, -0.02989727444946766, 0.01134488731622696, -0.001796502387151122, 0.04815803840756416, -0.006124787963926792, 0.03605874255299568, 0.026255829259753227, 0.02177920937538147, -0.019059475511312485, -0.02343115583062172, 0.024441054090857506, 0.018232673406600952, 0.0006480949814431369, -0.024187715724110603, -0.04749568924307823, -0.005238202400505543, 0.025541307404637337, -0.0016933187143877149, 0.007107253652065992, 0.02122543379664421, 0.016634203493595123, -0.03818979859352112, -0.028947079554200172, -0.019783155992627144, 0.009081144817173481, 0.0031541790813207626, 0.022588375955820084, 0.03379187360405922, -0.02127155289053917, 0.020262308418750763, 0.016049057245254517, -0.028799090534448624, 0.023146627470850945, 0.00841076672077179, 0.04349953308701515, 0.0033178701996803284, 0.022945668548345566, -0.016739165410399437, 0.038675323128700256, 0.03983267769217491, 0.004735251422971487, 0.06289614737033844, -0.000676346302498132, 0.007934657856822014, 0.014616969972848892, 0.011282972991466522, 0.025138704106211662, -0.009820128791034222, -0.01368440967053175, 0.029965441673994064, 0.023489724844694138, 0.0008859946392476559, -0.0035238589625805616, 0.015357723459601402, -0.057302962988615036, -0.002820330671966076, 0.020139826461672783, -0.02719179540872574, 0.048400744795799255, -0.009811138734221458, 0.0287762600928545, -0.010932344943284988, -0.03269109129905701, 0.026101678609848022, 0.016932934522628784, 0.0014505647122859955, -0.005280073266476393, 0.018284030258655548, -0.02991371415555477, -0.00895110983401537, -0.006639036349952221, 0.012003186158835888, 0.0049973661080002785, -0.017504962161183357, -0.02022753842175007, 0.003414754057303071, 0.03364482894539833, -0.0007008684915490448, 0.07793799042701721, 0.008454827591776848, -0.021863998845219612, -0.007977595552802086, 0.03990761935710907, -0.009485132060945034, 0.006777216214686632, 0.057869985699653625, 0.017154758796095848, -0.05253535136580467, -0.053791195154190063, -0.016814054921269417, -0.014788096770644188, 0.029201878234744072, 0.004297013394534588, -0.009295068681240082, 0.013036336749792099, 0.020720340311527252, -0.025232169777154922, -0.015139572322368622, 0.021595466881990433, -0.0022238860838115215, -0.04337252676486969, 0.027104852721095085, -0.00214322074316442, -0.021324297413229942, 0.08747845888137817, 0.058982547372579575, -0.0015801913104951382, 0.008256594650447369, 0.0029049748554825783, -0.04731843248009682, -0.01123580802232027, -0.0242850910872221, -0.03499136120080948, 0.18324017524719238, -0.010507403872907162, -0.0019649823661893606, -0.035586707293987274, -0.002275384496897459, -0.04694031924009323, -0.0022861731704324484, 0.007942121475934982, 0.0484391413629055, 0.02546536549925804, 0.0019255130318924785, 0.006247553043067455, -0.02582552284002304, -0.0032330902758985758, 0.002281168010085821, 0.02987406961619854, -0.006351963616907597, -0.01621042750775814, 0.05155294016003609, 5.0877235480584204e-05, -0.004641960375010967, 0.029755951836705208, -0.015260177664458752, -0.0044178953394293785, -0.003114939434453845, -0.008030467666685581, 0.005499042104929686, 0.04706214740872383, -0.019968045875430107, 0.10015904903411865, -0.012612467631697655, 0.012118407525122166, 0.01874363049864769, -0.018999801948666573, -0.041467808187007904, -0.0225794930011034, -0.010455070994794369, -0.04049534723162651, 0.016750339418649673, 0.0506550669670105, 0.0048333462327718735, -0.001726197311654687, 0.0002546778414398432, 0.07611740380525589, -0.029188329353928566, -0.01421352569013834, 0.027496512979269028, 0.04129880294203758, -0.009992074221372604, 0.026946542784571648, -0.00453066686168313, -0.03455261513590813, 0.03573828935623169, 0.049273524433374405, 0.060284968465566635, 0.02379160188138485, 0.03157049044966698, -0.04082286357879639, 0.04124144837260246, -0.002046523615717888, 0.009837280958890915, 0.009523567743599415, -0.03067486174404621, 0.0033164762426167727, -0.0009035681141540408, -0.03423686698079109, 0.0043403347954154015, -0.027787676081061363, -0.121074378490448, -0.0735132172703743, 4.425051884027198e-05, -0.03797079250216484, 0.03459634631872177, 0.02313731238245964, -0.0059296186082065105, 0.041176218539476395, -0.011355055496096611, -0.026521097868680954, 0.05485662817955017, 0.010298876091837883, -0.017327530309557915, 0.1018960103392601, 0.02424122765660286, -0.018344087526202202, -0.025486396625638008, 0.024227773770689964, 0.008658361621201038, -0.015107598155736923, -0.01983989030122757, 0.0068148477002978325, -0.016486531123518944, 0.02506340481340885, -0.01013732235878706, -0.02672664448618889, -0.03154468536376953, 0.0023238344583660364, 0.01960345171391964, 0.033111557364463806, -0.011843284592032433, -0.02002110332250595, -0.04990794137120247, 0.020820841193199158, 0.05562448501586914, 0.031411729753017426, -0.03143059089779854, -0.01769488863646984, -0.014084473252296448, 0.07179201394319534, 0.020858068019151688, -0.006626761518418789, -0.008225812576711178, 0.05404525250196457, -0.001912238891236484, -0.013016573153436184, 0.00989407766610384, 0.007725624367594719, 0.015348698012530804, -0.013656039722263813, 0.017522847279906273, -0.02596265822649002, 0.02448756992816925, 0.003437500214204192, -0.02826702408492565, 0.0006946534267626703, -0.01255976501852274, 0.006752952467650175, -0.00041660910937935114, 0.0030147782526910305, 0.002072475152090192, -0.03540515899658203, -0.027401845902204514, 0.035438474267721176, -0.09124637395143509, 0.004424097947776318, 0.020695459097623825, 0.011562591418623924, 0.03249220922589302, -0.01885383203625679, 0.027436543256044388, 0.0008031695033423603, 0.004821651615202427, -0.037523552775382996, -0.00538927735760808, 0.04729802906513214, -0.0034231317695230246, -0.034562043845653534, -0.02030257135629654, -0.01563076488673687, -0.02922978438436985, 0.00034717534435912967, -0.030075209215283394, 0.029919033870100975, -0.02781042829155922, -0.0025671711191534996, -0.013073128648102283, 0.039104461669921875, -0.02570229582488537, -0.008994143456220627, 0.004287609830498695, 0.007639365270733833, 0.020843859761953354, 0.010414420627057552, 0.014921040274202824, -0.016661930829286575, 0.022843144834041595, 0.022779876366257668, -0.00314286258071661, -0.008064023219048977, -0.020539185032248497, 0.01031897310167551, -0.01972994953393936, 0.013171084225177765, -0.03140562027692795, -0.0008303505601361394, -0.03418087959289551, 0.021957550197839737, 0.021176425740122795, -0.04640407860279083, 0.03435322269797325, -0.0012520987074822187, -0.0030764820985496044, -0.0073584094643592834, 0.05175533518195152, 0.05136197805404663, -0.04188986495137215, -0.026080027222633362, 0.016584215685725212, 0.006540116388350725, 0.08956847339868546, -0.003807343076914549, 0.03319761902093887]\"\n./train/goblet/n03443371_3708.JPEG,goblet,\"[-0.016182556748390198, 0.020235447213053703, 0.005917652510106564, -0.013088850304484367, 0.04683683067560196, -0.004525289870798588, -0.0011214170372113585, 0.06033722311258316, -0.022175781428813934, 0.025990309193730354, 0.011911571957170963, 0.003615487599745393, 0.053525686264038086, -0.015308802947402, 0.014775767922401428, -0.00580353569239378, 0.1163867637515068, 0.044954538345336914, -0.0015980665339156985, -0.026945123448967934, -0.03356388583779335, 0.014898397959768772, -0.034654922783374786, -0.0023036820348352194, -0.0108151501044631, 0.021670272573828697, 0.002906398382037878, 0.008612082339823246, -0.019671261310577393, -0.01435891818255186, 0.01005698274821043, 0.005683470983058214, -0.022200237959623337, -0.04974622651934624, 0.02129339426755905, -0.04523073881864548, -0.029269911348819733, -0.016149327158927917, -0.040037911385297775, 0.16240240633487701, 0.009087440557777882, -0.020022664219141006, 0.039039239287376404, 0.0044781542383134365, -0.002003438537940383, -0.18863323330879211, -0.006746112369000912, -0.015677811577916145, 0.03310593217611313, -0.010453763417899609, -0.025772681459784508, -0.01455682422965765, -0.005445202812552452, -0.02044466882944107, 0.004448275081813335, -0.03766416013240814, -0.07445861399173737, -0.004042825195938349, 0.003379042027518153, 0.024000026285648346, 0.02093425765633583, -0.06318805366754532, 0.004126355051994324, 0.01548464223742485, 0.029750140383839607, 0.044830307364463806, 0.0032126563601195812, -0.03807743638753891, -0.03925316780805588, -0.014691346324980259, -0.0071023134514689445, -0.018346887081861496, 0.014265895821154118, 0.008789296261966228, -0.012411069124937057, -0.014644639566540718, -0.012917282059788704, -0.006737885996699333, -0.0026643318124115467, -0.033695586025714874, -0.002146168379113078, -0.0322456881403923, 0.02753860130906105, -0.02930448390543461, 0.020308513194322586, -0.008636053651571274, -0.003335018176585436, 0.017663873732089996, -0.0030862237326800823, -0.016383690759539604, -0.011372433044016361, -0.0020016618072986603, -0.6665853261947632, -0.011410927399992943, -0.004602306522428989, -0.009985064156353474, 0.016436630859971046, 0.04295593872666359, 0.046542271971702576, 0.07031621783971786, 0.035105980932712555, -0.04439849033951759, 0.002123597078025341, 0.023796772584319115, 0.04672715812921524, -0.022586800158023834, -0.10731332004070282, 0.00960621703416109, 0.008458520285785198, 0.006703203544020653, 0.021680552512407303, 0.0406816191971302, 0.006940048187971115, 0.016052180901169777, -0.008866705000400543, 0.0365208275616169, -0.030178967863321304, 0.019405243918299675, -0.03245054557919502, 0.03632516786456108, 0.005890597589313984, -0.05456668138504028, -0.0016429872484877706, -0.040994010865688324, 0.02084161341190338, -0.051308926194906235, -0.009245411492884159, 0.018094727769494057, 0.03231135755777359, -0.034547511488199234, -0.033811915665864944, -0.028933081775903702, -0.009073251858353615, 0.07645096629858017, 0.014797484502196312, 0.005235651973634958, -0.06510446965694427, -0.004273128230124712, -0.015122918412089348, 0.010326002724468708, 0.0025111688300967216, 0.02691839635372162, -0.04152843356132507, -0.020658720284700394, -0.029044821858406067, 0.03355950862169266, 0.014445911161601543, -0.0241059809923172, -0.025152454152703285, -0.022627582773566246, 0.016131099313497543, 0.006110156420618296, 0.05538976192474365, -0.050148461014032364, -0.012571060098707676, -0.034485265612602234, 0.0073049007914960384, 0.0054078176617622375, -0.010482363402843475, -0.011969195678830147, -0.017929047346115112, -0.020605238154530525, -0.008185899816453457, -0.05219551920890808, -0.006735696457326412, 0.04852568730711937, -0.07329974323511124, -0.010362628847360611, -0.023649131879210472, 0.02477193810045719, -0.010964276269078255, -0.012246496975421906, -0.005231965333223343, 0.01768990233540535, -0.04221690073609352, -0.011452986858785152, 0.04952308163046837, -0.004927441943436861, 0.04638441279530525, 0.013463359326124191, 0.008721409365534782, 0.04437047615647316, 0.023125987499952316, 0.02916991524398327, -0.0370028018951416, 0.018650148063898087, -0.010813734494149685, 0.034521277993917465, 0.02964692749083042, 0.014856591820716858, 0.030404163524508476, -0.0006931874086149037, 0.01716778241097927, 0.013609099201858044, 0.08788036555051804, -0.0014121091226115823, 0.020607735961675644, -0.006938071921467781, -0.021953050047159195, -0.04049595817923546, -0.03235536813735962, 0.0025707732420414686, -0.029275715351104736, 0.045907557010650635, 0.009400702081620693, 0.004092767834663391, 0.027964046224951744, 0.00851136539131403, -0.005625887308269739, -0.050965990871191025, 0.002669075271114707, 0.09630768746137619, 0.007005386985838413, 0.009618895128369331, 0.000431548134656623, 0.00878593884408474, 0.03451697155833244, 0.03135223314166069, 0.010339190252125263, 0.016251323744654655, 0.00669148238375783, 0.06054045259952545, 0.02195691131055355, -0.025940513238310814, 0.05501361936330795, -0.028486212715506554, -0.01650603860616684, -0.04740254208445549, 0.0058133406564593315, 0.01037029642611742, 0.003760081948712468, 0.02011089213192463, -0.057926129549741745, 0.009111849591135979, 0.00020618429698515683, -0.0014314873842522502, 0.022582944482564926, -0.018908055499196053, -0.023165414109826088, -0.006142511498183012, 0.010536782443523407, -0.020306138321757317, -0.01690550521016121, -0.03694550320506096, -0.05853753536939621, 0.014737704768776894, 0.008595145307481289, 0.04575486108660698, -0.018702689558267593, 0.01994343101978302, -0.013616291806101799, 0.009494599886238575, -0.016300814226269722, -0.02137855440378189, -0.0024737222120165825, -0.010025609284639359, -0.014730137772858143, -0.025846371427178383, -0.0791143998503685, 0.03291172906756401, -0.006562082562595606, -0.03483407944440842, -0.03038002736866474, -0.051837895065546036, -0.02554316632449627, -0.05138899385929108, 0.014131269417703152, -0.026650257408618927, 0.025115903466939926, -0.006475056521594524, -0.035988908261060715, 0.010397869162261486, 0.06268279254436493, -0.0020652192179113626, -0.014821023680269718, 0.033580340445041656, 0.023178676143288612, 0.010521222837269306, -0.029511770233511925, -0.018606586381793022, 0.013921959325671196, 0.024444496259093285, -0.024720564484596252, 0.0022247859742492437, -0.030859220772981644, 0.004497352987527847, 0.06445430219173431, 0.04176859185099602, 0.013133072294294834, -0.03986204043030739, 0.03935612738132477, -0.011653396300971508, -0.012128276750445366, 0.02312764711678028, 0.025030100718140602, 0.02212425321340561, 0.009006615728139877, 0.051724594086408615, -0.009870188310742378, 0.03329736366868019, -0.009739451110363007, -0.016326867043972015, 0.025835596024990082, -0.022746212780475616, -0.022698847576975822, -0.01825939118862152, 0.041314128786325455, -5.813856114400551e-05, 0.0033390389289706945, -0.006063532549887896, 0.025362592190504074, 0.008662852458655834, 0.0763649269938469, 0.017122335731983185, 0.012933348305523396, -0.03547598049044609, 0.003004963044077158, -0.0013788678916171193, 0.004145135637372732, -0.04964926093816757, -0.014702736400067806, 0.1566944569349289, -0.015099449083209038, -0.010444206185638905, -0.009613772854208946, -0.017316628247499466, -0.02018393576145172, -0.03645157068967819, 0.029639514163136482, 0.031297605484724045, 0.0033388659358024597, -0.007093805819749832, -0.04093826562166214, -0.008945071138441563, 0.007491953670978546, -0.028092190623283386, 0.009027700871229172, -0.01569352298974991, 0.0029867461416870356, -0.007472456898540258, -0.013632155954837799, 0.007850666530430317, 0.02377120591700077, 0.0054057142697274685, 0.019064316526055336, -0.006438254378736019, 0.03972103074193001, 0.020221015438437462, -0.03978422284126282, 0.003091007936745882, 0.030009904876351357, 0.02137105166912079, 0.03739003837108612, 0.0059602889232337475, 0.010110476054251194, -0.03063724748790264, 0.016750773414969444, -0.08272998034954071, -0.011203638277947903, -0.04655739292502403, -0.025420021265745163, 0.019473208114504814, -0.003990962170064449, -0.05162341147661209, -0.14219751954078674, -0.01623273640871048, -0.0004555520717985928, 0.037311192601919174, 0.03358803316950798, 0.04631674662232399, 0.01294615026563406, 0.013309790752828121, -0.05916354060173035, -0.024883821606636047, -0.00961060356348753, -0.025534706190228462, 0.010709980502724648, -0.0023713582195341587, 0.010106283240020275, 0.010849637910723686, -0.005279801320284605, -0.03162093460559845, -0.047025930136442184, -0.027616726234555244, -0.0018309119623154402, 0.011623243801295757, 0.02336753159761429, 0.011228818446397781, 0.02083062008023262, -0.025647610425949097, -0.0068798670545220375, -0.004279139451682568, -0.029280956834554672, -0.02681112289428711, -0.01566290855407715, 0.012888888828456402, 0.002128773368895054, -0.019852731376886368, 0.06298282742500305, 0.043352700769901276, -0.011072454042732716, 0.02731940895318985, 0.10502394288778305, 0.024074820801615715, -0.00014298202586360276, 0.012034892104566097, 0.02598125860095024, 0.011226068250834942, 0.015104452148079872, -0.0195099376142025, 0.009260573424398899, 0.0014294673455879092, -0.018050435930490494, -0.013987528160214424, -0.005432180594652891, 0.012565012089908123, 0.01909739337861538, -0.008078156039118767, -0.014321191236376762, -0.006402784958481789, -0.010969714261591434, 0.001061290968209505, -0.0022339096758514643, 0.02520573139190674, -0.029294991865754128, -0.017080169171094894, 0.008498464711010456, -0.054085202515125275, -0.05751151591539383, 0.00214785966090858, 0.024341115728020668, -0.000792324251960963, 0.16127511858940125, -0.010464933700859547, -0.006728397216647863, -0.015555293299257755, -0.004018216859549284, -0.010594855062663555, 0.0015122912591323256, 0.006243086885660887, -0.0185562651604414, -0.009894683957099915, -0.00741627486422658, -0.014421912841498852, 0.03154245391488075, -0.01979362964630127, -0.009217062965035439, -0.0019760667346417904, -0.01632603257894516, 0.025308581069111824, 0.053767021745443344, -0.02508707530796528, 0.021857768297195435, -0.036498360335826874, -0.0314602293074131, 0.0159862469881773, 0.004169749561697245, 0.011932612396776676, 0.02577388286590576, 0.0016246956074610353, 0.038886867463588715, -0.010733242146670818, -0.030167968943715096, 0.009903893806040287, -0.035828765481710434, 0.009257582016289234, 0.06936381012201309, 0.0037516793236136436, 0.004162049852311611, -0.011466095224022865, -0.017703818157315254, -0.022050265222787857, 0.00443230289965868, -0.058296140283346176, -0.014138292521238327, -0.023724740371108055, 0.04222329333424568, -0.08180326223373413, -0.001892961678095162, 0.017893409356474876, 0.01834210194647312, -0.02126939222216606, 0.021465783938765526, -0.0020658858120441437, -0.035196319222450256, -0.048595890402793884, -0.0046686045825481415, 0.010561764240264893, 0.026185059919953346, -0.0056517841294407845, -0.03596732020378113, 0.041497644037008286, 0.05433662608265877, -0.01856227219104767, -0.022112339735031128, 0.017691174522042274, 0.02987314574420452, 0.010483275167644024, 0.0010931744473055005, 0.0033948400523513556, -0.04138308763504028, 0.01740824244916439, -0.01565633900463581, 0.019512124359607697, 0.03332020714879036, -0.03364025428891182, 0.03124324418604374, -0.015993302688002586, -0.04893605411052704, 0.0331389456987381, 0.026908788830041885, -0.01592801883816719]\"\n./train/goblet/n03443371_23436.JPEG,goblet,\"[-0.0450693778693676, 0.026051582768559456, -0.011273087933659554, -0.004612727090716362, 0.051336947828531265, -0.013216470368206501, 0.014392076060175896, 0.011015099473297596, -0.018717005848884583, -0.015836771577596664, -0.002310379408299923, -0.02079358883202076, 0.02120416983962059, -0.0005253629642538726, 0.021807365119457245, -0.019508427008986473, 0.06271395087242126, 0.011877483688294888, 0.009828111156821251, -0.013848613947629929, -0.0863482728600502, 0.015184069983661175, 0.017531337216496468, -0.01033791247755289, -0.03383141756057739, 0.015041145496070385, 0.01334148459136486, 0.0014399205101653934, -0.007997835986316204, -0.012932848185300827, -0.015289055183529854, -0.005541784223169088, -0.002057566773146391, -0.024300776422023773, -0.0661306381225586, -0.007031149696558714, -0.026840917766094208, 0.003557239193469286, -0.04065132886171341, 0.1194201111793518, -0.007013827562332153, -0.036265913397073746, 0.0047331396490335464, 0.015683040022850037, 0.0031043689232319593, -0.20633500814437866, 0.033737726509571075, 0.014621341601014137, -0.024039356037974358, 0.03759230300784111, 0.015831131488084793, 0.033965662121772766, 0.005978048779070377, -0.02389931119978428, -0.00537845166400075, 0.03492855653166771, -0.03430918976664543, 0.00423333328217268, -0.03636736795306206, 0.042908404022455215, -0.10874161869287491, -0.02547948621213436, -0.024364778771996498, 0.031341467052698135, -0.008398297242820263, 0.02955131232738495, 0.012163094244897366, 0.02512572892010212, -0.050013042986392975, -0.01292337290942669, 0.03228900954127312, 0.007878576405346394, 0.010898315347731113, -0.008701249025762081, -0.0014603093732148409, -0.0008424217812716961, -0.04078318178653717, 0.0014914972707629204, -0.019806765019893646, -0.026248425245285034, 0.0021218573674559593, 0.02999367192387581, -0.012376389466226101, 0.018215926364064217, -0.016746781766414642, 0.03396837040781975, -0.02517206035554409, -0.014575181528925896, 0.04496555030345917, -0.027799835428595543, 0.009612669236958027, 0.0027614294085651636, -0.7173800468444824, -0.0274348184466362, -0.007359990384429693, 0.026286188513040543, 0.013173960149288177, -0.009503455832600594, 0.07242885231971741, 0.01050991378724575, 0.027220867574214935, 0.024348149076104164, -0.01098752859979868, 0.01407511718571186, 0.05840270221233368, 0.001415639417245984, -0.017436625435948372, 0.012870263308286667, 0.0051220497116446495, 0.00709189660847187, 0.018880153074860573, -0.04795565456151962, -0.017742769792675972, -0.010807122103869915, -0.00108752038795501, 0.009108232334256172, -0.041366130113601685, 0.009459569118916988, 0.027530763298273087, 0.019215751439332962, -0.010510931722819805, -0.02661438100039959, 0.004744222853332758, 0.0009174246224574745, -0.0009320468525402248, -0.03471081331372261, -0.023833515122532845, -0.007146263495087624, -0.007617878261953592, -0.010880173183977604, 0.014404197223484516, -0.049488965421915054, -0.0010189871536567807, 0.08316612243652344, -0.029551979154348373, 0.009831896051764488, -0.06924054026603699, -0.0377536416053772, -0.03559174761176109, 0.03002970479428768, 0.002483659889549017, -0.013840445317327976, 0.004324223846197128, 0.008318204432725906, -0.03424202650785446, 0.012555824592709541, -0.008093747310340405, -0.028794026002287865, -0.017921973019838333, 0.002308878116309643, -0.03191332519054413, 0.03171765059232712, 0.12232395261526108, -0.02484149858355522, -0.007515972480177879, -0.03679405897855759, 0.013894563540816307, -0.017507323995232582, 0.013584000989794731, 0.003463177476078272, 0.023071477189660072, -0.033012937754392624, -0.007412073202431202, -0.006781099829822779, 0.00851403921842575, 0.014661906287074089, 0.022028740495443344, 0.05579102784395218, 0.016933156177401543, -0.010906919836997986, 0.0005851716850884259, 0.02035493589937687, 0.005390392616391182, -0.03959072753787041, -0.03013661503791809, 0.005438574124127626, -0.00593242421746254, 0.008249256759881973, 0.06717400252819061, -0.018968455493450165, -0.0033083760645240545, 0.009401892311871052, -0.030761055648326874, 0.01995459757745266, -0.023758066818118095, 0.008123603649437428, -0.004113242961466312, 0.013915061950683594, -0.022298354655504227, -0.00769814383238554, 0.006891035009175539, 0.026604129001498222, -0.014415361918509007, 0.021858619526028633, 0.011352439410984516, -0.0020495534408837557, -0.018764054402709007, 0.01945323869585991, -0.0335264652967453, -0.016131462529301643, 0.005334461573511362, -0.007476193830370903, -0.010121837258338928, 0.07589273899793625, 0.031163055449724197, -0.02647918462753296, -0.004988713189959526, -0.036580074578523636, 0.008915044367313385, -0.017048073932528496, 0.007130960933864117, 0.05670205503702164, -0.009637076407670975, 0.009645320475101471, -0.010883106850087643, -0.03603203594684601, 0.019095320254564285, 0.02806927263736725, 0.028145287185907364, -0.007590717636048794, -0.01420249231159687, 0.10881469398736954, -0.029817748814821243, -0.001220441423356533, 0.031051313504576683, -0.005335794761776924, -0.003599446965381503, -0.025815261527895927, 0.008462746627628803, 0.03968670591711998, -0.0053945137187838554, 0.01480216532945633, 0.0010926647810265422, -0.03405842185020447, -0.013969499617815018, 0.00430659344419837, 0.0032144631259143353, -0.022041669115424156, -0.012180604971945286, 0.0229614470154047, -0.022311309352517128, -0.013416619040071964, -0.00524992635473609, -0.04730910435318947, -0.06812021136283875, -0.012057280167937279, 0.019572339951992035, 0.0561726875603199, -0.007547259796410799, 0.003966636024415493, -0.025202255696058273, 0.05503220856189728, 0.014153603464365005, -0.028796805068850517, 0.0008666121866554022, -0.01566237397491932, -0.04567994922399521, -0.020561572164297104, 0.045433610677719116, 0.02438913658261299, -0.01654728129506111, -0.009453271515667439, 0.009768183343112469, 0.11623306572437286, 0.03374321758747101, -0.03585967421531677, 0.04508034139871597, -0.015844136476516724, 0.021949108690023422, -0.007954437285661697, -0.015002492815256119, 0.04073600471019745, 0.007112074643373489, 0.01624183915555477, 0.0044084582477808, -0.014467321336269379, -0.02924872189760208, -0.00243549351580441, -0.014091014862060547, 0.009028198197484016, 0.00919333565980196, 0.0024487085174769163, -0.018226079642772675, 0.008161970414221287, -0.016929294914007187, 0.020739344879984856, 4.6584995288867503e-05, -0.033954229205846786, -0.006923758890479803, -0.024338465183973312, 0.008660538122057915, 0.006495265290141106, 0.02065705507993698, 0.0184819083660841, -0.008339585736393929, 0.03148413822054863, 0.00903349369764328, 0.010828607715666294, 0.00843160692602396, 0.02190445177257061, -0.007140041794627905, -0.01381033193320036, -0.01730462536215782, -0.004819685593247414, 0.009951588697731495, -0.006120194680988789, 0.027672717347741127, 0.007106506731361151, 0.022502729669213295, -0.010783078148961067, 0.012223144061863422, 0.02403508499264717, 0.08287612348794937, -0.011503968387842178, 0.012934982776641846, 0.0150303915143013, 0.034776344895362854, 0.027400635182857513, -0.006329878233373165, 0.011645428836345673, 0.007158591412007809, 0.06699299067258835, -0.006553455255925655, -0.0006859868881292641, -0.023569121956825256, -0.00273873470723629, -0.007859303615987301, -0.018198231235146523, 0.013318341225385666, 0.03744081035256386, -0.02036813646554947, -0.021545540541410446, -0.025105781853199005, -0.0024068127386271954, -0.017739254981279373, -0.008475128561258316, 0.018337862566113472, -0.036029331386089325, 0.025434494018554688, -0.00815065111964941, -0.006099841091781855, -0.00821267906576395, -0.02378297969698906, -0.023019855841994286, 0.009382009506225586, -0.007652125786989927, 0.018785107880830765, 0.032961729913949966, 0.006802116520702839, 0.0362110361456871, 0.005134968087077141, 0.007607544306665659, 0.025006791576743126, -0.01591102033853531, -0.012752220034599304, -0.065269336104393, 0.0018706588307395577, -0.003803504630923271, -0.009084692224860191, 0.00037032036925666034, -0.076507069170475, 0.017653578892350197, 0.024114226922392845, -0.00026644766330718994, -0.04021038860082626, 0.028058715164661407, 0.01363515853881836, 0.04767134040594101, 0.009329589083790779, 0.027970848605036736, 0.0037665616255253553, 0.020433582365512848, -0.02149498090147972, -0.03009486198425293, 0.002129683271050453, -0.003622649470344186, 0.08722662925720215, 0.028513368219137192, -0.021675879135727882, 0.01502162218093872, -0.020759927108883858, -0.11595480144023895, -0.013393406756222248, 0.00512614194303751, 0.04741282761096954, 0.004215894266963005, 0.021742405369877815, 0.030992640182375908, -0.008876916952431202, 0.1317841112613678, 0.044354647397994995, -0.03919599950313568, -0.008899730630218983, -0.05711458995938301, -0.00541232293471694, 0.005394771695137024, 0.0038069903384894133, -0.02015388198196888, -0.00613227067515254, 0.0011034916387870908, 0.01815151236951351, 0.011869950219988823, 0.08880682289600372, -0.007991858758032322, -0.01638924889266491, 0.04047464579343796, 0.007091899868100882, -0.015105255879461765, 0.0478583462536335, -0.021068647503852844, 0.004018048755824566, -0.01439423393458128, -0.028858773410320282, 0.014294810593128204, -0.013186908327043056, -0.004431215580552816, 0.005063132848590612, 0.013644028455018997, -0.042017612606287, 0.00512951472774148, -0.03249335289001465, -0.0013568061403930187, 0.006385552231222391, 0.009628547355532646, -0.027160244062542915, 0.001133912825025618, 0.01744295470416546, -0.008811643347144127, -0.05358314514160156, 0.007897076196968555, 0.016996657475829124, 0.02477976121008396, 0.06862599402666092, -0.023385103791952133, -0.004563448019325733, -0.02020745351910591, -0.01019154954701662, -0.014394866302609444, 0.02286757156252861, 0.0031634073238819838, -0.003964697476476431, -0.028000516816973686, 0.02393963560461998, 0.003516004653647542, 0.0007622449193149805, -0.01302761398255825, 0.003880575532093644, 0.027136949822306633, -0.017619287595152855, 0.04297330975532532, 0.019109144806861877, -0.030007779598236084, 0.024668268859386444, -0.032572779804468155, -0.021478772163391113, -0.007599030155688524, 0.005762042012065649, -0.02210739068686962, -0.016464784741401672, -0.02309875749051571, 0.01822495460510254, -0.03991216793656349, -0.039915163069963455, -0.03492704778909683, -0.01594385877251625, 0.012651434168219566, 0.0450420118868351, -0.02668105997145176, -0.00010275862587150186, -0.0338837094604969, -0.04822969064116478, 0.025651004165410995, 0.031401749700307846, -0.051161643117666245, -0.016384201124310493, -0.03474261611700058, 0.013979857787489891, -0.04410014674067497, -0.007728576194494963, -0.016532909125089645, 0.008176074363291264, 0.03893687576055527, 0.0009154184954240918, 0.023845257237553596, -0.025023428723216057, -0.05378835275769234, -0.01852780021727085, 0.01491010095924139, -0.0032581358682364225, -0.014522546902298927, 0.006931892596185207, 0.013538351282477379, 0.030108368024230003, -0.06374421715736389, 0.020448071882128716, 0.010085254907608032, 0.0014871408930048347, -0.013971978798508644, 0.0006017365376465023, -0.025009088218212128, -0.019770434126257896, 0.014097071252763271, -0.022446902468800545, 0.00948405172675848, 0.05010519176721573, -0.03902936726808548, 0.04011968895792961, -0.012248233892023563, -0.05921133607625961, 0.0744318813085556, 0.026572508737444878, 0.019097277894616127]\"\n./train/goblet/n03443371_3723.JPEG,goblet,\"[-0.041451480239629745, 0.06275096535682678, 0.003666272386908531, -0.012515930458903313, 0.06693916022777557, 0.010274271480739117, 0.06305275857448578, 0.005715062841773033, -0.02271636389195919, 0.003843697952106595, 0.024247216060757637, -0.0027656767051666975, -0.08397912979125977, -0.016750657930970192, 0.019626274704933167, 0.0010954680619761348, 0.024378202855587006, 0.004881994798779488, -0.012088008224964142, -0.03545401990413666, -0.011390571482479572, -0.022648435086011887, 0.009801778011023998, 0.020760763436555862, 0.0028027198277413845, 0.06609372794628143, 0.007925505749881268, -0.015856929123401642, -0.014932023361325264, -0.03160877525806427, -0.0009009240311570466, 0.0004267621843609959, -0.013800772838294506, -0.08866265416145325, -0.010233446955680847, 0.0381430983543396, 0.01681937463581562, 0.016378020867705345, 0.060306012630462646, 0.073499895632267, 0.02028653956949711, -0.0023604563903063536, -0.02247558906674385, 0.006281455047428608, 0.010150597430765629, -0.21192742884159088, 0.042086079716682434, 0.006313384510576725, -0.007017321418970823, 0.045925550162792206, -0.0037817980628460646, 0.049470435827970505, 0.010083876550197601, -0.07111269980669022, -0.02304978109896183, -0.01789618656039238, -0.08148841559886932, 0.026349421590566635, 0.024961968883872032, 0.06179536506533623, -0.006739888805896044, -0.010925906710326672, 0.015125089325010777, 0.016493018716573715, -0.016891224309802055, 0.05593133345246315, -0.030779648572206497, 0.03383534029126167, -0.01684938557446003, -0.007938885129988194, 0.008440244942903519, -0.0061247278936207294, 0.017746159806847572, 0.011919854208827019, -0.01017051562666893, 0.030570952221751213, -0.019010575488209724, 0.002924154745414853, 0.04184061288833618, -0.05170923098921776, -0.00687211100012064, -0.024419063702225685, 0.005675048101693392, -0.07153145223855972, -0.013992330990731716, 0.019362416118383408, -0.05296031013131142, 0.00957806222140789, 0.007088512182235718, -0.02208050526678562, -0.01049611996859312, -0.010390673764050007, -0.6043848991394043, 0.044261347502470016, -0.036040354520082474, -0.004407272208482027, 0.0045515308156609535, 0.022054169327020645, -0.031805653125047684, 0.03760959953069687, 0.014717931859195232, -0.0008330612326972187, -0.008732324466109276, 0.036322418600320816, -0.0026848625857383013, -0.028829624876379967, -0.1209883987903595, 0.033312998712062836, -7.224955334095284e-05, 0.016344236209988594, 0.03550795093178749, 0.015588609501719475, 0.019546207040548325, 0.005509954411536455, 0.007614925038069487, -0.037628769874572754, -0.024319937452673912, -0.006174183916300535, 0.050938189029693604, -0.017527498304843903, 0.014644698239862919, -0.04653145372867584, 0.04589454457163811, -0.0046073137782514095, -0.012311062775552273, 0.052229609340429306, -0.010167370550334454, -0.009520485065877438, -0.019718516618013382, -0.03190283104777336, -0.009703935123980045, 0.00795700028538704, 0.03114362061023712, 0.08402567356824875, 0.006155792158097029, 0.03200117498636246, -0.011381999589502811, -0.05129179358482361, -0.008808929473161697, 0.029820209369063377, 0.008996177464723587, 0.0069000329822301865, -0.03327018395066261, -0.00893966294825077, -0.02487650141119957, -0.023526694625616074, 0.0012938663130626082, -0.0395917072892189, -0.007653333712369204, -0.006322951056063175, -0.03435295447707176, 0.005222581326961517, 0.024966832250356674, -0.0007299418793991208, 0.005546835251152515, -0.02058597467839718, 0.02061559073626995, -0.02635858580470085, 0.05869535729289055, -0.004673316143453121, -0.032184403389692307, 0.005829344969242811, 0.007632487919181585, -0.010634691454470158, -0.012624043971300125, -0.021373383700847626, -0.011759922839701176, 0.04464130476117134, -0.019552472978830338, -0.03761410340666771, -0.00637883460149169, 0.008655703626573086, -0.011276555247604847, -0.0015091401292011142, -0.016205357387661934, 0.04520750790834427, 0.010685007087886333, -0.009371221996843815, -0.004379487596452236, -0.0025594362523406744, 0.059133488684892654, -0.04412393644452095, 0.0065293340012431145, -0.0522523894906044, 0.013535077683627605, -0.004736109636723995, 0.02333916164934635, 0.03744576498866081, 0.0067673334851861, 0.01291376817971468, 0.015848321840167046, -0.013472343795001507, 0.008157871663570404, -0.023035356774926186, -0.014780005440115929, 0.04098017141222954, 0.027946259826421738, -0.008404248394072056, 0.03809377923607826, -0.0047579919919371605, 0.0031725438311696053, 0.03830341249704361, 0.03693928197026253, 0.0054396954365074635, 0.021051159128546715, 0.013480735011398792, 0.005249266512691975, 0.014134140685200691, -0.010640760883688927, 0.007817727513611317, -0.014375055208802223, 0.055955905467271805, -0.02020670473575592, -0.03317209705710411, -0.007328273728489876, -0.015266165137290955, 0.06368862837553024, -0.008132576942443848, -0.02339678630232811, -0.05652192607522011, -0.024764901027083397, 0.053545866161584854, -0.020327957347035408, 0.001339890412054956, -0.004808108787983656, -0.04065655916929245, -0.013217017985880375, 0.028638366609811783, 0.003908264916390181, 0.007818852551281452, -0.07061048597097397, -0.010736122727394104, -0.052255429327487946, 0.06640522181987762, -0.004638635087758303, 0.04483392834663391, -0.03230078145861626, -0.03854016214609146, -0.047904014587402344, -0.025304343551397324, 0.02079826034605503, 0.017993899062275887, 0.019157791510224342, 0.015989292412996292, -0.061935629695653915, 0.024425668641924858, -0.008594841696321964, 0.07920954376459122, -0.01597949117422104, 0.03261220455169678, 0.0070608630776405334, 0.04723301902413368, -0.03797447681427002, -0.029547322541475296, -0.01640673354268074, 0.013070604763925076, -0.027496928349137306, 0.00656296219676733, -0.07937401533126831, 0.014711614698171616, 0.022749416530132294, -0.0032626185566186905, 0.016294974833726883, -0.034523606300354004, 0.012639068067073822, -0.03539297729730606, 0.0017996104434132576, 0.031537916511297226, 0.06898724287748337, -0.044532377272844315, -0.042424410581588745, 0.01859099417924881, 0.008300062268972397, 0.009624714031815529, -0.0025508615653961897, -0.03198092803359032, -0.04285772889852524, -0.0030312174931168556, -0.033646706491708755, -0.0413617379963398, -0.014826908707618713, 0.0008928499300964177, -0.045306626707315445, 0.004243860021233559, -0.006291388534009457, 0.032129596918821335, 0.004158386029303074, 0.031930211931467056, 0.012923323549330235, -0.014907401986420155, 0.04785533249378204, 0.003320826683193445, -0.0025315473321825266, -0.006110444664955139, -0.021206026896834373, -0.02809860371053219, -0.03948628902435303, 0.06158597767353058, -0.0165981687605381, -0.011792288161814213, -0.015156115405261517, -0.005384813062846661, -0.0022869068197906017, 0.012586209923028946, -0.014046681113541126, -0.03567557781934738, -0.006288827396929264, 0.011004878208041191, -0.019671835005283356, 0.02049729786813259, -0.036038078367710114, 0.010859272442758083, 0.08373844623565674, -0.0367981418967247, 0.004131792113184929, -0.005607434082776308, -0.02904846891760826, 0.01771189644932747, 0.012886841781437397, -0.10452564060688019, 0.032873377203941345, 0.18924470245838165, -0.023024186491966248, -0.019203370437026024, -0.027247780933976173, -0.02822575904428959, -0.0010263919830322266, 0.017117485404014587, -0.007107362151145935, -0.011241168715059757, 0.022433746606111526, -0.03792320564389229, -0.019151980057358742, -0.012613366357982159, -0.014891405589878559, -0.011341308243572712, -0.008639136329293251, 0.04089749604463577, -0.04287142679095268, -0.003914445172995329, -0.026344647631049156, 0.04981907829642296, 0.027057666331529617, 0.02300410345196724, 0.021317018195986748, -0.0051937769167125225, 0.004613031167536974, 0.015928391367197037, -0.06738513708114624, 0.0074192071333527565, -0.051763612776994705, -0.011197863146662712, 0.06413094699382782, -0.024994725361466408, -0.013844594359397888, -0.09476592391729355, -0.026900460943579674, -0.0421404093503952, -0.009446174837648869, 0.031431861221790314, -0.02966674230992794, 0.003387612523511052, -0.007077881600707769, 0.0036955534014850855, -0.023496706038713455, 0.024000510573387146, 0.04050394520163536, 0.0004466311656869948, 0.027288416400551796, 0.0379023551940918, 0.029924193397164345, 0.02302050217986107, 0.003265014849603176, 0.0090060168877244, 0.014215170405805111, -0.06002206355333328, 0.12751421332359314, 0.008943845517933369, 0.010300720110535622, 0.0028076476883143187, -0.05285269394516945, -0.03625168278813362, 0.006571970880031586, 0.0035367014352232218, -0.0017476144712418318, 0.02004966326057911, 0.008170437067747116, -0.028644628822803497, 0.008803650736808777, 0.08140051364898682, -0.03289364278316498, -0.01654098369181156, 0.011744965799152851, 0.011527876369655132, 0.016288092359900475, -0.008060410618782043, -0.017681285738945007, -0.06015137955546379, 0.06403293460607529, 0.013071696273982525, 0.021164454519748688, 0.012725048698484898, 0.06123097240924835, 0.00010308739001629874, 0.026185642927885056, -0.001045987824909389, -0.0007381107425317168, -0.005598518066108227, -0.007223828695714474, -0.009017293341457844, 0.010269815102219582, 0.03530856966972351, 0.008160430938005447, -0.03353528305888176, -0.01774066500365734, 0.02347235381603241, 0.011533311568200588, 0.01411930751055479, -0.004304466303437948, 0.0013410351239144802, -0.015372183173894882, -0.0007958807982504368, 0.0071602254174649715, 0.003743996610864997, -0.011253572069108486, -0.029737090691924095, -0.0182261373847723, -0.013513149693608284, -0.03593809902667999, 0.014003091491758823, 0.01340735238045454, 0.04025959596037865, 0.15659426152706146, -0.031475409865379333, -0.062489770352840424, -0.051970332860946655, -0.023422835394740105, -0.026634015142917633, 0.023679643869400024, 0.01973326876759529, -0.004933615680783987, -0.005203733686357737, 0.0069068255834281445, 0.0344415120780468, -0.03613968938589096, -0.013577512465417385, 0.0027822854463011026, 0.017513494938611984, -0.06726958602666855, -0.005522304214537144, 0.06770096719264984, 0.007590430788695812, 0.011233814992010593, -0.08716577291488647, -0.01743188127875328, 0.046410709619522095, 0.018756980076432228, -0.04283395782113075, 0.004687910433858633, -0.08112380653619766, 0.03558903560042381, -0.026587318629026413, 0.00895662885159254, -0.02696133777499199, 0.008771877735853195, 0.037004586309194565, 0.054659780114889145, 0.011460796929895878, -0.03777426853775978, -0.018994327634572983, -0.02745751664042473, 0.023216675966978073, -0.005941522307693958, -0.10739582777023315, -0.056986648589372635, -0.03197250887751579, 0.028108904138207436, -0.0018656711326912045, -0.019808243960142136, -0.028641793876886368, -0.00882772821933031, 0.027361081913113594, 0.041019123047590256, -0.02075396105647087, 0.04725489765405655, -0.04141208529472351, -0.00491592101752758, -0.0019225807627663016, 0.02832700125873089, -0.019318759441375732, -0.01882440783083439, -0.02853354439139366, 0.04020074009895325, -0.0769212543964386, -0.04673897847533226, 0.03695785254240036, -0.009633722715079784, 0.0007553813047707081, -0.025996796786785126, 0.0023053032346069813, 0.03175058588385582, -0.050853319466114044, 0.03504067659378052, -0.008562460541725159, -0.002904046094045043, -0.04490545392036438, -0.0055974069982767105, 0.00169001251924783, 0.020141568034887314, 0.08174078911542892, 0.015603305771946907, -0.06346993148326874]\"\n./train/goblet/n03443371_3288.JPEG,goblet,\"[-0.046873725950717926, 0.0412035696208477, 0.013411620631814003, 0.008293306455016136, 0.0683324933052063, -0.008502302691340446, 0.0686645582318306, -0.0022201668471097946, -0.02574271708726883, 0.031031470745801926, 0.016379281878471375, -0.011057370342314243, 0.008068224415183067, -0.035314030945301056, 0.014749070629477501, 0.020932061597704887, 0.06709899753332138, 0.02228245697915554, -0.00360353896394372, -0.021124495193362236, -0.037232477217912674, 0.01575087010860443, -0.013119564391672611, -0.03336254507303238, -0.007841899059712887, 0.01416188757866621, 0.021767212077975273, 0.007983124814927578, -0.007468965370208025, -0.005452136974781752, 0.0029595012310892344, 0.0035943740513175726, -0.0018923281459137797, -0.007539436686784029, 0.0021122219040989876, -0.0064241476356983185, 0.004639983642846346, -0.024686409160494804, 0.018319865688681602, 0.02843533083796501, -0.02181597240269184, -0.005688314791768789, -0.023849697783589363, -0.01175260916352272, -0.004258601926267147, -0.1445077359676361, 0.046256326138973236, -0.01667376421391964, 0.015578333288431168, 0.021407142281532288, -0.02093168906867504, 0.02647949382662773, -0.01901114545762539, -0.08434242010116577, -0.031546059995889664, -0.0648709312081337, -0.06260571628808975, 0.013857903890311718, 0.0448756143450737, 0.028855375945568085, 0.01435663178563118, -0.009958487004041672, 0.011666318401694298, -0.019031498581171036, -0.01906180940568447, 0.045643776655197144, -0.040689900517463684, -0.016209110617637634, -0.01200071070343256, -0.0018293112516403198, 0.013508817180991173, -0.007825857028365135, 0.002417860319837928, 0.0385957695543766, -0.0065691410563886166, 0.008232972584664822, 0.015923067927360535, -0.013995892368257046, 0.010461539030075073, -0.07667118310928345, -0.0019302497385069728, -0.040587183088064194, -0.004630390089005232, -0.059771209955215454, -0.05155437812209129, 0.023111289367079735, -0.027893219143152237, 0.003947890363633633, 0.007216912228614092, -0.006653216667473316, -0.004143164027482271, -0.04356279596686363, -0.6053082346916199, 0.03355173394083977, -0.0333855003118515, 0.03662736341357231, 0.03511342033743858, 0.04666009917855263, -0.032030172646045685, 0.04971126466989517, 0.03967380151152611, -0.058590054512023926, 0.014189674519002438, 0.013155288994312286, 0.025083603337407112, -0.0451403446495533, -0.09702517837285995, 0.015084133483469486, 0.019115954637527466, 0.011273302137851715, 0.05810706317424774, -0.00897097960114479, 0.017218472436070442, 0.04301881045103073, -0.03303040564060211, -0.013725059106945992, -0.027747564017772675, -0.015835754573345184, -0.004904297646135092, 0.023017609491944313, 0.01890604756772518, -0.037887539714574814, -0.03856268152594566, 0.025956686586141586, 0.006705945823341608, 0.031504202634096146, -0.051655422896146774, 0.016713978722691536, -0.02194114401936531, -0.05262841284275055, -0.03322209045290947, -0.04119255393743515, 0.0028998879715800285, 0.08385057747364044, 0.038385726511478424, 0.02886301279067993, 0.0015462483279407024, -0.04322602599859238, -0.03883127495646477, 0.011282073333859444, -0.016979753971099854, 0.04777950048446655, -0.020136874169111252, 0.03284775838255882, -0.03239816054701805, -0.039194412529468536, -0.008849456906318665, -0.04372195526957512, -0.0036784494295716286, -0.033035341650247574, -0.002356137614697218, -0.043208032846450806, 0.042773377150297165, -0.05509692057967186, 0.008009339682757854, -0.03670039772987366, -0.029855066910386086, -0.010770192369818687, 0.06640372425317764, -0.019077029079198837, -0.024089602753520012, -0.012012407183647156, 0.007844649255275726, -0.0600573755800724, 0.02575831301510334, -0.023431070148944855, 0.005030307453125715, 0.01978394202888012, -0.003025243291631341, 0.013800645247101784, -0.02509206347167492, 0.0004908727132715285, -0.02287818118929863, 0.008347547613084316, -0.03833213448524475, 0.005182437598705292, 0.033653151243925095, -0.020850112661719322, -0.009660043753683567, 0.013560153543949127, 0.05559349060058594, -0.055522557348012924, 0.01856948994100094, -0.055370137095451355, -0.021744288504123688, 0.009683363139629364, 0.04356871917843819, 0.029828574508428574, 0.00780340563505888, 0.015603210777044296, 0.02528502605855465, -0.017939062789082527, 0.014013913460075855, 0.01078028418123722, 0.02697344496846199, 0.006809387821704149, -0.04026764631271362, -0.057238586246967316, -0.004178328439593315, -0.01729593425989151, -0.040323227643966675, -0.008909559808671474, 0.003417960135266185, 0.02492784895002842, 0.00041670689824968576, 0.005574213340878487, 0.008942407555878162, 0.01778205670416355, -0.04604800045490265, 0.030023762956261635, -0.04072440788149834, 0.09660405665636063, -0.03629263490438461, 0.009914676658809185, 0.01874769851565361, 0.022520119324326515, 0.011266079731285572, -0.014629955403506756, 0.01977774314582348, 0.014867274090647697, -0.005375949665904045, -0.01675255596637726, 0.005121584050357342, 0.025320863351225853, -0.0022564223036170006, -0.025069046765565872, -0.0090103130787611, 0.03274066373705864, 0.020809831097722054, 0.008717947639524937, -0.06950836628675461, 0.0023289998061954975, -0.04318282753229141, 0.05803251639008522, 0.01481084804981947, -0.006685869302600622, 0.018666857853531837, -0.015637263655662537, -0.01871759258210659, -0.011336324736475945, 0.001200420898385346, -0.003122311318293214, 0.004955333657562733, 0.03516973927617073, -0.05593569949269295, 0.04114864021539688, -0.00161809625569731, 0.06246775761246681, 0.01181778497993946, 0.11030513048171997, 0.0034957348834723234, 0.018500352278351784, -0.02865765616297722, -0.010393792763352394, 0.011425563134253025, -0.006813430693000555, 0.0006497575086541474, 0.03865571320056915, -0.11090493202209473, 0.008945110253989697, 0.018405016511678696, -0.011510091833770275, -0.0039896597154438496, -0.06299443542957306, 0.028302764520049095, -0.024925146251916885, 0.00864992942661047, 0.009182718582451344, 0.03897314891219139, -0.0034012228716164827, -0.0380118191242218, 0.016036953777074814, 0.023771028965711594, -0.03980144113302231, 0.03187740966677666, 0.027178483083844185, -0.03522554785013199, -0.0050838361494243145, 0.02950689010322094, -0.04299061745405197, -0.004640884231775999, 0.006727018393576145, -0.05365951731801033, 0.03696710988879204, 0.004697414115071297, 0.022651562467217445, 0.042604800313711166, 0.043255411088466644, -0.01665526255965233, -0.014128921553492546, 0.03555602207779884, -0.07278241217136383, -0.0588565468788147, 0.024815160781145096, 0.0009274664334952831, -0.011666672304272652, -0.004532822873443365, 0.0444452166557312, -0.008351074531674385, 0.0004580951645039022, -0.006581701338291168, -0.01807430200278759, 0.01902662217617035, 0.057208914309740067, -0.0117869907990098, -0.03661017864942551, -0.021824972704052925, 0.03353404998779297, -0.03600609302520752, 0.002791299019008875, 0.0008902153349481523, 0.021189702674746513, 0.08357992768287659, -0.008838496170938015, 0.03395305946469307, -0.028878208249807358, 0.01623876765370369, 0.02318771928548813, 0.010755039751529694, -0.07014548033475876, 0.04296119138598442, 0.22695060074329376, -0.016853781417012215, -0.03222811967134476, -0.00816247146576643, 0.006006444804370403, -0.042462557554244995, -0.0013235779479146004, -0.04083504155278206, -0.014509666711091995, 0.048826880753040314, -0.014365553855895996, -0.01752682775259018, 0.007849274203181267, -0.051817744970321655, -0.02280469983816147, -0.01383714098483324, 0.010541049763560295, -0.05946347117424011, 0.03734872490167618, -0.004722108598798513, 0.010395524092018604, -0.003258866723626852, 0.02650073543190956, 0.003092443337664008, 0.014764086343348026, 0.012380245141685009, 0.03214340656995773, -0.04080691188573837, -0.01801416091620922, -0.0030963674653321505, 0.024342872202396393, 0.046248845756053925, 0.02026394009590149, -0.023232808336615562, -0.056493669748306274, -0.029704030603170395, -0.04567795246839523, -0.03456678241491318, 0.0011498639360070229, 0.02285108156502247, 0.02749996818602085, 0.014248397201299667, -0.04012507572770119, -0.055329762399196625, -0.010143532417714596, 0.049028292298316956, 0.02670951746404171, 0.03775618597865105, 0.04473511129617691, 0.030899446457624435, 0.0383734330534935, -0.02170209027826786, 0.019492749124765396, 0.03471524268388748, -0.03352102264761925, 0.04734884575009346, 0.0012819495750591159, 0.03495410829782486, 0.01836007460951805, -0.019765086472034454, -0.0669863298535347, -0.008100992999970913, -0.025935150682926178, 0.010932144708931446, 0.02315923385322094, 0.007516043726354837, -0.04027082771062851, -0.032076045870780945, 0.008620730601251125, -0.02582418918609619, -0.017947189509868622, -0.02706657350063324, 0.0033504655584692955, -0.048033978790044785, 0.013288386166095734, 0.00042945114546455443, -0.021861888468265533, 0.08186303824186325, 0.01712052896618843, -0.0066061560064554214, 0.024758052080869675, 0.16283537447452545, 0.0003379285626579076, 0.01138264499604702, -0.027491478249430656, 0.02914912812411785, -0.009006581269204617, -0.03415174037218094, 0.01100600603967905, 0.02423836663365364, -0.010180204175412655, -0.0006184665253385901, -0.060977160930633545, -0.04211442917585373, 0.011490992270410061, 0.060853809118270874, 0.004127005115151405, -0.020950503647327423, 0.01340620405972004, -0.01105630211532116, 0.02059962972998619, -0.005379802081733942, 0.057878583669662476, -0.0002338500926271081, -0.010130347684025764, -0.0007476132013835013, -0.059408560395240784, -0.0027803455013781786, -0.0005618092254735529, 0.05637839064002037, 0.034111522138118744, 0.14340655505657196, -0.008389269933104515, -0.058160003274679184, -0.08111080527305603, -0.028354551643133163, -0.009816658683121204, 0.05078884959220886, 0.019140666350722313, 0.014909784309566021, -0.005661912262439728, -0.004251896403729916, 0.04528220742940903, -0.024827592074871063, 0.008664125576615334, 0.01625676266849041, 0.016022639349102974, -0.03371687978506088, 0.027634840458631516, 0.011385566554963589, -0.010384122841060162, 0.004245727322995663, -0.06751574575901031, -0.0067808665335178375, 0.030789896845817566, 0.021152619272470474, -0.03012799844145775, -0.013428661972284317, 0.012127386406064034, 0.017986811697483063, -0.0021145292557775974, 0.016535287722945213, -0.007382866460829973, 0.0339084193110466, 0.02797938883304596, 0.053788717836141586, 0.04816074296832085, -0.010149429552257061, -0.009753563441336155, -0.02950732409954071, 0.026446614414453506, 0.005336944479495287, -0.0880170539021492, -0.02823486365377903, -0.037076279520988464, 0.033956337720155716, -0.009253001771867275, 0.036828093230724335, -0.06347361952066422, -0.00311260181479156, -0.006597628351300955, 0.012488046661019325, 0.006931119132786989, -0.006715266965329647, -0.03778010234236717, -0.026747548952698708, 0.025031020864844322, 0.008564474061131477, -0.015601607970893383, -0.010270051658153534, -0.009326214902102947, -0.040117282420396805, -0.05377313122153282, -0.015266649425029755, -0.010400534607470036, 0.0195078793913126, -0.009032059460878372, 0.00731195043772459, -0.020536309108138084, 0.030497431755065918, -0.0190886203199625, -0.001174507662653923, 0.03595895692706108, 0.04732412099838257, -0.053244397044181824, -0.004908464848995209, 0.0029819225892424583, 0.022219659760594368, 0.08468396961688995, 0.019403284415602684, -0.021090466529130936]\"\n./train/goblet/n03443371_7195.JPEG,goblet,\"[-0.033952757716178894, 0.01261652261018753, 0.02382134646177292, -0.006991518195718527, 0.056084875017404556, -0.005065521690994501, 0.032327692955732346, -0.006482609547674656, 0.03162644803524017, 0.02745973877608776, 0.033557407557964325, -0.03609459847211838, 0.0008708821260370314, -0.027236120775341988, 0.05092950165271759, 0.003881639800965786, 0.0577484630048275, 0.016363538801670074, 0.011358005926012993, -0.024755647405982018, -0.031855881214141846, -0.008517827838659286, 0.011690560728311539, -0.02038702182471752, -0.04513932019472122, 0.03893516585230827, -0.006774191278964281, 0.0064440276473760605, 0.004103925544768572, 0.0009017104166559875, 0.031142478808760643, 0.01766049861907959, -0.02580832690000534, -0.031801436096429825, -0.015450787730515003, -0.025617467239499092, 0.002848057309165597, 0.0029084954876452684, 0.0032555798534303904, 0.13108213245868683, -0.0030163628980517387, -0.021829234436154366, 0.01959858275949955, 0.03662032634019852, -0.006077121011912823, -0.22821727395057678, -0.027237186208367348, 0.010501505807042122, 0.051232948899269104, -0.0016396930441260338, -0.03709123283624649, -0.019917739555239677, -0.006934762001037598, -0.04187943413853645, 0.003115937812253833, -0.012292908504605293, -0.07058705389499664, -0.016646455973386765, 0.030477482825517654, 0.030519183725118637, 0.05503031611442566, -0.05753234773874283, 0.035680051892995834, 0.012737180106341839, 0.01640806719660759, 0.04630456492304802, 0.017194457352161407, -0.06496031582355499, -0.019139602780342102, -0.0005162483430467546, 0.01100117340683937, -0.001981424866244197, 0.025393608957529068, -0.04886157438158989, -0.007137947250157595, -0.02821614220738411, -0.04398563876748085, -0.005422811955213547, -0.010393112897872925, -0.019796838983893394, -0.008775564841926098, -0.006942912936210632, 0.029341192916035652, -0.03837842866778374, 0.0033521500881761312, -5.695162144547794e-06, -0.03928309679031372, 0.0003123455389868468, 0.01925196312367916, 0.025113394483923912, 0.009013096801936626, 0.022281408309936523, -0.5497124791145325, -0.008609120734035969, -0.0070699783973395824, 0.01854453794658184, 0.0038628370966762304, 0.037230152636766434, 0.028961101546883583, 0.07804080098867416, 0.036342840641736984, -0.03172999620437622, -0.03557106480002403, 0.043819278478622437, 0.006683479994535446, -0.039581842720508575, 0.06327176094055176, 0.0013225909788161516, 0.014734475873410702, 0.009610984474420547, 0.005775575526058674, 0.002673529088497162, -0.0016522961668670177, 0.05358830466866493, 0.007920186966657639, 0.03380070626735687, -0.02245737612247467, 0.020017031580209732, 0.007171499542891979, 0.04414624348282814, 0.00047972812899388373, -0.044637493789196014, 0.013069596141576767, -0.03219662979245186, -0.013749901205301285, 0.02899683453142643, 0.016156964004039764, 0.04509522765874863, 0.028596127405762672, -0.03259091451764107, 0.04169273003935814, 0.004961168393492699, -0.0266093909740448, 0.07019463181495667, 0.05623894929885864, -0.018356336280703545, 0.01358977984637022, -0.010097230784595013, -0.029177598655223846, 0.01864347606897354, -0.013191748410463333, 0.04373209923505783, -0.011364680714905262, 0.01831134222447872, -0.04084279388189316, 0.01621222123503685, -0.025001194328069687, -0.02608349919319153, -0.03932633623480797, 0.019803838804364204, 0.028403468430042267, 0.006579534150660038, 0.10195469856262207, -0.04962700977921486, -0.008813316933810711, -0.04596458375453949, -0.007947138510644436, 0.014999175444245338, 0.03930451348423958, -0.024188213050365448, 0.02582581341266632, -0.0006808338803239167, -0.021495243534445763, -0.0354771688580513, -0.03752174973487854, 0.014655675739049911, -0.00529523054137826, 0.01379832811653614, -0.031030062586069107, -0.013558197766542435, 0.02574802003800869, 0.011878200806677341, 0.006061570253223181, -0.020219184458255768, -0.02936810813844204, 0.0031340466812253, 0.06406693160533905, -0.001044894102960825, 0.068085677921772, -0.003545207902789116, 0.025642983615398407, 0.012522675096988678, 0.006451682653278112, 0.0034428334329277277, -0.04862025007605553, 0.029468923807144165, 0.0018237995682284236, 0.02885921113193035, -0.012071030214428902, 0.011674919165670872, 0.004733305424451828, -0.04235570877790451, 0.026189876720309258, 0.002682517981156707, 0.02621605060994625, 0.027017682790756226, 0.05501992627978325, -0.013997666537761688, -0.020859356969594955, 0.010261764749884605, 0.0034270337782800198, 0.00010918197949649766, 0.008441473357379436, 0.01815013587474823, -0.008631066419184208, 0.017888393253087997, 0.0004987418651580811, -0.017817819491028786, -0.05243845283985138, -0.02108857035636902, -0.0018376231892034411, 0.10153932124376297, -0.015583845786750317, 0.036157604306936264, -0.0199885331094265, -0.0012511992827057838, 0.007288200780749321, 0.03724776580929756, 0.048272594809532166, 0.00824726466089487, -0.002362726256251335, -0.007240203209221363, -0.013780465349555016, -0.022367091849446297, 0.011752739548683167, -0.028727268800139427, -0.009548152796924114, 0.009053999558091164, -0.0431484654545784, -0.021874774247407913, 0.009336203336715698, -0.0023642857559025288, -0.05194401368498802, 0.006792452186346054, -0.02149130590260029, 0.08147866278886795, -0.004739328753203154, -0.03529772534966469, 0.005103396251797676, 0.002878934610635042, -0.027374496683478355, -0.051745932549238205, 0.010851125232875347, -0.043929629027843475, -0.042745091021060944, 0.0033573301043361425, 0.013942408375442028, 0.06833168119192123, 0.005312433000653982, 0.036422938108444214, -0.034082699567079544, 0.013229042291641235, -0.04535447806119919, -0.05392124876379967, -0.025137843564152718, -0.01914353109896183, -0.07524338364601135, -0.03246813267469406, -0.07731825858354568, 0.027255814522504807, -0.017948167398571968, -0.006228964310139418, -0.009534131735563278, -0.044965919107198715, -0.004079227801412344, -0.007507698610424995, -0.009503798559308052, -0.04487277939915657, 0.03571953624486923, 0.016622183844447136, -0.029474221169948578, -0.006609996780753136, 0.06590208411216736, -0.031322140246629715, 0.015502707101404667, 0.0017470089951530099, -0.021391086280345917, -0.008979757316410542, -0.04949318245053291, -0.024219438433647156, 0.010774423368275166, 0.00021215011656749994, 0.00076896051177755, 0.007743872236460447, -0.04540525749325752, -0.01301522646099329, 0.05372655764222145, 0.03099435567855835, -0.030487842857837677, -0.006294523365795612, 0.03324632719159126, -0.005073681473731995, -0.014006056822836399, 0.01915302872657776, -0.015498647466301918, 0.016650747507810593, -0.06682362407445908, 0.04245464876294136, -0.009198886342346668, 0.05309684947133064, -0.005456625949591398, 0.005252709612250328, 0.022778280079364777, -0.029711782932281494, 0.009281454607844353, -0.0039734309539198875, 0.0031115617603063583, 0.0001506826956756413, 0.029228458181023598, 0.053004082292318344, -0.026244936510920525, 0.05640094727277756, 0.06990133970975876, 0.01604008488357067, 0.009670781902968884, -0.0426056869328022, 0.03685692325234413, 0.05466023087501526, -0.006891779135912657, -0.011414317414164543, 0.018829988315701485, 0.2643762528896332, -0.044704124331474304, -0.06532672792673111, -0.002053492236882448, -0.028394922614097595, 0.04994829371571541, -0.032663822174072266, -0.024827422574162483, -0.026060132309794426, 0.038627322763204575, -0.008032312616705894, -0.046993229538202286, -0.00936982873827219, -0.03021140582859516, -0.0358300656080246, 0.03651071712374687, -0.01427903026342392, 0.0003230342990718782, -0.021668506786227226, 0.021472113206982613, -0.0003285981947556138, -0.03381664305925369, 0.02412397228181362, -0.019794588908553123, 0.009609445929527283, 0.03840267285704613, -0.0007365615456365049, -0.034068763256073, 0.013970564119517803, 0.002765632001683116, 0.010317790322005749, 0.027588138356804848, 6.640833453275263e-05, -0.011520462110638618, -0.010920052416622639, 0.01382490899413824, 0.010079344734549522, 0.018116598948836327, -0.04018661379814148, -0.018382778391242027, 0.003699748544022441, 0.00957160722464323, -0.024335196241736412, -0.16489218175411224, -0.003911837935447693, 0.01984581910073757, 0.08048252016305923, 0.03387823328375816, 0.03767115995287895, 0.007009714841842651, 0.014867099933326244, -0.02761918678879738, 0.0026205386966466904, -0.03746500238776207, -0.02072747051715851, 0.14667445421218872, 0.015052491798996925, 0.07105027884244919, 0.023503342643380165, 0.0075687444768846035, -0.04076261818408966, -0.033648546785116196, -0.0014409117866307497, 0.03872677683830261, 0.05697516351938248, 0.036979254335165024, 0.004189902916550636, -0.020603220909833908, 0.09025593101978302, 0.03530094400048256, -0.013123027980327606, 0.026728078722953796, -0.03464990481734276, -0.012013541534543037, 0.007243604399263859, -0.04602727293968201, -0.008133415132761002, 0.06314245611429214, 0.029610347002744675, 0.013575403951108456, 0.03984035179018974, 0.13651198148727417, -0.030061913654208183, 0.0029471528250724077, 0.01715156063437462, -0.010572629980742931, 0.029680654406547546, 0.02571975812315941, -0.0058947219513356686, 0.03174017742276192, -0.011767338961362839, -0.025248054414987564, -0.02757706120610237, 0.0030514325480908155, 0.029965298250317574, 0.0001201753766508773, -0.04558115452528, -0.04388521984219551, -0.003364033065736294, -0.0699358880519867, 0.032316904515028, 0.02527964487671852, 0.023394078016281128, -0.030881356447935104, -0.008441833779215813, 0.0541236512362957, -0.0292209405452013, -0.09377482533454895, 0.005410453770309687, 0.035715386271476746, 0.01941242441534996, 0.1751312017440796, -0.004645857028663158, -0.02576206624507904, -0.037944894284009933, -0.03812597692012787, -0.014367849566042423, 0.024186760187149048, 0.005444956477731466, 0.0015084983315318823, 0.023941770195961, -0.006278220564126968, 0.06517487019300461, 0.06264472752809525, -0.034918058663606644, 0.0139905521646142, 1.6579946532147005e-05, -0.005229031667113304, 0.028069451451301575, 0.03528237342834473, -0.000921290076803416, -0.000550473399925977, -0.021797288209199905, 0.011915064416825771, 0.0013038829201832414, -0.016892949119210243, 0.021702494472265244, 0.01438149157911539, 0.004516376182436943, 0.023915283381938934, -0.031973596662282944, -0.011003107763826847, 0.025385398417711258, 0.023275749757885933, 0.004283412359654903, 0.03714874014258385, 0.008677485398948193, -0.014859744347631931, 0.004723978694528341, 0.0004390793910715729, 0.011011035181581974, 0.009497822262346745, -0.03411770239472389, -0.018379906192421913, -0.055234599858522415, -0.014941433444619179, -0.04241527244448662, 0.02815563976764679, -0.0022896130103617907, 0.0011943946592509747, -0.04055285453796387, 0.01347634568810463, 0.00998660922050476, -0.004481343552470207, -0.005792068317532539, -0.009184706956148148, 0.030706075951457024, 0.01071445643901825, -0.038508035242557526, -0.002461201511323452, -0.012347899377346039, -0.021411538124084473, -0.061142634600400925, -0.04580775275826454, 0.0013778872089460492, 0.02664140611886978, 0.004016229882836342, 0.04517095535993576, 0.0030067586340010166, 0.01671455055475235, -0.00463468162342906, 0.005939367227256298, 0.007030177861452103, 0.0523311085999012, 0.0055011254735291, 0.01386830024421215, 8.505566802341491e-05, -0.002523967996239662, 0.0330137237906456, 0.017461495473980904, -0.024719836190342903]\"\n./train/goblet/n03443371_3571.JPEG,goblet,\"[-0.02086171694099903, -0.007791651878505945, 0.010401059873402119, 0.02360508032143116, 0.05987194553017616, 0.005874249152839184, 0.029256755486130714, 0.010595210827887058, -0.10260812193155289, 0.01420628186315298, 0.029172353446483612, -0.038100942969322205, 0.026076795533299446, -0.022412382066249847, 0.057805486023426056, -0.0016909261466935277, -0.03903694823384285, 0.01431420911103487, 0.047790203243494034, -0.014680507592856884, -0.016270823776721954, -0.0050413953140378, 0.013387809507548809, 0.012778990902006626, -0.02285505086183548, -0.0002051771734841168, 0.012275900691747665, 0.025682657957077026, -0.0008341423817910254, -0.011164318770170212, 0.028772836551070213, 0.016755281016230583, 0.022870272397994995, -0.007008557207882404, -0.014358596876263618, -0.04496360942721367, -0.02634953334927559, -0.02437012642621994, -0.0073446366004645824, 0.030096258968114853, -0.0003852741210721433, -0.028087865561246872, 0.0018679224886000156, -0.02431628853082657, 0.0034083479549735785, -0.0010567529825493693, 0.025811757892370224, -0.01593216136097908, -0.026681309565901756, 0.022237900644540787, 0.012813756242394447, 0.0029415730386972427, 0.008459498174488544, -0.007316119968891144, -0.015316498465836048, -0.028310662135481834, 0.02256062813103199, -0.007568063214421272, -0.00786399282515049, 0.020516542717814445, 0.015295417979359627, -0.005460356827825308, -0.03167929872870445, 0.01813504658639431, 0.039132896810770035, 0.024220529943704605, 0.01827074959874153, 0.02575007639825344, -0.044134654104709625, -0.009062239900231361, -0.017741480842232704, 0.032097212970256805, 0.010955513454973698, -0.06570681929588318, -0.02838779427111149, 0.01066325232386589, -0.050965093076229095, 0.051032308489084244, -0.02881200984120369, -0.009272664785385132, 0.0015194216975942254, 0.007130954414606094, -0.03308342024683952, 0.014274893328547478, -0.011089382693171501, -0.037021514028310776, -0.029646752402186394, 0.017813317477703094, 0.09691672027111053, 0.018013333901762962, -0.002762319054454565, -0.034999165683984756, -0.6407378315925598, -0.021856945008039474, -0.04041759669780731, 0.001825552200898528, -0.03235131502151489, -0.0038961097598075867, 0.0768069326877594, 0.10409213602542877, 0.03342991694808006, 0.011708090081810951, -0.03266996145248413, 0.024128302931785583, 0.08856123685836792, -0.0259749423712492, 0.006941518280655146, 0.015401898883283138, -0.006950177252292633, -0.009556635282933712, 0.03065575659275055, -0.015401287004351616, 0.024196898564696312, 0.03344431892037392, -0.02584102563560009, 0.031871721148490906, -0.056577909737825394, 0.0078432597219944, 0.010734333656728268, 0.04520432651042938, -0.0136565575376153, -0.0264265276491642, -0.006236269138753414, -0.01834561862051487, -0.024188529700040817, -0.05263051763176918, -0.0027259860653430223, 0.017938924953341484, -0.017952274531126022, -0.04418279603123665, -0.03166893869638443, -0.0681903287768364, 0.003793880343437195, 0.09057950228452682, -0.056163351982831955, 0.00897580198943615, -0.0073991091921925545, -0.014511746354401112, -0.03528660908341408, 0.0010201397817581892, -0.021006915718317032, -0.0036726018879562616, -0.040334198623895645, 0.04324895143508911, -0.028839698061347008, 0.0028241132386028767, 0.018193921074271202, -0.0644691213965416, -0.034977443516254425, 0.042287085205316544, -0.043070465326309204, 0.01763341948390007, 0.003456292673945427, -0.06549358367919922, -0.0016086094547063112, -0.035009924322366714, 0.011104154400527477, -0.057331472635269165, 0.03533874452114105, -0.017017660662531853, 0.025227203965187073, -0.006850615609437227, 0.0011651520617306232, -0.03138187527656555, 0.0018791311886161566, -0.0030359996017068624, 0.06164493039250374, 0.018531007692217827, 0.021968776360154152, 0.0217906441539526, -0.0007870583212934434, 0.010037299245595932, 0.04295442998409271, -0.0329652838408947, -0.00805590022355318, -0.05943334847688675, -0.14552095532417297, -0.0027564256452023983, -0.013349237851798534, -0.02707366831600666, 0.02386714145541191, 0.01771398074924946, -0.035551268607378006, -0.018048718571662903, -0.03831474110484123, 0.04815356060862541, 0.018481485545635223, 0.013541797176003456, 0.0007195590878836811, -0.0021246576216071844, 0.002831658348441124, 0.02138475701212883, -0.037914205342531204, 0.009578176774084568, 0.011100453324615955, -0.027712136507034302, 0.016694756224751472, -0.0018555602291598916, -0.05318626016378403, 0.007151004392653704, -0.035365939140319824, 0.012523380108177662, -0.014505434781312943, 0.05316857248544693, -0.022077595815062523, -0.021433435380458832, -0.0016418523155152798, 0.007988275028765202, 0.07753519713878632, 0.026462530717253685, -0.00036772931343875825, 0.0076273540034890175, -0.003091535996645689, 0.026729553937911987, 0.008857282809913158, -0.018674880266189575, 0.04721050709486008, -0.011795712634921074, 0.06432618200778961, 0.010982563719153404, 0.01812039315700531, 0.10207673907279968, -0.04733358696103096, 0.024532347917556763, 0.030414070934057236, -0.028704900294542313, -0.04472966864705086, 0.0040953862480819225, -0.014265945181250572, -0.02924390882253647, 0.01714284159243107, -0.024831809103488922, -0.009439614601433277, -0.08414778113365173, 0.009325160644948483, 0.10157981514930725, 0.008186046965420246, -0.01715519092977047, -0.00020676321582868695, -0.0002656719589140266, -0.017748339101672173, 0.050808101892471313, -0.04713539406657219, 0.006411409936845303, -0.010643660090863705, 0.04775143042206764, 0.01833331026136875, 0.0388944074511528, 0.04068708047270775, 0.03622926399111748, -0.012939905747771263, 0.004341438878327608, 0.03075365349650383, 0.018979551270604134, 0.014809549786150455, 0.00425059674307704, -0.07849280536174774, -0.022211527451872826, -0.09108790010213852, 0.025922035798430443, 0.0020075116772204638, 0.04194004833698273, -0.07033530622720718, -0.015791479498147964, 0.02735021337866783, -0.01528747659176588, 0.007839576341211796, -0.01928406022489071, 0.022571638226509094, -0.0025653447955846786, -0.022006560117006302, 0.03672727197408676, 0.04198174923658371, 0.03152145445346832, 0.016175225377082825, -0.04217556118965149, -0.01972382143139839, 0.012362957000732422, -0.009191085584461689, -0.04012904688715935, 0.005844638217240572, 0.0408104732632637, 0.0023586212191730738, -0.0023089160677045584, -0.03568744286894798, 0.022731943055987358, 0.05015936493873596, -0.0069965762086212635, 0.005160185508430004, 0.01593014970421791, 0.04878814518451691, -0.0359857976436615, 0.019340623170137405, 0.028184207156300545, 0.03392375633120537, 0.012157941237092018, 0.04890213534235954, 0.0001240562996827066, 0.011057008057832718, 0.007679499685764313, -0.0016178451478481293, -0.02832578867673874, 0.013096179813146591, -0.018866034224629402, -0.007943421602249146, 0.02898457832634449, 0.012306811287999153, -0.007557176053524017, 0.025220569223165512, -0.0241212360560894, 0.006733683403581381, -0.025268839672207832, 0.090354323387146, -0.02141675353050232, -0.009795659221708775, -0.00601195776835084, 0.05281153321266174, 0.08222091197967529, 0.011046914383769035, 0.08168214559555054, 0.045631565153598785, 0.06632379442453384, 0.0011588759953156114, 0.00782415084540844, 0.0346221923828125, -0.0003920561575796455, -0.027211934328079224, -0.010600143112242222, 0.04178996756672859, 0.02736692875623703, 0.010625486262142658, -0.043784357607364655, -0.01654038578271866, -0.011919176205992699, -0.04028450697660446, -0.031190235167741776, 0.0008279248140752316, 0.011054068803787231, 0.03249114379286766, 0.005972560029476881, -0.02454918622970581, -0.004696852061897516, -0.0028491865377873182, -0.009755800478160381, 0.015404809266328812, 0.010145914740860462, -0.021179713308811188, 0.04619773477315903, 0.025727340951561928, -0.02417626604437828, -0.0027941795997321606, 0.03740832582116127, 0.022723115980625153, -0.004411021247506142, -0.014331982471048832, -0.030684558674693108, 0.04206859692931175, 0.13002756237983704, -0.06567034870386124, -0.006300326902419329, -0.07338053733110428, 0.026693595573306084, 0.021214457228779793, 0.04673723503947258, -0.03485613316297531, -0.025985196232795715, 0.03931346535682678, 0.014143552631139755, 0.029835041612386703, 0.020885029807686806, -0.010827328078448772, 0.002584723522886634, -0.055267591029405594, -0.028722982853651047, 0.021338842809200287, 0.008278710767626762, 0.03814724087715149, 0.043033417314291, -0.06514905393123627, 0.009298252873122692, 0.03266315162181854, -0.07784252613782883, 0.01010665949434042, 0.050214216113090515, 0.09598104655742645, -0.005508634261786938, 0.0653960257768631, 0.03863559290766716, 0.00766809843480587, 0.030849389731884003, 0.030021533370018005, -0.018255606293678284, 0.008507108315825462, -0.008486047387123108, 0.024465860798954964, 0.0038627374451607466, -0.03449241816997528, -0.043241750448942184, -0.030136248096823692, -0.06114960461854935, -0.004439716227352619, 0.04743025079369545, 0.05850207433104515, 0.02979186177253723, -0.026834450662136078, -0.002557657193392515, -0.0030928379856050014, 0.011065276339650154, 0.047944750636816025, -0.05031638965010643, 0.0030034200754016638, 0.03434734046459198, -0.04606444388628006, 0.005570809822529554, -0.007778350263834, -0.019509293138980865, 0.015584800392389297, 0.023906515911221504, -0.0021380698308348656, 0.01707068458199501, -0.011228788644075394, -0.017116084694862366, 0.040130481123924255, -0.008578559383749962, 0.004122377373278141, 0.014400003477931023, 0.03857187181711197, 0.019551696255803108, 0.09364282339811325, -0.009847654961049557, 0.019505640491843224, 0.004484125413000584, 0.03951505571603775, -0.03472432494163513, -0.02412647008895874, -0.03301854431629181, 0.017848782241344452, -0.017840178683400154, -0.02266893908381462, 0.03856357932090759, -0.047369636595249176, -0.005082028917968273, 0.07545620203018188, -0.07995539903640747, -0.01281908992677927, -0.01000694278627634, 0.007092659827321768, -0.002105381339788437, -0.005926560610532761, 0.059629589319229126, -0.035224899649620056, 0.01718301512300968, 0.026612751185894012, 0.033452194184064865, -0.059492893517017365, -0.009885021485388279, -0.00277060572989285, -0.02037397213280201, -0.006250002887099981, 0.08040362596511841, -0.020794816315174103, -0.015043620020151138, 0.02770421653985977, -0.024038391187787056, 0.026593077927827835, 0.01667206920683384, -0.05054714158177376, -0.01953478716313839, -0.023607823997735977, -0.01221101451665163, -0.03556843474507332, 0.02590170130133629, 0.014109431765973568, -0.03710087016224861, -0.014248578809201717, -0.018204456195235252, 0.01848124898970127, -0.0661039799451828, 0.01109494548290968, -0.08202315866947174, 0.030740439891815186, -0.0202633123844862, -0.019285300746560097, 0.01573273167014122, 0.0033773849718272686, -0.02434632182121277, -0.015201909467577934, 0.029694395139813423, 0.03775986656546593, 0.01847716234624386, -0.033163633197546005, -0.022159215062856674, 0.039433564990758896, -0.049885839223861694, -0.012598386965692043, 0.009408359415829182, -0.03397512063384056, -0.025437677279114723, 0.05994134396314621, -0.016875678673386574, -0.039941322058439255, 0.020623184740543365, -0.01534987986087799, -0.01572040654718876, -0.012003062292933464, -0.010986855253577232, -0.003510251408442855, -0.017658904194831848, -0.012516727671027184, -0.007839479483664036, 0.030589042231440544, 0.00012995387078262866]\"\n./train/goblet/n03443371_268.JPEG,goblet,\"[-0.038253434002399445, 0.029463408514857292, 0.0037732510827481747, -0.006071584299206734, 0.0237810630351305, -0.035886187106370926, 0.03281136229634285, 0.02143477089703083, -0.0004155072965659201, -0.020626431331038475, -0.001249343971721828, 0.009999193251132965, 0.06499619781970978, -0.050555843859910965, 0.013430189341306686, -0.008702821098268032, 0.09544772654771805, 0.010780786164104939, -0.005332515574991703, -0.06185495853424072, -0.08011633157730103, 0.03232194855809212, -0.0315256230533123, 0.009941669180989265, -0.020139653235673904, 0.05375198647379875, 0.015576646663248539, -0.0069970726035535336, 0.007007789332419634, -0.06589356809854507, 0.005640814080834389, 0.05490749701857567, -0.03805899620056152, -0.046465568244457245, 0.023303285241127014, -0.02077893726527691, -0.04813507944345474, 0.005887279752641916, -0.0007504359818994999, 0.03374263644218445, 0.0015594465658068657, -0.03660057112574577, 0.030917126685380936, -0.0007864885265007615, 0.011221544817090034, -0.15273694694042206, 0.00363287259824574, 0.036432892084121704, 0.014046252705156803, 0.00626936974003911, 0.0006965092616155744, 0.03475097194314003, 0.011987936682999134, -0.04922977089881897, -0.03166700527071953, -0.02011382207274437, -0.10239408910274506, -0.006545086391270161, -0.02038375288248062, 0.03133430331945419, -0.0005575378891080618, -0.030879603698849678, 0.01494009979069233, 0.024127142503857613, 0.02782294899225235, 0.05065496638417244, 0.0035748917143791914, -0.02440917305648327, -0.04596371203660965, -0.012819907627999783, 0.002426361432299018, 0.010048584081232548, -0.007407099939882755, 0.03779534623026848, 0.004367006942629814, -0.025067435577511787, 0.0029656917322427034, -0.017264997586607933, 0.0183078832924366, -0.03084838204085827, -0.017631668597459793, -0.029971638694405556, -0.0012157582677900791, -0.05521158128976822, 0.018347980454564095, -0.006907754577696323, 0.017266858369112015, -0.022333690896630287, 0.0452444814145565, -0.014706175774335861, 0.019991807639598846, -0.028569074347615242, -0.6233036518096924, -0.10125312209129333, -0.025352856144309044, -0.003717901650816202, 0.0008933267090469599, 0.03496108204126358, 0.0542219802737236, 0.005825833883136511, 0.027465369552373886, -0.041207581758499146, -0.010659915395081043, 0.02014927566051483, 0.06586617976427078, -0.06879008561372757, -0.06000084429979324, -0.01731126755475998, 0.021402526646852493, -0.038727059960365295, 0.02842935547232628, 0.00830073095858097, 0.017741955816745758, 0.020644037052989006, -0.058505527675151825, 0.04201347008347511, -0.0507836639881134, 0.00574146956205368, 0.018462367355823517, 0.007467615883797407, 0.04572444409132004, 0.0002153143286705017, 0.004571967758238316, -0.007072865962982178, 0.005825958214700222, -0.02395808883011341, -0.010710440576076508, 0.013246383517980576, -0.009873022325336933, -0.015328885987401009, -0.0246318019926548, -0.041476476937532425, 0.03784266486763954, 0.08270055800676346, 0.030926473438739777, -0.04551289975643158, -0.0629347488284111, -0.04382087662816048, -0.049488287419080734, -0.001984914531931281, -0.011157678440213203, 0.033115092664957047, -0.07731375098228455, 0.004265742842108011, -0.03513094410300255, 0.0134867113083601, -0.0360841266810894, -0.013991115614771843, -0.0028231835458427668, -0.013308372348546982, -0.004297849256545305, 0.0046545895747840405, 0.07690224796533585, -0.059343792498111725, 0.004657476209104061, -0.040943849831819534, 0.0038266489282250404, -0.02496168576180935, 0.023147407919168472, -0.003013507928699255, -0.0028243116103112698, -0.03978987783193588, -0.031663887202739716, -0.03810940310359001, -0.009290575049817562, 0.02423311024904251, -0.02274947240948677, 0.03636414185166359, -0.034643396735191345, 0.01756519451737404, -0.027387332171201706, 0.01037607342004776, -0.010241478681564331, -0.004299437627196312, -0.045819032937288284, -0.019464457407593727, 0.0015286707784980536, -0.006485792342573404, 0.013822292909026146, -0.03774682432413101, 0.060222260653972626, 0.018151162192225456, 0.019554302096366882, -0.016917888075113297, -0.04518391564488411, 0.003573172725737095, 0.005730883218348026, 0.036290183663368225, 0.03115174174308777, 0.0037501438055187464, 0.019648516550660133, 0.0010966294212266803, -0.011672833003103733, -0.013457795605063438, 0.09371321648359299, -0.009553727693855762, -0.023077121004462242, 0.0032562410924583673, -0.03686785325407982, -0.010176288895308971, -0.0035452416632324457, 0.025577891618013382, 0.004800235386937857, 0.05182388424873352, -0.0012398068793118, 0.019031371921300888, 0.010731175541877747, 0.0007372814579866827, 0.009073613211512566, 0.005027238745242357, 0.004700970370322466, 0.10839185863733292, -0.014275578781962395, 0.004703809041529894, 0.011424222961068153, 0.012729196809232235, 0.050988707691431046, 0.022780194878578186, -0.022468235343694687, 0.029826408252120018, -0.021526586264371872, 0.03433898463845253, 0.01162299420684576, -0.00424190191552043, 0.042323999106884, -0.018126986920833588, 0.011060262098908424, 0.014565647579729557, -0.0014804652892053127, -0.004263319540768862, -0.013408494181931019, 0.03026147373020649, -0.027826430276036263, 0.01377042755484581, -0.024816520512104034, 0.09150341898202896, 0.03301156684756279, -0.04799507185816765, -0.004867988172918558, -0.00912030041217804, -0.0019821450114250183, -0.021669583395123482, 0.004211344290524721, -0.03969739004969597, -0.07035042345523834, 0.06572374701499939, -0.005420188885182142, 0.065482497215271, -0.018112732097506523, 0.01704471930861473, 0.017005667090415955, 0.00988337118178606, -0.0005960187409073114, -0.006697675213217735, 0.0021950697991997004, 0.025690237060189247, 0.0030076936818659306, -0.015420089475810528, -0.11384754627943039, 0.025139620527625084, -0.022858429700136185, -0.005355441942811012, -0.028960274532437325, -0.06713249534368515, 0.010798778384923935, -0.02132263407111168, -0.0021036502439528704, -0.05857342481613159, 0.05307934805750847, -0.02841966040432453, -0.029725976288318634, 0.0423608273267746, 0.06513264775276184, 0.036597684025764465, 0.012339574284851551, 0.00287195504643023, -0.040977612137794495, 0.0003716954088304192, -0.004189434461295605, -0.030318835750222206, 0.0022994130849838257, 0.01982935518026352, -0.06984851509332657, 0.019345469772815704, 0.0012928505893796682, 0.017067931592464447, 0.00840265117585659, 0.03151537477970123, 0.010157047770917416, -0.009849810041487217, -0.031058823689818382, -0.025220055133104324, -0.04097476974129677, 0.039312899112701416, 0.01075145322829485, -0.00995309092104435, -0.026201393455266953, 0.010016090236604214, -0.03896358236670494, 0.004874632228165865, -0.005922115873545408, -0.013181704096496105, 0.003344545606523752, -0.007543001789599657, -0.011389300227165222, -0.05583282187581062, 0.02081293798983097, 0.02206282876431942, 0.022624190896749496, -0.019618142396211624, 0.03096853196620941, 0.019165076315402985, 0.08253414183855057, -0.03956140577793121, -0.013508206233382225, -0.013876855373382568, 0.03035881742835045, -0.008173906244337559, 0.020157478749752045, -0.05203544348478317, 0.047466691583395004, 0.1930461823940277, 0.013240848667919636, -0.02144399844110012, -0.002987728687003255, -0.01270232629030943, -0.015587616711854935, 0.00864479225128889, -0.015749020501971245, -0.004450488835573196, 0.011053227819502354, 0.003340568859130144, -0.026907432824373245, 0.004835940897464752, 0.01606321707367897, -0.026045482605695724, 0.024101635441184044, 0.02162826992571354, 0.006803442258387804, 0.006173067260533571, -0.027278928086161613, 0.019760895520448685, -0.0014379097847267985, 0.04091539978981018, 0.049661144614219666, -0.012367754243314266, -0.027911150828003883, -0.010487016290426254, -0.025313016027212143, 0.0016900275368243456, 0.0004085330292582512, 0.027496006339788437, 0.037060026079416275, -0.006088819354772568, -0.010857485234737396, -0.03933901712298393, 0.04130888730287552, -0.041127897799015045, -0.016458364203572273, 0.0014043099945411086, -0.0426088348031044, 0.023710062727332115, -0.0016049555270001292, -0.057063162326812744, -0.1324370950460434, -0.018909528851509094, 0.0011969475308433175, -0.041656896471977234, 0.03951010853052139, 0.017148811370134354, -0.008798116818070412, 0.0031747438479214907, 0.011725821532309055, -0.021661240607500076, -0.02009999193251133, -0.0508846752345562, 0.0431625060737133, 0.025741692632436752, 0.004060117993503809, -0.007289892993867397, -0.005200215615332127, -0.07866024971008301, -0.030742183327674866, -0.03822728246450424, 0.03231795132160187, -0.023154160007834435, 0.05411249399185181, -0.008752234280109406, 0.03833046928048134, -0.03589834272861481, 0.0156007194891572, -0.0010414407588541508, -0.004342255648225546, -0.0028150775469839573, -0.07023414224386215, -0.005508938804268837, -0.02352423407137394, -0.05609354376792908, 0.10205850005149841, -0.007501316722482443, 0.006160146091133356, 0.014482985250651836, 0.08389695733785629, -0.0015401048585772514, -0.03211053088307381, -0.001887875609099865, 0.0028236648067831993, 0.00944686308503151, 0.018062733113765717, -0.019968360662460327, -0.012665335088968277, -0.007471668068319559, 0.025087367743253708, -0.002871077274903655, -0.0205298513174057, 0.021915748715400696, -0.0003158684994559735, -0.015079128555953503, -0.04349739849567413, -0.012143747881054878, -0.013306454755365849, 0.003983418457210064, 0.03827216848731041, 0.026215245947241783, -0.029318898916244507, -0.007389922626316547, -0.033675070852041245, -0.008545386604964733, -0.04973826929926872, 0.0394742414355278, 0.051045358180999756, 0.0004085440596099943, 0.09854163229465485, -0.032085318118333817, 0.0009537497535347939, -0.05587015300989151, -0.004495767876505852, -0.014623443596065044, 0.05613941326737404, -0.021197767928242683, 0.038153741508722305, -0.02089642360806465, -0.016067519783973694, 0.0014610246289521456, 0.009537377394735813, -0.024630224332213402, 0.02267640456557274, -0.012636288069188595, -0.030765196308493614, 0.06277794390916824, 0.08103955537080765, -0.0031543360091745853, 0.029795173555612564, -0.02781517244875431, -0.04963485524058342, 0.03916467726230621, 0.02136102318763733, -0.0034116171300411224, 0.03217064216732979, -0.019279619678854942, 0.03912580385804176, -0.011688455939292908, -0.013236810453236103, -0.03819812834262848, -0.0036231321282684803, 0.005778050981462002, 0.06502266973257065, -0.02305692248046398, 0.0017011214513331652, -0.0042367372661828995, -0.00983559712767601, -0.03370986878871918, 0.00394868291914463, -0.050683390349149704, -0.014700854197144508, -0.025146471336483955, 0.037762805819511414, -0.04519367590546608, 0.015841614454984665, -0.006876761559396982, -0.00965709239244461, -0.04396868497133255, -0.024330055341124535, 0.029309671372175217, 0.013976993970572948, -0.031378716230392456, -0.006871491204947233, 0.049321506172418594, 0.013392609544098377, -0.02647840417921543, -0.019506346434354782, 0.0026987604796886444, 0.042804867029190063, -0.04778772592544556, -0.007100215181708336, 0.008476261980831623, 0.06114765629172325, 0.03651327267289162, -0.0036955273244529963, 0.007762038614600897, -0.055705726146698, 0.003432012628763914, -0.0016781643498688936, 0.04212942719459534, 0.00499084684997797, -0.043790120631456375, 0.004190302919596434, 0.01770063117146492, -0.028134357184171677, 0.06383739411830902, 0.007174243684858084, -0.011372983455657959]\"\n./train/goblet/n03443371_14193.JPEG,goblet,\"[-0.03259827196598053, 0.017707617953419685, -0.04040251299738884, -0.01009517814964056, 0.04134560376405716, 0.021403905004262924, 0.030408117920160294, 0.02083464153110981, -0.003724518232047558, -0.01397724635899067, 0.015475861728191376, -0.012842441909015179, 0.0020060688257217407, -0.031095288693904877, 0.024876607581973076, 0.018845850601792336, 0.018231108784675598, 0.003283645026385784, 0.024266207590699196, -0.016047930344939232, -0.04683177173137665, 0.01262848824262619, -0.028498033061623573, -0.0301204863935709, -0.004287088289856911, 0.06371008604764938, 0.014713444747030735, -0.00788845494389534, -0.013581478036940098, 0.01577870547771454, 0.008040628395974636, -0.0091042285785079, -0.029425110667943954, -0.0184919536113739, -0.04815684258937836, 0.004118477459996939, -0.01298669446259737, 0.00856439396739006, -0.034766558557748795, 0.17058740556240082, -0.0025173339527100325, -0.02128441259264946, -0.016351768746972084, -0.002389403758570552, 0.028546329587697983, -0.19460546970367432, 0.01537279412150383, -0.00020482394029386342, 0.0014814648311585188, 0.043241117149591446, -0.051623404026031494, 0.04782669246196747, 0.018885081633925438, -0.028047794476151466, -0.008268555626273155, 0.017556706443428993, -0.03749093413352966, -0.00430560065433383, 0.038689929991960526, 0.0265186820179224, -0.03578007221221924, -0.008523879572749138, -0.017433887347579002, 0.0498773455619812, 0.0011948066530749202, 0.08125325292348862, -0.03520955145359039, -0.06540901958942413, -0.021996892988681793, 0.008185787126421928, 0.005275876261293888, 0.007766261696815491, 0.01800387352705002, -0.04212740436196327, 0.013826238922774792, 0.005109382327646017, -0.02218620665371418, -0.012536458671092987, -0.013349959626793861, -0.03778264671564102, 0.056722916662693024, -0.01563372276723385, 0.010785399004817009, -0.034531570971012115, -0.0024485052563250065, 0.013516640290617943, -0.019900081679224968, 0.015526683069765568, 0.042066484689712524, -0.015508008189499378, 0.006595676764845848, 0.008519486524164677, -0.6768434047698975, -0.0536126047372818, -0.0010144055122509599, -0.03857312351465225, 0.0001941519440151751, 0.005132951308041811, 0.03306431323289871, 0.03608052805066109, 0.0008268126402981579, 0.007516952231526375, -0.02635974809527397, 0.04721784219145775, 0.042915038764476776, 0.02536703832447529, -0.05259435996413231, 0.001594972680322826, 0.01566140167415142, 0.019759073853492737, 0.03172513097524643, -0.03802214190363884, 0.013776198029518127, 0.030123375356197357, 0.02861182577908039, 0.03280066326260567, -0.04619525372982025, 0.039537619799375534, -0.008459473960101604, 0.007688520476222038, -0.005966565106064081, 0.026429275050759315, -0.00677592633292079, -0.022253062576055527, -0.03463480621576309, -0.029866885393857956, 0.000925800297409296, 0.0004686184402089566, 0.007384319789707661, -0.03024689108133316, 0.00013151601888239384, -0.05436868220567703, -0.0054945917800068855, 0.0854964479804039, -0.0017830748111009598, -0.00654169637709856, -0.07410072535276413, -0.049781762063503265, -0.03922073543071747, 0.012588760815560818, -0.011688241735100746, 0.026907790452241898, -0.0296977199614048, -0.013375560753047466, 0.011433948762714863, -0.006687183864414692, 0.012739798985421658, -0.018041227012872696, -0.0412522591650486, 0.02644713781774044, -0.020370861515402794, 0.002976591233164072, 0.1133793368935585, -0.007132634986191988, 0.013732408173382282, -0.04566950350999832, 0.013857988640666008, -0.023818910121917725, 0.010126554407179356, -0.03695286810398102, -0.03684217855334282, -0.024410288780927658, -0.035140205174684525, -0.03359927237033844, -0.03956378251314163, 0.008656774647533894, -0.029401512816548347, 0.011232824064791203, 0.00020408585260156542, -0.007218226790428162, -0.014751892536878586, 0.005030184984207153, -0.020287081599235535, -0.01626458764076233, -0.03640725836157799, 0.000624466803856194, -0.07973652333021164, -0.0006653297459706664, 0.0007497629849240184, -0.003584965132176876, 0.022265760228037834, 0.0049890317022800446, 0.007950405590236187, 0.02156738191843033, -0.018671445548534393, 0.008150891400873661, -8.025595161598176e-05, -0.0030882845167070627, -0.0077301631681621075, 0.0052983881905674934, -0.003803487168624997, -0.005368213169276714, 0.003997212741523981, 0.026566632091999054, 0.0302033182233572, -0.00562492199242115, 0.030412796884775162, 0.006720901001244783, -0.038954418152570724, -0.005980702582746744, 0.041351184248924255, 0.02122875675559044, -0.0007152630714699626, 0.051446374505758286, 0.009030724875628948, -0.009421044029295444, -0.0029465914703905582, 0.017506489530205727, 0.0032980216201394796, -0.023296911269426346, 0.01209238637238741, 0.0482993945479393, -0.01872379705309868, 0.006530987564474344, -0.025652730837464333, -0.00808445643633604, 0.008123544976115227, 0.018113799393177032, -0.04128642752766609, -0.002879079431295395, -0.01498420536518097, 0.10257560759782791, -0.030072450637817383, -0.027633579447865486, 0.03853213042020798, -0.029949693009257317, -0.02560427598655224, -0.05928421393036842, -0.0026866882108151913, 0.023810025304555893, 0.004808912053704262, 0.046098753809928894, -0.01053611095994711, -0.011979983188211918, -0.014247365295886993, 0.05495637655258179, -0.014375830069184303, -0.05937160924077034, -0.0012477494310587645, 0.0016543306410312653, -0.002802061615511775, -0.018572453409433365, -0.0031468383967876434, -0.004969228059053421, -0.07603875547647476, 0.001525061554275453, 0.015803908929228783, 0.034571707248687744, -0.019519522786140442, 0.020934036001563072, -0.031500257551670074, 0.061843059957027435, 0.0029580295085906982, -0.016696861013770103, -0.01925557665526867, -0.01637696661055088, -0.03635701909661293, -0.01864485815167427, -0.0494774766266346, 0.02714674547314644, -0.005480232648551464, -0.005290792789310217, -0.004003796726465225, 0.019040217623114586, 0.029855869710445404, -0.053164076060056686, 0.03312642499804497, 0.007811130024492741, 0.017555834725499153, -0.013295144774019718, -0.05186083912849426, 0.009632701054215431, 0.04562460258603096, 0.026323392987251282, 0.008321685716509819, -0.033996470272541046, -0.024037016555666924, 0.007985501550137997, -0.024211546406149864, -0.016698475927114487, 0.024111196398735046, 0.053498275578022, -0.03549109771847725, -0.026262231171131134, -0.004016045946627855, 0.0008906514849513769, 0.009685312397778034, -0.0327005572617054, 0.0023977363016456366, -0.028192996978759766, -0.02607874572277069, -0.0035132102202624083, 0.042558010667562485, 0.003965812735259533, 0.020978325977921486, 0.020943183451890945, -0.06074513494968414, 0.018241683021187782, -0.04020698368549347, 0.00740151759237051, -0.04109124094247818, -0.012876791879534721, 0.01807492785155773, 0.020961778238415718, -0.0005053688073530793, 0.010353920981287956, 0.026487328112125397, 0.003446590155363083, 0.02479102835059166, -0.010947141796350479, 0.0376078225672245, 0.0520353764295578, 0.08533088862895966, 0.0012686437694355845, 0.005629691295325756, -0.010248744860291481, 0.04363945126533508, -0.001068769139237702, 0.010025675408542156, -0.02008233033120632, 0.028376396745443344, 0.06807752698659897, -0.0023663172032684088, -0.01081946212798357, 0.017069794237613678, -0.02564449980854988, 0.021864552050828934, -0.03046729415655136, 0.0035470975562930107, 0.03919665887951851, 0.012311204336583614, -0.013418303802609444, -0.0503399521112442, 0.014533222652971745, -0.027209416031837463, -0.01183528546243906, -0.007002514321357012, -0.001469168346375227, -0.0006708798464387655, -0.0013392488472163677, -0.010176614858210087, -0.017097650095820427, -0.01819804310798645, 0.022202853113412857, -0.0006706070271320641, -0.021122435107827187, -0.00446728803217411, 0.00754411518573761, -0.0037143491208553314, 0.0013419903116300702, 0.004747470840811729, -0.002843253081664443, 0.01866925321519375, 0.002434291411191225, -0.0013222420820966363, -0.10618378221988678, -0.009325077757239342, 0.026603052392601967, -0.00936692114919424, -0.003699552034959197, -0.057269029319286346, 0.005742260720580816, 0.011681878939270973, -0.012692341580986977, -0.01631644181907177, -0.02939264476299286, 0.0171657782047987, 0.04676172137260437, 0.010828706435859203, 0.07457134872674942, -0.0064938729628920555, 0.0020725259091705084, -0.011751334182918072, 0.006176933646202087, 0.03960118442773819, -0.01836109533905983, 0.11819470673799515, -0.016781410202383995, -0.009328643791377544, 0.01964680850505829, -0.0485563650727272, -0.12295445799827576, -0.008395607583224773, -0.030095059424638748, 0.03566751256585121, 0.014072978869080544, 0.022707028314471245, 0.014639770612120628, -0.023123212158679962, 0.09800832718610764, 0.06216789036989212, -0.05225071683526039, 0.005623961798846722, -0.03420879319310188, -0.023482397198677063, -0.013099987991154194, -0.03977147117257118, 0.009873581118881702, 0.043269988149404526, 0.042848922312259674, 0.008323892951011658, 0.031791072338819504, 0.054819442331790924, 0.004883070942014456, -0.010858312249183655, -0.024924011901021004, -0.0037505023647099733, 0.00736016733571887, 0.03553372994065285, 0.011581635102629662, 0.037390418350696564, 0.02076784335076809, -0.015088403597474098, 0.011461273767054081, -0.0008581414585933089, -0.006647842470556498, -0.0424298457801342, -0.0340125598013401, -0.03981929272413254, 0.0173947811126709, -0.03027736209332943, 0.0013443902134895325, 0.03675442934036255, 0.016612347215414047, -0.03811481595039368, 0.01248998660594225, -0.016607290133833885, -0.005168558098375797, -0.10661214590072632, 0.015431859530508518, 0.03936091065406799, 0.05066080018877983, 0.12016253918409348, -0.002876094775274396, -0.028799496591091156, 0.004008290823549032, -0.020029885694384575, -0.008459992706775665, 0.023505782708525658, -0.005743537098169327, 0.011904614977538586, -0.01861068606376648, 0.02076832950115204, 0.003273645881563425, 0.017558349296450615, -0.02649979293346405, -0.02418540231883526, 0.012822776101529598, -0.004819426219910383, -0.005373488180339336, 0.01375398226082325, -0.0031034655403345823, 0.009261484257876873, -0.04240604117512703, -0.002476791152730584, -0.012493463233113289, -0.005773360375314951, -0.04866261035203934, -0.0046646250411868095, -0.023461179807782173, 0.006041280459612608, -0.02076795883476734, -0.012788232415914536, -0.032945066690444946, 0.026583204045891762, 0.03007674589753151, 0.03661172464489937, -0.014557735994458199, -0.025624334812164307, 0.029963143169879913, -0.025669988244771957, 0.020066555589437485, 0.01887013204395771, -0.07716269791126251, -0.005057983566075563, -0.012407233938574791, -0.023373836651444435, -0.011663362383842468, 0.018926097080111504, -0.04829561710357666, -0.00252967095002532, 0.025291893631219864, -0.006829508114606142, 0.014459551312029362, 0.005697435233741999, -0.05989452823996544, -0.03226964920759201, 0.02816798910498619, -0.009299702942371368, -0.021206505596637726, 0.0017088884487748146, 8.055804210016504e-05, 0.048757512122392654, -0.06281697750091553, -0.009464001283049583, -0.02015961892902851, 0.01619216427206993, 0.015304864384233952, -0.0020100304391235113, -0.020063966512680054, -0.0317540280520916, 0.018049264326691628, -0.019152939319610596, 0.001243677455931902, 0.04905794560909271, -0.03423754498362541, 0.0401340089738369, 0.0023489382583647966, -0.029098818078637123, 0.07735040783882141, 0.003519170917570591, -0.007991425693035126]\"\n./train/goblet/n03443371_9475.JPEG,goblet,\"[0.006918931379914284, 0.029441654682159424, -0.01752876304090023, -0.04685124382376671, 0.04855038970708847, -0.03475022315979004, 0.0178897213190794, 0.06141739338636398, 0.024837376549839973, -0.007426655385643244, 0.01498385053128004, 0.007218323182314634, 0.04683510586619377, -0.04573393240571022, 0.015690067782998085, 0.0016736758407205343, 0.10117226094007492, 0.018963102251291275, 0.0019344394095242023, -0.014311379753053188, -0.09576574712991714, -0.003156126942485571, -0.03462005406618118, 0.007098651956766844, -0.034618228673934937, 0.022395284846425056, 0.014781851321458817, 0.012744849547743797, -0.023274362087249756, -0.023974815383553505, 0.02342446893453598, 0.028045866638422012, -0.012222141958773136, -0.03496589511632919, -0.033069267868995667, -0.04026404395699501, -0.05569441616535187, -0.007373219821602106, -0.022803930565714836, 0.026907823979854584, -0.023995742201805115, 0.012152786366641521, 0.01892712526023388, 0.0023948061279952526, -0.010018475353717804, -0.058535389602184296, -0.006566817406564951, 0.015759583562612534, 0.006150498986244202, 0.0014897200744599104, 0.002306001726537943, 0.03759809583425522, 0.04009831324219704, -0.04366396367549896, 0.013944749720394611, -0.013696876354515553, -0.030791044235229492, -0.016094394028186798, -0.02288680709898472, 0.03989356383681297, -0.05132126808166504, -0.030449938029050827, -0.00046117909369058907, 0.039136335253715515, -0.022639170289039612, 0.014851975254714489, -0.02761996164917946, -0.04594285413622856, -0.04138517379760742, -0.010770450346171856, -0.012498673982918262, 0.028314610943198204, 0.008337619714438915, -0.022958388552069664, -0.010053317062556744, -0.010647407732903957, -0.03096793405711651, -0.051664452999830246, 0.005852377042174339, -0.01732644811272621, -0.007550243753939867, 0.029694048687815666, -0.019000893458724022, -0.018065841868519783, -0.0005680694594047964, -0.008024373091757298, -0.03485928475856781, -0.025640811771154404, 0.029680432751774788, -0.002988286316394806, 0.025170594453811646, -0.007135682739317417, -0.7339099645614624, -0.04820433259010315, -0.0006064388435333967, -0.02157687395811081, -0.024563411250710487, 0.005277686752378941, 0.08320900797843933, -0.027054373174905777, 0.02438339963555336, -0.04904433712363243, 0.012695877812802792, 0.020485706627368927, 0.08250603824853897, -0.03348354622721672, -0.005830856971442699, 0.008548981510102749, 0.015704914927482605, -0.026601985096931458, 0.039305608719587326, -0.021689945831894875, 0.008844971656799316, -0.0024740006774663925, -0.039131294935941696, 0.004054199904203415, -0.008313922211527824, 0.040942780673503876, 0.013304166495800018, 0.0009934866102412343, -0.032857879996299744, 0.011086879298090935, -0.0068415068089962006, -0.0034214004408568144, 0.0057695177383720875, -0.04650498554110527, -0.006741141434758902, 0.009685259312391281, -0.01310358103364706, 0.01406100019812584, -0.032595790922641754, -0.04958130046725273, 0.009071283042430878, 0.08999480307102203, 0.003213149029761553, -0.013745496049523354, 0.007930723018944263, -0.027438633143901825, -0.04211828485131264, -0.029159029945731163, -0.005752740427851677, 0.01409142930060625, -0.03687954694032669, -0.007641995325684547, -0.038784146308898926, 0.022172803059220314, -0.000722824945114553, -0.01500843744724989, -0.009401838295161724, -0.024131055921316147, 0.029851442202925682, 0.029529288411140442, 0.13539540767669678, -0.04245675727725029, -0.010055053047835827, -0.024048496037721634, -0.047782763838768005, 0.015597573481500149, 0.017222406342625618, -0.01188657432794571, 0.0022286539897322655, -0.026588523760437965, -0.013222670182585716, 0.0024079005233943462, 0.014262569136917591, 0.04169740527868271, -0.050311554223299026, 0.043021176010370255, -0.0031440805178135633, 0.0009455080726183951, -0.0028288522735238075, 0.0300336554646492, 0.02370399236679077, -0.025903191417455673, -0.06085547059774399, 0.0007548917201347649, -0.004923409782350063, -0.006582744885236025, 0.0638803169131279, -0.02363050915300846, 0.011632783338427544, 0.045672837644815445, -0.004125341307371855, 0.001584247569553554, -0.05826839432120323, -0.01725514978170395, -0.010155727155506611, -0.024898583069443703, -0.009545165114104748, 0.01103033684194088, 0.030566593632102013, -0.0415213406085968, 0.021941885352134705, 0.022428983822464943, 0.08087190240621567, 0.005685122217983007, 0.024814721196889877, 0.00650330213829875, 0.019688092172145844, -0.008631513454020023, 0.0016833373811095953, 0.02527555637061596, 0.006022312678396702, 0.04318024590611458, 0.006379269994795322, 0.029383709654211998, 0.010929341427981853, 0.008711854927241802, 0.006035331636667252, -0.007634029723703861, 0.04183468967676163, 0.06902437657117844, -0.006344314198940992, 0.0399690642952919, -0.017208106815814972, -0.015707895159721375, 0.03851638734340668, 0.04833681881427765, 0.020226970314979553, 0.002781729446724057, -0.005951995495706797, 0.05970318615436554, -0.00707407807931304, -0.01800859160721302, 0.008888809010386467, 0.02156035229563713, 0.010861538350582123, -0.009535136632621288, 0.0022929769475013018, -0.0017431736923754215, 0.008042601868510246, 0.02323250286281109, -0.02349284663796425, -0.01071044523268938, -0.029970891773700714, 0.042800404131412506, 0.04415612667798996, -0.02609538845717907, -0.006505547557026148, -0.003909055143594742, -0.018746063113212585, -0.04737027734518051, 0.023049430921673775, -0.04877501353621483, -0.02817312441766262, -0.01879841834306717, 0.000647855456918478, 0.031904060393571854, -0.017298351973295212, -0.0030725880060344934, -0.0016476379241794348, -0.005909985862672329, -0.0016789680812507868, -0.012180977500975132, 0.0012593918945640326, 0.022510575130581856, -0.009762316010892391, -0.013505842536687851, -0.03415249288082123, 0.02847202681005001, -0.027556294575333595, 1.759759834385477e-05, -0.03309129923582077, 0.007227911613881588, 0.025296051055192947, -0.02240067347884178, 0.014719764702022076, -0.028256148099899292, 0.035924721509218216, 0.022899992763996124, -0.01641426421701908, 0.027207691222429276, 0.01465604081749916, 0.006829302292317152, -0.022904738783836365, 0.008721310645341873, -0.03467148542404175, 0.041778650134801865, -0.025586461648344994, 0.003197882790118456, 0.005190941505134106, 0.03088628500699997, -0.05769767612218857, -0.0020366786047816277, -0.005132078658789396, 0.015108318999409676, -0.07674470543861389, 0.02274009957909584, 0.003501971485093236, 0.0003452090313658118, 0.011117960326373577, -0.009059335105121136, -0.012189936824142933, 0.024356385692954063, -0.011373069137334824, -0.006176490802317858, -0.033618681132793427, 0.025800485163927078, -0.02053145132958889, 0.0019415015121921897, -0.000963185157161206, -0.029270987957715988, -0.020962253212928772, -0.005828039720654488, -0.0015025907196104527, -0.03464639186859131, 0.00820536445826292, -0.018361346796154976, 0.022942842915654182, -0.027020270004868507, 0.012727412395179272, 0.0074127111583948135, 0.08982285112142563, -0.05239344760775566, -0.0034575050231069326, 0.0039175706915557384, 0.02490568906068802, 0.00852375477552414, -0.009680421091616154, -0.033656977117061615, 0.056705329567193985, 0.12252907454967499, 0.016247542575001717, -0.018495362251996994, 0.004370903130620718, -0.005527877248823643, 0.005683204159140587, 0.01408082153648138, -0.00984178762882948, 0.04793178290128708, -0.005858293734490871, -0.026013534516096115, -0.047697119414806366, -0.009812070988118649, 0.000720841926522553, -0.014442226849496365, 0.0036989895161241293, -0.024538559839129448, 0.033655814826488495, 0.004670568276196718, 0.0015936793060973287, 0.004511144943535328, -0.019104817882180214, 0.009840733371675014, 0.014142659492790699, -0.008496426977217197, 0.023999691009521484, 0.008003517985343933, -0.013732359744608402, 0.01675039902329445, -0.03829624503850937, 0.004343609791249037, 0.03817353397607803, 0.021104197949171066, 0.011076544411480427, -0.07055993378162384, 0.024058056995272636, -0.04930376261472702, -0.001148780807852745, -0.028002403676509857, -0.061859361827373505, 0.029170431196689606, 0.02824084274470806, -0.005728395655751228, -0.08610808849334717, -0.015012938529253006, 0.02699429541826248, 0.02883157506585121, 0.0002683551574591547, 0.017513412982225418, 0.01157260313630104, 0.021687693893909454, -0.013641220517456532, -0.032335951924324036, -0.026396330446004868, -0.0573970302939415, 0.08002828806638718, -0.015110628679394722, 0.018656274303793907, -0.0010861316695809364, -0.0029027373529970646, -0.06703632324934006, -0.014791288413107395, -0.04093176871538162, 0.0406956821680069, -0.019840508699417114, 0.018240606412291527, 0.0026358782779425383, 0.007611323148012161, 0.04076925665140152, 0.03632558137178421, -0.05297200754284859, -0.02562659978866577, -0.037784092128276825, -0.0027161177713423967, -0.0067523568868637085, 0.0017688812222331762, -0.03058803826570511, 0.016933687031269073, -0.012886742129921913, 0.02839583344757557, -0.0004609414318110794, 0.07054650783538818, -0.03168940916657448, -0.0054816375486552715, 0.042317360639572144, 0.010225638747215271, 0.009447077289223671, 0.029693739488720894, -0.018253639340400696, 0.015237188898026943, -0.04976959526538849, 0.0039631277322769165, 0.006380042992532253, 0.0005226886714808643, -0.012197053991258144, 0.0056444816291332245, -0.014795255847275257, -0.03651911020278931, 0.006005181930959225, -0.021779505535960197, 0.014481631107628345, 0.03449421003460884, 0.054478418081998825, -0.03656787797808647, 0.004509574268013239, -0.005085850600153208, -0.025435958057641983, -0.09082282334566116, 0.01223694533109665, 0.058979786932468414, -9.147146192844957e-05, -0.011252468451857567, -0.02551307901740074, -0.0156712643802166, -0.03202972933650017, 0.009006401523947716, -0.0071490113623440266, 0.0068269227631390095, 0.026371844112873077, 0.012874406762421131, 0.012801096774637699, -0.002995270537212491, 0.01261027343571186, 0.019794872030615807, -0.021372664719820023, 0.00017599287093617022, 0.011066592298448086, -0.04901909455657005, 0.05538948252797127, 0.07576993107795715, 0.0006976104341447353, 0.01932498998939991, -0.04156403988599777, -0.04976506531238556, 0.016074124723672867, 0.04969029128551483, -0.008036231622099876, 0.02167450822889805, -0.028081616386771202, 0.002045605331659317, -0.008993024006485939, -0.002889375202357769, 0.0025254501961171627, -0.030177896842360497, -0.004384235013276339, 0.06606025248765945, 0.00835577491670847, 0.027402391657233238, -0.0192959476262331, -0.038001105189323425, 0.02877211570739746, 0.023676306009292603, -0.049384523183107376, -0.005117001011967659, -0.0385805182158947, 0.01037723571062088, -0.05420751869678497, 0.0413484200835228, 0.007204663474112749, -0.015180268324911594, -0.04699584096670151, -0.03423336520791054, 0.009313410148024559, -0.020268945023417473, -0.039036381989717484, -0.020104659721255302, 0.041263073682785034, 0.02190856821835041, 0.02024426870048046, 0.006135211326181889, -0.024584416300058365, 0.011246496811509132, -0.03950362652540207, -0.003064998658373952, -0.00337029411457479, 0.045504771173000336, 0.003908995073288679, -0.01896652951836586, -0.0035441832151263952, -0.010868909768760204, 0.005723851267248392, -0.004048299044370651, 0.02049338072538376, 0.009767264127731323, 0.002333757234737277, 0.0035193029325455427, 0.010267716832458973, -0.017708659172058105, 0.026968345046043396, 0.03664872795343399, 0.00762273371219635]\"\n./train/goblet/n03443371_7918.JPEG,goblet,\"[-0.038609180599451065, 0.056419022381305695, 0.01496845856308937, 0.012909938581287861, 0.026058869436383247, 0.01156141608953476, -0.005816024728119373, 0.01570011116564274, 0.04172535613179207, -0.01198459230363369, 0.0002308467373950407, -0.022306043654680252, 0.012552003376185894, -0.02528570219874382, 0.03694736212491989, -0.0018610437400639057, 0.02681403048336506, 0.028877774253487587, 0.011397456750273705, 0.020654059946537018, -0.07727669924497604, 0.041496649384498596, 0.0021699643693864346, -0.04941689968109131, 0.025440780445933342, 0.04584157466888428, 0.010923714376986027, -0.036866188049316406, 0.037470389157533646, -0.01852947100996971, -0.01898357644677162, 0.017130684107542038, -0.020563386380672455, -0.04292325675487518, 0.001437405589967966, -0.011308282613754272, -0.006946082226932049, -0.012064863927662373, -0.006601699162274599, 0.08291735500097275, -0.042302798479795456, 0.01255758572369814, 0.010488674975931644, 0.0027511529624462128, -0.007193489465862513, -0.1888875812292099, 0.008857227861881256, 0.017531204968690872, 0.020109571516513824, 0.00047854805598035455, -0.030958160758018494, 0.001616375520825386, 0.006541392765939236, -0.012599946931004524, 0.03829580917954445, -0.040224164724349976, -0.07071288675069809, 0.019374528899788857, 0.002153279958292842, 0.036102283746004105, -0.05042930692434311, -0.02281740866601467, 0.02165352739393711, 0.004539842251688242, 0.015292258933186531, 0.01900831051170826, 0.03284737840294838, 0.03220171481370926, -0.049010276794433594, 0.03381170332431793, -0.0317351259291172, 0.0013243099674582481, -0.0013810409000143409, -0.003912079613655806, -0.020517239347100258, 0.020635806024074554, -0.06712322682142258, 0.020475560799241066, 0.027246519923210144, -0.03291764855384827, -0.005413197446614504, -0.02893870882689953, 0.006564901676028967, 0.01968112401664257, 0.013470066711306572, 0.0013236755039542913, -0.006796164903789759, -0.00458510871976614, 0.04122786223888397, -0.0006038801511749625, -0.02932620793581009, 0.018039638176560402, -0.6198961734771729, 0.014715454541146755, -0.010637580417096615, 0.02100718766450882, -0.004270259290933609, 0.020956315100193024, 0.06339749693870544, 0.1101880669593811, -0.006212256383150816, -0.04943561181426048, -0.0850403755903244, 0.027341263368725777, -0.03769558295607567, -0.06209046021103859, -0.051669176667928696, 0.015524644404649734, 0.04790443554520607, -0.02188653126358986, 0.012060063891112804, -0.013576222583651543, 0.027335692197084427, 0.006267134565860033, -0.0156488586217165, -0.017674097791314125, 0.008793462067842484, 0.038532011210918427, -0.02189631573855877, -0.014434613287448883, 0.014202007092535496, -0.04284414276480675, 0.020547306165099144, -0.007214083336293697, -0.007821392267942429, 0.0370200015604496, -0.04833187535405159, 0.04693598300218582, 0.01136916596442461, -0.0036361846141517162, 0.025501158088445663, -0.05406811460852623, 0.03249193727970123, 0.08194133639335632, 0.046918198466300964, -0.02110218070447445, -0.01879086159169674, 0.03202702850103378, 0.0016738666454330087, 0.05490201339125633, 0.002240352798253298, 0.026302775368094444, -0.0053512356244027615, 0.06305457651615143, -0.01252066995948553, -0.009389941580593586, -0.03974852338433266, -0.047027837485075, -0.032251302152872086, -0.00360672059468925, -0.0022440841421484947, 0.010047472082078457, 0.058821067214012146, -0.029516898095607758, 0.03435893729329109, -0.005564470309764147, -0.0007575892377644777, 0.04889214038848877, -0.05383596196770668, 0.0027092082891613245, -0.0136633375659585, -0.02421380952000618, 0.020394328981637955, -0.02575761079788208, 0.0010151612805202603, 0.028146423399448395, 0.041439227759838104, -0.01174347847700119, 0.0007358142756856978, -0.03747659549117088, -0.004819008521735668, 0.04042255878448486, -0.025473911315202713, -0.008571479469537735, 0.012264103628695011, 0.014466737397015095, 0.07881180942058563, -0.01988711580634117, -0.00763845257461071, 0.004007289186120033, 0.03678707778453827, -0.03150247037410736, 0.05826040729880333, -0.01449720747768879, -0.03415301442146301, 0.007728885859251022, -0.019845692440867424, 0.010280143469572067, -0.03001219965517521, -0.00539708836004138, 0.012087943963706493, 4.1549643356120214e-05, 0.06893990933895111, 0.02184533141553402, 0.05499016493558884, 0.023240558803081512, -0.020756768062710762, -0.002236840082332492, -0.038068704307079315, 0.017082057893276215, -0.0037514525465667248, -0.0025853714905679226, 0.02831161767244339, 0.005326415412127972, 0.03453630581498146, -0.018025971949100494, -0.005421932321041822, 0.014901776798069477, -0.014310902915894985, 0.005971335805952549, -0.028098955750465393, 0.06060619652271271, -0.047130946069955826, -0.04287928715348244, 0.0075881024822592735, -0.07382271438837051, 0.019807692617177963, 0.07984103262424469, 0.07197127491235733, 0.000650233356282115, 0.0015298058278858662, 0.014902351424098015, -0.016616806387901306, -0.004854575730860233, 0.024659011512994766, 0.009368211030960083, -0.012429200112819672, -0.00898392777889967, -0.03096579760313034, 0.0032054968178272247, 0.00872099120169878, 0.0052035776898264885, -0.026427363976836205, 0.04294085130095482, -0.023564742878079414, -0.0016028156969696283, 0.05065150186419487, -0.019167086109519005, -0.043547600507736206, 0.006276825908571482, 0.0026595157105475664, 0.004317507613450289, -0.004041296895593405, -0.013432699255645275, -0.06596385687589645, 0.036609064787626266, -0.012288842350244522, 0.017121458426117897, -0.046322986483573914, 0.03399280831217766, -0.011563429608941078, 0.012427842244505882, -0.031433459371328354, -0.03707262873649597, -0.026849864050745964, -0.051400795578956604, -0.030077902600169182, -0.010891233570873737, -0.03214425593614578, 0.02762182615697384, -0.013688708655536175, -0.030797617509961128, -0.026788901537656784, 0.005549667403101921, 0.03106882981956005, -0.03321722894906998, -0.010013028047978878, -0.013902861624956131, 0.03230247274041176, 0.0072776032611727715, 0.009657906368374825, 0.008752170018851757, 0.023640872910618782, 0.02819710597395897, 0.04544874653220177, 0.04617695510387421, -0.01830451563000679, -0.017765941098332405, -0.016614504158496857, -0.04595206677913666, 0.03421418368816376, 0.029659179970622063, 0.0048304093070328236, 0.0450725331902504, -0.017013393342494965, -0.005361126270145178, 0.01009234506636858, -0.022677108645439148, 0.003349443431943655, -0.06867238134145737, 0.026912063360214233, -0.020040150731801987, 0.014903077855706215, 0.00917087309062481, -0.006434210110455751, 0.02974000945687294, -0.021102385595440865, 0.025179678574204445, 0.0025253426283597946, 0.04655146598815918, -0.008568030782043934, -0.00415349705144763, 0.008520699106156826, 0.015332363545894623, 0.0073361750692129135, -0.019483430311083794, 0.05092897638678551, 0.08083993941545486, 0.03165961802005768, 0.016863420605659485, 0.011227092705667019, 0.0336153507232666, 0.08191310614347458, -0.010401136241853237, 0.0009460963192395866, -0.02972884103655815, 0.06746616214513779, 0.045778803527355194, 0.01763625629246235, -0.017706481739878654, 0.014498325064778328, 0.1702522188425064, -0.01727386564016342, -0.04099700599908829, 0.0236425269395113, 0.004163314122706652, 0.021413054317235947, -0.02650105208158493, -0.04089115560054779, -0.016856255009770393, 0.04122543707489967, -0.00016651730402372777, -0.042206693440675735, -0.019627518951892853, -0.04635240137577057, -0.002338727470487356, 0.03057417832314968, -0.0021194452419877052, 0.002314231591299176, 0.04127063229680061, 0.019159050658345222, -0.017172005027532578, -0.028450343757867813, -0.0015729230362921953, 0.02427557297050953, -0.01219040248543024, 0.0036751071456819773, -0.027977976948022842, 0.013649631291627884, 0.00042477899114601314, 0.05015479400753975, 0.002529275370761752, 0.005850520450621843, 0.031669192016124725, -0.03083023987710476, -0.00399965513497591, -0.050942882895469666, -0.06982851773500443, -0.03295983746647835, 0.0442059226334095, -0.08696222305297852, 0.01542575005441904, 0.01176852360367775, 0.030657244846224785, -0.0864015594124794, 0.014542222954332829, -0.01670989580452442, 0.05212681367993355, 0.04105575010180473, 0.03419870138168335, 0.0036551831290125847, 0.020413033664226532, -0.016762569546699524, 0.013573640957474709, 0.028419988229870796, -0.016075070947408676, 0.1120222881436348, -0.009041676297783852, -0.009755618870258331, -0.0085597587749362, -0.025784259662032127, -0.06466089934110641, -0.010249854065477848, 0.013471721671521664, 0.0248890183866024, -0.008355329744517803, -0.007491994649171829, -0.0074028922244906425, -0.030711613595485687, -0.07869423925876617, -0.012360064312815666, 0.03545433655381203, 0.01212631817907095, -0.032713279128074646, -0.0425926148891449, 0.016527174040675163, -0.014952514320611954, -0.05115979164838791, 0.06825530529022217, 0.010864517651498318, 0.016510363668203354, -0.03362860158085823, 0.1039583757519722, -0.012502335011959076, -0.035776253789663315, 0.010357500053942204, 0.016582811251282692, 0.0024085366167128086, -0.04570414870977402, -0.044991347938776016, -0.031087353825569153, 0.04271797090768814, -0.02090076357126236, -0.03909660875797272, -0.046187277883291245, 0.002499347785487771, -0.030712973326444626, -0.041914649307727814, 0.019224664196372032, 0.013683303259313107, -0.014231556095182896, -0.022730423137545586, 0.019762936979532242, 0.0790340006351471, -0.032099589705467224, -0.02278434857726097, -0.0034545620437711477, -0.012530719861388206, -0.06493090093135834, 0.04233884811401367, 0.004353267140686512, 0.03783436492085457, 0.14700299501419067, -0.0781678706407547, 0.010875394567847252, 0.010376621037721634, 0.02771046571433544, -0.0402582623064518, 0.04918023198843002, -0.03003499284386635, -0.019232746213674545, 0.0017575749661773443, 0.019440749660134315, 0.007208380848169327, 0.01380722876638174, 0.0009640012285672128, -0.0036598173901438713, 0.00222307862713933, -0.034636981785297394, 0.016091005876660347, -0.011167322285473347, -0.022774990648031235, -0.019455432891845703, -0.030370118096470833, 0.005049252416938543, 0.014347592368721962, 0.04219277203083038, -0.039944496005773544, -0.024341655895113945, -0.007543455809354782, 0.03372199088335037, 0.003411842742934823, 0.027904890477657318, -0.01536228135228157, 0.02496332861483097, -0.024595919996500015, 0.011895743198692799, 0.0034661460667848587, -0.033085085451602936, -0.012090051546692848, 0.01228837389498949, 0.034495435655117035, -0.0034771671053022146, -0.04486094415187836, -0.03023269772529602, -0.043778471648693085, 0.026129020377993584, -0.017625389620661736, 0.03145695477724075, 0.010460259392857552, 0.038303811103105545, 0.00820110272616148, -0.02587944082915783, 0.04095165804028511, -0.020979981869459152, -0.03522453457117081, -0.01029573380947113, 0.047254178673028946, 0.047745201736688614, 0.006672396324574947, -0.0414205938577652, -0.01236194558441639, 0.04260735586285591, -0.07458686828613281, -0.011203574016690254, 0.001673207152634859, 0.033267781138420105, 0.05150097236037254, -0.019038954749703407, -0.006664011627435684, 0.011275190860033035, 0.001120575936511159, 0.02919001318514347, 0.03354806452989578, 0.03754347190260887, -0.048952989280223846, 0.054853640496730804, -0.012274923734366894, -0.029457878321409225, 0.07257138192653656, -0.019818171858787537, -0.00028284176369197667]\"\n./train/knee_pad/n03623198_9535.JPEG,knee_pad,\"[0.006466824561357498, 0.04400472715497017, 0.009573608636856079, -0.047293782234191895, 0.07289715111255646, -0.026150427758693695, -0.004637961275875568, 0.04900703579187393, 0.0001217102981172502, -0.029360616579651833, 0.0019046824891120195, 0.027078520506620407, 0.06104636937379837, 0.016497928649187088, -0.006985378451645374, -0.033144913613796234, 0.13010726869106293, 0.03791212663054466, 0.012712035328149796, -0.008114607073366642, -0.03361664339900017, 0.014042750932276249, -0.020842179656028748, -0.006692740600556135, -0.051393844187259674, 0.012538271956145763, 0.037970270961523056, -0.01859433762729168, -0.01346617005765438, -0.015138568356633186, 0.021674269810318947, 0.014702018350362778, -0.02337748184800148, 0.012039832770824432, -0.0645899847149849, -0.027555372565984726, -0.012699038721621037, 0.007801620289683342, -0.027185771614313126, 0.0020565581507980824, -0.01939145289361477, -0.013854109682142735, 0.019615763798356056, -0.004307736176997423, 0.019101638346910477, -0.04178435355424881, -0.0014269704697653651, -0.0017359066987410188, 0.019312134012579918, -0.051984746009111404, 0.054469019174575806, 0.0671834871172905, 0.007353825028985739, -0.013898966833949089, 0.01887618936598301, 0.006567249074578285, -0.025662768632173538, 0.03360678628087044, 0.030500054359436035, -0.04278961941599846, 0.058560214936733246, 0.005078699439764023, 0.03555558994412422, -0.014058123342692852, -0.013847747817635536, -0.01009081955999136, -0.0016623459523543715, 0.03084002062678337, 0.018877863883972168, -0.03597664833068848, -0.016369428485631943, -0.02246151678264141, 0.03936561569571495, -0.01656326651573181, -0.008207306265830994, -0.0020277760922908783, -0.024059539660811424, -0.03516794368624687, -0.01218012161552906, -0.02592969499528408, 0.005850037559866905, -0.05292217805981636, 0.0009519317536614835, -0.044431786984205246, 0.049281589686870575, 0.01673125848174095, 0.022943906486034393, -0.03316865116357803, -0.06911185383796692, 0.012674384750425816, -0.01985105872154236, -0.02712509222328663, -0.6984902620315552, 0.030426369979977608, 0.015150538645684719, -0.004556579980999231, -0.0004788349906448275, 0.02799321711063385, -0.01780642755329609, 0.014964902773499489, 0.009503228589892387, -0.02871314249932766, 0.012586099095642567, 0.0016132188029587269, 0.03637613356113434, -0.011421357281506062, -0.16746002435684204, 0.006823510397225618, -0.0035184891894459724, -0.032393261790275574, 0.02670959010720253, -0.010585957206785679, -0.009321589954197407, -0.029059790074825287, -0.0045162891037762165, 0.005406274925917387, 0.018342427909374237, -0.02282951958477497, 0.014205175451934338, -0.0070312065072357655, -0.005511418450623751, -0.0161990225315094, 0.019454555585980415, 0.02060621976852417, 0.004043548833578825, 0.020816097036004066, -0.007786175236105919, 0.0031442642211914062, 0.005890835542231798, -0.009181639179587364, 0.024162890389561653, -0.03846520557999611, -0.027988208457827568, 0.09081414341926575, -0.015736589208245277, 0.012912554666399956, 0.0036112419329583645, -0.029585538432002068, -0.01788344979286194, -0.006766922306269407, 0.035871461033821106, 0.007549104280769825, -0.020162289962172508, -0.023659801110625267, -0.05558342486619949, 0.020047800615429878, -0.009549159556627274, -0.026299485936760902, 0.00011716157314367592, -0.061604712158441544, 0.018933197483420372, -0.047895364463329315, 0.03200400620698929, -0.0371243841946125, -0.01987386681139469, 0.0005121536669321358, 0.005921907722949982, 0.015018426813185215, -0.02775007300078869, -0.005140002816915512, 0.005419366527348757, -0.00811490323394537, 0.016186045482754707, 0.02716102823615074, 0.030022146180272102, -0.021901791915297508, -0.006690189242362976, -0.030093319714069366, 0.03132215142250061, -0.0030671372078359127, -0.00040500584873370826, -0.01867138408124447, 0.03352857381105423, -0.020026421174407005, 0.0038478716742247343, -0.03051173686981201, 0.024587765336036682, 0.04073350504040718, 0.015320667065680027, -0.03012041002511978, 0.051716115325689316, -0.009221792221069336, 0.05383417755365372, -0.008649460971355438, -0.034441541880369186, -0.011054106056690216, 0.04685841128230095, -0.030667336657643318, -0.03332249075174332, -0.0037245999556034803, 0.0007131331949494779, -0.015450571663677692, -0.008801274001598358, -0.00047029784764163196, 0.04034901410341263, 0.003551928559318185, -0.02128426730632782, -0.022425038740038872, -0.05517592653632164, 0.033737119287252426, 0.019924921914935112, 0.0033494033850729465, -0.011993946507573128, 0.043963413685560226, 0.01398820523172617, 0.035283301025629044, -0.012725042179226875, 0.009940766729414463, -0.0022729947231709957, 0.006470391992479563, 0.013709049671888351, 0.022041914984583855, 0.04274619743227959, 0.01213260367512703, 0.001969328848645091, 0.007384716533124447, 0.004413464572280645, 0.005171908065676689, 0.04845082387328148, -0.02734341472387314, 0.0439375601708889, -0.07358179241418839, -0.013941175304353237, 0.041226256638765335, 0.0157703198492527, -0.005145508795976639, -0.029439754784107208, -0.005796329118311405, 0.017913421615958214, 0.008866379968822002, 0.022685201838612556, 0.02945513091981411, -0.0016903874929994345, 0.039868153631687164, 0.026700610294938087, 0.011853267438709736, 0.018014371395111084, -0.010021121241152287, -0.03686092793941498, -0.014328369870781898, 0.03702600300312042, 0.012772426009178162, 0.022737380117177963, 0.012122418731451035, 0.025059159845113754, 0.026329241693019867, 0.005710398778319359, 0.014990022405982018, 0.0023293953854590654, 0.019979586824774742, 0.005745109636336565, -0.003642086172476411, 0.007413760758936405, -0.020892661064863205, 0.010526768863201141, 0.024726325646042824, 0.00873375590890646, -0.007245634216815233, -0.024337656795978546, 0.013508985750377178, 0.02243594452738762, -0.0023291732650250196, 0.006413885857909918, -0.04303522780537605, 0.029379602521657944, 0.027595797553658485, 0.006591833662241697, -0.012427500449120998, 0.01929113082587719, -0.017939867451786995, -0.035194892436265945, -0.0019842784386128187, -0.0048109847120940685, 0.010852472856640816, 0.023908182978630066, -0.03763105720281601, 0.01853281445801258, 0.001458752085454762, -0.043613165616989136, 0.021344270557165146, 0.0009695661719888449, 0.04332311823964119, -0.0455746054649353, -0.051625560969114304, -0.007252574432641268, -0.0009798657847568393, 0.16661114990711212, 0.012929324060678482, -0.005849534645676613, -0.040234971791505814, 0.03429432213306427, 0.002750223269686103, -0.0043647573329508305, 0.025422751903533936, -0.032508671283721924, 0.03266990929841995, -0.014452820643782616, -0.015046264976263046, 0.02419891208410263, -0.019872069358825684, 0.0034128136467188597, -0.02324303612112999, -0.011903764680027962, -0.0018801484256982803, -0.047561973333358765, -0.07902159541845322, 0.0338982418179512, -0.005034530069679022, -0.008189058862626553, 0.01326590683311224, -0.003977241460233927, -0.021897559985518456, 0.09077587723731995, 0.018099961802363396, 0.0033682198263704777, -0.029636118561029434, 0.014723741449415684, -0.020115064457058907, -0.022796357050538063, -0.05037892982363701, 0.04262496158480644, 0.17162807285785675, -0.0029743339400738478, -0.023864800110459328, 0.0058697243221104145, -0.010198220610618591, 0.0067998263984918594, 0.0526813268661499, 0.0007071734289638698, 0.028529206290841103, 0.0014835456386208534, 0.031435277312994, 0.008002289570868015, -0.01127990335226059, -0.016119707375764847, -0.02151276357471943, -0.04226638004183769, 0.020610269159078598, -0.01038274448364973, -0.044657617807388306, -0.006707182619720697, 0.01621849089860916, -0.014857239089906216, -0.003042628290131688, 0.010361635126173496, 0.045477285981178284, 0.041247762739658356, 0.002535824663937092, 0.016109135001897812, -0.027031689882278442, 0.030769670382142067, 0.0046736397780478, 0.05039483308792114, 0.005918261129409075, 0.0714525580406189, -0.0490439236164093, -0.037166792899370193, 0.0296790674328804, 0.07019680738449097, 0.01241354364901781, 0.0707380399107933, -0.002945509972050786, -0.044215552508831024, -0.04101330414414406, -0.08327756822109222, 0.002142254961654544, 0.024657566100358963, -0.009498583152890205, -0.01251551229506731, -0.011907611042261124, -0.019347988069057465, 0.00822782889008522, 0.0015323868719860911, 0.043439410626888275, 0.0051640234887599945, -0.01951400376856327, 0.0028489017859101295, -0.0008615980623289943, -0.03223831206560135, 0.007316067349165678, 0.040159210562705994, -0.031217608600854874, -0.000266123388428241, 0.00021858830587007105, 0.020132141187787056, 0.008048749528825283, 0.011350257322192192, 0.021644260734319687, 0.024577055126428604, -0.053694721311330795, -0.0978977233171463, -0.049430858343839645, -0.022014601156115532, -0.03571194037795067, -0.030792009085416794, 0.025476429611444473, 0.00816761702299118, -0.02533048763871193, -0.008014368824660778, -0.01388829667121172, 0.00021657974866684526, 0.031135840341448784, 0.08667450398206711, 0.001160473213531077, 0.029097840189933777, -0.04702091962099075, 0.000561871740501374, 0.02809015102684498, 0.002499242313206196, -0.018331635743379593, 0.033087246119976044, 0.007082303054630756, 0.010312470607459545, 0.07547380030155182, -0.03480900079011917, 0.013594038784503937, -0.01250292919576168, 0.0050179981626570225, -0.0937836542725563, -0.056616611778736115, 0.00020272440451662987, 0.0052647837437689304, 0.002754698973149061, -0.005455445498228073, 0.01839245855808258, 0.03453569486737251, -0.005348429083824158, -0.034419067203998566, -0.10003790259361267, -0.007746282033622265, 0.025980453938245773, -0.010164952836930752, 0.0154604846611619, -0.03916453570127487, -0.017316307872533798, -0.015747245401144028, 0.00021510296210180968, 0.0064186048693954945, 0.02054779790341854, -0.01736713945865631, -0.012140371836721897, 0.045288946479558945, 0.027347713708877563, 0.02071005292236805, -0.027422405779361725, 0.027695395052433014, 0.027976585552096367, 0.00857736449688673, 0.004145887680351734, 0.004194710403680801, -0.004617678001523018, 0.011201675981283188, -0.0008426818531006575, -0.04727037996053696, -0.028307026252150536, 0.027947572991251945, -0.0019344326574355364, 0.014482918195426464, 0.00026733471895568073, -0.02603091299533844, 0.013192807324230671, 0.02900564856827259, -0.0024529495276510715, 0.021042821928858757, 0.04554808512330055, 0.02547059953212738, 0.021065566688776016, -0.0042849695309996605, -0.016202889382839203, -0.018454011529684067, 0.011373003013432026, 0.011575235053896904, 0.05693244934082031, -0.044570475816726685, 0.01943575218319893, 0.006085551343858242, -0.009424279443919659, 0.0200678501278162, -0.020409535616636276, -0.02415689080953598, -0.0373997762799263, -0.02619588002562523, 0.008136026561260223, -0.02839510515332222, 0.03006657212972641, 0.018902817741036415, 0.008414615876972675, 0.016284115612506866, 0.0024189066607505083, -0.014710663817822933, -0.029650215059518814, -0.0222600270062685, 0.02790522202849388, -0.003268368309363723, -0.0204617902636528, -0.021620823070406914, -0.010084290988743305, -0.05182366073131561, -0.0020812428556382656, -0.0021640751510858536, 0.03415057063102722, 0.0002661696926224977, -0.015934722498059273, -0.0014123532455414534, 0.008533275686204433, -0.03585905581712723, -0.010476323775947094, -0.0016209838213399053, -0.00479645561426878, 0.09359264373779297, 0.015102505683898926, 0.001574956113472581]\"\n./train/knee_pad/n03623198_4447.JPEG,knee_pad,\"[-0.02464980259537697, -0.0031989342533051968, -0.008050726726651192, 0.009623080492019653, 0.03501517325639725, -0.03535924479365349, -0.003053216030821204, -0.0133361229673028, 0.056066304445266724, 0.0198703370988369, 0.032325249165296555, 0.024504711851477623, 0.06443525850772858, 0.017245255410671234, -0.047971971333026886, -0.026915395632386208, 0.07244671881198883, 0.006005171220749617, 0.0019552106969058514, 0.021384600549936295, -0.08761771768331528, 0.015574968419969082, -0.006080497521907091, -0.031016308814287186, -0.002128190128132701, 0.015767402946949005, 0.018609995022416115, -0.03423122689127922, 0.00345241860486567, 0.012976780533790588, -0.014645244926214218, -0.023290708661079407, 0.0019986643455922604, -0.03314288333058357, -0.062395233660936356, -0.026148460805416107, 0.0050703841261565685, -0.0074093458242714405, -0.03145139291882515, 0.014365795068442822, -0.009241163730621338, -0.025075919926166534, 0.025438467040657997, -0.009640416130423546, 0.014755665324628353, -0.13427621126174927, 0.017079591751098633, 0.024546543136239052, 0.039588578045368195, -0.021946143358945847, 0.05079222097992897, 0.034253694117069244, 0.021643223240971565, -0.020566804334521294, -0.0035712970420718193, -0.00948723591864109, -0.026906205341219902, -0.025300558656454086, -0.017184561118483543, -0.02966865710914135, 0.02334950491786003, 0.007185937371104956, 0.03221319988369942, -0.005163155030459166, -0.010696912184357643, -0.04590163007378578, 0.06140388920903206, 0.009853504598140717, -0.034625496715307236, -0.003970974124968052, -0.019057199358940125, -0.005785295274108648, -0.0007336369017139077, -0.008436515927314758, 0.012538355775177479, 0.022742046043276787, -0.018079863861203194, -0.015338312834501266, 0.004693511873483658, 0.006391759961843491, 0.013288801535964012, -0.018737202510237694, -0.018972164019942284, -0.053769007325172424, 0.029125504195690155, 0.008002487011253834, 0.05030134692788124, 0.02664649672806263, -0.06469649821519852, -0.00014259903400670737, -0.0033195274882018566, 0.00697353295981884, -0.6827329397201538, 0.06519073247909546, 0.049035146832466125, 0.002428311388939619, -0.010409997776150703, -0.003135453211143613, -0.03751835599541664, 0.060812849551439285, -0.021422727033495903, -0.049616165459156036, 0.00532244797796011, -0.03644467517733574, 0.022532140836119652, 0.005282638594508171, -0.1623820960521698, -0.0155281787738204, 0.01261983159929514, -0.010553252883255482, -0.02223879098892212, -0.043769437819719315, 0.0019380744779482484, -0.015200523659586906, -0.01639857329428196, -0.006902710068970919, 0.0663810670375824, 0.002187869744375348, -0.004031572490930557, -0.017462417483329773, -0.020337138324975967, 0.006738252006471157, 0.0038709300570189953, 0.010910297743976116, -0.0035166593734174967, 0.05736411735415459, -0.0176988635212183, 0.028645606711506844, -0.004093576688319445, 0.021497370675206184, 0.0371924452483654, 0.021765029057860374, 0.002201191382482648, 0.08318755030632019, -0.009304681792855263, 0.004247634671628475, 0.022046754136681557, -0.04902719706296921, 0.0018601261544972658, 0.0017619122518226504, 0.023869996890425682, -0.014639372006058693, -0.0015002097934484482, -0.01178612932562828, 0.023085545748472214, 0.011824582703411579, 0.0027681076899170876, -0.06908431649208069, -0.03480049595236778, -0.0007908170809969306, -0.0041220709681510925, -0.0036844885908067226, 0.05413578078150749, -0.023952508345246315, -0.03206286206841469, 0.004955900367349386, 0.029038961976766586, 0.004701799713075161, 0.028980063274502754, -0.016816573217511177, 0.005282440222799778, -0.010978896170854568, 0.03547690063714981, -0.01340736635029316, 0.001295564346946776, 0.0009120191098190844, -0.02653479017317295, -0.010351702570915222, 0.06893056631088257, -0.004290188197046518, -2.778896259769681e-06, -0.04224943369626999, 0.04043448716402054, -0.03316790238022804, 0.005794083699584007, -0.017304612323641777, 0.07742778211832047, 0.027840880677103996, -0.007968449033796787, 0.006644934415817261, 0.04163624718785286, -0.01811520755290985, 0.00441526435315609, -0.01962176337838173, -0.02750932052731514, -0.034303441643714905, 0.007323421537876129, -0.021215064451098442, -0.02463206648826599, -0.017880674451589584, -0.002660802099853754, 0.031067602336406708, -0.033135656267404556, -0.005301843397319317, 0.04212029278278351, 0.01642444171011448, -0.02461829036474228, 0.01465535443276167, -0.07344183325767517, 0.017633289098739624, 0.02731926180422306, -0.012790982611477375, 0.026629704982042313, 0.025074008852243423, 0.011512973345816135, -0.023391209542751312, -0.029530340805649757, -0.014636395499110222, -0.0034716250374913216, -0.008092803880572319, -0.03282700851559639, -0.010502305813133717, 0.002016301965340972, -0.0115777887403965, -0.02562408521771431, 0.016670672222971916, -0.05652659758925438, -0.011968723498284817, 0.03696422651410103, -0.02285671979188919, 0.029075847938656807, -0.06492675840854645, -0.017060738056898117, 0.04486113414168358, 0.03166802227497101, 0.0567021481692791, -0.0052253371104598045, -0.02718767151236534, -0.01045480277389288, -0.0009610670385882258, 0.0027863015420734882, 0.011647436767816544, -0.03482788801193237, 0.06939634680747986, -0.018194543197751045, 0.054790008813142776, 0.013870649971067905, -0.015854699537158012, -0.023340148851275444, -0.01801106333732605, 0.0033217845484614372, -0.016113843768835068, 0.001907557132653892, 0.004304076079279184, 0.02735038474202156, -0.01388383936136961, -0.03301595151424408, 0.019132375717163086, -0.008578998036682606, 0.02693689800798893, 0.003236593445762992, -0.011594059877097607, -0.01307029277086258, -0.009597135707736015, 0.009997901506721973, 0.006422822829335928, 0.030214253813028336, -0.007181190885603428, 0.03327192738652229, -0.03461401164531708, 0.0625871792435646, -0.003114057704806328, -0.019005032256245613, -0.06207422539591789, -0.03024679236114025, 0.01689164526760578, -0.011380990967154503, -0.03152668476104736, 0.016798503696918488, -0.025295337662100792, 0.011701163835823536, -0.0184736680239439, 0.0033577890135347843, -0.019606387242674828, -0.04306615889072418, -0.00616249768063426, 0.020434770733118057, -0.005707997828722, -0.0020909765735268593, -0.0002738333714660257, -0.0071524945087730885, -0.0031129135750234127, -0.031220262870192528, -0.02725313976407051, 0.00699971616268158, -0.02026035450398922, 0.1260240375995636, -0.03680115193128586, -0.040011800825595856, -0.031084178015589714, 0.03816501423716545, 0.019161462783813477, -0.04355623573064804, 0.016563186421990395, 0.02653653174638748, 0.013127148151397705, 0.0015974221751093864, -0.019163459539413452, 0.001921480754390359, -0.01214019488543272, -0.01466003991663456, 0.002597428159788251, 0.002077316166833043, 0.049598824232816696, -0.027607860043644905, -0.0364389605820179, 0.038346465677022934, 0.030985353514552116, -0.011373728513717651, 0.025968197733163834, -0.03496035560965538, 0.0028152388986200094, 0.08318886905908585, -0.00906636007130146, -0.00321959494613111, 0.006143130827695131, 0.013370371423661709, 0.026896974071860313, 0.014335553161799908, -0.07380785793066025, 0.0030245063826441765, 0.11046755313873291, -0.006421413738280535, -0.02912658266723156, 0.0005918634124100208, 0.004675555974245071, 0.014652418904006481, 0.017587674781680107, -0.02451646327972412, 0.019906949251890182, 0.02172100357711315, 0.012605822645127773, 0.03732241317629814, -0.019823160022497177, -0.0065734367817640305, -0.018360279500484467, -0.004536747932434082, 0.018351605162024498, -0.008040307089686394, -0.02108173631131649, 0.05866360291838646, 0.04979587718844414, -0.011957169510424137, -0.01242033950984478, -0.0470360703766346, 0.02836582250893116, 0.021073587238788605, 0.018161073327064514, -0.008811972104012966, -0.003525943262502551, 0.06693264096975327, -0.006745841819792986, 0.018583254888653755, 0.003556819399818778, 0.016309279948472977, -0.03957125544548035, -0.06798325479030609, 0.01377848070114851, 0.0015089139342308044, -0.023114779964089394, 0.04939631372690201, -0.020365335047245026, 0.02491908334195614, -0.06388196349143982, -0.07905925065279007, -0.0010844995267689228, 0.007775716949254274, 0.03931710124015808, 0.0043797567486763, 0.021914202719926834, -0.022817330434918404, 0.036692872643470764, -0.03454425185918808, 0.02426476590335369, -0.016726937144994736, 0.0028630199376493692, 0.04567570611834526, 0.023891594260931015, 0.003880973206833005, 0.017802175134420395, 0.00961909070611, -0.02489461563527584, -0.02164364792406559, 0.017495766282081604, 0.0019267161842435598, 0.025345884263515472, -0.041247494518756866, 0.011531497351825237, 0.00024709320859983563, -0.011439618654549122, -0.08294161409139633, -0.0012698324862867594, 0.025933198630809784, -0.029929982498288155, -0.020202815532684326, 0.020481789484620094, -0.0003938851004932076, -0.07351072877645493, 0.026226576417684555, 0.0030110974330455065, -0.0038239837158471346, -0.028063910081982613, 0.05265207961201668, -0.03861892223358154, 0.010277210734784603, -0.0032790182158350945, -0.02891567535698414, -0.012083538807928562, 0.02248579077422619, -0.01929989829659462, -0.015258069150149822, -0.0074492208659648895, -0.02601337991654873, 0.015773415565490723, -0.026247495785355568, 0.021390482783317566, -0.008553183637559414, -0.014583361335098743, -0.051872387528419495, -0.021097233518958092, -0.028619565069675446, -0.008841629140079021, -0.018624451011419296, 0.00934747327119112, 0.024366728961467743, -0.02552551031112671, 0.021177297458052635, -0.05434994772076607, -0.17793148756027222, 0.005958836060017347, -0.009512510150671005, -0.036624226719141006, 0.04200039431452751, -0.01820824109017849, -0.004401952028274536, 0.03796270862221718, -0.009423908777534962, -0.012907380238175392, 0.01848664879798889, -0.008920876309275627, -0.012585903517901897, 0.03035263903439045, 0.004930543247610331, 0.0034497363958507776, 0.040016159415245056, -0.01018137950450182, 0.032959986478090286, 0.03583944961428642, 0.0007230752962641418, 0.03999955579638481, -0.03348036855459213, -0.029768748208880424, 0.01361115649342537, -0.0745411068201065, -0.03836787864565849, 0.0003076946013607085, -0.033395301550626755, 0.004181696102023125, 0.026363974437117577, -0.002428939566016197, 0.05955871194601059, 0.04185295104980469, 0.02847788669168949, 0.009280018508434296, 0.047971442341804504, -0.013576668687164783, -0.018927229568362236, -0.009927288629114628, -0.009689133614301682, -0.027564456686377525, -0.0024785541463643312, 0.02391125075519085, 0.033299002796411514, -0.008126828819513321, 0.04977361112833023, 0.001331094652414322, -0.02309102937579155, 0.0062622749246656895, 0.01863066665828228, -0.019994724541902542, 0.024115892127156258, 0.06343282014131546, -0.031636763364076614, 0.001809004694223404, -0.004830148071050644, 0.03571571409702301, -0.001980372704565525, 0.030063854530453682, 0.012980354018509388, -0.01688779704272747, -0.015090969391167164, 0.03671913966536522, 0.0009153412538580596, -0.0257882010191679, 0.005404678173363209, -0.016475137323141098, 0.006285256240516901, -0.04085385426878929, 0.007641238160431385, -0.015113789588212967, 0.015441141091287136, 0.014647671021521091, -0.05401241034269333, -0.007262759376317263, 0.02122085727751255, 0.0010663443244993687, -0.0168346855789423, -0.006874393671751022, -0.00863008014857769, 0.15683422982692719, -0.0339503213763237, 0.015843555331230164]\"\n./train/knee_pad/n03623198_14123.JPEG,knee_pad,\"[0.026738714426755905, 0.035053059458732605, -0.00133652170188725, -0.010319078341126442, -0.004202430136501789, 0.03351037949323654, 0.006546469405293465, 0.015181081369519234, 0.045050136744976044, 0.017597589641809464, 0.03479982540011406, -0.021446384489536285, 0.07373389601707458, 0.006032632663846016, -0.010475297458469868, -0.02345922403037548, 0.00442547770217061, 0.010090798139572144, 0.010224874131381512, -0.02928418107330799, -0.050356313586235046, -0.009856768883764744, -0.010715986602008343, 0.012492391280829906, -0.008688123896718025, 0.013557546772062778, 0.01604975014925003, 0.01127732265740633, 0.03251085430383682, -0.0015748479636386037, -0.017260242253541946, 0.040346018970012665, -0.0011287527158856392, -0.00877274852246046, -0.026646049693226814, 0.006916712503880262, -0.023047644644975662, 0.015078093856573105, -0.006006171461194754, -0.07603093981742859, -0.040401846170425415, -0.025510214269161224, -0.06375270336866379, 0.016887081786990166, 0.018954182043671608, -0.0405120812356472, 0.001681376132182777, 0.05003051832318306, -0.03526388853788376, -0.001296787871979177, 0.07100841403007507, -0.03816337138414383, 0.01970095746219158, -0.001923775183968246, -0.0010850612306967378, 0.028325563296675682, 0.01774301379919052, 0.009562778286635876, -0.0015983945922926068, 0.020461030304431915, 0.12352544069290161, -0.02858910523355007, 0.012572354637086391, -0.0022090915590524673, -0.03748304769396782, -0.007361068855971098, -0.00016656395746394992, 0.03424555063247681, 0.032969970256090164, 0.0450904481112957, -0.007896053604781628, 0.003453323384746909, 0.006014281418174505, -0.011088832281529903, -0.02889149636030197, 0.041958052664995193, 0.014756795950233936, -0.006374165881425142, 0.014246154576539993, -0.024187415838241577, -0.004470999352633953, -0.006260194815695286, 0.026410743594169617, 0.010733703151345253, -0.03560488298535347, 0.010051445104181767, 0.06058530882000923, 0.0013203172711655498, -0.001608578721061349, 0.004113981034606695, 0.004363969434052706, -0.030777674168348312, -0.7135825753211975, -0.003504981053993106, 0.013825828209519386, 0.0016784638864919543, 0.006889057345688343, -0.007815955206751823, -0.0029225933831185102, 0.03664138540625572, 0.04409626126289368, 0.016012227162718773, 0.04805352911353111, -0.0019855943974107504, 0.037304747849702835, -0.027901697903871536, -0.08686478435993195, 0.003023503813892603, -0.0019118175841867924, -0.0005984638119116426, -0.027414416894316673, -0.01907750591635704, -0.015153895132243633, -0.0012385445879772305, -0.05295505002140999, -0.036703921854496, -0.009999183006584644, 0.00899053830653429, 0.002351311268284917, -0.023226071149110794, -0.024100035429000854, 0.004666110500693321, 0.0015951640671119094, 0.004084259737282991, -0.01151960901916027, 0.025135483592748642, 0.016346530988812447, -0.023064492270350456, 0.025812627747654915, 0.016220612451434135, -0.007269671186804771, 0.040527667850255966, 0.016213560476899147, 0.08799814432859421, 0.03406022489070892, 0.010236225090920925, 0.0416361428797245, -0.0804440826177597, -0.010471483692526817, -0.02073473297059536, 0.0008370578289031982, 0.013063178397715092, -0.036131784319877625, 0.01025068387389183, -0.0003861159784719348, 0.01738387532532215, 2.3828570192563348e-05, 0.009885127656161785, 0.003940174356102943, 0.02999098040163517, 0.005700401030480862, -0.016693545505404472, 0.14786815643310547, -0.014182998798787594, 0.05049784481525421, -0.004816671833395958, 0.025702577084302902, -0.019692445173859596, -0.020575756207108498, 0.03063618578016758, 0.008562609553337097, -0.02193816751241684, 0.029676372185349464, -0.0291646309196949, 0.0009784199064597487, -0.03168993070721626, -0.0831809788942337, 0.03501935675740242, 0.001565786311402917, 0.01731797307729721, -0.0365285649895668, -0.014952395111322403, -0.006540663540363312, 0.024839425459504128, 8.806529513094574e-05, -0.03378412500023842, 0.06081689894199371, 0.004495943896472454, 0.02695191465318203, -0.011907854117453098, 0.038533009588718414, -0.039418332278728485, 0.04439384490251541, -0.016569258645176888, -0.03709356486797333, 0.005616756156086922, 0.0010874926811084151, 0.00945891160517931, -0.014079773798584938, 0.016831431537866592, 0.008492863737046719, 0.01514444500207901, -0.024426879361271858, -0.033269234001636505, -0.01221650280058384, -0.01131538674235344, -0.03693170100450516, -0.011498072184622288, -0.018967514857649803, -0.024286232888698578, -0.013897763565182686, 0.002626467263326049, 0.004169350489974022, 0.009462452493607998, 0.038054194301366806, -0.009423697367310524, 0.01972324401140213, 0.004296140279620886, -0.006019026972353458, -0.008660978637635708, 0.021844204515218735, 0.12640708684921265, -0.03741239011287689, 0.020275840535759926, -0.02069185860455036, -0.02592802420258522, -0.0339600145816803, 0.007940447889268398, 0.016802366822957993, -0.0007053637527860701, -0.04187358543276787, 0.018872518092393875, -0.012143248692154884, -0.005366551224142313, 0.0016076740575954318, 0.026292264461517334, -0.009984332136809826, -0.0231382604688406, 0.01843946799635887, -0.012354404665529728, -0.014284891076385975, -0.028188103809952736, 0.0384146049618721, -0.026352155953645706, -0.006559604778885841, 0.007299675140529871, -0.005497086327522993, -0.025662269443273544, 0.018266906961798668, 0.03820325806736946, 0.020840104669332504, 0.013373696245253086, 0.031046107411384583, -0.0062873028218746185, -0.01320692989975214, -0.10979188978672028, 0.010755330324172974, 0.028772834688425064, 0.0041495803743600845, 0.009765064343810081, 0.005023764446377754, 0.00421079620718956, 0.015107414685189724, 0.008267287164926529, -0.004374989774078131, 0.020642127841711044, -0.012798706069588661, 0.021740827709436417, -0.014874929562211037, 0.02110876515507698, -0.010977711528539658, -0.02326872944831848, 0.001106178853660822, -0.015926692634820938, -0.001639345777221024, 0.008885800838470459, -0.028953511267900467, -0.019374947994947433, 0.03128564730286598, 0.010870082303881645, -0.019137641414999962, 0.01292065903544426, -0.0020789816044270992, -0.017252551391720772, 0.012617540545761585, 0.03122028522193432, -0.016704248264431953, -0.024701328948140144, -0.030672172084450722, 0.007944205775856972, -0.015185744501650333, -0.04058804363012314, -0.05578704923391342, -0.003843017155304551, 0.020174240693449974, 0.04786011949181557, -0.10790666937828064, 0.03266645595431328, 0.010188671760261059, 0.016749156638979912, 0.015882467851042747, 0.004225813318043947, 0.0029869647696614265, 0.007105100899934769, -0.03263267129659653, -0.005409418139606714, -0.03135864436626434, -0.009250782430171967, -0.005950802005827427, 0.02022433653473854, 0.009442148730158806, -0.03671892359852791, -0.01642686128616333, 0.004425353370606899, -0.017929019406437874, -0.04422039911150932, -0.05328097939491272, 0.030187362805008888, 0.02200804278254509, 0.01572662964463234, -0.004811770282685757, -0.027274688705801964, 0.08802545815706253, 0.011281133629381657, 0.03740527480840683, 0.030032264068722725, 0.05645114555954933, 0.032246269285678864, -0.030144255608320236, -0.06161170080304146, -0.0006239297799766064, 0.09085994958877563, -0.02870759554207325, -0.004218806978315115, -0.004764878656715155, 0.016135770827531815, 0.0022201749961823225, 0.005588726606220007, -0.009947717189788818, 0.029589155688881874, 0.014235763810575008, 0.0168097373098135, 0.012240939773619175, -0.019931912422180176, -0.0069676656275987625, 0.011692636646330357, -0.0010195940267294645, 0.004038939252495766, 0.03194884583353996, 0.007601393386721611, 0.020804492756724358, -0.04175876826047897, -0.016940638422966003, 0.026742391288280487, 0.005287792067974806, -0.019726261496543884, 0.023783929646015167, -0.010892270132899284, 0.0070218234322965145, 0.018052516505122185, 0.09833239763975143, 0.005996635649353266, 0.029194507747888565, 0.002304577035829425, 0.0005113622173666954, -0.011367008090019226, -0.03769783303141594, 0.02888578176498413, -0.019593019038438797, -0.023851482197642326, 0.05841697379946709, -0.022584350779652596, 0.009924855083227158, -0.03543786332011223, -0.025737004354596138, -0.016579467803239822, 0.0005717118037864566, -0.0919434204697609, 0.0187744852155447, -0.003209721762686968, 0.021706698462367058, 0.002067683730274439, -0.004214161541312933, -0.011952456086874008, 0.0013239487307146192, 0.0022439765743911266, 0.1403043270111084, 0.013143344782292843, -0.03594806045293808, -0.02667166478931904, 0.036687519401311874, -0.019401440396904945, 0.02890520915389061, 0.0036621498875319958, 0.00854232907295227, 0.02929164655506611, 0.01631902903318405, -0.021994393318891525, 0.004548138473182917, -0.032036248594522476, -0.04822984337806702, -0.025053687393665314, -0.026074307039380074, -0.022425172850489616, 0.008292000740766525, 0.02281338907778263, -0.016533982008695602, 0.03646164759993553, 0.06416675448417664, -0.03402961790561676, -0.02334056794643402, 0.021304458379745483, 0.10444005578756332, -0.002580525353550911, 0.004228579346090555, -0.008957291021943092, -0.0203610397875309, -0.0019715812522917986, -0.02160404808819294, -0.03172367066144943, -0.03968366980552673, -0.0291595458984375, 0.030231650918722153, -0.00814666599035263, -0.001335001434199512, 0.0024227146059274673, -0.01612805761396885, 0.05830201879143715, 0.000788122764788568, 0.011088757775723934, 0.014363245107233524, -0.013625998981297016, -0.01870507374405861, 0.04202494025230408, 0.04769698530435562, 0.008220226503908634, -0.01328213233500719, -0.020918600261211395, -0.18581423163414001, 0.0312480591237545, -0.00724015012383461, -0.01577860116958618, 0.017298623919487, 3.0756229534745216e-05, -0.003156340681016445, -0.0189957432448864, 0.018482105806469917, -0.01863965205848217, -0.01739945448935032, 0.020724084228277206, 0.019323505461215973, 0.044335898011922836, -0.016098342835903168, 0.018480725586414337, -0.03582174703478813, -0.04336855933070183, 0.0014370421413332224, 0.024709833785891533, -0.021810365840792656, 0.001751184812746942, 0.0045839594677090645, 0.017507700249552727, 0.06541495770215988, 0.0026840921491384506, 0.006986195687204599, -0.0012206530664116144, 0.027302801609039307, -0.0012065938208252192, -0.02318338118493557, -0.0012918378924950957, -0.018500957638025284, 0.00903103593736887, -0.0030324740801006556, -0.006150136701762676, 0.05006689950823784, -0.05354509502649307, 0.06387734413146973, 0.010061177425086498, 0.02193794958293438, -0.018975911661982536, 0.017097176983952522, -0.05183979123830795, -0.002173670567572117, -0.00875640008598566, 0.013676533475518227, -0.008760164491832256, 0.0007806782377883792, -0.01431348081678152, 0.022589968517422676, -0.012013289146125317, -0.01702277548611164, 0.0009593627182766795, 0.007794695906341076, 0.016384925693273544, 0.016863957047462463, 0.004261242225766182, 0.004227896220982075, -0.00426060613244772, -0.0366465225815773, -0.03947269916534424, 0.035063330084085464, -0.018007708713412285, -0.007112283259630203, -0.04158816859126091, -6.35832329862751e-05, -0.015727318823337555, 0.010352542623877525, -0.01709926128387451, -0.03810398280620575, 0.015770724043250084, -0.014318611472845078, 0.005099005997180939, -0.00452810013666749, 0.005710944999009371, 0.029496902599930763, 0.02517758496105671, 0.01581737771630287, -0.01028421986848116, -0.02389894239604473, 0.03792339935898781, 0.00048134656390175223, -0.014419745653867722]\"\n./train/knee_pad/n03623198_3552.JPEG,knee_pad,\"[0.021083462983369827, 0.010303120128810406, -0.05787020921707153, -0.031605400145053864, 0.021111348643898964, 0.018407894298434258, 0.0027943856548517942, -0.05266115441918373, 0.005270662251859903, -0.026214832440018654, -0.026981983333826065, 0.017489204183220863, 0.06926222890615463, 0.0017828868003562093, 0.012949192896485329, -0.007600801065564156, 0.012718654237687588, 0.06764566898345947, -0.03987414762377739, 0.08722188323736191, -0.11092297732830048, 0.0008099720580503345, 0.014555752277374268, 0.01686250790953636, -0.031176025047898293, -0.011238845065236092, -0.008475744165480137, 0.031226642429828644, 0.004468872211873531, 0.0031900082249194384, -0.004620150197297335, 0.032435085624456406, 0.05092392861843109, 0.020698990672826767, 0.024423271417617798, -0.04396572336554527, -0.009491988457739353, -0.039038654416799545, -0.026366783306002617, -0.04798073321580887, 0.028170736506581306, 0.010169927030801773, -0.0341869555413723, 0.01707136444747448, -0.009673893451690674, -0.0998498722910881, 0.03849988058209419, 0.008217565715312958, -0.007865512743592262, 0.017753228545188904, -0.017788123339414597, -0.010767104104161263, -0.0004521478258538991, 0.02732781134545803, -0.0346890352666378, -0.001230553025379777, 0.05939532071352005, -0.022792251780629158, 0.02497744932770729, -0.049360595643520355, 0.08688096702098846, 0.02132859081029892, -0.03871069476008415, -0.014549736864864826, -0.03195856884121895, -0.0038541185203939676, 0.006232819519937038, 0.03427319601178169, -0.00018562829063739628, 0.01569330506026745, 0.03493805229663849, 0.014129010029137135, 0.0008518215618096292, -0.041221458464860916, 0.028366394340991974, -0.03781803697347641, -0.015210750512778759, -0.00022015599824953824, 0.015074416063725948, 0.0015778548549860716, 0.01444294210523367, -0.009887361899018288, -0.03531694784760475, 0.055925071239471436, 0.0003500255406834185, -0.01638220250606537, -0.0924842357635498, -0.034489113837480545, 0.11091232299804688, -0.03280659392476082, 0.017649509012699127, -0.04375346377491951, -0.46290531754493713, -0.04937230423092842, -0.022776920348405838, 0.00311154592782259, 0.0048361471854150295, -0.029387857764959335, -0.061091866344213486, 0.004603464622050524, -0.0049394783563911915, 0.014143329113721848, 0.0011600381694734097, 0.02954152598977089, 0.037086911499500275, -0.050318796187639236, -0.04319310933351517, 0.0035800181794911623, -0.04215123504400253, 0.032219525426626205, 0.008028550073504448, -0.0982440933585167, 0.02884693443775177, -0.00974057987332344, -0.0083056865260005, -0.0004356615827418864, -0.058351069688797, -0.009127403609454632, 0.05216977000236511, -0.01471271924674511, 0.02745370753109455, -0.11328070610761642, 0.014412098564207554, -0.03152058273553848, 0.018654460087418556, 0.007738006301224232, -0.028033841401338577, -0.032302066683769226, 0.014054806903004646, 0.037302665412425995, -0.011023989878594875, -0.06207656487822533, 0.04674382135272026, 0.0702843889594078, -0.029053544625639915, 0.011883044615387917, 0.051643989980220795, -0.03823871538043022, -0.027744829654693604, -0.018081942573189735, 0.0562206506729126, 0.04826980084180832, 0.06979784369468689, 0.024159371852874756, 0.023391999304294586, 0.027573151513934135, -0.028704576194286346, -0.03153927996754646, -0.056863680481910706, -0.03590529039502144, 0.023761626332998276, 0.06489371508359909, 0.06969130039215088, -0.0035589069593697786, -0.028865918517112732, -0.005350286606699228, 0.04872792586684227, 0.028005076572299004, 0.06194975972175598, -0.04364059492945671, -0.01793462596833706, -0.037203241139650345, -0.000401556579163298, -0.009224669076502323, 0.024073606356978416, 0.02005915530025959, 0.013461284339427948, 0.015065090730786324, -0.007893295027315617, 0.0013389751547947526, -0.02044421248137951, 0.004400548059493303, 0.06425274163484573, 0.04674824699759483, 0.003530310932546854, -0.03315902501344681, 0.007764207664877176, -0.03997935727238655, 0.08714824169874191, 0.009244578890502453, 0.01956697553396225, -0.017685404047369957, 0.006125998683273792, 0.0114089110866189, -0.011026127263903618, -0.05712515115737915, 0.01770685613155365, -0.016042528674006462, 0.030401015654206276, 0.018165074288845062, 0.0055827973410487175, 0.0024075936526060104, 0.0006729992455802858, 0.0074645583517849445, 0.04333551228046417, 0.0076978690922260284, 0.029757896438241005, 0.0086699603125453, 0.010201921686530113, -0.007885310798883438, -0.024075953289866447, 0.01363215409219265, -0.027800075709819794, 0.03573964163661003, -0.02315349131822586, 0.02691712975502014, 0.003270777640864253, -0.04564446955919266, -0.027526667341589928, 0.01533210463821888, 0.08347571641206741, -0.028201203793287277, 0.039493024349212646, 0.014173203147947788, 0.052076101303100586, -0.005796241108328104, 0.05569079518318176, -0.03494877740740776, -0.0001666833268245682, 0.0001197781166411005, 0.06487719714641571, 0.08863092958927155, -0.016163820400834084, 0.03387993946671486, -0.005145116243511438, -0.025824731215834618, 0.04451175779104233, 0.02416135184466839, 0.0013851841213181615, -0.016987932845950127, -0.0706748515367508, -0.02160063199698925, -0.013140262104570866, -0.007598333992063999, 0.03292367234826088, -0.04984109103679657, -0.023261254653334618, -0.03115762397646904, 0.02069167047739029, 0.05255570262670517, -0.002718754578381777, 0.036630891263484955, -0.011678383685648441, -0.007242074701935053, -0.023960594087839127, 0.021221548318862915, 6.627554103033617e-05, -0.007013747468590736, -0.021431952714920044, 0.062155164778232574, -0.04284863546490669, -0.013731537386775017, -0.09083017706871033, -0.012341393157839775, -0.01423468254506588, -0.016568398103117943, -0.024615440517663956, 0.04859397932887077, -0.08175937831401825, -0.002625376218929887, -0.03812067583203316, -0.0020326790399849415, -0.03255508467555046, -0.15290729701519012, -0.011039621196687222, 0.0044361683540046215, 0.0167684368789196, 0.05381542444229126, -0.03757605329155922, -0.00966715533286333, -0.08346855640411377, -0.00025962828658521175, 0.008946238085627556, -0.036709267646074295, -0.0010840039467439055, -0.0003990694531239569, -0.003060400253161788, -0.00401432765647769, -0.009202591143548489, 0.013993384316563606, -0.014066450297832489, 0.014172026887536049, -0.03530452772974968, 0.052954599261283875, -0.021771790459752083, 0.04855916276574135, 0.17388100922107697, 0.029520409181714058, -0.03626703843474388, 0.030907021835446358, -0.02429310977458954, 0.01677161268889904, 0.030560843646526337, 0.027958650141954422, -0.07242120802402496, 0.005030444823205471, -0.08315367251634598, 0.03625999018549919, 0.04976129159331322, -0.0017797929467633367, -0.015260777436196804, 0.0011630479712039232, 0.014245185069739819, 0.0659765899181366, 0.03655539080500603, -0.03303610160946846, 0.02821020781993866, 0.018023988232016563, -0.009146951138973236, -0.013262221589684486, 0.03233228251338005, 0.08799786120653152, 0.06980301439762115, -0.05025872588157654, -0.014494404196739197, 0.00989621039479971, 0.009782957844436169, -0.006893618497997522, 0.004505367483943701, 0.08766207844018936, -0.0032043277751654387, 0.015256347134709358, -0.04872272163629532, -0.07418283075094223, 0.012504692189395428, 0.02783164568245411, -0.0207204706966877, 0.013559415005147457, 0.006591687444597483, -0.10090571641921997, -0.054292261600494385, 0.056597109884023666, 0.006318091414868832, -0.02130003646016121, -0.023113740608096123, -0.004518244415521622, -0.004380692262202501, 0.026177067309617996, -0.02860816940665245, 0.011184757575392723, 0.029324045404791832, 0.027605216950178146, 0.030149340629577637, 0.030876511707901955, -0.007210287731140852, 0.023623481392860413, 0.028492897748947144, -0.00845419242978096, 0.004604010842740536, 0.06040347367525101, 0.02647467330098152, 0.0023721533361822367, 0.020667148754000664, 0.01862921006977558, -0.00806204229593277, 0.015783006325364113, -0.04982239753007889, 0.030345385894179344, 0.029933840036392212, 0.042067691683769226, 0.07250653207302094, -0.002107855398207903, 0.017451593652367592, -0.0037471007090061903, -0.0015796325169503689, -0.01224733516573906, 0.0009564498905092478, -0.06519081443548203, 0.0025691683404147625, 0.066107377409935, 0.006861420813947916, 0.03698645904660225, -0.0037238704971969128, -0.010266668163239956, 0.040456730872392654, -0.0236392579972744, 0.1765969842672348, 0.04606928676366806, 0.023819101974368095, 0.03963175043463707, 0.053283918648958206, -0.007818283513188362, 0.0021665231324732304, 0.02142002247273922, -0.006199223455041647, -0.043302327394485474, 0.038887932896614075, -0.06725961714982986, -0.03584199771285057, -0.00249445135705173, -0.10064119100570679, 0.04669961705803871, -0.002654403680935502, 0.03275409713387489, 0.047754522413015366, 0.026032738387584686, 0.04466584697365761, 0.020229507237672806, 0.028155341744422913, -0.015887590125203133, -0.007452001795172691, 0.016896037384867668, -0.009139103814959526, -0.014483770355582237, 0.026841679587960243, 0.0016049116384238005, 0.01290940586477518, -0.05111415684223175, -0.011652156710624695, 0.07329892367124557, 0.007341910153627396, 0.015952900052070618, 0.008488942869007587, -0.02248239330947399, -0.061192866414785385, -0.0580856017768383, -0.042157821357250214, 0.028490453958511353, 0.0578395314514637, -0.037758663296699524, 0.005474364385008812, -0.0180960800498724, -0.01591481827199459, 0.03208450600504875, -0.023951897397637367, -0.03873271495103836, -0.0005632652319036424, 0.029408665373921394, 0.19788382947444916, -0.04333820939064026, 0.0023166630417108536, 0.06287438422441483, -0.011858200654387474, -0.006005213130265474, -0.014765101484954357, -0.01682509295642376, -0.07442788779735565, 0.018966667354106903, -0.05702948942780495, 0.004550829529762268, -0.03864956647157669, -0.040087535977363586, 0.022571664303541183, -0.02373291179537773, 0.022919729351997375, -0.0347285158932209, -0.030399324372410774, 0.015211179852485657, -0.04810052365064621, -0.029690219089388847, 0.0007827109075151384, -0.08078543096780777, -0.03483615070581436, 0.03176485002040863, 0.02319072000682354, -0.09653251618146896, -0.025019990280270576, -0.03672046959400177, 0.00895466934889555, 0.014325986616313457, -0.03720581531524658, -0.023796528577804565, -0.06032039597630501, -0.037831176072359085, -0.035954929888248444, 0.006636350881308317, 0.048635948449373245, -0.03585793823003769, -0.051346536725759506, 0.020708616822957993, -0.012802447192370892, -0.01677321456372738, 0.04046347737312317, -0.03986131772398949, -0.003476831130683422, 0.016566768288612366, 0.021293919533491135, -0.012422239407896996, 0.010742837563157082, -0.07291743904352188, -0.02947760932147503, -0.0403485931456089, 0.003309730440378189, -0.01604168489575386, -0.021106157451868057, 0.029096461832523346, -0.04819178953766823, 0.0025200515519827604, -0.04576224088668823, -0.02075062319636345, -0.05335559695959091, 0.0028446430806070566, 0.016991212964057922, -0.0641186311841011, 0.08261209726333618, -0.012141941115260124, -0.0538589172065258, 0.017436522990465164, -0.017448866739869118, -0.02506786584854126, -0.03284019976854324, -0.02432464249432087, 0.03759109601378441, 0.010829166509211063, -0.01351953111588955, 0.011540639214217663, -0.04125701263546944, -0.02919835038483143, -0.026247622445225716, -0.0025802021846175194, 0.009680969640612602, 0.018559593707323074]\"\n./train/knee_pad/n03623198_10486.JPEG,knee_pad,\"[-0.0008871849277056754, -0.003753089113160968, -0.022486966103315353, 0.039079830050468445, 0.041140858083963394, 0.026143012568354607, 0.05173184722661972, -0.059247937053442, 0.027054501697421074, 0.06164366379380226, 0.0074212877079844475, 0.02349141612648964, 0.05280333757400513, -0.007432790473103523, -0.03989343345165253, -0.029682211577892303, -0.01997304894030094, 0.0017740419134497643, -0.0186703409999609, 0.05219731479883194, -0.11577560752630234, -0.006278176326304674, 0.01548085268586874, -0.005913584027439356, 0.0021022213622927666, 0.00427074171602726, -0.01874302327632904, 0.03236650303006172, 0.030474595725536346, -0.014189328998327255, 0.002732046414166689, 0.014188461005687714, 0.004272468853741884, 0.010884170420467854, 0.04129071161150932, 0.009600970894098282, 0.02182040363550186, -0.004457022063434124, 0.02562372386455536, -0.028327947482466698, 0.04484737291932106, 0.024975795298814774, -0.07613831758499146, -0.018894191831350327, 0.005286034196615219, -0.15261025726795197, 0.06194858253002167, -0.0007577824289910495, 0.04682926461100578, 0.055043045431375504, -0.013223894871771336, 0.0017310600960627198, 0.026230759918689728, 0.0035936308559030294, -0.045448917895555496, -0.039809681475162506, 0.036952245980501175, -0.010162540711462498, 0.03942219913005829, -0.07312958687543869, 0.05992629751563072, -0.004130701534450054, -0.011638681404292583, -0.024790503084659576, -0.00096039759228006, -0.043220337480306625, 0.015004976652562618, 0.059109367430210114, 0.007362554781138897, -0.0014358408516272902, -0.053297705948352814, -0.0038228805642575026, -0.02965027652680874, 0.03232121840119362, 0.002763084601610899, -0.04044819250702858, -0.004338601604104042, 0.04524005204439163, -0.009447568096220493, -0.02359495311975479, -0.003626309335231781, 0.009289233945310116, -0.026188917458057404, -0.011436031199991703, -0.01366328727453947, 0.006803842727094889, -0.055924877524375916, 0.03451821580529213, 0.024593446403741837, -0.061045851558446884, 0.0021205611992627382, 0.003757924772799015, -0.5116302967071533, 0.01381941419094801, -0.000627059256657958, -0.05665544793009758, 0.040061067789793015, -0.051389146596193314, -0.09058690816164017, -0.04351811856031418, 0.021083854138851166, -0.04211394116282463, 0.013985314406454563, -0.01535421796143055, 0.07833436876535416, -0.049239348620176315, -0.0865495502948761, -0.0013976278714835644, 0.013283787295222282, 0.030306387692689896, -0.021686803549528122, -0.13045938313007355, 0.014184280298650265, -0.01713024452328682, -0.034471068531274796, 0.04489171504974365, -0.015598871745169163, 0.014713621698319912, 0.05211683735251427, -0.04456702619791031, -0.025883808732032776, -0.021880919113755226, -0.0009712977916933596, -0.053241580724716187, -0.015598922036588192, -0.05851533263921738, -0.06649916619062424, -0.01882362738251686, -0.018727030605077744, 0.006876044441014528, -0.005683856550604105, -0.04492650926113129, 0.02926236391067505, 0.07946819067001343, -0.028830548748373985, -0.0031765045132488012, 0.013469655998051167, -0.01663985289633274, -0.02138291858136654, 0.016123760491609573, 0.03876622021198273, 0.025918422266840935, -0.011035219766199589, 0.04899010434746742, 0.013984044082462788, -0.01566142402589321, -0.05990803241729736, -0.025501441210508347, -0.054250314831733704, 0.029128246009349823, 0.004253028426319361, 0.021784748882055283, 0.0672188401222229, 0.01036495715379715, -0.07516026496887207, 0.012439521960914135, 0.03384369611740112, 0.017476001754403114, 0.0019519627094268799, -0.07100227475166321, -0.03640523925423622, -0.00999020878225565, 0.005039778538048267, -0.026180945336818695, -0.07187749445438385, 0.00881457794457674, -0.017080875113606453, 0.043845124542713165, 0.03375989943742752, -0.0371064655482769, 0.03576985001564026, 0.00835829135030508, 0.022347774356603622, 0.0003911930834874511, -0.020377639681100845, -0.013876321725547314, -0.08896207809448242, 0.010771095752716064, 0.08672457188367844, -0.00752701610326767, 0.03367399796843529, -0.028204599395394325, 0.039874739944934845, 0.04398037865757942, -0.015413026325404644, -0.04197242483496666, 0.003509441390633583, -0.009734567254781723, -0.015104270540177822, -0.011753962375223637, 0.01238227728754282, -0.009650477208197117, 0.0063101365230977535, 0.004301149398088455, -0.03520306199789047, -0.018412239849567413, 0.054866425693035126, 0.027577031403779984, 0.03790082782506943, -0.01832360029220581, 0.017192993313074112, -0.06918369978666306, -0.028973005712032318, 0.04398713260889053, 0.032464951276779175, 0.0006851479411125183, 0.03386041522026062, -0.060783568769693375, -0.03827866539359093, 0.02617189660668373, 0.07075217366218567, -0.0016796347917988896, -0.03020254708826542, 0.026940468698740005, 0.008735869079828262, -0.03645622357726097, 0.04409531131386757, 0.04580650106072426, -0.009199478663504124, -0.015535580925643444, 0.026818281039595604, 0.026143841445446014, -0.008888053707778454, 0.034352853894233704, -0.02905198186635971, -0.033276647329330444, 0.001393745536915958, -0.013504434376955032, 0.012444647029042244, -0.012875246815383434, -0.046792760491371155, 0.01901187188923359, -0.019382191821932793, 0.005414469633251429, 0.03025002032518387, -0.1369898021221161, -0.014606043696403503, 0.0347764678299427, 0.012850272469222546, 0.0622292160987854, 0.006414580624550581, 0.06592334806919098, 0.017743779346346855, -0.029696768149733543, 0.007376488763839006, 0.033640455454587936, 0.0023538724053651094, 0.025060778483748436, -0.031040480360388756, 0.017725881189107895, 0.027081811800599098, -0.016817661002278328, -0.03729605674743652, -0.007257911376655102, 0.007335404399782419, -0.0017683410551398993, -0.03741377219557762, -0.023348111659288406, -0.0747213140130043, 0.01708412542939186, -0.015391958877444267, -0.01090581901371479, 0.02904370240867138, -0.11556389182806015, 0.00679542263969779, 0.017344072461128235, -0.023830080404877663, 0.017989572137594223, -0.018786458298563957, 0.005196953192353249, -0.022349834442138672, 0.025203607976436615, 0.04993981122970581, -0.030314788222312927, -0.024700872600078583, 0.030567524954676628, 0.05713909864425659, 0.015328994020819664, -0.005016196984797716, 0.030481822788715363, -0.037950996309518814, -0.025086285546422005, -0.0838325172662735, 0.03954154625535011, -0.024119235575199127, -0.0313737578690052, 0.1798972636461258, 0.005296573042869568, -0.024673309177160263, -0.03839553892612457, -0.005057706963270903, -0.04088809713721275, 0.03516363352537155, 0.009309161454439163, -0.05688442662358284, 0.04496875777840614, -0.09238981455564499, 0.008602827787399292, 0.013234718702733517, 0.005464186426252127, -0.004100510850548744, -0.013468911871314049, 0.004871627315878868, 0.045246388763189316, 0.008869098499417305, 0.03448620066046715, 0.07069636136293411, -0.014578140340745449, -0.04867316037416458, 0.004685631021857262, 0.017102880403399467, 0.06557571142911911, 0.07916640490293503, -0.02367272414267063, 0.03670598939061165, 0.048775237053632736, 6.00921266595833e-05, -0.013376982882618904, -0.01430358737707138, 0.07324754446744919, -0.020835017785429955, -0.0967334508895874, -0.04335813596844673, -0.0330919474363327, 0.04672455042600632, -0.0005477697122842073, 0.03450234234333038, 0.03991018980741501, -0.007346151862293482, -0.07034895569086075, -0.06535617262125015, 0.043801676481962204, -0.0004603611887432635, 0.029061010107398033, -0.04161464050412178, 0.02259659394621849, 0.01770726405084133, -0.004654751159250736, -0.011994547210633755, 0.028735864907503128, 0.03357836604118347, -0.007793853525072336, -0.018109697848558426, 0.01936260052025318, -0.016591031104326248, -0.012321565300226212, 0.017284082248806953, -0.050503041595220566, -0.027454648166894913, 0.022718382999300957, 0.03349639102816582, 0.02117089368402958, 0.0537949837744236, -0.012871641665697098, -0.040604475885629654, -0.03801741451025009, -0.05582626909017563, 0.11014178395271301, -0.0432259626686573, 0.007423236966133118, 0.04924868792295456, -0.03218201920390129, -0.014656014740467072, 0.0027234614826738834, 0.059658415615558624, -0.012644179165363312, 0.00903609860688448, -0.12324745953083038, -0.0303408931940794, 0.0014124938752502203, -0.028532739728689194, 0.03083430789411068, 0.027355827391147614, -0.0005549454945139587, 0.03176869824528694, 0.0037825170438736677, 0.14385053515434265, 0.03286700323224068, -0.05243339762091637, 0.04702199995517731, 0.003306114114820957, 0.004134438931941986, -0.02385951764881611, 0.006251058541238308, -0.016611188650131226, -0.029163921251893044, 0.022629836574196815, -0.018051011487841606, -0.04264954850077629, -0.08507788181304932, -0.005788459442555904, 0.04941074177622795, -0.02069762535393238, 0.03190813586115837, -0.044864803552627563, 0.03343399986624718, 0.02881002053618431, -0.024915890768170357, 0.025290239602327347, -0.028495417907834053, -0.021394912153482437, 0.014042723923921585, -0.018383311107754707, 0.0008345539099536836, -0.011261722072958946, 0.011453039012849331, -0.04611435905098915, -0.007315397262573242, 0.02460571750998497, 0.002401946811005473, 0.036757104098796844, 0.03268332779407501, 0.013373552821576595, -0.006177005358040333, -0.045078475028276443, -0.015163779258728027, -0.010983751155436039, 0.005139434710144997, 0.030942406505346298, -0.043684620410203934, 0.03550131991505623, -0.020057236775755882, -0.007591412402689457, 0.006760748103260994, -0.02206886187195778, -0.05329226702451706, -0.014058701694011688, 0.0025052381679415703, 0.05854005366563797, 0.0040160841308534145, 0.009784409776329994, 0.02966977097094059, -0.041892193257808685, 0.03589801490306854, 0.004191291984170675, -0.040183208882808685, -0.05678088963031769, 0.0465162917971611, 0.007583917118608952, 0.035214658826589584, 0.006762686185538769, -0.026020735502243042, 0.0257412102073431, 0.041865356266498566, -0.00859732087701559, -0.013841534033417702, -0.01794135943055153, -0.03456999734044075, -0.061141237616539, -0.005688202101737261, 0.015133265405893326, -0.07607818394899368, -0.04169045388698578, 0.030161842703819275, 0.005735569167882204, -0.05061410740017891, 0.0041733686812222, -0.009966803714632988, -0.014752275310456753, 0.00595800532028079, -0.02646149881184101, 0.02355775237083435, -0.04952233284711838, 0.0047036875039339066, -0.019935088232159615, -0.010463534854352474, 0.053148023784160614, 0.02806156314909458, -0.014422599226236343, -0.01632731594145298, 0.006180314812809229, -0.04602654650807381, 0.07161011546850204, 0.0017810509307309985, 0.03437390923500061, 0.009287118911743164, -0.03755464777350426, -0.05044608935713768, 0.04806840792298317, -0.021200288087129593, -0.0063890875317156315, 0.015202401205897331, 0.005732769146561623, -0.039828088134527206, -0.01045918557792902, -2.2250997062656097e-06, -0.024079006165266037, 0.02313106134533882, -0.0034596973564475775, -0.047557439655065536, -0.0075129852630198, -0.015486589632928371, 0.022001653909683228, -0.057871926575899124, 0.019790375605225563, -0.007843428291380405, -0.07203242182731628, 0.02859245426952839, -0.0393824577331543, -0.020071392878890038, -0.025419484823942184, -0.005389868747442961, 0.05529360845685005, -0.0341772735118866, -0.0075701880268752575, -0.005150907207280397, 0.01873994804918766, -0.029062125831842422, -0.024184875190258026, 0.008264917880296707, -0.035640522837638855, -0.003596156369894743]\"\n./train/knee_pad/n03623198_1346.JPEG,knee_pad,\"[-0.011202112771570683, 0.022281235083937645, -0.010904640890657902, -0.027032535523176193, 0.019516540691256523, 0.0337265320122242, 0.008252213709056377, 0.03339102119207382, 0.05833463370800018, -0.01725020632147789, -0.007921495474874973, 0.01948375068604946, -0.010081994347274303, -0.04387355223298073, -0.004723057150840759, -0.013806640170514584, 0.09609383344650269, 0.016004115343093872, 0.010478992015123367, -0.04407235234975815, -0.11431495100259781, 0.01834346167743206, -0.002548505086451769, -0.038625460118055344, -0.009499255567789078, 0.029417460784316063, 0.03373067453503609, -0.03581983223557472, -0.0143590634688735, 0.01779456064105034, -0.031489450484514236, -0.01742541790008545, -0.00550626078620553, 0.023275909945368767, -0.048585738986730576, -0.0040397667326033115, 0.010494067333638668, -0.003307996317744255, -0.031876787543296814, 0.052142199128866196, -0.007532668765634298, -0.07360941171646118, 0.0009111306280829012, -0.024126389995217323, 0.03996199369430542, -0.12467151135206223, -0.006691540125757456, 0.030449409037828445, -0.028985517099499702, -0.018729882314801216, 0.08619783818721771, 0.016230836510658264, 0.0008234636043198407, 0.005828196182847023, 0.001332030282355845, 0.02012549713253975, -0.01581202819943428, 0.008288155309855938, 0.0035177101381123066, 0.00733049726113677, 0.09598466753959656, -0.036052804440259933, 0.01775551214814186, 0.03132668510079384, -0.044644761830568314, -0.04049459844827652, 0.03482603281736374, 0.018791332840919495, 0.018350204452872276, 0.0097288116812706, -0.004685802850872278, -0.012219918891787529, -0.012335202656686306, -0.02419610507786274, 0.0043676444329321384, 0.01540125161409378, 0.032111506909132004, -0.03874943032860756, 0.018522117286920547, -0.03912205621600151, -0.005578240845352411, -0.002244020812213421, -0.025256410241127014, -0.022890707477927208, 0.009869161061942577, -0.006911622826009989, 0.06007767096161842, -0.007044651545584202, 0.007169394753873348, -0.02655477076768875, -0.003637245623394847, -0.021613793447613716, -0.5854319334030151, 0.03382757678627968, -0.04320772737264633, 0.016148632392287254, -0.005350301042199135, 0.03574977070093155, -0.02686111256480217, 0.051948029547929764, 0.010460472665727139, -0.061403896659612656, 0.04614633694291115, 0.03220921754837036, 0.005415008403360844, 0.016076231375336647, -0.09781131893396378, -0.00875706784427166, 0.02222348190844059, -0.023058371618390083, 0.0016857757000252604, 0.0560477040708065, -0.03455160930752754, -0.012755048461258411, -0.027878273278474808, 0.006771287880837917, -0.013870597817003727, -0.021168095991015434, -0.013965270482003689, -0.026455169543623924, -0.0027228009421378374, 0.05472069978713989, -0.03843637928366661, 0.004507473669946194, 0.028256764635443687, 0.04194559529423714, -0.01880069263279438, 0.01099181454628706, -0.022557944059371948, 0.03122342750430107, -0.016520990058779716, 0.005304952152073383, -0.002404757309705019, 0.08370914310216904, 0.02393515035510063, -0.006052350625395775, 0.0034992967266589403, -0.011367151513695717, -0.03398388624191284, -0.032357778400182724, 0.0102335000410676, 0.004567713476717472, 0.032521478831768036, 0.0032564892899245024, 0.015289224684238434, -0.039230961352586746, -0.002222552662715316, -0.05446537956595421, 0.03720298781991005, -0.032258644700050354, -0.017794176936149597, -0.017840640619397163, 0.015595748089253902, -0.03463852405548096, 0.012348483316600323, -0.04471465200185776, -0.012154821306467056, -0.02863774076104164, -0.03463400527834892, -0.013408290222287178, -0.02263152413070202, 0.00753008434548974, 0.045394912362098694, -0.028259428218007088, 0.01652476377785206, -0.020546134561300278, -0.00797571986913681, -0.052224643528461456, 0.08874975889921188, 0.007849705405533314, 0.006846188101917505, -0.030923044309020042, 0.02623298391699791, 0.00609262939542532, -0.03363741934299469, -0.05420783534646034, 0.017506355419754982, -0.01147028524428606, -0.005442253779619932, -0.016909444704651833, 0.0272358451038599, -0.004759275354444981, 0.07070188969373703, -0.008556202054023743, -0.016760721802711487, 0.04039357602596283, 0.05129927769303322, -0.022182568907737732, -0.04216334596276283, 0.004022927023470402, 0.009895951487123966, -0.007910646498203278, -0.038603708148002625, -0.010838082991540432, 0.05875703692436218, -0.049926698207855225, -0.026866434141993523, -0.05061662942171097, -0.01465644035488367, -0.0026234665419906378, -0.011764463037252426, -0.01837795414030552, -0.008169259876012802, 0.02370190992951393, 0.02058780938386917, -0.006941244937479496, -0.03363826125860214, -0.005713278893381357, -0.0466882660984993, -0.00810608547180891, 0.017087779939174652, -0.047168631106615067, -0.0071678017266094685, 0.012744028121232986, -0.025167085230350494, 0.00665909331291914, -0.005659071728587151, 0.01282409019768238, -0.023323485627770424, 0.029538726434111595, -0.005715259350836277, -0.020930470898747444, -0.008966770023107529, 0.03312312811613083, -0.0425928570330143, 0.019228510558605194, 0.0065762042067945, -0.007900409400463104, 0.034307993948459625, 0.0078042978420853615, 0.0038980983663350344, -0.03838525712490082, 0.04922330379486084, 0.027707284316420555, 0.003269432345405221, -0.03128944709897041, 0.037438713014125824, -0.05678989738225937, -0.045999400317668915, 0.012210307642817497, 0.031003903597593307, -0.0009861732833087444, -0.009986062534153461, -0.00960648525506258, 0.01508593000471592, -0.0040826513431966305, 0.019938552752137184, 0.006586580537259579, -0.012518083676695824, 0.04463854059576988, 0.02363887056708336, -0.040408968925476074, 0.006780947558581829, -0.0005628439248539507, 0.009069547057151794, 0.04379138723015785, -0.0015372822526842356, -0.013853639364242554, -0.07112012058496475, 0.03284101560711861, 0.06174590811133385, -0.005458523984998465, 0.0008035330101847649, -0.018054476007819176, -0.0124840522184968, 0.04780115187168121, -0.014205947518348694, 0.010925102978944778, -0.027144286781549454, -0.001283855177462101, -0.01951568014919758, 0.03171127289533615, 0.0002488791069481522, -0.013027382083237171, 0.04709487035870552, 0.019963551312685013, -0.009370219893753529, -0.0027626564260572195, -0.015806976705789566, 0.011610964313149452, -0.03993614763021469, 0.013080473057925701, -0.054189205169677734, 0.007813937030732632, 0.005735641345381737, 0.010540062561631203, 0.17224647104740143, 0.00421591941267252, -0.025837775319814682, -0.04804641753435135, 0.05367537960410118, 0.009573861956596375, -0.0035171748604625463, 0.02736830525100231, -0.06944775581359863, -0.018681449815630913, -0.05071388930082321, 0.027802826836705208, 0.06280133128166199, 0.04895686358213425, -0.00714275473728776, -0.031081991270184517, 0.0016128832940012217, -0.009502888657152653, 0.0005122401635162532, -0.07919935882091522, 0.004046395421028137, 0.040523380041122437, 0.024108581244945526, 0.017130641266703606, -0.014606055803596973, 0.0327455960214138, 0.08363532274961472, 0.03245963156223297, 0.028575077652931213, 0.028984151780605316, 0.0578162744641304, -0.0075268130749464035, -0.01120755635201931, -0.03289635106921196, 0.0574071891605854, 0.11394309252500534, -0.01675649918615818, -0.04538285732269287, 0.006454104091972113, -0.03605738654732704, 0.017020713537931442, 0.04076846316456795, -0.015523826703429222, 0.0003192127333022654, 0.01531057246029377, 0.049254681915044785, 0.024039803072810173, -0.0004775249108206481, 0.004995075520128012, -0.0071285180747509, -0.007467500399798155, 0.008076419122517109, 0.004400638397783041, -0.02083680033683777, -0.01710982248187065, 0.03435568884015083, 0.02555179037153721, 0.03265129402279854, 0.022504327818751335, 0.022724982351064682, 0.05474502965807915, 0.028581824153661728, 0.04161062464118004, -0.03792518377304077, 0.0026713362894952297, -0.007726382929831743, 0.04358720779418945, 0.029160963371396065, -0.003594652283936739, -0.014886976219713688, -0.051718100905418396, -0.019338304176926613, 0.050032105296850204, 0.002694768598303199, 0.13908962905406952, -0.038407549262046814, -0.036266524344682693, -0.014874864369630814, 0.016975978389382362, -0.0123412124812603, 0.001469240989536047, -0.10287546366453171, -0.005106750875711441, 0.07343669980764389, 0.00741182267665863, 0.048127494752407074, -0.0187971368432045, 0.01807420328259468, -0.018816154450178146, 0.01664915680885315, 0.12124410271644592, 0.006182720419019461, 0.02869289368391037, 0.00026515903300605714, 0.0361814983189106, 0.019232869148254395, -0.004739884287118912, -0.0137032400816679, 0.0018240477656945586, -0.0335293710231781, 0.03297127038240433, -0.027525141835212708, -0.00484864879399538, -0.0690416693687439, -0.05963198468089104, 0.0018149552633985877, -0.00290652085095644, -0.038678620010614395, -0.059495776891708374, -0.014182858169078827, 0.05455343425273895, -0.0046886783093214035, 0.028525637462735176, -0.027384396642446518, -0.0015023838495835662, 0.03435860201716423, 0.1057172641158104, -0.04591543972492218, 0.022798897698521614, -0.035647518932819366, -0.01069459319114685, 0.0369781069457531, -0.008198194205760956, 0.01068275235593319, 0.018242431804537773, -0.015750056132674217, 0.05049534887075424, 0.009916332550346851, -0.07189657539129257, 0.04693356901407242, -0.022212715819478035, -0.0018089875811710954, -0.06554596871137619, -0.05749914050102234, 0.008805020712316036, 0.041166529059410095, -0.0002660747559275478, 0.1037195697426796, 0.018365221098065376, -0.012870358303189278, -0.05516054481267929, 0.012979624792933464, -0.21314196288585663, 0.014176489785313606, -0.00907078292220831, -0.00429995683953166, -0.012089326046407223, -0.015708550810813904, -0.02986549213528633, -0.03779986873269081, -0.025332488119602203, -0.005635679233819246, -0.04002774879336357, 0.012961029075086117, 0.0596235953271389, 0.020437180995941162, 0.04256048426032066, 0.045565105974674225, 0.04018676280975342, -0.008784580044448376, 0.0157705619931221, 0.010983922518789768, -0.010771259665489197, 0.03381618484854698, 0.011732414364814758, 0.033986423164606094, 0.08489292114973068, -0.028569038957357407, -0.0029002607334405184, -0.020338373258709908, -0.027455521747469902, 0.029206952080130577, -0.013011733070015907, 0.0009826336754485965, -0.020348532125353813, 0.027520442381501198, 0.0009784011635929346, -0.03212570399045944, 0.010224536061286926, -0.0057390364818274975, 0.04581860452890396, 0.039892714470624924, -0.030698413029313087, -0.02423306554555893, -0.01551760733127594, -0.022387586534023285, 0.04377758875489235, -0.0634000301361084, 0.005367721430957317, -0.03996171057224274, -0.006477090995758772, 0.017389316111803055, 0.0271278265863657, -0.039613477885723114, -0.0445677675306797, -0.03699089586734772, -0.0018152672564610839, -0.013995993882417679, 0.01043345034122467, -0.00365677778609097, -0.009023823775351048, 0.041941817849874496, 0.0281134694814682, -0.05115528404712677, 0.009295525029301643, -0.006461698096245527, -0.03428523987531662, -0.020740333944559097, -0.027666306123137474, -0.04457392543554306, -0.009399245493113995, -0.025109579786658287, -0.05021204426884651, -0.003851130837574601, -0.010745931416749954, 0.009971236810088158, -0.008066688664257526, 0.022689729928970337, -0.03597529977560043, -0.01914326101541519, -0.03614161163568497, 0.01469337660819292, -0.03156092017889023, 0.050823017954826355, -0.018924543634057045, 0.001770130475051701]\"\n./train/knee_pad/n03623198_4415.JPEG,knee_pad,\"[-0.0019983393140137196, 0.015115119516849518, 0.0036497984547168016, -0.03071516938507557, 0.022994672879576683, 0.0032242333982139826, -0.007029103115200996, 0.027545997872948647, 0.025367088615894318, -0.006230480037629604, 0.022331155836582184, 0.012957684695720673, 0.05514300987124443, 0.029070749878883362, 0.044276051223278046, -0.015519704669713974, 0.08346070349216461, 0.014124429784715176, -0.05028339475393295, -0.016387056559324265, -0.0946178138256073, -0.031104179099202156, -0.005466244649142027, 0.010165677405893803, -0.0366554781794548, 0.024581003934144974, 0.001400746637955308, -0.02372625656425953, -0.024073917418718338, 0.0019108110573142767, -0.00995520781725645, 0.02971484325826168, -0.004514227621257305, -0.009730979800224304, -0.02554422616958618, -0.0042732791043818, 0.043240781873464584, 0.009872724302113056, -0.027075206860899925, -0.00975548755377531, 0.0006424073944799602, -0.05378478765487671, -0.0018486269982531667, -0.03355444222688675, 0.03603838011622429, -0.1492869108915329, -0.01556268148124218, 0.03323439508676529, 0.013745415955781937, -0.01192401722073555, 0.09586232155561447, 0.03361634910106659, 0.018353207036852837, -0.0012498836731538177, -0.04339822009205818, 0.035511359572410583, -0.06733377277851105, 0.005837397184222937, 0.036469873040914536, 0.02379770018160343, 0.012978297658264637, -0.013881774619221687, 0.05311800539493561, 0.004629659000784159, -0.025490202009677887, -0.03758307546377182, 0.023900344967842102, 0.030653245747089386, 0.010877366177737713, 0.01955040544271469, -0.014612367376685143, 0.002618663012981415, -0.020575469359755516, -0.016729673370718956, 0.01840250752866268, 0.04321544989943504, 0.012660108506679535, -0.007195256184786558, 0.0045681907795369625, -0.009862781502306461, 0.004604955203831196, -0.0412510484457016, 0.00018558140436653048, -0.03347102925181389, 0.026555266231298447, 0.010271668434143066, 0.048220597207546234, 0.0044909631833434105, -0.053637005388736725, -0.025782134383916855, -0.02709275856614113, -0.0338682197034359, -0.6163800358772278, 0.05389166623353958, 0.0030452769715338945, 0.03323335573077202, -0.001385302166454494, 0.004241258837282658, -0.015497911721467972, 0.11142724007368088, 0.02669479511678219, -0.07314702123403549, 0.018217429518699646, -0.0027477156836539507, 0.005640697665512562, -0.026882776990532875, -0.2009708136320114, 0.007670451421290636, 0.0466187447309494, 0.0021023841109126806, -0.01755131408572197, 0.022044526413083076, -0.022922884672880173, -0.05093593895435333, -0.034350790083408356, 0.003368406556546688, 0.0037934754509478807, -0.006745586637407541, -0.012553858570754528, -0.006131360307335854, 0.005929190665483475, 0.024696694687008858, -0.002783464966341853, 0.0160959642380476, -0.024271950125694275, 0.08528377115726471, 0.001400893903337419, 0.005023140925914049, -0.01186417881399393, -0.013440207578241825, -0.004304747562855482, 0.04282822832465172, -0.010593210346996784, 0.08017906546592712, 0.027951575815677643, 0.007896225899457932, 0.0027789371088147163, -0.03540649265050888, -0.038208819925785065, 0.012316560372710228, -0.009310402907431126, -0.007424620911478996, -0.02956218831241131, -0.002146807499229908, -0.0024886997416615486, -0.0023810567799955606, 0.01786087080836296, -0.07409141957759857, 0.007545720785856247, -0.05078812316060066, -0.03253471478819847, -0.0376150980591774, 0.07091661542654037, -0.022791964933276176, -0.03940209373831749, -0.01656978391110897, 0.02561553567647934, -0.017649035900831223, -0.008273286744952202, -0.034287624061107635, 0.029678447172045708, -0.006035276688635349, 0.03442684933543205, 0.003929398022592068, 0.03311382606625557, -0.011025537736713886, -0.009946453385055065, -0.020586218684911728, 0.0735292136669159, 0.005903295241296291, 0.009315590374171734, -0.01651592366397381, 0.013360217213630676, 0.006905899848788977, -0.012732801958918571, -0.03512780740857124, -0.01661282777786255, 0.001996145350858569, 0.023487690836191177, -0.002268587239086628, 0.06860081106424332, -0.041054584085941315, 0.05073874443769455, -0.01402472797781229, -0.006852096412330866, -0.012307221069931984, 0.025805221870541573, -0.006556174252182245, -0.013166053220629692, -0.0008911677286960185, 0.023557569831609726, -0.01350907888263464, -0.046191368252038956, -0.025790290907025337, 0.024841109290719032, -0.0015464586904272437, -0.030995508655905724, -0.026429710909724236, -0.030204549431800842, 0.019465086981654167, 0.012030191719532013, -0.03492893651127815, -0.003127105999737978, 0.026463894173502922, 0.033371102064847946, -0.025625351816415787, -0.0034970585256814957, -0.003932672552764416, -0.02712315320968628, -0.01706540212035179, -0.03332212194800377, -0.02487039566040039, 0.01544783916324377, 0.011901794001460075, -0.0324675589799881, 0.029298245906829834, -0.02796359173953533, 0.016737112775444984, -0.043984927237033844, -0.035053551197052, -7.583788828924298e-05, -0.02240104228258133, -0.044863853603601456, 0.017255686223506927, -0.0016705067828297615, 0.03570085018873215, -0.012228606268763542, -0.00797294918447733, 0.018246272578835487, 0.015460346825420856, -0.01414716336876154, 0.010463781654834747, -0.002803030190989375, 0.0581793412566185, 0.01497354730963707, 0.020648283883929253, 0.020259536802768707, -0.04720664769411087, -0.05366665497422218, -0.005564603488892317, 0.009613478556275368, -0.02440529875457287, 0.02589777484536171, -0.03166219964623451, -0.0006982391350902617, -0.04221818968653679, 0.003759773913770914, 0.060499873012304306, -0.02108997479081154, 0.01979709602892399, 0.004843739792704582, -0.011221720837056637, 0.018005210906267166, -0.005068704020231962, 0.01749250665307045, 0.03010355308651924, 0.004683198407292366, 0.00261515099555254, -0.02423686347901821, 0.002517860382795334, 0.017933668568730354, -0.00788922794163227, -0.005690176505595446, -0.05915535241365433, -0.026282737031579018, 0.052132498472929, 0.016281308606266975, -0.01888541504740715, 0.009232577867805958, -0.01269550621509552, 0.006229647900909185, 0.008064499124884605, -0.014069578610360622, 0.008016448467969894, 0.032854072749614716, -0.002396794268861413, -0.036255232989788055, -0.009713932871818542, -0.013123925775289536, -0.0029502578545361757, -0.04871278256177902, 0.0024693694431334734, -0.06342798471450806, -0.020770566537976265, 0.003964426927268505, 0.02261519804596901, 0.09714441001415253, -0.025208303704857826, 0.014164157211780548, -0.0220829788595438, 0.042459387332201004, -0.043049558997154236, -0.007044387049973011, 0.039731964468955994, -0.024413438513875008, -0.01833602599799633, -0.022410616278648376, 0.026335928589105606, 0.023985395208001137, 0.020169643685221672, -0.023340530693531036, 0.005587298888713121, -0.006269353907555342, -0.000651385635137558, -0.011354262940585613, -0.03455972671508789, 0.044316165149211884, 0.0565769299864769, 0.04187215864658356, 0.018900014460086823, -0.029251890257000923, 0.05916295573115349, 0.08013717830181122, 0.028362909331917763, 0.011896093375980854, -0.021354826167225838, 0.028226466849446297, 0.002395011018961668, 0.0020974143408238888, -0.06481433659791946, 0.02988194115459919, 0.14605124294757843, 0.006233897991478443, -0.038321249186992645, -0.02679748646914959, -0.005929739214479923, 0.016718653962016106, 0.0037440285086631775, -0.043544866144657135, -0.020238585770130157, 0.08595041930675507, 0.014670426025986671, 0.03700341656804085, 0.0013321463484317064, -0.03267956152558327, -0.009182948619127274, -0.0018620279151946306, -0.014958993531763554, -0.042874421924352646, 0.01289824116975069, 0.018287351354956627, 0.04089401289820671, 0.023079127073287964, 0.013344126753509045, 0.011836761608719826, 0.03318930044770241, 0.029584575444459915, 0.037154119461774826, 0.025090748444199562, -0.008182529360055923, 0.009210405871272087, -0.0036300825886428356, 0.040118712931871414, 0.02396322414278984, 0.054264042526483536, -0.048432327806949615, -0.06794209778308868, -0.01666766218841076, 0.012597821652889252, 0.010478915646672249, 0.06703542172908783, 0.005443057045340538, -0.03559911623597145, -0.08304683119058609, -0.01730479672551155, -0.012906888499855995, 0.006574963219463825, -0.04758240655064583, -0.007715926039963961, 0.032581787556409836, -0.021273475140333176, 0.03452378138899803, -0.01889542117714882, 0.025586513802409172, 0.004711435176432133, -0.017769668251276016, 0.04000253975391388, -0.012546202167868614, -0.002488174941390753, 0.0544714592397213, 0.028136206790804863, -0.03247614577412605, -0.03040674887597561, -0.006730730179697275, 0.004816392436623573, 0.01326137874275446, 0.00913529098033905, -0.026162875816226006, 0.05072258412837982, -0.046499691903591156, -0.12034241855144501, -0.011195613071322441, 0.004977785050868988, -0.017417404800653458, -0.027314865961670876, 0.03435356542468071, 0.02708285301923752, -0.017713043838739395, 0.006076096091419458, -0.017210649326443672, -0.01359936036169529, 0.025069309398531914, 0.12316984683275223, -0.04236453026533127, 0.03138422220945358, -0.008402139879763126, 0.008729826658964157, -0.0018381805857643485, 0.024646852165460587, -0.02289685793220997, 0.00113925791811198, -0.029540440067648888, 0.0051873549818992615, 0.04250665381550789, -0.04261251166462898, 0.003895062953233719, 0.004397392738610506, 0.08633914589881897, -0.09226920455694199, -0.03390372171998024, -0.03598105534911156, 0.053310539573431015, 0.015199295245110989, 0.03350384905934334, 0.01031816191971302, -0.0056919921189546585, -0.022849438712000847, 5.6839402532204986e-05, -0.1961696743965149, 0.01445960346609354, -0.030808713287115097, -0.004601881839334965, 0.02506098523736, -2.716715789574664e-05, -0.05630366504192352, 0.010285218246281147, -0.005028792191296816, -0.058001868426799774, 0.024560723453760147, 0.009705987758934498, 0.032747942954301834, 0.03138120472431183, 0.023008594289422035, 0.053531527519226074, 0.005133429542183876, -0.026440301910042763, 0.016327738761901855, 0.003571692854166031, -0.02478949911892414, 0.03819018974900246, 0.013551568612456322, -0.004493802320212126, 0.0348360650241375, -0.08770774304866791, 0.0016666206065565348, -0.0023776895832270384, -0.040310025215148926, 0.037890251725912094, 0.005240702535957098, -0.003919136244803667, 0.05294360592961311, 0.04090256616473198, -0.01158741395920515, -0.014015374705195427, 0.01850101910531521, 0.005861771292984486, -0.006047532428056002, 0.029540035873651505, -0.04238184541463852, -0.05175226926803589, 0.01460365392267704, 0.012373121455311775, 0.05138254165649414, -0.025100871920585632, -0.00553310988470912, -0.01454173494130373, -0.00830039568245411, -0.0026053956244140863, 0.006608263589441776, -0.008969283662736416, -0.04050629213452339, -0.005127908196300268, -0.004703299608081579, -0.007490117102861404, 0.02111775614321232, 0.0004569303127937019, -0.006964019499719143, 0.04441855102777481, -0.017407121136784554, -0.01325287390500307, 0.013285873457789421, -0.004512702580541372, -0.012492985464632511, -0.021578462794423103, -0.025352846831083298, -0.040336091071367264, 0.011952528730034828, -0.03470369800925255, -0.02058606967329979, -0.0019750448409467936, -0.00745715806260705, -0.0388130247592926, -0.02410520240664482, 0.018249470740556717, -0.005585554987192154, -0.03186619281768799, -0.027891239151358604, 0.011295800097286701, -0.01627039723098278, 0.08742072433233261, -0.009069466963410378, -0.022872332483530045]\"\n./train/knee_pad/n03623198_14574.JPEG,knee_pad,\"[0.01850626990199089, 0.01874321885406971, 0.03375648707151413, -0.027459440752863884, -0.0266229547560215, 0.030763739719986916, -0.01365016307681799, 0.06973465532064438, 0.005869370885193348, -0.008211541920900345, 0.0025697629898786545, -0.007812251802533865, 0.05005372315645218, -9.27773555758904e-07, -0.0069859446957707405, -0.008609953336417675, 0.07837315648794174, 0.027460172772407532, -0.005839263089001179, -0.02573087066411972, -0.1011316105723381, -0.01788945309817791, 0.0003257554199080914, 0.009597737342119217, -0.05538424104452133, -0.024965090677142143, 0.03289360925555229, 0.007924005389213562, 0.029974153265357018, 0.035540621727705, -0.01588377356529236, -0.004143569618463516, -0.0013463965151458979, -0.017797984182834625, 0.006275129038840532, -0.023412054404616356, 0.026554740965366364, -0.00383621989749372, -0.014659034088253975, -0.018781157210469246, -0.04714934155344963, -0.06471597403287888, -0.0315166600048542, 0.030461395159363747, 0.03556777909398079, -0.0054060909897089005, -0.01393978577107191, 0.04093428701162338, -0.035269543528556824, -0.012447187677025795, 0.05817349627614021, -0.021870825439691544, -0.005092641804367304, 0.0011740982299670577, -0.013232591561973095, 0.025143148377537727, 0.00500989705324173, -0.020106982439756393, -0.018802471458911896, 0.022417275235056877, 0.09500454366207123, -0.022510085254907608, 0.004898816347122192, 0.008170140907168388, -0.03290140628814697, 0.0007207758026197553, 0.003708118572831154, 0.02999619022011757, 0.05216905474662781, 0.02060753107070923, -0.017387986183166504, 0.001846628962084651, -0.010055146180093288, -0.00029479217482730746, -0.03805447369813919, 0.05473514646291733, 0.04365773871541023, -0.03157709166407585, -0.025248952209949493, 0.036884941160678864, -0.01736512966454029, -0.026570869609713554, 0.03331902623176575, -0.05797293782234192, -0.04102364555001259, 0.005754152778536081, -0.002830744720995426, 0.023894837126135826, -0.022461101412773132, -0.0012690880103036761, -0.005578863434493542, -0.04957686737179756, -0.6441671252250671, 0.026468049734830856, -0.0032381669152528048, 0.01762484945356846, -0.0006821363349445164, 0.04013404622673988, -0.024671737104654312, 0.02700766548514366, -0.00017750296683516353, -0.009076664224267006, 0.05578691512346268, 0.009808212518692017, 0.053316641598939896, -0.003896865760907531, -0.07752367109060287, -0.021515659987926483, 0.03283621743321419, 0.006920966785401106, 0.004036419093608856, 0.07992302626371384, -0.003709616372361779, -0.003077904460951686, -0.030871165916323662, -0.015542600303888321, -0.04350809007883072, -0.015113400295376778, -0.0352027490735054, -0.01874249055981636, -0.023928917944431305, 0.021018657833337784, 0.008397936820983887, 0.007524642627686262, 0.014735027216374874, 0.05812004581093788, 0.007833855226635933, -0.00027285967371426523, 0.01341182179749012, -0.011564133688807487, -0.04523756727576256, 0.009917614050209522, 0.04672223702073097, 0.08511055260896683, 0.002366018947213888, -0.010355394333600998, -0.01879686862230301, 0.013457457534968853, -0.004305592738091946, -0.009908083826303482, 0.03732655197381973, -0.00036200511385686696, -0.0003391576756257564, 0.02420124039053917, -0.01667747087776661, 0.007382109295576811, 0.013151688501238823, -0.0020039186347275972, 0.013015391305088997, -0.003100473200902343, 0.020253673195838928, -0.022634683176875114, 0.06532511115074158, -0.026257092133164406, 0.024835661053657532, 0.002861459506675601, -0.0049811252392828465, 0.0019981740042567253, 0.0065491641871631145, 0.03128806874155998, 0.011428246274590492, -0.006315195467323065, 0.049027178436517715, -0.046443939208984375, 0.003141190391033888, -0.01794350892305374, -0.079936683177948, -0.021925123408436775, 0.015068545937538147, -0.001313563552685082, -0.00759090855717659, -0.023866940289735794, -0.006327266804873943, -0.03094525821506977, 0.03170810639858246, -0.035454440861940384, 0.05663439631462097, -0.0009658493218012154, -0.0008875823696143925, -0.008727059699594975, -0.012456346303224564, -0.024725938215851784, 0.05102016031742096, -0.018302209675312042, -0.027817318215966225, 0.049500636756420135, 0.019753549247980118, 0.04334911331534386, -0.006458144634962082, 0.028690706938505173, 0.01107941847294569, -0.015582113526761532, -0.036230430006980896, -0.00043814213131554425, 0.0794002115726471, -0.04208580031991005, -0.03539261221885681, -0.03972465172410011, -0.0008075014338828623, -0.034198880195617676, 0.00015619347686879337, 0.03264123946428299, 0.033890366554260254, 0.04099437594413757, 0.01735065132379532, -0.007152313366532326, 0.011298993602395058, 0.018756946548819542, -0.04924771189689636, -0.07714342325925827, 0.05097407102584839, 0.05275879427790642, -0.012099326588213444, 0.01558404415845871, -0.03916358947753906, -0.015222303569316864, -0.01599891670048237, -0.005678197834640741, -0.0209176167845726, 0.04317907616496086, -0.04920801892876625, -0.017852822318673134, 0.012073271907866001, -0.00939718447625637, -0.023529332131147385, 0.035128869116306305, 0.0018499161815270782, -0.00010960322106257081, 0.05054891109466553, 0.002580001251772046, 0.015804672613739967, -0.03409907594323158, 0.04759323224425316, 0.026552215218544006, -0.012792033143341541, -0.04171854257583618, 0.011679871007800102, -0.04031994193792343, -0.005623613018542528, 0.052468229085206985, 0.003993081394582987, -0.008274373598396778, 0.011716227047145367, 0.005179546307772398, 0.03521856293082237, -0.06190258637070656, 0.009468388743698597, 0.024186789989471436, -0.01710009016096592, 0.00351859163492918, -0.008808932267129421, -0.017256783321499825, -0.015312211588025093, -0.026164447888731956, 0.00801406055688858, 0.015926610678434372, -0.0019402889302000403, 0.028915151953697205, -0.0022343804594129324, -0.0071069723926484585, -0.008722065947949886, -0.03492162749171257, -0.021151812747120857, 0.05607268214225769, -0.007864169776439667, 0.05585872381925583, -0.00908654648810625, 0.014207543805241585, 0.002478325739502907, -0.0022140827495604753, -0.05966320261359215, -0.005779717583209276, -0.013790522702038288, -0.053080860525369644, 0.007816227152943611, 0.06262785941362381, -0.004493574611842632, -0.03284188359975815, 0.0034140953794121742, 0.007171740289777517, -0.03479939326643944, -0.015246558003127575, -0.04667951166629791, 0.02168264053761959, -0.02353639155626297, -0.0018312381580471992, 0.05383593216538429, -0.010099810548126698, 0.011180983856320381, 0.024243051186203957, 0.027938013896346092, 0.009403331205248833, -0.010856325738132, 0.04260968789458275, -0.004593981895595789, -0.015177122317254543, -0.0384662039577961, 0.001959916902706027, 0.0091429827734828, 0.05709239840507507, 0.00589834013953805, -0.01198508683592081, 0.005749301984906197, 0.012077556923031807, -0.022280437871813774, -0.013665805570781231, -0.013673043809831142, 0.026631878688931465, -0.015748394653201103, 0.02825436368584633, 0.005322183482348919, 0.0010631384793668985, 0.08512438088655472, 0.02929817885160446, 0.04203704372048378, 0.00417577987536788, 0.04555893316864967, 0.003052642336115241, -0.014580800198018551, -0.09493523091077805, -0.005387275014072657, 0.03987632691860199, -0.013784509152173996, -0.007370011880993843, 0.01946396380662918, 0.003688785480335355, -0.028902146965265274, 0.02561979554593563, -0.025615889579057693, 0.025517133995890617, 0.02548080123960972, 0.037999264895915985, 0.0016650203615427017, 0.016218429431319237, 0.024727150797843933, -0.02063998021185398, -0.004482806660234928, -0.015262356027960777, 0.021247701719403267, -0.0245425496250391, 0.0015340925892814994, 0.048563290387392044, -0.01060846634209156, 0.008312439545989037, -0.014349054545164108, 0.015964530408382416, 0.016129648312926292, 0.019192887470126152, 0.012923574075102806, -0.03320423141121864, 0.07304051518440247, -0.02228502184152603, 0.034212008118629456, 0.0022090880665928125, 0.027351506054401398, 0.008957226760685444, -0.06304093450307846, -0.050308845937252045, -0.01619361899793148, -0.020338401198387146, 0.04474305734038353, -0.047185514122247696, -0.03940850496292114, -0.03321423381567001, -0.008630046620965004, -0.02658686973154545, 0.006039396859705448, -0.10700958967208862, 0.0068387784995138645, 0.03535972163081169, 0.013556056655943394, 0.012985753826797009, -0.025445731356739998, 0.011299239471554756, -0.05502929538488388, -0.00908839050680399, 0.09236826002597809, 0.03069409914314747, 0.013957860879600048, 0.006814303807914257, 0.05687561258673668, 0.0483560673892498, 0.0354374535381794, -0.02931002900004387, 0.012683805078268051, -0.00422412296757102, 0.003100838977843523, -0.024427494034171104, -0.005383905488997698, -0.1490708440542221, -0.05858771130442619, 0.004056710749864578, -0.05046043545007706, -0.020692121237516403, -0.02772633545100689, -0.009015008807182312, -0.005964153446257114, -0.0028487255331128836, 0.10973335802555084, 0.0017095006769523025, -0.029398920014500618, 0.0418756939470768, 0.13477946817874908, -0.01172309648245573, -0.002083791419863701, -0.019014807417988777, -0.007104113232344389, 0.05180532857775688, -0.005638334434479475, 0.028459928929805756, 0.015793630853295326, -0.043393488973379135, 0.05762263387441635, -0.02211766131222248, 0.009012873284518719, 0.009463564492762089, -0.017369979992508888, 0.025267088785767555, -0.029030654579401016, 0.023258917033672333, 0.026547735556960106, 0.00981396809220314, -0.03326954320073128, 0.08310758322477341, 0.05614631623029709, -0.020036151632666588, -0.025324609130620956, -0.004589305259287357, -0.2540397047996521, 0.02519642375409603, 0.025909002870321274, -0.059879519045352936, 0.0006252392777241766, 0.008143779821693897, -0.05813546106219292, 0.013824732974171638, -9.729441808303818e-05, 0.007302827667444944, -0.02748633362352848, 0.002159935887902975, 0.02056293562054634, 0.040041420608758926, 0.010442220605909824, 0.02251015417277813, 0.03614961355924606, -0.03675312548875809, 0.03303385525941849, 0.0031926564406603575, 0.008475663140416145, 0.004948034882545471, -0.019553186371922493, 0.02054583467543125, 0.09821998327970505, 0.0039049568586051464, -0.012653824873268604, 0.003004072466865182, -0.004925272893160582, 0.03083113767206669, -0.018524814397096634, 0.013148343190550804, 0.008169624954462051, -0.005949834361672401, -0.005529439076781273, 0.005952904932200909, 0.029773540794849396, -0.046214740723371506, 0.02678736299276352, 0.043650783598423004, 0.021100999787449837, -0.007324377074837685, 0.01214586291462183, -0.012256462126970291, 0.025394892320036888, -0.018773827701807022, 0.02030859887599945, -0.04039279371500015, 0.021272536367177963, -0.028124239295721054, -0.0183348897844553, -0.031050076708197594, -0.02025168389081955, -0.016338977962732315, 0.013275040313601494, -0.014108470641076565, -0.022329753264784813, 0.011746573261916637, 0.035356055945158005, 0.01728047989308834, -0.005023767706006765, -0.007845893502235413, 0.021376151591539383, 0.004630689509212971, 0.0073084235191345215, -0.011842400766909122, -0.013629748485982418, -0.021756023168563843, 0.0026077907532453537, 0.020828047767281532, -0.035440947860479355, 0.03731925040483475, -0.005118176341056824, -0.006735215429216623, 0.00019989133579656482, -0.00877094641327858, -0.05230670049786568, 0.027622248977422714, 0.04139132425189018, -0.0005003635305911303, -0.038438670337200165, 0.019670268520712852, -0.01303816307336092, 0.011311160400509834]\"\n./train/knee_pad/n03623198_7294.JPEG,knee_pad,\"[-0.016579125076532364, 0.0015200992347672582, -0.003965983632951975, -0.029537152498960495, 0.0035184454172849655, -0.0054880715906620026, 0.003944565076380968, 0.06778626888990402, -0.008047990500926971, -0.012166772969067097, 0.020874515175819397, 0.006210431456565857, 0.045730236917734146, -0.0005643399199470878, 0.016189564019441605, -0.024747055023908615, 0.05772490054368973, 0.024209292605519295, -0.04117211326956749, -0.04010673239827156, -0.08954255282878876, -0.0244295597076416, -0.002849188633263111, 0.0026308598462492228, -0.008972768671810627, 0.02933291345834732, -0.004031633958220482, -0.010609934106469154, -0.006089930888265371, 0.013615514151751995, -0.02348421886563301, 0.010297388769686222, 0.005299607757478952, 0.0011356413597241044, -0.01376150082796812, -0.002078247955068946, -0.0064325821585953236, -0.03452954813838005, -0.027303891256451607, 0.02599264681339264, 0.035337336361408234, -0.0018285728292539716, 0.021540982648730278, -8.032665937207639e-05, 0.023363955318927765, -0.08911535888910294, -0.011856816709041595, 0.006188392639160156, 0.013699413277208805, -0.014567745849490166, 0.042515501379966736, -0.006355289835482836, 0.006186210084706545, -0.014159729704260826, -0.012359175831079483, 0.003329313825815916, -0.0312093123793602, 0.023840418085455894, 0.02831365168094635, 0.0010564234107732773, 0.027168165892362595, -0.008673864416778088, 0.05230157822370529, -0.0054652695544064045, -0.04984210804104805, -0.0448327399790287, 0.04710835590958595, -0.00456991046667099, 0.003340114839375019, 0.01310897246003151, -0.01522856019437313, -0.0355168953537941, -0.030094068497419357, -0.019156107679009438, -0.04832850396633148, -0.00041743062320165336, 0.033568572252988815, -0.017920298501849174, 0.03836046904325485, 0.024937471374869347, 0.021977007389068604, -0.04220851510763168, -0.019413838163018227, -0.012806430459022522, 0.054917335510253906, -0.02384447678923607, 0.08083676546812057, -0.016256168484687805, -0.006013516802340746, -0.008832888677716255, -0.013604397885501385, -0.03335065767168999, -0.6803209781646729, 0.03874975070357323, -0.02056426927447319, -0.015383437275886536, -0.014027898199856281, 0.015576893463730812, -0.04706769809126854, 0.056371428072452545, -0.02704964019358158, -0.031366925686597824, 0.036299996078014374, -0.029024383053183556, 0.025881191715598106, -0.01858064904808998, -0.17488539218902588, -0.045293692499399185, -0.0028959468472748995, -0.02872406132519245, -0.0047946348786354065, 0.011012635193765163, -0.009226996451616287, 0.0005451890756376088, -0.042288005352020264, -0.025089949369430542, 0.030877424404025078, -0.008695816621184349, -0.03418334946036339, -0.012211566790938377, 0.027047665789723396, 0.009259941056370735, -0.04486336186528206, -0.003458369290456176, -0.01459062285721302, 0.05222431197762489, -0.04551548510789871, 0.03563202545046806, 0.009566518478095531, 0.017177646979689598, -0.018687674775719643, -0.05424770340323448, 0.004909242037683725, 0.08605353534221649, -0.023958547040820122, -0.01808967813849449, -0.01154564879834652, -0.008041724562644958, 0.012542035430669785, -0.017206311225891113, -0.011803642846643925, -0.03160468861460686, -0.01842355728149414, -0.007833998650312424, -0.0009474629769101739, -0.029232917353510857, 0.0031763024162501097, -0.05032168701291084, -0.02803509496152401, -0.03602380305528641, -0.011723492294549942, -0.002276020823046565, 0.04988755285739899, -0.04847036674618721, 0.011536620557308197, -0.018987150862812996, -0.010682256892323494, 0.017464905977249146, 0.02817980758845806, -0.029370155185461044, -0.022870594635605812, 0.00671807024627924, 0.04610823839902878, -0.001532697002403438, 0.0344223715364933, -0.026968225836753845, 0.025486215949058533, 0.002753942273557186, 0.019437870010733604, 0.001162312226369977, -0.0010484580416232347, 0.009090794250369072, 0.005754287354648113, -0.023044921457767487, 0.0019092601723968983, -0.005007319618016481, 0.03857291489839554, 0.01112943422049284, -0.0524003691971302, 0.015775321051478386, 0.05953577533364296, 0.002750048413872719, 0.07223712652921677, -0.055901698768138885, -0.0014185294276103377, -0.019430281594395638, 0.02325013093650341, -0.015100829303264618, -0.025400996208190918, 0.006883671507239342, 0.011134155094623566, 0.028410999104380608, -0.02887895703315735, 0.004493447951972485, 0.06975996494293213, -0.03703976795077324, -0.015761520713567734, 0.03053971566259861, -0.023448554798960686, 0.02723454311490059, 0.006524193566292524, -0.02671232633292675, -0.004090035334229469, 0.04558345302939415, 0.018639273941516876, -0.03039463795721531, 0.014017853885889053, -0.02173563838005066, -0.06312286108732224, 0.026003073900938034, -0.015240006148815155, -0.05403567850589752, 0.008537397719919682, -0.01965879648923874, 0.0005302452482283115, 0.023078029975295067, -0.041824113577604294, 0.0121031254529953, -0.03733457997441292, 0.007857170887291431, 0.0038282752502709627, -0.06975400447845459, -0.0068832505494356155, 0.025603968650102615, -0.009256226941943169, 0.05621280148625374, -0.020193560048937798, 0.008010241203010082, 0.018443098291754723, 0.004968029912561178, -0.0031283835414797068, -0.0028427764773368835, -0.011737380176782608, 0.10807971656322479, -0.008968629874289036, 0.011873754672706127, 0.04034728184342384, -0.010090692900121212, -0.027492517605423927, -0.015425439924001694, -0.0008635025005787611, -0.025258615612983704, -0.011824961751699448, -0.005574118811637163, 0.014956437982618809, -0.022047359496355057, 0.01266541052609682, 0.02076825685799122, -0.0026586372405290604, 0.024979444220662117, 0.01237181294709444, -0.02963782660663128, 0.006575917825102806, -0.03588929399847984, -0.01682271435856819, 0.014332633465528488, 0.002430812455713749, 0.012079721316695213, -0.08214446902275085, 0.028711287304759026, 0.06791681051254272, 0.04912303015589714, -0.043289683759212494, -0.032504741102457047, -0.017285354435443878, 0.031032469123601913, -0.03056354820728302, 0.005284002050757408, 0.00024818332167342305, -0.02401270531117916, -0.029660450294613838, 0.03504203259944916, -0.002016874263063073, 0.012970829382538795, 0.017514673992991447, -0.021505888551473618, 0.02571316808462143, 0.0007462006178684533, -0.014579887501895428, 0.008209657855331898, -0.04040192812681198, 0.03545166924595833, -0.04853205382823944, -0.02124687470495701, -0.0019246325828135014, 0.016789071261882782, 0.06012609228491783, 0.01193222962319851, -0.007213940378278494, -0.020091792568564415, 0.026783404871821404, 0.002244187518954277, -0.007695206440985203, -0.01780243031680584, 0.021846579387784004, -0.019733279943466187, 0.00742657296359539, 0.01928660273551941, 0.02224184013903141, 0.02053394727408886, 0.02667560614645481, 0.006281016860157251, 0.014805829152464867, -0.006169015541672707, 0.01431755069643259, -0.06033993512392044, 0.028083698824048042, 0.04598985239863396, -0.05032062903046608, 0.011519362218677998, 0.00876411609351635, 0.03308388590812683, 0.08604207634925842, -0.038132019340991974, 0.008918317034840584, 0.008895640261471272, -0.015541058965027332, -0.028766393661499023, -0.011498410254716873, -0.07321101427078247, -0.013998345471918583, 0.15721486508846283, -0.040711235255002975, -0.022937102243304253, 0.06039200723171234, -0.003552020527422428, 0.024014070630073547, 0.04258464276790619, -0.019903425127267838, 0.01810583658516407, -0.01595655456185341, 0.03290437534451485, -0.024648644030094147, -0.012609167955815792, -0.012425241991877556, 0.014227545820176601, 0.0040813940577209, 0.019451996311545372, -0.03909240663051605, -0.04070015996694565, -0.009706017561256886, 0.02377156913280487, 0.03393220528960228, 0.006291345227509737, -0.01780703477561474, -0.0030608263332396746, -0.0033669942058622837, 0.017041705548763275, 0.02667565457522869, -0.03513281047344208, -0.0014827125705778599, 0.015455571003258228, 0.011244109831750393, 0.05351249501109123, 0.036222804337739944, -0.022228170186281204, -0.06895168125629425, 0.04977228119969368, 0.003220481565222144, -0.016719182953238487, 0.04753017798066139, -0.01993175409734249, -0.019014395773410797, -0.05027727037668228, 0.016068805009126663, -0.01911400444805622, 0.01753384806215763, -0.07185224443674088, -0.0337495282292366, 0.03430289402604103, 0.005527987610548735, -0.004068959504365921, -0.020380899310112, -0.014210446737706661, -0.020255055278539658, -0.018062980845570564, 0.12892669439315796, 0.0017505127470940351, -0.047238729894161224, 0.006815882865339518, 0.013142909854650497, -0.020274445414543152, 0.015944713726639748, 0.029798276722431183, -0.027559898793697357, -0.007415457163006067, -0.017900729551911354, -0.029247501865029335, -0.02747759222984314, -0.0335034504532814, -0.07116582244634628, 0.003708118572831154, 0.01564553938806057, 0.01878802850842476, -0.037491895258426666, -0.01022067666053772, 0.013235588558018208, -0.020190143957734108, 0.01139750611037016, 0.037618327885866165, -0.037304945290088654, 0.01100184302777052, 0.11597009748220444, -0.026053451001644135, 0.01303575374186039, -0.009959426708519459, 0.035326723009347916, -0.014605464413762093, -0.033650871366262436, 0.03246228024363518, 0.03889721632003784, 0.022839920595288277, -0.005261317361146212, 0.021320072934031487, 0.009763904847204685, 0.0072612822987139225, -0.01952234096825123, 0.050353042781353, -0.06265506893396378, -0.028188763186335564, 0.004758363123983145, -0.013668148778378963, 0.032050956040620804, 0.03967542201280594, 0.044651079922914505, 0.004414557479321957, -0.034567542374134064, -0.03821629658341408, -0.11642422527074814, 0.030432701110839844, 0.011983726173639297, 0.016723351553082466, 0.030947213992476463, -0.029811400920152664, 0.01314680278301239, 0.008987787179648876, -0.0023727051448076963, -0.04782894626259804, -0.018058402463793755, -0.006604814436286688, 0.006664660293608904, 0.03980353847146034, 0.05109690874814987, 0.021350307390093803, 0.024255899712443352, -0.06833512336015701, 0.0011024422710761428, 0.028798487037420273, -0.058243125677108765, 0.05414591729640961, -0.006464890204370022, -0.006605371367186308, -0.0061292583122849464, -0.08271332085132599, -0.0006808407488279045, -0.03490515425801277, -0.05739947780966759, 0.026527272537350655, 0.022482270374894142, 0.03376755118370056, 0.023713551461696625, 0.005921141244471073, -0.003677456406876445, 0.023825570940971375, -0.004512087441980839, 0.014242228120565414, 0.04109061881899834, 0.01799314096570015, -0.014756272546947002, -0.0631551519036293, -0.026021843776106834, 0.008029486984014511, -0.0021838522516191006, -0.009828630834817886, 0.024263309314846992, 0.009708904661238194, -0.012398993596434593, -0.03839564695954323, 0.025264449417591095, -0.0034200530499219894, -0.010169836692512035, -0.015525130555033684, -0.02066808007657528, 0.004351859446614981, 0.020082348957657814, -0.01708606258034706, -0.009118031710386276, 0.008651704527437687, 0.02106945961713791, 0.012315532192587852, -0.018657278269529343, 0.034948620945215225, -0.023791734129190445, -0.02898647077381611, -0.01394638977944851, -0.045089028775691986, 0.02535329945385456, -0.0015627635875716805, -0.04621526226401329, 0.0075173876248300076, 0.0006718837539665401, 0.004861081019043922, -0.02489936538040638, -0.002103739883750677, 0.007283593062311411, 0.020878203213214874, -0.020265309140086174, -0.012905499897897243, -0.032839272171258926, 0.0502450056374073, -0.04181181639432907, -0.011189768090844154]\"\n./train/knee_pad/n03623198_11556.JPEG,knee_pad,\"[-0.016324587166309357, 0.005816356744617224, 0.05315540358424187, 0.03134118765592575, -0.026548586785793304, 0.020916858687996864, -0.007257786579430103, 0.011700942181050777, 0.016181712970137596, -0.03150821477174759, 0.06731806695461273, -0.02029573917388916, 0.02095276303589344, 0.0185171477496624, 0.013754208572208881, -0.0005920013645663857, 0.09449837356805801, 0.021945545449852943, -0.034879621118307114, -0.045222487300634384, -0.051853153854608536, 0.008457440882921219, 0.029857970774173737, -0.012982086278498173, -0.013122103177011013, 0.018946515396237373, 0.028938891366124153, 0.0180381890386343, 0.01608601212501526, 0.017684584483504295, 0.008631364442408085, 0.015530685894191265, -0.03403637930750847, -0.01648222841322422, -0.05729268118739128, -0.0009521589381620288, 0.03014279715716839, -0.0023502458352595568, 0.009977808222174644, 0.04614096134901047, -0.0026885545812547207, -0.06870639324188232, -0.03826189786195755, -0.02306213788688183, 0.0641150251030922, -0.10641948133707047, 0.023661373183131218, 0.016569623723626137, -0.11592596024274826, 0.02820160798728466, 0.08292590081691742, 0.01237236987799406, 0.012467630207538605, 0.002246591029688716, -0.011845906265079975, -0.00015347552835009992, -0.010407461784780025, 0.016851138323545456, -0.013076039031147957, -0.014888828620314598, 0.09268491715192795, 0.00459491740912199, -0.025515887886285782, -0.001264349091798067, -0.060194820165634155, -0.020647497847676277, 0.0037974161095917225, 0.07829742878675461, 0.0693586990237236, -0.0067106205970048904, -0.001920699025504291, -0.03930530324578285, 0.02591613493859768, 0.0006132589769549668, 0.006001780275255442, 0.04117149859666824, 0.038796503096818924, -0.004717129748314619, -0.014761856757104397, -0.010412361472845078, 0.013693799264729023, -0.03707103803753853, 0.005101187154650688, 0.01598002389073372, -0.01448388397693634, 0.0055826022289693356, 0.03943497687578201, -0.01733347959816456, 0.02500106766819954, -0.017692510038614273, -0.017891792580485344, -0.060556817799806595, -0.6283513903617859, -0.004211144521832466, -0.020988639444112778, 0.012295189313590527, 0.038059134036302567, 0.04354063421487808, 0.011624385602772236, 0.060233451426029205, 0.018959181383252144, -0.016398640349507332, 0.05581741780042648, -0.0070360759273171425, 0.06576065719127655, 0.03457585349678993, -0.11316636949777603, -0.009310665540397167, -0.0073944577015936375, 0.0030784800183027983, -0.008533663116395473, 0.026658430695533752, -0.0019989577122032642, -0.007351309061050415, -0.030890826135873795, -0.05237920954823494, -0.06392470747232437, -0.030048800632357597, -0.01722724735736847, 0.004343814216554165, -0.0361194834113121, -0.03212853521108627, -0.02427407167851925, 0.017548106610774994, 0.014414952136576176, 0.03663159906864166, -0.022444821894168854, -0.025171978399157524, 0.01029461994767189, -0.0024405750446021557, -0.017453357577323914, -0.0067596291191875935, -0.03497889265418053, 0.08840017765760422, 0.03610015660524368, 0.006663179025053978, -0.007874984294176102, -0.07673680782318115, -0.01761787012219429, -0.014783949591219425, 0.047997646033763885, 0.04168266803026199, -0.000796050822827965, 0.04211049899458885, -0.0006736077484674752, 0.0006307167350314558, 0.05471770092844963, -0.031698647886514664, -0.04857976734638214, 0.0027568109799176455, -0.004876449704170227, -0.003940435126423836, -0.015235223807394505, -0.004498702939599752, -0.014558453112840652, -0.02962987683713436, 0.012702997773885727, -0.03848297894001007, 0.02359406277537346, 0.01790708303451538, -0.023487253114581108, -0.010573784820735455, 0.02597852610051632, 0.00991352554410696, 0.03887638449668884, -0.05150528624653816, 0.05367467552423477, 0.011565192602574825, 0.0033287196420133114, -0.001232942333444953, -0.018735140562057495, -0.011840668506920338, 0.0035725769121199846, -0.010041232220828533, -0.017439663410186768, -0.050621192902326584, 0.052227675914764404, 0.021873267367482185, -0.04315686225891113, -0.00633831974118948, 0.03410685062408447, -0.03784315288066864, 0.06812188774347305, -0.007410629186779261, -0.021736852824687958, -0.007774120196700096, 0.06118441000580788, -0.004087352659553289, -0.01547706313431263, 0.02417384274303913, 0.008852826431393623, 0.025937844067811966, -0.01992940902709961, 0.04431542381644249, 0.02912338636815548, -0.012148556299507618, -0.04474940150976181, -0.03411032259464264, -0.05744394659996033, -0.04433157294988632, 0.02190888114273548, -0.019158991053700447, 0.026346366852521896, 0.056784696877002716, 0.036751292645931244, -0.05745066702365875, 0.022252416238188744, -0.0013789973454549909, -0.05843845009803772, 0.0031840961892157793, -0.0329989455640316, -0.02138039842247963, -0.031386736780405045, 0.02581188827753067, -0.017654171213507652, -0.015140853822231293, -0.024745196104049683, 0.008089287206530571, 0.004765195306390524, 0.0338565818965435, -0.027375252917408943, -0.02901504933834076, -0.008079552091658115, -0.019025441259145737, -0.019526425749063492, 0.008862902410328388, -0.03584396466612816, 0.015619555488228798, 0.03288613632321358, 0.02981995977461338, -0.004313098732382059, -0.007691930513828993, 0.04518406465649605, 0.03874070569872856, -0.006425631232559681, -0.03301152586936951, -0.0016736187972128391, -0.03514576330780983, -0.002130841836333275, 0.013588441535830498, 0.01644197106361389, -0.022230999544262886, -0.013603541068732738, 0.02818085439503193, -0.0008023607661016285, 0.0021707159467041492, 0.028353163972496986, 0.004581948276609182, -0.01986646093428135, 0.012988317757844925, -0.019966971129179, -0.01825244165956974, -0.01991541124880314, -0.007317428011447191, 0.03346794843673706, -0.0006700647645629942, -0.009448659606277943, 0.00919990986585617, 0.024316487833857536, 0.010184591636061668, 0.0055117737501859665, -0.0062865703366696835, 0.022215278819203377, 0.009844625368714333, -0.009191052056849003, 0.021317824721336365, 0.008510749787092209, -0.011293102987110615, 0.0011193384416401386, 0.018429754301905632, -0.05178296938538551, 0.007882676087319851, -0.009269295260310173, -0.05379502847790718, 0.03627290949225426, 0.020479269325733185, -0.03388608992099762, -0.0028298322577029467, -0.005443361587822437, 0.0008896120125427842, 0.0002666393993422389, -0.0341184176504612, -0.07659862190485, -0.005056432913988829, -0.0021082765888422728, 0.04750989004969597, -0.020404040813446045, 0.01997370645403862, 0.03865060210227966, -0.04217630997300148, 0.05347580462694168, -0.027881521731615067, -0.036989692598581314, 0.015599347651004791, -0.019757427275180817, 0.024483904242515564, -0.0758996456861496, 0.00678036967292428, 0.017302144318819046, 0.04807225987315178, 0.04845893383026123, -0.01507606077939272, -0.030703751370310783, 0.025175856426358223, -0.034541502594947815, -0.04747609794139862, -0.06312307715415955, 0.08079230785369873, 0.0038777459412813187, -0.0011316495947539806, -0.006673902273178101, 0.05803708732128143, 0.08829493075609207, -0.0045174360275268555, 0.044997308403253555, 0.010948055423796177, 0.04599178209900856, -0.021760599687695503, -0.005719504319131374, -0.03824406489729881, 0.03894217312335968, 0.03079693205654621, -0.03931277245283127, 0.0267021581530571, 0.0051034134812653065, -0.006357039324939251, -0.024995239451527596, 0.022526070475578308, -0.02109490893781185, 0.020765120163559914, 0.023405728861689568, 0.011686707846820354, -0.003337183967232704, 0.006727705243974924, -0.02635861188173294, 0.029800880700349808, -0.011063153855502605, -0.026520024985074997, -0.0026225480251014233, 0.00045044408761896193, -0.06305695325136185, 0.01975046470761299, 0.009576705284416676, -0.008949186652898788, 0.011304659768939018, 0.01219968218356371, 0.017153918743133545, 0.03039686754345894, 0.06698233634233475, -0.002905569737777114, 0.00020045199198648334, -0.0031532428693026304, 0.013206332921981812, -0.005936683155596256, 0.0031193688046187162, -0.04792289063334465, -0.0570853091776371, 0.02733432501554489, -0.008492016233503819, -0.022426169365644455, 0.06222960725426674, -0.01765139028429985, -0.029709910973906517, -0.06603512167930603, 0.01870490424335003, -0.020962923765182495, 0.0011540809646248817, -0.10649165511131287, 0.030180752277374268, 0.0675269067287445, -0.010827532038092613, 0.030621761456131935, -0.0027323043905198574, 0.018807074055075645, -0.008250917308032513, 0.04308852180838585, 0.1365346908569336, 0.06294147670269012, -0.0460207536816597, 0.003314606612548232, 0.045370131731033325, 0.016474900767207146, 0.021162129938602448, 0.005274132825434208, -0.005267493426799774, 0.0005539111443795264, -0.031111642718315125, -0.008455534465610981, -0.028278937563300133, -0.1182178258895874, -0.049190253019332886, 0.031221546232700348, -0.009096748195588589, 0.014068327844142914, -0.02989567071199417, -0.009625328704714775, -0.01656256429851055, 0.03003889136016369, 0.05906711146235466, 0.02596832625567913, -0.0266403891146183, 0.027095042169094086, 0.16586154699325562, 0.001193744014017284, 0.013539057224988937, -0.020903199911117554, -0.0020773911383002996, -0.012656915932893753, -0.03310752660036087, 0.02723458595573902, -0.0024562012404203415, -0.01988540217280388, 0.02447204850614071, 0.020074710249900818, -0.02626044675707817, -0.009961930103600025, -0.010759464465081692, -0.006493149790912867, -0.039682552218437195, -0.021840926259756088, 0.020468806847929955, 0.031376346945762634, 3.93996424463694e-06, 0.11293649673461914, -0.0020841192454099655, 0.011664276011288166, -0.05547744035720825, -0.022849945351481438, -0.10448965430259705, 0.02155967801809311, -0.032323822379112244, 0.04126427695155144, -0.0037099665496498346, 0.006729165557771921, -0.02714359201490879, -0.01380248460918665, -0.08605970442295074, -0.014385568909347057, -0.02401783876121044, -0.005874316208064556, 0.016504935920238495, 0.04440407082438469, 0.04739855229854584, 0.025159617885947227, 0.053730227053165436, -0.022771675139665604, 0.03508457913994789, -0.006540889386087656, 0.008731554262340069, 0.033604782074689865, -0.04703640192747116, -0.0009808923350647092, 0.0377797856926918, -0.017358606681227684, 0.013723518699407578, -0.011466705240309238, -0.027738898992538452, 0.016623299568891525, -0.022594863548874855, 0.010068004950881004, -0.026595059782266617, 0.03189602494239807, 0.007376561406999826, 0.0017838506028056145, 0.025481946766376495, -0.03709058091044426, 0.044902265071868896, 0.004885484930127859, -0.05853816866874695, -0.03401310369372368, -0.012134344317018986, -0.01678111031651497, 0.02665439248085022, -0.03531255945563316, 0.051593996584415436, -0.012914315797388554, 0.027644064277410507, 0.0213220976293087, -0.02699991688132286, -0.04569544270634651, -0.0028106817044317722, 0.02781687118113041, -0.008087697438895702, 0.0009960730094462633, 0.006711345165967941, -0.018766110762953758, 0.01771303080022335, 0.024312341585755348, 0.0018186051165685058, -0.0038468781858682632, 0.006001865491271019, 0.0109647735953331, 0.005781527608633041, -0.06806749850511551, 0.016575338318943977, -0.010007592849433422, 0.034237392246723175, -7.35404173610732e-05, -0.07236824929714203, 0.0040708924643695354, 0.03810099884867668, 0.00014689183444716036, -0.001135411555878818, 0.01157173328101635, 0.01248777937144041, 0.012559903785586357, 0.024332765489816666, -0.02253030426800251, 0.011051777750253677, 0.07595524936914444, 0.013721498660743237, 0.02280956506729126]\"\n./train/lion/n02129165_19875.JPEG,lion,\"[-0.015019734390079975, -0.007332730572670698, 0.016652319580316544, 0.02002563141286373, 0.011443368159234524, 0.027431631460785866, 0.041515544056892395, -0.008169912733137608, 0.055604252964258194, -0.014036859385669231, 0.006710996851325035, 0.012555358000099659, 0.014276966452598572, -0.023103313520550728, 0.006653125863522291, -0.04291477054357529, -0.02833572030067444, 0.05311780795454979, -0.022651605308055878, 0.05494360253214836, 0.0004186639271210879, -0.006390695925801992, 0.01638546586036682, -0.018900005146861076, -0.022921467199921608, 0.01507753785699606, -0.03273541107773781, -0.01558502484112978, -0.00038862868677824736, -0.06420917809009552, 0.024556603282690048, -0.036429595202207565, 0.011415488086640835, 0.005967243574559689, -0.043766338378190994, -0.008764983154833317, 0.02022230252623558, 0.048749204725027084, -0.011311288923025131, 0.11676967144012451, 0.006358708720654249, 0.03231769800186157, 0.017938507720828056, -0.03751351311802864, -0.00801593717187643, -0.1258961707353592, 0.045899078249931335, 0.033139608800411224, -0.01012851856648922, 0.00294638704508543, -0.010137355886399746, 0.014988405629992485, 0.03197585418820381, -0.033216699957847595, -0.0657699704170227, 0.06351079046726227, 0.017782486975193024, 0.07500585168600082, 0.048076845705509186, 0.024115687236189842, -0.020510127767920494, 0.03400804102420807, -0.03574313595890999, 0.060896605253219604, -0.04527519270777702, -0.04385468736290932, -0.013230710290372372, 0.10086674988269806, -0.03189762309193611, 0.0175842996686697, -0.02583722583949566, -0.012164182960987091, 0.021528227254748344, -0.014991446398198605, -0.02655656635761261, -0.05755792558193207, -0.013792089186608791, 0.021499361842870712, -0.08616571128368378, -0.027745310217142105, 0.00949446763843298, 0.019395902752876282, -0.01230072695761919, 0.03330327197909355, 0.05007234960794449, -0.006707966327667236, -0.03249149024486542, -0.01507211197167635, 0.08647968620061874, -0.01496230997145176, -0.017443884164094925, 0.009138796478509903, -0.5791970491409302, 0.011100592091679573, -0.022135216742753983, 0.007729560136795044, 0.01663898304104805, 0.009913316927850246, -0.043883636593818665, -0.01691395789384842, -0.009376266971230507, 0.011454611085355282, -0.04991498962044716, 0.059782810509204865, -0.020358415320515633, -0.017179755493998528, -0.10264525562524796, 0.002807117300108075, 0.021357771009206772, 0.002174263820052147, -0.0638333261013031, -0.034163691103458405, 0.002283178735524416, -0.012510165572166443, 0.017713528126478195, -0.010082620196044445, 0.040363311767578125, -0.02476201206445694, 0.035089846700429916, 0.022509364411234856, 0.003752215299755335, 0.041249364614486694, 0.02854974754154682, 0.01275735441595316, -0.05275293067097664, -0.015124663710594177, 0.011186203919351101, 0.029409904032945633, -0.014941930770874023, -0.015940656885504723, -0.038024723529815674, -0.05092121660709381, 4.9366921302862465e-05, 0.07398536056280136, -0.011064963415265083, -0.005218361504375935, -0.008362102322280407, -0.031076572835445404, -0.014021490700542927, 0.013472107239067554, -0.05746554210782051, -0.026252172887325287, -0.04440617933869362, 0.014683686196804047, -0.02396209165453911, 0.0058569698594510555, -0.02992182970046997, -0.02643454261124134, 0.0015112431719899178, 0.018697509542107582, -0.024122066795825958, -0.03128202259540558, 0.006041246931999922, -0.0022306290920823812, 0.029291050508618355, 0.040956370532512665, 0.015357120893895626, 0.03430599346756935, 0.0643744245171547, 0.025990350171923637, -0.05368587374687195, -0.01964428462088108, 0.02094678394496441, -0.0174882672727108, -0.02093292586505413, -0.0026817326433956623, -0.04361138865351677, -0.0032520240638405085, -0.01761304773390293, 0.0353405699133873, 0.00612663384526968, 0.03184313699603081, 0.010112755931913853, 0.002259677741676569, -0.04067119583487511, 0.011834767647087574, -0.07529240101575851, 0.03964458033442497, -0.04763147979974747, 0.005898206494748592, 0.010803282260894775, -0.025975901633501053, 0.03086559846997261, -0.03325619176030159, -0.01764334738254547, -0.008831641636788845, 0.024125948548316956, 0.006444022059440613, -0.013853263109922409, 0.02137807011604309, -0.00305590289644897, 0.01252565998584032, 0.01966996118426323, 0.03590608388185501, -0.09684920310974121, 0.024476826190948486, 0.021130776032805443, -0.02551521547138691, -0.01495465636253357, -0.028044119477272034, 0.03718473017215729, 0.015792090445756912, 0.013605956919491291, 0.03590041771531105, -0.0003853841044474393, 0.020020805299282074, 0.025754373520612717, -0.00726561713963747, 0.03592045232653618, 0.004556992556899786, -0.08859620988368988, 0.024576624855399132, 0.02640107087790966, 0.0014171749353408813, -0.006218403577804565, 0.021126657724380493, 0.025547854602336884, 0.0347430445253849, 0.035558126866817474, -0.007535007782280445, 0.021188031882047653, 0.044720884412527084, 0.009480996057391167, -0.01940132863819599, 0.021881939843297005, -0.010849428363144398, -0.02411087602376938, -0.0257825069129467, 0.012197330594062805, 0.023400340229272842, -0.04394811764359474, 0.0047892373986542225, 0.029683366417884827, 0.039658259600400925, 0.04564495012164116, -0.06885987520217896, -0.020030342042446136, -0.009551046416163445, -0.029403170570731163, 0.010357261635363102, -0.029179031029343605, 0.012164815329015255, 0.03869497403502464, -0.006696876138448715, -0.005361638497561216, 0.026043150573968887, -0.03536267951130867, -0.015007070265710354, 0.006045479793101549, 0.035182490944862366, -0.05299736559391022, 0.06470508128404617, 0.012291929684579372, -0.009635357186198235, 0.016133636236190796, 0.033971790224313736, -0.021268030628561974, -0.004308739677071571, 0.2476472705602646, 0.04225859045982361, -0.0032997559756040573, -0.02390671707689762, -0.029836801812052727, 0.09389187395572662, 0.0037927578669041395, 0.018898634240031242, 0.030499715358018875, 0.01068179402500391, 0.0033666950184851885, 0.00874693226069212, -0.0217296052724123, 0.02023588865995407, 0.033493317663669586, 0.03861643746495247, 0.05648494511842728, -0.020777994766831398, -0.019809335470199585, 0.02168969251215458, 0.0005409751902334392, 0.018129775300621986, 0.013450872153043747, 0.03267699480056763, 0.005291023291647434, -0.05497794598340988, 0.035926900804042816, 0.03406328707933426, -0.032694995403289795, -0.026369385421276093, -0.022856557741761208, -0.02034086547791958, -0.03431902080774307, -0.022325288504362106, 0.00035511748865246773, -0.0031524267978966236, 0.0034660291858017445, -0.022941462695598602, 0.144449844956398, 0.030713604763150215, -0.007146872114390135, -0.0457775704562664, -0.03398038074374199, -0.005027386825531721, -0.026824476197361946, 0.012845481745898724, 0.04490911215543747, 0.03416101261973381, 0.015304608270525932, -0.0037760676350444555, 0.007227219175547361, -0.000726974627468735, 0.025269802659749985, 0.007726413197815418, 0.07374715059995651, -0.0561053529381752, 0.025795921683311462, -0.025745781138539314, -0.014514277689158916, 0.039121661335229874, -0.0391048863530159, -0.010409040376543999, -0.0009300036472268403, 0.0901246964931488, 0.0032177662942558527, -0.025733202695846558, 0.03710455447435379, -0.042326416820287704, 0.017386766150593758, -0.012359353713691235, 0.02155943028628826, -0.03581881895661354, 0.02077930048108101, -0.021588025614619255, 0.008114405907690525, -0.032791245728731155, -0.00762569485232234, -0.007490847259759903, 0.009505141526460648, 0.023405427113175392, -0.04309966042637825, -0.005908280611038208, -0.006783910561352968, 0.028193751350045204, 0.004399971105158329, -0.022341903299093246, -0.000701224256772548, -0.022400517016649246, -0.031189288944005966, 0.03518647328019142, -0.01607634499669075, 0.007276453543454409, -0.0432615764439106, 0.024702582508325577, 0.007852334529161453, 0.0509440079331398, -0.008706764318048954, -0.00020463255350477993, -4.84138035972137e-05, -0.1136685237288475, -0.010184869170188904, -0.017732039093971252, 0.09119003266096115, 0.04158806428313255, -0.01639430783689022, 0.030091367661952972, -0.06983962655067444, 0.013888596557080746, 0.005813455209136009, -0.057673875242471695, -0.05862196534872055, 0.05076680704951286, 0.0010747440392151475, -0.018458262085914612, -0.02340054325759411, -0.03821372240781784, 0.04458533227443695, 0.05154431238770485, 0.08135385066270828, 0.016997061669826508, -0.015558741055428982, 0.009500790387392044, 0.02621489204466343, -0.00016834092093631625, -0.0218843724578619, -0.04009894281625748, 0.018928857520222664, 0.09143691509962082, 0.029833823442459106, 0.008607971481978893, -0.04157451167702675, 0.016424717381596565, -0.04310432821512222, -0.044785816222429276, 0.027759717777371407, 0.01931975595653057, 0.03287990391254425, -0.017261898145079613, 0.030373815447092056, 0.02655763551592827, -0.09111478924751282, -0.032874878495931625, 0.01545956265181303, 0.014993860386312008, -0.03281566873192787, -0.007615566719323397, -0.01029630284756422, 0.02710745483636856, -0.05493776872754097, -0.04944790527224541, 0.04459405690431595, -0.004800726193934679, 0.10896799713373184, 0.021471451967954636, -0.0253883209079504, 0.052853308618068695, -0.021441977471113205, -0.029813364148139954, -0.00934947282075882, -0.007415919564664364, 0.027153920382261276, -0.05176062881946564, -0.04110366851091385, 0.011991526931524277, 0.005876548122614622, 0.02044031023979187, 0.02771315537393093, -0.008075087331235409, 0.015143248252570629, -0.011946597136557102, 0.01412948314100504, 0.002877315506339073, -0.00227796146646142, 0.015276005491614342, 0.005123038776218891, -0.011232294142246246, -0.07680242508649826, -0.01751684956252575, 0.019220897927880287, -0.017920400947332382, -0.02612784318625927, -0.024755867198109627, 0.004064553417265415, -0.03282025083899498, -0.03933117911219597, -0.047288186848163605, 0.004524146672338247, 0.02341442182660103, 0.030784349888563156, -0.004277229309082031, 0.029945367947220802, 0.004972160793840885, -0.03510530665516853, -0.051401183009147644, -0.02801363915205002, -0.052938178181648254, 0.0003281319804955274, -0.0367346927523613, 0.08553209155797958, -0.04688430204987526, -0.0059815761633217335, 0.030592089518904686, -0.01280386745929718, 0.0572846494615078, 0.0716002881526947, -0.02821120247244835, 0.02080792561173439, -0.006538664922118187, -0.04870707914233208, -0.016902660951018333, 0.028636744245886803, -0.030073273926973343, 0.00022261857520788908, 0.00918414443731308, -0.013846136629581451, -0.025670833885669708, 0.019307296723127365, -0.05251732096076012, -0.03988282382488251, -0.018996117636561394, -0.009561944752931595, 0.00556078739464283, 0.002417558105662465, -0.02869573049247265, 0.008107895962893963, 0.05800877884030342, 0.02371305786073208, 0.030376553535461426, 0.00638895807787776, -0.015616565942764282, 0.0008169267093762755, -0.04957303777337074, -0.022261524572968483, -0.030015328899025917, 0.0375136099755764, -0.01491496991366148, 0.034859806299209595, 0.005847061984241009, 0.03281540051102638, 0.02699836529791355, 0.019354723393917084, 0.009101767092943192, -0.01534491777420044, 0.060330964624881744, 0.016001496464014053, 0.011704781092703342, -0.0070185535587370396, -0.06221998110413551, 0.03799641132354736, -0.032019153237342834, -0.011105991899967194, 0.03611431270837784, 0.012438495643436909, 0.015433053486049175]\"\n./train/lion/n02129165_16.JPEG,lion,\"[0.036396902054548264, -0.016911417245864868, -0.0009733622428029776, -0.03463451936841011, -0.022810079157352448, -0.018137989565730095, 0.016657257452607155, 0.043397437781095505, -0.008168590255081654, 0.019847411662340164, 0.024201346561312675, -0.018277093768119812, -0.004045441746711731, -0.05262250080704689, 0.0063356319442391396, -0.027913644909858704, 0.039762429893016815, -0.018251655623316765, 0.03312423825263977, 0.05258137732744217, -0.01778014935553074, 0.0329221710562706, 0.04366700351238251, -0.04182606190443039, 0.0017581443535163999, 0.009483512490987778, 0.009042316116392612, 0.03186923265457153, 0.0315481461584568, -0.006063286680728197, 0.025333484634757042, -0.04925064370036125, 0.011182020418345928, 0.004923716653138399, -0.022463232278823853, -0.0002041149855358526, 0.023305635899305344, 0.009227241389453411, 0.0156769510358572, 0.140476793050766, -0.025716347619891167, 0.021934635937213898, 0.04245999827980995, -0.019783401861786842, -0.02338278666138649, 0.0885760560631752, 0.0017193183302879333, 0.03719976916909218, -0.008926240727305412, -0.019454624503850937, -0.015504543669521809, 0.0034006910864263773, 0.026182476431131363, -0.015636736527085304, 0.003794438671320677, 0.03489629551768303, 0.005944998003542423, 0.018949324265122414, 0.022093825042247772, -0.001160781946964562, 0.06891299784183502, 0.009092112071812153, 0.006696658208966255, 0.004768540617078543, 0.024504633620381355, -0.02989061176776886, 0.01378608588129282, 0.015166040509939194, 0.017802849411964417, 0.016599074006080627, -0.03592874854803085, -0.022853128612041473, 0.031835801899433136, 0.010416076518595219, -0.020652176812291145, -0.0008882199181243777, -0.04658733308315277, 0.013837368227541447, -0.033303551375865936, -0.003354072105139494, -0.020442120730876923, -0.013420465402305126, 0.0217729639261961, -0.06099660322070122, 0.023227207362651825, -0.015418324619531631, -0.09023391455411911, -0.027547990903258324, 0.04440651088953018, 0.026659812778234482, 0.024680308997631073, 0.030185088515281677, -0.676810085773468, 0.08572401106357574, -0.06858569383621216, -0.02884017676115036, -0.006890024524182081, -0.020259562879800797, -0.10583405196666718, 0.06553371995687485, -0.0415925495326519, -0.014485865831375122, 0.003609676146879792, 0.044773902744054794, 0.03080679662525654, -0.0061829471960663795, 0.0034675428178161383, 0.05269366130232811, 0.016716856509447098, 0.005823612213134766, 0.005587986670434475, 0.04732469841837883, 0.02275482751429081, 0.018251409754157066, -0.009937308728694916, 0.015947306528687477, 0.008397897705435753, -0.015462679788470268, 0.0412893183529377, 0.026341687887907028, -9.792877244763076e-05, 0.03447934612631798, 0.009661207906901836, 0.010058355517685413, -0.00382331945002079, -0.0016229121247306466, 0.030782774090766907, -0.028603149577975273, -0.006306709721684456, -0.02242748625576496, 0.023297226056456566, 0.013581828214228153, -0.006808644160628319, 0.09108664095401764, 0.006755122449249029, -0.022918691858649254, 0.0015831355703994632, 0.016157275065779686, -0.036681294441223145, -0.020613860338926315, -0.007674351800233126, -0.07057252526283264, 0.013189492747187614, 0.042121391743421555, -0.027958890423178673, -0.009120098315179348, -0.0021225949749350548, -0.02838749997317791, -0.00781264714896679, 0.017930837348103523, 0.01511155255138874, -0.006552712991833687, 0.0301207285374403, 0.0016174863558262587, -0.006958784535527229, 0.048990748822689056, -0.020106198266148567, -0.00984118226915598, 0.006916108541190624, 0.055994294583797455, 0.020514395087957382, -0.005606795195490122, -0.0135157136246562, -0.011414851061999798, 0.038158681243658066, 0.004004389047622681, -0.06817405670881271, -0.0075508649460971355, 0.0042830114252865314, 0.013944990001618862, -0.011525445617735386, 0.03098313696682453, -0.024037668481469154, 0.011238272301852703, -0.004665391985327005, 0.03475933521986008, -0.05123349651694298, -0.03515675663948059, -0.01422420609742403, -0.015658976510167122, 0.0059363748878240585, 0.01945657655596733, 0.0199322197586298, -0.009565001353621483, -0.024105291813611984, -0.032034773379564285, 0.054193660616874695, 0.017412615939974785, 0.0023949621245265007, 0.021288838237524033, 0.015209311619400978, -0.001971573568880558, 0.008890565484762192, 0.01852700486779213, 0.0037669488228857517, 0.04215942695736885, 0.027538686990737915, -0.04208161681890488, -0.06288565695285797, 0.04084630683064461, -0.00026561241247691214, 0.05246533453464508, -0.028476305305957794, -0.020433126017451286, 0.002560623688623309, 0.0037779281847178936, 0.05844748765230179, 0.009621728211641312, 0.03781421482563019, -0.03377329930663109, -0.036808401346206665, 0.011758122593164444, 0.027629928663372993, -0.007387751247733831, -0.00400159927085042, 0.02877744659781456, 0.01667490042746067, 0.018305523321032524, -0.0008485601865686476, 0.03030994161963463, -0.01478817593306303, -0.007924809120595455, 0.02670225501060486, 0.0009907674975693226, -0.013788189738988876, -0.03374042734503746, 0.008043499663472176, -0.021143155172467232, 0.032656073570251465, -0.025831347331404686, -0.0077016400173306465, 0.020610954612493515, 0.05045684054493904, 0.05826374888420105, 0.005800802260637283, -0.016265559941530228, -0.0381462499499321, 0.02984054945409298, -0.007169734686613083, -0.04527374356985092, 0.00978297833353281, 0.012855865992605686, 0.03578633815050125, -0.002959854668006301, -0.02670014090836048, 0.04966159909963608, 0.03936877101659775, -0.017452407628297806, -0.03180748596787453, 0.03225303068757057, 0.03724171593785286, -0.023054393008351326, 0.022486869245767593, -0.013990843668580055, 0.006763089448213577, -0.013664298690855503, -0.01822711154818535, 0.011122960597276688, 0.03791902959346771, 0.027794327586889267, -0.014773044735193253, 0.010092825628817081, -0.011460809037089348, 0.043876491487026215, 0.029489809647202492, 0.003583295503631234, -0.008018454536795616, -0.028166741132736206, 0.023973548784852028, 0.024150608107447624, -0.03177014738321304, 0.012792375870049, 0.0199948288500309, 0.013885464519262314, 0.015081183053553104, -0.018494173884391785, 0.0062710135243833065, -0.010803759098052979, -0.037570733577013016, -0.0301183070987463, 0.028623424470424652, 0.013097859919071198, -0.04404054954648018, 0.0029002230148762465, -0.008373613469302654, 0.005074328742921352, 0.033934757113456726, -0.007993457838892937, -0.01051030121743679, 0.01576784811913967, -0.03920670226216316, 0.02858644537627697, -0.030979759991168976, 0.012777172029018402, 0.009628892876207829, -0.020056836307048798, 0.10449626296758652, -0.02786494791507721, 0.021106138825416565, -0.011739484034478664, 0.02014579437673092, -0.004608530085533857, -0.0015242540976032615, 0.02428467385470867, 0.009971359744668007, 0.0006649151910096407, -0.0171342920511961, 0.0742708146572113, 0.01801542192697525, -0.02890251949429512, -0.009873179718852043, -0.008660579100251198, 0.09095581620931625, -0.03929552808403969, 0.025015398859977722, -0.005779198370873928, -0.012762299738824368, 0.06359190493822098, 0.00899309478700161, -0.021059228107333183, 0.03960349038243294, 0.07851212471723557, 0.03482583165168762, -0.04293617978692055, 0.025760425254702568, 0.02590533159673214, 0.043821677565574646, 0.023676980286836624, 0.03483400121331215, 0.03021719679236412, 0.02979154884815216, -0.02338789403438568, -0.006198480725288391, 0.007080650422722101, 0.011762548238039017, -0.030079852789640427, 0.015425087884068489, 0.06252086907625198, -0.03398390859365463, -0.02891192026436329, -0.0015564319910481572, 0.005826656240969896, -0.015436982735991478, -0.025092534720897675, 0.014431141316890717, 0.012224400416016579, -0.015585719607770443, 0.0006056266720406711, 0.009169533848762512, -0.03170791268348694, -0.027147311717271805, 0.005456159356981516, 0.002300024265423417, 0.005552059970796108, -0.045352499932050705, 0.02898555062711239, 0.0008633824763819575, -0.12059585750102997, -0.019132442772388458, -0.019950589165091515, 0.06764519959688187, -0.005942938849329948, -0.008668391965329647, -0.04694419354200363, -0.10138720273971558, -0.03603024780750275, 0.021206943318247795, -0.018047677353024483, -0.04475916922092438, 0.002927195280790329, 0.009200173430144787, 0.017052235081791878, -0.041336674243211746, 0.01815333589911461, -0.016957439482212067, 0.04431511461734772, 0.11627302318811417, -0.017146503552794456, 0.015241044573485851, -0.0013574666809290648, 0.034887198358774185, -0.006096304394304752, 0.016786236315965652, 0.029186826199293137, -0.023813312873244286, 0.03584791347384453, -0.003264638828113675, 0.01602906547486782, -0.012727160006761551, -0.06642969697713852, -0.05181223154067993, -0.059661220759153366, -0.004528748337179422, 0.03513694554567337, 0.06357140094041824, -0.03926291689276695, -0.01118391938507557, -0.007552360650151968, -0.04058680683374405, -0.06631393730640411, -0.018960319459438324, -0.026235569268465042, 0.006740827113389969, 0.06667007505893707, 0.028019091114401817, -0.03037145547568798, -0.022649336606264114, -0.02365419641137123, 0.026185985654592514, -0.03348499536514282, 0.07095377147197723, 0.01735301874577999, 0.06260565668344498, 0.02939898893237114, -0.01399951707571745, -0.018060676753520966, -0.013769224286079407, -0.006014383863657713, 0.04671633616089821, -0.06231692433357239, -0.042986419051885605, -0.04907481372356415, 0.033755335956811905, 0.04234163835644722, 0.02226395159959793, -0.024035736918449402, 0.022405140101909637, 0.024293269962072372, 0.08296426385641098, -0.03315592557191849, -0.05484386160969734, 0.06279266625642776, 0.03758898004889488, 0.00035322277108207345, -0.02243523672223091, -0.012018664740025997, 0.017353525385260582, 0.02575024589896202, -0.030147727578878403, 0.00590318301692605, 0.0166523028165102, 0.0033863193821161985, -0.07013430446386337, -0.021837472915649414, -0.011725658550858498, -0.005890192463994026, 0.012679978273808956, 0.003305037971585989, 0.013583800755441189, -0.006935552693903446, -0.00970274955034256, -0.014740994200110435, 0.013884142972528934, 0.0240260511636734, 0.05000241473317146, -0.009204549714922905, 0.03485306352376938, 0.023585278540849686, 0.018636653199791908, 0.047623079270124435, 0.00750321801751852, 0.0022196131758391857, 0.04866798594594002, 0.059930432587862015, 0.03837696462869644, 0.007280615158379078, -0.04643120989203453, 0.006852927152067423, -0.012880858965218067, -0.006614581681787968, 0.08749022334814072, -0.0302667748183012, -0.006243125069886446, -0.02853202261030674, -0.0011157100088894367, -0.04406078904867172, 0.008220304735004902, -0.060082219541072845, -0.021099718287587166, -0.039860378950834274, 0.015400797128677368, -0.03113352693617344, 0.018237557262182236, 0.016578951850533485, 0.018099021166563034, 0.02868315577507019, 0.056219689548015594, -0.014498765580356121, 0.04365349933505058, -0.03154010325670242, -0.04097835719585419, -0.008213947527110577, 0.00988795980811119, -0.023832913488149643, 0.031246034428477287, 0.043202415108680725, -0.03569330275058746, 0.018165096640586853, 0.006516059394925833, 0.011006730608642101, -0.05045495554804802, 0.03672277554869652, 0.01974821276962757, 0.007135124411433935, -0.06834108382463455, -0.02708986960351467, 0.0018405842129141092, -0.0012256260961294174, 0.005300640128552914, 0.023318976163864136, 0.010699133388698101, 0.0011755519080907106]\"\n./train/lion/n02129165_5362.JPEG,lion,\"[-0.02597016654908657, 0.020084692165255547, 0.009879271499812603, 0.0028415776323527098, -0.027895264327526093, 0.017088528722524643, 0.03602832555770874, -0.01514675747603178, 0.03642342984676361, 0.003047982696443796, 0.0048470706678926945, -0.01747439242899418, 0.005171701777726412, -0.005930909886956215, -0.007225017994642258, -0.04263928905129433, -0.03991534188389778, 0.01968980021774769, -0.022661594673991203, 0.017203278839588165, -0.03480304405093193, 0.011557511053979397, 0.02939695306122303, -0.015143348835408688, -0.008895735256373882, 0.043131228536367416, -0.019404537975788116, -0.020559359341859818, -0.005863419268280268, -0.02687053009867668, -0.03430405631661415, -0.002334468299522996, 0.026795977726578712, 0.03430952504277229, -0.06507162004709244, -0.030039092525839806, 0.029509060084819794, 0.04631286486983299, -0.011320451274514198, 0.1411380022764206, 0.006424903403967619, 0.0024745448026806116, 0.011224215850234032, -0.027287734672427177, 0.00146578811109066, -0.04536198079586029, 0.03602340817451477, 0.045705873519182205, -0.03346393257379532, 0.01871148869395256, -0.020258452743291855, 0.034544773399829865, 0.02086874283850193, -0.021342920139431953, -0.003947001416236162, 0.03595203161239624, -0.025897599756717682, 0.04742797464132309, -0.00564448582008481, 0.005944791715592146, 0.04161077365279198, -0.004933863878250122, 0.008356795646250248, 0.0061828261241316795, -0.06179863214492798, -0.04361487179994583, 0.00964006781578064, 0.1369311809539795, 0.04777729883790016, -0.008279457688331604, 0.021503346040844917, -0.004612318705767393, 0.008847774937748909, 0.025432920083403587, 0.009731961414217949, -0.02142137661576271, -0.06018728390336037, -0.014309296384453773, -0.02963629551231861, -0.03930354490876198, -0.011117466725409031, 0.027450935915112495, 0.013643479906022549, 0.018508290871977806, 0.04227513074874878, 0.04167966917157173, -0.021340668201446533, -0.008142584003508091, 0.04993334040045738, 0.020231759175658226, -0.00011564127635210752, -0.01574634574353695, -0.621021032333374, 0.040001031011343, -0.043905794620513916, -0.015691019594669342, -0.0251646526157856, 0.01534182857722044, -0.0794510543346405, -0.01195281557738781, -0.008749076165258884, 0.0042149219661951065, -0.03861187398433685, 0.05262107029557228, 0.008635023608803749, 0.018481669947504997, -0.006629360374063253, -0.00685871159657836, 0.006457057781517506, -0.010026504285633564, -0.06379789859056473, -0.036195993423461914, 0.014398057945072651, -0.008033603429794312, -0.03191348910331726, -0.017432797700166702, 0.05110803246498108, -0.04373210296034813, 0.05598368123173714, 0.009433439932763577, 0.030310921370983124, 0.019305208697915077, 0.029925866052508354, 0.02422495000064373, -0.06907182931900024, -0.028764450922608376, 0.0005327906110323966, 0.006649465300142765, 0.0028469909448176622, 0.053201403468847275, 0.00947684608399868, 0.026516027748584747, -0.0009588529355823994, 0.08520457148551941, 0.01413881778717041, 0.0004228672478348017, 0.014933076687157154, -0.0022252958733588457, -0.03937438130378723, 0.005399186164140701, -0.009581143967807293, -0.07278437912464142, 0.037980832159519196, 0.009915678761899471, -0.020830154418945312, 0.01936667039990425, -0.040945738554000854, -0.060735780745744705, 0.010682272724807262, 0.0042112525552511215, -0.02334831841289997, 0.01828884519636631, 0.014468653127551079, -0.016005778685212135, 0.009217019192874432, 0.03796429932117462, -0.0138132618740201, 0.004957802593708038, 0.033899933099746704, 0.04915212094783783, 0.014756560325622559, -0.04670952260494232, -0.030279098078608513, -0.01864270120859146, 0.003793166484683752, -0.0327310711145401, -0.02692868374288082, 0.008560744114220142, 0.013055315241217613, 0.033353570848703384, 0.019443830475211143, 0.038807403296232224, 0.012810810469090939, -0.013980680145323277, -0.02113383449614048, -0.001558263087645173, -0.12111683189868927, 0.0020602650474756956, 0.0018212143331766129, 0.023831000551581383, -0.016243213787674904, 0.022750746458768845, -0.005930778104811907, -0.0389670729637146, -0.0178951695561409, 0.016644587740302086, 0.010352709330618382, 0.010275788605213165, -0.024579528719186783, 0.02879609540104866, 0.008551663719117641, -0.01779712364077568, -0.00607359129935503, 0.03683662414550781, -0.04397379606962204, 0.024008847773075104, 0.015733392909169197, -0.017295464873313904, -0.10471583157777786, 0.006363540887832642, 0.02775220200419426, 0.01837092824280262, 0.013636958785355091, 0.06687462329864502, 0.03525017574429512, 0.04012253135442734, 0.007015942130237818, -0.016702348366379738, 0.02988358587026596, -0.02781744673848152, -0.03244554251432419, 0.014934232458472252, 0.04858457297086716, 0.019109204411506653, -0.037100084125995636, 0.026970544829964638, 0.05130869522690773, 0.02166016213595867, 0.0798380896449089, -0.027979379519820213, 0.001156636979430914, 0.07180023193359375, -0.002932296833023429, -0.028886405751109123, -0.006608081981539726, 0.003978762309998274, 0.011746804229915142, -0.007978350855410099, 0.042558204382658005, 0.04787227138876915, -0.01757097989320755, 0.02758054807782173, 0.025309016928076744, 0.06571569293737411, 0.026680203154683113, -0.0014642567839473486, 0.012775260955095291, 0.013010889291763306, -0.020489875227212906, -0.01188575942069292, 0.016669338569045067, 0.021797509863972664, 0.04832833632826805, -0.06554309278726578, -0.05151153355836868, 0.06716577708721161, 0.02472635917365551, -0.028548618778586388, -0.04445462301373482, 0.019109297543764114, 0.0029341219924390316, 0.009867268614470959, 0.021327925845980644, -0.033886875957250595, 0.004963995888829231, 0.014928069896996021, -0.04008089751005173, -0.011865360662341118, 0.09886031597852707, 0.05836271122097969, 0.002373750787228346, 0.0056767575442790985, 0.013026706874370575, 0.035554517060518265, 0.003271433524787426, -0.015268825925886631, 0.005850838031619787, -0.04947495087981224, 0.0368826799094677, -0.016989750787615776, -0.01929199881851673, 0.0021462352015078068, 0.006168699357658625, 0.030855797231197357, 0.019294776022434235, 0.016972001641988754, 0.018451934680342674, -0.01693662814795971, 0.006961089093238115, 0.0011328122345730662, 0.04423300176858902, 0.004831014666706324, -0.0022923180367797613, -0.04197137430310249, 0.030960924923419952, -0.015541627071797848, -0.07354678213596344, -0.06964543461799622, -0.021999238058924675, 0.0010102769592776895, -0.02505066618323326, 0.030222391709685326, 0.0003601715434342623, 0.02720475383102894, -0.025336947292089462, -0.0042691719718277454, 0.12487617880105972, -0.014893642626702785, 0.0035609095357358456, -0.045774850994348526, -0.0052681355737149715, 0.021982725709676743, -0.047712672501802444, -7.622912562510464e-06, 0.005919431336224079, 0.022084157913923264, 0.03456231951713562, 0.04534227028489113, 0.059787772595882416, -0.019358010962605476, 0.013928571715950966, -0.001912220730446279, 0.08504130691289902, -0.027953902259469032, 0.015753159299492836, 0.01767711713910103, -0.005937654059380293, 0.05614602938294411, -0.01598372496664524, -0.00017061972175724804, 0.0003595768357627094, 0.0792662724852562, -0.005069477949291468, -0.03483405336737633, 0.008907917886972427, -0.022777708247303963, 0.0423428900539875, -0.005511540453881025, 0.02072254940867424, -0.004258032888174057, 0.01601552963256836, 0.022281495854258537, -0.018671467900276184, -0.054798904806375504, 0.022925980389118195, -0.029379526153206825, -0.00601518340408802, 0.02251979522407055, -0.06293240934610367, -0.022053414955735207, -0.025127537548542023, 0.0018721120432019234, -0.009640464559197426, -0.012386073358356953, -0.02487032301723957, -0.006913412362337112, -0.016770649701356888, 0.0029322709888219833, 0.01194346509873867, 0.04100543260574341, -0.048949290066957474, -0.007915587164461613, 0.03691086545586586, -0.015711072832345963, -0.04334587603807449, -0.025796199217438698, 0.005967303644865751, -0.06728502362966537, -0.015438276343047619, -0.011304531246423721, 0.05811246111989021, -0.0037625713739544153, -0.015450136736035347, 0.017624035477638245, -0.10690614581108093, -0.00478917732834816, -0.01056087575852871, -0.0049204290844500065, -0.0760340765118599, -0.02489330619573593, 0.003943821415305138, 0.03098933771252632, -0.008886551484465599, 9.04706321307458e-05, 0.00041959132067859173, 0.04257596656680107, 0.15113264322280884, -0.0005041692056693137, -0.0033906486351042986, -0.006971412338316441, 0.02561020664870739, -0.05549198016524315, -0.005721832625567913, -0.008459942415356636, -0.023906035348773003, 0.03183353692293167, 0.03956587612628937, 0.014156059361994267, 0.008150886744260788, -0.009525598026812077, 0.014314282685518265, -0.0489138700067997, 0.015975382179021835, 0.02180495299398899, 0.051304589956998825, -0.026473600417375565, 0.004643203224986792, 0.027138330042362213, -0.057331062853336334, -0.05368080362677574, -0.0036476855166256428, -0.010816661641001701, -0.013353820890188217, 0.0247514545917511, -0.012577651999890804, 0.007764778565615416, -0.01516164280474186, -0.03037957288324833, 0.06664614379405975, -0.04511122405529022, 0.07160715758800507, 0.022016270086169243, -0.007810744922608137, 0.03803742676973343, -0.026305465027689934, -0.0356159470975399, -0.011406984180212021, -0.007755813654512167, 0.02748204953968525, -0.06367973238229752, -0.021422183141112328, -0.016895325854420662, 0.03711109608411789, 0.04644044116139412, 0.02892385609447956, -0.03879084810614586, -0.03893154114484787, -0.024188579991459846, 0.04020022228360176, -0.006805042736232281, -0.05648346245288849, 0.07503875344991684, 0.03687898814678192, -0.0007885093218646944, -0.07978823035955429, -0.02577330730855465, 0.0019928140100091696, -0.0036544841714203358, -0.012200187891721725, 0.0035786572843790054, 0.019908016547560692, -0.018890460953116417, -0.015184353105723858, -0.007774358615279198, 0.0004793646221514791, 0.001424551708623767, -0.016923854127526283, -0.028643948957324028, 0.03277038782835007, 0.016597842797636986, -0.04836472123861313, -0.027230791747570038, 0.012478883378207684, 0.026750968769192696, 0.03216274827718735, 0.015547633171081543, 0.08117257058620453, -0.01775563694536686, -0.011301737278699875, 0.059663672000169754, 0.00891698058694601, 0.037963952869176865, 0.0587073490023613, -0.0024787718430161476, 0.023012034595012665, 0.00394695159047842, -0.05197254568338394, -0.028204001486301422, -0.004110760521143675, -0.08213061094284058, 0.07325940579175949, -0.030137555673718452, -0.010301494970917702, -0.03319292888045311, -0.006097021047025919, -0.05362690985202789, -0.05187639594078064, -0.021525783464312553, 0.026772532612085342, -0.03905909135937691, 0.011821218766272068, -0.008593340404331684, 0.06404108554124832, 0.015938779339194298, 0.012038414366543293, 0.024459578096866608, 0.01457035169005394, 0.023777013644576073, 0.0007940896903164685, -0.05946706607937813, 0.010767647996544838, -0.009800156578421593, 0.044264160096645355, -0.04847414791584015, 0.018688656389713287, 0.03183367848396301, -0.0176016166806221, 0.0264433566480875, -0.0012181282509118319, -0.004881307017058134, -0.012472165748476982, 0.03298955410718918, 0.04431137815117836, 2.8087906684959307e-05, -0.00983045157045126, -0.10814218968153, 0.010541410185396671, 0.020378245040774345, -0.01630924455821514, 0.051472872495651245, -0.002070377115160227, 0.021989189088344574]\"\n./train/lion/n02129165_12949.JPEG,lion,\"[-0.004073196090757847, 0.004134711809456348, -0.017992956563830376, -0.02435702085494995, 0.009067525155842304, -0.025758858770132065, 0.008629103191196918, 0.026945266872644424, -0.003281000070273876, -0.020774925127625465, 0.013065649196505547, -0.010070576332509518, 0.009439813904464245, -0.055592745542526245, -0.0038033276796340942, -0.03403063490986824, -0.015238506719470024, 0.025798825547099113, 0.016359398141503334, 0.012578167021274567, -0.05235377326607704, 0.015759652480483055, 0.02483346313238144, -0.03480897843837738, -0.024434542283415794, 0.019440414384007454, -0.051684193313121796, 0.008087988942861557, -0.009681934490799904, -0.03527441248297691, 0.02154487371444702, -0.02279159054160118, -0.004063181113451719, 0.020907161757349968, -0.020947040989995003, 0.0055136121809482574, 0.006004077382385731, 0.05071856081485748, -0.013335691764950752, 0.14384429156780243, 0.009359464980661869, 0.02441323921084404, 0.009198191575706005, -0.028668740764260292, -0.002000961685553193, 0.04320119693875313, -0.004290499724447727, 0.014858574606478214, -0.030623920261859894, -0.019782952964305878, 0.0210991483181715, 0.03714051470160484, 0.007931449450552464, -0.03250352665781975, 0.007894907146692276, 0.03536781296133995, 0.021335488185286522, 0.022928766906261444, -0.00782439112663269, 0.0011125669116154313, 0.04819481074810028, 0.004959117155522108, -0.02626727893948555, 0.01106890756636858, -0.021574215963482857, -0.03424474596977234, 0.00343142868950963, 0.10225910693407059, 0.009291442111134529, -0.00697458628565073, 0.010912441648542881, 0.026987304911017418, 0.019988292828202248, -0.014721307903528214, 0.015008822083473206, -0.0036367387510836124, -0.028499187901616096, -0.011293372139334679, -0.060239870101213455, -0.02574816718697548, -0.03408067300915718, 0.03906724229454994, -0.025325173512101173, -0.007061843294650316, 0.04795636981725693, 0.018146421760320663, 0.024838784709572792, -0.009646923281252384, 0.03306375443935394, 0.014641898684203625, -0.008632468990981579, 0.014421428553760052, -0.6738771796226501, 0.037746578454971313, -0.02074572443962097, 0.012346569448709488, -0.001599948271177709, 0.03014935553073883, -0.08454915136098862, -0.02234606072306633, -0.0299561507999897, 0.009933353401720524, -0.04259267821907997, 0.036490291357040405, 0.007924006320536137, -0.005396532826125622, -0.005417149513959885, 0.009321585297584534, -0.011746319010853767, -0.0362607017159462, -0.030728809535503387, -0.00741893844678998, -0.0008225215715356171, 0.01966610550880432, -0.022235436365008354, -0.04857209697365761, 0.05482533946633339, -0.02062266692519188, 0.05757462978363037, -0.016508307307958603, 0.019775500521063805, 0.05063183978199959, 0.0537862628698349, 0.04316947981715202, -0.05686125159263611, -0.03779533877968788, 0.01632336527109146, -0.006458913441747427, 0.005597810726612806, 0.024759456515312195, 0.0045136623084545135, 0.004125323612242937, -0.03544262424111366, 0.08744841814041138, 0.01920503005385399, 0.002191566163673997, 0.011421619914472103, 0.01432382594794035, -0.0010869919788092375, -0.02040172927081585, -0.02311822772026062, -0.05306568369269371, -0.0035394083242863417, -0.009300334379076958, -0.019377870485186577, -0.01824779063463211, -0.007374405395239592, -0.042599260807037354, -0.005923580378293991, 0.027308503165841103, -0.010102162137627602, 0.017196273431181908, 0.002022454049438238, -0.022260034456849098, -0.013022538274526596, 0.011928156949579716, 0.00992915965616703, 0.017687084153294563, 0.031448863446712494, 0.018316784873604774, -0.0004815848951693624, -0.004265630152076483, 0.008540634997189045, 0.02365906350314617, 0.004568182863295078, -0.054765716195106506, -0.06140367314219475, 0.021905286237597466, -0.020685305818915367, 0.009328527376055717, 0.010229140520095825, 0.028483539819717407, -0.007366806268692017, -0.03206556290388107, -0.02692398615181446, 0.0042359428480267525, -0.09569185227155685, 0.03479905426502228, -0.015212874859571457, 0.01730683259665966, 0.018478035926818848, 0.015201312489807606, 0.027678143233060837, -0.0352148674428463, -0.04595233500003815, -0.0025893973652273417, 0.025257525965571404, 0.0004299323190934956, -0.03766528144478798, 0.021351594477891922, -0.013445348478853703, -0.011274234391748905, -0.0030571904499083757, 0.005611283238977194, -0.039404358714818954, 0.007686323020607233, 0.029474299401044846, -0.045186106115579605, -0.0812472254037857, 0.006371780764311552, 0.018185295164585114, 0.0455840565264225, -0.0016713920049369335, 0.07786484062671661, 0.030864447355270386, 0.009915802627801895, 0.019727379083633423, -0.04573671892285347, 0.0469897985458374, -0.0022415791172534227, -0.03864514082670212, 0.04705607146024704, 0.05089578405022621, 0.043742842972278595, -0.02935810759663582, 0.020563071593642235, 0.020799145102500916, -0.011935082264244556, 0.07742702215909958, -0.03252958133816719, -0.0019927939865738153, 0.0463772751390934, -0.005133313592523336, 0.002921366598457098, 0.009813958778977394, -0.03242214396595955, 0.002247150056064129, -0.011457887478172779, 0.02800077572464943, 0.02044219709932804, -0.021640583872795105, 0.0063062505796551704, 0.07458098232746124, 0.03791123628616333, 0.012870963662862778, -0.04891200736165047, 0.00811668299138546, 0.01161491870880127, -0.0020462386310100555, -0.016593603417277336, 0.016349025070667267, 0.018355410546064377, 0.04178069159388542, -0.05731062963604927, 0.017351334914565086, 0.052304212003946304, 0.03406226634979248, -0.06338906288146973, -0.05334163457155228, 0.00012808346946258098, 0.03187556937336922, -0.018908502534031868, -0.0013632733607664704, -0.019472170621156693, -0.004388575442135334, 0.02196541242301464, -0.03755975514650345, -0.0010823037009686232, 0.0740315169095993, 0.021897630766034126, 0.0005568892229348421, -0.009930103085935116, 0.003317589173093438, 0.06659034639596939, 0.012435635551810265, -0.01465726736932993, -0.010601270943880081, 0.01319172978401184, 0.02514372020959854, -0.01538630947470665, -0.044008657336235046, 0.006673372816294432, 0.02236090414226055, 0.0006962004699744284, 0.017580963671207428, -0.028194746002554893, 0.016191931441426277, 0.012653972022235394, -0.01616060361266136, 0.031226566061377525, 0.02828179858624935, 0.03324008360505104, -0.026760870590806007, -0.03544855862855911, 0.01395578496158123, -0.01230304129421711, -0.10443452000617981, -0.016878589987754822, -0.013086652383208275, 0.00044200295815244317, -0.012869799509644508, 0.017027078196406364, 0.028541121631860733, 0.005643448326736689, 0.0005796863697469234, -0.012693126685917377, 0.09455545246601105, 0.02786952257156372, 0.024061407893896103, -0.00912700779736042, 0.035847071558237076, 0.023202355951070786, -0.040646057575941086, -0.005170420277863741, 0.006971126887947321, 0.025322923436760902, 0.002736054128035903, 0.0725613534450531, 0.008559802547097206, 0.007283611223101616, 0.005212955176830292, -0.01947617344558239, 0.087335966527462, -0.016421036794781685, 0.031334288418293, -0.01982525736093521, 0.017285656183958054, 0.03479180485010147, -0.02097220905125141, -0.043792907148599625, 0.03347405046224594, 0.07176203280687332, 0.015847904607653618, -0.012084802612662315, 0.012383589521050453, -0.013035712763667107, 0.06281715631484985, 0.030772659927606583, 0.028094913810491562, 0.01787710376083851, 0.006771780550479889, 0.036149438470602036, -0.034852754324674606, -0.037856731563806534, 0.006441893521696329, 0.004353084601461887, 0.0186785776168108, -0.015489800833165646, -0.030108802020549774, -0.026536500081419945, -0.016167985275387764, -0.014019559137523174, -0.004766968544572592, -0.02770267240703106, -0.013422767631709576, 0.003730607219040394, -0.011694330722093582, 0.015642624348402023, -0.008512084372341633, 0.001081803347915411, -0.05918258801102638, -0.017584513872861862, 0.04898245260119438, 0.010412354953587055, -0.015986153855919838, -0.028378818184137344, -0.002309525851160288, -0.08652851730585098, 0.018501421436667442, -0.017415186390280724, 0.053543224930763245, 0.009698576293885708, -0.06507060676813126, -0.006079325918108225, -0.04119601100683212, -0.017283689230680466, -0.01914251782000065, -0.02794843353331089, -0.05762791633605957, -0.0056152609176933765, 0.009090367704629898, 0.045022159814834595, 0.004177218768745661, -0.011393476277589798, 0.02178695984184742, 0.00532030314207077, 0.12525920569896698, 0.0294959656894207, -0.06868379563093185, -0.005131136626005173, 0.005369500257074833, -0.049579083919525146, -0.009310850873589516, -0.029959816485643387, -0.0006632289732806385, 0.024214595556259155, -0.015584191307425499, 0.0004938599886372685, -0.0026971912011504173, -0.02509874291718006, 0.01633496582508087, -0.048741329461336136, -0.02063637040555477, 0.054404839873313904, 0.026876695454120636, -0.030115798115730286, 0.026265552267432213, 0.025747258216142654, -0.07620209455490112, -0.07333983480930328, -0.00660718185827136, -0.007535045966506004, 0.0012819134863093495, 0.030085770413279533, 0.004917922895401716, -0.004332408774644136, -0.00448654918000102, -0.03410593047738075, 0.1107664629817009, -0.01956632360816002, 0.08467776328325272, 0.012104976922273636, -0.007893151603639126, 0.022456182166934013, -0.0358925461769104, -0.04318574443459511, 0.011278011836111546, 0.022210385650396347, 0.00786308292299509, -0.1006176769733429, -0.036742184311151505, -0.013352448120713234, 0.00418343348428607, 0.05425802245736122, 0.03786800429224968, -0.007813703268766403, 0.013198470696806908, 0.019261334091424942, -0.03920994699001312, -0.01856674626469612, -0.03811879828572273, 0.04101547598838806, -0.05332353711128235, 0.02385617420077324, -0.09450125694274902, -0.03872779384255409, 0.021357426419854164, 0.025418439880013466, -0.022885553538799286, 0.017204882577061653, -0.006596978288143873, 0.012815508060157299, -0.017914116382598877, -0.014759646728634834, -0.02634051814675331, -0.008031768724322319, 0.005907001439481974, -0.0027110588271170855, 0.03199129179120064, -0.004384968895465136, -0.02917858213186264, -0.02031414769589901, 0.014566697180271149, 0.008487256243824959, 0.01830756478011608, 0.002705071121454239, 0.061351511627435684, -0.020733287557959557, -0.011427451856434345, 0.052734434604644775, 0.0149563979357481, 0.0432610884308815, 0.049406178295612335, -0.023066885769367218, 0.020836064592003822, -0.01202971488237381, -0.05857827514410019, 0.0047955699265003204, -0.01938270963728428, -0.047329023480415344, 0.030941402539610863, -0.024297239258885384, -0.03557566553354263, -0.045176904648542404, -0.006353226490318775, -0.06175701692700386, -0.030186057090759277, -0.016474252566695213, -0.01427222415804863, -0.04139823094010353, 0.01935603655874729, -0.006855559069663286, 0.005827915854752064, 0.028351247310638428, -0.003491633338853717, 0.03185448423027992, -0.02092394046485424, 0.003804585197940469, 0.0019110515713691711, -0.0211115051060915, 0.0017214243998751044, -0.0493011400103569, 0.04833720996975899, -0.02308332547545433, 0.013761778362095356, 0.019882090389728546, 0.005775141529738903, 0.04388849064707756, 0.02654610015451908, 0.015691634267568588, -0.0194555651396513, 0.05500096082687378, 0.050373297184705734, -0.017166804522275925, -0.032443005591630936, -0.052564311772584915, -0.012266031466424465, -0.010815923102200031, 0.0005208713700994849, 0.0521700382232666, -0.008589006029069424, -0.024256642907857895]\"\n./train/lion/n02129165_19953.JPEG,lion,\"[-0.01985444873571396, -0.0419306755065918, 0.016095420345664024, -0.023244377225637436, -0.02423933707177639, -0.016884682700037956, 0.03057282790541649, -0.009586168453097343, 0.03237447142601013, 0.041234634816646576, 0.014897282235324383, -0.031775135546922684, 0.003354178974404931, -0.012981900945305824, -0.029670018702745438, -0.03146824240684509, 0.09190534055233002, -0.0038564582355320454, 0.03242234140634537, 0.013567852787673473, -0.01566891185939312, 0.017568819224834442, 0.021594591438770294, -0.05560079962015152, -0.013602400198578835, 0.03291963040828705, -0.0005844678380526602, 0.017634142190217972, 0.03937531262636185, -0.010608880780637264, -0.0015427118632942438, -0.009397356770932674, 0.01638832688331604, 0.021506045013666153, -0.003026484977453947, 0.00767536461353302, 0.00410433579236269, 0.03771211579442024, -0.022402912378311157, 0.23022308945655823, -0.010438214056193829, -0.024996256455779076, 0.02056911215186119, -0.038611430674791336, -0.007328440435230732, 0.014740419574081898, 0.04826054722070694, 0.06184021756052971, -0.04802551120519638, -0.0161166712641716, -0.022555874660611153, 0.02732301689684391, 0.02637920156121254, -0.024050336331129074, -0.025994310155510902, 0.03606397658586502, 0.019356947392225266, 0.018107997253537178, 0.002639187965542078, 0.0021971173118799925, 0.10330120474100113, -0.00034417377901263535, -0.01653691753745079, 0.0076485504396259785, -0.00681176595389843, -0.02263953723013401, 0.021140078082680702, 0.06366561353206635, -0.014171311631798744, -0.029346751049160957, -0.005045647732913494, -0.014369895681738853, 0.019907169044017792, -0.016862662509083748, -0.0015166349476203322, -0.01438953261822462, -0.05867329612374306, -0.0014340219786390662, -0.020863279700279236, -0.010459057986736298, 0.003224644809961319, 0.00998805370181799, -0.01440277136862278, 0.013795527629554272, 0.07009641081094742, 0.005281995516270399, -0.024822650477290154, -0.03240308538079262, 0.07369288802146912, 0.002976242220029235, 0.014964522793889046, 0.0022244127467274666, -0.6063840389251709, -0.007166673429310322, -0.06433818489313126, 0.004870215430855751, -0.020968681201338768, -0.04108484089374542, -0.10103964060544968, 0.0010549930157139897, -0.015445503406226635, -0.0016294477973133326, -0.031043855473399162, 0.055171407759189606, 0.024924300611019135, 0.04236197844147682, -0.05571281537413597, -0.01079891063272953, 0.01520206592977047, -0.0037919925525784492, -0.029772035777568817, -0.020872952416539192, 0.0412297286093235, 0.011773219332098961, -0.045172665268182755, -0.02400033548474312, 0.049168914556503296, -0.04535852000117302, 0.015907397493720055, 0.019256072118878365, 0.005900538060814142, 0.03902944549918175, 0.019985785707831383, -0.006799608003348112, -0.018435943871736526, -0.03441740199923515, -0.011903404258191586, 0.02671172097325325, 0.004950106143951416, 0.024099523201584816, 0.004883084911853075, -0.012735883705317974, -0.009546836838126183, 0.08396725356578827, 0.019115334376692772, -0.028666893020272255, -0.03313663601875305, -0.01689736172556877, -0.0054330783896148205, -0.00038559225504286587, -0.025816017761826515, -0.059528764337301254, -0.0043732598423957825, 0.04943382367491722, -0.01999104954302311, -0.007976356893777847, -0.004671160597354174, 0.006574585568159819, -0.03369656205177307, -0.0018672961741685867, -0.0031208451837301254, 0.040407631546258926, 0.005390297155827284, -0.04154808446764946, -0.004547884222120047, 0.04776559770107269, 0.02695438824594021, 0.03632622957229614, 0.010722062550485134, 0.033119458705186844, -0.017622871324419975, -0.03877653554081917, -0.0007187810842879117, -0.019819416105747223, 0.01474844105541706, -0.05255809426307678, 0.00774737074971199, 0.009805562905967236, 0.03380035609006882, 0.02999144233763218, -0.008934840559959412, 0.049584172666072845, -0.025149503722786903, -0.016567232087254524, -0.02607910893857479, -0.0014701003674417734, -0.0788739025592804, -0.02389327436685562, 0.0012352514313533902, -0.014451364055275917, 0.013392032124102116, 0.0059200492687523365, 0.014689905568957329, -0.002019372070208192, -0.00029212574008852243, -0.002128235762938857, 0.03776411712169647, 0.02277068980038166, -0.004427589476108551, 0.04007051885128021, -0.01294771395623684, -0.028540007770061493, 0.013643552549183369, 0.0460711307823658, -0.018753809854388237, 0.04519302025437355, 0.0012856445973739028, -0.043052222579717636, -0.10105710476636887, 0.01606089621782303, 0.04378693178296089, 0.002958763623610139, -0.00760303158313036, 0.07679536193609238, 0.039053529500961304, 0.029439669102430344, 0.03345630690455437, 0.002894157776609063, 0.03352485969662666, -0.049301955848932266, -0.06911564618349075, 0.0013125846162438393, 0.0119545953348279, 0.014228186570107937, -0.037339624017477036, 0.012693810276687145, 0.018617136403918266, 0.03541068360209465, 0.09726331382989883, -0.0049397312104702, 0.03022873029112816, 0.03360233083367348, 0.01338537409901619, -0.007931733503937721, -0.05241578072309494, 0.022359173744916916, -0.004178267903625965, 0.02398025244474411, 0.018774883821606636, 0.011020075529813766, -0.008511857129633427, -0.010507477447390556, 0.026612414047122, 0.0727153867483139, 0.014970689080655575, -0.023524513468146324, -0.0012857186375185847, 0.009785978123545647, -0.050654854625463486, -0.03649163991212845, 0.03243868052959442, 0.03296812251210213, 0.042908910661935806, -0.04407576099038124, -0.028163883835077286, 0.0659562274813652, 0.01821562461555004, -0.07725434005260468, -0.06178463622927666, 0.0048072682693600655, 0.020445045083761215, 0.01282093022018671, 0.05675673857331276, -0.00680146599188447, 0.025326473638415337, -0.013614529743790627, -0.04723116010427475, 0.013569453731179237, 0.12023938447237015, 0.046364013105630875, -0.029132748022675514, 0.003689009230583906, 0.002816582564264536, -0.02011522650718689, 0.00040814740350469947, -0.019693968817591667, 0.039455294609069824, -0.012865528464317322, 0.04357747361063957, 0.0005996566032990813, -0.05595357343554497, -0.012294379062950611, 0.022306250408291817, 0.03958002105355263, 0.006381109356880188, -0.062178123742341995, 0.03385890647768974, -0.018743367865681648, -0.010098682716488838, -0.045985374599695206, 0.023184455931186676, 0.0012777590891346335, -0.050244852900505066, -0.026230212301015854, -0.015797656029462814, 0.026347653940320015, -0.06670773774385452, -0.06348633021116257, -0.04835041984915733, 0.004663222935050726, -0.008933760225772858, 0.020013097673654556, 0.018989605829119682, 0.007116269785910845, -0.007441430352628231, -0.02012087032198906, 0.06447630375623703, 0.03188998997211456, 0.04589298740029335, -0.008028618060052395, -0.0044133965857326984, 0.013735639862716198, -0.002824899274855852, 0.01438430231064558, 0.007092865649610758, -0.025575507432222366, 0.0051122503355145454, 0.05561532452702522, 0.07293631136417389, -0.043151967227458954, 0.023916330188512802, -0.019328229129314423, 0.08375490456819534, -0.03879748657345772, 0.026553073897957802, 0.034178704023361206, -0.025876443833112717, 0.032680805772542953, -0.010542728938162327, -0.04720507562160492, 0.03610066697001457, 0.043919313699007034, 0.01077098585665226, -0.016947561874985695, 0.04680252447724342, 0.0028757641557604074, 0.00971377082169056, 0.005214960779994726, 0.025094859302043915, 0.004818658344447613, 0.03428226336836815, -0.00897187925875187, -0.029298298060894012, -0.013751115649938583, -0.007903807796537876, 0.0034046212676912546, -0.011556101962924004, 0.029566634446382523, -0.031173696741461754, -0.020531874150037766, -0.006066714413464069, -0.014882035553455353, -0.014152300544083118, -0.0003693362814374268, 0.020484600216150284, -0.011341753415763378, -0.003885018639266491, 0.001467402558773756, 0.014548308216035366, -0.006674745120108128, -0.022441772744059563, 0.009644058533012867, 0.03150325268507004, -0.019853739067912102, -0.02334972470998764, -0.009405362419784069, -0.0017620156286284328, -0.03707551211118698, -0.043469324707984924, -0.01460517942905426, 0.07385580986738205, -0.006330323405563831, -9.622977813705802e-05, -0.005196394398808479, -0.05251406133174896, -0.050086550414562225, -0.008371210657060146, -0.025118155404925346, -0.08393584191799164, -0.0005972333601675928, -0.004582185298204422, 0.04244516044855118, -0.004898144863545895, 0.0202809926122427, -0.012109876610338688, 0.0454089380800724, 0.1073717400431633, 0.022697990760207176, -0.019234396517276764, 0.009151356294751167, 0.03869466483592987, -0.036842748522758484, -0.0006478271679952741, -0.006043701432645321, -0.011846326291561127, 0.060356177389621735, 0.016402199864387512, 0.025415854528546333, -0.03628738597035408, -0.035484444350004196, 0.021638421341776848, -0.025914741680026054, 0.03170938789844513, 0.0055128950625658035, 0.05759028345346451, -0.018591057509183884, 0.029683727771043777, 0.01708887331187725, -0.07058510929346085, -0.052992865443229675, -0.00515360152348876, -0.02962641231715679, -0.01703176088631153, 0.07474485039710999, -0.0078111193142831326, -0.03072233311831951, -0.009503391571342945, -0.05545420944690704, 0.06939958781003952, -0.011520068161189556, 0.06369848549365997, 0.006232869811356068, -0.011688625440001488, 0.04615244269371033, -0.023535089567303658, -0.05774187669157982, -0.04159269854426384, -0.0024222792126238346, 0.04338980093598366, -0.075606569647789, -0.0018858009716495872, -0.036545392125844955, 0.0690336599946022, 0.04427419602870941, 0.004400139208883047, -0.02914184145629406, -0.03145435079932213, -0.004177225288003683, 0.07764501869678497, -0.012581124901771545, -0.04023868963122368, 0.06515030562877655, 0.0283905528485775, -0.00020573283836711198, -0.01624823920428753, -0.01679290272295475, 0.015522868372499943, 0.011502296663820744, -0.010487278923392296, -0.025777896866202354, -0.010739817284047604, 0.009158240631222725, -0.04438383877277374, 0.016946179792284966, 0.026024457067251205, 0.0007288606720976532, -0.04137871414422989, -0.012693469412624836, 0.006702971179038286, 0.017626525834202766, -0.03417259827256203, -0.03950008749961853, 0.012103487737476826, 0.041136715561151505, 0.03531857207417488, -0.013444704003632069, 0.04060244560241699, 0.01644693687558174, 0.016391364857554436, 0.030570266768336296, 0.04558812826871872, 0.0620187483727932, 0.05715474113821983, 0.02419011853635311, 0.03705134242773056, 0.016912512481212616, -0.05945481359958649, -0.010608947835862637, 0.008850513957440853, -0.03701148182153702, 0.07989546656608582, -0.043199051171541214, 0.004433746449649334, -0.03347010910511017, 0.014888620935380459, -0.055504076182842255, -0.013881569728255272, -0.04201347380876541, 0.014592825435101986, -0.05453072488307953, 0.04204440861940384, -0.03268503397703171, 0.02098989300429821, 0.011214395053684711, -0.017544686794281006, 0.0240979865193367, 0.014438973739743233, -0.011447432450950146, -0.007937312126159668, -0.020393645390868187, -0.01381600834429264, -0.02248551696538925, 0.06293327361345291, -0.05099409073591232, 0.042177796363830566, 0.05607188120484352, -0.013037499040365219, 0.03760470822453499, 0.014663033187389374, 0.008437510579824448, -0.06400208920240402, 0.029158450663089752, -0.003786488203331828, -0.026729166507720947, 0.02592380903661251, -0.06229156255722046, 0.01237469632178545, -0.028086915612220764, 0.0008758127805776894, 0.05510391294956207, 0.0071428376249969006, 0.019167520105838776]\"\n./train/lion/n02129165_5845.JPEG,lion,\"[-0.01812000200152397, 0.0004171301843598485, -0.01638803258538246, -0.02826460264623165, 0.02030589058995247, 0.019621970131993294, 0.0251294132322073, -0.006090368144214153, 0.03122187778353691, -0.016306085512042046, 0.0128710912540555, -0.0034657411742955446, 0.037293773144483566, -0.049419716000556946, -0.030116233974695206, -0.035833314061164856, 0.00991833582520485, 0.037655558437108994, 0.0018587762024253607, 0.054251790046691895, -0.0177169106900692, -0.017229361459612846, 0.04758597910404205, -0.06421760469675064, 0.003107755444943905, 0.021823253482580185, -0.012880802154541016, -0.023912224918603897, -0.016606658697128296, -0.02809354104101658, 0.014324272982776165, 0.006099962629377842, 0.01334103848785162, -0.0023006461560726166, -0.014954577200114727, 0.009533329866826534, 0.008573184721171856, 0.025832952931523323, -0.04401747137308121, 0.163783460855484, -0.01997639238834381, 0.012090418487787247, 0.011176934465765953, -0.04082720726728439, 0.006814662832766771, -0.06802008301019669, 0.023600587621331215, 0.049494460225105286, -0.02611570619046688, -0.016439825296401978, 0.02720378339290619, 0.02311547100543976, 0.010076180100440979, -0.025772688910365105, -0.048313871026039124, 0.044677477329969406, 0.02973198890686035, 0.03540048375725746, -0.01914554089307785, -0.0003288731095381081, 0.03768927603960037, 0.013922931626439095, -0.050741471350193024, 0.03283726051449776, -0.024944055825471878, -0.05835431069135666, 0.028822973370552063, 0.056330014020204544, 0.010419859550893307, 0.0030686308164149523, -0.0025018679443746805, 0.00042412555194459856, 0.03294936567544937, -0.02954174019396305, 0.007063689641654491, -0.04281046614050865, -0.04650866612792015, -0.002192264422774315, -0.05998699739575386, -0.002473419765010476, -0.03736226260662079, 0.05159856006503105, 0.00853123888373375, 0.025359751656651497, 0.07775791734457016, 0.028697757050395012, 0.023827187716960907, -0.020324256271123886, 0.09763815253973007, -0.009687221609055996, -0.003811826230958104, -0.008247232995927334, -0.609915554523468, -0.025770341977477074, -0.04578322172164917, -0.00027510663494467735, -0.016238894313573837, -0.019937710836529732, -0.06918312609195709, 0.0033355450723320246, -0.0039298078045248985, 0.01839863881468773, -0.02738088183104992, 0.05711489915847778, 0.0028749199118465185, 0.03407171741127968, -0.09400990605354309, 0.0179094560444355, 0.0248833317309618, -0.01996319182217121, -0.035336337983608246, -0.030460724607110023, -0.005067033227533102, 0.003170054405927658, -0.016415586695075035, -0.009125715121626854, 0.06957504898309708, -0.020141001790761948, 0.048974428325891495, 0.03329010680317879, 0.03695214167237282, 0.04673606902360916, 0.035407841205596924, 0.03333711996674538, -0.030712353065609932, -0.031227344647049904, 0.03786749020218849, 0.010901587083935738, 0.011267580091953278, -0.00656264740973711, 0.011197289451956749, -0.03987870365381241, -0.03112102672457695, 0.08083035796880722, 0.022913910448551178, 0.003678136272355914, 0.015106039121747017, -0.027732305228710175, 0.003379824571311474, -0.016235286369919777, -0.005799741484224796, -0.07435915619134903, -0.02489079162478447, 0.020444268360733986, -0.014788154512643814, 0.01641140505671501, -0.02735992707312107, 0.0014680108288303018, -0.011414955370128155, 0.014751626178622246, 0.009448765777051449, 0.024354973807930946, -0.03751033544540405, -0.040817003697156906, 0.03790781646966934, -0.005133261904120445, 0.019520433619618416, 0.0247028935700655, 0.011629228480160236, 0.05089224874973297, -0.04195661470293999, -0.017431264743208885, -0.0015988126397132874, -0.007525211200118065, 0.010958974249660969, -0.044301073998212814, -0.02122661843895912, 0.012789634056389332, -0.015822792425751686, 0.02023795247077942, 0.02209463343024254, 0.04330448806285858, -0.02069658227264881, -0.04168113321065903, -0.04166540876030922, -0.019622500985860825, -0.07777392864227295, 0.0007640595431439579, -0.016960814595222473, 0.02157682180404663, 0.04090878739953041, 0.02153978869318962, -0.016268670558929443, 0.006424922961741686, -0.0009199438500218093, 0.004474245477467775, 0.03172268718481064, 0.017879437655210495, -0.005698576103895903, 0.02056456357240677, 0.021076994016766548, -0.006585846655070782, 0.003329205559566617, 0.038856618106365204, -0.07465644925832748, 0.002565456321462989, -0.03330297768115997, -0.04953570291399956, -0.059217605739831924, -0.022229481488466263, -0.005940425209701061, -0.000685462262481451, -0.015111446380615234, 0.07244755327701569, 0.013250487856566906, 0.021011706441640854, 0.0038900687359273434, -0.03532169759273529, 0.027318496257066727, -0.039627693593502045, -0.07850824296474457, 0.032354533672332764, 0.04202509671449661, 0.02161129005253315, -0.03200644999742508, -0.012049984186887741, 0.03143579140305519, 0.010375631973147392, 0.08935900032520294, 0.011355625465512276, 0.03351451829075813, 0.04140670970082283, 0.005018796771764755, -0.015580953098833561, -0.04342561960220337, -0.0015010711504146457, -0.008358671329915524, 0.008311420679092407, 0.0005123377195559442, 0.020584067329764366, -0.04505583643913269, 0.0019722669385373592, 0.06859958916902542, 0.043031465262174606, 0.014075729995965958, -0.08479894697666168, 0.018771527335047722, 0.022905973717570305, -0.01769549399614334, -0.021124642342329025, -0.017556965351104736, 0.013503769412636757, 0.03438986837863922, -0.04421934485435486, -0.009274330921471119, 0.033516380935907364, 0.014817656949162483, -0.06972689181566238, -0.01930077373981476, 0.03864840790629387, -0.034771453589200974, 0.047448836266994476, 0.026904935017228127, -0.015997419133782387, 0.012192510068416595, 0.01014014519751072, -0.04130956158041954, -0.021727092564105988, 0.1546885371208191, 0.05261579900979996, -0.007426520809531212, 0.007597612217068672, -0.007924013771116734, 0.023078234866261482, 0.006183439400047064, -0.02249317243695259, 0.01555564720183611, 0.0003665430995170027, 0.027356905862689018, -0.0030820779502391815, -0.039356671273708344, -0.010347951203584671, 0.03639325499534607, 0.03266537934541702, 0.03084605559706688, -0.03173983469605446, -0.007360702380537987, 0.006043815053999424, -0.0011030695168301463, 0.003473745658993721, 0.056904446333646774, 0.0036286574322730303, -0.013129670172929764, -0.043079618364572525, -0.006232036743313074, 0.032643094658851624, -0.05459921807050705, -0.027292605489492416, -0.022532811388373375, -0.008759256452322006, -0.027472184970974922, -0.010926776565611362, 0.020287463441491127, -0.03235343098640442, -0.0024897323455661535, -0.011803648434579372, 0.1103556901216507, 0.04010305553674698, -0.007532845251262188, -0.016463203355669975, 0.029871845617890358, 0.030456002801656723, -0.013112124986946583, -0.02241794392466545, -0.0063485694117844105, -0.009832133539021015, 0.005363659467548132, 0.041519928723573685, 0.052840493619441986, -0.022661633789539337, 0.009354587644338608, -0.0094949034973979, 0.08065793663263321, -0.028131159022450447, 0.011341553181409836, -0.029642632231116295, -0.014001392759382725, 0.030243005603551865, 0.007263046223670244, -0.05124073475599289, 0.04136146232485771, 0.039580218493938446, -0.027137108147144318, -0.03718879446387291, 0.03418068587779999, -0.031920772045850754, 0.04289963096380234, 0.00618315301835537, 0.02139018476009369, -0.011063369922339916, 0.016464514657855034, 0.0027622117195278406, -0.03137805312871933, -0.004114780109375715, 0.011942594312131405, 0.013662951067090034, -0.007953197695314884, 0.02605307660996914, -0.035781532526016235, -0.023905381560325623, -0.026506030932068825, -0.011486150324344635, -0.035945773124694824, -0.006847359240055084, -0.011955691501498222, 8.110572525765747e-05, -0.018646618351340294, -0.0032191218342632055, -0.0037708475720137358, -0.02605380304157734, -0.03982444107532501, -0.002068540081381798, 0.019082102924585342, 0.0031029358506202698, -0.02276080660521984, 0.0030887143220752478, 0.006158307660371065, -0.09895628690719604, -0.015571464784443378, 0.001802258426323533, 0.09651508927345276, 0.006112127099186182, -0.01481774915009737, 0.0082781333476305, -0.026248708367347717, -0.014329833909869194, 0.005990102421492338, -0.07433822751045227, -0.04227060452103615, 0.013186577707529068, 0.0037743085995316505, 0.031044457107782364, 0.0077843498438596725, -0.006619636435061693, 0.023457171395421028, 0.028676163405179977, 0.10188188403844833, 0.043858952820301056, -0.05775517597794533, -0.010211759246885777, 0.05553083494305611, -0.022489026188850403, -0.024835845455527306, -0.026666712015867233, 0.02434510737657547, 0.08363933861255646, -0.0007515100296586752, -0.0212471392005682, -0.00700888829305768, 0.005095105152577162, -0.003382208524271846, -0.02582993544638157, 0.020638152956962585, 0.040646281093358994, 0.03594807907938957, -0.04939821735024452, 0.050707098096609116, -0.017645496875047684, -0.10081611573696136, -0.09247993677854538, 0.018636099994182587, -0.02529802918434143, -0.01699991337954998, 0.049509115517139435, -0.013050383888185024, -0.0036786855198442936, -0.0024310436565428972, -0.04420504719018936, 0.09704643487930298, -0.0467878058552742, 0.07427392154932022, 0.0112178735435009, -0.015359963290393353, 0.021506955847144127, -0.058871831744909286, -0.05158480629324913, -0.03155480697751045, -0.002095282543450594, 0.028480764478445053, -0.06446664780378342, -0.017851008102297783, 0.014801064506173134, 0.03494500368833542, 0.03599972277879715, 0.026209430769085884, -0.02649432234466076, 0.004017827566713095, 0.012765754014253616, 0.01942470110952854, 0.026656631380319595, -0.035699713975191116, 0.05302209034562111, 0.009191210381686687, -0.025411179289221764, -0.08109860122203827, -0.025638725608587265, 0.05006353184580803, 0.000225394222070463, 0.02321678400039673, -0.02131740190088749, 0.040692608803510666, -0.018658043816685677, -0.05300052464008331, -0.013779742643237114, 0.020016537979245186, 0.002341845305636525, -0.0033905250020325184, -0.015183009207248688, 0.021421216428279877, -0.00030323321698233485, 0.009244851768016815, -0.013316166587173939, -0.03874463215470314, 0.019762570038437843, 0.026419635862112045, 0.025910906493663788, 0.0713433176279068, -0.017225319519639015, 0.012880707159638405, 0.04570900276303291, 0.02165086381137371, 0.06203329190611839, 0.038338448852300644, -0.020222065970301628, 0.0673237070441246, -0.014864979311823845, -0.053325407207012177, -0.0233968123793602, 0.04093612730503082, -0.03587498515844345, 0.05713186040520668, 0.02932826429605484, -0.05967254564166069, -0.042223457247018814, 0.027377421036362648, -0.04435724765062332, -0.027773775160312653, -0.006911894306540489, -0.008520500734448433, -0.04514942318201065, 0.024725085124373436, -0.021342255175113678, 0.03975061699748039, 0.030048012733459473, -0.006432599388062954, 0.006418728269636631, -0.0016627282602712512, 0.0066882590763270855, -0.04689018428325653, -0.0538439117372036, -0.009090308099985123, -0.016846096143126488, 0.02725672535598278, -0.015032825991511345, 0.02609291858971119, 0.03370055928826332, 0.013642621226608753, 0.02699805237352848, 0.007614536210894585, -0.004146399907767773, -0.029757540673017502, 0.038469698280096054, 0.05036189407110214, 0.01187354139983654, 0.012900443747639656, -0.05984826385974884, 0.017599403858184814, -0.03030192106962204, -0.004667137749493122, 0.053402453660964966, -0.044245969504117966, 0.03658051788806915]\"\n./train/lion/n02129165_1142.JPEG,lion,\"[-0.0188800897449255, -0.0039058399852365255, 0.015755098313093185, 0.03119366616010666, 0.017219703644514084, -0.004301745910197496, 0.028958037495613098, -0.023418311029672623, 0.004327863454818726, -0.016970539465546608, 0.013027909211814404, -0.019213182851672173, -0.016053929924964905, -0.014298747293651104, 0.0025763697922229767, -0.02761346474289894, -0.021745413541793823, 0.005345183424651623, -0.0029573924839496613, 0.023335009813308716, -0.023169895634055138, -0.016727807000279427, 0.04534435644745827, -0.05600699037313461, -0.03191635385155678, 0.027936648577451706, -0.0068687256425619125, 0.024641577154397964, -0.021800367161631584, -0.008567862212657928, 0.0014363849768415093, -5.4509437177330256e-05, 0.010168254375457764, -0.00020430701260920614, -0.0004592656623572111, -0.008542614988982677, 0.014927360229194164, 0.049046292901039124, -0.025811167433857918, 0.16894520819187164, 0.0011896826326847076, -0.008940208703279495, 0.019429588690400124, -0.025572724640369415, -0.015446341596543789, 0.011079907417297363, 0.029027463868260384, 0.04118630290031433, 0.003928657621145248, -0.02589377760887146, -0.00538560701534152, 0.053369469940662384, -0.0030121258459985256, -0.0021953219547867775, -0.026449333876371384, 0.035974979400634766, 0.039446014910936356, 0.03586910292506218, 0.002217275556176901, 0.017527995631098747, 0.06916487216949463, 0.029463056474924088, -0.0006659713690169156, 0.05151529610157013, -0.014322823844850063, -0.05635932832956314, 0.0365147702395916, 0.147960364818573, -0.006700705271214247, 0.019397763535380363, 0.00027266034157946706, -0.021992068737745285, 0.023664506152272224, -0.03974047303199768, 0.0216357484459877, -0.009804487228393555, -0.04801682382822037, -0.012812002561986446, -0.06161126866936684, -0.01614149659872055, -0.014757047407329082, 0.0039756521582603455, -0.020736290141940117, -0.01888013817369938, 0.08127898722887039, 0.016926920041441917, -0.0002309678093297407, -0.02752995491027832, 0.06324222683906555, 0.002481807954609394, 0.027715707197785378, -0.0027669460978358984, -0.6080963611602783, 0.01590498723089695, -0.05145125836133957, -0.01568606123328209, 0.016477644443511963, -0.020205682143568993, -0.11074789613485336, 0.03996799513697624, -0.019803611561655998, 0.009714175947010517, -0.03581003472208977, 0.024697648361325264, 0.03648859262466431, -0.019742341712117195, -0.038381244987249374, 0.0027721647638827562, 0.006825943943113089, -0.023025352507829666, -0.035673242062330246, -0.011167970485985279, -0.004875393584370613, -0.006779101677238941, -0.0245407372713089, 0.0007279463461600244, 0.006393710151314735, -0.022802840918302536, 0.058838628232479095, 0.0037270267494022846, 0.019648388028144836, 0.031106911599636078, 0.01646464504301548, -0.015715468674898148, -0.04347026348114014, -0.05481794849038124, 0.01659507118165493, -0.0008010169258341193, 0.029947932809591293, 0.051554642617702484, -0.012809180654585361, -0.022719893604516983, -0.0019180196104571223, 0.08382172882556915, 0.024874716997146606, 0.00463076401501894, 0.01207931712269783, -0.06418174505233765, -0.037243619561195374, 0.005885113961994648, -0.038452956825494766, -0.03354939445853233, -0.021150868386030197, 0.018896663561463356, -0.04026525095105171, 0.02883455716073513, -0.04803980514407158, -0.035290807485580444, -0.024134881794452667, 0.0377667210996151, -0.001456105848774314, -0.00473884167149663, -0.020711058750748634, -0.026227114722132683, 0.014271929860115051, 0.021863145753741264, 0.013655003160238266, 0.014968489296734333, 0.03407339006662369, 0.0031267893500626087, -0.00821796152740717, -0.033714231103658676, -0.009369797073304653, 0.022057896479964256, -0.010415799915790558, -0.028678471222519875, -0.02642432227730751, 0.020735478028655052, 0.013502384535968304, 0.05280938744544983, 0.005499308463186026, 0.04480819031596184, 0.007352224085479975, -0.025415511801838875, -0.009160677902400494, -0.0023650710936635733, -0.03875059634447098, -0.00015932701353449374, -0.050692349672317505, 0.017674757167696953, 0.028222793713212013, 0.030562981963157654, -0.028335420414805412, -0.01891905441880226, -0.013228021562099457, 0.014593278989195824, 0.016771133989095688, 0.008219029754400253, -0.01399565301835537, 0.006706055253744125, -0.016808727756142616, 0.011377216316759586, -0.003351704217493534, 0.04844880476593971, -0.09899859130382538, 0.029027169570326805, -0.005057063419371843, -0.04963688924908638, -0.09302308410406113, -0.01384493988007307, 0.0059131719172000885, 0.01849975995719433, -0.008656974881887436, 0.06287586688995361, 0.046807337552309036, 0.007896714843809605, -0.009194305166602135, 0.013359315693378448, 0.002785502700135112, -0.003018517279997468, -0.06712634861469269, 0.0265249814838171, 0.0570438876748085, 0.005019273143261671, -0.030428986996412277, 0.02275446057319641, 0.028922148048877716, 0.03112412616610527, 0.080734483897686, 0.007344796787947416, 0.027645433321595192, 0.0730154737830162, -0.02420773170888424, 0.0013560258084908128, -0.014141355641186237, 0.0012116276193410158, -0.01814178004860878, -0.009609472937881947, 0.022883417084813118, 0.023108135908842087, -0.040038641542196274, 0.008556690998375416, 0.02471451833844185, 0.011544463224709034, 0.0252962876111269, -0.025684775784611702, -0.036412667483091354, -0.05066175013780594, -0.003442227141931653, -0.03628413379192352, -0.002755798166617751, 0.028265945613384247, 0.034477028995752335, -0.03504166752099991, -0.03969164192676544, 0.07302512228488922, 0.0470682755112648, -0.06946568936109543, -0.03975445032119751, 0.03608950600028038, 0.007916813716292381, 0.01456638053059578, 0.028773628175258636, -0.004874915350228548, 0.01831650175154209, 0.02404942363500595, -0.027963265776634216, -0.0068319919519126415, 0.1755146086215973, 0.0438406877219677, -0.00406735809519887, -0.007188401184976101, 0.0131453862413764, 0.047538209706544876, 0.002549394266679883, -0.011996667832136154, -0.029917417094111443, -0.00892010610550642, 0.048753414303064346, -0.011277278885245323, -0.06301197409629822, 0.016547558829188347, -0.0020648662466555834, 0.02774021588265896, 0.046885810792446136, -0.03347206488251686, 0.011951955035328865, 0.0309060700237751, -0.005843415390700102, 0.0018348917365074158, 0.03625956177711487, -0.015423238277435303, -0.0505964457988739, -0.03347812592983246, 0.0023186556063592434, 0.005098535213619471, -0.08141626417636871, -0.025127964094281197, -0.020823227241635323, -0.023055559024214745, -0.03968900442123413, 0.023522354662418365, -0.014623538590967655, 0.00821580458432436, -0.004060645122081041, 0.01094003301113844, 0.15394806861877441, 0.0358571894466877, 0.010279353708028793, -0.013756576925516129, -0.014736104756593704, 0.006379333790391684, -0.051700495183467865, -0.0066194296814501286, 0.01590665616095066, 0.004172442015260458, -0.031037122011184692, 0.042210254818201065, 0.03258347511291504, -0.028189554810523987, 0.02516610361635685, 0.011533530429005623, 0.08370476961135864, -0.00936557725071907, 0.01122322864830494, 0.003157595172524452, 0.040239837020635605, 0.05193062499165535, -0.019592422991991043, -0.054149627685546875, 0.022464649751782417, 0.0919506773352623, -0.0029223021119832993, 0.0025772161316126585, 0.04762426018714905, 0.0020152449142187834, 0.04524905979633331, -0.0021085855551064014, 0.014494422823190689, -0.003944667521864176, -0.0037460187450051308, -0.01412330660969019, 0.01628260500729084, -0.0314876064658165, 0.02049308270215988, -0.030892610549926758, 0.007615736685693264, 0.03319618105888367, -0.03918416425585747, -0.06441844254732132, -0.03570949286222458, 0.010246353223919868, -0.013667220249772072, -0.02762839011847973, -0.010968032293021679, 0.016313066706061363, -0.014481304213404655, 0.00920829363167286, 0.0022513694129884243, 0.013245158828794956, 0.01541413739323616, -0.006609126925468445, 0.03378782793879509, 0.007281507831066847, -0.01884099468588829, -0.044721152633428574, 0.017485912889242172, -0.04791124165058136, 0.0020350718405097723, -0.029618220403790474, 0.03648236393928528, -0.01731773652136326, -0.0148314218968153, 0.04912000149488449, -0.05561860650777817, -0.03245622292160988, 0.014664028771221638, -0.04244672507047653, -0.029653683304786682, 0.008427690714597702, -0.006362244486808777, 0.00844296719878912, -0.01607949286699295, 0.02833915874361992, 0.006444415543228388, 0.0726742297410965, 0.1521071046590805, -0.004555525723844767, -0.03228086978197098, 0.023075716570019722, 0.041731707751750946, -0.004437985364347696, -0.01832369714975357, 0.005721048451960087, 0.01574462465941906, 0.043417856097221375, 0.021552395075559616, 0.014580567367374897, -0.010491916909813881, 0.0360683910548687, -0.028111128136515617, -0.04880357161164284, 0.023075871169567108, 0.02205614000558853, 0.014186466112732887, -0.03828749805688858, 0.03109665773808956, 0.01460101269185543, -0.0994396060705185, -0.059305589646101, 0.00475228950381279, -0.04437878355383873, -0.025630606338381767, 0.05665918439626694, 0.01539009902626276, -0.02165108732879162, -0.035210270434617996, -0.023106668144464493, 0.07370861619710922, -0.0573730506002903, 0.05519420653581619, 0.021759293973445892, 0.005341736134141684, 0.024486370384693146, -0.030910884961485863, -0.04346911609172821, -0.005806423258036375, 0.014468620531260967, -0.0011166103649884462, -0.07938447594642639, -0.02814910188317299, 0.004279199056327343, 0.04659333825111389, 0.0500791110098362, 0.038024287670850754, 0.0038135885260999203, -0.03864685073494911, -0.018976721912622452, -0.004047686234116554, -0.0006086435751058161, -0.024896539747714996, 0.03190122917294502, 0.010633246973156929, -0.016169756650924683, -0.0215467419475317, -0.0035540403332561255, -0.023927947506308556, -0.01502592209726572, 0.009395185858011246, 0.002072528935968876, 0.03682088479399681, 0.01812521182000637, -0.026785803958773613, -0.004410683177411556, 0.0042550330981612206, 0.01817563734948635, -0.023052264004945755, -0.018123827874660492, 0.0313308946788311, 1.2032071936118882e-05, -0.03653785213828087, 0.004631448071449995, 0.002833362203091383, 0.012770740315318108, 0.018119188025593758, 0.010322686284780502, 0.07005304843187332, -0.0075157866813242435, 0.0019493353320285678, 0.04679735749959946, 0.006868365686386824, 0.03464523330330849, 0.0491483248770237, -0.024080920964479446, 0.029247725382447243, 0.02923911064863205, -0.051948804408311844, -0.0024255970492959023, -0.020327864214777946, -0.07906713336706161, 0.07951199263334274, -0.026502015069127083, -0.026650408282876015, -0.029690595343708992, 0.0012450219364836812, -0.06838546693325043, -0.025519484654068947, 0.016628803685307503, -0.015720902010798454, -0.04128091037273407, -0.002028197515755892, -0.032052330672740936, 0.037568822503089905, -0.005699212197214365, 0.007466228678822517, 0.027986297383904457, -0.023225784301757812, 0.009606800973415375, -0.005458205007016659, -0.03265443071722984, 0.005281555932015181, -0.009649365209043026, 0.035814207047224045, -0.022787433117628098, 0.04162018001079559, 0.021101877093315125, -0.03711758553981781, 0.036456525325775146, -0.009143311530351639, -0.003727928502485156, -0.06233411282300949, 0.02162012830376625, 0.02745671384036541, -0.007213531527668238, 0.02502921223640442, -0.07545062899589539, -0.008819512091577053, -0.00869128666818142, 0.014680608175694942, 0.059780992567539215, -0.039354145526885986, 0.02843937650322914]\"\n./train/lion/n02129165_11278.JPEG,lion,\"[0.027720868587493896, -0.03112315759062767, 0.02119213342666626, 0.05293130874633789, 0.003068554913625121, 0.03991324082016945, 0.05622570589184761, -0.0009417220717296004, 0.02491329051554203, 0.0305812768638134, -0.0024977324064821005, 0.011069439351558685, -0.01007205992937088, -0.02760128118097782, 0.004596144426614046, -0.021540692076086998, -0.014678866602480412, 0.008176727220416069, -0.01550260093063116, 0.06128174811601639, -0.023005999624729156, 0.021859657019376755, 0.03115883655846119, -0.0370834618806839, -0.016412438824772835, -0.00035867971018888056, 0.00029355587321333587, 0.007880044169723988, -0.02659936062991619, -0.06770582497119904, 0.015570137649774551, -0.010230175219476223, 0.013823872432112694, -0.004850146826356649, -0.007871256209909916, -0.02674124762415886, 0.0024150912649929523, 0.05230697616934776, -0.022808406502008438, 0.12044854462146759, 0.04803479090332985, 0.034273602068424225, -0.0031616694759577513, -0.011433118022978306, 0.002440704731270671, -0.028103288263082504, 0.05497073009610176, -0.0010546183912083507, 0.02410314232110977, -0.024268053472042084, -0.03696732223033905, 0.01224704273045063, 0.03612000495195389, 0.0035871255677193403, -0.05137575790286064, 0.0747678130865097, 0.04865964129567146, 0.07861140370368958, 0.04823807254433632, -0.0011697510490193963, -0.013202216476202011, 0.0364939421415329, -0.00989946536719799, 0.07182248681783676, -0.002951182657852769, -0.04372354596853256, -0.02665073610842228, 0.12685230374336243, -0.011857382953166962, -0.011334192007780075, 0.006620364263653755, -0.02523864433169365, 0.011801159009337425, 0.015200289897620678, -0.005929430015385151, -0.00904229935258627, -0.025173474103212357, -0.015104612335562706, -0.029958469793200493, -8.005607378436252e-05, -0.0030342889949679375, 0.025963183492422104, -0.05336770787835121, -0.010953905060887337, 0.04132195562124252, 0.0022525712847709656, -0.046244796365499496, -0.0469965897500515, 0.10628978908061981, 0.01406208984553814, 0.008553378283977509, 0.0030862523708492517, -0.5768846273422241, 0.025022104382514954, -0.07783740013837814, -0.005399649031460285, 0.0025743197184056044, 0.029063044115900993, -0.06576360017061234, -0.017647402361035347, -0.003915640525519848, -0.05903027579188347, -0.03141188621520996, -0.0009314425988122821, -0.008165405131876469, 0.023628564551472664, -0.0934368148446083, 0.008905771188437939, 0.007387196645140648, -0.025316426530480385, -0.035696905106306076, -0.020840225741267204, 0.028310008347034454, -0.0058853053487837315, 0.036077793687582016, 0.017941445112228394, 0.018591931089758873, -0.019183725118637085, 0.05968482792377472, -0.011652318760752678, -0.02408868819475174, 0.013952663168311119, 0.017365233972668648, 0.005445526447147131, -0.06371930986642838, -0.0664178878068924, 0.021341487765312195, -0.007509599439799786, 0.026436537504196167, 0.008858051151037216, -0.008629385381937027, -0.07038294523954391, 0.0040323855355381966, 0.08178436756134033, 0.010286628268659115, -0.028897300362586975, 0.010799193754792213, -0.02025124430656433, 0.011014124378561974, -0.0001771248789737001, -0.04273609071969986, -0.027822691947221756, -0.01564636267721653, 0.005436983425170183, -0.045123130083084106, 0.011725892312824726, -0.012408580631017685, -0.025031963363289833, -0.014391875825822353, 0.0005237517179921269, -0.007552647031843662, 0.014203714206814766, 0.019795866683125496, 0.006132535636425018, 0.006916978396475315, 0.061000850051641464, 0.0031586247496306896, 0.015154429711401463, 0.07264771312475204, -0.020399363711476326, -0.03416920825839043, -0.02844182401895523, -0.017037849873304367, 0.00588136026635766, -0.013404525816440582, 0.004801913630217314, -0.03181706368923187, -0.0029981702100485563, 0.019069040194153786, 0.012336375191807747, 0.0032719047740101814, 0.05494881793856621, -0.018321050330996513, -0.025103967636823654, 0.0015286963898688555, 0.011332310736179352, -0.11753598600625992, 0.033881425857543945, -0.03679575026035309, -0.007321073208004236, 0.004903669469058514, -0.012371166609227657, 0.038980793207883835, -0.04129781574010849, -0.036905158311128616, -0.007860077545046806, 0.008925015106797218, 0.025928476825356483, 0.0055743432603776455, 0.019518591463565826, 0.005225127562880516, 0.03740864247083664, 0.038870666176080704, 0.03630085662007332, -0.12005046755075455, 0.008153920993208885, -0.007806276436895132, 0.007090716622769833, -0.022080007940530777, -0.005043040961027145, -0.023730916902422905, 0.012800936587154865, 0.016007298603653908, 0.05769811570644379, 0.03371746465563774, 0.00838830042630434, -0.013711183331906796, 0.010991182178258896, 0.026250427588820457, -0.008851449936628342, -0.08892111480236053, -0.0013849609531462193, 0.015693530440330505, 0.036580268293619156, 0.004834957420825958, -0.005148897413164377, 0.035956528037786484, 0.06215286627411842, 0.02078850008547306, -0.01565556973218918, 0.01932200789451599, 0.058062341064214706, 0.026772279292345047, 0.017325209453701973, -0.01180137600749731, -0.005223346408456564, -0.03843090683221817, -0.00949169509112835, 0.020982319489121437, 0.00702547375112772, -0.04304240643978119, 0.022870169952511787, 0.019267389550805092, 0.05230766534805298, 0.04010968282818794, -0.057861294597387314, 0.007966037839651108, -0.003880596486851573, -0.025335071608424187, -0.00893554836511612, -0.022674983367323875, 0.021635551005601883, 0.0018057090928778052, -0.018387531861662865, -0.0004601499531418085, 0.05212535336613655, -0.0019193192711099982, -0.03835910186171532, -0.016423208639025688, 0.06905562430620193, -0.018349701538681984, 0.02073037438094616, 0.011212775483727455, -0.00807100534439087, -0.014232825487852097, -0.011301351711153984, -0.013198908418416977, 0.01824279874563217, 0.21386712789535522, 0.06058830767869949, 0.0027441680431365967, 0.002402237616479397, -0.0003823910665232688, 0.05819181725382805, 0.02707386016845703, 0.009198637679219246, 0.028101174160838127, 0.00888979621231556, 0.015225936658680439, 0.024963518604636192, -0.03832799568772316, 0.033695533871650696, 0.005313710775226355, 0.005280341487377882, 0.023531382903456688, 0.0006943808402866125, -0.015613230876624584, 0.03132692351937294, -0.008383539505302906, -0.014684589579701424, 0.054146576672792435, 0.025509042665362358, -0.01875447854399681, -0.040181178599596024, 0.007573261857032776, 0.0015296151395887136, -0.03913171589374542, -0.053984493017196655, -0.040011342614889145, -0.00881707202643156, 0.00652166036888957, -0.02337099425494671, -0.02827112004160881, 0.000292386015644297, 0.03585410490632057, -0.021492403000593185, 0.1651022881269455, 0.0355096273124218, 0.004584496840834618, -0.013576856814324856, -0.02214389108121395, -0.030473792925477028, -0.034040965139865875, -0.01464217621833086, -0.0015067807398736477, 0.018057288601994514, -0.0021627945825457573, 0.031247658655047417, 0.01608125865459442, 0.0008770305430516601, -0.0011072615161538124, -0.005429149139672518, 0.08164958655834198, -0.03832823038101196, -0.003623795695602894, -0.0003213543095625937, -0.0016113078454509377, 0.035230230540037155, -0.03228010982275009, -0.018896527588367462, 0.01151367463171482, 0.10869559645652771, -0.003314701374620199, -0.03507274016737938, 0.01572434790432453, -0.012613409198820591, 0.025329191237688065, -0.020232515409588814, 0.054755110293626785, -0.02350727468729019, 0.036473579704761505, -0.015969684347510338, -0.013333556242287159, -0.020102499052882195, -0.008517156355082989, -0.0444021113216877, 0.020747089758515358, 0.05614438280463219, -0.040049172937870026, -0.015364579856395721, -0.02599378488957882, 0.025938203558325768, -0.018132928758859634, -0.013015019707381725, -0.008743678219616413, 0.011685523204505444, -0.03397756814956665, -0.030873291194438934, -0.0028872215189039707, 0.0029625967144966125, 0.04997686296701431, 0.013703102245926857, 0.02199726179242134, 0.02883635088801384, -0.026955902576446533, -0.02619428187608719, -0.043848633766174316, -0.1166500374674797, -0.013445433229207993, 0.014134902507066727, 0.0741787850856781, 0.010302035138010979, -0.004199794493615627, 0.04115438833832741, -0.07445989549160004, 0.012174115516245365, 0.016559993848204613, -0.0322667695581913, 0.0025361725129187107, 0.01391033548861742, 0.0011789072304964066, -0.012637956067919731, -0.012513313442468643, 0.00695695960894227, 0.017562365159392357, 0.01848026178777218, 0.07628364115953445, -0.001986013725399971, -0.03330254927277565, 0.020905444398522377, 0.042716704308986664, -0.01609272137284279, -0.019696542993187904, 0.0030723190866410732, -0.017774131149053574, 0.02154257521033287, 0.02497197687625885, 0.02458910271525383, -0.023935891687870026, 0.0075058178044855595, -0.04423079267144203, -0.05898255854845047, 0.020925017073750496, 0.024797024205327034, 0.021395640447735786, -0.04436853900551796, 0.006704137194901705, 0.06398346275091171, -0.11814271658658981, -0.07229974120855331, -0.008815190754830837, -0.0013736203545704484, -0.08471553027629852, 0.03974471241235733, 0.00599880563095212, 0.03502926602959633, -0.050889160484075546, -0.03727439045906067, 0.05016670748591423, 0.025236327201128006, 0.09458271414041519, 0.040275558829307556, 0.0006856881664134562, 0.013196906074881554, -0.014492950402200222, -0.007971241138875484, -0.014481849037110806, 0.01557705458253622, 0.03535274788737297, -0.0826549381017685, -0.03921316936612129, -0.009378784336149693, 0.010120963677763939, 0.06389869004487991, 0.047251638025045395, -0.027115676552057266, -0.008852771483361721, -0.01742902584373951, 0.015209367498755455, 0.02908838540315628, -0.06197228655219078, 0.017196174710989, 0.006925392430275679, -0.0109128812327981, -0.030241485685110092, -0.03295563906431198, -0.00976195465773344, -0.02522606961429119, 0.006592170335352421, -0.02444647066295147, 0.0017004073597490788, -0.001181162428110838, -0.011864691972732544, -0.019018761813640594, -0.0007517557241953909, 0.006368696223944426, -0.013248373754322529, 0.032920584082603455, 0.045654650777578354, -0.009416494518518448, -0.06651680171489716, -0.0022453477140516043, -0.04584615305066109, -0.011959360912442207, 0.05661161243915558, -0.00972781702876091, 0.1093510240316391, -0.010823516175150871, -0.02083970233798027, 0.026279455050826073, 0.014645743183791637, 0.026334399357438087, 0.06947693973779678, 0.049083445221185684, 0.0067495605908334255, 0.018147557973861694, -0.04070340842008591, 0.0014498657546937466, 0.019165990874171257, -0.01980450749397278, 0.04155801236629486, -0.004958437290042639, -0.007235430181026459, -0.04045741632580757, 0.013195943087339401, -0.07715768367052078, -0.020016362890601158, 0.014442992396652699, 0.017385492101311684, -0.0001251088106073439, -0.009660681709647179, -0.03757716715335846, 0.007043186109513044, 0.0241787638515234, 0.0232502780854702, 0.05840856954455376, 0.01901598833501339, -0.024276824668049812, 0.04102344810962677, -0.031047571450471878, -0.008584040217101574, -0.006855722051113844, 0.05774635449051857, -0.01690291240811348, 0.026019098237156868, -0.0068365284241735935, 0.019511260092258453, 0.039894577115774155, 0.012726865708827972, 0.014246605336666107, -0.02758072502911091, 0.016823282465338707, 0.014582936652004719, -0.004527232609689236, -0.01194904837757349, -0.07183641195297241, 0.04349539428949356, -0.006847174372524023, -0.0032196661923080683, 0.046342432498931885, 0.010265014134347439, -0.009069586172699928]\"\n./train/lion/n02129165_17028.JPEG,lion,\"[-0.0016733187949284911, -0.007414494175463915, -0.010953789576888084, -0.0007948431884869933, 0.004333468619734049, -0.04632987827062607, 0.010749412700533867, -0.022653723135590553, 0.036011915653944016, 0.007126430980861187, 0.046801406890153885, -0.020253770053386688, 0.040561020374298096, -0.029062684625387192, -0.006556367035955191, -0.026095423847436905, 0.10533559322357178, 0.006800788454711437, 0.004849935416132212, 0.026697730645537376, -0.034742653369903564, 0.007631713058799505, 0.04375386983156204, -0.059627749025821686, -0.03076517954468727, 0.023986389860510826, -0.02727358601987362, -0.019588317722082138, 0.018752919510006905, -0.023894160985946655, 0.022991841658949852, -0.014938213862478733, 0.01294037327170372, -0.0003678560897242278, -0.038882944732904434, 0.00847122073173523, 0.033103011548519135, 0.06298210471868515, -0.021265996620059013, 0.12819725275039673, -0.014204412698745728, 0.007950409315526485, -0.001541660400107503, -0.02237735688686371, 0.002972529735416174, 0.045993417501449585, 0.043412357568740845, 0.030776536092162132, -0.03641660884022713, -0.0035427771508693695, -0.01480037346482277, 0.048690710216760635, 0.016948852688074112, -0.022588372230529785, -0.0089667197316885, 0.04166426137089729, 0.02696804702281952, 0.009539647027850151, 0.01492025051265955, -0.002717382274568081, 0.07568270713090897, 0.028224095702171326, -0.0073971194215118885, 0.01424519531428814, 0.017941107973456383, -0.02034418098628521, 0.0018223170191049576, 0.05332734063267708, -0.02358848787844181, -0.01563502848148346, -0.008481885306537151, -0.014537254348397255, 0.03416936472058296, -0.0008291636477224529, -1.8168813767260872e-05, -0.02035856619477272, -0.04441087320446968, -0.04169174283742905, -0.06949218362569809, 0.014276353642344475, -0.008568702265620232, 0.04413987696170807, -0.0019917914178222418, -0.02325705997645855, 0.09367752820253372, 0.017361318692564964, -0.06315797567367554, -0.02536003664135933, 0.02084842137992382, 0.01757272146642208, 0.007951180450618267, 0.014621276408433914, -0.6615018248558044, 0.0012146744411438704, -0.05076105520129204, 0.007433563936501741, -0.007657364942133427, -0.03601707145571709, -0.10385917127132416, -0.02592858485877514, -0.013645949773490429, -0.007474364712834358, -0.025713827461004257, 0.04957221820950508, 0.03948602452874184, 0.01147617120295763, -0.03942108154296875, 0.001713292091153562, 0.002623789943754673, -0.0025034823920577765, -0.028032006695866585, -0.03099151886999607, 0.02387106604874134, -0.0037929872050881386, -0.016654521226882935, 0.0012627087999135256, 0.06569550931453705, -0.013512207195162773, 0.03996889665722847, 0.02194303087890148, -0.010732021182775497, 0.0389711819589138, 0.026655012741684914, -0.011459597386419773, -0.027584059163928032, -0.02654571831226349, 0.003436514874920249, -0.03181994706392288, -0.01881105825304985, 0.02493000403046608, -0.0017830564174801111, -0.010408461093902588, -0.03327738493680954, 0.08733534812927246, 0.02954682521522045, -0.01883806847035885, -0.03159486502408981, 0.012989446520805359, -0.004769803024828434, 0.006478305906057358, -0.01737910881638527, -0.05114622786641121, -0.04517316445708275, 0.02372683957219124, -0.012405941262841225, 0.000610817049164325, -0.016699787229299545, 0.03853177651762962, -0.032369598746299744, -0.015090920962393284, -0.003552976530045271, 0.012379548512399197, 0.028732946142554283, -0.024251801893115044, -0.006920863874256611, 0.0327332504093647, 0.02937575988471508, 0.02542521245777607, 0.009462915360927582, 0.0307368915528059, -0.03530855104327202, -0.02341218665242195, -0.008118834346532822, -0.034454040229320526, 0.028627222403883934, -0.013998827897012234, -0.02132900431752205, 0.005456825252622366, 0.012316872365772724, 0.03182876482605934, -0.02249382995069027, 0.044261664152145386, -0.05877797305583954, -0.012504689395427704, -0.04205126315355301, 0.005289753898978233, -0.047501496970653534, 0.013881159014999866, 0.010614128783345222, 0.005683093331754208, 0.024871399626135826, -0.005603480618447065, 0.023408429697155952, -0.02582843042910099, -0.005907813087105751, 0.0031277649104595184, 0.03387971967458725, 0.0056329574435949326, -0.017038865014910698, 0.008411199785768986, -0.013062402606010437, -0.015382466837763786, -0.001943720504641533, 0.01760226860642433, -0.03285771235823631, 0.029527001082897186, 0.011585187166929245, -0.06353616714477539, -0.06957120448350906, -0.015292350202798843, 0.04305553808808327, 0.0026673278771340847, -0.0248477254062891, 0.0703066885471344, 0.02539982460439205, 0.00283052702434361, 0.005471373908221722, -0.01398902852088213, 0.04176401346921921, -0.02663971297442913, -0.07567568123340607, 0.006107719615101814, 0.02931276522576809, 0.034853823482990265, -0.019805854186415672, 0.01930646039545536, 0.02629745379090309, 0.0386878103017807, 0.09298865497112274, -0.002422780031338334, 0.04055139049887657, 0.015232542529702187, 0.0013374434784054756, -0.022383708506822586, -0.041219186037778854, -0.01518925279378891, -0.015282656066119671, 0.020473958924412727, 0.036435239017009735, 0.03364130109548569, -0.0027796700596809387, 0.008457683958113194, 0.03602467104792595, 0.02461281046271324, 0.04493384435772896, -0.029292479157447815, -0.0005434839986264706, 0.006925345864146948, -0.05534417927265167, -0.017380710691213608, -0.011516164988279343, 0.035156626254320145, 0.02608199045062065, -0.024818411096930504, -0.008712207898497581, 0.0193621963262558, 0.02219969592988491, -0.06843731552362442, -0.04077615216374397, 0.020065665245056152, 0.0034763754811137915, 0.03566832095384598, 0.02118908241391182, -0.024775270372629166, 0.025189289823174477, -0.0067292749881744385, -0.03515811264514923, -0.012674732133746147, 0.14038404822349548, 0.027144955471158028, -0.03642676770687103, 0.003185796085745096, -0.015412379987537861, 0.04368321970105171, 0.021945688873529434, -0.002718344796448946, 0.010258355177938938, -0.000994616188108921, 0.05553891137242317, -0.007028816733509302, -0.04025400057435036, 0.015121137723326683, 0.03437458351254463, 0.03741462901234627, 0.028665313497185707, -0.03516140952706337, 0.02829427272081375, -0.009167693555355072, -0.0235182773321867, -0.04600892961025238, 0.04068809747695923, 0.012152708135545254, -0.0058471024967730045, -0.020885951817035675, 0.0004665638552978635, 0.012157002463936806, -0.00958960596472025, -0.02543754316866398, -0.05707200989127159, -0.014669952914118767, -0.003330797189846635, -0.00023693613184150308, -0.004504866432398558, 0.01194554939866066, 0.0020449517760425806, -0.016310054808855057, 0.0710880309343338, 0.026912333443760872, 0.026620637625455856, -0.0033330058213323355, -0.021254822611808777, -0.00395613070577383, -0.02030596137046814, 0.03208113834261894, 0.020630985498428345, -0.03678804636001587, 0.0052850195206701756, 0.04286261275410652, 0.03802080452442169, -0.020253241062164307, -0.001390544231981039, -0.02593708038330078, 0.0872311145067215, -0.016958555206656456, 0.05189734324812889, -0.036730196326971054, 0.01007268950343132, 0.015231245197355747, -0.01056827511638403, -0.0680377408862114, 0.05236496403813362, 0.06241254135966301, 0.03960214927792549, -0.046262290328741074, 0.025939008221030235, 0.005511799827218056, 0.03151337057352066, -0.014635001309216022, 0.030474495142698288, 0.009853558614850044, 0.035617999732494354, 0.02089061215519905, -0.013901738449931145, -0.013619926758110523, 0.015395527705550194, 0.005329154431819916, -0.003488890128210187, 0.013141628354787827, -0.011578407138586044, -0.018427476286888123, -0.004315204918384552, 0.005018490366637707, -0.017890015617012978, 0.014147765934467316, 0.01719074137508869, 0.01799987629055977, -0.013299813494086266, 0.014577227644622326, 0.021579597145318985, -0.013458454981446266, -0.00933604035526514, -0.01232407707720995, 0.022083789110183716, 0.007069384213536978, -0.017658211290836334, -0.025697965174913406, -0.024026131257414818, -0.09299459308385849, -0.037585631012916565, -0.018078763037919998, 0.07516999542713165, 0.0021040625870227814, -0.0038089146837592125, -0.02612696774303913, -0.04335891827940941, -0.008129925467073917, 0.01653308793902397, -0.010883870534598827, -0.05564475059509277, 0.01588445156812668, -0.003148498712107539, 0.027495920658111572, -0.006431879010051489, -0.002940912265330553, -0.0028239982202649117, 0.03832196071743965, 0.09632822871208191, 0.006627417169511318, -0.027986744418740273, 0.015929818153381348, 0.027231426909565926, -0.05263547971844673, -0.010500536300241947, -0.04324088990688324, 0.002477505709975958, 0.06743016093969345, 0.024006370455026627, 0.01006986666470766, -0.0381622314453125, 0.012931316159665585, 0.030081944540143013, -0.06660444289445877, 0.01832561008632183, 0.014807739295065403, 0.0527443028986454, -0.037683941423892975, 0.04237258434295654, -0.00036385588464327157, -0.06432931870222092, -0.08978711813688278, -0.02185710519552231, -0.014586244709789753, 0.019264565780758858, 0.06287481635808945, 0.010906530544161797, -0.02749692089855671, -0.0419946163892746, -0.04269559681415558, 0.07441448420286179, -0.00757860392332077, 0.08520374447107315, 0.009516934864223003, -0.005850282032042742, 0.03440166264772415, -0.05325155705213547, -0.04569922760128975, -0.011007968336343765, 0.01730664074420929, 0.010348649695515633, -0.06994938105344772, -0.029584286734461784, -0.01581244170665741, 0.06070218235254288, 0.04638192430138588, 0.024822577834129333, -0.013269065879285336, 0.014280921779572964, 0.006817040033638477, -0.05652080848813057, 0.005487748887389898, -0.05116590857505798, 0.052973728626966476, 0.023314494639635086, 0.005358534399420023, -0.012752721086144447, -0.02116497978568077, 0.027047213166952133, -0.0016625688876956701, -0.017268028110265732, -0.01160709373652935, -0.011771679855883121, 0.04288280010223389, -0.055369336158037186, -0.01664888672530651, 0.012373695150017738, 0.026913238689303398, -0.007341164629906416, -0.01792588271200657, 0.016725091263651848, 0.020688729360699654, -0.023745039477944374, -0.03184074908494949, -0.022432450205087662, -0.005402002017945051, 0.024354053661227226, -0.01277073472738266, 0.08507348597049713, -0.006767109967768192, -0.013276038691401482, 0.033449675887823105, 0.013314654119312763, 0.051977772265672684, 0.06970150023698807, 0.01969997026026249, 0.018149051815271378, -0.0020221134182065725, -0.043357964605093, -0.014515123330056667, -0.0014447257854044437, -0.005660087335854769, 0.05809865891933441, -0.031439244747161865, 0.010300246998667717, -0.047855526208877563, 0.03616330400109291, -0.07092857360839844, -0.004706230014562607, -0.033917393535375595, 0.00390220177359879, -0.05508601665496826, 0.03533913195133209, -0.0031432209070771933, 0.00949207041412592, 0.037921883165836334, -0.003637200454249978, 0.02596689760684967, -0.017044099047780037, -0.009475193917751312, -0.007045468781143427, -0.018250301480293274, -0.027222461998462677, -0.024601997807621956, 0.057916734367609024, -0.03824184089899063, 0.0061165764927864075, 0.04456603527069092, -0.01178231555968523, 0.01202463824301958, 0.022723492234945297, -0.010322525165975094, -0.02217053435742855, 0.04275517165660858, 0.005851565860211849, -0.002234387444332242, 0.03224063664674759, -0.05762740224599838, 0.026538530364632607, -0.03707423061132431, -0.01836371421813965, 0.08395829796791077, 0.026502639055252075, 0.0038202672731131315]\"\n./train/lion/n02129165_19310.JPEG,lion,\"[-0.02637297846376896, -0.027417652308940887, -0.0265577994287014, -0.015082130208611488, -0.018655352294445038, -0.015533871948719025, 0.018824050202965736, 0.030572090297937393, 0.024245228618383408, 0.015710871666669846, 0.035878926515579224, -0.016527462750673294, 0.03383662551641464, 0.007530334871262312, -0.017005955800414085, 0.013055295683443546, 0.0333230197429657, -0.0057413773611187935, 0.027634715661406517, 0.03429269418120384, -0.013910037465393543, 0.024650195613503456, 0.017832450568675995, -0.06324576586484909, -0.028682399541139603, 0.030196473002433777, 0.018152689561247826, 0.018922435119748116, -0.004595350008457899, 0.009344768710434437, 0.016898538917303085, -0.026442233473062515, 0.007194978650659323, 0.004761913325637579, -0.06187177449464798, 0.02612951025366783, 0.01255470234900713, 0.06445994228124619, -0.021942943334579468, 0.1588646024465561, -0.02902502939105034, 0.007601399905979633, 0.000705293903592974, 8.594235987402499e-05, -0.01249321736395359, 0.05868171900510788, 0.028702041134238243, 0.04265753552317619, -0.01504590269178152, -0.009550562128424644, 0.001532108522951603, 0.020822172984480858, 0.009783048182725906, 0.032368216663599014, 0.008743198588490486, 0.029498549178242683, 0.019078131765127182, 0.05256885662674904, -0.029704544693231583, -0.01792481541633606, 0.04734348878264427, 0.025638042017817497, -0.025838833302259445, -0.06489647179841995, -0.013727826997637749, -0.03830092400312424, 0.0018755501369014382, 0.06592453271150589, -0.01833137683570385, -0.003626088844612241, -0.024242686107754707, 0.013211679644882679, 0.02975817769765854, -0.053761232644319534, -0.008874066174030304, -0.016683043912053108, -0.08072980493307114, -0.04763801395893097, -0.053245868533849716, -0.03575043007731438, -0.02626011334359646, 0.006434774026274681, -0.0010050855344161391, -0.059796079993247986, 0.10256518423557281, 0.011747696436941624, 0.02244977280497551, -0.02976778708398342, 0.035084426403045654, -0.00820913165807724, 0.012572266161441803, -0.014373991638422012, -0.6663265824317932, 0.01699797809123993, -0.045041490346193314, 0.010761924088001251, 0.005780309438705444, -0.04373425245285034, -0.08688168227672577, 0.021817920729517937, -0.03138519078493118, -0.02539602480828762, 0.005285273306071758, 0.025720447301864624, -0.01508418470621109, 0.07084590196609497, -0.12500408291816711, 0.010076389648020267, -0.015436576679348946, -0.018841343000531197, -0.0017845919355750084, 0.02306758426129818, 0.0320691354572773, 0.009681248106062412, -0.02699902094900608, -0.02189277485013008, 0.026025161147117615, -0.006206890568137169, 0.05238185077905655, 0.019150350242853165, -0.0020103324204683304, -0.0064314017072319984, 0.02934715524315834, 0.01297463197261095, -0.03752189874649048, -0.015931924805045128, 0.019386086612939835, -0.0023204470053315163, -0.01621272973716259, -0.0073652369901537895, 0.01070421189069748, -0.003936906810849905, -0.005988858174532652, 0.08787812292575836, 0.008162789046764374, -0.01317631360143423, -0.03200521692633629, -0.014897585846483707, -0.021074166521430016, -0.029294108971953392, 0.03562932088971138, -0.04023806378245354, 0.029059866443276405, -0.027827255427837372, -0.018513547256588936, 0.029988957569003105, -0.035001542419195175, 0.03217790275812149, -0.017789514735341072, 0.028007980436086655, -0.0055100275203585625, 0.008770706132054329, -0.04033535718917847, -0.024409234523773193, -0.004927517846226692, -0.008326014503836632, 0.03641154617071152, 0.03367932140827179, -0.0002655602584127337, 0.0005293722497299314, -0.026448458433151245, 0.0022244248539209366, -0.00022299775446299464, 0.006721014156937599, 0.05972552299499512, -0.02334062196314335, -0.06179976463317871, -0.009564603678882122, 0.016418347135186195, 0.020278261974453926, 0.004727265797555447, -0.0026133202482014894, -0.02198966033756733, 0.0014713482232764363, -0.04299900308251381, -0.01079921331256628, -0.004793867468833923, 0.013330611400306225, -0.04471484571695328, 0.024782154709100723, -0.013314328156411648, -0.015623245388269424, -0.010005548596382141, 0.01799369417130947, -0.019851472228765488, 0.001885567675344646, 0.032798197120428085, -0.005492158234119415, 0.037432312965393066, -0.002597773214802146, -0.0023828966077417135, -0.026700373739004135, 0.03723383694887161, 0.022036666050553322, 0.04009615257382393, 0.01902344636619091, -0.00408009672537446, -0.05859304964542389, -0.04687764495611191, 0.001993098994717002, 0.00851509254425764, 0.02645207569003105, 0.03169536218047142, 0.07362552732229233, 0.011314203962683678, 0.013198072090744972, -0.007263221312314272, -0.010599276050925255, 0.04323206841945648, -0.07336024194955826, -0.036262381821870804, -0.008963369764387608, 0.03655552119016647, 0.005879256408661604, -0.009309747256338596, -0.00871268194168806, 0.02910231426358223, 0.0015730233862996101, 0.10119921714067459, -0.0016971919685602188, 0.058837372809648514, 0.024810047820210457, 0.004095080774277449, -0.0009675283217802644, -0.0124038215726614, 0.0127553166821599, 0.010443420149385929, 0.01946517452597618, 0.02111479453742504, -0.007185166236013174, 0.016874661669135094, 0.03099791705608368, 0.03554521128535271, 0.031092390418052673, -0.01413305476307869, -0.010484087280929089, -0.010028294287621975, -0.01012673880904913, -0.067999467253685, -0.05854213610291481, 0.013390129432082176, -0.0007684866432100534, 0.02435573749244213, -0.006461698096245527, -0.029883380979299545, 0.008071773685514927, 0.013677750714123249, -0.04330217465758324, -0.023758787661790848, 0.019956715404987335, -0.009143018163740635, 0.019942600280046463, 0.02520761825144291, -0.017046058550477028, -0.0022208308801054955, -0.02921920083463192, -0.03551022708415985, -0.034840021282434464, 0.14296334981918335, 0.009186246432363987, -0.012971604242920876, 0.020750854164361954, 0.004593221470713615, -0.04851670190691948, 0.0015931603265926242, 0.009305120445787907, 0.014783983118832111, -0.018874727189540863, 0.0029947864823043346, 0.0072896722704172134, -0.0387849286198616, 0.0002926158194895834, -0.011129266582429409, 0.044224075973033905, 0.031122369691729546, -0.02193504385650158, 0.0363360270857811, -0.0428682342171669, -0.0052792830392718315, 0.00426796218380332, 0.019091764464974403, 0.028883814811706543, 0.020469149574637413, -0.012877648696303368, 0.01172516867518425, -0.002604351146146655, -0.1186121329665184, -0.02764967456459999, -0.01801326498389244, -0.015557737089693546, -0.03257353976368904, -0.0036292257718741894, -0.025490567088127136, 0.006854858249425888, 0.04956592991948128, -0.016376454383134842, 0.04590222239494324, -0.0067998324520885944, 0.007766601163893938, 0.005047709681093693, 0.023076603189110756, 0.011248902417719364, 0.035140201449394226, 0.017963096499443054, -0.013660771772265434, -0.03127436712384224, 0.022324183955788612, 0.007715629879385233, 0.03988552466034889, 0.0019759144634008408, -0.012785310856997967, -0.04422047361731529, 0.0877426490187645, -0.05468369275331497, 0.030308201909065247, -0.037046827375888824, -0.009368333965539932, 0.043270424008369446, 0.005184870678931475, -0.05753142386674881, 0.04572929069399834, 0.020881913602352142, 0.033601097762584686, -0.009486222639679909, 0.013470165431499481, -0.002231242600828409, 0.006747339386492968, -0.03309039771556854, 0.026016155257821083, 0.040554147213697433, -0.00419250875711441, -0.0071416874416172504, 0.003757891245186329, -0.02228819765150547, 0.009545871056616306, -0.03457308188080788, -0.011546971276402473, 0.01616688072681427, 0.01398840919137001, -0.06926603615283966, -0.001551354886032641, 0.029495516791939735, -0.005619772709906101, -0.015557865612208843, -0.014000676572322845, 0.009343358688056469, -0.015222334302961826, 0.0071595218032598495, 0.018397256731987, -0.06301677227020264, -0.05098848417401314, -0.04390376806259155, 0.034071292728185654, -0.02449975535273552, -0.012638636864721775, 0.01933133415877819, 0.0021170845720916986, -0.060070522129535675, -0.016478154808282852, 0.004207713063806295, 0.044153790920972824, 0.01134100928902626, 0.04504033923149109, -0.032398074865341187, -0.08179295808076859, -0.011797996237874031, 0.024872321635484695, -0.09453529864549637, -0.046721670776605606, 0.003613569773733616, -0.03289363160729408, 0.005429259967058897, 0.00504198158159852, 0.012684625573456287, -0.03761780261993408, 0.06996884942054749, 0.09192902594804764, -0.0038675363175570965, -0.04437791183590889, -0.0008357020560652018, 0.04470789432525635, 0.019173137843608856, -0.02589470148086548, 0.015937138348817825, -0.006773549597710371, 0.028251927345991135, -0.014639838598668575, 0.03941857069730759, -0.03749481961131096, 0.008153471164405346, -0.026710158213973045, -0.08450278639793396, 0.02208488993346691, -0.013808062300086021, 0.04716324433684349, -0.027940658852458, 0.05471781641244888, -0.0016975983744487166, -0.07818718999624252, -0.06619326770305634, -0.010366425849497318, 0.008297877386212349, 0.05217947065830231, 0.077384352684021, 0.01250725332647562, -0.03691907599568367, 2.3886814233264886e-05, -0.05334458127617836, 0.08917886763811111, -0.02404853329062462, 0.0587194487452507, 0.019723106175661087, -0.014953026548027992, 0.01989235170185566, -0.013288617134094238, -0.02657504193484783, -0.01713637262582779, -0.028027387335896492, 0.008797403424978256, -0.05625871196389198, -0.03820320963859558, -0.013127877376973629, 0.015685753896832466, 0.034454889595508575, -0.005800827872008085, 0.015935856848955154, 0.02077348344027996, -0.022766076028347015, 0.04025118798017502, 0.015060422010719776, -0.031054764986038208, 0.06066079065203667, -0.029766831547021866, -0.0021753704641014338, -0.0108182393014431, -0.01215934008359909, 0.03610680624842644, 0.004005147144198418, 0.013030110858380795, -0.03283970430493355, -0.02428380772471428, 0.013533078134059906, -0.039924684911966324, 0.004674054682254791, 0.01515172142535448, -0.014469299465417862, -0.03120584227144718, -0.0020741329062730074, 0.02554040402173996, 0.020590225234627724, -0.018165748566389084, -0.018924832344055176, 0.004511887673288584, 0.029337693005800247, 0.015318090096116066, 0.024457143619656563, 0.026110311970114708, 0.033619966357946396, 0.0018249013228341937, 0.02562742680311203, 0.005634253844618797, 0.0220884308218956, 0.039210908114910126, 0.02128499560058117, -0.00925747212022543, 0.008250443264842033, -0.054491110146045685, 0.00508491788059473, -0.012798569165170193, -0.043067436665296555, 0.06461316347122192, -0.02861817739903927, -0.008428606204688549, -0.012587709352374077, -0.007653392851352692, -0.043813273310661316, -0.009645776823163033, -0.02599007822573185, 0.005495533347129822, -0.01573937013745308, 0.02298310399055481, -0.04170442000031471, 0.014663062989711761, 0.014085708186030388, -0.027188822627067566, -0.001457573496736586, 0.017333531752228737, 0.028086381033062935, -0.010684311389923096, -0.002119923708960414, -0.017954478040337563, -0.00498765055090189, 0.01093214564025402, -0.018577056005597115, -0.02165536768734455, 0.02416951209306717, -0.030485861003398895, -0.019848657771945, 0.0021419718395918608, -0.004711546935141087, -0.0034135521855205297, 0.04272397980093956, -0.032326795160770416, -0.012044858187437057, -0.043882936239242554, -0.027394771575927734, 0.013850639574229717, -0.037260353565216064, -0.023538416251540184, 0.07413455098867416, -0.01644551008939743, 0.01576540246605873]\"\n./train/comic_book/n06596364_7928.JPEG,comic_book,\"[-0.032561834901571274, -0.07092387229204178, -0.02006686106324196, 0.07215685397386551, -0.05578092858195305, -0.008651557378470898, 0.030218232423067093, 0.020046405494213104, -0.07559636980295181, -0.028056085109710693, 0.0049782851710915565, 0.006286062765866518, 0.06243158504366875, -0.06676967442035675, -0.0005483192508108914, -0.01996849849820137, 0.08874861896038055, 0.07373876124620438, 0.06306757032871246, 0.02063176967203617, 0.00898904912173748, 0.010974765755236149, -0.009762318804860115, -0.05735528841614723, 0.035383060574531555, 0.04347379878163338, 0.02476353384554386, -0.008529691025614738, -0.010576911270618439, -0.029552003368735313, -0.029613658785820007, 0.02524794638156891, -0.004425204824656248, -0.03036401979625225, -0.04035867005586624, 0.013589877635240555, -0.03435287997126579, 0.035751067101955414, 0.04760017246007919, 0.07697107642889023, 0.01690463349223137, -0.07955936342477798, -0.07546630501747131, 0.01380604412406683, 0.001514487899839878, -0.06033654510974884, -0.018163219094276428, -0.004788700491189957, 0.0008820343064144254, 0.04545147344470024, 0.0354798324406147, 0.044463466852903366, 0.026960479095578194, 0.03365739807486534, -0.011875497177243233, -0.015796132385730743, 0.035870261490345, -0.01457932312041521, 0.018403898924589157, -0.03099248558282852, 0.01612270250916481, 0.05093681067228317, 0.014757035300135612, 0.03999388962984085, 0.02875044383108616, 0.040084175765514374, -0.04227348044514656, 0.07320612668991089, -0.0028895807918161154, -0.00020897189097013324, -0.0008775815367698669, -0.07655750215053558, 0.0031836668495088816, -0.025302281603217125, 0.04353334382176399, 0.04059484228491783, -0.043831851333379745, -0.007233028300106525, -0.02308211475610733, 0.027532443404197693, 0.03400968760251999, 0.027355080470442772, 0.02018130198121071, -0.0012048326898366213, -0.042127057909965515, 0.0432378314435482, -0.05157756060361862, -0.009569689631462097, -0.05048356577754021, 0.004238187335431576, -0.03300749137997627, -0.0014560287818312645, -0.48233434557914734, 0.0027144071646034718, -0.0012316755019128323, 0.03596985712647438, -0.0008118848782032728, 0.01645524799823761, 0.040713950991630554, -0.017451081424951553, 0.0819687470793724, 0.02254164032638073, -0.005950999911874533, -0.028643889352679253, -0.013600251637399197, 0.0032592839561402798, -0.13164909183979034, 0.023801622912287712, -0.005265873856842518, 0.009917224757373333, -0.001922372612170875, 0.01975324936211109, 0.008830897510051727, 0.07851266860961914, -0.022613050416111946, -0.0639275312423706, -0.022975865751504898, -0.005931553430855274, 0.032096318900585175, 0.022474391385912895, 0.02086530439555645, -0.006234348751604557, -0.0063179233111441135, 0.007142060901969671, 0.024643395096063614, 0.0013018350582569838, -0.01838705874979496, 0.034451186656951904, 0.02660336345434189, -0.00017183224554173648, 0.01669660024344921, -0.02276558056473732, -0.044040873646736145, 0.08869577199220657, -0.024017300456762314, -0.015337805263698101, -0.013405724428594112, -0.037648044526576996, -0.0021149422973394394, 0.0028462079353630543, 0.012776246294379234, 0.01601181924343109, -0.0404847078025341, -0.024109557271003723, -0.014726183377206326, 0.030542373657226562, -0.00042164456681348383, -0.04527091979980469, 0.02115623652935028, -0.014498122967779636, -0.013286978006362915, 0.0009911487577483058, 0.0906604453921318, 0.0233578123152256, -0.04451223835349083, -0.00784211978316307, -0.018514981493353844, -0.043001919984817505, 0.018766725435853004, -0.011368270963430405, -0.015385040082037449, -0.040313564240932465, 0.001720896689221263, 0.021421926096081734, 0.0016459471080452204, 0.052243221551179886, -0.0011150469072163105, 0.009002095088362694, 0.019124768674373627, 0.008018167689442635, -0.0032032164745032787, -0.01272550318390131, -0.021768568083643913, -0.0697288066148758, 0.023146959021687508, -0.07138504087924957, 0.05233515799045563, -0.026888342574238777, -0.008589252829551697, 0.004434215370565653, 0.010262181982398033, -0.03254920244216919, -0.01576923578977585, 0.038571398705244064, 0.036039505153894424, 0.02317563071846962, 0.03998029604554176, -0.009558185935020447, 0.048340607434511185, -0.018174542114138603, 0.024999499320983887, 0.06439097225666046, 0.08104892075061798, 0.03834924101829529, 0.020170848816633224, 0.005485048983246088, -0.05586601793766022, -0.03583313524723053, -0.014469227753579617, 0.005954031832516193, -0.022379599511623383, -0.00690991198644042, 0.014559382572770119, -0.06569904834032059, -0.06536711752414703, 0.008307262323796749, -0.03056187927722931, 0.004905230365693569, -0.028831467032432556, 0.0014471372123807669, -0.10342520475387573, 0.030064336955547333, -0.018092134967446327, 0.03576299920678139, 0.007300377823412418, -0.02757886052131653, 0.005570323672145605, -0.0432879701256752, -0.08029980212450027, 0.01256493479013443, -0.03425225242972374, -0.0547504648566246, -0.023162055760622025, -0.07552492618560791, -0.07372927665710449, 0.017252229154109955, 0.019049497321248055, -0.010161906480789185, 0.04005422815680504, -0.07758010178804398, -0.004341690801084042, -0.05503818020224571, -0.0050415163859725, 0.012584419921040535, -0.014049286022782326, 0.007209368981420994, -0.028249748051166534, -0.025723231956362724, 0.004864373244345188, -0.001076786546036601, 0.020402686670422554, -0.009455242194235325, 0.018068956211209297, -0.009207669645547867, -0.04552941024303436, 0.01984911970794201, -0.001823608996346593, 0.035240523517131805, -0.0302803423255682, 0.011669187806546688, -0.05746738985180855, 0.028391938656568527, 0.016593890264630318, 0.012486699037253857, 0.00779673783108592, -0.010958530940115452, -0.0459003672003746, -0.020814165472984314, -0.1788066178560257, -0.08591459691524506, 0.019272511824965477, 0.014329188503324986, 0.05114898085594177, -0.0786999985575676, 0.03431573137640953, 0.008636238984763622, 0.0313437357544899, 0.037706971168518066, -0.021239379420876503, 0.010819617658853531, 0.016337720677256584, 0.016723891720175743, 0.029534462839365005, 0.006786094978451729, 0.023274095728993416, 0.05660027638077736, -0.018535276874899864, 0.010113246738910675, -0.02076537162065506, -0.021631624549627304, 0.03937745466828346, 0.04178458824753761, 0.04950804263353348, 0.03938140347599983, 0.03354121372103691, -0.0030003897845745087, -0.04342131316661835, -0.00833471491932869, 0.002028379589319229, -0.02974248304963112, -0.007616617251187563, -0.1079799011349678, 0.031567543745040894, 0.05660984665155411, 0.019166672602295876, 0.028841949999332428, 0.016505997627973557, -0.009441627189517021, -0.0016167062567546964, 0.02022128738462925, -0.016750166192650795, 0.024285439401865005, -0.04203386977314949, 0.012611965648829937, 0.02286512590944767, 0.011362207122147083, 0.04594022035598755, 0.031606268137693405, 0.005398791283369064, -0.055948082357645035, -0.030429817736148834, 0.03552455082535744, 0.08839186280965805, 0.05574356019496918, 0.006579681299626827, -0.040205806493759155, 0.002444019541144371, -0.007391083519905806, -0.041894398629665375, 0.0704263299703598, 0.009054645895957947, -0.0036714335437864065, -0.06496898829936981, -0.017517268657684326, 0.01852375455200672, 0.028940271586179733, 0.02461836487054825, 0.0074782101437449455, 0.038760486990213394, -0.04545747861266136, -0.029038719832897186, 0.013015564531087875, 0.034658320248126984, -0.0691351443529129, 0.01059639360755682, -0.008841149508953094, 0.002439682837575674, -0.022222137078642845, 0.015468561090528965, -0.008193914778530598, -0.022542020305991173, 0.043807320296764374, 0.054708197712898254, -0.0006706705316901207, -0.0016898054163902998, -0.03156190738081932, 0.026176372542977333, 0.03406839445233345, -0.007743876427412033, -0.029039083048701286, 0.08482715487480164, 0.030774790793657303, 0.0032926711719483137, 0.029339052736759186, 0.007881863042712212, 0.05875031650066376, -0.04854816570878029, 0.03489122539758682, -0.002191142411902547, -0.028493234887719154, -0.02661992982029915, -0.009246401488780975, 0.032240867614746094, -0.06348030269145966, -0.19656172394752502, 0.041029192507267, -0.00665986817330122, 0.12205418199300766, -0.03944763168692589, 0.0024181362241506577, 0.03764816373586655, 0.05879843607544899, 0.019674887880682945, -0.007992690429091454, -0.019390324130654335, 0.010501713491976261, 0.05026887729763985, -0.027264723554253578, 0.10993923246860504, 0.01741107739508152, 0.005167498718947172, -0.008234214037656784, -0.0373118594288826, -0.016493825241923332, -0.029070230200886726, 0.03178299218416214, 0.05613088235259056, 0.02964518591761589, -0.03843118995428085, 0.019044693559408188, -0.019846487790346146, -0.02257520891726017, 0.028980989009141922, 0.02019897662103176, 0.025563355535268784, -0.011900392360985279, 0.053005240857601166, 0.04253515601158142, 0.06097692623734474, -0.09296335279941559, 0.013335899449884892, -0.020572936162352562, -0.039523813873529434, -0.06291842460632324, 0.045131608843803406, 0.0020851013250648975, 0.015890831127762794, 0.03929458186030388, -0.04828491806983948, -0.00977589562535286, 0.0033537084236741066, 0.01180717907845974, 0.03441833704710007, 0.020743954926729202, 0.0058147478848695755, 0.00013236893573775887, -0.03282121196389198, -0.030041785910725594, 0.0024870075285434723, -0.03365553542971611, 0.02627755142748356, 0.01378190889954567, 0.024778492748737335, 0.036978721618652344, -0.008575579151511192, -0.02459031529724598, 0.015979206189513206, 0.017361246049404144, 0.11693528294563293, -0.006568368058651686, 0.016048535704612732, 0.035671014338731766, 0.07620884478092194, 0.007441598456352949, -0.03843152895569801, 0.002237550215795636, -0.006135561503469944, -0.03611373156309128, 0.0025314856320619583, -0.014155221171677113, -0.017454350367188454, -0.0611899308860302, -0.0246561449021101, -0.015682173892855644, 0.019667722284793854, 0.048961199820041656, 0.02419283799827099, -0.03808623179793358, -0.020121345296502113, 0.0043020062148571014, 0.017306942492723465, -0.002640352351590991, -0.028635084629058838, 0.03705911338329315, -0.015802837908267975, -0.06344426423311234, -0.012315917760133743, -0.019602762535214424, -0.00025320338318124413, -0.022367358207702637, 0.04921534284949303, 0.00487504480406642, -0.017188502475619316, -0.02200954779982567, 0.05695986747741699, -0.008697118610143661, -0.08146112412214279, 0.0037740985862910748, -0.007540709804743528, 0.02656758390367031, -0.007199795916676521, -0.03273223340511322, -0.04041630029678345, -0.05709785595536232, 0.01204500813037157, 0.011005240492522717, 0.01675564981997013, -0.008958893828094006, -0.01573004759848118, -0.007404549513012171, 0.010514471679925919, -0.002601303393021226, -0.04063374549150467, 0.03771529346704483, 0.0069868797436356544, 0.07888303697109222, 0.01420570071786642, -0.04691674932837486, 0.04215264692902565, -0.04826474189758301, 0.05374007299542427, -0.044216107577085495, 0.004433861933648586, -0.10516785085201263, -0.009232676587998867, 0.0019497859757393599, 0.08157426863908768, -0.017657000571489334, -0.0789417251944542, -0.05326351150870323, -0.0388803593814373, -0.08294281363487244, 0.02031989023089409, -0.03359473496675491, 0.023359598591923714, 0.026845768094062805, -0.0037737868260592222, 0.016503755003213882, -0.0406288281083107, -0.01454559899866581, -0.005962585564702749, -0.04084736481308937]\"\n./train/comic_book/n06596364_4451.JPEG,comic_book,\"[-0.04052899405360222, 0.010540271177887917, 0.019549181684851646, 0.006487284321337938, 0.08661169558763504, -0.025922775268554688, -0.003944880794733763, 0.01526639237999916, -0.024012990295886993, 0.024479297921061516, -0.015004965476691723, 0.05137393996119499, 0.04123959317803383, 0.012530368752777576, -0.02311205118894577, -0.03291269764304161, 0.03721204400062561, -0.02571684867143631, 0.04290291294455528, -0.04832959175109863, -0.03487490117549896, 0.02967347390949726, -0.0023536502849310637, 0.04358351603150368, 0.010550566017627716, -0.016605298966169357, -0.017492983490228653, -0.025218354538083076, -0.04592542350292206, 0.030205920338630676, 0.017046263441443443, 0.009183339774608612, -0.03786519914865494, 0.03397837281227112, -0.027757227420806885, 0.05687740445137024, 0.017704779282212257, -0.013636026531457901, 0.03185729309916496, 0.06408965587615967, -0.025766491889953613, -0.04527590051293373, 0.01851755939424038, -0.02975478582084179, 0.04725359380245209, -0.05090196803212166, 0.022377319633960724, 0.06292998045682907, -0.01959145814180374, -0.00859791599214077, 0.08818475902080536, 0.028829053044319153, 0.011843817308545113, 0.01093611866235733, 0.014424647204577923, 0.0018060306319966912, 0.076411671936512, -0.022459032014012337, -0.005392821971327066, 0.04498188570141792, -0.0801801010966301, -0.01114948745816946, 0.010919155552983284, 0.024889260530471802, -0.045110173523426056, -0.04174114391207695, 0.036719419062137604, -0.03165603056550026, -0.012469977140426636, 0.018601318821310997, 0.028118520975112915, 0.026880834251642227, -0.034167807549238205, -0.024897491559386253, 0.06626655906438828, 0.011120573617517948, 0.01429048366844654, -0.019519474357366562, 0.014122593216598034, -0.037467315793037415, 0.02297941781580448, 0.04824554920196533, -0.06796126812696457, -0.0038945209234952927, 0.04598663002252579, 0.016783740371465683, 0.0036537176929414272, 0.03008461743593216, -0.008261066861450672, -0.015808723866939545, -0.05150444060564041, 0.03328166902065277, -0.44054898619651794, 0.02193724364042282, -0.001117003383114934, -0.04935293272137642, 0.012109276838600636, 0.03261461481451988, 0.05230610817670822, -0.10584406554698944, 0.009893229231238365, -0.043758831918239594, -0.00974276103079319, 0.07311356067657471, 0.029705459251999855, 0.028855349868535995, -0.18532997369766235, -0.03585594892501831, -0.01779686100780964, 0.038787588477134705, -0.03128960728645325, -0.04250664636492729, -0.04756631329655647, -0.04759146645665169, 0.009729634039103985, 0.02254973165690899, -0.02330363169312477, 0.03765392303466797, -0.009897267445921898, -0.020786156877875328, -0.028179045766592026, 0.03132941573858261, -0.007031535729765892, 0.01956791803240776, -0.003052227897569537, -0.015019886195659637, 0.023460078984498978, 0.034634921699762344, -0.012895924039185047, -0.02315450645983219, 0.040829773992300034, -0.01917286217212677, 0.0029350314289331436, 0.08332936465740204, -0.02043582685291767, -0.04835815727710724, 0.03240703418850899, 0.03479023277759552, -0.0157399270683527, 0.054742198437452316, -0.028664475306868553, -0.0035469273570924997, -0.06421156227588654, -0.03539494797587395, -0.01093526091426611, -0.024073582142591476, 0.03778626769781113, 0.013522111810743809, -0.0067267343401908875, -0.004645544569939375, -0.0476074293255806, -0.061639364808797836, 0.12306065857410431, -0.06462839245796204, -0.018302934244275093, -0.0491742305457592, -0.02121765725314617, 0.03234615549445152, 0.03989725187420845, -0.008581241592764854, 0.04469720274209976, -0.07050514221191406, -0.04117074981331825, 0.03852304816246033, -0.04895790293812752, -0.0035492414608597755, 0.045047394931316376, 0.010306990705430508, -0.03153771907091141, -0.045691389590501785, 0.027569038793444633, 0.06763613224029541, 0.036011550575494766, -0.0020621230360120535, -0.043213386088609695, 0.031448543071746826, 0.03367861732840538, -0.021782545372843742, -0.012186867184937, -0.02688324823975563, 0.015705276280641556, -0.025486893951892853, -0.05058412253856659, -0.0027876244857907295, 0.029536643996834755, 0.01469658873975277, -0.006826856639236212, -0.04685547202825546, 0.01530641969293356, 0.04340554028749466, -0.012980624102056026, -0.019498733803629875, 0.010053474456071854, 0.011023309081792831, -0.017006153240799904, -0.06196467578411102, -0.01388530246913433, 0.023751314729452133, -0.012438487261533737, 0.036320894956588745, 0.01877143234014511, -0.0403551310300827, 0.020541971549391747, 0.043561216443777084, -0.033388007432222366, 0.025188352912664413, -0.05031337961554527, 0.03586960956454277, -0.005488661117851734, 0.014552067033946514, -0.03797747939825058, 0.019343283027410507, -0.04535633325576782, -0.036081910133361816, 0.05541820824146271, -0.006360946223139763, -0.016783298924565315, 0.023105593398213387, -0.032215509563684464, -0.008548010140657425, -0.046849325299263, 0.009887387044727802, 0.02035965584218502, -0.01561086717993021, -0.013733240775763988, 0.013631238602101803, 0.0034531662240624428, 0.03493563458323479, -0.002862095134332776, -0.010171989910304546, -0.026599321514368057, -0.0010951700387522578, 0.02875245362520218, 0.026286063715815544, -0.02402202971279621, -0.0055226352997124195, 0.0327492393553257, -0.015824172645807266, -0.017352772876620293, 0.011009921319782734, 0.02909342758357525, 0.02454959601163864, -0.04983492195606232, -0.012197035364806652, 0.05831330642104149, -0.05934161692857742, 0.0046453955583274364, 0.0043450756929814816, -0.06066092103719711, 0.09137124568223953, 0.022514916956424713, 0.04506184533238411, -0.014055326581001282, -0.03565627336502075, -0.014110681600868702, -0.018827201798558235, 0.008449782617390156, 0.03270799294114113, -0.20513923466205597, -0.008792872540652752, 0.05317715182900429, -0.040010966360569, -0.014571759849786758, -0.19040633738040924, 0.035044264048337936, -0.009680820629000664, 0.050247978419065475, 0.011423041112720966, -0.01311239693313837, -0.014741366729140282, -0.03587988764047623, 0.036975134164094925, 0.026352612301707268, -0.014657620340585709, 0.03425922989845276, -0.03419055417180061, 0.0017441712552681565, 0.04542256146669388, -0.046486206352710724, 0.018067922443151474, 0.0017372320871800184, -0.030722539871931076, 0.02441329136490822, 0.029779383912682533, -0.016746994107961655, 0.018238937482237816, -0.09719706326723099, -0.016349254176020622, -0.04050339758396149, -0.010448263958096504, 0.00724048214033246, 0.06389591842889786, 0.07065854221582413, -0.00477807829156518, -0.0167721938341856, 0.01797701232135296, 0.021328585222363472, 0.027569593861699104, -0.017841098830103874, 0.01135170552879572, -0.026733266189694405, -0.01642581634223461, 0.007427023723721504, 0.02844141609966755, -0.048696987330913544, -0.0853869616985321, 0.00357233639806509, -0.039288230240345, 0.0478653721511364, -0.018421608954668045, -0.011912280693650246, 0.049623724073171616, 0.08296095579862595, -0.014179982244968414, 0.01411276962608099, 0.06040360778570175, -0.01762600801885128, -0.019179949536919594, -0.00917284656316042, -0.03954165801405907, -0.049895573407411575, -0.01152955461293459, -0.01870921440422535, 0.0007723778253421187, 0.015024126507341862, 0.05665189400315285, 0.014770664274692535, -0.03516794741153717, -0.005539167672395706, -0.05697236582636833, -0.03432735055685043, 0.040935736149549484, 0.04741743952035904, 0.02449796535074711, 0.02731957845389843, -0.03607865050435066, 0.03181527927517891, -0.038714971393346786, 0.02833501063287258, 0.06049162149429321, -0.006303936708718538, 0.01707352139055729, 0.05800279974937439, 0.004957173485308886, -0.05791449919342995, 0.021696826443076134, 0.016804369166493416, -0.005535392556339502, -0.015599807724356651, -0.022008579224348068, -0.051479272544384, 0.026710430160164833, -0.038012534379959106, -0.03369791433215141, 0.021738486364483833, 0.026535578072071075, -0.06523740291595459, 0.02825092524290085, -0.03785700350999832, -0.002304954221472144, -0.014857391826808453, -0.0225063506513834, 0.060745950788259506, -0.01445896364748478, -0.053140297532081604, -0.016613425686955452, 0.023741861805319786, 0.140079066157341, -0.010287510231137276, -0.013125766068696976, -0.006176983006298542, 0.03382224589586258, 0.02297319285571575, 0.036961302161216736, 0.013521813787519932, 0.02419409528374672, 0.029709670692682266, -0.033934786915779114, 0.06490706652402878, -0.0322391651570797, -0.026268383488059044, -0.009887871332466602, -0.04714604839682579, -0.06505605578422546, 0.01419287733733654, 0.03377697989344597, -0.022348443046212196, -0.013823401182889938, -0.01957557164132595, 0.11715121567249298, 0.0039436956867575645, -0.040119584649801254, -0.06694459915161133, -0.024411533027887344, -0.09997112303972244, -0.015701279044151306, 0.045591089874506, -0.0021988078951835632, -0.06852323561906815, -0.0667748898267746, 0.005499350838363171, -0.007766963914036751, -0.1488591581583023, -0.00818351935595274, -0.0027358182705938816, -0.016653981059789658, -0.03212501481175423, 0.0059772697277367115, 0.040192488580942154, -0.00517801521345973, -0.024898534640669823, 0.010918757878243923, -0.045661646872758865, 0.010408606380224228, 0.0660383328795433, -0.010050437413156033, 0.025599822402000427, 0.009193433448672295, -0.054880138486623764, 0.004277682863175869, -0.03690269961953163, 0.014959145337343216, 0.05275954306125641, 0.02300364524126053, -0.02325555682182312, -0.01684972457587719, -0.00855596549808979, -0.022726010531187057, 0.005818456411361694, 0.014563440345227718, -0.03055674582719803, 0.018124442547559738, -0.023772822692990303, 0.0010936497710645199, 0.045586083084344864, -0.030672430992126465, -0.05392199754714966, 0.024768179282546043, 0.020674172788858414, -0.050391990691423416, 0.05194426700472832, -0.001926748431287706, 0.0002645149070303887, -0.02673303708434105, -0.042378220707178116, -0.02916049212217331, 0.03710184618830681, -0.036421291530132294, 0.03544887900352478, 0.02142554707825184, -0.04500216245651245, -0.054971836507320404, -0.04051046073436737, -0.02335267700254917, 0.06096562370657921, -0.029374687001109123, 0.022894831374287605, 0.001754275057464838, -0.03406751900911331, 0.00909649021923542, -0.032763585448265076, -0.009264186955988407, -0.024947721511125565, 0.034143608063459396, 0.05336873605847359, -0.06668542325496674, -0.03344659507274628, 0.02448197826743126, -0.039443958550691605, 0.01981181465089321, 0.019187981262803078, -0.07768939435482025, -0.028297245502471924, -0.06798099726438522, 0.023414205759763718, -0.05111631378531456, -0.059037089347839355, 0.03409700095653534, -0.051724933087825775, 0.0041309804655611515, 0.01796605996787548, -0.03139953315258026, 0.034791044890880585, 0.028529856353998184, -0.04163846746087074, 0.02912267856299877, 0.023117046803236008, 0.0011176517000421882, 0.0032929235603660345, -0.02662944793701172, 0.028543388471007347, -0.007160209119319916, 0.020076854154467583, -0.10268344730138779, 0.02849067747592926, -0.01667545549571514, -0.02498258836567402, -0.024888211861252785, -0.028229890391230583, -0.07005717605352402, -0.051217518746852875, -0.012795377522706985, -0.0017683791229501367, 0.052320446819067, 0.04119196906685829, 0.029717016965150833, -0.019586237147450447, 0.00905855093151331, -0.03898387774825096, 0.05521851405501366, 0.01568138785660267, 0.0030545576009899378]\"\n./train/comic_book/n06596364_12832.JPEG,comic_book,\"[-0.027599750086665154, -0.012195117771625519, -0.005012500565499067, -0.012808194383978844, 0.016550704836845398, 0.008998245000839233, 0.04192337766289711, 0.01577354036271572, -0.053895242512226105, -0.030675185844302177, -0.02361217327415943, 0.04418274015188217, 0.07404453307390213, -0.022595267742872238, -0.013965736143290997, -0.03251419588923454, 0.15098810195922852, 0.07221579551696777, 0.10319262742996216, -0.02453497052192688, -0.03518090024590492, -0.014613272622227669, -0.010518569499254227, -0.00777647877112031, 0.011488043703138828, -0.04881457984447479, -0.004138187039643526, 0.006706609390676022, 0.020200859755277634, 0.03497663140296936, -0.010412197560071945, 0.023427560925483704, -0.03553745895624161, -0.010116917081177235, 0.004765029530972242, 0.02403191849589348, -0.012960178777575493, 0.0021147753577679396, -0.03458603098988533, 0.1261233538389206, 0.0366358757019043, -0.026502732187509537, -0.04586677998304367, -0.007643193006515503, 0.03441125899553299, -0.02227162942290306, 0.0354338064789772, -0.010695398785173893, -0.012780366465449333, -0.027654871344566345, -0.000669805973302573, -0.024779144674539566, -0.037069130688905716, 0.019801538437604904, -0.0035616715904325247, -0.04125794395804405, -0.004199135582894087, -0.010671607218682766, 0.019331224262714386, -0.015016656368970871, 0.021387189626693726, -0.027021829038858414, 0.011277384124696255, -0.011929319240152836, -0.004576792474836111, 0.06467849761247635, -0.03306535631418228, 0.0300894808024168, 0.0481816790997982, 0.030752327293157578, 0.002562220674008131, 0.025538409128785133, 0.041280362755060196, -0.038650643080472946, 0.02749747969210148, -0.04315216466784477, -0.002701195189729333, -0.01935473084449768, 0.015445630066096783, 0.036663610488176346, 0.06330662220716476, -0.019870953634381294, 0.004825741518288851, -0.021804876625537872, -0.04293731600046158, 0.03168829157948494, -0.025598889216780663, -0.011350053362548351, -0.03005261905491352, -0.021480733528733253, 0.009254579432308674, 0.058221638202667236, -0.5078343749046326, 0.030336495488882065, 0.005393769592046738, 0.046247199177742004, 0.014351283200085163, -0.016641607508063316, 0.01799616776406765, 0.025560854002833366, 0.041110552847385406, -0.006767007056623697, 0.01215821597725153, 0.00047794735291972756, 0.054404743015766144, -0.034634754061698914, -0.23436208069324493, -0.0440286360681057, -0.02309761941432953, 0.005254716146737337, 0.028260940685868263, 0.0863473042845726, 0.028130583465099335, -0.020815452560782433, -0.03806454688310623, -0.029110442847013474, 0.010656033642590046, -0.03523746505379677, 0.012140602804720402, -0.04537425562739372, 0.05682064965367317, -0.024313876405358315, -0.03515469655394554, 0.050747666507959366, -0.003694724291563034, -0.04772917926311493, 0.007449130993336439, 0.019903235137462616, 0.006888243369758129, -0.011741729453206062, 0.026063669472932816, -0.037340059876441956, -0.02288089320063591, 0.0742596685886383, -0.03817117586731911, 0.03265118598937988, -0.015249657444655895, -0.012540401890873909, 0.03908221423625946, 0.050588421523571014, -0.0021502363961189985, 0.017278455197811127, -0.07514472305774689, -0.0258371289819479, -0.05067905783653259, -0.0006745062419213355, 0.03311342000961304, 0.01809525303542614, 0.0440187007188797, -0.014231358654797077, -0.026323074474930763, 0.011595656163990498, -0.01578613556921482, -6.266788841458037e-05, -0.035424984991550446, -0.02876591496169567, 0.02538244239985943, -0.0027202656492590904, -0.014485349878668785, -0.00017123905126936734, 0.04579918086528778, -0.032664425671100616, 0.03783528879284859, -0.016038548201322556, 0.026623206213116646, -0.010736379772424698, -0.04733698070049286, -0.03551825135946274, 0.0120146619156003, -0.0040322295390069485, -0.006066740490496159, 0.02248622104525566, 0.03288623318076134, -0.00234338385052979, -0.00018864660523831844, -0.06042962521314621, -0.00890292413532734, 0.029197920113801956, -0.01790005899965763, 0.014759447425603867, 0.02229059673845768, 0.026370299980044365, -0.02351936511695385, -0.05072025954723358, -0.05054273083806038, 0.00525834271684289, -0.02892271988093853, 0.007803861517459154, 0.0033245307859033346, -0.03662643954157829, 0.00281539186835289, 0.0467347726225853, -0.00011349302076268941, -0.029504109174013138, 0.05132065340876579, 0.0033863435965031385, 0.055067505687475204, -0.02001797780394554, 0.09109707176685333, 0.05677057057619095, -0.00044378862367011607, -0.018754543736577034, -0.01684393174946308, -0.009996170178055763, -0.028841402381658554, -0.013541880995035172, -0.03944597393274307, -0.0019459666218608618, 0.0043517593294382095, -0.06070289388298988, 0.0002563762536738068, -0.045226264744997025, -0.0008167557534761727, -0.016429906710982323, 0.039251770824193954, -0.0987185388803482, 0.013581705279648304, -0.024032436311244965, -0.03551260009407997, 0.055530011653900146, -0.031022632494568825, -0.03409722074866295, -0.0033259317278862, -0.016668345779180527, -0.08795587718486786, 0.009504557587206364, -0.07334010303020477, -0.021385282278060913, -0.026510946452617645, -0.04245304688811302, -0.0015629847766831517, 0.012069333344697952, 0.02207397110760212, 0.02300962060689926, 0.00831450242549181, -0.017888542264699936, -0.027908669784665108, 0.013782372698187828, -0.005184840876609087, 0.001245253486558795, 0.02434982918202877, 0.02208329178392887, -0.062059588730335236, -0.007547697052359581, -0.033923376351594925, 0.006701111327856779, 0.025811299681663513, 0.01689884439110756, 0.010203368030488491, 0.02680004946887493, -0.03835833817720413, 0.00812605582177639, -0.02089882269501686, 0.03800227493047714, -0.008698177523911, 0.0095032574608922, 0.02792733535170555, -0.0124827204272151, -0.2629587948322296, -0.031172234565019608, -0.050331588834524155, -0.004245579708367586, 0.03784880414605141, -0.14846353232860565, -0.0014200221048668027, 0.0017403268720954657, -0.007454489357769489, 0.05244261398911476, -0.0734713226556778, 0.013179417699575424, 0.019273798912763596, -0.0019291366916149855, -0.0325639434158802, -0.007982371374964714, -0.056291524320840836, -0.016418486833572388, 0.025443043559789658, -0.056160978972911835, -0.011654560454189777, 0.008712736889719963, 0.03406945988535881, 0.03745933622121811, 0.020668134093284607, -0.0010096410987898707, 0.020225368440151215, -0.0035271686501801014, 0.04395356774330139, 0.04734852910041809, -0.00475073279812932, -0.02094234898686409, 0.009857205674052238, -0.027205612510442734, -0.031911805272102356, -0.009372412227094173, 0.08849261701107025, -0.021560484543442726, 0.05102071538567543, -0.02722148224711418, -0.005365361459553242, 0.0034245734568685293, 0.04732627049088478, 0.00153181585483253, 0.046622470021247864, 0.01576140895485878, 0.017969820648431778, -0.07195475697517395, -0.026335440576076508, -0.005543472245335579, 0.04170525446534157, -0.025100288912653923, -0.010072133503854275, 0.037621721625328064, 0.07402320206165314, 0.07381299138069153, 0.04122861102223396, -0.01916670985519886, 0.04351634532213211, -0.013653331436216831, -0.013121669180691242, 0.023033425211906433, -0.018604831770062447, 0.010373012162744999, 0.025153404101729393, 0.014738747850060463, 0.06829539686441422, -0.03929779678583145, -0.020106986165046692, 0.024732135236263275, 0.015387240797281265, -0.03664907440543175, -0.00669268611818552, 0.038081008940935135, 0.02040514536201954, -0.023856820538640022, 0.032739896327257156, 0.0453970767557621, 0.02206527255475521, -0.0026914156042039394, 0.030485957860946655, 0.02125958353281021, -0.0440678671002388, 0.05122397094964981, 0.06256025284528732, 0.027918843552470207, 0.02361614815890789, -0.030852563679218292, -0.029127422720193863, -0.013690748251974583, -0.0017897613579407334, -0.019107310101389885, 0.02376476116478443, 0.0057333712466061115, 0.08528405427932739, -0.04767279326915741, -0.01620493270456791, 0.04122712090611458, -0.013559217564761639, -0.0003272739122621715, -0.03254387527704239, -0.06173382326960564, 0.03081953153014183, 0.00734113110229373, 0.04484724625945091, 0.005498731043189764, -0.12073180824518204, -0.08617682009935379, -0.016849568113684654, 0.06642494350671768, -0.024136994034051895, 0.0039143869653344154, -0.008033348247408867, -0.03000548481941223, 0.019988613203167915, -0.055303268134593964, 0.014519348740577698, 0.025402162224054337, 0.05706070363521576, 0.01355495024472475, 0.052306462079286575, 0.0003350572951603681, -0.02058439515531063, 0.029028762131929398, -0.03662974014878273, 0.020276356488466263, -0.02582475170493126, 0.02329275757074356, 0.007585273124277592, 0.012482467107474804, -0.0002843539696186781, 0.0027943910099565983, -0.045476194471120834, -0.003962499555200338, -0.025212407112121582, -0.011000445112586021, 0.025034910067915916, -0.012437248602509499, 0.06467025727033615, 0.005420952569693327, 0.047753043472766876, -0.09688539803028107, -0.009121814742684364, 0.005434454884380102, -0.08335347473621368, -0.02341577410697937, -0.01442636176943779, 0.04301290214061737, -0.0020928997546434402, 0.01965927891433239, 0.0008951468043960631, -0.023414112627506256, 0.015362931415438652, 0.05788448080420494, -0.019117774441838264, 0.026061883196234703, 0.03588786721229553, 0.016627846285700798, 0.033893123269081116, -0.04653794690966606, 0.03482016175985336, -0.03402099758386612, 0.0001218114048242569, 0.037048883736133575, 0.004001489840447903, 0.08785563707351685, 0.004388656001538038, 0.039887674152851105, -0.0037767672911286354, -0.005497103091329336, 0.0847768634557724, -0.003294745460152626, 0.019813481718301773, 0.01383470930159092, 0.010755753144621849, -0.0017301237676292658, 0.03564247861504555, 0.0022533219307661057, -0.027744663879275322, 0.03535585477948189, -0.022694984450936317, -0.009700941853225231, -0.0050940061919391155, -0.0234941728413105, 0.026178881525993347, -0.021863427013158798, 0.008393614552915096, 0.01950993575155735, 0.00011283795174676925, -0.007095028180629015, 0.020392227917909622, -0.036746613681316376, 0.010846867226064205, 0.023835638538002968, 0.03821207955479622, 0.040527068078517914, 0.026483682915568352, -0.02837214060127735, 0.018986310809850693, -0.018070930615067482, -0.04428626969456673, 0.05918356403708458, -0.04053070768713951, 0.011998644098639488, -0.06325355172157288, 0.06893462687730789, -0.00557424733415246, -0.04155106097459793, -0.05446038022637367, 0.004183282144367695, -0.022621767595410347, 0.005161387380212545, 0.004222968593239784, -0.05189201980829239, -0.01455235481262207, -0.006231469567865133, 0.018587760627269745, -0.011449462734162807, 0.044087085872888565, -0.028044139966368675, 0.032911546528339386, -0.03468640148639679, -0.013257657177746296, -0.03707781434059143, -0.0025978954508900642, -0.009877541102468967, 0.018924398347735405, 0.019885580986738205, 0.010592532344162464, 0.027798287570476532, 0.058628618717193604, -0.03501976653933525, 0.04559086263179779, -0.00019290333148092031, -0.022825511172413826, -0.016066856682300568, 0.015303250402212143, 0.0016240505501627922, 0.04422733560204506, -0.009265934117138386, -0.022896241396665573, 0.005381283350288868, -0.007959814742207527, 0.01737227477133274, 0.01861858181655407, 0.024874014779925346, 0.03780949488282204, -0.049069419503211975, -0.0014750059926882386, 0.0009984199423342943, 0.00903350580483675, 0.01162103284150362, -0.03078754059970379, 0.010933428071439266]\"\n./train/comic_book/n06596364_12588.JPEG,comic_book,\"[0.004931816831231117, -0.02859817072749138, 0.003255938645452261, 0.00744270533323288, -0.025659725069999695, -0.011467525735497475, -0.0012150189140811563, -0.019383085891604424, -0.01820129156112671, -0.058647118508815765, 0.01120760478079319, -0.0008791277068667114, 0.04641047865152359, -0.02114018425345421, -0.04975512623786926, -0.027810348197817802, 0.05857887864112854, 0.010088040493428707, 0.03269962966442108, -0.016026008874177933, -0.03981829434633255, -0.030749153345823288, 0.00584885198622942, 0.006024784408509731, 0.06018785387277603, 0.010881088674068451, 0.0033808955922722816, -0.014482245780527592, -0.0062897042371332645, 0.008613264188170433, -0.003064115531742573, 0.03038524091243744, 0.005629555322229862, 0.0034974704030901194, -0.013083222322165966, 0.028025075793266296, 0.016254067420959473, 0.024068180471658707, -0.03083241730928421, 0.12431693077087402, 0.03369303047657013, -0.05934424698352814, -0.02262105792760849, 0.0023401426151394844, 0.05740158632397652, 0.037924010306596756, 0.018526768311858177, 0.03424394503235817, 0.014688416384160519, 0.01914680004119873, -0.007965892553329468, -0.01823219284415245, 0.004724566359072924, -0.005819681566208601, -0.021789342164993286, 0.0011371684959158301, -0.0021963745821267366, -0.06780216842889786, -0.00518074631690979, 0.0012069499352946877, -0.0033298751804977655, -0.007950296625494957, -0.011383899487555027, -0.002162428107112646, 0.047131091356277466, 0.037026964128017426, -0.011161488480865955, 0.03232407197356224, -0.017321990802884102, 0.03348451480269432, 0.03849633038043976, -0.003971081227064133, -0.016580304130911827, 0.0028998875059187412, 0.020153364166617393, 0.011378712020814419, -0.027817897498607635, 0.005146675743162632, -0.011665473692119122, 0.012621548026800156, 0.023548010736703873, 0.014174696058034897, -0.000866321730427444, -0.007208609953522682, 0.0007771263481117785, 0.055606432259082794, -0.05778155475854874, 0.03416357934474945, -0.004445163533091545, -0.03182898834347725, 0.002541400957852602, 0.05097189545631409, -0.47722628712654114, 0.0464925579726696, -0.02323700673878193, 0.0223226435482502, 0.02704785205423832, 0.03979591652750969, -0.009370909072458744, 0.00814109668135643, 0.10177379101514816, -0.05438142269849777, 0.011479263193905354, -0.02893885225057602, 0.0504215843975544, -0.026432521641254425, -0.27297526597976685, -0.028694726526737213, -1.0479468073754106e-05, 0.05144885182380676, -0.03219720348715782, 0.013643071055412292, 0.02419414557516575, 0.008404968306422234, -0.00861798319965601, 0.0016032970743253827, 0.007941285148262978, 0.012513034977018833, 0.029658911749720573, 0.050266772508621216, 0.031163016334176064, -0.0469009168446064, -0.0009501971071586013, -0.0025326895993202925, -0.0019318254198879004, -0.04212816804647446, 0.0379924550652504, 0.026843827217817307, 0.0032229332718998194, -0.03562501445412636, -0.008791249245405197, -0.03222273290157318, -0.05094728246331215, 0.0753677487373352, -0.048264652490615845, 0.05314822494983673, -0.009454312734305859, -0.05102395638823509, 0.007621174678206444, 0.06706500798463821, -0.0401579812169075, 0.017785049974918365, -0.1116163432598114, 0.008835848420858383, -0.04903484880924225, -0.002944453852251172, -0.03319839388132095, -0.06289897114038467, 0.04396809637546539, 0.02211591601371765, -0.01288253627717495, 0.024474674835801125, -0.03719690442085266, 0.016595209017395973, -0.022325467318296432, -0.014368720352649689, 0.01463902648538351, -0.035297784954309464, 0.007233877666294575, -0.045910343527793884, 0.03319543972611427, 0.00284697231836617, 0.015342576429247856, 0.011243639513850212, -0.055259089916944504, 0.01606529951095581, -0.047834042459726334, -0.031857822090387344, 0.025774657726287842, -0.03988270089030266, -0.06374841928482056, 0.00439688004553318, -0.014055220410227776, 0.043187420815229416, 0.002519723493605852, -0.07177291065454483, -0.11720805615186691, -0.01910378783941269, -0.023428328335285187, 0.006207393016666174, 0.0383448600769043, -0.0369601845741272, 0.0291184913367033, 0.030088797211647034, 0.018739724531769753, 0.01638886332511902, 0.019291916862130165, 0.02721613273024559, -0.010333741083741188, -0.046979207545518875, 0.009726546704769135, 0.02299417182803154, 0.020650532096624374, -0.014821870252490044, -0.0022343238815665245, -0.017156129702925682, 0.035368043929338455, -0.033811673521995544, 0.07211847603321075, 0.027260249480605125, -0.02503693290054798, 0.024861842393875122, -0.06646741926670074, -0.040793146938085556, -0.04536985605955124, -0.03565426543354988, -0.0014616025146096945, -0.03281451761722565, -0.009373769164085388, 0.008379623293876648, -0.00413904432207346, 0.053368207067251205, 0.022110959514975548, -0.0559021532535553, 0.01571372151374817, -0.07791969180107117, -0.031237998977303505, -0.005051709711551666, -0.013012188486754894, 0.0413435660302639, 0.015299078077077866, -0.06647935509681702, -0.0728849396109581, -0.019032958894968033, -0.02355988323688507, 0.011045848950743675, -0.00424843979999423, 0.013889732770621777, 0.04355333745479584, -0.05864235386252403, -0.04834892973303795, -0.0370720736682415, 0.02447633072733879, 0.05344069376587868, 0.002287599490955472, -0.022265836596488953, -0.022511901333928108, -0.0150090791285038, 0.0018731853924691677, -0.0008156932308338583, -0.005586444400250912, -0.016595127061009407, 0.029695916920900345, -0.015973513945937157, -0.05327862501144409, -0.011995943263173103, 0.016126452013850212, -0.001796576427295804, -0.041344959288835526, 0.010185237042605877, -0.0302948746830225, -0.02455124445259571, -0.00482475059106946, 0.050447016954422, -0.025243278592824936, 0.0013066602405160666, 0.011196211911737919, 0.012520229443907738, -0.20194362103939056, -0.04784471169114113, -0.0061177341267466545, -0.01398399192839861, 0.042255159467458725, -0.2053692638874054, 0.0471525564789772, -0.019985560327768326, -0.009194101206958294, 0.03730650991201401, -0.057834576815366745, 0.029514018446207047, 0.01462258119136095, -0.013653389178216457, 0.009199374355375767, -0.0452641099691391, 0.011574742384254932, -0.046619758009910583, 0.005994171369820833, -0.03722018003463745, -0.0041557541117072105, -0.014376338571310043, 0.0064619919285178185, 0.031521912664175034, 0.03632050380110741, 0.012018782086670399, 0.03867349401116371, -0.014569500461220741, 0.05554254725575447, 0.02803737297654152, -0.02243911102414131, 0.021273618564009666, -0.004253436345607042, -0.020226361230015755, 0.01297865528613329, 0.019156958907842636, 0.06919611990451813, 0.015338592231273651, 0.05283026769757271, 0.005300668068230152, 0.022570161148905754, 0.03142781928181648, -0.006015986204147339, -0.05938303843140602, -0.010195082053542137, 0.009784577414393425, 0.024668298661708832, -0.032920751720666885, -0.02977818064391613, 0.011113292537629604, 0.10433826595544815, -0.06198744475841522, -0.004487211350351572, 0.07291340082883835, 0.07510343939065933, 0.047100555151700974, 0.003900695126503706, -0.02402174472808838, 0.006609577219933271, -0.04102078080177307, -0.0141553720459342, 0.0005478694220073521, 0.03489723056554794, 0.04762544482946396, 0.0016573198372498155, -0.03282347694039345, 6.170321285026148e-05, -0.008987999521195889, 0.004136266186833382, 0.04542524367570877, 0.03203342482447624, -0.06426133960485458, 0.005171012599021196, -0.03186437860131264, 0.008953612297773361, -0.026731662452220917, 0.034837473183870316, 0.03867403417825699, 0.03581572324037552, 0.07504748553037643, 0.0487494058907032, 0.052009742707014084, -0.01927642710506916, 0.02570212446153164, 0.02500518411397934, 0.008639385923743248, 0.013458749279379845, 0.0023763375356793404, 0.009835906326770782, -0.0007755712140351534, 0.008151206187903881, 0.057011812925338745, 0.07286855578422546, 0.03270391374826431, 0.0353580005466938, -0.043856944888830185, 0.014348515309393406, 0.04224300757050514, -0.02689521200954914, -0.017645513638854027, -0.041082385927438736, -0.06097911298274994, -0.03223318234086037, -0.0023182444274425507, 0.0250784270465374, -0.01999896578490734, -0.14264486730098724, 0.009839781560003757, 0.01476739626377821, 0.05004327744245529, -0.013109171763062477, 0.03447381407022476, -0.02455412968993187, -0.04022557660937309, 0.018323831260204315, -0.011314920149743557, -0.013921785168349743, -0.012263196520507336, -0.025694867596030235, -0.013447836972773075, 0.050070762634277344, 0.00688284682109952, -0.007595014292746782, -0.006076824385672808, -0.004413803573697805, -0.029670681804418564, -0.05507813021540642, -0.03027833253145218, 0.05534329265356064, -0.01150891650468111, -0.06081826612353325, 0.03648202866315842, 0.009594999253749847, 0.0020481969695538282, 0.0027953179087489843, -0.017459191381931305, -0.004750674124807119, -0.018183885142207146, 0.06823946535587311, 0.008218792267143726, 0.0956929624080658, -0.11733265966176987, -0.0002693825226742774, -0.007334169000387192, -0.12414206564426422, -0.04247772693634033, 0.03032844141125679, 0.0011692336993291974, -0.005729045253247023, 0.015568750910460949, 0.04883429780602455, -0.028232844546437263, 0.01164593268185854, 0.006026354618370533, -0.010863793082535267, -0.007599367294460535, 0.017361070960760117, 0.007707636803388596, 0.014469052664935589, -0.03147101774811745, 0.017073364928364754, -0.005906041245907545, 0.0029912726022303104, -0.004067642148584127, 0.04520206153392792, 0.07218277454376221, 0.02471109852194786, 0.031931404024362564, 0.012340598739683628, 0.021425843238830566, 0.10228937864303589, 0.05064624175429344, -0.022938577458262444, 0.06234391778707504, -0.027988789603114128, 0.001456897589378059, 0.05596520006656647, -0.03486233949661255, -0.003249266417697072, -0.0014186815824359655, -0.007880487479269505, 0.017278186976909637, -0.009081830270588398, -0.02805357053875923, 0.012114925310015678, -0.015910187736153603, -0.03426450490951538, 0.03758687525987625, 0.004483862780034542, -0.03608832135796547, -0.02239859290421009, 0.03351956978440285, -0.007093566004186869, -0.00817650556564331, -0.02213945798575878, 0.026554539799690247, 0.017251210287213326, -0.014158833771944046, -0.009935213252902031, -0.04263656958937645, -0.0066611310467123985, 0.028096983209252357, -0.022630415856838226, -0.0400870218873024, -0.005348867271095514, -0.013756794854998589, 0.04401624575257301, -0.02033573016524315, -0.028941310942173004, -0.039611686021089554, 0.00952070765197277, 0.011517747305333614, 0.01732444390654564, -0.04394024237990379, -0.012088662944734097, -0.004718178883194923, 0.03521142899990082, -0.02271660976111889, 0.012789538130164146, -0.033808838576078415, 0.03287537768483162, -0.004659154452383518, -0.01978553645312786, -0.007606968283653259, 0.0043222056701779366, 0.004778807517141104, 0.08811614662408829, -0.02082114852964878, 0.03751403093338013, 0.02506311796605587, 0.02628518082201481, -0.07329928129911423, 0.0457923598587513, -0.010358847677707672, -0.0034904207568615675, -0.05456434190273285, 0.0011741137132048607, 0.023297317326068878, 0.06524404883384705, 0.04252506420016289, -0.026958849281072617, 0.013401788659393787, -0.008717279881238937, 0.007465665694326162, -0.011762927286326885, 0.006893610581755638, 0.04753943905234337, 0.010865218937397003, -0.046172674745321274, 0.029053231701254845, -0.021909834817051888, 0.035792842507362366, 0.010843866504728794, 0.0037493936251848936]\"\n./train/comic_book/n06596364_19168.JPEG,comic_book,\"[-0.0075734080746769905, -0.0392167791724205, -0.04132494702935219, 0.023410480469465256, 0.00016574349137954414, -0.0027471587527543306, -0.0035665566101670265, 0.03417639434337616, -0.05594239383935928, 0.017458369955420494, -0.008145160973072052, -0.012836030684411526, 0.11851397901773453, -0.011058046482503414, -0.014767964370548725, 0.008747266605496407, 0.07753923535346985, 0.042428433895111084, 0.05838151276111603, -0.005722957197576761, -0.07393591105937958, 0.03438454866409302, -0.013704538345336914, 0.012943617068231106, 0.06782633811235428, -0.028905432671308517, 0.001646250719204545, 0.0008185331826098263, 0.010168886743485928, 0.013217110186815262, 0.08201102167367935, -0.00965879950672388, -0.022715380415320396, 0.01958799734711647, -0.005862009711563587, 0.038072433322668076, -0.03374621272087097, 0.03551426902413368, -0.035367175936698914, 0.17856721580028534, -0.02856491506099701, -0.00980484951287508, -0.021925490349531174, -0.02285880781710148, 0.03570614010095596, 0.0110423369333148, 0.033159468322992325, 0.021958520635962486, -0.02881052903831005, -0.01496418472379446, 0.027398662641644478, -0.023359067738056183, 0.02825198322534561, 0.03248613700270653, 0.015906941145658493, -0.05100079998373985, -0.03510664030909538, -0.03309972211718559, -0.011302693746984005, -0.0010863529751077294, -0.0075725894421339035, -0.013834170997142792, 0.026760587468743324, -0.006753207184374332, -0.011586280539631844, 0.0238933265209198, -0.015560652129352093, 0.046165015548467636, 0.0063017383217811584, -0.05021258816123009, 0.026515759527683258, -0.02673783153295517, -0.013804708607494831, -0.010734404437243938, -0.014171748422086239, -0.015290548093616962, 0.007457904517650604, -0.006143766921013594, -0.05172930285334587, -0.018461192026734352, 0.06632277369499207, 0.04219800606369972, -0.026599649339914322, -0.016742704436182976, 0.005502703599631786, 0.02354520559310913, -0.07354196906089783, 0.0005569406785070896, -0.06576526165008545, -0.008987780660390854, -0.012210462242364883, 0.051564715802669525, -0.4594579339027405, 0.026996517553925514, -0.03275524824857712, 0.04413954168558121, 0.009807380847632885, 0.013988158665597439, -0.013664454221725464, -0.05161372572183609, 0.06826822459697723, 0.019576990976929665, 0.016271615400910378, -0.02709389291703701, 0.032068882137537, -0.006424213293939829, -0.22442983090877533, -0.023081351071596146, -0.018110791221261024, -0.0016214445931836963, 0.021107438951730728, 0.06086551025509834, 0.015317639335989952, -0.020506955683231354, -0.016025053337216377, -0.03336731344461441, 0.019683070480823517, -0.006416674237698317, 0.023131487891077995, 0.01890714466571808, 0.007759772706776857, -0.05716891586780548, -0.01532353088259697, 0.031321872025728226, 0.007227846886962652, -0.010645183734595776, -0.026920028030872345, -0.002922080922871828, 0.006512350402772427, -0.0542304627597332, -0.029435889795422554, 0.01753770187497139, 0.014389324933290482, 0.08699657768011093, -0.07601958513259888, 0.02308681234717369, -0.03625568374991417, -0.002757937414571643, 0.0369609072804451, 0.012999986298382282, -0.015646614134311676, 0.008844630792737007, -0.0056491633877158165, -0.004279054701328278, 0.0024635992012917995, 0.005552672781050205, 0.050691522657871246, 0.03207721933722496, 0.03834272921085358, -0.01855647936463356, 0.038941506296396255, -0.0050940015353262424, -0.01439655665308237, -0.02147984877228737, -0.016463011503219604, 0.025190573185682297, 0.015292520634829998, 0.021708503365516663, -0.03896411880850792, -0.03146336227655411, 0.07554953545331955, -0.006362029351294041, 0.040365707129240036, 0.033612094819545746, 0.002664538798853755, 0.007311857771128416, -0.06899598240852356, 0.016228819265961647, 0.005449802614748478, -0.021115250885486603, -0.01914854161441326, 0.04227157682180405, 0.002735067391768098, 0.07921504229307175, 0.024774370715022087, -0.0447922945022583, -0.0369349829852581, -0.012068838812410831, -0.020212851464748383, -0.007282736711204052, 0.057906609028577805, 0.027469409629702568, 0.02908303216099739, 0.05647832527756691, 0.03677837550640106, 0.02679288201034069, 0.008923279121518135, -0.00947318784892559, -0.0013617142103612423, -0.04378087818622589, 0.03242333605885506, 0.02970820851624012, 0.022952117025852203, -0.01949300430715084, 0.02459503896534443, -0.059429217129945755, 0.009670652449131012, -0.007791103795170784, 0.05697007477283478, 0.03655119985342026, 0.02185755968093872, 0.07630835473537445, -0.007512602489441633, -0.1347581297159195, 0.0016068307450041175, -0.0268265251070261, -0.08389827609062195, 0.009901942685246468, -0.012721702456474304, 0.016907133162021637, 0.021986838430166245, 0.03370637819170952, 0.019617918878793716, 0.012830451130867004, 0.027644308283925056, -0.0205331239849329, 0.017366211861371994, 0.028820522129535675, -0.04307626560330391, -0.0036121257580816746, 0.0013430523686110973, -0.07256285101175308, 0.028639020398259163, 0.011452548205852509, 0.010649437084794044, 0.021181397140026093, 0.01410327386111021, -0.035547420382499695, -0.0187531691044569, -0.030336814001202583, -0.026294782757759094, -0.045217059552669525, 0.029289761558175087, 0.04676266014575958, 0.015036755241453648, -0.018853049725294113, -0.010737280361354351, 0.01091296412050724, 0.010447352193295956, -0.0331960991024971, 0.06609708070755005, -0.05072068050503731, 0.008154155686497688, -0.054035916924476624, -0.03831494599580765, -0.004982492886483669, 0.0008753910078667104, 0.0016726707108318806, 0.0022097211331129074, -0.0009035435505211353, -0.062130190432071686, -0.004675821401178837, -0.021493561565876007, -0.02210238017141819, 0.006340498104691505, -0.02080574631690979, 0.0037600852083414793, 0.026568077504634857, -0.13163919746875763, -0.028474560007452965, 0.0449010394513607, -0.016717514023184776, 0.03509128466248512, -0.0550919733941555, 0.002284076064825058, 0.020519372075796127, 0.042797524482011795, 0.014658850617706776, -0.016117537394165993, 0.03412177786231041, -0.010177915915846825, -0.005183536093682051, 0.02616143226623535, -0.04820292070508003, 0.007954759523272514, -0.03319525718688965, 0.008008357137441635, -0.045347440987825394, 0.012069438584148884, -0.026247473433613777, -0.00445032911375165, -0.046037692576646805, 0.017604107037186623, -0.036204468458890915, 0.027137596160173416, 0.016120756044983864, -0.011142757721245289, 0.03860881179571152, -0.021853161975741386, 0.02478606626391411, -0.04376220703125, -0.009301256388425827, 0.02342597395181656, -0.01971152238547802, 0.011474060826003551, -0.05305765941739082, 0.09551487118005753, -0.02188589610159397, -0.0027068029157817364, 0.0059955487959086895, 0.0562373548746109, -0.05862226337194443, -0.022487418726086617, -0.03693397343158722, 0.02266579680144787, -0.020822832360863686, 0.02275739051401615, -0.0021053259260952473, 0.05378914624452591, -0.02736339159309864, 0.020321130752563477, 0.052415139973163605, 0.08678495138883591, 0.015936071053147316, 0.020498231053352356, -0.051562149077653885, 0.0017211491940543056, -0.018631264567375183, -0.010595398023724556, 0.04121182858943939, -0.017528332769870758, -0.025485482066869736, 0.04138513281941414, -0.01815594732761383, 0.08002492785453796, -0.016945013776421547, 0.03217742219567299, 0.042553771287202835, 0.03521663323044777, -0.040476515889167786, -0.035155005753040314, 0.015413020737469196, 0.04568425193428993, -0.06831325590610504, 0.0037467312067747116, 0.032359492033720016, 0.06140461191534996, -0.005122253205627203, -0.026910748332738876, 0.059425435960292816, -0.029675433412194252, 0.023066719993948936, 0.0537591315805912, 0.019537607207894325, -0.03664856404066086, -0.03431200981140137, -0.02665676549077034, -0.007972653955221176, 0.014143443666398525, -0.029382919892668724, 0.027431752532720566, -0.00975112896412611, 0.05503304675221443, -0.02783159352838993, -0.018238769844174385, 0.11558832228183746, -0.00045904237776994705, -0.0037434932310134172, -0.03137222304940224, -0.06168602034449577, 0.003506455337628722, -0.0069327945820987225, 0.06135741248726845, -0.00582179706543684, -0.22980622947216034, 0.053045980632305145, -0.004516909830272198, 0.013611790724098682, -0.00520988367497921, -0.018432265147566795, -0.013029349967837334, 0.026859376579523087, 0.03368169441819191, -0.01397622935473919, 0.010612254031002522, -0.015372800640761852, 0.015191562473773956, -0.04811127483844757, 0.018309827893972397, -0.01851436123251915, -0.011044555343687534, -0.038285382091999054, -0.015433327294886112, -0.032734937965869904, -0.04102730005979538, -0.002493573585525155, -0.012299197725951672, -0.024362713098526, -0.03828776627779007, 0.007892425172030926, -0.06685607880353928, 0.004724751226603985, -0.05827952176332474, -0.0110542057082057, 0.004417048767209053, 0.00279973610304296, -0.0003323811979498714, 0.022047122940421104, 0.009315314702689648, -0.07979660481214523, -0.06017865240573883, -0.042863186448812485, -0.18405818939208984, -0.029232265427708626, 0.00973661057651043, 0.02522432431578636, -0.02125784568488598, 0.039705295115709305, 0.013724413700401783, -0.02493116445839405, -0.013614698313176632, 0.05149345472455025, 0.013519324362277985, 0.06738252937793732, 0.023952865973114967, 0.0020527669694274664, 0.02537829987704754, -0.03482840955257416, -0.011011532507836819, -0.017587510868906975, -0.00732528418302536, 0.02273298054933548, 0.0018716335762292147, -0.017248881980776787, 0.0540875680744648, 0.01979297399520874, 0.0006701254169456661, 0.033342279493808746, 0.15464341640472412, 0.02440178394317627, 0.0080115320160985, 0.044511083513498306, 0.003749311435967684, -0.018762929365038872, 0.07367789000272751, -0.024637112393975258, -0.08144330978393555, 0.00448834802955389, 0.0183805413544178, -0.022198038175702095, -0.02874043583869934, -0.048229627311229706, 0.02261461317539215, -0.04846847057342529, 0.005849774461239576, 0.04208004102110863, 0.035263922065496445, -0.0075289704836905, 0.068028025329113, 0.03226681053638458, -0.016161570325493813, -0.009602437727153301, -0.032184768468141556, 0.0002310315758222714, -0.0032920404337346554, -0.06833364814519882, 0.03222832828760147, -0.006238406524062157, -0.01863509975373745, 0.06572136282920837, -0.03365364670753479, -0.015542871318757534, -0.002266793278977275, 0.022595005109906197, -0.026809334754943848, -0.016274409368634224, 0.017918333411216736, 0.027088450267910957, -0.022721966728568077, 0.04030464589595795, 0.023891087621450424, -0.03406323865056038, -0.024646585807204247, -0.016666455194354057, 0.01760444976389408, -0.040237151086330414, 0.01127343438565731, -0.020510796457529068, 0.012942001223564148, -0.011081291362643242, 0.0012012169463559985, -0.013068404980003834, -0.04879707470536232, 0.027917735278606415, 0.04280540719628334, 0.01975301466882229, 0.0031783226877450943, 0.008129515685141087, 0.011539943516254425, -0.0356949046254158, 0.02718474715948105, 0.018909873440861702, 0.06716960668563843, -0.07683948427438736, 0.0038562326226383448, 0.037503380328416824, 0.011514843441545963, 0.005139329470694065, -0.04159645736217499, 0.034766484051942825, 0.014494855888187885, 0.0283579733222723, -0.007645134814083576, 0.043914925307035446, 0.047681815922260284, -0.015695415437221527, 0.003333093598484993, -0.02720281295478344, -0.03136717900633812, 0.043579716235399246, 0.04132308438420296, 0.025464104488492012]\"\n./train/comic_book/n06596364_11921.JPEG,comic_book,\"[-0.03232068195939064, 0.04956108704209328, 0.012767831794917583, 0.002983315149322152, 0.0177906583994627, 0.008335416205227375, 0.01659708470106125, -0.020597822964191437, -0.0670865848660469, 0.0036641834303736687, 0.018850000575184822, 0.03586186096072197, 0.1396111249923706, 0.02426804229617119, 0.03889600932598114, -0.03481167182326317, 0.05104054883122444, -0.04916470870375633, 0.01518381666392088, 0.00071333086816594, 0.014371675439178944, -0.024413738399744034, -0.014695615507662296, 0.04938628897070885, 0.04163359850645065, -0.019263386726379395, 0.0584687739610672, -0.016062481328845024, -0.026488546282052994, -0.021827222779393196, 0.019978482276201248, 0.019510386511683464, -0.021380722522735596, -0.021903691813349724, -0.020835522562265396, 0.028007857501506805, 0.01618075557053089, 0.011170879937708378, 0.010420710779726505, -0.05325399711728096, 0.03299431875348091, -8.229853119701147e-05, -0.008249162696301937, -0.051642123609781265, -0.008455393835902214, 0.08334510773420334, 0.0024272596929222345, 0.09046302735805511, -0.033838484436273575, 0.033624615520238876, -0.013896177522838116, 0.03877773880958557, -0.024970227852463722, 0.004368877504020929, -0.02397081069648266, -0.027393655851483345, -0.0023518395610153675, -0.010848219506442547, -0.06560560315847397, 0.01736992970108986, 0.06644467264413834, -0.007299103308469057, 0.040345095098018646, -0.002089054323732853, -0.0002608828363008797, 0.030113810673356056, -0.006439268589019775, -0.006003697402775288, -0.0396762415766716, 0.011478189378976822, 0.0033089187927544117, -0.039766792207956314, 0.04372672736644745, -0.044506337493658066, 0.019214019179344177, -0.010381308384239674, 0.014700216241180897, -0.0037491414695978165, -0.03588271513581276, -0.02064378932118416, 0.025706229731440544, -0.0037730480544269085, -0.006170461419969797, -0.041656482964754105, 0.03608817979693413, 0.04933605343103409, -0.022316601127386093, -0.006474996916949749, -0.08384421467781067, -0.022508978843688965, -0.04175947234034538, 0.031373120844364166, -0.549049437046051, 0.00935344398021698, 0.030962325632572174, 0.020846452564001083, 0.010029959492385387, -0.01795807294547558, 0.1105162650346756, 0.012127751484513283, 0.0313420332968235, 0.022326597943902016, 0.024427464231848717, -0.013746379874646664, 0.07110211998224258, -0.004424179904162884, -0.14168806374073029, -0.014955775812268257, 0.023671256378293037, 0.008171511813998222, 0.014067542739212513, -0.09136513620615005, -0.04720297455787659, 0.030500389635562897, 0.013046057894825935, -0.032354459166526794, 0.0041374205611646175, -0.039429496973752975, -0.02349419891834259, -0.005885253194719553, 0.013266654685139656, 0.06782074272632599, 0.006242695264518261, 0.02417212724685669, -0.011139710433781147, -0.020834818482398987, -0.0009208667324855924, 0.012535395100712776, -0.031276073306798935, -0.054778359830379486, 0.025922631844878197, 0.025941884145140648, -0.014931704849004745, 0.0852932259440422, 0.0037072766572237015, -0.0032733601983636618, 0.01807916723191738, -0.008815614506602287, -0.01926628313958645, 0.01183316670358181, 0.013648897409439087, 0.025947697460651398, -0.045996155589818954, 0.023658987134695053, -0.0202046949416399, 0.03636067733168602, -0.01536272931843996, -0.000390736066037789, -0.018245525658130646, -0.011943557299673557, 0.0007557233329862356, -0.0025695792865008116, 0.04303089901804924, -0.014892157167196274, -0.05795429274439812, -0.040836963802576065, 0.0019087130203843117, 0.027668612077832222, 0.026663878932595253, 0.020947659388184547, -0.016861191019415855, -0.04778502136468887, -0.02091146819293499, 0.0062612262554466724, -0.032018229365348816, -0.01977863535284996, -0.0740428939461708, 0.05694124475121498, -0.0386534221470356, -0.05892620235681534, 0.017412694171071053, 0.018700655549764633, 0.004314462188631296, -0.02868293784558773, -0.00606580451130867, -0.037424467504024506, -0.03830115124583244, 0.010902938432991505, -0.020619362592697144, 0.04055191949009895, 0.03607654571533203, -0.04420160502195358, 0.010777791030704975, -0.010949727147817612, 0.024939127266407013, 0.03484020754694939, 0.016617154702544212, -0.05851126089692116, -0.016743363812565804, -0.02506381832063198, 0.011546192690730095, 0.02572309598326683, 0.016819242388010025, 0.04545747488737106, 0.01052597165107727, -0.001836981624364853, 0.0015324781415984035, -0.006306140683591366, 0.04942717403173447, 0.02944069355726242, -0.045897334814071655, -0.03366975858807564, 0.019986890256404877, -0.0020919758826494217, 0.0006107314256951213, -0.04346640035510063, -0.05809415131807327, 0.007558623794466257, 0.06977660953998566, -0.017504911869764328, -0.09509623050689697, 0.03853999823331833, 0.0011781764915212989, -0.011735495179891586, 0.009448863565921783, 0.009858004748821259, -0.013999314047396183, 0.021618252620100975, 0.007758726365864277, -0.039113759994506836, -8.006072312127799e-05, -0.00887925922870636, -0.008396260440349579, -0.021650370210409164, -0.019696764647960663, 0.04295269027352333, 0.01987178809940815, -0.018025623634457588, 0.01460298802703619, -0.03231678903102875, -0.01560299377888441, -0.014891570433974266, 0.02557831071317196, 0.02855803072452545, 0.011129839345812798, 0.07520196586847305, -0.010534466244280338, -0.01976204477250576, -0.013388220220804214, 0.0011737431632354856, 0.0073147607035934925, 0.009996172040700912, -0.05524289608001709, -0.005681383423507214, 0.014160593040287495, -0.0032290504314005375, -0.003674074076116085, 0.009566395543515682, -0.04286990687251091, 0.047831784933805466, 0.0081739891320467, 0.019033508375287056, 0.020037231966853142, -0.008490338921546936, -0.0393507219851017, 0.004563183523714542, -0.029564039781689644, -0.03833097219467163, -0.3156992793083191, -0.010689235292375088, 0.0012397738173604012, -0.028119487687945366, 0.0073957787826657295, -0.12537935376167297, -0.008124224841594696, 0.010365375317633152, 0.05741528794169426, -0.020669808611273766, -0.010602698661386967, 0.004875809419900179, -0.0020566831808537245, -0.001266778097487986, 0.03923844173550606, -0.02689410001039505, -0.03353652358055115, -0.012016610242426395, -0.06027912348508835, 0.022156359627842903, -0.012886014766991138, 0.06128821521997452, 0.04621761292219162, 0.003992833197116852, -0.039688706398010254, -0.04946453496813774, -0.02783685363829136, 0.05649834871292114, 0.0007562093087472022, -0.009294223040342331, 0.017305148765444756, 0.00410872045904398, -0.04113508388400078, -0.044170182198286057, 0.023203229531645775, 0.011877157725393772, -0.007471295539289713, -0.01244940422475338, 0.03559368476271629, 0.017464054748415947, -0.022294849157333374, 0.013562030158936977, -0.03920765221118927, -0.03113618679344654, -0.007316425908356905, 0.01026378944516182, -0.0019757638219743967, -0.006704545579850674, 0.02570950612425804, 0.013312830589711666, 0.054464191198349, -0.040961019694805145, -0.0056104836985468864, 0.019837064668536186, 0.08507773280143738, 0.039067793637514114, -0.025385474786162376, 0.04806004837155342, 0.012676644138991833, 0.0384460873901844, -0.0590655617415905, 0.036507800221443176, -0.01139881368726492, 0.017646344378590584, -0.010138341225683689, -0.0012460307916626334, 0.03095211274921894, 0.018643194809556007, 0.03191753476858139, 0.03052544966340065, -0.005591428838670254, -0.05739075317978859, -0.007270326372236013, 0.016727406531572342, 0.009799680672585964, 0.007855354808270931, 0.022044481709599495, 0.035215236246585846, -0.018842903897166252, -0.0034511862322688103, 0.0011958248214796185, 0.03806191682815552, -0.012267031706869602, -0.01256926916539669, 0.0154263935983181, -0.03732415661215782, 0.021824149414896965, -0.008039494976401329, -0.04596323147416115, 0.03551415354013443, 0.011838329955935478, -0.030573753640055656, -0.028212813660502434, 0.007030196022242308, 0.030415326356887817, -0.021831804886460304, -0.016284476965665817, 0.018220707774162292, 0.011206373572349548, 0.014423203654587269, 0.002270875498652458, 0.007203103508800268, -0.061856627464294434, 0.03571416437625885, 0.012098309583961964, -0.018818166106939316, -0.13451822102069855, -0.02258358523249626, 0.013261170126497746, -0.023532412946224213, -0.006340009160339832, 0.0038522982504218817, -0.03225841373205185, 0.028977680951356888, 0.012086416594684124, 0.004097979050129652, 0.050753992050886154, -0.022453216835856438, 0.0320918895304203, 0.026947595179080963, 0.021974584087729454, -0.025221897289156914, 0.020923424512147903, -0.08332322537899017, 0.01669861003756523, -0.02268913947045803, 0.01704886369407177, -0.006434114184230566, 0.014833184890449047, 0.0349283404648304, -0.03682472184300423, 0.05763688683509827, 0.025961918756365776, -0.040277302265167236, 0.007165597751736641, -0.02899496629834175, -0.007545645348727703, 0.04182932525873184, 0.01133184414356947, 0.017767542973160744, 0.08364102244377136, -0.04065375402569771, -0.03511786460876465, -0.0024710434954613447, -0.09370478987693787, -0.029377222061157227, 0.04137848690152168, 0.03454265370965004, 0.06226016581058502, -0.0009863018058240414, 0.0108136972412467, -0.04854787513613701, -0.11582808941602707, 0.04261518642306328, -0.037113893777132034, -0.04193579778075218, 0.007281975354999304, -0.011610638350248337, 0.03259940445423126, -0.03998546674847603, -0.009789172559976578, -0.03381789103150368, 0.000979651347734034, 0.0346074141561985, 0.045819297432899475, -0.03970647603273392, 0.0041396282613277435, -0.0012465758481994271, -0.047906845808029175, 0.025790775194764137, 0.06941398233175278, 0.025041824206709862, 0.003499888814985752, 0.050889939069747925, -0.04094206914305687, -0.03493139520287514, -0.004680401645600796, -0.013349032029509544, -0.03242543712258339, 0.03607277572154999, 0.006170730572193861, -0.008081612177193165, -0.0313500352203846, -0.0257753636687994, -0.0677691251039505, -0.03334993124008179, -0.055012308061122894, 0.0008164698374457657, 0.03424447774887085, -0.06889718770980835, 0.02791079506278038, 0.04569172114133835, -0.03225386142730713, -0.020045829936861992, -0.010171812027692795, 0.03538394719362259, -0.017090830951929092, 0.0009246793342754245, 0.04525257274508476, -0.010464047081768513, 0.011841956526041031, -0.021144971251487732, 0.016126012429594994, -0.002585738431662321, -0.04086786508560181, -0.020659925416111946, -0.018161967396736145, -0.0002799364156089723, -0.03535152226686478, -0.007982254959642887, -0.03258195519447327, 0.0011930150212720037, 0.013936466537415981, -0.04103502258658409, 0.042885199189186096, -0.05580713599920273, 0.033446405082941055, 0.004378157667815685, 0.014184714294970036, 0.03130289912223816, 0.018764860928058624, -0.024045061320066452, 0.003926090896129608, -0.058460962027311325, -0.02153114229440689, 0.03351990133523941, -0.0015933167887851596, 0.04257223382592201, 0.03646661713719368, -0.008291310630738735, -0.007516488898545504, -0.07958962768316269, -0.0038862526416778564, -0.03381534665822983, -0.004672825802117586, -0.04385823383927345, 0.0035916052293032408, -0.05716463923454285, 0.04208603873848915, 0.0165113378316164, -0.0007561254897154868, 0.015587211586534977, -0.0011662394972518086, -0.03637225553393364, 0.028556210920214653, 0.016908682882785797, 0.038787227123975754, 0.022731008008122444, -0.02066146768629551, 0.014838074333965778, 0.00243680109269917, 0.008595569059252739, 0.02990896999835968, -0.008287778124213219]\"\n./train/comic_book/n06596364_5634.JPEG,comic_book,\"[0.02278291806578636, 0.010714109055697918, -0.007715551648288965, 0.03828369081020355, 0.0012191582936793566, -0.03754296153783798, 0.05995146930217743, 0.012168927118182182, -0.008397017605602741, -0.019560523331165314, -0.011979893781244755, 0.007870838046073914, 0.00934806652367115, -0.00875258632004261, -0.012873221188783646, -0.021808398887515068, 0.07974550127983093, 0.016022250056266785, 0.03372178226709366, -0.01871766336262226, -0.06041751801967621, 0.004808047786355019, -0.00036612851545214653, -0.02763430029153824, 0.003616967936977744, 0.09133343398571014, 0.022943787276744843, -0.005903317127376795, 0.016074908897280693, 0.013646207749843597, 0.023790394887328148, -0.022470129653811455, 0.006703434977680445, 0.015226799063384533, 0.026322966441512108, 0.04130081087350845, 0.023535231128335, 0.05430537089705467, -0.0052252160385251045, 0.10867944359779358, -0.006949513219296932, -0.08054181188344955, -0.01724589243531227, 0.017206314951181412, 0.01819230057299137, -0.07866297662258148, -0.03848070278763771, 0.0299333818256855, 0.011056139133870602, 0.03784354776144028, 0.02636932022869587, 0.038600921630859375, 0.02678055875003338, 0.03374382480978966, -0.02835686318576336, 0.04035278782248497, 0.015378148294985294, -0.020100949332118034, -0.013088441453874111, -0.04290587082505226, 0.00918983481824398, -0.00903104804456234, 0.040680497884750366, 0.018144089728593826, -0.009133013896644115, 0.04936623200774193, -0.008774586021900177, 0.05293499305844307, 0.01457623764872551, -0.024413835257291794, 0.03129655122756958, -0.05172611400485039, -0.0018229641718789935, -0.02335902862250805, 0.046630632132291794, -0.04491804540157318, 0.005267675034701824, 0.005902173928916454, -0.01433439552783966, -0.00456735584884882, 0.027894647791981697, 0.046616923063993454, -0.0021088982466608286, -0.023509306833148003, -0.027938835322856903, 0.023330172523856163, -0.026756247505545616, -0.0034090266562998295, -0.06662896275520325, -0.013127986341714859, 0.020520225167274475, 0.04972388967871666, -0.5536361336708069, -0.00588957779109478, 0.0009106057696044445, 0.02062578871846199, 0.0494198314845562, -0.004584417212754488, 0.005967416800558567, -0.014547722414135933, 0.0470973439514637, 0.005532069131731987, -0.0234108567237854, 0.010397589765489101, 0.04281345754861832, -0.03512053191661835, -0.18994149565696716, -0.05110408738255501, -0.00107298931106925, 0.03486483916640282, -0.008669828064739704, -0.01620328053832054, -0.0002888506860472262, 0.009608771651983261, -0.0026158939581364393, -0.010582796297967434, 0.03939966484904289, 0.01876845397055149, 0.05712221935391426, 0.012293538078665733, 0.019348790869116783, -0.016274256631731987, -0.003655781736597419, 0.018534788861870766, 0.005486813373863697, -0.038687463849782944, 0.04249228164553642, -0.01849854551255703, 0.027259577065706253, -0.0276618804782629, 0.02758091874420643, -0.05322888493537903, -0.019207637757062912, 0.08241502195596695, -0.05092253535985947, -0.021502669900655746, -0.020146053284406662, -0.057139068841934204, 0.030238430947065353, 0.05848051235079765, -0.012962104752659798, 0.0177494827657938, -0.06895634531974792, 0.04871572554111481, -0.005735326092690229, 0.002349921502172947, 0.001362595590762794, -0.07918131351470947, 0.039441853761672974, 0.0038835620507597923, 0.010740515775978565, 0.01764899305999279, -0.07083335518836975, -0.0066147735342383385, 0.005338068585842848, -0.02687201090157032, 0.014885837212204933, -0.05326645076274872, -0.007685713469982147, -0.017291363328695297, 0.07766877859830856, -0.04978622868657112, -0.0021909731440246105, 0.008041639812290668, -0.031209181994199753, 0.01779673621058464, -0.0033875852823257446, 0.010362516157329082, -0.012577086687088013, -0.021643927320837975, -0.0702449381351471, 0.01895967125892639, -0.04406481608748436, -0.0021553761325776577, -0.0094309626147151, -0.02920720726251602, -0.021516896784305573, 0.020225657150149345, -0.04060838371515274, -0.011357653886079788, 0.0172604750841856, -0.026021819561719894, -0.017999401316046715, 0.025532275438308716, 0.014483407139778137, -0.005916651338338852, -0.003760470077395439, 0.01857871003448963, -0.01199154369533062, -0.033317629247903824, 0.015916066244244576, -0.02604486420750618, 0.0267083328217268, 0.003955301828682423, -0.023992685601115227, 0.014414217323064804, 0.03479933738708496, -0.009492500685155392, 0.06959349662065506, 0.025977205485105515, -0.0302964486181736, 0.06493722647428513, 0.021518182009458542, -0.03227981925010681, -0.023518143221735954, -0.012472824193537235, -0.022502202540636063, -0.0038656906690448523, -0.003180701984092593, -0.013826972804963589, -0.018830152228474617, -0.004732377827167511, 0.005410610698163509, -0.004609653260558844, 0.04866495728492737, -0.047304917126894, -0.021408207714557648, 0.006491207052022219, -0.00809047743678093, 0.000389875698601827, 0.012829430401325226, -0.07793435454368591, -0.060267459601163864, 0.001528856111690402, 0.01888248883187771, 0.02926034666597843, -0.010016805492341518, -0.038043517619371414, -0.043071359395980835, -0.007596050854772329, -0.05300319939851761, -0.03595402464270592, 0.049444254487752914, 0.026446551084518433, 0.01850086823105812, -0.02565792202949524, -0.016764797270298004, -0.02967236563563347, -0.015627870336174965, 0.02046816423535347, 0.03836417570710182, 0.0028193434700369835, -0.02092665620148182, 0.0493210032582283, -0.01011436153203249, 0.027660002931952477, -0.004180897027254105, -0.002731241751462221, -0.006145032588392496, 0.046546757221221924, -0.036257728934288025, 0.06669924408197403, -0.03575420752167702, 0.023379269987344742, -0.03930774703621864, 0.020719246938824654, -0.025794742628932, 0.0274630319327116, -0.17890805006027222, -0.08119736611843109, 0.009368526749312878, 9.815386147238314e-05, 0.008274816907942295, -0.10486447811126709, 0.04205513745546341, -0.02323857694864273, 0.033532049506902695, 0.04720637947320938, -0.0020564435981214046, 0.021161647513508797, 0.002652551978826523, -0.005670380778610706, 0.009848512709140778, 0.005461185704916716, -0.01979818567633629, -0.022967655211687088, 0.0030060075223445892, -0.024041322991251945, -0.004997418727725744, 0.023216640576720238, 0.017163407057523727, 0.024849429726600647, 0.07371532917022705, 0.02655448019504547, 0.01281013060361147, -0.03592744842171669, -0.04460083320736885, -0.004432355985045433, -0.07374929636716843, 0.012140396982431412, -0.02574395388364792, -0.0007491694996133447, 0.016913525760173798, -0.003550079185515642, 0.09013833850622177, 0.020799119025468826, 0.06269139051437378, 0.029389724135398865, -0.002857875544577837, -0.0146228838711977, 0.00649100448936224, -0.017054865136742592, -0.035581301897764206, -0.002207280835136771, 0.014727170579135418, 0.02736670710146427, 0.009736601263284683, 0.025650830939412117, 0.04245918244123459, -0.004061925690621138, -0.013017923571169376, 0.08277630805969238, 0.08219960331916809, 0.06848441809415817, 0.006421186961233616, -0.04557408392429352, -0.00473087327554822, 0.014448052272200584, 0.009408286772668362, 0.0046000052243471146, -0.008186235092580318, 0.014530734159052372, 0.017121676355600357, -0.013911719433963299, 0.07877053320407867, 0.018779240548610687, -0.019050445407629013, 0.03515903279185295, 0.006436478346586227, -0.02788049541413784, 0.013045504689216614, -0.03803861513733864, -0.013140290975570679, -0.05955791100859642, 7.227725291159004e-05, 0.0031095100566744804, 0.02082495391368866, 0.02894035167992115, 0.013729581609368324, 0.06511018425226212, -0.05382349714636803, -0.019542330875992775, 0.02763984724879265, -0.015885327011346817, -0.052600495517253876, -0.013629847206175327, 0.029057268053293228, 0.03548717871308327, 0.004804663360118866, -0.002178249880671501, 0.06726887077093124, 0.006244539748877287, 0.02046012319624424, -0.029066933318972588, 0.01247150544077158, 0.02930375561118126, -0.055427100509405136, 0.10180946439504623, -0.05175447463989258, -0.010070965625345707, -0.05409272760152817, 0.015288016758859158, 0.005455006845295429, -0.06596335768699646, -0.13794751465320587, 0.04496874660253525, -0.02909564971923828, 0.09915053099393845, -0.05265616625547409, 0.017380569130182266, 0.005808207672089338, 0.040670644491910934, 0.018570436164736748, 0.007142285816371441, -0.010743306018412113, 0.012212134897708893, 0.07403355836868286, -0.010044898837804794, 0.04811261221766472, -0.007340068928897381, -0.008506747893989086, -0.03794119507074356, -0.01807250641286373, -0.025089383125305176, -0.06518004089593887, 0.02453671582043171, 0.025171304121613503, 0.014221870340406895, -0.03981944918632507, -0.009126214310526848, -0.029314246028661728, 0.027066675946116447, 0.014764755964279175, -0.010035325773060322, 0.010537996888160706, 0.007214149460196495, 0.09993812441825867, -0.020444355905056, 0.028240714222192764, -0.07495491951704025, 0.048921555280685425, -0.048306576907634735, -0.1544017791748047, -0.07183020561933517, -0.004375177435576916, -0.003332160646095872, 0.009136302396655083, -0.020409319549798965, 0.010898321866989136, -0.013926369138062, 0.06752203404903412, 0.015703225508332253, 0.023227693513035774, 0.009561080485582352, 0.01244531199336052, 0.03678577393293381, -0.010002863593399525, -0.04733531177043915, 0.030079929158091545, -0.02792486734688282, -0.07453355193138123, 0.008455480448901653, 0.04300127178430557, 0.05636512488126755, 0.02713395655155182, 0.025184469297528267, 0.03525901213288307, 0.051724623888731, 0.013680039905011654, 0.02234935574233532, 0.03831316903233528, 0.0032312648836523294, 0.008735999464988708, -0.060450322926044464, 0.04457836225628853, -0.017685428261756897, -0.059938348829746246, 0.010068574920296669, 0.03385264798998833, 0.013108567334711552, -0.012754715979099274, -0.01596805267035961, 0.006510739680379629, -0.00030026890453882515, -0.025988975539803505, 0.04257623851299286, -0.002357305260375142, -0.008150085806846619, -0.02173924632370472, -0.01635204255580902, -0.04664109647274017, -0.05180521681904793, 0.008866100572049618, 0.01984943263232708, -0.0058786519803106785, -0.01442826259881258, 0.001324211247265339, -0.011135472916066647, -0.010659541934728622, 0.015667514875531197, -0.017710523679852486, -0.012718301266431808, -0.00924527458846569, -0.025702254846692085, 0.014953539706766605, -0.068095862865448, -0.07496732473373413, 0.006601117551326752, 0.0033879890106618404, -0.01821688935160637, 0.010452289134263992, -0.00332230725325644, 0.006698247045278549, -0.0352042019367218, 0.02461949735879898, -0.0366690419614315, 0.033147238194942474, -0.023327836766839027, -0.019010409712791443, -0.01163498591631651, -0.034806571900844574, 0.001692434772849083, -0.036857347935438156, 0.04849425330758095, 0.05124053359031677, -0.012332125566899776, -0.0046265264973044395, 0.02602471597492695, 0.02381916344165802, -0.025155017152428627, 0.05584115907549858, -0.018049178645014763, 0.033852048218250275, -0.07316042482852936, 0.016361849382519722, 0.04377460107207298, 0.05410135164856911, 0.0005553173832595348, -0.03796594589948654, 0.0016691554337739944, 0.03609655797481537, 0.024317869916558266, 0.0027603746857494116, 0.011666038073599339, 0.012349972501397133, 0.00015984050696715713, -0.026040634140372276, 0.010473539121448994, -0.07067051529884338, 0.02291511744260788, -0.02319248951971531, 0.031416378915309906]\"\n./train/comic_book/n06596364_4445.JPEG,comic_book,\"[-0.03537631779909134, 0.04721193388104439, 0.03460888937115669, -0.00247542024590075, 0.019422806799411774, -0.011496305465698242, 0.026869909837841988, 0.04199838638305664, 0.013398301787674427, -0.03311457484960556, 0.05084237828850746, 0.012944589368999004, 0.022482506930828094, -0.010272319428622723, 0.0033241298515349627, 0.005655850283801556, 0.08605723828077316, 0.05736646056175232, 0.033034391701221466, -0.008324113674461842, -0.03701192885637283, -0.0027696695178747177, 0.004108042921870947, -0.021287519484758377, -0.05175251141190529, 0.07951352000236511, 0.03494158387184143, 0.02432052232325077, -0.0008706781081855297, 0.057866599410772324, 0.0051901754923164845, -0.01801198162138462, -0.0018662640359252691, 0.017831221222877502, -0.04119974374771118, -0.0032413206063210964, -0.018426688387989998, -0.0005230117822065949, -0.03677074983716011, 0.04293183237314224, -0.02920365519821644, -0.04405488818883896, -0.03427812457084656, 0.01751715876162052, 0.03486669436097145, -0.05520132556557655, 0.0029069241136312485, 0.03348192200064659, 0.05686148628592491, 0.012560986913740635, 0.005322106648236513, -0.005792947951704264, -0.017330802977085114, 0.040254462510347366, 0.008177565410733223, -0.018801134079694748, 0.03238498792052269, 0.004388326313346624, 0.010713119059801102, 0.02323206700384617, -0.028048837557435036, -0.036847297102212906, 0.023708783090114594, -0.02272919751703739, 0.0005524437874555588, 0.021668875589966774, -0.007481752894818783, 0.0092579685151577, 0.0019740459974855185, 0.006351891905069351, 0.02912638522684574, -0.029343733564019203, -0.018886128440499306, -0.04123132675886154, 0.04639718681573868, 0.0054942285642027855, -0.023462926968932152, -0.04313664510846138, -0.009701459668576717, 0.0035370367113500834, 0.003934245090931654, -0.013689221814274788, 0.02291582152247429, -0.025918876752257347, -0.02825998142361641, 0.01414834801107645, -0.06480560451745987, -0.054998524487018585, -0.0342462919652462, -0.026745101436972618, -0.008134199306368828, 0.006961944047361612, -0.545232892036438, 0.07048211991786957, 0.01676141284406185, -0.006476788315922022, 0.04396457597613335, 0.030887220054864883, 0.05493328720331192, 0.03712977096438408, 0.0257679782807827, 0.0034507603850215673, -0.019963199272751808, -0.03279603645205498, -0.017604993656277657, 0.023087624460458755, -0.19855690002441406, -0.013430694118142128, 0.021830381825566292, 0.05402400717139244, 0.03475412726402283, -0.024762485176324844, 0.05697287991642952, -0.0012863145675510168, -0.019896680489182472, -0.018004225566983223, 0.03156251832842827, 0.05851076915860176, 0.012504803016781807, -0.04125058650970459, 0.018422000110149384, 0.00836305133998394, 0.028168801218271255, 0.033768873661756516, 0.03278131037950516, -0.013082905672490597, -0.003539069788530469, -0.013996805995702744, 0.007546551991254091, -0.039707597345113754, -0.009206317365169525, -0.02166464366018772, -0.011472471058368683, 0.08178301900625229, -0.02722250483930111, 0.03009076416492462, 0.01916966773569584, -0.0224654208868742, 0.060991205275058746, 0.021725688129663467, -0.024334093555808067, 0.011890973895788193, -0.013402373529970646, 0.015672624111175537, 0.022813070565462112, 0.06623299419879913, -0.009659896604716778, -0.03237055987119675, 0.02980037033557892, 0.013760755769908428, 0.008693750016391277, 0.0037703183479607105, -0.06242748349905014, -0.0027284894604235888, -0.01564033329486847, 5.638337825075723e-05, 0.012974505312740803, -0.028618577867746353, 0.04121456667780876, -0.010379976592957973, 0.030397795140743256, -0.034636951982975006, 0.011304467916488647, 0.03163678199052811, 0.008950907737016678, 0.00760679692029953, -0.046741362661123276, 0.004914832301437855, 0.00784908514469862, -0.01931334286928177, 0.001226070336997509, -0.008829297497868538, -0.057437073439359665, 0.0077536143362522125, -0.03671308979392052, -0.05665623024106026, 0.07618199288845062, 0.0373518168926239, -0.024586908519268036, 0.026812421157956123, -0.010069639421999454, -0.031336281448602676, -0.011000394821166992, -0.023058941587805748, 0.026807421818375587, 0.023416999727487564, -0.0014485721476376057, 0.00531307328492403, 0.006515896413475275, -0.0400901734828949, 0.020151689648628235, -0.036268435418605804, -0.004223746247589588, -0.04106368497014046, 0.002882009372115135, -0.03082883730530739, 0.006847965996712446, -0.03847340866923332, 0.045947011560201645, 0.013417955487966537, 0.010104941204190254, 0.021033281460404396, 0.02120537869632244, -0.03309553116559982, -0.047716330736875534, -0.01722997985780239, -0.032222796231508255, -0.025791794061660767, 0.038874827325344086, -0.05300474911928177, -0.017024215310811996, -0.03606994077563286, 0.009303338825702667, -0.018019545823335648, 0.025534233078360558, -0.01630048267543316, -0.02529435232281685, -0.011416942812502384, 0.015591839328408241, -0.01620500721037388, 0.016015715897083282, -0.03312250226736069, 0.004991405177861452, -0.04028669744729996, 0.04522809758782387, 0.014166970737278461, -0.018000716343522072, -0.037549253553152084, -0.02676665410399437, -0.054778799414634705, -0.0346207432448864, 0.005038178525865078, -0.015264172106981277, 0.004040750674903393, 0.03802113980054855, -0.027884285897016525, -0.04486324265599251, -0.021161286160349846, -0.02073037251830101, -0.01135482918471098, 0.006044704932719469, -0.013007261790335178, -0.011120769195258617, -0.029822176322340965, -0.04054015129804611, -0.029853571206331253, 0.04319758713245392, 0.025446375831961632, 0.0396217443048954, 0.0018867447506636381, -0.04374804347753525, 0.008201006799936295, 0.02640656940639019, 0.006227842066437006, -0.014255838468670845, -0.003515841905027628, -0.013195117935538292, 0.07139953970909119, -0.18414568901062012, -0.06409422308206558, -0.005450227297842503, -0.02631138265132904, 0.0405983030796051, -0.1297324001789093, 0.015151151455938816, -0.02296392247080803, 0.013143501244485378, 0.028875920921564102, -0.04141950234770775, 0.03796223923563957, 0.002108067274093628, -0.016453377902507782, -0.00462385406717658, -0.042524900287389755, -0.0034418953582644463, 0.001979404827579856, 0.03460315614938736, -0.01862283982336521, -0.036074891686439514, 0.06490186601877213, 0.039989158511161804, 0.016064636409282684, 0.0608399361371994, 0.009385937824845314, 0.022813871502876282, -0.0005786807741969824, 0.0662379339337349, 0.018234048038721085, -0.029602546244859695, 0.007530051749199629, 0.00853284914046526, -0.03412877395749092, 0.017184598371386528, 0.04762422665953636, 0.03413499891757965, 0.008850334212183952, 0.0018308559665456414, -0.0007278090342879295, 0.006826998200267553, 0.006163016892969608, 0.0005765499081462622, 0.014607330784201622, 0.03142781928181648, -0.05532176420092583, -0.005028828512877226, 0.005612468812614679, 0.025072375312447548, -0.0013992233434692025, 0.057935718446969986, 0.04251180589199066, 0.013269119895994663, 0.05031741037964821, 0.08157997578382492, 0.033119700849056244, -0.006168389227241278, -0.029248878359794617, 0.03220978006720543, 0.033170875161886215, -0.016092298552393913, 0.06367992609739304, -0.04460841789841652, 0.004535777028650045, 0.02073446288704872, 0.03086034581065178, 0.05521118640899658, 0.0255671888589859, 0.03351978585124016, 0.0054356371983885765, 0.022546779364347458, -0.01703547313809395, 0.01909921132028103, -0.026828138157725334, -0.00663103349506855, -0.020689409226179123, 0.050948966294527054, -0.04893801361322403, 0.01731184870004654, 0.04526989161968231, -0.006964183412492275, -0.024913381785154343, -0.009478049352765083, 0.00858667865395546, 0.0316869392991066, 0.0036325007677078247, 0.004822565242648125, 0.016430554911494255, 0.02584567852318287, 0.023057278245687485, 0.016119612380862236, -0.00912242941558361, 0.044310927391052246, -0.012158617377281189, 0.03015269711613655, 3.835631287074648e-05, -0.04017578065395355, 0.02529202587902546, -0.08205912262201309, 0.08735394477844238, -0.07088837027549744, -0.026186546310782433, -0.034666042774915695, -0.006284791976213455, 0.037004586309194565, -0.07322868704795837, -0.204271599650383, 0.02092866599559784, 0.021851884201169014, 0.12395032495260239, -0.019654784351587296, 0.025786135345697403, 0.008141756057739258, 0.03757196664810181, -0.0016326429322361946, -0.03166600316762924, 0.01576683670282364, 0.01219184324145317, 0.04965358227491379, 0.038798436522483826, 0.08432009816169739, 0.004344771150499582, -0.056110769510269165, 0.021476248279213905, -0.001160395797342062, 0.01969645917415619, -0.06379828602075577, 0.044330496340990067, 0.020726770162582397, -0.014037583954632282, 0.00205223448574543, -0.006639471743255854, -0.055822309106588364, 0.029991962015628815, 0.013438534922897816, -0.0009317806689068675, 0.012148280628025532, 0.03473483398556709, 0.025689948350191116, -0.026550699025392532, 0.056340958923101425, -0.0279109925031662, -0.004078668076545, -0.036623746156692505, -0.14008557796478271, -0.03772442787885666, -0.011695001274347305, -0.014389324933290482, -0.009210840798914433, -0.0044777472503483295, 0.004356862977147102, -0.033695172518491745, 0.055875666439533234, 0.005808375775814056, 0.021673524752259254, 0.03470565378665924, 0.012103143148124218, 0.09700342267751694, 0.013018063269555569, -0.036997660994529724, -0.02608182094991207, -0.06820785999298096, -0.05528265982866287, 0.027861975133419037, 0.009105506353080273, 0.07617665827274323, 0.022981513291597366, -0.01954789273440838, 0.0273257065564394, 0.04695514962077141, -0.0005731959245167673, -0.004828731529414654, 0.021529732272028923, 0.010087943635880947, 0.00875789113342762, -0.06524033844470978, 0.02371830679476261, 0.0026044745463877916, -0.09046803414821625, -0.019632749259471893, 0.05051395297050476, 0.03395916894078255, -0.0013899576151743531, -0.061898984014987946, -0.0014376823091879487, 0.004282444249838591, -0.006952457595616579, 0.027653243392705917, -0.012465246021747589, -0.0490097850561142, 0.0020678548607975245, -0.022138796746730804, -0.0020471522584557533, -0.009821321815252304, -0.01357760839164257, 0.03642481565475464, -0.012081380002200603, 0.020119376480579376, -0.05869149789214134, 0.033401068300008774, -0.02241538278758526, -0.016249720007181168, -0.03345103561878204, -0.03260452300310135, -0.005201470106840134, -0.08583112806081772, -0.022704441100358963, -0.009427941404283047, -0.087849460542202, 0.011541851796209812, -0.027116628363728523, 0.02502499707043171, 0.040306657552719116, -0.01758456975221634, 0.023742036893963814, -0.0026687243953347206, 0.004292686935514212, -0.010865672491490841, 0.034045711159706116, -0.05959368869662285, 0.015404381789267063, -0.008883502334356308, 0.004658407066017389, -0.058416880667209625, -0.001626214012503624, 0.018659057095646858, -0.0011033671908080578, 0.04122801497578621, 0.017742399126291275, -0.007787731941789389, 0.05361778289079666, -0.048610322177410126, 0.05763492360711098, 0.01975666545331478, 0.04679698869585991, -0.08848973363637924, -0.02359691821038723, 0.013489574193954468, 0.050606876611709595, -0.037045370787382126, -0.01864796131849289, -0.031322233378887177, 0.009274047799408436, 0.0024029952473938465, -0.039217956364154816, -0.010443290695548058, 0.009600155986845493, 0.024134626612067223, -0.010368646122515202, -0.019933192059397697, -0.08255918323993683, 0.02355664037168026, -0.012519080191850662, 0.016003496944904327]\"\n./train/comic_book/n06596364_3314.JPEG,comic_book,\"[0.00048223070916719735, 0.016062816604971886, -0.026674877852201462, 0.031034277752041817, 0.011942307464778423, 0.007878518663346767, 0.03196389228105545, -0.03796366602182388, -0.0368252657353878, 0.005101602990180254, 0.019760236144065857, 0.009786240756511688, -0.03478330373764038, -0.014811583794653416, -0.0245496965944767, -0.05279737710952759, 0.07562194019556046, -0.004606257658451796, 0.054034274071455, -0.02999323606491089, -0.03084663860499859, -0.016313128173351288, 0.0223536416888237, 0.01018571201711893, 0.04326261579990387, 0.02782393991947174, 0.031752049922943115, 0.04391278326511383, 0.030481193214654922, 0.029436374083161354, -0.0019377670250833035, 0.005390646867454052, -0.007709282450377941, 0.02691030688583851, -0.010262387804687023, 0.04182574898004532, 0.026308709755539894, 0.001571841654367745, -0.00467982841655612, 0.028882859274744987, 0.009219221770763397, -0.05284489318728447, -0.030049307271838188, -0.03910108655691147, -0.0130937984213233, -0.0405377522110939, -0.0023461985401809216, 0.028453178703784943, -0.014520513825118542, 0.07680334895849228, 0.026032796129584312, -0.019009016454219818, -0.0011045404244214296, 0.0010219627292826772, -0.01150489691644907, 0.000566066475585103, 0.037063103169202805, -0.02551601454615593, -0.010875812731683254, -0.01307957898825407, -0.05932806432247162, 0.027862370014190674, -0.025660106912255287, 0.02775016985833645, -0.036432988941669464, 0.05266253650188446, -0.018330439925193787, 0.04774143919348717, -0.018264289945364, -0.03133357688784599, 0.0026812402065843344, -0.0283901859074831, -0.034247804433107376, -0.03495080769062042, -0.005102869123220444, -0.018765948712825775, -0.003224917920306325, 0.03253001347184181, 0.020343845710158348, 0.001539903343655169, 0.0029385543894022703, 0.010648967698216438, -0.016962716355919838, 0.010531940497457981, -0.06892674416303635, 0.026665832847356796, -0.02349168434739113, 0.005715801380574703, -0.0334477461874485, -0.0050357552245259285, -0.005005193408578634, 0.040209975093603134, -0.4726827144622803, -0.016780128702521324, 0.00475613446906209, -0.011122854426503181, -0.0009554193820804358, 0.021779298782348633, 0.02324046939611435, 0.035984303802251816, 0.03809015452861786, 0.037047237157821655, -0.005623518954962492, 0.010258011519908905, 0.019046736881136894, -0.013316787779331207, -0.18297971785068512, -0.036085933446884155, -0.020915323868393898, 0.032691583037376404, -0.038053568452596664, -0.023021014407277107, -0.0038685468025505543, -0.03517158329486847, -0.01706165447831154, -0.022406723350286484, 0.020962493494153023, 0.05569078400731087, 0.012541938573122025, 0.0021070106886327267, 0.024737123399972916, -0.046995095908641815, -0.0017939963145181537, 0.027114903554320335, 0.034452661871910095, -0.023420359939336777, 0.03751624375581741, -0.03810635209083557, -0.004708539694547653, -0.06637302786111832, -0.019043439999222755, -0.035201288759708405, -0.058186762034893036, 0.07982764393091202, -0.0003096702857874334, 0.020493149757385254, 0.006898316089063883, -0.03429911658167839, 0.01971638761460781, 0.029439637437462807, -0.04754336178302765, 0.005937100853770971, -0.0477367639541626, 0.033804040402173996, 0.006441077683120966, 0.04345294088125229, -0.016966359689831734, -0.07078176736831665, 0.03135136142373085, 0.05229080468416214, -0.011429524049162865, 0.028057599440217018, -0.13090038299560547, 0.03127676621079445, -0.005190989933907986, -0.029693223536014557, -0.027562245726585388, -0.05168800801038742, 0.0035234030801802874, -0.02214655466377735, 0.04189171642065048, -0.03761201351881027, 0.0023341691121459007, 0.05601935461163521, 0.031199662014842033, 0.03852630406618118, 0.04244180768728256, 0.048502832651138306, 0.028981097042560577, -0.04264507442712784, -0.01993396505713463, 0.044040825217962265, -0.0451938770711422, 0.0037090855184942484, -0.03512958064675331, -0.03345101326704025, 0.016593240201473236, 0.018871594220399857, 0.0011167626362293959, -0.014268767088651657, -0.029756879433989525, -0.06687147915363312, 0.016329148784279823, 0.04944790527224541, 0.0031870161183178425, 0.01126049179583788, -0.01428617537021637, 0.009124466218054295, -0.008968443609774113, -0.023321568965911865, 0.02973981387913227, -0.03164653852581978, 0.01490821037441492, 0.018651839345693588, -0.03430279716849327, 0.014264277182519436, 0.02863370254635811, -0.040689896792173386, 0.12203492969274521, 0.010015315376222134, -0.02688007615506649, 0.012582369148731232, -0.0032902380917221308, -0.05370505899190903, -0.03794324770569801, -0.05149565637111664, -0.02058618701994419, -0.001325185876339674, -0.02272278256714344, -0.05472610890865326, -0.09170015156269073, -0.009514129720628262, -0.03568032383918762, -0.030336812138557434, 0.023880429565906525, -0.023000607267022133, -0.02724137157201767, 0.0006254558102227747, 0.06870540976524353, 0.005296922288835049, -0.00930735468864441, -0.020189573988318443, -0.08541148900985718, -0.00771714560687542, 0.012100202962756157, 0.0020028329454362392, -0.010583360679447651, -0.008092040196061134, -0.020439837127923965, -0.02638515830039978, -0.03006310574710369, -0.010400490835309029, 0.02470337599515915, 0.02529330551624298, 0.03472818061709404, -0.027828359976410866, -0.061035312712192535, -0.023535452783107758, -0.03442780300974846, -0.0061518424190580845, 0.012301132082939148, 0.004932788200676441, 0.004235442727804184, 0.0009009473724290729, -0.03651551902294159, 0.017986373975872993, 0.0049505154602229595, 0.05385364592075348, -0.005236985627561808, 0.047755323350429535, -0.05031069368124008, 0.05704611912369728, -0.004066738300025463, 0.052922189235687256, 0.0015850707422941923, 0.01281652133911848, -0.0050948867574334145, 0.023147452622652054, -0.19017352163791656, -0.05167632922530174, 0.02412671037018299, -0.014135157689452171, 0.016107555478811264, -0.19109030067920685, 0.03201998025178909, 0.005016823764890432, 0.04271065443754196, 0.030681414529681206, -0.027453428134322166, 0.01428240817040205, -0.013148120604455471, -0.013437860645353794, 0.012624621391296387, -0.04331117495894432, -0.009066417813301086, -0.018094781786203384, 0.003917318768799305, -0.0017988492036238313, 0.029036326333880424, 0.003892846405506134, 0.03293883800506592, -0.005903515033423901, 0.015521145425736904, 0.022213928401470184, 0.026865312829613686, -0.02009863406419754, 0.10178595036268234, -0.008674985729157925, -0.04884171485900879, 0.0060442350804805756, -0.01214777585119009, 0.003022316377609968, 0.01920352689921856, -0.004639908671379089, 0.04636341333389282, 0.015321891754865646, 0.016008995473384857, 0.06897404044866562, -0.017562871798872948, -0.02503621205687523, 0.0025446105282753706, -0.021191859617829323, 0.0038789857644587755, -0.02806570567190647, 0.02217600867152214, 0.027169320732355118, 0.01568591222167015, 0.009752461686730385, 0.042298149317502975, -0.012097269296646118, 0.011219624429941177, 0.06903629750013351, 0.07955105602741241, 0.03676587715744972, 0.02651359513401985, -0.028021477162837982, -0.036360692232847214, 0.048128288239240646, -0.019779616966843605, 0.05574638396501541, -0.0597858652472496, 0.05645265430212021, -0.05513829365372658, -0.008880991488695145, 0.06834005564451218, 0.0032260846346616745, -0.007401836104691029, 0.024403169751167297, 0.04972635954618454, -0.04952536150813103, 0.002416811650618911, -0.03723643720149994, 0.021484293043613434, -0.006550994701683521, -0.010300357826054096, -0.009437746368348598, 0.04222322627902031, 0.08336730301380157, -0.047760579735040665, 0.051572199910879135, -0.03846557438373566, 0.04696148261427879, -0.008010419085621834, -0.0013573981123045087, -0.01622757688164711, -0.002098360098898411, 0.010275166481733322, 0.01584070362150669, 0.015847884118556976, -0.0032573507633060217, 0.04880720004439354, 0.005117344204336405, 0.05549497902393341, 0.02627507597208023, 0.003209878923371434, 0.0006478027789853513, -0.05608660355210304, 0.12452889233827591, -0.06705448776483536, -0.011794138699769974, -0.0871662124991417, 0.015063900500535965, 0.04818275198340416, -0.07706062495708466, -0.15652835369110107, 0.019998429343104362, -0.011516512371599674, 0.13049550354480743, -0.03429240733385086, -0.016998786479234695, 0.06396519392728806, 0.051119476556777954, -0.007632155437022448, -0.02327718213200569, -0.024397999048233032, -0.022600697353482246, -0.010683071799576283, 0.02259102836251259, 0.05943751707673073, 0.029429877176880836, -0.06322141736745834, -0.005549185909330845, 0.0022317320108413696, -0.004875131417065859, -0.003987606149166822, 0.07333051413297653, 0.008687183260917664, -0.018830232322216034, -0.0667923092842102, -0.02043427899479866, 0.01330704614520073, -0.03047213889658451, 0.01099514588713646, 0.004339444916695356, -0.06193863973021507, -0.01169153768569231, 0.05464547500014305, -0.011425860226154327, 0.05263349041342735, 0.0011455577332526445, -0.03320878744125366, -0.05586789548397064, -0.08700527250766754, -0.03046245500445366, 0.011053689755499363, 0.017637815326452255, 0.003973070066422224, 0.00791313499212265, -0.0077284048311412334, -0.008139271289110184, -0.02902778796851635, 0.042286038398742676, -0.004874392878264189, -0.004404726438224316, 0.016486240550875664, 0.02182009443640709, -0.03207947686314583, -0.07226809114217758, 0.016746176406741142, -0.06110215187072754, -0.03566470369696617, -0.004989172797650099, 0.007931683212518692, 0.12157705426216125, 0.025326654314994812, -0.006592185702174902, 0.023534955456852913, 0.01926690712571144, 0.09510047733783722, 0.028141118586063385, 0.044845398515462875, -0.006269385572522879, 0.05751745402812958, -0.06010252982378006, 0.02346072532236576, -0.0007897607865743339, -0.047355830669403076, -0.024411868304014206, 0.034017112106084824, -0.04339839890599251, 0.022038117051124573, -0.052884407341480255, 0.010198164731264114, -0.010306445881724358, -0.03408676013350487, 0.07754172384738922, 0.050027646124362946, 0.0038447973784059286, -0.042201489210128784, 0.010948416776955128, -0.027153654024004936, -0.04087769612669945, -0.008762700483202934, 0.09688270837068558, -0.0023244295734912157, 0.008266097865998745, -0.040624842047691345, -0.0015238448977470398, -0.02661166526377201, 0.013831104151904583, -0.011847642250359058, -0.05692334473133087, 0.03896722197532654, -0.029988382011651993, 0.044480253010988235, -0.018247785046696663, -0.08296960592269897, -0.007998107001185417, 0.025997722521424294, 0.021638061851263046, 0.005799173843115568, -0.012657618150115013, -0.009292319416999817, 0.008101527579128742, 0.00245346175506711, -0.021654747426509857, -0.008752990514039993, 0.014850746840238571, -0.016294831410050392, 0.004297423642128706, 0.007113492116332054, -0.034216005355119705, 0.023264922201633453, 0.06246291846036911, 0.013066571205854416, 0.021961331367492676, 0.018457379192113876, -0.0027533378452062607, 0.009492535144090652, -0.06620770692825317, 0.02080659009516239, -0.005010222550481558, 0.03705203905701637, -0.042180661112070084, -0.018283935263752937, 0.022459523752331734, 0.09592176228761673, 0.03803517669439316, -0.06340279430150986, -0.020896727219223976, 0.01565837673842907, -0.03055373579263687, -0.008995198644697666, 0.023593973368406296, 0.031623996794223785, 0.016666583716869354, -0.00967620313167572, 0.024550482630729675, -0.021552182734012604, 0.05068753659725189, 0.03639890253543854, -0.017714347690343857]\"\n./train/comic_book/n06596364_4083.JPEG,comic_book,\"[-0.06507235765457153, 0.06915464997291565, -0.010260378941893578, 0.013939792290329933, 0.03816591575741768, -0.011960374191403389, 0.03165862336754799, -0.02499578334391117, -0.01681627705693245, -0.03177754580974579, 0.044383034110069275, -0.009788036346435547, 0.08497275412082672, 0.0016244243597611785, -0.03554270416498184, -0.011998114176094532, -0.03280247747898102, -0.022965213283896446, -0.00573821272701025, -0.033127665519714355, -0.04367588460445404, -0.030193781480193138, 0.028521809726953506, 0.05554657056927681, -0.0044221943244338036, 0.01551212090998888, 0.05884404480457306, 0.01124307420104742, -0.001975099788978696, 0.045121628791093826, -0.0240811575204134, 0.014050858095288277, -0.009452350437641144, -0.026825187727808952, 0.03319048881530762, 0.038057368248701096, 0.007814996875822544, 0.04999940097332001, 0.009688777849078178, -0.006766915321350098, 0.014686130918562412, -0.054583366960287094, -0.02209301106631756, -0.02687019109725952, 0.02125271037220955, 0.14385484158992767, 0.017549874261021614, -0.02633325196802616, -0.045765530318021774, 0.01269171480089426, 0.037266459316015244, -0.01713162288069725, 0.00039776175981387496, -0.04073764756321907, 0.007527888286858797, -0.00521476473659277, 0.023960908874869347, 0.0153884869068861, -0.009432630613446236, 0.005558628588914871, -0.021253511309623718, 0.0327829010784626, 0.04305851459503174, -0.02582201547920704, 0.005616112146526575, 0.007140271365642548, 0.017139548435807228, -0.03172186017036438, -0.026756174862384796, 0.0179081279784441, 0.006902136839926243, -0.00475816847756505, -0.023287802934646606, -0.018466493114829063, -0.013589264824986458, -0.004424594808369875, -0.005219616461545229, -0.00905644241720438, -0.006424885243177414, -0.021088913083076477, 0.031371843069791794, 0.005960019305348396, -0.03367527574300766, 0.08100637048482895, 0.00475305737927556, 0.001200004480779171, -0.007485457696020603, 0.011456793174147606, -0.06668242812156677, 0.019124187529087067, -0.003598395735025406, 0.019709475338459015, -0.6092899441719055, 0.06827912479639053, -0.003044660435989499, 0.009935216046869755, 0.003998791333287954, 0.0007486293325200677, 0.07195564359426498, -0.01799687184393406, 0.044617872685194016, -0.00040356232784688473, 0.012501458637416363, -0.019267994910478592, 0.015799710527062416, -0.033370763063430786, -0.10416236519813538, -0.008747676387429237, -0.00442876061424613, -0.020221877843141556, 0.05480261519551277, -0.01105284970253706, -0.02186150848865509, 0.014708539471030235, 0.0038683097809553146, 0.011198737658560276, -0.005324528552591801, -0.0073984782211482525, 0.03908110037446022, -0.025438107550144196, 0.03676344454288483, -0.006257625296711922, 0.02349221333861351, -0.014938544481992722, 0.024798696860671043, -0.07112379372119904, 0.01750362478196621, 0.014057126827538013, -0.051583945751190186, -0.021756336092948914, -0.02224832773208618, 0.028605613857507706, 0.005731307435780764, 0.07737637311220169, -0.002931203693151474, -0.015323993749916553, -0.029739905148744583, -0.0016331052174791694, -0.046533167362213135, 0.01704423874616623, -0.012448658235371113, -0.0251507256180048, -0.00505339540541172, -0.007208176422864199, 0.011409152299165726, 0.019908644258975983, -0.012433418072760105, -0.0016980580985546112, 0.026180054992437363, -0.007296802010387182, -0.061156265437603, 0.016770370304584503, -0.044993381947278976, -0.04127022251486778, -0.04039463400840759, -0.041251178830862045, 0.0051259249448776245, -0.00312764011323452, 0.027749711647629738, -0.02961731143295765, -0.008222359232604504, -0.017112571746110916, 0.010204697027802467, 0.034885112196207047, 0.0063439300283789635, 0.051393136382102966, -0.05069157853722572, -0.003623001277446747, -0.017301281914114952, -0.011348001658916473, 0.019635070115327835, 0.02331031858921051, -0.01775817759335041, -0.000669033033773303, 0.035408224910497665, -0.03608328476548195, -0.029441921040415764, 0.0031550221610814333, -0.0451471172273159, 0.009270722977817059, 0.06286315619945526, -0.0009298152872361243, -0.03168335184454918, -0.00011955852824030444, 0.022895021364092827, 0.008567621000111103, 0.03298433497548103, -0.017745472490787506, -0.029152605682611465, 0.0005365739925764501, 0.014715075492858887, 0.018332259729504585, -0.0070486064068973064, -0.03050338476896286, -0.06554321944713593, -0.007779429666697979, 0.029031381011009216, -0.02399943582713604, 0.021069208160042763, -0.015141738578677177, -0.0037702140398323536, 0.013951381668448448, 0.01956174336373806, 0.029439566656947136, -0.019942088052630424, -0.009436608292162418, -0.03667980805039406, 0.0010721258586272597, -0.0067786602303385735, -0.033084169030189514, -0.0026384724769741297, 0.0068367584608495235, 0.009003620594739914, -0.05032995343208313, -0.02175232023000717, 0.00036016356898471713, 0.0322895385324955, 0.005974013824015856, 0.05966438725590706, -0.02054506726562977, 0.06403552740812302, -0.037034254521131516, -0.009466753341257572, 0.04415298253297806, 0.000740581308491528, -0.003063587937504053, 0.017955435439944267, -0.01885887421667576, -0.006472620647400618, 0.029034055769443512, -0.006982559338212013, -0.04659104719758034, 0.038437824696302414, -0.001238243654370308, 0.03407697007060051, 0.025451958179473877, -0.0006203497759997845, -0.003324356162920594, -0.013483203016221523, -0.026211882010102272, -0.06244006007909775, -0.003103447612375021, 0.0024886492174118757, 0.023504046723246574, -0.01833696849644184, -0.004793665837496519, -0.03404420241713524, 0.02878258191049099, -0.06653007864952087, 0.00905743520706892, 0.01897112838923931, -0.0012056563282385468, -0.04261530190706253, 0.025605574250221252, 0.030159257352352142, 0.006514666136354208, -0.002565853064879775, 0.07644578814506531, -0.18455004692077637, 0.03245372325181961, -0.009240278042852879, -0.024843381717801094, 0.004996778443455696, -0.2170943021774292, -0.007161828223615885, -0.005730158183723688, 0.009670974686741829, 0.06136156991124153, 0.0009724029223434627, -0.013864217326045036, -0.026857299730181694, -0.029422976076602936, 0.02075708843767643, 0.006929447408765554, -0.016388701274991035, -0.008607633411884308, 0.0032459970097988844, -0.014078567735850811, -0.018603738397359848, 0.011920178309082985, 0.03593067452311516, -0.034492556005716324, -0.0042524877935647964, -0.019819654524326324, -0.06442155689001083, 0.029880918562412262, -0.0038398453034460545, 0.019996395334601402, -0.005174674093723297, -0.019586950540542603, 0.007733872160315514, -0.02641396038234234, 0.0018523131730034947, 0.06003092974424362, -0.021443607285618782, 0.019652731716632843, 0.07851722836494446, 0.031427353620529175, 0.002464394783601165, 0.007741711568087339, -0.02655061148107052, -0.03131214529275894, -0.010500438511371613, 0.01690840907394886, 0.008391456678509712, -0.04839365556836128, 0.009087580256164074, 0.045550305396318436, 0.06994366645812988, 0.00601394847035408, 0.002125266008079052, 0.055501583963632584, 0.0771084725856781, 0.029372965916991234, 0.005446230061352253, -0.024807948619127274, 0.0161996241658926, 0.014765259809792042, 0.01365701574832201, 0.046287912875413895, -0.033975549042224884, 0.020109718665480614, -0.047608766704797745, -0.009587776847183704, 0.0038836519233882427, 0.00974216777831316, 0.030368654057383537, -0.014487357810139656, 0.0008564210729673505, -0.03113473393023014, 0.0064470767974853516, 0.007879713550209999, 0.03667376935482025, -0.01325664296746254, -0.004776928573846817, 0.0008877848158590496, -0.004823595285415649, -0.02518007531762123, 0.06307937949895859, 0.0547223724424839, -0.02548123523592949, 0.005203538108617067, 0.01681767962872982, -0.007490170653909445, 0.04878192022442818, 0.02763003669679165, 0.060193467885255814, 0.009363397024571896, 0.0351102314889431, 0.03471629321575165, 0.050476524978876114, 0.007302519865334034, 0.015549065545201302, -0.04441523551940918, 0.00647606560960412, -0.011895539239048958, -0.007022895850241184, -0.016318833455443382, 0.0026108594611287117, -0.004983691498637199, 0.009413746185600758, 0.02740546315908432, 0.006042154040187597, -0.0028934793081134558, -0.10915309190750122, 0.00668933754786849, 0.005119328387081623, -0.03111574985086918, -0.03282874822616577, 0.020264122635126114, 0.020361237227916718, 0.024027109146118164, 0.011715116910636425, -0.043428935110569, 0.019572991877794266, 0.02818131633102894, 0.0030962922610342503, 0.016134290024638176, 0.0033920644782483578, 0.014171555638313293, 0.006078291218727827, -0.03803965449333191, -0.020728401839733124, -0.025358475744724274, 0.009207947179675102, 0.02985936403274536, 0.024295300245285034, 0.011322793550789356, -0.036661166697740555, 0.07234738767147064, 0.03223045542836189, 0.024399565532803535, 0.03385268151760101, 0.03017430566251278, -0.05056564882397652, 0.026180259883403778, 0.019197847694158554, -0.009082582779228687, 0.06466285139322281, 0.021117307245731354, -0.023359430953860283, -0.02562962844967842, -0.09470248222351074, -0.05509470775723457, 0.048767395317554474, -0.0206260085105896, 0.02476096898317337, -0.010143405757844448, 0.013352076523005962, -0.03018694557249546, -0.03591972962021828, 0.06884190440177917, 0.004991193301975727, 0.018206903710961342, 0.03422461077570915, 0.06992803514003754, 0.005835727322846651, -0.02012610249221325, -0.03973272070288658, -0.028603022918105125, 0.019600646570324898, 0.012017341330647469, 0.016071738675236702, 0.06425859779119492, -0.034044258296489716, 0.014030068181455135, 0.001673889230005443, 0.02343778870999813, 0.18144026398658752, -0.021059589460492134, -0.030113643035292625, 0.030967410653829575, -0.1101364716887474, -0.04166486859321594, 0.04890712350606918, -0.025618242099881172, -0.0789712592959404, -0.02008521556854248, 0.0476154200732708, -0.013927764259278774, 0.002806885400786996, 0.02165934629738331, -0.02263081632554531, -0.03465764597058296, -0.018881650641560555, 0.052113622426986694, 0.04296441376209259, -0.010135470889508724, 0.014096044935286045, 0.033611200749874115, -0.025018785148859024, 0.007342144846916199, -0.009979824535548687, 0.055197883397340775, 0.012040055356919765, -0.018680693581700325, -0.01691579818725586, 0.003219827078282833, -0.028631437569856644, -0.006050508469343185, 0.004304663278162479, -0.02166179195046425, 0.016531534492969513, -0.021032989025115967, -0.01724628545343876, -0.011368393898010254, 0.019077200442552567, -0.0009407447651028633, -0.04734854772686958, 0.011434663087129593, 0.0008276691078208387, 0.058433856815099716, 0.012930965051054955, 0.012211665511131287, -0.021031096577644348, -0.05891888588666916, 0.028568865731358528, 0.007871218025684357, 0.034007709473371506, -0.009983798488974571, 0.006089212838560343, 0.004185925703495741, 0.0019386454951018095, 0.02513706684112549, -0.0011598338605836034, 0.004954191856086254, -0.008423959836363792, -0.012901827692985535, 0.006521073170006275, -0.03992011398077011, 0.04665016382932663, -0.006044683512300253, 0.0853244811296463, -0.01789352111518383, 0.0449800007045269, -0.03182028979063034, 0.07054264098405838, 0.0178686510771513, 0.0037655243650078773, 0.00742792384698987, -0.014853792265057564, 0.022101083770394325, -0.028535468503832817, 0.03099771775305271, 0.09223101288080215, -0.004620613530278206, 0.009264086373150349, -0.0047596534714102745, 0.019821271300315857, 0.07656778395175934, 0.02258126810193062, 0.007908839732408524]\"\n./train/dugong/n02074367_11389.JPEG,dugong,\"[0.04187963530421257, -0.02784755825996399, -0.03435322269797325, 0.010907022282481194, 0.004497974645346403, -0.051744237542152405, 0.05493674427270889, -0.01843683421611786, 0.03887369483709335, 0.015586365014314651, -0.02034982480108738, 0.012034771032631397, 0.05020212382078171, -0.007306803949177265, 0.004527280107140541, -0.004900005180388689, 0.0008341613574884832, 0.0849902480840683, 0.018893983215093613, -0.004775349982082844, -0.08396311849355698, 0.032406192272901535, 0.026371583342552185, -0.045956943184137344, -0.03648616373538971, -0.017390167340636253, -0.04369477927684784, -0.025339869782328606, 0.022951100021600723, -0.021745046600699425, 0.02588440291583538, 0.004809197038412094, 0.0032239085994660854, -0.039845626801252365, 0.012227973900735378, -0.015418225899338722, 0.02973254956305027, 0.0083860382437706, 0.02979724481701851, 0.16117770969867706, 0.003250164445489645, 0.0443195104598999, 0.0024065105244517326, 0.011903892271220684, 0.0006864806055091321, -0.05836838483810425, 0.0032225342001765966, 0.019437920302152634, 0.0059144990518689156, 0.001707262359559536, -0.027842378243803978, 0.0002961317077279091, -0.02030782401561737, -0.00932189542800188, -0.018659504130482674, 0.03245764970779419, -0.026958316564559937, -0.0026090107858181, 0.005686769727617502, -0.005443735048174858, 0.06629365682601929, -0.017759352922439575, -0.008258717134594917, 0.022516652941703796, -0.025825615972280502, -0.03169503062963486, -0.025975586846470833, 0.08612237125635147, 0.007264653220772743, 0.02019089087843895, 0.03648833930492401, -0.033707160502672195, 0.0019233491038903594, -0.021411897614598274, 0.0009154970175586641, -0.05425328016281128, 0.02249360829591751, -0.014367821626365185, 0.009006405249238014, -0.013294988311827183, 0.01974586397409439, 0.024137236177921295, -0.03835348039865494, -0.04746735095977783, 0.02870325557887554, 0.03738893195986748, 0.08641946315765381, -0.043522533029317856, -0.007818857207894325, 0.025362994521856308, 0.032616592943668365, -0.0073521374724805355, -0.6084029674530029, 0.04401464760303497, -0.025505349040031433, 0.009775240905582905, 0.058275047689676285, 0.026929592713713646, -0.054813966155052185, -0.058665141463279724, -0.045344650745391846, -0.0011504078283905983, -0.06737372279167175, -0.021091196686029434, 0.027448393404483795, 0.016686733812093735, -0.13612739741802216, 0.0027966811321675777, 0.017748963087797165, -0.0053021046333014965, 0.018863758072257042, -0.020921260118484497, -0.00997104961425066, 0.015562486834824085, 0.008098885416984558, -0.048147402703762054, 0.028787780553102493, -0.03460171818733215, 0.040222667157649994, 0.01843411475419998, -0.0028639042284339666, 0.03947876766324043, -0.022581474855542183, 0.0067296442575752735, -0.017196660861372948, 0.03791142255067825, -0.017984984442591667, 0.009701675735414028, 0.02558126114308834, -0.04783213138580322, 0.02568354643881321, 0.001010343199595809, -0.033634815365076065, 0.07595562189817429, 0.030089041218161583, 0.006794256158173084, -0.018495753407478333, -0.016175901517271996, 0.03838058188557625, -0.04856023192405701, -0.00930383987724781, -0.03932373970746994, -0.021250350400805473, 0.041013702750205994, -0.007990093901753426, -0.06292688101530075, -0.0016821841709315777, 0.04437103495001793, -0.000509285950101912, -0.021592477336525917, 0.021175241097807884, 0.01772124506533146, -0.02682945504784584, -0.028335673734545708, -0.007302526850253344, 0.0015428387559950352, -0.0006226152763701975, -0.037793826311826706, 0.01946285553276539, 0.010603804141283035, -0.011029977351427078, -0.02593284659087658, 0.0035226193722337484, 0.0192432701587677, 0.039129842072725296, -0.03999659791588783, -0.00037687894655391574, 0.011254051700234413, -0.009530412033200264, 0.023842455819249153, 0.02662140503525734, 0.04572732746601105, 0.001798543962650001, -0.00027426352608017623, -0.001087636686861515, 0.026325877755880356, -0.1220608502626419, -0.005790038034319878, -0.06715035438537598, 0.025664905086159706, 0.0852745845913887, 0.00409968476742506, 0.024759748950600624, -0.017971176654100418, -0.0013349932851269841, -0.017561692744493484, 0.017057256773114204, -0.017332641407847404, -0.06564761698246002, -0.012935238890349865, 0.002865286311134696, -0.006311201956123114, -0.002418257063254714, 0.0016379734734073281, -0.011673139408230782, -0.00960774626582861, 0.024772487580776215, 0.016066106036305428, -0.0021289540454745293, -0.01217202004045248, 0.013944975100457668, -0.012048446573317051, -0.04129644110798836, 0.06587830930948257, 0.014795086346566677, 0.026820873841643333, 0.02547135204076767, -0.029851630330085754, 0.04276964068412781, 0.04552918300032616, -0.003266955027356744, 0.02757267653942108, 0.005010257940739393, -0.02019202522933483, 0.005184641107916832, 0.040976911783218384, 0.028557073324918747, -0.016836771741509438, 0.007302963174879551, -0.04671873897314072, 0.023798907175660133, 0.06710156798362732, -0.006059391424059868, -0.014388441108167171, 0.04197090119123459, -0.020588189363479614, -0.021659845486283302, 0.03478972986340523, 0.0036870792973786592, 0.03375811502337456, -0.028815900906920433, -0.013004563748836517, 0.04480869323015213, 0.006236463785171509, 0.0017047252040356398, -0.06736227124929428, 0.04154567793011665, 0.03262769803404808, 0.007332291454076767, 0.01353488676249981, -0.009381522424519062, 0.042153116315603256, 0.010574553161859512, -0.03342453017830849, 0.03263859823346138, 0.009185693226754665, 0.0327509380877018, 0.012699276208877563, 0.006512640044093132, 0.026561064645648003, 0.0034016836434602737, 0.047158095985651016, 0.05100144445896149, -0.0005992227233946323, -0.04132296144962311, 0.05201701074838638, 0.007184585556387901, 0.026554161682724953, 0.02643931843340397, 0.0004667982866521925, 0.01925918459892273, -0.008880019187927246, -0.033025097101926804, -0.004720549564808607, 0.024933334439992905, 0.020115381106734276, 0.04270634055137634, 0.02046342007815838, 0.005043485201895237, -0.02300265058875084, -0.02534232847392559, 0.017889492213726044, -0.007049473002552986, 0.04951260983943939, 0.06596498191356659, -0.01710795983672142, -0.04333269223570824, 0.05226609855890274, 0.004261032212525606, -0.012931711040437222, 0.012071613222360611, 0.0002578301355242729, 0.004186045378446579, 0.0063806865364313126, 0.012733887881040573, -0.018076060339808464, -0.13295188546180725, -0.06470110267400742, -0.040040262043476105, -0.009839111007750034, 0.017321398481726646, 0.009803722612559795, -0.01720382645726204, 0.010480266995728016, -0.020050078630447388, -0.011640817858278751, 0.1289367377758026, 0.024473562836647034, 0.048093654215335846, 0.033227354288101196, 0.007818542420864105, -0.04835861921310425, 0.00710988650098443, -0.0034552132710814476, 0.01677033305168152, -0.010361877270042896, 0.020358970388770103, 0.05717604607343674, -0.01223301887512207, -0.0073448591865599155, -0.02259751968085766, -0.028960708528757095, 0.07587389647960663, 0.021736999973654747, 0.06065153330564499, -0.03640885651111603, 0.013914592564105988, 0.054764725267887115, -0.025476161390542984, -0.05818270146846771, 0.015180349349975586, 0.1411391794681549, -0.06597185879945755, -0.04943414777517319, 0.03898615390062332, -0.053500037640333176, 0.021168485283851624, 0.01944720558822155, -0.030745819211006165, -0.004952895455062389, 0.001492259674705565, -0.009299958124756813, 0.006371844094246626, 0.00020468074944801629, 0.010881119407713413, -0.0030905273742973804, -0.010240525007247925, 0.0008870110032148659, -0.03342161700129509, 0.01050147321075201, -0.020758867263793945, -0.0034125521779060364, -0.015187417156994343, -0.03327484056353569, 0.03135089948773384, -0.01278639119118452, -0.0473966971039772, -0.013638618402183056, 0.00352210714481771, 0.048461154103279114, 0.014767488464713097, 0.015828212723135948, 0.020539728924632072, 0.03326338157057762, 0.027235262095928192, -0.001578348339535296, 0.00983963068574667, -0.01728719286620617, 0.03239401802420616, -0.0056567108258605, 0.060894206166267395, -0.013853400014340878, -0.03176048398017883, 0.05560914799571037, -0.0580315887928009, 0.021319082006812096, 0.013582166284322739, -0.09047820419073105, -0.00695404689759016, -0.0040170312859117985, 0.036354925483465195, 0.05380583927035332, 0.043497126549482346, 0.032876089215278625, 0.05796879902482033, 0.04597175493836403, 0.09254644066095352, 0.04623245447874069, -0.09797751903533936, -0.016473714262247086, 0.034646619111299515, -0.021949373185634613, 0.0460190586745739, -0.017297592014074326, 0.02794964425265789, 0.006999312434345484, 0.0034821992740035057, -0.01901053823530674, -0.026249853894114494, -0.017070498317480087, -0.020283974707126617, -0.026541225612163544, 0.0075542195700109005, 0.016998786479234695, -0.005909384228289127, -0.04184606671333313, -0.023980887606739998, 0.00794986356049776, -0.09649211913347244, -0.07271891832351685, -0.024047905579209328, 0.028907127678394318, -0.049975890666246414, -0.048009391874074936, 0.016761252656579018, -0.008103719912469387, -0.013482600450515747, -0.044813115149736404, 0.018877966329455376, -0.06901312619447708, 0.1093556135892868, 0.009048969484865665, 0.014846579171717167, -0.008435303345322609, 0.0035313705448061228, -0.0537581741809845, 0.06172087416052818, 0.00108293816447258, -0.013184776529669762, -0.019050728529691696, 0.011619572527706623, 0.02391085959970951, 0.03093899041414261, -0.041185520589351654, 0.01713118515908718, -0.04247014597058296, -0.03568459302186966, 0.0006334821227937937, 0.00016752917144913226, -0.013782151974737644, 0.012682363390922546, -0.013449928723275661, 0.031194964423775673, -0.038297321647405624, -0.0006543259369209409, -0.03560522571206093, -0.0010694676311686635, 0.012799691408872604, 0.0026768518146127462, -0.004958688747137785, -0.03158325329422951, 0.041890110820531845, -0.019010087475180626, 0.010132504627108574, -0.03628634288907051, 0.019395790994167328, 0.01904766820371151, -0.03574472665786743, -0.032741472125053406, 0.05745191127061844, -0.011771151795983315, -0.018653985112905502, 0.008069606497883797, -0.06893066316843033, 0.039822593331336975, -0.03477445989847183, 0.06582573801279068, -0.0034020671155303717, 0.04783123359084129, -0.007097576279193163, 0.07772661745548248, 0.004932286683470011, 0.01939203031361103, -0.00962606631219387, -0.007775331847369671, 0.0062805842608213425, 0.001402663765475154, 0.008452353999018669, -0.02119121514260769, -0.020961841568350792, -0.0006211450090631843, -0.016174567863345146, 0.03561578691005707, -0.03986778110265732, 0.012754225172102451, -0.04442431405186653, -0.06437414884567261, -0.046677373349666595, -0.012565641663968563, -0.016696950420737267, 0.024177031591534615, -0.015776876360177994, -0.04857983440160751, -0.02794402465224266, 0.00026660607545636594, 0.0009405695600435138, -0.03433198481798172, -0.0013551580486819148, -0.05019700899720192, 0.025371264666318893, -0.0056916289031505585, -0.004538343288004398, 0.03508654609322548, -0.05517946183681488, 0.0034507550299167633, -0.017240656539797783, 0.015856938436627388, 0.019484784454107285, -0.0020880347583442926, -0.027161015197634697, -0.006873970851302147, 0.02223101258277893, -0.04640699177980423, -0.009574509225785732, 0.0025398433208465576, -0.04774671420454979, -0.021505624055862427, 0.014999534003436565, 0.017235083505511284, 0.04217977821826935, -0.000576150487177074, -0.002612772397696972]\"\n./train/dugong/n02074367_6343.JPEG,dugong,\"[0.01506405882537365, -0.033886492252349854, 0.000528908334672451, 0.012121462263166904, 0.036893319338560104, -0.06187145784497261, 0.016536511480808258, -0.036139264702796936, 0.0647759735584259, 0.0015493768732994795, -0.01947718858718872, 0.019102582708001137, 0.06596162170171738, -0.0012969525996595621, -0.011985288932919502, -0.009964018128812313, 0.04065140336751938, 0.050764329731464386, 0.003166683716699481, 0.06443935632705688, -0.13761983811855316, 0.01600320264697075, 0.036707695573568344, -0.035157639533281326, -0.027510540559887886, 0.004156790673732758, 0.013620156794786453, -0.012054813094437122, 0.027675403282046318, -0.02227005921304226, 0.026188666000962257, 0.021050160750746727, 0.0008094289223663509, -0.002376890042796731, -0.04372897371649742, -0.005180062260478735, -0.017120588570833206, 0.006572397891432047, -0.006782484240829945, 0.1353444904088974, -0.04540453851222992, 0.00042265281081199646, -0.008845638483762741, 0.018820226192474365, 0.016840601339936256, -0.007613164372742176, 0.01883048377931118, 0.050959136337041855, 0.004054076969623566, -0.018353015184402466, -0.03584069013595581, 0.026922687888145447, -0.0011999333510175347, 0.007927974686026573, -0.009861632250249386, 0.019685430452227592, -0.06924334168434143, 0.03253726661205292, -0.007788758724927902, -0.022642213851213455, 0.06855693459510803, 0.010183705948293209, -0.028446203097701073, -0.05677567049860954, -0.026193901896476746, -0.054030194878578186, 0.010529736988246441, 0.058011870831251144, 0.02573704905807972, 0.013868603855371475, 0.044789914041757584, -0.05225183069705963, -0.023923657834529877, -0.014826551079750061, -0.002016301266849041, 0.007087054196745157, -0.013747659511864185, -0.06276573240756989, 0.040773533284664154, 0.014816147275269032, -0.008199765346944332, 0.02112008072435856, -0.00637296587228775, -0.08944857865571976, 0.06520672142505646, 0.027508968487381935, 0.09257025271654129, -0.014566524885594845, -0.028734814375638962, 0.006348140072077513, 0.0072690630331635475, -0.011349418200552464, -0.6686784029006958, 0.022632310166954994, -0.01290903054177761, -0.01416981965303421, 0.03607490286231041, -0.012165839783847332, -0.07130913436412811, -0.02188977412879467, -0.015728630125522614, -0.0221926998347044, -0.06759363412857056, -0.021345920860767365, 0.02791082113981247, 0.030557170510292053, -0.08723204582929611, -0.03393237665295601, -0.006780421826988459, -0.013184839859604836, 0.02629127725958824, -0.02648135833442211, 0.03192527964711189, -0.02719196490943432, 0.0010324164759367704, 0.002253131940960884, -0.0057969242334365845, -0.026178142055869102, 0.023592792451381683, 0.029194189235568047, 0.0035860142670571804, 0.022006606683135033, 0.03001021035015583, -0.007139159832149744, -0.02710837498307228, 0.0020057575311511755, -0.0462171696126461, -0.005190735217183828, 0.04697616770863533, -0.033743470907211304, 0.04095632582902908, 0.02977144345641136, -0.005159568972885609, 0.08254280686378479, -0.02545228600502014, 0.019214967265725136, 0.006368218455463648, -0.0047348178923130035, 0.0008322428911924362, -0.032847948372364044, 0.026263024657964706, -0.045298777520656586, -0.015814321115612984, 0.015224461443722248, -0.020478608086705208, 0.03601815924048424, -0.0008079977123998106, 0.0769256204366684, -0.02436659298837185, -0.010598432272672653, 0.0446702316403389, -0.019483666867017746, -0.023765072226524353, -0.020797714591026306, -0.018821867182850838, 0.03307656943798065, -0.0019691663328558207, -0.0203657578676939, -0.006784175988286734, 0.03071078658103943, -0.004885950591415167, -0.02364366315305233, -0.030803633853793144, -0.028075607493519783, 0.06775685399770737, 0.011069388128817081, -0.07236147671937943, -0.038124728947877884, 0.027629781514406204, 0.03720494359731674, -0.02635352872312069, 0.016882456839084625, 0.016058364883065224, 0.018700437620282173, -0.021546563133597374, 0.016972005367279053, -0.0314737893640995, 0.015124107711017132, -0.010608218610286713, 0.0502706803381443, 0.01925840973854065, -0.00472846906632185, 0.0008183337631635368, -0.021623719483613968, 0.009174304082989693, -0.007957995869219303, -0.0065046651288867, -0.02052583359181881, -0.015405668877065182, 0.006319496314972639, 0.009036874398589134, -0.0015967460349202156, 0.01988130994141102, -0.010288374498486519, 0.020634179934859276, 0.004352307878434658, 0.016691869124770164, -0.014569345861673355, -0.05485374107956886, -0.022303789854049683, 0.034280359745025635, 0.0004928685957565904, -0.03127654641866684, 0.04598315805196762, -0.0062043028883636, 0.007751096971333027, 0.016245173290371895, -0.03644058480858803, 0.009384972974658012, -0.015137477777898312, 0.024864278733730316, 0.07803858816623688, 0.018962783738970757, 0.017632875591516495, 0.010487725026905537, 0.026926793158054352, -0.023821106180548668, -0.005072391126304865, 0.046660758554935455, -0.0019944391679018736, 0.0585949569940567, -0.01550676953047514, 0.025977207347750664, -0.0011136491084471345, 0.026676122099161148, -0.018229825422167778, 0.025737294927239418, -0.008940771222114563, 0.028034230694174767, 0.02842647023499012, 0.012610887177288532, -0.006814038380980492, 0.0037758543621748686, 0.04838672652840614, 0.025048421695828438, -0.04109449312090874, 0.022276919335126877, 0.017744041979312897, -0.0005722327041439712, 0.01434603612869978, 0.03273041918873787, 0.03781288117170334, 0.04613029584288597, 0.004660831298679113, 0.028572436422109604, 0.011326353065669537, -0.021394647657871246, 0.035512104630470276, -0.01854122430086136, 0.039891887456178665, 0.028193138539791107, 0.04210875928401947, 0.03369741886854172, -0.006585337221622467, -0.014812852256000042, 0.04218657314777374, -0.017043784260749817, 0.018450962379574776, 0.0887310653924942, -0.012820142321288586, 0.021975480020046234, -0.010867176577448845, -0.01466529630124569, -0.010230205953121185, 0.013385449536144733, 0.039844900369644165, 0.01297182310372591, -0.016662457957863808, 0.03164754435420036, -0.040055934339761734, 0.0020527199376374483, -0.012106399051845074, 0.006990851368755102, 0.05378572642803192, 0.0611514188349247, -0.008546636439859867, -0.0019643553532660007, 0.04318642243742943, -0.006601148284971714, -0.015274601988494396, -0.003179923165589571, -0.011541206389665604, -0.00852729007601738, -0.013466345146298409, -0.013664904050529003, -0.015437284484505653, -0.09785070270299911, -0.026032626628875732, -0.017963990569114685, 0.02630305476486683, 0.017003081738948822, 0.012265929952263832, -0.009070325642824173, -0.012226584367454052, 0.01981944777071476, 0.03257278352975845, 0.10159792006015778, 0.02000012993812561, 0.02917008474469185, 0.028009600937366486, 0.026738213375210762, -0.03828059136867523, 0.028883755207061768, 0.017291584983468056, 0.007635348476469517, -0.020748384296894073, 0.027668971568346024, 0.015378132462501526, 0.03198201209306717, 0.003867398714646697, 0.0013276402605697513, -0.03831891342997551, 0.08252542465925217, 0.025556156411767006, 0.03931412845849991, 0.0009539513848721981, 0.04427999258041382, 0.07177093625068665, -0.005614896304905415, -0.06261252611875534, 0.004346612840890884, 0.0988590270280838, -0.002394914161413908, -0.026918649673461914, 0.01528471801429987, -0.06377752125263214, -0.018589908257126808, 0.0172212366014719, -0.018732482567429543, 0.020947864279150963, -0.018144698813557625, -0.004044719040393829, 0.0216539204120636, -0.032803017646074295, -0.008693191222846508, 0.015653247013688087, -0.0414612777531147, -0.0033734317403286695, -0.019713232293725014, -0.014721943996846676, -0.01746845431625843, 0.01107525173574686, 0.005435445345938206, -0.0330614410340786, 0.009031428024172783, -0.010245735757052898, -0.0007648334722034633, 0.016083501279354095, 0.04067443683743477, 0.03945988044142723, 0.01584574766457081, 0.00969638116657734, 0.04928809031844139, 0.005274681374430656, 0.0037189943250268698, 0.023779142647981644, -0.010666660033166409, -0.025782231241464615, 0.004525734577327967, -0.010564946569502354, 0.07407412678003311, -0.011173688806593418, 0.00995947141200304, -0.014949562028050423, -0.1420525312423706, 0.021646231412887573, 0.022496724501252174, -0.08437363803386688, -0.0497589074075222, -0.009621649980545044, 0.01647108979523182, 0.06821879744529724, 0.015117840841412544, 0.03597003221511841, 0.01176421158015728, 0.02206583507359028, 0.051947031170129776, 0.030432000756263733, -0.07360324263572693, -0.01651747338473797, 0.059667620807886124, -0.0053519755601882935, 0.01920768804848194, 0.02378036640584469, -0.00863425899296999, 0.026489417999982834, -0.01313230860978365, -0.039848633110523224, 0.026225799694657326, -0.06868013739585876, -0.0015177599852904677, -0.03790876269340515, 0.04052669182419777, -0.029705209657549858, -0.004305860958993435, -0.0278293639421463, -0.0019320623250678182, -0.03162539750337601, -0.09608449041843414, -0.03538517653942108, -0.016762185841798782, 0.008008483797311783, 0.01138670276850462, -0.024207349866628647, -0.020671246573328972, -0.041176557540893555, 0.010203921236097813, -0.022209133952856064, 0.013758780434727669, -0.06472792476415634, 0.05852128937840462, 0.0067892842926084995, -0.02343546785414219, 0.016433745622634888, 0.008745916187763214, -0.02020982839167118, 0.0420413538813591, -0.008402579464018345, -0.01340040098875761, -0.03937654569745064, -0.0008050196338444948, -0.01095578633248806, 0.0015065877232700586, -0.020023997873067856, -0.022091824561357498, -0.01624310202896595, -0.04819032922387123, 0.004166198428720236, -0.0042655435390770435, -0.0289621502161026, 0.03384017571806908, -0.000620304374024272, 0.03458945080637932, -0.022580213844776154, 0.009474118240177631, -0.012584910728037357, 0.02835020236670971, 0.029917292296886444, 0.0027544868644326925, -0.04946235194802284, -0.033925753086805344, 0.051302120089530945, -0.030867496505379677, 0.003951546270400286, -0.02135941945016384, -0.00029802985955029726, 0.0015383497811853886, -0.028565341606736183, -0.03620942309498787, 0.018688710406422615, -0.0029219244606792927, -0.02372082509100437, 0.02241886593401432, 1.875776615634095e-05, 0.0297116469591856, -0.0028359703719615936, 0.0214989073574543, -0.014438844285905361, 0.009973593056201935, -0.020204491913318634, 0.08354096859693527, 0.02802003175020218, 0.02560051903128624, 0.022113025188446045, -0.021387511864304543, 0.014814711175858974, 0.032879721373319626, 0.01024769339710474, 0.0312851220369339, -0.015128295868635178, 0.028681736439466476, -0.03483866527676582, 0.030339570716023445, -0.0037290439940989017, 0.008498120121657848, -0.02991308644413948, -0.04261617362499237, -0.024746622890233994, 0.0032213053200393915, -0.017093122005462646, -0.0015333573101088405, 0.0014076657826080918, 0.02007192000746727, -0.025968115776777267, -0.004178686998784542, 0.008448481559753418, -0.022632263600826263, 0.010116307064890862, -0.013930569402873516, 0.0370376780629158, -0.048421747982501984, 0.001635274151340127, 0.016231337562203407, -0.039601873606443405, -7.594258931931108e-05, -0.018823808059096336, -0.017432844266295433, 0.014685534872114658, 0.019774412736296654, -0.0444491021335125, 0.006353823468089104, 0.03894561901688576, -0.035083964467048645, 0.02588197961449623, 0.014959987252950668, -0.069910429418087, 0.0004117760981898755, 0.014510431326925755, -0.010933308862149715, 0.07284467667341232, 0.011955232359468937, 0.002527352888137102]\"\n./train/dugong/n02074367_11823.JPEG,dugong,\"[0.01680789701640606, -0.039930570870637894, 0.0005551370559260249, -0.0029791519045829773, -0.005976652726531029, -0.025581859052181244, 0.039540618658065796, -0.0015961498720571399, 0.017730489373207092, 0.01753830909729004, -0.025037245824933052, -0.03626348450779915, 0.049444444477558136, 0.02896924875676632, -0.007230881601572037, -0.027457373216748238, -0.007426478434354067, 0.038529831916093826, 0.007832560688257217, 0.03900892660021782, -0.07398829609155655, 0.0379386804997921, 0.019318440929055214, -0.022012079134583473, -0.0575355589389801, 0.008779173716902733, -0.010619313456118107, 0.0026110494509339333, 0.012567717581987381, -0.004634080920368433, 0.019442958757281303, 0.015870537608861923, -0.004784690216183662, 0.012522183358669281, -0.012629708275198936, 0.011089484207332134, -0.01805119775235653, 0.04120221734046936, -0.005603713449090719, 0.138532817363739, -0.04927489534020424, -0.008389955386519432, 0.014994241297245026, 0.007082644384354353, 0.01443648524582386, -0.0207150150090456, 0.022801965475082397, 0.04905703663825989, 0.0024540373124182224, -0.025355635210871696, -0.006872254423797131, 0.020235728472471237, 0.004344843793660402, 0.013275070115923882, -0.02373027242720127, 0.058443691581487656, -0.057251401245594025, 0.026014473289251328, -0.021821409463882446, -0.047420743852853775, 0.10781309008598328, -0.0012410628842189908, -0.008093388751149178, -0.040517766028642654, -0.06445067375898361, -0.016519447788596153, 0.00603761151432991, 0.0627838671207428, 0.022943247109651566, -0.0013826725771650672, 0.02751757763326168, -0.05706610903143883, -0.02193828672170639, -0.04140419885516167, 0.007255985401570797, -0.021494384855031967, 0.004216286353766918, -0.05529696121811867, 0.022307921200990677, -0.012939720414578915, 0.04065169766545296, 0.03264133259654045, -0.025232283398509026, -0.02004793845117092, 0.036589693278074265, 0.03596106916666031, 0.09564607590436935, -0.039314739406108856, -0.019175445660948753, 0.008935514837503433, 0.027689339593052864, 0.00815307442098856, -0.6562022566795349, 0.014057135209441185, -0.02378867007791996, 0.01741674356162548, 0.04235843941569328, -0.02096613310277462, -0.05500592291355133, -0.036122195422649384, -0.009710467420518398, -0.02721589244902134, -0.06466573476791382, -0.009775725193321705, 0.027491575106978416, 0.008114946074783802, -0.0126419086009264, -0.028764374554157257, -0.02488558180630207, -0.004302621819078922, -0.005497501697391272, -0.031191036105155945, 0.006975341588258743, -0.038555409759283066, -0.02610865980386734, -0.02143784426152706, 0.0042534456588327885, -0.027908239513635635, 0.03515271469950676, 0.009293712675571442, 0.03132474049925804, 0.03187446668744087, -0.01104640495032072, -0.004700202029198408, -0.016311464831233025, -0.007489372044801712, -0.049449946731328964, 0.02246391959488392, 0.0054812366142869, -0.01543806679546833, 0.02770685777068138, 0.01589016430079937, 0.003002424957230687, 0.08407746255397797, -0.0128079354763031, 0.03405135124921799, -0.020570669323205948, -0.05372627452015877, -0.019024474546313286, -0.03944500908255577, 0.0021360930986702442, -0.03874872252345085, -0.027289656922221184, 0.04425254836678505, -0.016799001023173332, 0.006657476536929607, -0.015388024970889091, 0.043183598667383194, 0.0020397475454956293, -0.018549801781773567, 0.020165495574474335, -0.010620418936014175, -0.044540174305438995, -0.041328683495521545, -0.010792028158903122, 0.0018218092154711485, 0.0015396662056446075, -0.03826671466231346, -0.023526707664132118, 0.03339584171772003, 0.003738266881555319, -0.03561745211482048, -0.016330206766724586, 0.00630038371309638, 0.030047805979847908, -0.026409512385725975, -0.01940849795937538, -0.008969939313828945, 0.03457989543676376, 0.03324536234140396, 0.016261190176010132, 0.016375066712498665, 0.010265585035085678, -0.002227233489975333, 0.00450223358348012, 0.015729976817965508, -0.11966578662395477, 0.008869465440511703, -0.031138258054852486, 0.029261238873004913, 0.025385256856679916, -0.033529166132211685, -0.002277245046570897, 0.00711031723767519, -0.020643915981054306, -0.02223476581275463, 0.009030602872371674, -0.013719563372433186, -0.013112052343785763, 0.0321488119661808, 0.025208672508597374, -0.032788898795843124, 0.021439213305711746, 0.013650992885231972, 0.010376013815402985, -0.009174344129860401, 0.02216080017387867, -0.024153264239430428, -0.059432972222566605, -0.003276645205914974, 0.04956391826272011, -0.033459607511758804, 0.0036952451337128878, 0.061245713382959366, 0.030745163559913635, 0.03304127976298332, 0.03888075053691864, -0.042250022292137146, 0.018542055040597916, 0.02489725686609745, 0.051432810723781586, 0.07062947750091553, 0.0066129243932664394, 0.017595199868083, 0.027590041980147362, 0.023865386843681335, -0.00942899938672781, 0.003109597135335207, 0.03035850077867508, -3.45783555530943e-05, 0.05986327305436134, -0.00476960651576519, 0.005444509908556938, -0.013622197322547436, 0.010277601890265942, 0.004317141603678465, 0.017873117700219154, 0.030686574056744576, 0.01375648844987154, 0.023287424817681313, 0.0058517553843557835, 0.005646106321364641, 0.045704085379838943, 0.03417767211794853, 0.023136168718338013, -0.006721783429384232, 0.017161622643470764, 0.02168036252260208, 0.00875786691904068, 0.03148525208234787, 0.03403794765472412, 0.05348726361989975, 0.062038030475378036, -0.010986105538904667, 0.009670673869550228, 0.026832638308405876, 0.0034214474726468325, 0.034207891672849655, 0.0014518651878461242, 0.022080207243561745, 0.01585416868329048, 0.04598725214600563, 0.04047812148928642, -0.011506241746246815, -0.007165465969592333, 0.05906152352690697, -0.0484059602022171, 0.020652467384934425, 0.05548270791769028, 0.057967543601989746, 0.04570214822888374, -0.036738138645887375, -0.014245512895286083, -0.010070218704640865, 0.03178369998931885, 0.022573281079530716, 0.0333184115588665, -0.036495059728622437, 0.02383136749267578, -0.038684457540512085, -0.003064917866140604, -0.004905821289867163, -0.015870442613959312, 0.03572232276201248, 0.0641956627368927, -0.026903249323368073, -0.030594194307923317, 0.04021495208144188, 0.010514643974602222, -0.00196646386757493, 0.020347293466329575, -0.026249781250953674, 0.002923611318692565, -0.022322967648506165, -0.0007708027842454612, 0.016839416697621346, -0.09263619035482407, -0.06832766532897949, -0.04686727747321129, 0.010110900737345219, 0.017958668991923332, 0.002598648890852928, 0.008487953804433346, -0.014006474055349827, -0.009476689621806145, 0.008288118056952953, 0.07643898576498032, -0.009969614446163177, -0.0048829419538378716, 0.008268226869404316, 0.046370457857847214, -0.04225638881325722, 0.0012040826259180903, 0.015978796407580376, 0.021241415292024612, -0.0023258798755705357, -0.007911184802651405, 0.03772039711475372, 0.02777530439198017, -0.02681959606707096, -0.008614183403551579, -0.0020661617163568735, 0.08392951637506485, 0.034946851432323456, 0.030450230464339256, 0.0016819280572235584, 0.012688074260950089, 0.06319628655910492, -0.027326710522174835, -0.025521589443087578, 0.010061328299343586, 0.16856975853443146, -0.022784866392612457, -0.009839235804975033, -0.013145600445568562, -0.0707382932305336, -0.011300664395093918, -0.006161742378026247, -0.03232536092400551, 0.028642963618040085, -0.0169728621840477, 0.006444073282182217, 0.007584386970847845, -0.027579905465245247, 0.00018019007984548807, 0.030456623062491417, -0.03860698640346527, 0.01714477501809597, -0.0428750216960907, -0.027486372739076614, -0.024495938792824745, -0.0044001806527376175, 0.012061169371008873, -0.01758745312690735, -0.012760540470480919, -0.017613818868994713, -0.008754799142479897, 0.004342427011579275, 0.03716094419360161, 0.03042922355234623, -0.027157878503203392, 0.02396756410598755, 0.028313057497143745, -0.023512333631515503, -0.013113298453390598, 0.035712819546461105, 0.03135376051068306, 0.036825332790613174, -0.012318759225308895, 0.03382829576730728, 0.07378149777650833, -0.03448006138205528, -0.006779983174055815, 0.029911840334534645, -0.011259018443524837, 0.018510673195123672, 0.0019242333946749568, -0.08283349871635437, -0.05985347181558609, -0.008532468229532242, 0.05360674858093262, 0.05330723151564598, 0.043524451553821564, 0.03876056522130966, 0.04071067273616791, 0.015750853344798088, 0.06360503286123276, 0.03621345013380051, -0.13169755041599274, -0.01846102811396122, 0.06176574528217316, -0.0381850004196167, 0.039281293749809265, 0.03426506742835045, 0.013878002762794495, 0.021749448031187057, -0.003855125280097127, -0.03674096241593361, -0.016463708132505417, -0.026017051190137863, 0.02682710438966751, -0.06050427258014679, 0.06159991770982742, -0.029174020513892174, -0.00165608711540699, -0.02430342137813568, -0.03250148519873619, -0.0011755786836147308, -0.09527941048145294, -0.03585842624306679, -0.04253390058875084, -0.013982561416924, 0.00877782516181469, -0.029982756823301315, -0.0022291194181889296, -0.03260689973831177, 0.013078552670776844, -0.030819809064269066, 0.01955331303179264, -0.07084526866674423, 0.06987105309963226, -0.00040995035669766366, -0.014907659962773323, 0.013260622508823872, -0.019219184294342995, -0.0579359345138073, 0.060950446873903275, 0.008854919113218784, -0.014356994070112705, -0.040628161281347275, 0.009603295475244522, -0.013999911025166512, 0.032809823751449585, -0.041022758930921555, -0.033867355436086655, -0.00060767907416448, -0.01734369993209839, 0.007818270474672318, 0.09344249963760376, -0.0033103032037615776, 0.011281331069767475, 0.013694616965949535, 0.0006333891651593149, -0.0028881377074867487, -0.02432090789079666, 0.0070868427865207195, 0.03354903310537338, 0.011979217641055584, 0.003992704674601555, -0.027796607464551926, -0.023147640749812126, 0.050573788583278656, -0.010938082821667194, 0.012987760826945305, -0.019953347742557526, 0.012910994701087475, -0.0008635318954475224, -0.026900144293904305, -0.0640803650021553, 0.015079811215400696, -0.024234341457486153, -0.06606008112430573, 0.024969108402729034, -0.0002554974635131657, 0.027151597663760185, -0.0034682496916502714, 0.02022349275648594, -0.006541742477566004, 0.0009463499300181866, -0.013393345288932323, 0.050512876361608505, 0.03455095365643501, 0.028697211295366287, -0.010553586296737194, -0.034474536776542664, 0.03142683207988739, 0.02796170487999916, 0.015100066550076008, -0.006786168087273836, -0.02625715732574463, -0.008665063418447971, -0.03309549018740654, 0.007885398343205452, -0.0491512268781662, 0.007973428815603256, -0.029892995953559875, -0.03528319671750069, -0.01202689204365015, 0.03985198587179184, -0.04427254572510719, -0.0174452755600214, -0.009451610967516899, -0.022366082295775414, -0.015190844424068928, -0.02189878188073635, -0.014750289730727673, -0.015274522826075554, -0.019742105156183243, -0.04481922462582588, 0.014551146887242794, -0.01146834809333086, -0.005978591740131378, 0.0033774971961975098, -0.04800480604171753, 0.019551310688257217, -0.029830005019903183, 0.00883132591843605, 0.029188092797994614, 0.0007549509755335748, -0.018821435049176216, -0.031513944268226624, 0.019312037155032158, -0.025032589212059975, -0.006404435727745295, 0.0425427071750164, -0.06335669755935669, 0.003315103705972433, 0.01579863764345646, 0.015926439315080643, 0.009068632498383522, 0.02293263003230095, 0.006966236978769302]\"\n./train/dugong/n02074367_15261.JPEG,dugong,\"[0.0207271259278059, -0.015942184254527092, 0.009717571549117565, 0.0023249355144798756, -0.010859997011721134, -0.014937746338546276, 0.0357091948390007, 0.012473471462726593, 0.036426085978746414, 0.03215797618031502, -0.02557162195444107, -0.009165411815047264, 0.04899916052818298, 0.018861932680010796, -0.030740221962332726, -0.04326245188713074, 0.01026064157485962, 0.059911154210567474, -0.025202404707670212, -0.005498099140822887, -0.114258773624897, 0.014883162453770638, -0.024047095328569412, -0.003759225131943822, -0.033452462404966354, 0.02161279134452343, -0.03427853807806969, -0.013018820434808731, 0.019658301025629044, 0.005754409357905388, 0.035030800849199295, 0.0031476549338549376, -0.018771955743432045, 0.006920020096004009, 0.017560100182890892, 0.015630949288606644, -0.004225292708724737, 0.027821741998195648, 0.0030058356933295727, 0.22200024127960205, -0.012089740484952927, -0.002549129771068692, -0.003028460778295994, 0.015319827944040298, -0.03271561861038208, 0.023456906899809837, 0.046784549951553345, 0.04349932819604874, -0.009655104950070381, -0.011965611018240452, -0.06078086048364639, 0.013141836039721966, -0.041045092046260834, -0.01139482855796814, -0.006091523915529251, 0.034399714320898056, -0.08135688304901123, -0.0016931424615904689, -0.025505397468805313, -0.025926902890205383, 0.0964885950088501, 0.00691514927893877, -0.00849267840385437, -0.01767631620168686, -0.03944285213947296, 0.0033678999170660973, -0.02888990193605423, 0.12126483023166656, 0.04936645179986954, -0.006456123664975166, 0.055373772978782654, -0.0770535096526146, -0.006720623001456261, -0.042287811636924744, -0.0047359773889184, -0.022823458537459373, -0.014808105304837227, -0.008158457465469837, 0.021227989345788956, -0.024812065064907074, 0.005982446018606424, 0.041977111250162125, -0.04594886302947998, -0.019385244697332382, 0.04058437421917915, 0.03261938691139221, 0.06276703625917435, -0.03614291548728943, 6.777151429560035e-05, 0.008927153423428535, 0.026851441711187363, -0.007413063198328018, -0.6051619052886963, 0.0019400472519919276, -0.02629963308572769, 0.008674527518451214, 0.022601418197155, -0.03775510564446449, -0.0561290979385376, -0.04071555286645889, 0.011773498728871346, -0.009132510982453823, -0.06484291702508926, 0.010116003453731537, 0.011480689980089664, 0.024406930431723595, -0.05326012521982193, -0.03906913474202156, 0.0019084566738456488, -0.011900858953595161, -0.01466037891805172, -0.03957387059926987, 0.004174572881311178, -0.029185663908720016, -0.0218970887362957, -0.040768738836050034, 0.021932391449809074, -0.04047362133860588, 0.016705231741070747, 0.00635779183357954, 0.03590280935168266, 0.040007103234529495, -0.00799649115651846, 0.012023527175188065, -0.04067334905266762, 0.023757273331284523, -0.02502843737602234, 0.05269623547792435, 0.04523371160030365, -0.002644612453877926, 0.02233288064599037, -0.03215831518173218, -0.03484748676419258, 0.08360716700553894, -0.03059699758887291, 0.03880865499377251, -0.050951696932315826, -0.04753952473402023, -0.0004985951236449182, -0.03380622714757919, -0.007255973294377327, -0.03316254913806915, -0.024692310020327568, 0.01704910397529602, 0.00020822045917157084, 0.007159342058002949, -0.041012778878211975, 0.014063959941267967, -0.02831483818590641, 0.017198631539940834, 0.005282487720251083, 0.010410203598439693, -0.03012239746749401, -0.020290199667215347, -0.0024375433567911386, 0.00789127591997385, 0.012729478068649769, -0.051876138895750046, 0.00917600467801094, 0.03223424777388573, 0.0028478228487074375, -0.04357464611530304, -0.01859470270574093, 0.010419723577797413, -0.0018590338295325637, -0.03240155801177025, -0.014066708274185658, 0.013669599778950214, 0.0397430844604969, 0.03190760314464569, 0.008854233659803867, 0.03684963658452034, 0.017695920541882515, -0.01556339394301176, 0.014931529760360718, 0.00969855859875679, -0.14462077617645264, -0.011169258505105972, -0.02139214240014553, 0.035170797258615494, 0.02133074589073658, -0.05254991352558136, 0.005578592419624329, -0.0057190484367311, 0.00669100834056735, 0.0027943241875618696, 0.01416291669011116, -0.02362689934670925, -0.03074103407561779, 0.009838223457336426, 0.03039637953042984, -0.058766696602106094, 0.0006674905307590961, -0.003935670014470816, 0.049683962017297745, 0.016886219382286072, 0.02878149226307869, 0.01705208420753479, -0.04400000348687172, 0.017166391015052795, 0.014032295905053616, -0.025830939412117004, -0.0309133417904377, 0.05270368978381157, 0.02740798331797123, 0.038550473749637604, 0.037614718079566956, -0.05338862165808678, -0.017610713839530945, 0.025012340396642685, 0.04032459855079651, 0.033633142709732056, 0.008317583240568638, 0.019673064351081848, 0.025512224063277245, 0.04303552210330963, -0.01820862479507923, -0.0006662841187790036, 0.004921148996800184, -0.008632952347397804, 0.05771874263882637, 0.03606075793504715, -0.001576894661411643, -0.04928091913461685, 0.012296071276068687, 0.0025177288334816694, 0.004698184784501791, 0.04328807815909386, 0.006083591375499964, 0.024347279220819473, -0.01602621003985405, -0.017907215282320976, 0.005103456787765026, 0.03753422573208809, 0.021137673407793045, -0.06636615842580795, 0.03433326259255409, -0.002106868661940098, 0.001984951552003622, 0.0004775706329382956, 0.03646519035100937, 0.04888876900076866, 0.03500620275735855, -0.01997275836765766, -0.004115220159292221, 0.04910445585846901, 0.021150115877389908, 0.017255164682865143, 0.0006885247421450913, 0.05219502002000809, 0.027211396023631096, 0.05146293714642525, 0.0368712954223156, -0.02207910269498825, -0.021820668131113052, 0.048192866146564484, -0.016432417556643486, 0.029531197622418404, 0.047279998660087585, 0.05127998813986778, 0.00958287063986063, -0.0308099202811718, -0.04734475910663605, -0.021290775388479233, 0.007613194175064564, 0.013183746486902237, 0.03818776085972786, -0.00852843839675188, 0.007415648549795151, -0.020848719403147697, -0.022880274802446365, -0.021738877519965172, -0.004270258825272322, 0.05516086891293526, 0.06513962149620056, -0.03894422575831413, -0.03808660805225372, 0.014963273890316486, -0.004913125652819872, 0.017775464802980423, 0.008524728938937187, -0.012481633573770523, -0.012787684798240662, -0.006449989974498749, 0.009985401295125484, 0.012003027833998203, -0.09265150129795074, -0.05039030686020851, -0.027235981076955795, 0.0016814033733680844, 0.0033403001725673676, 0.020010776817798615, 0.029268912971019745, 0.0022303981240838766, -0.023274892941117287, 0.020997019484639168, 0.06004989892244339, 0.0016603529220446944, 0.06717279553413391, -0.009347466751933098, 7.5131979428988416e-06, -0.04731175675988197, 0.006062842905521393, 0.019396070390939713, -0.0018131585093215108, 0.0013812052784487605, 0.021984485909342766, 0.04362524300813675, 0.03814753144979477, -0.03409946337342262, 0.001639614230953157, 0.00016133331519085914, 0.08346594125032425, 0.015334993600845337, 0.056384067982435226, 0.01535522285848856, 0.004664862062782049, 0.032563671469688416, -0.020848872140049934, -0.02303379401564598, -0.009779703803360462, 0.14078395068645477, -0.05646822229027748, -0.016635190695524216, 0.01687975414097309, -0.07478882372379303, -0.029758621007204056, 0.007870721630752087, -0.003769038477912545, 9.208298433804885e-05, 0.0180527213960886, 0.013274768367409706, 0.010579729452729225, 0.0019136418122798204, -0.006344400811940432, -0.006673014257103205, -0.06318267434835434, 0.008457571268081665, -0.05631330981850624, -0.01700577139854431, -0.013061643578112125, -0.018258363008499146, 0.02153993584215641, -0.014433715492486954, 0.015608700923621655, -0.02045438066124916, -0.010484724305570126, 0.007231494877487421, 0.035461701452732086, 0.022504378110170364, 0.005355764180421829, 0.029053466394543648, -0.0036754265893250704, -0.005990064237266779, 0.005759282503277063, -0.011526526883244514, 0.03653582185506821, 0.01619698293507099, -0.006519355345517397, 0.017177565023303032, 0.0740542858839035, -0.030489766970276833, -0.04350850358605385, -0.00936140213161707, -0.03283102065324783, 0.0037631250452250242, -0.010254914872348309, -0.11447303742170334, -0.03897601738572121, 0.015429295599460602, 0.03523976355791092, 0.02928379736840725, 0.01638026162981987, 0.030433356761932373, 0.03142436593770981, 0.049254968762397766, 0.11000113189220428, 0.04525437578558922, -0.08406030386686325, -0.006476254668086767, 0.0570707805454731, -0.052644360810518265, 0.05353537201881409, -0.0021658064797520638, -0.01738005317747593, 0.03463985025882721, 0.0087467385455966, -0.04737138748168945, -0.020304491743445396, -0.08391320705413818, 0.0018413958605378866, -0.027291791513562202, 0.010011994279921055, -0.008484955877065659, 0.008150791749358177, -0.017193056643009186, -0.0305210892111063, 0.02014121226966381, -0.11248704046010971, -0.027931107208132744, -0.019812993705272675, -0.024427955970168114, -0.018361814320087433, -0.007646034937351942, 0.008514804765582085, -0.04924755170941353, 0.007794591132551432, -0.020684024319052696, 0.001028892700560391, -0.040838152170181274, 0.08701682835817337, -0.010342152789235115, 0.005983363837003708, -0.0010304893366992474, -0.022115558385849, -0.07938217371702194, 0.057470180094242096, 0.004881791304796934, 0.020432567223906517, -0.010946792550384998, -0.015467816963791847, -0.020662009716033936, 0.06889661401510239, -0.04577108100056648, -0.008761418052017689, -0.022586245089769363, -0.007988945581018925, 0.009876718744635582, 0.07271647453308105, -0.011128737591207027, 0.02022235468029976, -0.0013162221293896437, 0.027677180245518684, -0.0018901149742305279, -0.013406846672296524, -0.0006300209206528962, 0.017868420109152794, -0.002628427231684327, -0.009505162015557289, -0.025008579716086388, -0.02800077199935913, 0.02298397198319435, 0.0004866181989200413, -0.01628221943974495, -0.014254986308515072, 0.025975463911890984, -0.00656495476141572, -0.057996395975351334, -0.013157524168491364, 0.03876687213778496, -0.023390529677271843, -0.06221231073141098, 0.019506296142935753, 0.020693551748991013, 0.047203000634908676, 0.0035790554247796535, 0.007246971596032381, -0.024910319596529007, 0.04215308651328087, 0.0010575884953141212, 0.06711799651384354, 0.03747154399752617, 0.02214960940182209, -0.020902182906866074, 0.0025725567247718573, 0.0316665954887867, 0.012577904388308525, 0.02302229404449463, -0.0011287821689620614, -0.059289731085300446, -0.0014269587118178606, -0.03658584877848625, 0.022548099979758263, -0.04993470013141632, 0.003740524873137474, -0.05498260259628296, -0.06817565113306046, -0.03174550458788872, 0.014421003870666027, -0.039702896028757095, -0.00854587648063898, -0.03294352814555168, -0.003332028165459633, 0.004053478129208088, -0.005945512093603611, -0.025655215606093407, -0.04714053496718407, -0.016784589737653732, -0.03228212520480156, 0.03529227524995804, -0.011765184812247753, -0.0059154583141207695, 0.01888466812670231, -0.04379947483539581, 0.004574175924062729, -0.009735760278999805, -0.006679548881947994, 0.03320314362645149, -0.0034898805897682905, -0.0028550028800964355, -0.033065974712371826, 0.006997750140726566, -0.023069974035024643, 0.0054725161753594875, 0.019640136510133743, -0.0693543553352356, 0.0029013785533607006, -0.009836608543992043, -0.014186039566993713, 0.03759987652301788, 0.03281625732779503, 0.0059160515666007996]\"\n./train/dugong/n02074367_3178.JPEG,dugong,\"[0.03390597924590111, -0.040185682475566864, 0.02659055031836033, -0.03299739956855774, -0.0008204036857932806, -0.040648944675922394, 0.018401464447379112, -0.010664818808436394, 0.07378926128149033, 0.05154155194759369, -0.004682326689362526, 0.028169050812721252, 0.035506341606378555, -0.0006751297623850405, 0.01171283982694149, 0.018237411975860596, 0.052500128746032715, 0.07476554811000824, -0.010410567745566368, 0.011885123327374458, -0.13307097554206848, 0.05690810829401016, 0.008915658108890057, -0.026935985311865807, -0.04874921962618828, 0.015382070094347, 0.027419762685894966, -0.02494543418288231, 0.0070120710879564285, 0.012729935348033905, 0.06060183048248291, 0.0021041317377239466, 0.017283422872424126, -0.020833570510149002, -0.048596929758787155, -0.018766509369015694, -0.005541450809687376, 0.04312121495604515, -0.028664136305451393, 0.16080257296562195, 0.007515918463468552, 0.04534771665930748, 0.0001967884018085897, 0.038020387291908264, 0.0032133683562278748, -0.025902485474944115, -0.008278591558337212, 0.0387108139693737, 0.020051516592502594, -0.01725013740360737, -0.015924202278256416, 0.039880964905023575, -0.016778720542788506, 0.004487158264964819, -0.005263813771307468, -0.019904449582099915, -0.06119658425450325, 0.03175128251314163, -0.035788197070360184, -0.02546919696033001, 0.08728501945734024, 0.048956047743558884, -0.011487274430692196, -0.0264274999499321, -0.0029096147045493126, -0.05015072599053383, -0.049302052706480026, 0.07444798201322556, 0.00023891936871223152, 0.018818169832229614, 0.018524479120969772, -0.016609691083431244, -0.0007111193845048547, -0.042423173785209656, 0.0008326788665726781, -0.012426828034222126, -0.008693421259522438, -0.04072471708059311, -0.010317454114556313, 0.008936856873333454, -0.014671897515654564, 0.025070631876587868, -0.014036535285413265, -0.09280578792095184, 0.07088541239500046, 0.00780439144000411, 0.07406763732433319, 0.00013267422036733478, -0.06226513534784317, -0.012093187309801579, -0.011624421924352646, 0.0030555827543139458, -0.6259869337081909, 0.043830059468746185, -0.0007039058837108314, -0.004209829494357109, 0.016061140224337578, -0.031137922778725624, -0.06357277929782867, -0.036730315536260605, -0.030179863795638084, -0.049370329827070236, -0.06180797889828682, -0.04712443798780441, 0.03601180762052536, 0.04825660586357117, -0.06742502748966217, -0.013753143139183521, -0.020441193133592606, -0.03631787374615669, 0.033643871545791626, -0.035350654274225235, 0.04426979273557663, -0.019859710708260536, -0.0035229974891990423, -0.00822607520967722, 0.05415360629558563, -0.04039165750145912, 0.03463643789291382, 0.0052177864126861095, -0.035647060722112656, -0.017895810306072235, 0.011590087786316872, 0.01676890067756176, -0.016311686486005783, -0.012618356384336948, -0.010871904902160168, 0.01737106591463089, 0.028647802770137787, -0.023311208933591843, 0.07449893653392792, -0.019144756719470024, -0.019832728430628777, 0.08450237661600113, -0.011156021617352962, 0.04442771524190903, 0.004830388817936182, 0.0027531981468200684, 0.033858079463243484, -0.015849320217967033, 0.022753145545721054, -0.02093849517405033, -0.03590979054570198, 0.019909825176000595, 0.015513982623815536, 0.0010059218620881438, -0.024242954328656197, 0.06318551301956177, -0.041594166308641434, 0.00693522859364748, 0.0373096689581871, -0.023490237072110176, -0.010799353942275047, -0.0035722125321626663, -0.045524802058935165, 0.04675121605396271, -0.004026268143206835, -0.012217935174703598, -0.010604041628539562, 0.03092578984797001, -0.015404910780489445, -0.04343492165207863, -0.0006527961231768131, 0.002779622096568346, 0.03765752166509628, -0.024002302438020706, -0.05297308415174484, -0.007373660337179899, 0.009020766243338585, 0.03945718705654144, 0.029697487130761147, -0.007594313472509384, 0.005262457765638828, 0.010207508690655231, -0.027477236464619637, 0.015790125355124474, -0.07551117986440659, 0.027012744918465614, 0.01355977077037096, 0.017042171210050583, 0.04847341030836105, -0.02173631265759468, 0.03790602087974548, 0.005301735829561949, -0.020525282248854637, -0.024586612358689308, -0.0012715747579932213, -0.07273919880390167, -0.06538835912942886, 0.0011006237473338842, -0.0017703853081911802, -0.04673385992646217, 0.00768129900097847, -0.0485970564186573, 0.043473273515701294, 0.022503284737467766, 0.04851749911904335, -0.010756319388747215, -0.014828079380095005, 0.0056001185439527035, 0.008251545019447803, -0.022342242300510406, -0.003812516573816538, 0.052387822419404984, 0.035220254212617874, 0.012079252861440182, 0.053629908710718155, -0.040011778473854065, 0.059882912784814835, 0.005548859015107155, -0.0068537285551428795, 0.0423637218773365, -0.017042111605405807, 0.03189671412110329, 0.02487838640809059, 0.01906793750822544, -0.00891693402081728, 1.339420305157546e-05, 0.029190734028816223, -0.009090032428503036, 0.10041479021310806, 0.06320660561323166, 0.016062451526522636, -0.003686926793307066, 0.04916422441601753, -0.01856955885887146, 0.009462971240282059, 0.03172292187809944, 0.0003011515364050865, 0.04798813536763191, 0.020720599219202995, -0.002316111931577325, -0.0065767839550971985, 0.025207409635186195, 0.001813280745409429, -0.06254113465547562, 0.0132947051897645, -0.033305421471595764, -0.038281697779893875, -0.033059682697057724, -0.021095043048262596, 0.05968732014298439, 0.020816704258322716, -0.016947362571954727, 0.04566517844796181, 9.154700819635764e-05, -0.035589661449193954, 0.016252784058451653, 0.008700137957930565, 0.033450014889240265, 0.01576576754450798, 0.009024699218571186, 0.007275812793523073, -0.02676312066614628, -0.012055318802595139, 0.029027780517935753, 0.007494905963540077, -0.020121539011597633, 0.04220416769385338, -0.04593093320727348, 0.003737485269084573, -0.021046575158834457, -0.025441555306315422, 0.018173055723309517, -0.003644547425210476, 0.0202705767005682, 0.0468997023999691, 0.0015135806752368808, 0.01988496258854866, -0.017146244645118713, -0.005854318384081125, -0.03597145900130272, -0.011316630989313126, 0.04791250824928284, 0.038631096482276917, -0.0017485665157437325, -0.055227864533662796, 0.052864208817481995, -0.027905263006687164, 0.053683631122112274, 0.014814261347055435, -0.009125263430178165, 0.01462910883128643, -0.008874628692865372, -0.019219322130084038, -0.05581575632095337, -0.08469272404909134, -0.006640063598752022, -0.04601510986685753, -0.0014460223028436303, 0.04507282003760338, 0.03651873394846916, -0.006784687750041485, -0.021199176087975502, -0.01155086699873209, -0.025282902643084526, 0.07677894830703735, 0.014102117158472538, 0.01206862274557352, 0.03269750252366066, 0.01106723677366972, -0.02091173082590103, 0.02177678979933262, 0.0018878027331084013, -0.05577109009027481, -0.012841351330280304, -0.00722384313121438, 0.0012792785419151187, 0.029085606336593628, -0.009980647824704647, -0.033947546035051346, -0.03518521413207054, 0.08442533016204834, 0.005778496619313955, 0.02240695431828499, -0.03283844143152237, 0.019463472068309784, 0.0633222684264183, -0.034271810203790665, -0.05499320104718208, 0.021885909140110016, 0.1482381522655487, -0.020282242447137833, -0.06209259480237961, 0.03821219876408577, -0.069712795317173, 0.029286684468388557, -0.01245148479938507, 0.03285085782408714, 0.006896854378283024, 0.0018550519598647952, -0.004735364578664303, 0.019016025587916374, -0.029980972409248352, 0.017302464693784714, 0.0034997104667127132, -0.022099342197179794, -0.009898043237626553, 0.009689351543784142, -0.023997195065021515, 0.003280463395640254, 0.017375262454152107, -0.0017275976715609431, -0.013375595211982727, 0.019819652661681175, -0.009316413663327694, -0.05637182667851448, 0.007881587371230125, 0.02297401614487171, 0.05129150673747063, 0.03337200731039047, 0.0028043987695127726, 0.03622186928987503, -0.026688916608691216, 0.014687356539070606, 0.006328987423330545, -0.0125886844471097, -0.05161251127719879, -0.027738144621253014, -0.0020829655695706606, 0.07510929554700851, -0.026823686435818672, 0.026447433978319168, 0.004438778385519981, -0.09139057248830795, 0.03208545967936516, 0.022641712799668312, -0.0652824118733406, -0.020021576434373856, 0.0022040517069399357, 0.02720622345805168, 0.06377359479665756, 0.010852141305804253, 0.02784988470375538, 0.04866478964686394, -0.008754042908549309, 0.05072854459285736, 0.031380388885736465, -0.07195335626602173, 0.007055035792291164, 0.040926702320575714, -0.0024878468830138445, 0.010256346315145493, 0.02079600654542446, 0.014867586083710194, 0.01831628940999508, -0.006430349312722683, -0.011054638773202896, 0.021002205088734627, -0.03129018470644951, -0.015943439677357674, -0.005257313139736652, 0.02571975812315941, -0.019041169434785843, -0.014675667509436607, -0.022990448400378227, -0.01741826720535755, -0.036414556205272675, -0.11412344872951508, -0.03182687982916832, -0.0340617373585701, 0.007159337401390076, -0.005245983600616455, -0.008252063766121864, -0.011615484021604061, -0.025134608149528503, -0.036213748157024384, -0.0178105216473341, 0.013595514930784702, -0.025845374912023544, 0.08067060261964798, -0.01598559319972992, 0.004866732284426689, 0.024155965074896812, -0.01853303238749504, -0.004373773001134396, 0.05678946524858475, -0.013674688525497913, -0.03232221677899361, -0.047767769545316696, -0.018182862550020218, 0.01615702174603939, -0.006619610358029604, -0.0543845109641552, 0.018189717084169388, 0.017248796299099922, 0.017984138801693916, 0.022716673091053963, -0.018600305542349815, -0.0242741908878088, 0.006833757273852825, -0.026262646540999413, 0.061547085642814636, -0.02798650413751602, 0.022212065756320953, -0.003541158512234688, -0.005691767204552889, 0.014578528702259064, 0.003973905462771654, -0.03514135628938675, -0.0395311675965786, 0.04270714148879051, 0.007976910099387169, 0.016830693930387497, -0.02269386313855648, 0.029232827946543694, 0.04897181689739227, -0.024320481345057487, 0.021387308835983276, 0.012588340789079666, -0.0021775809582322836, -0.024680476635694504, 0.0049484120681881905, -0.019764378666877747, 0.010481051169335842, -0.05099891871213913, 0.0006609187112189829, -0.0021286094561219215, 0.03661024570465088, -0.041596632450819016, 0.07747963815927505, 0.02715929038822651, 0.034545253962278366, 0.04170144349336624, 0.008497635833919048, -0.0051663536578416824, 0.013522257097065449, 0.006522876676172018, 0.03548572212457657, -0.008000250905752182, 0.00996277667582035, -0.04770741984248161, 0.0011372680310159922, -0.015102428384125233, -0.017120739445090294, -0.056817904114723206, -0.04515798017382622, 0.001530544483102858, 0.005934973247349262, -0.00901765190064907, -0.004240537062287331, -0.03546254709362984, -0.021075697615742683, -0.008143055252730846, 0.015078505501151085, 0.043716415762901306, -0.012564786709845066, 0.003947304096072912, -0.00588436471298337, 0.05225619673728943, -0.021541310474276543, -0.0013228331226855516, 0.028547069057822227, -0.05021059513092041, -0.00854486133903265, -0.02452486753463745, -0.0052316999062895775, -0.0016933100996538997, 0.04252544417977333, -0.0379425473511219, 0.025051452219486237, -0.02852288819849491, -0.04074046388268471, -0.03735091909766197, 0.001939662266522646, -0.039080992341041565, 0.014428510330617428, -0.00018761375395115465, -0.002521451562643051, 0.02065838873386383, 0.015679366886615753, 0.011241658590734005]\"\n./train/dugong/n02074367_10112.JPEG,dugong,\"[0.05160451680421829, -0.04086168110370636, -0.008824692107737064, 0.017335759475827217, -0.025010034441947937, -0.018018729984760284, 0.005813916679471731, 0.020962204784154892, 0.037379033863544464, 0.04774583876132965, -0.04256656393408775, -0.007253571879118681, 0.06428108364343643, -0.018124541267752647, -0.00029355636797845364, -0.023355582728981972, -0.03275815397500992, 0.063141830265522, -0.01974269561469555, -0.023753076791763306, -0.04614438861608505, 0.015909060835838318, -0.02187511883676052, -0.033823300153017044, -0.02458730712532997, -0.00521041639149189, -0.010169776156544685, 0.01042008027434349, 0.0450875498354435, 0.0025662097614258528, 0.0379595085978508, -0.0038094837218523026, 0.031739216297864914, -0.03561139106750488, -0.0036792943719774485, -0.009370044805109501, 0.013337895274162292, 0.015216364525258541, 0.013560355640947819, 0.12428426742553711, 0.0069666230119764805, 0.014207149855792522, -0.0006961380131542683, 0.02788676507771015, -0.015012568794190884, -0.0633755549788475, 0.05647037923336029, 0.010608267970383167, -0.022432751953601837, -0.0027799978852272034, -0.04757673665881157, 0.007638217881321907, -0.035694658756256104, -0.010145231150090694, 0.009792884811758995, 0.016227249056100845, -0.023479655385017395, 0.014773190021514893, 0.010413402691483498, -0.023584308102726936, 0.03620833531022072, -0.0015709353610873222, 0.009443681687116623, 0.026007426902651787, -0.006100625731050968, -0.0062827677465975285, -0.01838005892932415, 0.10539904236793518, 0.03189043700695038, 0.03392789140343666, 0.04581984877586365, -0.042494866997003555, -0.03078426420688629, -0.03770719841122627, -0.009123646654188633, 0.03143982216715813, -0.0017142422730103135, 0.019514253363013268, -0.009789923205971718, -0.03509794920682907, -0.020016459748148918, 0.02691776491701603, -0.009270588867366314, -0.03322784975171089, 0.07474873214960098, 0.0132371811196208, 0.05526256561279297, -0.007440666202455759, -0.02857397496700287, 0.03192919120192528, 0.028109120205044746, -0.005923941265791655, -0.6080895066261292, 0.018903741613030434, -0.031147010624408722, 0.001378058921545744, 0.020787393674254417, -0.009039619006216526, -0.015638697892427444, -0.008895108476281166, 0.016498226672410965, 0.019056031480431557, -0.08235786855220795, -0.03320744261145592, 0.03209083154797554, 0.03871845826506615, -0.1266707330942154, -0.014571561478078365, -0.003655037609860301, -0.0370664969086647, 0.03517400473356247, 0.004837567452341318, 0.024592701345682144, 0.016826236620545387, -0.014126477763056755, -0.05557318404316902, 0.02465522289276123, -0.03475016728043556, 0.012098036706447601, 0.02834186889231205, -0.016987290233373642, 0.0020655666012316942, -0.032874420285224915, 0.030234333127737045, -0.025193821638822556, 0.027276983484625816, 0.02780228853225708, 0.03473278880119324, 0.037453655153512955, -0.051660120487213135, 0.026131676509976387, -0.018348131328821182, -0.02033371478319168, 0.08475425094366074, 0.0033549524378031492, -0.0007564900442957878, -0.02941354177892208, -0.04280314967036247, -0.003082942683249712, -0.018788473680615425, 0.02581281028687954, -0.0399889200925827, 0.010381754487752914, 0.008879708126187325, -0.016494816169142723, -0.01819247379899025, -0.026053020730614662, -0.01066013053059578, -0.014464423060417175, 0.017203154042363167, -0.022612521424889565, -0.012482313439249992, -0.04883289337158203, -0.004667945671826601, -0.017570139840245247, 0.015214430168271065, 0.04561330005526543, -0.02405823953449726, 0.010660464875400066, 0.054346714168787, -0.02608032338321209, -0.027220163494348526, 0.006107282359153032, 0.04660629853606224, 0.03448040038347244, -0.035152651369571686, -0.0348142646253109, 0.02415844239294529, -0.03202635422348976, 0.004476167727261782, 0.0021983589977025986, 0.023055337369441986, 0.03229938820004463, -0.04947686567902565, 0.008939624764025211, 0.02281469665467739, -0.08171363174915314, -0.01569146104156971, -0.03227594867348671, 0.0017646999331191182, 0.06674996018409729, 0.021666526794433594, 0.023663803935050964, -0.00709898816421628, -0.020989129319787025, -0.005992967635393143, 0.009703150950372219, -0.06394337117671967, -0.044872548431158066, 0.028814826160669327, 0.025739051401615143, -0.011248554103076458, -0.0006796371308155358, 0.006192182656377554, -0.007638857234269381, -0.0028248338494449854, 0.006364832632243633, 0.037775617092847824, -0.005801841150969267, 0.03374169394373894, 0.02730434201657772, -0.00705777807161212, -0.008032704703509808, 0.03567725419998169, 0.011238720268011093, 0.04726094380021095, 0.04845176264643669, 0.021671613678336143, 0.038620296865701675, 0.00900671724230051, 0.02045261114835739, 0.03256329894065857, -0.03217754513025284, 0.0123470239341259, 0.07443542033433914, 0.028689034283161163, 0.00574561208486557, -0.019724449142813683, -0.06998006254434586, -0.009049629792571068, 0.05604660511016846, 0.014582104980945587, -0.03721914440393448, -0.021318882703781128, -0.007699406240135431, -0.03375477343797684, 0.003127851290628314, 0.06389925628900528, -0.01424878928810358, 0.011594090610742569, -0.04368065297603607, -0.00906441267579794, 0.033374443650245667, 0.023448418825864792, 0.002241108100861311, -0.1166713535785675, 0.043375179171562195, 0.03128529712557793, -0.006288192234933376, -0.011489422991871834, 0.01975460909307003, 0.04584886133670807, 0.02013232745230198, 0.0016189442249014974, -0.007441563997417688, 0.01332923211157322, -0.00010887021198868752, 0.02783796936273575, -0.010063916444778442, 0.042656365782022476, 0.037074919790029526, 0.024011969566345215, 0.02679448574781418, -0.027628500014543533, -0.04495187848806381, 0.04795040935277939, 0.04210865870118141, 0.011248346418142319, 0.13301712274551392, -0.012714953161776066, 0.008163350634276867, -0.022498715668916702, -0.03611337020993233, 0.011480581015348434, -0.011164704337716103, 0.03219455108046532, 0.03499165549874306, -0.001057451474480331, -0.013844289816915989, -0.0155659643933177, 0.008792273700237274, -0.012348702177405357, 0.017964279279112816, 0.03606880083680153, 0.0660010501742363, -0.05213823914527893, -0.027695894241333008, 0.06797286868095398, -0.04933195933699608, -0.010366607457399368, 0.009342905133962631, -0.004491318482905626, -0.007314861752092838, -0.012981039471924305, 0.033487215638160706, 0.013859943486750126, -0.019957225769758224, -0.04420648515224457, 0.014758207835257053, 0.021757476031780243, 0.00552228232845664, 0.01762271858751774, -0.017109718173742294, -0.013875063508749008, 0.0022254404611885548, -0.017223890870809555, 0.1272502988576889, 0.028188427910208702, 0.030210290104150772, 0.042839761823415756, -0.026169726625084877, -0.03465832397341728, -0.016631511971354485, 0.019464686512947083, 0.016458475962281227, -0.0031743282452225685, 0.016198914498090744, 0.05465463548898697, 0.04064123332500458, -0.03061341494321823, -0.0008861334063112736, -0.02055400051176548, 0.08456722646951675, 0.029108326882123947, 0.035341519862413406, -0.036822907626628876, 0.02600381150841713, 0.07531619071960449, -0.049922529608011246, 0.002059878082945943, -0.00016771328228060156, 0.0801275297999382, -0.037917815148830414, -0.046423688530921936, 0.06547487527132034, -0.036315035074949265, -0.014778177253901958, 0.020859370008111, 0.00418428797274828, 0.008553426712751389, 0.02091807872056961, -0.010770478285849094, 0.024304386228322983, -0.041179437190294266, 0.0023590840864926577, -0.0300913043320179, -0.012658105231821537, 0.0019929129630327225, -0.05919279903173447, 0.004616194870322943, 0.00040079274913296103, -0.019162511453032494, -0.029750995337963104, -0.039662186056375504, 0.008651785552501678, -0.004690935369580984, -0.05823895335197449, 0.006677831523120403, 0.015862489119172096, 0.049562275409698486, 0.0450994148850441, -0.02469169907271862, 0.006871426943689585, 0.006905270274728537, -0.025765346363186836, -0.006491193547844887, 0.030575349926948547, -0.02738340198993683, 0.002261343877762556, -0.04283967614173889, 0.0640963613986969, -0.05633912235498428, -0.005227311048656702, 0.01796591654419899, -0.004702837206423283, 0.02704322151839733, -0.0021661780774593353, -0.1582155078649521, -0.02442363277077675, 0.01648966409265995, 0.005737595725804567, 0.05142896994948387, 0.004350720439106226, 0.03290398418903351, 0.058380115777254105, 0.028212834149599075, 0.1321781575679779, 0.013999782502651215, -0.1020486056804657, 0.012315571308135986, 0.015065822750329971, 0.00523467967286706, 0.05244177207350731, -0.007025066297501326, 0.009392565116286278, 0.04844225198030472, 0.05360807478427887, -0.005833705421537161, -0.02429390139877796, -0.03749827668070793, -0.026624826714396477, 0.01773952879011631, -0.007553025148808956, 0.015476149506866932, -0.021560028195381165, -0.008335646241903305, -0.008667152374982834, 0.030782129615545273, -0.12228395789861679, -0.03267756849527359, -0.02914893813431263, -0.03874826058745384, -0.06357221305370331, -0.012259169481694698, 0.004586934577673674, -0.02967151440680027, -0.01227454375475645, -0.00040525413351133466, 0.0038650748319923878, -0.00721984775736928, 0.07205991446971893, -0.04353358969092369, 0.03438203036785126, -0.004816174972802401, -0.010741565376520157, -0.05412204936146736, 0.06869759410619736, -0.004004120361059904, -0.03702065721154213, -0.021567657589912415, -0.023054275661706924, -0.005241320934146643, 0.03880547732114792, -0.0013114159228280187, 0.04504216089844704, -0.03912316635251045, 0.017641354352235794, 0.030842358246445656, 0.00873951893299818, -0.02118280902504921, -0.027100849896669388, -0.009809489361941814, -0.011722330003976822, -0.02758955769240856, -0.008431161753833294, 0.004007403738796711, 0.01241758931428194, 0.034009139984846115, 0.0010948179988190532, 0.016765881329774857, -0.05563298240303993, 0.03378620743751526, -0.020655432716012, -0.007006084080785513, -0.012741120532155037, -0.010544756427407265, 0.026800839230418205, -0.02843667007982731, -0.006318201310932636, 0.047609083354473114, -0.03853844106197357, -0.07882536202669144, -0.0063654338009655476, -0.020573753863573074, 0.05158204957842827, -0.05216433107852936, 0.0024766665883362293, 0.013847507536411285, 0.05307707563042641, 0.0025612101890146732, 0.0679079219698906, 0.013238750398159027, 0.015227040275931358, 0.020092952996492386, 0.01685224287211895, -0.04499329254031181, 0.025361668318510056, 0.02876795083284378, 0.026238173246383667, -0.025886625051498413, -0.01311357133090496, -0.04549434781074524, -0.032591812312603, -0.050935689359903336, -0.007922453805804253, -0.011247367598116398, -0.003048676298931241, 0.013384605757892132, -0.027698233723640442, -0.03363297879695892, -0.0017024576663970947, -0.027585873380303383, 0.021089302375912666, -0.0028032369446009398, 0.02688066102564335, -0.00026715462445281446, -0.030961429700255394, -0.03903861343860626, -0.019655300304293633, 0.04128825664520264, -0.022879553958773613, 0.016252342611551285, 0.01041700690984726, -0.050402458757162094, 0.014318290166556835, -0.06714195013046265, 0.020165247842669487, 0.02463979460299015, 0.010213890112936497, 0.028461409732699394, -0.018618794158101082, 0.0004039831692352891, -0.056366946548223495, -0.004205186851322651, 0.004672972951084375, -0.09253831207752228, 0.007200510706752539, -0.03113856352865696, 0.016890278086066246, 0.017588235437870026, -0.014423651620745659, 0.03245682269334793]\"\n./train/dugong/n02074367_21374.JPEG,dugong,\"[0.029417818412184715, -0.02749280259013176, 0.022397490218281746, 0.028825504705309868, -0.0320800356566906, -0.010554543696343899, 0.007654890418052673, -0.009504959918558598, -0.018527425825595856, -0.04101550206542015, -0.03332674130797386, -0.06238800287246704, 0.08258990198373795, 9.65927101788111e-05, 0.03965413197875023, 0.0072495960630476475, -0.0542621836066246, 0.016631782054901123, 0.012515001930296421, -0.01512899436056614, -0.030008234083652496, 0.0059293052181601524, 0.029269864782691002, -0.08746584504842758, -0.014181531965732574, 0.012303439900279045, -0.0421590730547905, -0.009550106711685658, -0.006651553325355053, -0.007518822327256203, 0.01041332446038723, 0.03270693123340607, 0.009184520691633224, 0.00615253672003746, 0.002176782814785838, 0.005460456479340792, -0.00588315399363637, 0.01733768917620182, 0.0017904089763760567, 0.1374228447675705, 0.0038073479663580656, -0.025336947292089462, 0.008519809693098068, -0.009466663002967834, -0.007612734567373991, -0.18199598789215088, 0.056465744972229004, 0.026391174644231796, -0.0496087372303009, 0.00013852417760062963, -0.016922688111662865, 0.07219871878623962, -0.00789366289973259, -0.019056588411331177, -0.003986358176916838, 0.03438787907361984, -0.06672853231430054, -0.003531966358423233, 0.0025776743423193693, 0.004373996984213591, -0.005000131204724312, -0.02753838151693344, 0.029151400551199913, 0.024470722302794456, -0.011121273972094059, 0.04233254864811897, 0.013020194135606289, 0.1422002613544464, 0.05222175642848015, -0.020060257986187935, 0.033531010150909424, -0.04774908348917961, -0.000528883480001241, 0.015463408082723618, -0.021920805796980858, -0.02935130149126053, 0.014148895628750324, -0.03458869829773903, 0.0046087331138551235, -0.04361594095826149, 0.0259470846503973, 0.021460648626089096, -0.04384225606918335, 0.0018539560260251164, 0.024073470383882523, -0.005513851996511221, 0.05402315780520439, -0.04239942505955696, -0.06878680735826492, 0.031239306554198265, 0.016342077404260635, -0.021081874147057533, -0.6209367513656616, 0.04314276948571205, -0.021261218935251236, -0.004862801171839237, 0.01413101889193058, -0.009893251582980156, 0.054761096835136414, -0.08576488494873047, 0.0009899422293528914, -0.030347641557455063, -0.044812705367803574, 0.013851693831384182, 0.0037319487892091274, 0.047643326222896576, -0.11760196089744568, 0.0036375713534653187, 0.02320195734500885, -0.023581238463521004, -0.0003236769116483629, -0.009361195378005505, 0.007346837315708399, -0.04224875196814537, -0.014959299005568027, -0.03506232425570488, 0.007209199946373701, -0.020557323470711708, 0.04637349769473076, 0.025886336341500282, 0.01533820852637291, 0.02394823171198368, -0.050451964139938354, 0.014941539615392685, -0.006908020004630089, 0.0278076883405447, 0.005140568129718304, 0.05297861620783806, 0.025613920763134956, -0.015309927985072136, 0.012165739201009274, 0.04273105040192604, -0.007837696932256222, 0.07549718022346497, 0.02791680209338665, -0.003720395965501666, -0.027375444769859314, -0.023985980078577995, -0.025878572836518288, 0.003493457566946745, 0.014583941549062729, -0.054407890886068344, -0.012386155314743519, 0.04626047611236572, 0.008836318738758564, 0.011336689814925194, 0.003622025717049837, -0.011442124843597412, -0.013081099838018417, 0.009065980091691017, 0.003019623691216111, 0.01283267606049776, 0.06003224477171898, -0.041858166456222534, -0.007185889407992363, -0.020207203924655914, 0.009180703200399876, -0.0714961588382721, 0.005043079610913992, 0.026284005492925644, 0.0286711398512125, -0.017516708001494408, -0.026065343990921974, 0.008775732479989529, -0.004848984070122242, -0.005863694939762354, 0.06082114577293396, 0.05103060230612755, -0.004194195382297039, -0.014960629865527153, 0.023943495005369186, 0.01970372162759304, -0.009780490770936012, -0.02466402016580105, 0.03956175595521927, 0.014601020142436028, -0.09792619198560715, -0.005657723639160395, -0.10729752480983734, 0.038089241832494736, 0.03836378827691078, -0.01482055988162756, 0.009740982204675674, 0.041373029351234436, 0.015635712072253227, 0.00017959465913008898, 0.001160361454822123, -0.010137390345335007, -0.025738263502717018, 0.03946642950177193, -0.03487008810043335, -0.03307047486305237, 0.00236518238671124, -0.015050257556140423, 0.004051392897963524, 0.035667601972818375, 0.021294068545103073, 0.019383206963539124, -0.07073071599006653, 0.025522394105792046, 0.03421971946954727, -0.02955750934779644, -0.02412760630249977, 0.02572784386575222, 0.023971032351255417, 0.04248141124844551, -0.00908823311328888, -0.033043090254068375, 0.020273538306355476, 0.025686748325824738, 0.021876821294426918, -0.021626418456435204, 0.004920066334307194, -0.013229015283286572, 0.038730040192604065, 0.032206643372774124, 0.029531214386224747, 0.0034922331105917692, -0.05353248864412308, 0.0010571159655228257, 0.05139460042119026, 0.030203858390450478, -0.01390265766531229, -0.061547379940748215, 0.06243491545319557, 0.037472523748874664, 0.004144215025007725, 0.0397803895175457, 0.009140728041529655, 0.013743107207119465, -0.015998419374227524, -0.015915922820568085, -0.0252237468957901, 0.006103598512709141, 0.005261389072984457, -0.028522158041596413, -0.008518511429429054, -0.011704760603606701, 0.009425620548427105, 0.013066261075437069, -0.004232125822454691, 0.037268493324518204, 0.017052965238690376, -0.03278902545571327, -0.023846428841352463, 0.05736786872148514, 0.016065800562500954, -0.003131476230919361, -0.008411292918026447, 0.03201732039451599, 0.011114434339106083, 0.026051754131913185, 0.029238754883408546, -0.02507649175822735, 0.007669514510780573, 0.029948214069008827, -0.00974711962044239, -0.027238231152296066, 0.10824371874332428, 0.0003513652191031724, 0.0021938313730061054, 0.02781069651246071, -0.0046499790623784065, 0.036289047449827194, 0.017950529232621193, -0.012940436601638794, 0.0352686271071434, -0.02869488298892975, 0.021022623404860497, -0.002300122519955039, 0.004564991686493158, 0.007820592261850834, 0.04150999337434769, 0.025278767570853233, -0.01804615557193756, -0.014014809392392635, -0.031216826289892197, -0.004511264618486166, -0.05137171596288681, 0.02714170515537262, 0.0008580334833823144, -0.010184051468968391, 0.02130662277340889, 0.05238805338740349, -0.03895287588238716, 0.007915490306913853, -0.037134479731321335, -0.01813940517604351, -0.012883871793746948, 0.018472746014595032, -0.028128325939178467, 0.025474868714809418, -0.006739980075508356, 0.024166837334632874, -0.009984741918742657, -0.009364102967083454, 0.11416348814964294, 0.0612252913415432, 0.043494634330272675, 0.0093082245439291, -0.013706573285162449, -0.04434814676642418, -0.028809774667024612, 0.04284803941845894, 0.05264165624976158, -0.016026033088564873, 0.024358609691262245, 0.03510449454188347, 0.05740503966808319, 0.01647922396659851, -0.03924908861517906, 0.017842380329966545, 0.07535838335752487, 0.0557144396007061, 0.04895319044589996, 0.034886691719293594, 0.020914297550916672, 0.03136637061834335, -0.03091307543218136, 0.0012416497338563204, 0.04533935710787773, 0.0932580903172493, -0.029547085985541344, -0.006479866802692413, 0.042843665927648544, -0.05149774253368378, -0.007727247662842274, -0.016009213402867317, 0.02798219583928585, -0.0149184325709939, 0.0036265149246901274, 0.011420082300901413, 0.004561426118016243, -0.024792363867163658, -0.01779654435813427, -0.037307530641555786, -0.014888930134475231, -0.007987681776285172, -0.0112842358648777, -0.04561074078083038, -0.020092343911528587, -0.016603518277406693, 0.03250911086797714, 0.003929403144866228, -0.015600045211613178, -0.041759293526411057, 0.00487375957891345, 0.034865591675043106, 0.04415924847126007, 0.06894416362047195, 0.009371920488774776, -0.010459783487021923, 0.03635893017053604, 0.053288474678993225, 0.001006492180749774, -0.07648380845785141, 0.03076210804283619, 0.09602537006139755, 0.0029140771366655827, -0.0028452565893530846, 0.019536783918738365, -0.011538166552782059, 0.018980003893375397, -0.00564920948818326, -0.014703133143484592, -0.0013113594613969326, 0.0053500887006521225, -0.10995195060968399, -0.03191779926419258, 0.011757279746234417, 0.011451761238276958, 0.029710300266742706, 0.004613833501935005, 0.0210189800709486, 0.051903460174798965, 0.025798840448260307, 0.12768134474754333, -0.001123088994063437, -0.05694901570677757, 0.0291749220341444, 0.010079417377710342, -0.05844002217054367, 0.007551990915089846, -0.030300365760922432, -0.017440635710954666, -0.02141297422349453, 0.050008054822683334, 0.009753904305398464, -0.02966182306408882, -0.0074190404266119, 0.019067969173192978, 0.037725552916526794, 0.01794479228556156, 0.04248596727848053, -0.015816684812307358, -0.00408422714099288, -0.0008088970789685845, 0.026619570329785347, -0.03901723399758339, 0.004631588701158762, -0.029091399163007736, -0.04242108762264252, -0.008750377222895622, -0.018912389874458313, 0.010358368046581745, -0.015349861234426498, 0.00913479458540678, 0.03339886665344238, 0.007861748337745667, 0.0008343594963662326, 0.0325351320207119, -0.003380443435162306, 0.003668423742055893, 0.023304017260670662, -0.015824539586901665, 0.0029201130382716656, 0.05589926615357399, 0.04761454090476036, -0.031069612130522728, -0.011194298975169659, -0.005914517678320408, 0.00012927188072353601, 0.03930213674902916, -0.04975869506597519, -0.02430667355656624, -0.016368309035897255, 0.0013171874452382326, 0.04360659420490265, 0.03499947488307953, -0.012418563477694988, 0.02960306406021118, 0.011569501832127571, 0.02082895115017891, -0.013868490234017372, 0.027164412662386894, 0.017736537382006645, -0.021161112934350967, -0.028855154290795326, -0.005872318521142006, 0.005131169687956572, -0.0007030805572867393, 0.04038823023438454, -0.0020928161684423685, 0.02660057134926319, 0.0019814693368971348, -0.03237224370241165, -0.029093684628605843, -0.050179172307252884, -0.016583086922764778, 0.013125604018568993, 0.0014187970664352179, -0.061514731496572495, 0.007128123659640551, 0.013485072180628777, 0.02050727605819702, -0.044531114399433136, -0.0016551854787394404, 0.0521816611289978, 0.01906886138021946, -0.012326284311711788, 0.004903995431959629, -0.003526776097714901, -0.012698294594883919, 0.012290777638554573, -0.031156282871961594, 0.04362259432673454, 0.015453523956239223, 0.0029430899303406477, -0.014795724302530289, -0.02527627907693386, 0.004102073609828949, -0.044211987406015396, 0.03417770192027092, -0.05969623848795891, 0.007080919109284878, -0.04080933704972267, -0.03471093997359276, 0.000520680274348706, 0.004926913417875767, -0.028403587639331818, -0.010144145227968693, 0.01416296698153019, 0.018628664314746857, -0.00334054883569479, 0.04398588091135025, 0.011833400465548038, 0.007821056991815567, -0.01725374162197113, -0.07110024243593216, 0.003627707250416279, 0.030090464279055595, -0.0053660012781620026, 0.03876768797636032, -0.08466411381959915, -0.02282056026160717, 0.023107804358005524, -0.0008345009409822524, 0.051081106066703796, -0.0022845559287816286, 0.008887168020009995, 0.010028725489974022, 0.027558399364352226, -0.008673170581459999, -0.01878313347697258, 0.055934611707925797, -0.026883751153945923, 0.030919983983039856, 0.02560657262802124, -0.026160938665270805, 0.04701783508062363, 0.025675911456346512, 0.0598909854888916]\"\n./train/dugong/n02074367_7060.JPEG,dugong,\"[0.059262074530124664, -0.02852904051542282, 0.008200756274163723, 0.014686500653624535, -0.02833278477191925, -0.041032835841178894, 0.010218882001936436, 0.024783171713352203, 0.025357911363244057, 0.029390987008810043, -0.04594612866640091, -0.005088328383862972, 0.07132141292095184, 0.006109017878770828, 0.01691720075905323, -0.0052061863243579865, -0.03721337020397186, 0.04897482693195343, -0.02638813853263855, -0.012774444185197353, -0.07863449305295944, 0.018247418105602264, -0.03213677927851677, -0.023833028972148895, 0.010815581306815147, 0.012158602476119995, -0.023517126217484474, -0.013670193031430244, -0.011110263876616955, 0.005682935006916523, 0.0623311772942543, 0.026840899139642715, -0.003992255311459303, -0.0253131240606308, 0.026223205029964447, 0.015824677422642708, -0.01964101567864418, 0.0286979041993618, 0.03559131175279617, 0.18282034993171692, 0.007959953509271145, 0.013239317573606968, -0.009563006460666656, 0.05078337341547012, -0.0019420161843299866, -0.0035664737224578857, 0.03866293653845787, 0.0117268655449152, 0.009712600149214268, -0.03041357733309269, -0.0457601435482502, 0.006801143288612366, -0.023833593353629112, -0.022764844819903374, -0.006119104567915201, 0.017996173352003098, -0.00890494417399168, 0.0157565176486969, -0.018834253773093224, -0.008689938113093376, 0.05887743458151817, -0.0052246227860450745, -0.03061828203499317, 0.0007562513928860426, -0.006490397732704878, -0.008138459175825119, -0.010900040157139301, 0.08825558423995972, 0.036287467926740646, 0.04167041927576065, 0.036240626126527786, -0.023175785318017006, 0.0018193019786849618, 0.005226077977567911, -0.030204305425286293, 0.00015749245358165354, 0.043210469186306, 0.00032684841426089406, 0.006888877600431442, -0.028416218236088753, -0.03967981040477753, 0.006727166008204222, -0.009509474970400333, -0.08150686323642731, 0.05805136263370514, 0.004657460376620293, 0.032210659235715866, 0.016590386629104614, -0.02900782972574234, 0.031678032130002975, 0.05734040588140488, 0.005773460958153009, -0.5962400436401367, 0.03869045525789261, -0.03968418389558792, 0.005712402984499931, 0.03753836080431938, -0.027267836034297943, -0.01715620420873165, -0.037001755088567734, -0.02068488672375679, -0.021015658974647522, -0.08994781970977783, -0.01644214242696762, 0.023318681865930557, 0.06337990611791611, -0.1548517495393753, 0.0022358556743711233, 0.02262396179139614, -0.014717094600200653, 0.01334613747894764, -0.0077975159510970116, 0.017907656729221344, 0.013450133614242077, 0.004649098496884108, -0.060131002217531204, 0.007283995859324932, -0.058780256658792496, 0.02288011834025383, 0.002935508731752634, -0.0057064988650381565, -0.011654166504740715, -0.014559348113834858, 0.04473966732621193, -0.04217178747057915, 0.024114614352583885, -0.007609172258526087, 0.04133275896310806, 0.06834125518798828, -0.06600059568881989, 0.0530470535159111, 0.03172536566853523, -0.008068985305726528, 0.0807020366191864, -0.022457221522927284, 0.004014329053461552, -0.026944544166326523, -0.02866738848388195, 0.05744604393839836, -0.05212677642703056, 0.013547667302191257, -0.0334448404610157, -0.005110300611704588, 0.026500288397073746, 0.0414302758872509, -0.03563404455780983, -0.016748476773500443, -0.003730100579559803, 0.016104599460959435, 0.012211687862873077, -0.005056431517004967, -0.024120615795254707, -0.003086949000135064, -0.0180226881057024, -0.022221943363547325, 0.02693498693406582, 0.04226521775126457, -0.033780038356781006, -0.012690838426351547, 0.029256662353873253, 0.014897270128130913, -0.009423506446182728, 0.039851635694503784, 0.026840075850486755, 0.034961018711328506, -0.043057121336460114, -0.03751284256577492, 0.025018461048603058, -0.006101841572672129, 0.03379303961992264, 0.025078877806663513, 0.04977934807538986, 0.016042908653616905, 0.03263859078288078, -0.0013583173276856542, 0.0064966436475515366, -0.07644687592983246, 0.003324733814224601, -0.0019942503422498703, 0.031200049445033073, 0.08380961418151855, -0.015248735435307026, 0.02513820491731167, -0.027313224971294403, -0.022236695513129234, -0.0009092416148632765, 0.0027312140446156263, -0.053948793560266495, -0.0632040724158287, 0.03297265246510506, 0.04093404486775398, -0.028291240334510803, 0.0037792876828461885, 0.008668477647006512, 0.021189549937844276, -0.012678735889494419, 0.01709817536175251, 0.006124168634414673, 0.012508322484791279, 0.02937145158648491, -0.019429629668593407, -0.008676998317241669, -0.008337421342730522, 0.01581849716603756, 0.0005990237696096301, 0.01896466128528118, 0.0580112598836422, -0.04598260670900345, 0.017485545948147774, 0.0176051314920187, 0.03120887465775013, 0.027776507660746574, -0.02952740713953972, 0.010790310800075531, 0.06449706852436066, -0.012033598497509956, -0.01490011252462864, -0.03971342369914055, -0.0755910575389862, -0.03876061737537384, 0.05450122803449631, 0.037693288177251816, -0.017877884209156036, 0.011154522188007832, 0.01541613694280386, -0.035829078406095505, 0.025968652218580246, 0.07232753187417984, -0.018814856186509132, 0.03341452032327652, -0.028994470834732056, -0.016394836828112602, 0.03479804843664169, 0.006959754507988691, -0.005728268064558506, -0.0793437510728836, 0.061256226152181625, 0.037069302052259445, -0.0036926332395523787, 0.02611961029469967, 0.021272512152791023, 0.037278153002262115, 0.016077743843197823, -0.0026676971465349197, -0.004513401538133621, 0.03413340821862221, 0.02607492357492447, 0.021650349721312523, 0.0024244084488600492, 0.04419299215078354, 0.05472496896982193, 0.025723014026880264, 0.03370692580938339, -0.014614022336900234, -0.023267623037099838, 0.040920231491327286, 0.044652365148067474, -0.005172654055058956, 0.04051940515637398, 0.005051525309681892, 0.0010328288190066814, -0.014495707117021084, -0.008951844647526741, 0.01358195673674345, -0.005648024845868349, -0.02309538424015045, 0.004738155286759138, 0.018510911613702774, 0.010503451339900494, -0.02596328780055046, -0.0018102808389812708, -0.048946771770715714, -0.0005572776426561177, 0.05651117488741875, 0.057062845677137375, -0.017797967419028282, -0.049632951617240906, 0.06832506507635117, -0.015045874752104282, -0.006516492459923029, 0.005826087202876806, -4.219896800350398e-05, 0.020009633153676987, 0.0010830949759110808, -0.017163069918751717, -0.00935523770749569, -0.08718332648277283, -0.053389403969049454, -0.013362960889935493, 0.03188806399703026, 0.02562035620212555, -0.024922026321291924, -0.02444278821349144, -0.011501861736178398, -0.029737431555986404, 0.011725716292858124, 0.12413392961025238, 0.03958548977971077, 0.03718775138258934, 0.04773017019033432, 0.03471236675977707, -0.0659058541059494, -0.00208974233828485, 0.003397188847884536, 0.009219708852469921, 0.01702350750565529, -0.014361920766532421, 0.04600818455219269, 0.02243504486978054, -0.013060471042990685, 0.018899621441960335, -0.03378316015005112, 0.08052501082420349, 0.018714874982833862, 0.02782730758190155, -0.02843315340578556, 0.01984141580760479, 0.0489637590944767, -0.03291142359375954, -0.027719125151634216, 0.016893742606043816, 0.07846233248710632, -0.019119631499052048, -0.02706146240234375, 0.0586906336247921, -0.033547669649124146, -0.0014340062625706196, 0.021568026393651962, -0.008466796949505806, -0.01303024496883154, 0.05484374240040779, -0.03194548934698105, -0.00044585915748029947, -0.0036091480869799852, 0.005806236527860165, 0.0007106402772478759, -0.029643753543496132, 0.002650459995493293, -0.08054954558610916, -0.0029141572304069996, -0.01974749006330967, -0.02524522878229618, 0.0026464483235031366, -0.0299844853579998, 0.0362243689596653, -0.014848916791379452, -0.05107820779085159, 0.017225580289959908, 0.015199634246528149, 0.044181082397699356, 0.018404897302389145, -0.02555731125175953, 0.017524220049381256, 0.0034502320922911167, -0.006464553065598011, -0.018469849601387978, 0.030721647664904594, -0.07944873720407486, -0.008792581036686897, 0.02627483382821083, 0.030473928898572922, -0.014164134860038757, 0.00974416546523571, 0.014655494131147861, -0.005401588510721922, 0.0327644906938076, 0.010031560435891151, -0.13565580546855927, -0.0018030756618827581, -0.02201501466333866, 0.034727632999420166, 0.05327530577778816, -0.002336416393518448, 0.013015870936214924, 0.010049009695649147, 0.024126656353473663, 0.06691164523363113, 0.028738893568515778, -0.0984632596373558, -0.010201051831245422, -0.00955661479383707, -0.003013464855030179, 0.025180736556649208, -0.014921236783266068, -0.00667417049407959, 0.04205111041665077, 0.0009818710386753082, -0.030864499509334564, 0.011825074441730976, -0.13531282544136047, -0.05985011160373688, 0.0029807621613144875, -0.016545370221138, -0.011260494589805603, -0.010318874381482601, -0.017639683559536934, -0.027495242655277252, 0.010752386413514614, -0.1097666546702385, -0.029221585020422935, -0.030045941472053528, -0.021418577060103416, -0.0659475177526474, -0.02252066507935524, -0.004265727940946817, -0.037892382591962814, 0.007170052733272314, -0.005333576817065477, -0.022445011883974075, -0.03571439906954765, 0.09386730939149857, -0.022331660613417625, 0.01600784622132778, -0.00025718455435708165, -0.01385135855525732, -0.057677749544382095, 0.07939046621322632, -0.023518702015280724, -0.009020373225212097, 0.013483665883541107, -0.003691719379276037, 0.020415818318724632, 0.018296856433153152, -0.02778441086411476, 0.0036637766752392054, -0.001296229544095695, -0.0010399167658761144, 0.028768716380000114, -0.006540370173752308, 0.00414701085537672, -0.008394753560423851, -0.012821534648537636, 0.01928282529115677, -0.03558502346277237, -0.009558005258440971, -0.022615626454353333, 0.031726136803627014, 0.01907137595117092, -0.007893035188317299, 0.020429348573088646, -0.03779648244380951, 0.03299529477953911, -0.0070337955839931965, 0.0021128638181835413, -0.007394574582576752, -0.0037745656445622444, 0.03226088359951973, -0.03232015296816826, -0.012884779833257198, 0.002448933431878686, -0.017063654959201813, -0.059817615896463394, 0.018143411725759506, -0.02018689550459385, 0.02522657811641693, -0.012246957048773766, 0.03186066821217537, 0.004549513105303049, 0.04333018511533737, -0.03633994236588478, 0.08170217275619507, 0.006995723117142916, 0.00814110692590475, 0.05201481655240059, -0.01231411099433899, -0.03376278281211853, 0.04995820298790932, 0.005994840990751982, 0.007442721165716648, -0.03793623298406601, 0.00023424890241585672, -0.052689582109451294, -0.024228591471910477, -0.05654093623161316, -0.008481921628117561, -0.034136369824409485, -0.041700903326272964, -0.013220305554568768, -0.025396082550287247, -0.06590497493743896, 0.004314634948968887, -0.025014838203787804, 0.054759107530117035, -0.012063982896506786, 0.001161233871243894, -0.008183995261788368, -0.030353056266903877, -0.027185766026377678, -0.04238748922944069, 0.0466727688908577, -0.036366064101457596, -0.0026018714997917414, 0.012176497839391232, -0.04636469483375549, 0.018495900556445122, -0.04632970690727234, 0.0017186993500217795, 0.034248918294906616, -0.0009713858598843217, 0.002584039466455579, -0.039161838591098785, 0.006269150413572788, -0.0722799077630043, 0.0041846721433103085, -0.006943091284483671, -0.052184585481882095, 0.01068514958024025, -0.029934247955679893, 0.03109833225607872, 0.0023051495663821697, 0.004937383811920881, 0.016464686021208763]\"\n./train/dugong/n02074367_16898.JPEG,dugong,\"[0.014334495179355145, -0.034492265433073044, 0.027424979954957962, -0.015586075372993946, 0.004330987576395273, -0.032203543931245804, 0.02889249473810196, -0.00760772917419672, 0.03619829937815666, 0.030153347179293633, -0.037834446877241135, -0.02101578563451767, 0.049716487526893616, 0.02289874479174614, -0.0006762125412933528, -0.023938123136758804, -0.001636283122934401, 0.05429702252149582, 0.017135262489318848, 0.020170418545603752, -0.10655242949724197, 0.021334726363420486, 0.01365929190069437, -0.025076115503907204, -0.052896492183208466, 0.007826485671103, -0.01846603862941265, -0.019659660756587982, 0.02402694895863533, -0.00912598054856062, 0.04302302375435829, 0.00643961550667882, 0.010759454220533371, 0.004474778193980455, 0.010112453252077103, 0.011984395794570446, 0.0012348184827715158, 0.050383396446704865, -0.02941036783158779, 0.20474982261657715, -0.015816891565918922, -0.005705585237592459, -0.0035538622178137302, 0.029605718329548836, -0.00933417584747076, -0.023077262565493584, 0.027044041082262993, 0.022316131740808487, -0.009276550263166428, -0.027429889887571335, -0.03851594403386116, 0.008386257104575634, -0.007568973582237959, -0.012806698679924011, 0.00038143209530971944, 0.02392507717013359, -0.06285367906093597, 0.015457860194146633, -0.011647866107523441, -0.01969192922115326, 0.08854995667934418, -0.006654298864305019, 0.012483872473239899, -0.0027761440724134445, -0.05875656381249428, -0.005299219395965338, -0.008571384474635124, 0.09893019497394562, 0.0267353355884552, -0.008800238370895386, 0.06046723574399948, -0.03251213952898979, 0.00010692638898035511, -0.05002840980887413, 0.01871112361550331, -0.014250512234866619, -0.01781594753265381, -0.039275165647268295, 0.004052140284329653, -0.026834577322006226, 5.1385351980570704e-05, 0.008629278279840946, -0.031372424215078354, -0.06046034023165703, 0.04671947658061981, 0.03377305343747139, 0.09063234180212021, -0.020391857251524925, -0.03259137645363808, -0.008059519343078136, 0.01571843959391117, 0.008799683302640915, -0.633354127407074, 0.023057667538523674, -0.02059507556259632, -0.01708158478140831, 0.024978920817375183, -0.01879926770925522, -0.04376776143908501, -0.02669459953904152, -0.0066640181466937065, -0.007272724527865648, -0.06580118834972382, 0.0004173123452346772, 0.008458970114588737, 0.03134765848517418, -0.10848832130432129, -0.04002683609724045, 0.013542630709707737, -0.0247521810233593, -0.008946952410042286, -0.05999615043401718, 0.02746371552348137, -0.028532464057207108, -0.017405720427632332, -0.047125473618507385, 0.019244903698563576, -0.023381026461720467, 0.024021217599511147, 0.0039457958191633224, 0.030999910086393356, 0.05901637673377991, 0.03468604385852814, -0.008302416652441025, -0.040952328592538834, -0.0019523758674040437, -0.02841583453118801, 0.03289851173758507, 0.06623565405607224, -0.01167207770049572, 0.03588981553912163, 0.025618329644203186, -0.03514556959271431, 0.07924777269363403, 0.0013110543368384242, 0.03299030289053917, -0.05226365104317665, -0.02051304094493389, 0.0038859043270349503, -0.03289046138525009, 0.012398566119372845, -0.034341465681791306, 0.015044319443404675, 0.019985148683190346, -0.0042169950902462006, -0.0010711865033954382, -0.02540593035519123, 0.010312964208424091, -0.015797685831785202, 0.02245526760816574, -0.019669413566589355, -0.004270089324563742, -0.014061378315091133, -0.014110328629612923, -0.0008446722640655935, 0.0008737515308894217, 0.033630095422267914, -0.05338587984442711, 0.0033553813118487597, 0.03947858512401581, -0.019452940672636032, -0.0433841198682785, -0.018375389277935028, 0.014210613444447517, 0.025559116154909134, -0.042620617896318436, -0.0010125964181497693, 0.030535373836755753, 0.01481814868748188, 0.004421154968440533, 0.030575964599847794, 0.02769736759364605, 0.008122369647026062, -0.009423479437828064, -0.010237687267363071, 0.020688103511929512, -0.10954795032739639, 0.020939776673913002, -0.031234171241521835, 0.015824075788259506, 0.051462482661008835, -0.023763809353113174, 0.003698056796565652, 0.02055094949901104, -0.005806384142488241, 3.931311221094802e-05, -0.0007337737479247153, -0.05064926669001579, -0.05715322867035866, 0.01777825318276882, -0.002526678144931793, -0.0460004061460495, -0.018884599208831787, 0.011486673727631569, 0.0336022786796093, -0.002565668197348714, 0.022117024287581444, 0.013809668831527233, -0.0832737535238266, 0.01358176488429308, 0.03117264248430729, -0.021114276722073555, -0.03428936377167702, 0.051111988723278046, 0.01944994553923607, 0.030814645811915398, 0.0383664071559906, -0.05358168110251427, 0.015722323209047318, 0.01438100915402174, 0.05225217342376709, 0.03783615306019783, -0.0017736906884238124, 0.01230273861438036, -0.007856438867747784, 0.027508428320288658, 0.0049749501049518585, 0.002245577285066247, 0.01671634614467621, -0.024416500702500343, 0.04370129480957985, 0.05991191789507866, -0.02804229035973549, -0.03205310180783272, 0.026613697409629822, 0.00861411727964878, -0.0030045663006603718, 0.03057142160832882, -0.009754525497555733, 0.026917653158307076, -0.04381454363465309, -0.02961672842502594, 0.020795762538909912, 0.02480526827275753, 0.010107259266078472, -0.030390001833438873, 0.036128394305706024, -0.007057671435177326, -0.008944809436798096, 0.016601020470261574, 0.007210517767816782, 0.04558320343494415, 0.04931957647204399, -0.01758692041039467, -0.015301811508834362, 0.03895612061023712, 0.008969113230705261, 0.020573671907186508, -0.008028958924114704, 0.045440882444381714, 0.015865487977862358, 0.04420951381325722, 0.042320456355810165, -0.04487786069512367, -0.016627255827188492, 0.054126523435115814, -0.016046207398176193, 0.00807823147624731, 0.04764687269926071, 0.027875734493136406, 0.021215515211224556, -0.02668163739144802, -0.04513256624341011, -0.0005644215852953494, 0.031306467950344086, 0.0028088807594031096, 0.019940445199608803, -0.019178833812475204, -0.007982209324836731, -0.01889258809387684, -0.029544131830334663, -0.010375365614891052, -0.014479813165962696, 0.04225391522049904, 0.06199188530445099, -0.034722164273262024, -0.03974501043558121, 0.030467716977000237, -0.004152020439505577, 0.020708225667476654, 0.013793090358376503, -0.022127697244286537, 0.0008270328398793936, -0.01188820693641901, 0.011689958162605762, -0.0059053427539765835, -0.12330147624015808, -0.056226663291454315, -0.022291650995612144, -0.0031745547894388437, 0.019062869250774384, 0.02742091566324234, 0.013026521541178226, -0.008276797831058502, -0.012406188063323498, 0.02523209899663925, 0.09783551841974258, 0.03711043298244476, 0.04318208619952202, 0.03516114503145218, 0.036296214908361435, -0.020339524373412132, -0.005015258211642504, 0.002006386173889041, 0.03839273750782013, 0.006590509787201881, 0.02881776914000511, 0.037162184715270996, 0.03383404016494751, -0.015397203154861927, -0.008961656130850315, 0.010814734734594822, 0.07911940664052963, 0.0380425862967968, 0.0542747862637043, 0.0026654584798961878, 0.013028901070356369, 0.053897660225629807, -0.01779591105878353, -0.03094480000436306, 0.011267051100730896, 0.10370690375566483, -0.03795447200536728, -0.02413557656109333, 0.031083840876817703, -0.0831611305475235, 0.011007562279701233, 0.007313715294003487, -0.017797771841287613, -0.000375597010133788, -0.008952431380748749, 0.007471286226063967, -0.002381635596975684, -0.027221310883760452, 0.005267561413347721, 0.010497158393263817, -0.04664469510316849, 0.00974646769464016, -0.032997313886880875, 0.013245887123048306, -0.025399763137102127, -0.039802756160497665, 0.009904269129037857, -0.010029472410678864, -0.0018552246037870646, -0.0051499162800610065, -0.019125228747725487, 0.009392744861543179, 0.02394992485642433, 0.03482634201645851, -0.027872325852513313, -0.003428985131904483, -0.000435311027104035, -0.0074302200227975845, -0.01291623618453741, 0.016631770879030228, 0.01982015371322632, 0.0075689456425607204, 0.013920627534389496, -0.012140847742557526, 0.0626285970211029, -0.03986744582653046, -0.026079611852765083, 0.011421135626733303, -0.0482809916138649, 0.006417668424546719, 0.005288983229547739, -0.10369419306516647, -0.03145167976617813, 0.0005720913759432733, 0.031240103766322136, 0.04375334829092026, 0.029806729406118393, 0.04074821621179581, 0.04836201295256615, 0.032743047922849655, 0.08878179639577866, 0.06080141291022301, -0.0915503203868866, -0.009531056508421898, 0.04501552879810333, -0.040355097502470016, 0.05098317563533783, 0.006451113615185022, 0.01409910898655653, 0.03024587780237198, -0.01654745452105999, -0.025724971666932106, -0.019381752237677574, -0.08346971124410629, 0.012671257369220257, -0.011566156521439552, 0.019589167088270187, -0.005893734283745289, -0.0010940474458038807, -0.020783763378858566, -0.03663674369454384, 0.008115013130009174, -0.09837569296360016, -0.024229587987065315, -0.01900356076657772, -0.018127938732504845, -0.03674088045954704, -0.011153756640851498, 0.0077055878937244415, -0.030604643747210503, 0.0049110171385109425, -0.0025087816175073385, 0.04144726321101189, -0.04492214322090149, 0.08311246335506439, -0.021970456466078758, 0.011852423660457134, 0.02284894324839115, -0.013054666109383106, -0.050693899393081665, 0.0644349679350853, -0.0054094223305583, 0.014238237403333187, -0.010433735325932503, -0.013611899688839912, -0.02137961983680725, 0.04440956935286522, -0.05993795394897461, 0.0018655727617442608, -0.03631489351391792, -0.0006292174221016467, 0.028143998235464096, -0.005245855078101158, -0.023934070020914078, -0.023729784414172173, 0.016259953379631042, 0.038545407354831696, -0.012919750064611435, -0.015974130481481552, -0.01888471283018589, 0.010444406419992447, 0.02269856259226799, -0.005156760569661856, -0.04286973923444748, -0.025838932022452354, 0.05914601311087608, -0.009559025056660175, 0.021133868023753166, -0.01778540015220642, -0.00707729859277606, -0.012623876333236694, -0.06005650758743286, -0.024813976138830185, 0.04112112522125244, 0.01255093514919281, -0.06347229331731796, 0.027877291664481163, -0.007019920740276575, 0.04705115780234337, -0.01367732509970665, 0.02585938759148121, 0.015237471088767052, 0.013019789941608906, -0.0133896479383111, 0.046741023659706116, 0.02845238335430622, 0.045537687838077545, 0.008009208366274834, -0.012814422138035297, 0.004734078422188759, -0.0005681188777089119, 0.017261451110243797, -0.009916829876601696, -0.04172268137335777, 0.002664902014657855, -0.04103245213627815, 0.00041728277574293315, -0.03729239106178284, -0.009942171163856983, -0.05453311651945114, -0.05043952912092209, -0.028992310166358948, 0.005964404437690973, -0.019935786724090576, -0.01244533620774746, -0.012990414164960384, -0.02520545944571495, -0.021805966272950172, -0.014796092174947262, -0.039020344614982605, -0.019409630447626114, -0.035027969628572464, -0.05230648070573807, 0.0431467667222023, -0.01466622669249773, -0.010528389364480972, 0.033421698957681656, -0.06029679626226425, 0.015061764977872372, -0.013051937334239483, 0.001127475406974554, 0.017302721738815308, -0.00528267165645957, 0.0026319571770727634, -0.029925981536507607, 0.029020821675658226, -0.034782931208610535, -0.014650147408246994, 0.013057835400104523, -0.06705844402313232, 0.012613525614142418, 0.00017981616838369519, -0.032591160386800766, 0.03091825731098652, 0.033722057938575745, 0.011668330989778042]\"\n./train/dugong/n02074367_2045.JPEG,dugong,\"[0.07194062322378159, -0.05739408731460571, -0.026444265618920326, -0.011288334615528584, -0.002229457488283515, -0.06363925337791443, 0.033400509506464005, 0.02347916178405285, 0.03959059342741966, 0.031095119193196297, -0.041227757930755615, 0.0206455048173666, 0.0964638739824295, 0.001482407795265317, 0.011850645765662193, 0.014110798947513103, 0.08764038980007172, 0.06015113368630409, 0.01602417603135109, 0.014686442911624908, -0.10157907754182816, 0.017119651660323143, 0.007513341959565878, -0.05974941700696945, -0.006200331263244152, 0.02016717754304409, -0.022080475464463234, -0.03854653984308243, -0.0004482115327846259, -0.007234202232211828, 0.04327920451760292, 0.015279138460755348, 0.03334658220410347, -0.028644636273384094, 0.010664023458957672, -0.015955863520503044, -0.016626732423901558, 0.001400618813931942, -0.009673955850303173, 0.17046231031417847, -0.03995721787214279, 0.014042495749890804, 0.0035162472631782293, 0.016833655536174774, -0.03162601962685585, -0.010393115691840649, 0.036919254809617996, 0.04650839418172836, -0.002436503767967224, -0.011812703683972359, -0.057661037892103195, 0.003091038204729557, -0.01797224022448063, -0.002238948829472065, 0.02650252729654312, 0.013287948444485664, -0.05876921862363815, 0.005874525755643845, -0.028703944757580757, -0.008395847864449024, 0.08355449140071869, 0.028429998084902763, -0.04442315548658371, -0.0290455911308527, 0.015830127522349358, -0.019970932975411415, -0.014524378813803196, 0.03942190855741501, 0.01761980913579464, 0.008558174595236778, 0.017940016463398933, -0.03178773447871208, -0.018522964790463448, -0.011625676415860653, -0.003978946711868048, -0.0336310975253582, 0.004862598143517971, -0.04135352000594139, 0.005243735853582621, -0.013909618370234966, -0.011493858881294727, 0.007822810672223568, -0.03457935154438019, -0.0989481508731842, 0.05372360348701477, 0.028723502531647682, 0.04571510851383209, -0.007887699641287327, -0.0341867133975029, 0.0148747768253088, 0.03423869237303734, -0.010020147077739239, -0.651354193687439, 0.041705504059791565, -0.00865898560732603, -0.006574404891580343, 0.07010501623153687, 0.0022195340134203434, -0.0437406487762928, -0.03935430198907852, -0.011597912758588791, -0.032239947468042374, -0.06816153228282928, -0.03737471252679825, 0.034597016870975494, 0.04144058749079704, -0.14131496846675873, 0.010108398273587227, 0.04651045799255371, -0.01961459405720234, -0.02113260328769684, 0.014567370526492596, 0.024955108761787415, 0.003798216348513961, 0.015931973233819008, -0.03497490659356117, 0.012786062434315681, -0.04049650952219963, -0.004896002355962992, 0.005848958622664213, -0.00019170640734955668, 0.010636269114911556, 0.05879255756735802, 0.021202528849244118, -0.0069112153723835945, 0.041548047214746475, -0.0032339966855943203, 0.04518342763185501, 0.05059676989912987, -0.017493711784482002, 0.01587056741118431, 0.007633564993739128, -0.01978367567062378, 0.08070557564496994, -0.0012150858528912067, 0.022898763418197632, -0.016903134062886238, -0.021320994943380356, 0.02399601973593235, -0.045769739896059036, 0.030607353895902634, -0.03736754134297371, -0.023246437311172485, 0.004276578780263662, 0.035554204136133194, 0.025483042001724243, -0.014063880778849125, 0.006141405086964369, -0.013003319501876831, -0.002669020090252161, 0.03355368599295616, 0.016498390585184097, -0.03236958757042885, -0.009814907796680927, -0.019294576719403267, 0.014494387432932854, 0.0057985675521194935, -0.011089939624071121, -0.027218854054808617, -0.014423765242099762, -0.03665105625987053, -0.017709650099277496, 0.00972102303057909, 0.016339126974344254, 0.04366518557071686, -0.011505999602377415, -0.03194846585392952, -0.02487529255449772, 0.01555350050330162, 0.023461604490876198, 0.042605116963386536, 0.036484021693468094, 0.030675996094942093, -0.029360879212617874, -0.03881344944238663, 0.009553469717502594, -0.011671055108308792, 0.0021710493601858616, -0.0085176732391119, 0.019919930025935173, 0.04228907451033592, 0.004521958064287901, 0.032984957098960876, 0.021006707102060318, 0.013239809311926365, 0.014443275518715382, 0.004563555587083101, -0.04332873970270157, -0.015191678889095783, 0.006448257714509964, 0.00020979881810490042, -0.027300814166665077, -0.021476810798048973, -0.016472050920128822, 0.07672230899333954, 0.020739296451210976, 0.0314510278403759, -0.013265310786664486, 0.05697568506002426, -0.014589108526706696, 0.01699715666472912, -0.00911771971732378, -0.039180606603622437, -0.003445782931521535, -0.004648360889405012, 0.018674436956644058, 0.013142548501491547, -0.0266887117177248, 0.05249875783920288, -0.01144865620881319, 0.05307389050722122, 0.024238551035523415, -0.024147575721144676, -0.013718817383050919, -0.014265350066125393, 0.04374033212661743, -0.013236476108431816, 0.008067861199378967, 0.01701514795422554, -0.017493173480033875, 0.10233956575393677, 0.035910941660404205, 0.010690862312912941, 0.006619417108595371, 0.013135609216988087, 0.028125235810875893, 0.029312169179320335, 0.040944408625364304, 0.008444545790553093, 0.006267819553613663, 0.0012991850962862372, -0.00877236295491457, 0.0041661676950752735, 0.02708355523645878, 0.005989067256450653, -0.03837175667285919, 0.023997077718377113, 0.004948638845235109, -0.006614095531404018, 0.014312286861240864, 0.01339045725762844, 0.012468417175114155, 0.022921303287148476, 0.03048321232199669, 0.020511791110038757, 0.025428693741559982, -0.019669106230139732, -0.004339741542935371, -0.02909172512590885, 0.028800617903470993, 0.0026679530274122953, 0.05354541912674904, 0.041854750365018845, -0.037379246205091476, -0.007661917246878147, 0.006615434307605028, 0.01702992245554924, 0.02073839120566845, 0.08923935890197754, -0.026312613859772682, -0.020228689536452293, -0.04348546639084816, 0.0070650335401296616, 0.006723672617226839, -0.009447556920349598, 0.030553236603736877, 0.006814613007009029, -0.017534159123897552, 0.014798558317124844, -0.044399771839380264, 0.016461078077554703, -0.031053990125656128, 0.03395044058561325, 0.023424912244081497, 0.028261449187994003, 0.009220723062753677, 0.012221273966133595, 0.06649613380432129, -0.027747061103582382, -0.007682324852794409, 0.007220044732093811, -0.0037843319587409496, 0.03394012525677681, 0.023275531828403473, -0.0018222079379484057, -0.03675353154540062, -0.04252127930521965, -0.03256116807460785, -0.036371808499097824, 0.006331543903797865, 0.04017475247383118, 0.030166471377015114, -0.045579809695482254, 0.004196882247924805, 0.002223280956968665, 0.028653189539909363, 0.13219933211803436, 0.01255820319056511, 0.023198170587420464, 0.031841594725847244, -0.008157558739185333, -0.04578971862792969, 0.002228977158665657, 0.01250174269080162, -0.015106560662388802, 0.00845314096659422, -0.008758299052715302, 0.013509614393115044, 0.008703440427780151, 0.00993467029184103, -0.006396365351974964, -0.04559878259897232, 0.08062540739774704, 0.04632573947310448, 0.04135571047663689, -0.04448891803622246, 0.034444842487573624, 0.06345176696777344, 0.009640899486839771, -0.04422035068273544, -0.0016303955344483256, 0.08787541836500168, 0.02078763209283352, -0.030249260365962982, 0.017102064564824104, -0.04068471118807793, -0.026416165754199028, 0.005758463870733976, -0.0194855984300375, 0.025894371792674065, -0.003831523470580578, -0.02576795406639576, 0.04378242790699005, -0.023668885231018066, 0.022999640554189682, 0.013064502738416195, -0.039740242063999176, 0.023092471063137054, -0.029604291543364525, 0.01474651601165533, -0.0027329260483384132, -0.0002559974091127515, -0.04022166505455971, -0.0030510660726577044, 0.010905609466135502, -0.020309818908572197, -0.025200162082910538, 0.01216572243720293, -0.02218150720000267, 0.013890046626329422, 0.003639188362285495, -0.02207369916141033, 0.04454582929611206, -0.007214391138404608, -0.008364995010197163, 0.03449186682701111, 0.013751400634646416, -0.0843573734164238, -0.020618394017219543, 0.017513830214738846, 0.038890525698661804, -0.03767341002821922, 0.039797987788915634, 0.013674476183950901, -0.08455691486597061, 0.013337681069970131, 0.059873949736356735, -0.10999716073274612, -0.021750736981630325, -0.012779290787875652, -0.0018823618302121758, 0.05677078291773796, -0.021325524896383286, 0.029110750183463097, 0.02278207615017891, 0.018761731684207916, 0.020113255828619003, 0.047316621989011765, -0.06752302497625351, -0.012577426619827747, 0.007331622298806906, -0.0061549958772957325, 0.013419515453279018, -0.028320956975221634, -0.024102305993437767, 0.024770377203822136, -0.009493527002632618, -0.018691744655370712, 0.03449401259422302, -0.1006380245089531, -0.038801249116659164, -0.039184242486953735, 0.002791560487821698, -0.03391161188483238, 0.019279664382338524, -0.011651438660919666, 0.006236386019736528, -0.006392103619873524, -0.07038838416337967, -0.026129014790058136, -0.024988839402794838, -0.013592918403446674, -0.03185363858938217, -0.040520016103982925, -0.01364525593817234, -0.02924150787293911, 0.005810888484120369, -0.023114023730158806, 0.024028709158301353, -0.034223828464746475, 0.1041695773601532, 0.026050293818116188, 0.0050387210212647915, 0.016365453600883484, -0.004987751599401236, -0.0338798351585865, 0.033402904868125916, -0.03401044383645058, -0.00044265767792239785, -0.006489642895758152, -0.0007766003254801035, -0.006686663255095482, -0.01801760494709015, -0.023919790983200073, 0.03178119659423828, -0.019620832055807114, 0.03962361440062523, -0.012032254599034786, -0.0034999314229935408, -0.05141749978065491, -0.007862351834774017, -0.02339843288064003, 0.025177597999572754, -0.046363964676856995, 0.002243147464469075, -0.0173955075442791, 0.03302866220474243, 0.0360468327999115, -0.007639802526682615, -0.018148330971598625, -0.058110691606998444, 0.021128010004758835, -0.023662878200411797, 0.0021407827734947205, -0.009705311618745327, 0.015013615600764751, 0.02188003808259964, -0.016204606741666794, 0.022760160267353058, 0.02958664670586586, -0.011176218278706074, -0.046519678086042404, -0.015346920117735863, -0.028070326894521713, 0.023001356050372124, -0.02550446055829525, 0.034941330552101135, 0.003287711413577199, 0.03377543017268181, -0.024640655145049095, 0.06275948137044907, 0.01092746201902628, 0.0534353144466877, 0.02102750539779663, 0.004242081195116043, 0.009692980907857418, 0.011618302203714848, 0.019415056332945824, 0.0244491845369339, 0.009341106750071049, 0.0266116913408041, -0.04207374155521393, 0.05157032608985901, -0.014251615852117538, 0.04266737028956413, -0.04470793157815933, -0.02234533242881298, -0.014922617934644222, 0.01529752928763628, -0.03746187314391136, 0.027648532763123512, -0.0035776980221271515, 0.015506770461797714, -0.02657240815460682, -0.010703855194151402, 0.0001445290254196152, 0.0073676700703799725, 0.007131940685212612, -0.028353266417980194, 0.059216056019067764, -0.056130025535821915, 0.011678648181259632, 0.01838369481265545, -0.03843976557254791, 0.006335386540740728, -0.04372715204954147, -0.011647261679172516, 0.03966471552848816, 0.011076043359935284, -0.017881212756037712, -0.004791109822690487, 0.04452779144048691, -0.030568722635507584, 0.01594681106507778, -0.027008116245269775, -0.0441771075129509, 0.002814193721860647, -0.013545152731239796, -0.03343520686030388, 0.03698071837425232, 0.018673380836844444, 0.0057456050999462605]\"\n./train/Bouvier_des_Flandres/n02106382_2474.JPEG,Bouvier_des_Flandres,\"[0.0496794618666172, -0.018465109169483185, -0.011707065626978874, 0.03344643861055374, -0.01896972954273224, -0.08264323323965073, 0.06379981338977814, -0.06125982105731964, 0.0695129856467247, 0.012703300453722477, -0.016732530668377876, 0.027071507647633553, 0.04216315969824791, 0.006029782351106405, 0.00955538172274828, 0.011079884134232998, 0.06055738404393196, -0.032896529883146286, 0.007549590896815062, -0.006008050870150328, -0.114920973777771, 0.000427702849265188, 0.026041775941848755, -0.02876785583794117, 0.00022935042215976864, -0.013606141321361065, 0.05281816050410271, 0.03400541469454765, 0.02181803248822689, -0.032127659767866135, 0.007992574013769627, 0.00015870554489083588, 0.0027231224812567234, 0.019836550578475, -0.016065126284956932, 0.02108977548778057, 0.048947952687740326, -0.02288190834224224, -0.01973511092364788, 0.09313663095235825, -0.033250175416469574, 0.014284764416515827, 0.02777012065052986, -0.024695197120308876, 0.004502511583268642, -0.04736999422311783, 0.0368003249168396, 0.019443796947598457, 0.004933389835059643, -0.015243375673890114, -0.044290799647569656, 0.035383954644203186, -0.011971700936555862, -0.009790394455194473, 0.01028494257479906, 0.029338806867599487, -0.06632186472415924, 0.0011693345149978995, 0.007915270514786243, -0.03555797040462494, 0.03388749808073044, 0.0006708340952172875, 0.06837427616119385, 0.04749448597431183, -0.014155300334095955, -0.02477540262043476, -0.025142185389995575, 0.0552135668694973, -0.03178318217396736, -0.02270992286503315, 0.015586299821734428, 0.011562874540686607, 0.04900359362363815, 0.0512530691921711, -0.007306328043341637, -0.0014100342523306608, -0.009458142332732677, -0.04414831101894379, -0.00036648695822805166, 0.013655712828040123, 0.007568159140646458, -0.02329491823911667, -0.010103212669491768, -0.046795569360256195, -0.049078743904829025, -0.05016913264989853, 0.07538022100925446, -0.05643163621425629, 0.023645050823688507, 0.016412654891610146, 0.011042297817766666, -0.07808788120746613, -0.5937735438346863, 0.031339600682258606, -0.009405973367393017, -0.014134975150227547, -0.011209159158170223, -0.014378879219293594, -0.07895510643720627, 0.13581110537052155, -0.009564090520143509, -0.022358911111950874, -0.005390767939388752, -0.003329214872792363, 0.07539434731006622, -0.0836879312992096, 0.0784493014216423, 0.019486557692289352, -0.01781526952981949, -0.024631602689623833, 0.011850456707179546, -0.05764232948422432, 0.00486059719696641, -0.03337777405977249, 0.02728918194770813, 0.008938411250710487, -0.034453023225069046, -0.050817396491765976, 0.025346990674734116, -0.025842586532235146, 0.033648282289505005, 0.006170340348035097, -0.03182889521121979, 0.027305448427796364, 0.016442399471998215, -0.044386014342308044, 0.009779275394976139, 0.0287281796336174, -0.007441911846399307, -0.008091493509709835, -0.012948852963745594, 0.012182340025901794, -0.019095052033662796, 0.07743210345506668, -0.07355846464633942, -0.009128505364060402, -0.04406091570854187, 0.0006123541970737278, 0.0064856079407036304, 0.03155575320124626, 0.008824113756418228, 0.006686870474368334, -0.018384020775556564, 0.0340014211833477, -0.01855328120291233, 0.060732804238796234, 0.04625027999281883, -0.007644726894795895, -0.007943538948893547, 0.022955944761633873, -0.010036339983344078, 0.026422889903187752, 0.005379306618124247, 0.010843314230442047, -0.004767025355249643, 0.01964990794658661, -0.01171300932765007, -0.011114126071333885, 0.026863573119044304, -0.006638902239501476, -0.02998855523765087, 0.013952638953924179, -0.004850029479712248, 0.021507503464818, 0.009223933331668377, -0.035837918519973755, -0.03787270188331604, 0.013951285742223263, -0.00036849002935923636, 0.004822141025215387, -0.013148190453648567, 0.019429050385951996, 0.027991995215415955, -0.06050930917263031, 0.00044321498717181385, 0.009410275146365166, 0.06866682320833206, 0.02031673491001129, 0.00766426557675004, -0.03436886519193649, -0.006180668715387583, 0.005526622291654348, 0.005585316568613052, -0.02079458348453045, 0.006412011571228504, -0.019282273948192596, 0.05708391219377518, 0.020715612918138504, 0.038217537105083466, 0.025911206379532814, 0.02290312759578228, -0.010253764688968658, 0.016119124367833138, -0.021685542538762093, 0.04493597894906998, 0.03246178850531578, 0.011007719673216343, -0.05184951797127724, -0.11668837070465088, -0.0026212972588837147, 0.019995316863059998, 0.04015378654003143, -0.003027004422619939, 0.010247970931231976, -0.06620287895202637, -0.10710009932518005, 0.011734229512512684, -0.00497073819860816, -0.003497925354167819, -0.02818487025797367, -0.06241002678871155, 0.01133698783814907, 0.013766927644610405, 0.025418957695364952, -0.04560837149620056, -0.010297597385942936, -0.06070047989487648, 0.021970760077238083, 0.07739569246768951, 0.01186797022819519, 0.03327122703194618, -0.0030139037407934666, -0.008293620310723782, 0.04831770062446594, -0.03460937738418579, 0.019289258867502213, -0.009644294157624245, -0.05399426817893982, 0.04834107309579849, -0.007858369499444962, 0.019827591255307198, -0.008322391659021378, -0.017900314182043076, 0.05241516977548599, 0.01728653721511364, 0.042189259082078934, -0.0209383312612772, 0.0019052978605031967, 0.014217808842658997, -0.011533376760780811, 0.01902502216398716, 0.008236070163547993, 0.007800932042300701, 0.021119626238942146, -0.0056077949702739716, 0.1039675623178482, 0.004948507063090801, -0.08081645518541336, 0.0003998773463536054, 0.06490127742290497, 0.025793706998229027, 0.004326872527599335, 0.05368759110569954, 0.03391304239630699, 0.006574797909706831, -0.002929513342678547, 0.01593245007097721, 0.06618726998567581, 0.03549628332257271, -0.009407533332705498, -0.04805814102292061, 0.012965980917215347, 0.00787603110074997, -0.024781854823231697, 0.028425736352801323, -0.014048002660274506, -0.016610683873295784, -0.03713034838438034, -0.05161818116903305, 0.020933324471116066, -0.002862815512344241, 0.03022732026875019, 0.053080879151821136, -0.014442464336752892, -0.044379737228155136, -0.013384668156504631, -0.0021201118361204863, -0.012145609594881535, -0.01626432314515114, -0.023231783881783485, -0.016057360917329788, 0.008282780647277832, -0.07843424379825592, -0.023588864132761955, -0.0455770418047905, -0.02566276118159294, 0.06159435957670212, -0.014771930873394012, -0.005790513474494219, 0.0014529138570651412, -0.007775516714900732, 0.05757049471139908, 0.005105333868414164, -0.008287329226732254, 0.00030852697091177106, 0.011425256729125977, 0.03008374385535717, -0.01406086701899767, -0.0016085788374766707, 0.029797090217471123, 0.00987439788877964, -0.013800178654491901, 0.007583183702081442, -0.003998685162514448, 0.034178536385297775, -0.011990557424724102, 0.029364457353949547, 0.04322744905948639, 0.024932192638516426, -0.002969472436234355, -0.016269365325570107, 0.07935724407434464, 0.07727238535881042, 0.00255073350854218, 0.03218691796064377, -0.008479293435811996, 0.04731522500514984, 0.06256458163261414, -0.03264981880784035, 0.027680840343236923, 0.003027449594810605, -0.0002370808069827035, 0.027524631470441818, 0.0074324537999928, 0.03381295129656792, 0.05015471577644348, -0.01383869256824255, 0.03772445395588875, -0.056209746748209, -0.017763474956154823, 0.0042152414098382, -0.016012709587812424, 0.053031716495752335, 0.02131050080060959, -0.014234626665711403, 0.011687565594911575, 0.011342853307723999, 0.018849629908800125, -0.0051225232891738415, 0.020387746393680573, 0.016456851735711098, 0.00898536667227745, -0.01394167635589838, -0.005204412620514631, 0.034272998571395874, 0.03809913620352745, -0.003049205057322979, 0.015593052841722965, -0.017083099111914635, 0.007944153621792793, 0.01725953444838524, 0.01759166084229946, 0.007429583463817835, -0.0063167475163936615, -0.0005276940064504743, 0.10386712104082108, -0.002031713956966996, -0.06713595241308212, 0.022060800343751907, -0.004527826327830553, 0.015225809998810291, -0.010996890254318714, 0.03356359526515007, -0.05539718270301819, -0.13476267457008362, 0.0018453698139637709, -0.01375729963183403, 0.024979909881949425, 0.041501034051179886, -0.01137250754982233, 0.004913555458188057, 0.006493310444056988, 0.009729539975523949, 0.018816741183400154, 0.005375624634325504, 0.012878251262009144, 0.17519409954547882, -0.008537376299500465, -0.023437799885869026, 0.04576623812317848, 0.015957064926624298, -0.04389837384223938, 0.024501586332917213, 0.030026674270629883, 0.018943550065159798, -0.02129264362156391, -0.00016376885469071567, 0.009148144163191319, 0.058042313903570175, -0.12787273526191711, -0.0624028705060482, -0.04958178848028183, 0.03198022022843361, -0.0026754429563879967, 0.010928557254374027, -0.0342746265232563, -0.029296962544322014, 0.022309882566332817, 0.03622979670763016, -0.06764008104801178, -0.01839166320860386, -0.010868912562727928, 0.023281807079911232, 0.06196923553943634, -0.013849214650690556, 0.0034708285238593817, 0.009767117910087109, -0.01868731901049614, 0.010681746527552605, -0.018742717802524567, 0.03960596024990082, 0.005418871063739061, -0.03501418977975845, 0.020045826211571693, 0.010593683458864689, -0.0008163520251400769, 0.034156087785959244, -0.027460267767310143, 0.029953239485621452, -0.0016946111572906375, 0.0064837876707315445, -0.0004810079117305577, -0.056051433086395264, 0.014386135153472424, 0.010629178956151009, -0.022085901349782944, -0.010785358026623726, 0.023717818781733513, 0.05601957440376282, -0.0011538704857230186, -0.032033856958150864, 0.004785848315805197, 0.039326827973127365, 0.005905132740736008, 0.026246342808008194, -0.021865364164114, -0.004909570794552565, 0.011930241249501705, -0.04459051042795181, -0.03486672043800354, 0.024888901039958, -0.03730258345603943, -0.013014069758355618, -0.04730574041604996, 0.019138939678668976, -0.031620852649211884, 0.013755949214100838, 0.015516501851379871, -0.0008659627637825906, -0.028759930282831192, 0.0025192706380039454, -0.044963546097278595, -0.02737770788371563, 0.013836954720318317, -0.02416153810918331, -0.03686380013823509, -0.021491240710020065, 0.04415837302803993, 0.05137210711836815, 0.04521176964044571, 0.0005252778646536171, 0.011860519647598267, -0.006812915205955505, 0.01757047511637211, 0.01197279617190361, 0.016049034893512726, -0.03722710162401199, 0.026473790407180786, -0.044036224484443665, 0.048883285373449326, 0.0498342290520668, 0.004177277907729149, -0.028078360483050346, -0.02932048588991165, -0.03231561928987503, -0.011521425098180771, -0.004688153974711895, -0.05397261306643486, -0.03193862736225128, 0.00714215449988842, 0.02926400490105152, 0.040955208241939545, -0.017717652022838593, -0.02646292932331562, 0.007122327107936144, 0.022869495674967766, 0.012534783221781254, 0.015049602836370468, 0.030871771275997162, 0.011352339759469032, -0.051779817789793015, -0.01844615861773491, -0.02122245356440544, -0.006886843591928482, 0.04975712299346924, -0.011514324694871902, 0.006115340162068605, 0.0619291327893734, -0.020654231309890747, -0.033986467868089676, 0.005483059212565422, -0.018058953806757927, -0.020337015390396118, 0.06968596577644348, -0.06480441987514496, 0.015238611958920956, -0.014125484973192215, -0.025867201387882233, -0.01486493181437254, 0.1086299866437912, 0.007169046904891729, 0.007562065962702036]\"\n./train/Bouvier_des_Flandres/n02106382_2705.JPEG,Bouvier_des_Flandres,\"[0.02006162889301777, 0.03444470465183258, -0.0660146176815033, 0.020089689642190933, 0.016985762864351273, -0.043275050818920135, -0.024725375697016716, 0.011373573914170265, 0.04724521189928055, 0.05645564943552017, -0.021439872682094574, -0.030152518302202225, -0.008231193758547306, -0.022875990718603134, 0.04324689507484436, -0.0031455266289412975, 0.0442187562584877, -0.00545738497748971, -0.021320093423128128, -0.014012085273861885, -0.015342459082603455, 0.02766941301524639, 0.01779610849916935, -0.045439496636390686, -0.03983202204108238, 0.060213759541511536, 0.06186379864811897, -0.00781146390363574, 0.003116422798484564, 0.006610238924622536, -0.037929240614175797, 0.031835343688726425, -0.023522019386291504, -0.024522164836525917, -0.09020192176103592, 0.07930819690227509, 0.008221770636737347, -0.04249240458011627, -0.0024464379530400038, 0.04661586880683899, -0.003704823786392808, 0.011455798521637917, -0.03840995207428932, 0.013408822938799858, -0.021717527881264687, -0.026286305859684944, 0.02668062411248684, 0.00015489642100874335, 0.03480051830410957, -0.013560702092945576, -0.06269731372594833, -0.001456460915505886, 0.0027353365439921618, -0.006781408097594976, 0.0584295392036438, -0.019323375076055527, -0.013701210729777813, 0.04531720280647278, 0.0025634949561208487, -0.025981862097978592, -0.020405372604727745, -0.017763929441571236, 0.06765817850828171, 0.05164607986807823, -0.012693843804299831, -0.026158833876252174, 0.07080937922000885, 0.06974032521247864, -0.003630279563367367, -0.008558575995266438, 0.0274399034678936, -0.04020131751894951, 0.003939101472496986, 0.07802855223417282, 0.023788021877408028, -0.00726745231077075, -0.014256683178246021, -0.013916173949837685, 0.011350578628480434, 0.002296536462381482, 0.03938762843608856, -0.005499701015651226, -0.015340695157647133, -0.027221661061048508, 0.0213185865432024, 0.00998389720916748, 0.09458532929420471, -0.04496061056852341, 0.02118069864809513, -0.010908796451985836, 0.050089795142412186, -0.07370651513338089, -0.5370180010795593, 0.04282296821475029, -0.013046903535723686, -0.015068937093019485, -0.021979115903377533, 0.013383990153670311, -0.0471530482172966, 0.07179372757673264, -0.0017999270930886269, -0.04663553461432457, 0.05047633871436119, 0.014595754444599152, 0.009843469597399235, 0.003339342540130019, 0.05492599681019783, 0.013211947865784168, 0.0067656151950359344, 0.019133148714900017, -0.007306946441531181, -0.03606206178665161, -0.010183924809098244, -0.01048896461725235, 0.022621843963861465, -0.051111072301864624, -0.07094217836856842, 0.018921392038464546, -0.028258008882403374, -0.00020104747090954334, 0.05280814319849014, 0.02421034686267376, -0.014803300611674786, 0.0269827451556921, 0.021468013525009155, -0.06375587731599808, -0.019277814775705338, 0.0489954799413681, -0.015470408834517002, -0.03393935412168503, 0.046804700046777725, -0.03465016558766365, 0.04314842447638512, 0.08024763315916061, -0.0032387555111199617, -0.016155552119016647, -0.005978616885840893, -0.050548117607831955, -0.041026342660188675, -0.01692359149456024, -0.02309035137295723, 0.005192174576222897, 0.03216751664876938, 0.01922302320599556, 0.0005691712140105665, 0.0255036111921072, 0.03567791357636452, -0.03550702705979347, -0.024410566315054893, 0.023339709267020226, -0.016016505658626556, -0.02193577215075493, -0.010610406287014484, 0.05617618188261986, -0.04676061123609543, 0.017690172418951988, 0.02125675603747368, -0.04309208691120148, 0.04225938022136688, -0.001708020456135273, -0.04680965840816498, 0.02806250937283039, -0.023263074457645416, 0.03976229205727577, 0.01319882646203041, -0.01605265960097313, 0.035281453281641006, -0.002338543301448226, 0.04221585765480995, 0.01985100843012333, 0.008554473519325256, 0.016902251169085503, 0.03076649084687233, -0.05272083729505539, 0.017790554091334343, -0.03284129872918129, -0.01237462367862463, 0.008647994138300419, -2.350556314922869e-06, -0.044746316969394684, -0.021214377135038376, -0.002080873353406787, -0.00877823680639267, -0.04257648065686226, -0.011228552088141441, -0.004339019302278757, 0.047176092863082886, -0.03808444365859032, 0.05722438544034958, 0.01582651399075985, 0.024478817358613014, 0.023546798154711723, 0.03542247787117958, -0.01475288812071085, -0.0930413007736206, 0.025907067582011223, -0.010117745026946068, -0.007451470009982586, -0.11550966650247574, -0.020428605377674103, 0.0029977953527122736, 0.05733056366443634, 0.008326631970703602, 0.03520161658525467, -0.05094242841005325, -0.04374067112803459, 0.038675952702760696, -0.00861339457333088, -0.020230840891599655, 0.027155814692378044, 0.027441048994660378, 0.00026467544375918806, 0.01478795800358057, 0.02234850451350212, -0.02717023715376854, -0.061812058091163635, -0.021492991596460342, 0.05558152496814728, 0.06443814188241959, 0.007420168723911047, -0.023862643167376518, 0.009824102744460106, -0.010468115098774433, 0.00776051776483655, -0.000835048034787178, 0.010712836869060993, -0.014545372687280178, 0.01991318166255951, -0.011016538366675377, 0.0016916639870032668, -0.021910367533564568, 0.06888391077518463, -0.01123756729066372, 0.08473765850067139, -0.021422788500785828, -0.05890064686536789, -0.021662075072526932, 0.014977404847741127, 0.006934452801942825, -0.054982323199510574, 0.010158129967749119, 0.0008272917475551367, 0.007155762054026127, -0.03344328701496124, -0.06881061941385269, 0.06810138374567032, 0.04982350394129753, -0.05682580545544624, -0.0030963958706706762, 0.04893207177519798, -0.001048179343342781, 0.040864743292331696, 0.018335632979869843, -0.005158836022019386, 0.02393803372979164, 0.017375215888023376, 0.015782374888658524, -0.03235628455877304, 0.05891495198011398, 0.001503425883129239, -0.0426398329436779, -0.008003881201148033, -0.005332196597009897, 0.04142835736274719, 0.03727144002914429, 0.047144245356321335, -0.028749773278832436, -0.047053832560777664, 0.006425926461815834, 0.02707970328629017, -0.016672205179929733, -0.032118577510118484, 0.022459156811237335, 0.015165009535849094, 0.014771374873816967, 0.002863367320969701, -0.005560683086514473, 0.004446506965905428, 0.014628520235419273, 0.0038937225472182035, -0.01414030883461237, -0.016319800168275833, -0.03447040915489197, 0.016688918694853783, -0.03421218693256378, -0.0006808837642893195, 0.027543047443032265, 0.006363970227539539, 0.008121391758322716, -0.005592298693954945, 0.02593640610575676, 0.0507560633122921, 0.01599864475429058, -0.007707459386438131, 0.018751271069049835, 0.03405480086803436, 0.026347478851675987, 0.013704325072467327, 0.030354589223861694, 0.013032506220042706, 0.009224103763699532, 0.022880075499415398, 0.007650140672922134, 0.013494948856532574, 0.02421862818300724, 0.04049108922481537, -0.010065809823572636, 0.0474039725959301, 0.011454039253294468, -0.030938267707824707, -0.04000140354037285, 0.08883479982614517, 0.07995918393135071, 0.02150174230337143, 0.013804233632981777, 0.0004895117599517107, 0.01788938045501709, 0.06331560015678406, -0.049531180411577225, 0.11780182272195816, 0.0932266041636467, 0.12484864890575409, 0.0019273649668321013, -0.0038739892188459635, 0.01649993099272251, 0.017212999984622, 0.0006539902533404529, 0.02580271102488041, -0.12055592983961105, -0.05476584658026695, -0.012602335773408413, -0.03867089003324509, -0.0013689525658264756, -0.06903776526451111, -0.002462959848344326, -0.01705433428287506, 0.03856370598077774, 0.018752556294202805, -0.05117003992199898, 0.007200742606073618, 0.02677988074719906, -0.027669886127114296, 0.017592819407582283, 0.047411415725946426, 0.04050305485725403, 0.04801391810178757, 0.00576628465205431, 0.023771822452545166, -0.008620264008641243, -0.07094364613294601, -0.07170569896697998, 0.01562989130616188, 0.008413930423557758, 0.0027658184990286827, -0.005629982799291611, 0.08939818292856216, -0.0035689177457243204, -0.052840664982795715, -0.00554751418530941, 0.009312167763710022, 0.0772714912891388, -0.013142385520040989, -0.012031832709908485, -0.020414045080542564, -0.013085356913506985, -0.024338610470294952, 0.01770295575261116, -0.029056094586849213, 0.018048416823148727, 0.030812660232186317, -0.027452576905488968, 0.027221955358982086, -0.013020364567637444, 0.02665245346724987, -0.005441773217171431, 0.017994653433561325, 0.14640654623508453, -0.014220967888832092, -0.005401937291026115, 0.06638689339160919, -0.02686372585594654, -0.04635770246386528, 0.05178193375468254, 0.04821811243891716, 0.006883245427161455, -0.01733298972249031, -0.005576009396463633, -0.0391005203127861, 0.03563571721315384, -0.15826353430747986, -0.11218248307704926, -0.04415111616253853, 0.02839595638215542, -0.01337781734764576, 0.013596735894680023, -0.01595042459666729, -0.0009495260310359299, -0.002326966729015112, -0.04735448956489563, 0.01170523464679718, 0.02564593404531479, -0.011987527832388878, -0.038041844964027405, 0.05066080391407013, -0.03853800892829895, -0.0031356147956103086, -0.009619531221687794, -0.022752931341528893, -0.029090192168951035, -0.016518985852599144, 0.026436204090714455, 0.0128419054672122, 0.007030446548014879, -0.00820736214518547, 0.003858677577227354, -0.024573929607868195, -0.007379110902547836, 0.005903978366404772, 0.015639955177903175, -0.004679531790316105, -0.022961046546697617, -0.0030826108995825052, 0.025428839027881622, -0.04381668195128441, 0.042700961232185364, -0.00586670869961381, 0.01677561365067959, 0.012817892245948315, 0.1662861406803131, 0.034682560712099075, -0.04145679250359535, 0.09113416820764542, -0.07682187855243683, -0.010746069252490997, -0.027094295248389244, 0.009851785376667976, -0.06027801334857941, 0.020363669842481613, 0.003790226299315691, -0.028529802337288857, 0.012883958406746387, -0.033721935003995895, -0.010535763576626778, -0.006491785869002342, 0.031076129525899887, -0.043996360152959824, 0.008373009972274303, -0.01904124766588211, -0.03750932216644287, -0.027946513146162033, -0.03496728464961052, 0.0016426858492195606, -0.02092006430029869, 0.05260095000267029, 0.030365612357854843, -0.06113092228770256, 0.014499546028673649, 0.04285631701350212, 0.0500737801194191, 0.06626630574464798, -0.011566727422177792, 0.010001631453633308, -0.03566553071141243, -0.01723475754261017, 0.05573368817567825, 0.04763161763548851, -0.04856622591614723, 0.027948366478085518, -0.04099905118346214, 0.0034460886381566525, 0.019511403515934944, 0.007445237133651972, -0.04157967120409012, -0.03752632066607475, 0.02033953182399273, 0.002293410710990429, 5.8050725783687085e-05, 0.018933575600385666, -0.012648090720176697, 0.020102689042687416, 0.027387306094169617, -0.035620734095573425, 0.0029215416871011257, -0.010203096084296703, -0.005217169411480427, -0.04337609186768532, -0.005842810496687889, 0.028470825403928757, 0.012506797909736633, 0.00048617468564771116, -0.07758896052837372, -0.016413908451795578, -0.049881093204021454, -0.04042850807309151, 0.005767547991126776, -0.0031148798298090696, 0.021301792934536934, 0.04873821139335632, -0.04816601052880287, 0.03594041243195534, -0.012395557947456837, -0.002872853772714734, 0.007161193992942572, 0.010869050398468971, -0.020129119977355003, 0.039750222116708755, -0.0007365287747234106, -0.0267544724047184, -0.06189362704753876, 0.038718465715646744, 0.027285557240247726, -0.04188055917620659]\"\n./train/Bouvier_des_Flandres/n02106382_4153.JPEG,Bouvier_des_Flandres,\"[-0.01321516651660204, -0.00919481460005045, 0.0017369503621011972, 0.05458272621035576, 0.07649245858192444, -0.05045256391167641, 0.05089810490608215, -0.04403504356741905, 0.02657857909798622, -0.00318490294739604, 0.004425390157848597, -0.0009306840947829187, 0.006297864951193333, 0.021806824952363968, -0.01615370251238346, 0.011795828118920326, 0.049466170370578766, -0.023034004494547844, -0.001031864550895989, -0.0008910345495678484, -0.06841286271810532, 0.06083396077156067, -0.014409659430384636, -0.03736286610364914, 0.04848192632198334, -0.01419387012720108, 0.02791574038565159, -0.02218586578965187, 0.0645245611667633, -0.010646887123584747, -0.019404137507081032, 0.044275928288698196, 0.023605870082974434, 0.017853250727057457, 0.032812681049108505, 0.008527622558176517, -0.0015044496394693851, -0.011016950942575932, 0.017750464379787445, 0.09406968951225281, -0.053256794810295105, -0.005827455315738916, 0.032003793865442276, -0.009393470361828804, 0.008685094304382801, -0.023344233632087708, 0.031078530475497246, 0.025638239458203316, -0.036652885377407074, -0.02017330937087536, -0.010638846084475517, 0.0360921174287796, 0.004957427270710468, 0.05221166834235191, 0.011865216307342052, 0.008660254068672657, -0.0019731803331524134, 0.0290425643324852, -0.02528945356607437, -0.025743117555975914, 0.1216898038983345, 0.007891492918133736, 0.05309643596410751, -0.000722709926776588, 0.009669887833297253, 0.00035441803629510105, -0.004418238531798124, 0.10243227332830429, -0.0072179632261395454, -0.02452564798295498, 0.015109912492334843, -0.0013400533935055137, -0.031022513285279274, 0.04788092523813248, -0.012382888235151768, 0.05110744386911392, -0.06152670457959175, -0.049313023686409, 0.0169726200401783, 0.0207892544567585, 0.06371156871318817, 0.05382440239191055, -0.07072821259498596, -0.005183384753763676, 0.022109709680080414, 0.016927344724535942, -0.04901888594031334, -0.013541916385293007, 0.06687219440937042, -0.002673789393156767, -0.04306039959192276, 0.014536408707499504, -0.5856348872184753, 0.05640912801027298, -0.038277678191661835, -0.013175874948501587, -0.012836094945669174, 0.013269110582768917, -0.09560409188270569, 0.15708482265472412, 0.037030018866062164, -0.0202912800014019, 0.021465787664055824, -0.03338893875479698, 0.04166644439101219, -0.028370345011353493, -0.034168630838394165, -0.03638092055916786, -0.0035995543003082275, 0.05170134827494621, 0.003609867300838232, -0.011925950646400452, -0.004730511456727982, -0.02691248059272766, 0.003645707154646516, -0.021144680678844452, 0.013424882665276527, -0.04319246858358383, -0.020549708977341652, 0.0007135438499972224, 0.026853550225496292, -0.01659078523516655, -0.011010229587554932, -0.01615184172987938, 0.040680527687072754, -0.03288941830396652, -0.017851507291197777, 0.045786283910274506, 0.004450417123734951, 0.008507140912115574, 0.0519973523914814, -0.0211710873991251, -0.031070532277226448, 0.08151619136333466, 0.006450363900512457, -0.03618920221924782, -0.02284642867743969, -0.051379889249801636, 0.033439572900533676, -0.012663601897656918, -0.057409126311540604, 0.010103537701070309, 0.03704997897148132, 0.0276095662266016, -0.04628577455878258, 0.002743935212492943, -0.004918274469673634, 0.05147412419319153, -0.04653897508978844, -0.0218913946300745, 0.05322032421827316, 0.03187057375907898, 0.09213995933532715, 0.0018036754336208105, -0.0545366033911705, 0.01983112283051014, -0.01704230159521103, 0.023190027102828026, 0.01193936262279749, -0.031633831560611725, -0.029796430841088295, -0.00520456675440073, 0.0015879783313721418, -0.012756108306348324, 0.0642385482788086, -0.044182758778333664, -0.002822265960276127, 0.040661975741386414, 0.01845579594373703, 0.025397833436727524, 0.01909232884645462, -0.005357997491955757, -0.0009210545103996992, -0.05141768231987953, 0.022703539580106735, 0.05183606967329979, 0.03265498951077461, 0.021937238052487373, -0.0034505296498537064, -0.012195131741464138, 0.009599464014172554, -0.04042084142565727, 0.03240272402763367, -0.017423855140805244, 0.04525711387395859, -0.018296919763088226, 0.033878568559885025, 0.023706303909420967, -0.01819070801138878, 0.024205679073929787, -0.028009099885821342, -0.0662362352013588, 0.01378549076616764, 0.05085064843297005, -0.11100473254919052, 0.002209110651165247, -0.006840717978775501, -0.00926419161260128, -0.043919555842876434, 0.03496634587645531, -0.003354785731062293, 0.025498908013105392, -0.0006028989446349442, 0.008122016675770283, -0.02458176016807556, 0.00508169736713171, -0.01676228828728199, 0.0027229192201048136, 0.03500770777463913, 0.018515191972255707, -0.04219349846243858, -0.0632639229297638, -0.0003587713872548193, -0.008922762237489223, -0.007550484966486692, -0.020259974524378777, 0.014774895273149014, 0.014816053211688995, 0.052257005125284195, 0.007133407983928919, -0.01657472550868988, 0.026343340054154396, 0.004261394497007132, -0.02910972200334072, -0.044040556997060776, -0.007863754406571388, -0.00859623309224844, -0.012873583473265171, 0.0071326857432723045, 0.0025283547583967447, 0.007450557313859463, 0.004397482145577669, -0.008976135402917862, 0.04819222539663315, -0.01225714199244976, 0.0041205016896128654, -0.02926734834909439, 0.015795549377799034, 0.00993190985172987, -0.04048701748251915, -0.034259140491485596, 0.009166070260107517, 0.07841583341360092, 0.004881857428699732, -0.05105148255825043, 0.09553833305835724, 0.00020798944751732051, -0.01827097311615944, -0.013734608888626099, 0.08604399859905243, 0.026925697922706604, -0.017975639551877975, 0.019020454958081245, 0.03683746978640556, 0.02631816454231739, -0.023546187207102776, 0.013189208693802357, 0.028505807742476463, -0.07670892775058746, -0.017530260607600212, -0.0778275728225708, 0.029261192306876183, 0.010468922555446625, 0.020032662898302078, 0.025817878544330597, -0.0019731216598302126, 0.0011767609976232052, 0.025213174521923065, -0.03448409587144852, 0.048140522092580795, -0.005686954129487276, 0.005827684421092272, 0.0484127514064312, -0.028224579989910126, 0.019771751016378403, 0.021149147301912308, 0.023146003484725952, 0.026986664161086082, 0.006819531321525574, -0.038480244576931, 0.005214241798967123, 0.015430644154548645, -0.06372519582509995, -0.04401404410600662, -0.009842206723988056, 0.038236577063798904, -0.020640747621655464, -0.024424344301223755, -0.04468265175819397, 0.01739325188100338, 0.019117185845971107, 0.03730866685509682, -0.025379393249750137, 0.009229765273630619, 0.028068525716662407, -0.008049721829593182, -0.009620383381843567, -0.027232564985752106, -0.00658153323456645, 0.025224223732948303, -0.033085327595472336, -0.03312893584370613, -0.0306974146515131, -0.002154488582164049, 0.03829885274171829, -0.0821598470211029, 0.054046034812927246, 0.016840221360325813, 0.026695795357227325, 0.007468046620488167, 0.012682798318564892, 0.006788394879549742, 0.0812695175409317, -0.04478370025753975, 0.04244188591837883, -0.040899354964494705, -0.0056819492019712925, 0.04223993048071861, -0.03389468416571617, 0.02522561512887478, 0.016794055700302124, 0.02801789529621601, -0.05526965484023094, 0.048164285719394684, -0.02236560545861721, 0.010866505093872547, -0.05021892860531807, 0.04538847506046295, -0.008101179264485836, -0.03763357922434807, -0.006342179607599974, -0.016154594719409943, 0.026379432529211044, 0.015783580020070076, -0.02681693248450756, -0.03009101375937462, 0.02643822692334652, 0.05321456864476204, -0.03294626623392105, -0.012939327396452427, 0.07098093628883362, -0.0041571613401174545, 0.010346450842916965, 0.01981092244386673, 0.019856980070471764, 0.020087702199816704, -0.006695806980133057, 0.0008998386329039931, 0.030994655564427376, 0.0021757865324616432, 0.03362107649445534, -0.01433584000915289, 0.038214247673749924, -0.021096132695674896, 0.0022435560822486877, 0.04205707088112831, -0.042471032589673996, -0.06694589555263519, -0.024463968351483345, 0.014929236844182014, 0.07741277664899826, -0.04861002415418625, 0.031850360333919525, -0.011455437168478966, -0.055665723979473114, 0.0012246171245351434, 0.01894761621952057, -0.06200259551405907, 0.02041628770530224, -0.012082940898835659, 0.016043636947870255, 0.037744857370853424, -0.011405416764318943, 0.0099668949842453, -0.021344581618905067, 0.005629159044474363, 0.1953207552433014, 0.01097009889781475, 0.006992545444518328, 0.019934367388486862, 0.031141143292188644, -0.035781823098659515, 0.031054353341460228, 0.015732768923044205, -0.015994388610124588, -0.030347730964422226, -0.045819442719221115, -0.03278603404760361, 0.017556041479110718, -0.052194852381944656, -0.021035563200712204, -0.01877237670123577, 0.02609226480126381, -0.0242067351937294, 0.025937693193554878, -0.008018926717340946, -0.04281539469957352, 0.04458118602633476, -0.023676788434386253, -0.06834647059440613, -0.023043323308229446, -0.02705821953713894, 0.02951251156628132, -0.0022814623080193996, -0.01124521903693676, 0.026285406202077866, 0.0060051181353628635, -0.06709892302751541, 0.0033368098083883524, -0.023010343313217163, -0.03653672710061073, -0.02298121713101864, 0.0009640506468713284, 0.004438376519829035, -0.013675197958946228, -0.018773475661873817, 0.046978648751974106, -0.00799825880676508, 0.019412148743867874, -0.04293902963399887, 0.004136263392865658, -0.04476066306233406, -0.024207450449466705, 0.026065470650792122, 0.019307322800159454, -0.06972192227840424, 0.000883016618900001, 0.006650097668170929, 0.0843888446688652, -0.021913224831223488, -0.031977180391550064, 0.027872079983353615, 0.02123175375163555, 0.024895498529076576, -0.007823995314538479, -0.027174891903996468, -0.03999989479780197, 0.050654567778110504, -0.011068994179368019, -0.008544155396521091, 0.0419391393661499, 0.08734386414289474, -0.04549092799425125, 0.008703310042619705, 0.039433740079402924, -0.02416275627911091, -0.003291038330644369, 0.07687617093324661, -0.032128892838954926, 0.011064417660236359, -0.052005525678396225, -0.016510017216205597, -0.013940253295004368, -0.014307273551821709, -0.011369065381586552, -0.05680866912007332, -0.027388975024223328, -0.011085224337875843, -0.011891272850334644, 0.04165637865662575, 0.014207975007593632, 0.07072412222623825, 0.011208160780370235, 0.03544563055038452, 0.0019872854463756084, 0.011553744785487652, -0.004934821277856827, 0.03554397076368332, -0.03770756348967552, -0.0027401032857596874, 0.028601597994565964, -0.017609627917408943, -0.002731898333877325, 0.02043972723186016, -0.01017772313207388, 0.03635185956954956, -0.020453184843063354, 0.007790983188897371, -0.02789604850113392, -0.004513379652053118, 0.0197726059705019, -0.009942254051566124, 0.004540581256151199, 0.03317395970225334, 0.0582299642264843, 0.04646740108728409, -0.01913926564157009, 0.018766866996884346, 0.025282053276896477, -0.006513084750622511, -0.07668846845626831, -0.011298381723463535, 0.027494102716445923, -0.07797146588563919, 0.0028956441674381495, -0.011243276298046112, 0.04329429939389229, 0.033934399485588074, -0.01666036620736122, 0.0023573937360197306, -0.02795184589922428, -0.025023622438311577, -0.004988754168152809, 0.022064413875341415, 0.019571594893932343, -0.07145263999700546, -0.011581679806113243, 0.0035702474415302277, -0.05113179609179497, 0.040251441299915314, 0.003213944612070918, 0.026176484301686287]\"\n./train/Bouvier_des_Flandres/n02106382_404.JPEG,Bouvier_des_Flandres,\"[-0.00914438534528017, 0.028371794149279594, 0.027482053264975548, 0.018855439499020576, 0.032752662897109985, -0.07841399312019348, 0.0073407371528446674, -0.038688287138938904, 0.00533393444493413, -0.011739689856767654, 0.04980352148413658, 0.009657822549343109, 0.007291310932487249, 0.026921536773443222, -0.02297748252749443, 0.04023651033639908, 0.0026892737951129675, -0.007239961996674538, -0.016218602657318115, -0.042156219482421875, -0.04677591472864151, 0.02919919043779373, -0.02725355140864849, -0.09495717287063599, 0.0013799709267914295, 0.048639457672834396, 0.00833189208060503, 0.002059918362647295, -0.003069699974730611, 0.012717073783278465, -0.007389258127659559, 0.012159372679889202, 0.012831350788474083, -0.019180988892912865, -0.009538006968796253, -0.005055704619735479, -0.015122968703508377, 0.012592896819114685, -0.030210193246603012, 0.007558595854789019, -0.023555539548397064, 0.021144794300198555, -0.009899851866066456, -0.011411507613956928, -0.0034056464210152626, -0.10332359373569489, 0.038125693798065186, -0.017957748845219612, -0.021815059706568718, -0.030891939997673035, -0.03228018432855606, 0.007864166982471943, 0.02402181178331375, 0.047081947326660156, 0.025188272818922997, 0.029580440372228622, 0.004578814376145601, 0.07389757037162781, 0.03215953707695007, -0.025099093094468117, 0.018426449969410896, -0.01202974934130907, 0.010044438764452934, 0.012164334766566753, -0.019636882469058037, -0.005143281072378159, -0.01300947554409504, 0.13632892072200775, -0.03386891260743141, -0.012530805543065071, -0.00427346071228385, -0.03509035333991051, 0.02517969347536564, 0.012856896966695786, -0.031208747997879982, -0.0019072011345997453, -0.08331957459449768, -0.03125295415520668, -0.06424764543771744, -0.007057847920805216, -0.0029135383665561676, 0.012053269892930984, 0.019331511110067368, -0.07184473425149918, 0.039313267916440964, 0.03972823917865753, 0.03462642431259155, -0.031043849885463715, -0.03758461773395538, 0.030108412727713585, -0.005932887550443411, -0.008761524222791195, -0.5997380614280701, 0.010502897202968597, 0.01898805983364582, -0.014762777835130692, -0.014376247301697731, -0.00512652238830924, -0.0640815943479538, -0.09049291163682938, 0.013892042450606823, 0.01968749240040779, -0.015163227915763855, 0.05712354928255081, 3.531796392053366e-05, 0.01388015691190958, -0.03149925172328949, 0.010452588088810444, -0.0663599744439125, -0.011151487939059734, 0.04102892801165581, -0.07355929911136627, -0.03236295282840729, -0.03191278129816055, -0.017487337812781334, 0.006817228626459837, 0.013968189246952534, -0.06531017273664474, 0.005834505893290043, 0.02516409382224083, -0.03601009026169777, -0.08839350193738937, 0.013872899115085602, 0.005545498803257942, -0.0010589601006358862, -0.01769387535750866, 0.04390889033675194, -0.006509253289550543, -0.010387727059423923, 0.02282920479774475, 0.02439185604453087, 0.029168149456381798, -0.019297221675515175, 0.0892627015709877, -0.0328964926302433, -0.03390388935804367, 0.008165748789906502, 0.03700517490506172, 6.599399785045534e-05, 0.009011952206492424, 0.015429964289069176, 0.0016026584198698401, -0.04293876886367798, 0.009014803916215897, -0.01958812028169632, 0.03362764045596123, 0.010804307647049427, 0.045381177216768265, -0.026657013222575188, -0.01711171492934227, -0.004064586013555527, 0.012583144940435886, 0.02759896218776703, 0.03146946802735329, 0.011691557243466377, 0.014359698630869389, 0.02290777675807476, 0.013209056109189987, -0.026233140379190445, -0.0147056570276618, -0.02374962344765663, -0.013034485280513763, -0.03599365055561066, -0.020480351522564888, -0.0028476135339587927, -0.013797789812088013, -0.05162007734179497, -0.008498615585267544, 0.03337104618549347, 0.03633981943130493, 0.012120192870497704, -0.0149613032117486, 0.004657386802136898, -0.04114833474159241, 0.00585227832198143, -0.03849872946739197, 0.08368664234876633, 0.042845629155635834, 0.04251516982913017, -0.0030013283248990774, 0.020872516557574272, -0.010826893150806427, 0.03145521879196167, -0.004813987761735916, -0.006687740329653025, -0.027640830725431442, -0.003939859103411436, 0.013719516806304455, -0.01347027812153101, 0.007341729011386633, -0.030189234763383865, -0.02156553976237774, 0.044240087270736694, 0.01191400270909071, -0.06546369940042496, 0.013426430523395538, -0.007166759110987186, -0.06611482053995132, 0.016556624323129654, -0.006184447556734085, 0.04077758267521858, 0.028808915987610817, 0.05193575471639633, -0.0024735035840421915, 0.0017011873424053192, 0.021231571212410927, -0.036274828016757965, -0.06861770898103714, 0.0315081961452961, -0.010659164749085903, -0.02466563880443573, -0.05117373913526535, 0.05586063861846924, 0.04717586934566498, 0.010016166605055332, 0.02568066120147705, 0.05142499506473541, 0.010249079205095768, -0.015057161450386047, -0.007252272218465805, 0.05307610332965851, -0.06213540583848953, 0.002196378307417035, -0.00757910730317235, -0.023156167939305305, 0.006219350267201662, 0.008989560417830944, 0.04151087999343872, 0.024076318368315697, 0.04189328849315643, 0.05855117365717888, 0.021309664472937584, -0.0037769454065710306, -0.022153595462441444, 0.013342657126486301, -0.04754244536161423, 0.021417073905467987, -0.018237318843603134, 0.0005674267304129899, -0.006490398198366165, 0.0028547539841383696, 0.045586392283439636, 0.0073565831407904625, -0.004626067355275154, -0.013701577670872211, 0.013765323907136917, 0.0019386588828638196, 0.027325619012117386, -0.021647077053785324, 0.014308667741715908, 0.029207758605480194, 0.025612086057662964, -0.00645203422755003, 0.0031038341112434864, 0.010339329950511456, -0.03154692426323891, -0.025438010692596436, -0.03756795451045036, 0.02345971390604973, -0.013666898012161255, 0.02513284608721733, -0.01248457096517086, 0.03465471789240837, 0.05618590861558914, 0.047531358897686005, 0.004436163697391748, -0.014026664197444916, -0.016061434522271156, 0.015078726224601269, 0.006989051587879658, 0.07249585539102554, -0.011588181369006634, 0.07736305892467499, -0.000818133179564029, 0.0024914955720305443, 0.036346759647130966, -0.001923806848935783, -0.01416695024818182, -0.036297332495450974, 0.008525052107870579, -0.01479334942996502, 0.04089345782995224, -0.018468400463461876, 0.001846550265327096, 0.014794616959989071, 0.0033482194412499666, -0.0432756245136261, -0.002050391398370266, -0.044791802763938904, -0.0055068302899599075, -0.004639407619833946, -0.013006090186536312, -0.04502115026116371, 0.01916179060935974, -0.016748061403632164, -0.03801148757338524, 0.0769343450665474, -0.06280092149972916, -0.027082987129688263, 0.009721823036670685, -0.029910452663898468, -0.00957623589783907, 0.010578788816928864, -0.0009483961621299386, 0.0232806708663702, -0.022981081157922745, 0.07671146094799042, -0.018397105857729912, 0.018522607162594795, -0.001532560563646257, -0.01226253341883421, 0.008581362664699554, 0.08911491930484772, 0.036615192890167236, 0.007926253601908684, -0.07314250618219376, -0.0062919496558606625, 0.04583119973540306, -0.024206617847085, 0.01592877134680748, 0.020720498636364937, 0.0699436292052269, -0.028977038338780403, -0.011259645223617554, -0.0018617530586197972, 0.016672559082508087, -0.023827804252505302, 0.020379403606057167, -0.01707151159644127, -0.01618669554591179, -0.01612887531518936, -0.03793306276202202, 0.028787117451429367, -0.0339379720389843, -0.029361067339777946, -0.051113154739141464, 0.012721506878733635, 0.02355778217315674, 0.006681020371615887, -0.00854299496859312, -0.005024834536015987, 0.04748427867889404, -0.02253095805644989, 0.03756815567612648, -0.007172334473580122, 0.008199195377528667, 0.006544733420014381, 0.06981934607028961, -0.005519254133105278, -0.004662238992750645, 0.061413880437612534, 0.014359187334775925, 0.03282271325588226, -0.025551728904247284, 0.03881877660751343, 0.09999813884496689, 0.0030594603158533573, -0.07682681083679199, -0.0072331903502345085, -0.019308418035507202, 0.1467890441417694, -0.044298384338617325, 0.030667699873447418, 0.04079899191856384, -0.06399659067392349, 0.021648814901709557, 0.028867553919553757, -0.0362660251557827, 0.01715737208724022, -0.003117774613201618, -0.011732297949492931, 0.0027579120360314846, -0.03354073688387871, 0.03679122030735016, -0.0176524855196476, 0.029529420658946037, 0.14071139693260193, -0.03320637717843056, -0.016446271911263466, 0.0393822118639946, 0.025568749755620956, -0.013909435831010342, -0.031588613986968994, -0.02284122258424759, -0.025911254808306694, -0.01236784178763628, -0.028134753927588463, -0.011057762429118156, 0.029649725183844566, -0.07826309651136398, -0.1233886256814003, -0.08338228613138199, 0.03822120279073715, 0.020417215302586555, 0.044664543122053146, -0.04162520170211792, -0.005111703183501959, -0.022641252726316452, 0.026110410690307617, -0.004950392059981823, -0.027887726202607155, 0.0034240814857184887, 0.11876953393220901, 0.028178701177239418, 0.032254017889499664, 0.003944768570363522, -0.0026481591630727053, -0.00931570678949356, -0.046632613986730576, -0.03442662954330444, 0.051587603986263275, 0.04973381757736206, -0.025272946804761887, 0.04006725549697876, -0.036213669925928116, 0.03045210801064968, 0.03369862213730812, -0.07420831173658371, -0.007636009715497494, 0.011762337759137154, -0.016204971820116043, 0.015394991263747215, -0.01485921535640955, 0.00696394219994545, 0.03194207698106766, -2.15245017898269e-05, 0.033126574009656906, 0.044474370777606964, 0.20396125316619873, -0.013017307035624981, 0.021156806498765945, 0.011389805004000664, 0.023095551878213882, -0.02473040670156479, -0.023082587867975235, 0.0035271623637527227, -0.03770028054714203, 0.006512980442494154, -0.021107371896505356, 0.011732262559235096, -0.010917579755187035, 0.042417097836732864, -0.043786756694316864, -0.013716169632971287, -0.012327740900218487, -0.018446236848831177, 0.0014983046567067504, 0.019037846475839615, 0.027818085625767708, 0.019772367551922798, -0.036486558616161346, 0.01364012062549591, -0.04556753858923912, -0.052441731095314026, -0.01018533669412136, -0.04535238817334175, 0.0602584183216095, -0.014724805019795895, -0.03110455349087715, 0.024198809638619423, 0.011473042890429497, 0.0367407351732254, -0.002715613692998886, -0.02566683292388916, 0.02044503763318062, -0.0005826998385600746, -0.043325331062078476, -0.004507766105234623, -0.023652350530028343, 0.004622753709554672, 0.027106445282697678, -0.020491575822234154, 0.01219844724982977, -0.04948021098971367, 0.018961142748594284, 0.009427816607058048, -0.014881530776619911, -0.00610159058123827, 0.009452116675674915, 0.02285764180123806, -0.003079780377447605, 0.01718353107571602, 0.026078427210450172, 0.0036280632484704256, 0.004944652784615755, 0.06858045607805252, -0.009698798879981041, 0.047317393124103546, -0.0016213192138820887, 0.02371235005557537, -0.006373228505253792, -0.0003242998500354588, 0.044838838279247284, -0.047496773302555084, -0.03308452293276787, -0.033181436359882355, 0.013331558555364609, -0.024634193629026413, -0.010878004133701324, 0.01116026472300291, -0.00020698268781416118, 0.014354035258293152, -0.033901479095220566, -0.002007810864597559, 0.04399891197681427, -0.0023575592786073685, -0.013189216144382954, -0.014780736528337002, -0.003515299642458558, 0.06448626518249512, 0.008519073016941547, 0.016509369015693665]\"\n./train/Bouvier_des_Flandres/n02106382_9318.JPEG,Bouvier_des_Flandres,\"[0.02711942233145237, 0.0365133211016655, -0.05073995143175125, 0.034066714346408844, 0.03508860617876053, -0.0366823785007, -0.004748659674078226, -0.0061109294183552265, 0.040240827947854996, -0.009604081511497498, -0.018933594226837158, -0.00795199628919363, 0.012441574595868587, -0.011138827539980412, -0.04300370439887047, 0.0074120815843343735, 0.060046955943107605, 0.03637266904115677, -0.008369186893105507, -0.039027802646160126, -0.053007714450359344, -0.00020777646568603814, 0.024685338139533997, 0.00041833246359601617, 0.010541988536715508, 0.017323732376098633, 0.029304657131433487, -0.028258463367819786, -0.006996951997280121, -0.04756778106093407, -0.0017354158917441964, 0.04921437427401543, -0.03325262293219566, -0.0005386327975429595, 0.04560927301645279, 0.010440015234053135, 0.010871193371713161, -0.0369209423661232, -0.011899123899638653, 0.09259245544672012, -0.04815920814871788, 0.02953256480395794, 0.03513698652386665, -0.03183953836560249, 0.02004162035882473, 0.012696503661572933, 0.00874030590057373, 0.01593853160738945, -0.017521703615784645, 0.02253829315304756, 0.03896874561905861, 0.015323703177273273, -0.0002639968297444284, 0.04794047027826309, 0.013936405070126057, 0.004626764450222254, 0.0147474966943264, -0.012508631683886051, -0.031512267887592316, -0.020999526605010033, 0.03761650621891022, -0.00915063638240099, 0.01764904148876667, 0.06028623506426811, -0.0020447850693017244, 0.007251402363181114, 0.028776835650205612, 0.09434527903795242, 0.00932155828922987, -0.005916961934417486, 0.042192038148641586, 0.03734306991100311, 0.013783920556306839, 0.05519720911979675, 0.04678332805633545, 0.02121053636074066, 0.02216995880007744, -0.05260607227683067, -0.00403024023398757, -0.0024085799232125282, 0.013579578138887882, -0.014518235810101032, -0.052879322320222855, 0.0014342692447826266, -0.018764033913612366, -0.012819843366742134, 0.11589883267879486, -0.02450011856853962, 0.032085057348012924, -0.001895475434139371, -0.011445507407188416, -0.03913651406764984, -0.6451879739761353, -0.01923791505396366, 0.008372134529054165, 0.041403379291296005, 0.025479068979620934, 0.027367206290364265, -0.03649561107158661, 0.03186074271798134, 0.017510777339339256, -0.013584955595433712, 0.02195700816810131, 0.006648858077824116, 0.04402163624763489, -0.026782317087054253, 0.06839269399642944, 0.03245962783694267, -0.008261380717158318, -0.04869500920176506, -0.029333041980862617, -0.08037323504686356, -0.024135159328579903, -0.02771761268377304, 0.007032705936580896, -0.04340890422463417, -0.018099676817655563, -0.04636073112487793, 0.05433722212910652, -0.020240655168890953, 0.05309583619236946, -0.05340009927749634, 0.00975048542022705, 0.023937677964568138, 0.006627809721976519, -0.06905647367238998, -0.040165502578020096, 0.035679496824741364, 0.02091260254383087, -0.0061623165383934975, 0.02097330242395401, -0.041154470294713974, -0.043363552540540695, 0.0829407349228859, -0.06507977843284607, -0.030619459226727486, 0.0128936767578125, -0.012021207250654697, 0.015832699835300446, 0.059157583862543106, -0.013408530503511429, -0.013755463063716888, 0.003995704464614391, 0.004511076956987381, -0.050156593322753906, 0.04477677494287491, 0.019909672439098358, -0.03981952369213104, -0.019663596525788307, -0.024668239057064056, -0.016109835356473923, 0.049084197729825974, -0.058122243732213974, -0.03137936443090439, 0.00612115440890193, -0.009250952862203121, 0.001799260382540524, -0.0007653453503735363, 0.040461380034685135, -0.005818930454552174, -0.016502412036061287, -0.004307480063289404, 0.029065677896142006, 0.026252569630742073, 0.03483786806464195, -0.0381041094660759, -0.022646501660346985, 0.03843390569090843, -0.012635616585612297, 0.019010573625564575, -0.01793774403631687, 0.004043601918965578, 0.03159552812576294, -0.03263142332434654, -0.005508047062903643, -0.03784603998064995, 0.05679779499769211, -0.0008150577777996659, 0.04553753882646561, 0.010262089781463146, -0.008200605399906635, 0.04838428646326065, 0.01944221742451191, -0.04815027117729187, -0.012121506035327911, -0.006865832023322582, 0.0684245303273201, -0.017862673848867416, 0.0300320852547884, -0.00339188938960433, 0.03465442359447479, 0.01269362960010767, -0.039223428815603256, -0.01120644249022007, 0.013061066158115864, -0.0116866584867239, 0.022512132301926613, -0.05596394091844559, -0.10541756451129913, -0.04102558270096779, -0.010762845166027546, 0.040759019553661346, -0.003521519945934415, 0.041598912328481674, -0.030509013682603836, -0.01729251816868782, -0.024217385798692703, -0.019697468727827072, 0.0012705925619229674, 0.04404955357313156, -0.04494743049144745, 0.07708153873682022, 0.004959677346050739, 0.0267015490680933, -0.03941238299012184, -0.04788701608777046, 0.012551095336675644, -0.029333528131246567, 0.09106168150901794, -0.012940097600221634, 0.030053220689296722, 0.06607387959957123, 0.0022168110590428114, 0.009168536402285099, -0.009954196400940418, 0.010807140730321407, -0.001309140003286302, -0.0457538478076458, 0.042430516332387924, -0.0044351425021886826, -0.0057537448592484, -0.015058504417538643, 0.012330280616879463, 0.031880415976047516, -0.007913406938314438, -0.05761479213833809, -0.04225153848528862, -0.009424304589629173, 0.026696771383285522, -0.016094105318188667, 0.008032092824578285, 0.029132774099707603, 0.02461753413081169, 0.01608474738895893, 0.0033050975762307644, 0.07980795949697495, 0.05213586986064911, -0.05829637870192528, -0.0019362512975931168, 0.042679160833358765, 0.01372349914163351, 0.018457118421792984, -0.0016662711277604103, 0.035366352647542953, 0.007051303517073393, 0.019893314689397812, -0.009246118366718292, 0.02976745367050171, 8.610506483819336e-05, -0.02643483132123947, -0.019514616578817368, 0.0022468522656708956, 0.023121001198887825, 0.03098728321492672, 0.022105371579527855, -0.03503081575036049, -0.0002228713856311515, 0.02599533088505268, -0.025917449966073036, 0.0069150421768426895, -0.0021026944741606712, 0.029998326674103737, 0.02302500233054161, 0.018377691507339478, 0.0005921918782405555, -0.0016315783141180873, 0.033603593707084656, -0.002904267283156514, -0.020007561892271042, 0.018181921914219856, 0.012567303143441677, -0.002518327906727791, -0.056489601731300354, -0.00929082091897726, 0.007147719617933035, -0.041021715849637985, -0.031007984653115273, -0.014028683304786682, 0.03629592806100845, -0.005084506701678038, -0.032564885914325714, 0.029478436335921288, 0.03664327785372734, 0.0283924862742424, -0.010673191398382187, 0.026416800916194916, -0.0023948904126882553, -0.011023765429854393, -0.005052933003753424, -0.006080628372728825, -0.020669089630246162, 0.0016575567424297333, -0.02276293933391571, 0.023368384689092636, 0.0013814076082780957, -0.01382724940776825, -0.03132205083966255, 0.05948357656598091, -0.0078424122184515, -0.004285937640815973, 0.00199690368026495, 0.07096463441848755, 0.0828840434551239, 0.02614145539700985, 0.01267577800899744, 0.0041517517529428005, 0.08831380307674408, 0.05495021492242813, -0.005541922990232706, -0.03653845191001892, 0.02372771129012108, 0.1326567381620407, -0.013079231604933739, 0.0010173249756917357, 0.016484292224049568, 0.026530945673584938, -0.0229948703199625, 0.021851858124136925, -0.01261183712631464, 0.0004024588270112872, -0.015009589493274689, 0.005169002339243889, -0.0013514208840206265, -0.061533305794000626, -0.005823417566716671, 0.05091273784637451, 0.003013732610270381, 0.014953924342989922, 0.008519431576132774, 0.033520884811878204, 0.0011023830156773329, -0.0045167687349021435, 0.003453100100159645, -0.0057905265130102634, 0.06521731615066528, 0.01731998659670353, 0.028665553778409958, 0.029951009899377823, -0.020776107907295227, -0.007224856875836849, 0.011621586978435516, 0.004436907358467579, 0.01197734847664833, 0.004685301333665848, 0.007613247726112604, 0.08550301939249039, -0.0031792372465133667, -0.07229848951101303, -0.003063451498746872, 0.051569584757089615, 0.011377491056919098, -0.033073075115680695, -0.010219943709671497, -0.025729846209287643, -0.04779553413391113, 0.0019174586050212383, -0.017811525613069534, -0.03637919947504997, 0.018249908462166786, -0.021637503057718277, -0.01310217659920454, 0.014795122668147087, 0.017394209280610085, 0.024577055126428604, 0.04879652336239815, -0.009349554777145386, 0.08366730064153671, 0.02267376333475113, -0.05973636731505394, 0.03945871815085411, -0.021589886397123337, -0.02211190015077591, 0.02483791671693325, 0.020216485485434532, 0.0025629594456404448, -0.06763414293527603, 0.0029714112170040607, -0.02116379328072071, 0.07849070429801941, -0.13269375264644623, -0.0629047229886055, -0.071799136698246, -0.015907173976302147, 0.010270786471664906, 0.01578378677368164, -0.004225030075758696, 0.01981750875711441, 0.003102341201156378, -0.00014065622235648334, -0.015592806972563267, 0.00106391916051507, 0.009709110483527184, 0.06037396192550659, -0.015601708553731441, -0.010655037127435207, -0.026784591376781464, 0.012815584428608418, -0.019557861611247063, 0.015233230777084827, -0.017095187678933144, 0.07606632262468338, 0.0025417678989470005, -0.024433357641100883, 0.029151881113648415, 0.012410813942551613, -0.029012106359004974, 0.0026243249885737896, -0.01236105989664793, 0.034754492342472076, -0.05878349393606186, 0.03373881056904793, 0.043375059962272644, -0.01763784885406494, 0.047065120190382004, 0.05439478158950806, -0.046697162091732025, -0.02622821554541588, 0.015313387848436832, 0.0857880488038063, -0.003312482498586178, -0.03527761250734329, 0.01840137504041195, -0.02643737383186817, -0.0026951651088893414, 0.0034594719763845205, 0.008365090005099773, -0.026040270924568176, 0.040464434772729874, -0.0019265208393335342, -0.018259217962622643, 0.0020820624195039272, -0.013797743245959282, -0.021763823926448822, -0.050255805253982544, -0.022877203300595284, -0.034727562218904495, -0.003143815090879798, -0.01648682728409767, -0.023612460121512413, -0.04075953736901283, -0.014845235273241997, -0.028074514120817184, -0.04518101364374161, 0.055877119302749634, -0.009259534068405628, -0.03466592729091644, 0.02884933352470398, 0.02523963898420334, 0.012354242615401745, 0.06517133116722107, 0.003404676914215088, -0.013137582689523697, 0.007033378817141056, -0.047339845448732376, 0.04892575740814209, 0.04025464504957199, -0.06771914660930634, -0.017179565504193306, -0.018424062058329582, 0.00927536841481924, 0.016839994117617607, -0.036261845380067825, -0.015552322380244732, -0.016347039490938187, -0.02629273198544979, 0.016101161018013954, 0.013151828199625015, -0.011296764016151428, -0.042834408581256866, -0.0397283099591732, 0.03256569802761078, -0.028324883431196213, 0.0035945645067840815, 0.017051203176379204, 0.0037215452175587416, 0.014796794392168522, -0.03423595055937767, 0.0033539696596562862, -0.014831497333943844, -0.0015980524476617575, -0.040410365909338, -0.055268544703722, 0.034249197691679, -0.04853124916553497, 0.03197252377867699, -0.0274763535708189, 0.03833777457475662, 0.039223987609148026, -0.04769372195005417, -0.003849578555673361, -0.03983548656105995, -0.008111478760838509, -0.014292171224951744, 0.010675477795302868, 0.004968392662703991, 0.04419000819325447, -0.03374034911394119, 0.004912977572530508, 0.01107749156653881, 0.07175023853778839, -0.003204696113243699, 0.008696076460182667]\"\n./train/Bouvier_des_Flandres/n02106382_5429.JPEG,Bouvier_des_Flandres,\"[0.01130271703004837, -0.03404175862669945, 0.00556627893820405, 0.04118825122714043, 0.005897114984691143, -0.038794390857219696, 0.08445731550455093, -0.007636172231286764, -0.02101428247988224, 0.03299020603299141, -0.00756384851410985, -0.030467435717582703, 0.029726313427090645, 0.017353642731904984, 0.0032655498944222927, -0.007378853857517242, -0.03774309903383255, -0.0440649688243866, -0.006777104921638966, -0.020263180136680603, -0.06985986977815628, 0.01999916322529316, 0.0025085543747991323, -0.07406964898109436, 0.01791982911527157, 0.020393025130033493, 0.03702559694647789, -0.0339825302362442, 0.01915733516216278, -0.03098108246922493, -0.02620224468410015, 0.007921582087874413, 0.009674733504652977, -0.02289757877588272, 0.005426294170320034, 0.04820926859974861, 0.05330991744995117, 0.013873165473341942, -0.03106677159667015, 0.033712662756443024, -0.038918524980545044, 0.012785743921995163, 0.019443904981017113, -0.006965535692870617, 0.015448668971657753, -0.1788223534822464, -0.009669508785009384, -0.00172432663384825, 0.009673215448856354, -0.014898715540766716, 0.049739789217710495, -0.005503227934241295, 0.034708742052316666, 0.013945563696324825, 0.011619697324931622, 0.04833527281880379, -0.016330955550074577, 0.02627575770020485, 0.0026318072341382504, -0.004201260395348072, 0.004789107944816351, -0.013746448792517185, 0.0563276931643486, 0.02704778127372265, -0.016227584332227707, 0.006389444228261709, -0.008797026239335537, 0.0856708437204361, 0.003572868648916483, -0.00020151810895185918, 0.042170919477939606, -0.01227695494890213, -0.014226602390408516, -0.007250722032040358, -0.012405253946781158, 0.014529548585414886, -0.062069665640592575, -0.026544848456978798, -0.01771419495344162, -0.0030061642173677683, 0.03532185032963753, 0.037880878895521164, -0.03419283404946327, -0.10727477073669434, 0.024042420089244843, -0.007975474931299686, -0.049555521458387375, -0.012099023908376694, 0.07516101002693176, -0.0020883192773908377, -0.008297935128211975, -0.017783718183636665, -0.5791770815849304, 0.007173364516347647, -0.033332459628582, -0.031575947999954224, -0.006969849579036236, -0.002907433547079563, -0.03605659678578377, 0.1068822592496872, 0.053379300981760025, -0.02651279792189598, 0.031535569578409195, -0.0019817680586129427, -0.01008958276361227, 0.010288760997354984, -0.07138336449861526, 0.007962595671415329, -0.015037285163998604, 0.021949468180537224, -0.007831395603716373, -0.06999576836824417, -0.012831253930926323, -0.024405723437666893, -0.006836011074483395, -0.024276800453662872, -0.016029655933380127, -0.06217283010482788, -0.03464099392294884, 0.015258923172950745, 0.009665176272392273, 0.005742659326642752, -0.00964394211769104, 0.0007125735282897949, 0.0037109164986759424, -0.03073078766465187, -0.02144748903810978, 0.02530733309686184, -0.006049443036317825, -0.021966489031910896, 0.04867503419518471, 0.00017891907191369683, -0.0057460106909275055, 0.07991014420986176, -0.019330576062202454, 0.016424397006630898, -0.027994953095912933, -0.056768856942653656, -0.017473723739385605, 0.007416732609272003, -0.018434710800647736, 0.024382639676332474, 0.019602477550506592, 0.011425462551414967, -0.05951341614127159, 0.008760093711316586, 0.025834187865257263, -0.013556232675909996, -0.025966007262468338, -0.03296666964888573, 0.019968369975686073, 0.030056554824113846, 0.01296958327293396, 0.011530851013958454, -0.03040499985218048, -0.0032372616697102785, -0.009387719444930553, -0.042262088507413864, -0.021841267123818398, 0.008838542737066746, 0.008059951476752758, -0.01635303907096386, -7.266507600434124e-05, -0.014180800877511501, 0.08090091496706009, -0.056024596095085144, -0.018822915852069855, 0.00957022700458765, -0.04618312045931816, -0.0006566634401679039, -0.005651760846376419, -0.017192764207720757, 0.02341482602059841, -0.024687353521585464, 0.00017673647380433977, -0.026427259668707848, 0.03456734120845795, -0.06886392086744308, 0.0111510269343853, -0.03571152314543724, 0.014326918870210648, -0.027997730299830437, 0.02938280813395977, 0.018022220581769943, 0.0076459236443042755, -0.043043605983257294, 0.008946114219725132, -0.0019294924568384886, -0.02705414965748787, 0.00015024369349703193, 0.027280965819954872, -0.026256386190652847, 0.028560496866703033, 0.020458845421671867, -0.11067605018615723, -0.001541447127237916, 0.025951499119400978, -0.011548868380486965, 0.009998302906751633, -0.04110702872276306, -0.020662356168031693, 0.004936424549669027, 0.026255439966917038, 0.012976715341210365, -0.009306266903877258, -0.0038029153365641832, -0.026890713721513748, -0.01938607543706894, 0.008102048188447952, -0.0006030343938618898, -0.012057628482580185, -0.08492644131183624, 0.008970897644758224, 0.05530228465795517, -0.017407452687621117, -0.034671708941459656, 0.031657736748456955, 0.03361543267965317, 0.06845302134752274, -0.027080629020929337, 0.03489914536476135, 0.053124479949474335, 0.0025321487337350845, -0.0008349152049049735, -0.03777535632252693, -0.02162063680589199, -0.013533441349864006, 0.0013283956795930862, -0.03664726763963699, 0.003601999953389168, 0.005747830495238304, 0.02266714721918106, -0.021443776786327362, 0.047947779297828674, 0.007182664703577757, 0.013791937381029129, 0.00685034180060029, -0.04035229608416557, 0.032921548932790756, -0.02280178852379322, -0.011386530473828316, 0.019676752388477325, 0.045337382704019547, -0.01085330918431282, -0.029740160331130028, 0.09894546121358871, -0.0061460332944989204, -0.0038922475650906563, 0.005078423302620649, 0.06420040130615234, 0.014456663280725479, -0.013265863992273808, 0.02047734148800373, 0.07667888700962067, 0.03503499925136566, -0.03684527054429054, -0.022014949470758438, 0.03669355437159538, 0.04303111508488655, -0.048983316868543625, -0.0581786148250103, 0.06295793503522873, 0.027269583195447922, -0.04638028144836426, -0.023946408182382584, -0.018803302198648453, 0.014648037031292915, -0.004316585138440132, -0.026751425117254257, 0.06861503422260284, 0.0025206974241882563, 0.018391693010926247, 0.07648596167564392, -0.02583719789981842, -0.045134518295526505, 0.04692531377077103, 0.012282829731702805, -0.016091613098978996, 0.007700701709836721, -0.0014353861333802342, -0.0019081387436017394, -0.029961366206407547, -0.025536226108670235, -0.035727452486753464, -0.01534621138125658, 0.03781239688396454, -0.01956036128103733, -0.060365960001945496, 0.001258159289136529, -0.0027610326651483774, -0.028594503179192543, 0.027179911732673645, -0.007890935987234116, 0.01885189116001129, 0.015441282652318478, -0.004399730358272791, 0.039409343153238297, -0.030799314379692078, -0.02400481142103672, 0.03756626322865486, -0.005386115983128548, 0.004411458969116211, -0.02225607819855213, -0.005242111161351204, 0.02514573186635971, -0.024206262081861496, 0.03203815594315529, 0.047721534967422485, 0.07933638244867325, -0.013582523912191391, -0.012375212274491787, 0.11127854138612747, 0.07968265563249588, -0.060369040817022324, 0.01755523309111595, -0.039285607635974884, 0.024263937026262283, 0.026813913136720657, -0.05073224753141403, 0.0268627367913723, 0.026936082169413567, -0.024588709697127342, -0.018393507227301598, 0.043947454541921616, -0.017067691311240196, 0.008042758330702782, -0.005440270062536001, 0.006885812152177095, -0.015090478584170341, -0.04795136675238609, 0.026882711797952652, -0.026685163378715515, 0.0008123472216539085, -0.008074674755334854, -0.049758102744817734, -0.025759343057870865, 0.0005841928068548441, 0.048702072352170944, -0.012285870499908924, -0.027738839387893677, 0.016205014660954475, -0.011718878522515297, 0.0012888925848528743, -0.01012422051280737, 0.007495447061955929, 0.020688166841864586, -0.026977451518177986, -0.008294029161334038, 0.029478326439857483, 0.02147311344742775, -0.03164247050881386, -0.01830383576452732, 0.034845974296331406, -0.03631800413131714, -0.02120927721261978, 0.09679578244686127, 0.004499297589063644, -0.12130069732666016, -0.0064425403252244, -0.012635896913707256, 0.05907486751675606, -0.042190078645944595, 0.013245776295661926, -0.024754390120506287, -0.0718565285205841, -0.0009478835272602737, 0.028593506664037704, -0.07226340472698212, 0.008446432650089264, 0.01561123225837946, -0.04048812389373779, 0.008429048582911491, 0.038361676037311554, 0.02993977814912796, 0.027632810175418854, 0.016532249748706818, 0.20761968195438385, -0.0234453696757555, -0.049484968185424805, 0.04609885439276695, 0.044652387499809265, -0.06249906122684479, 0.016184618696570396, 0.03361131250858307, -0.015323320403695107, -0.029886355623602867, -0.03357904404401779, 0.00238313851878047, 0.043590348213911057, -0.032475925981998444, -0.06834588199853897, -0.02427939511835575, 0.02341928519308567, -0.006530506536364555, 0.017906054854393005, 0.014308732002973557, -0.04762926697731018, 0.025410763919353485, -0.0468767024576664, -0.014696387574076653, -0.005707981064915657, -0.036302004009485245, 0.022663909941911697, 0.011542683467268944, 0.014345514588057995, -0.01081134658306837, 0.02426830492913723, -0.05941591039299965, 0.016563329845666885, -0.021556885913014412, -0.0073854667134583, -0.047495365142822266, -0.04705363139510155, 0.007330771069973707, -0.03566625341773033, 0.014948873780667782, 0.011840197257697582, -0.025826020166277885, 0.03910398483276367, -0.00477052666246891, -0.025290628895163536, -0.03805254027247429, 0.0008034248603507876, -0.06742288917303085, 0.004949510097503662, -0.0879795029759407, 0.004117302596569061, 0.046814125031232834, 0.07204775512218475, -0.022954242303967476, -0.038120731711387634, 0.11456610262393951, 0.09340886771678925, 0.008457287214696407, -0.005670662969350815, 0.0007185260765254498, -0.03164042532444, 0.0154264559969306, 0.008933156728744507, -0.023204736411571503, 0.021257692947983742, 0.016600903123617172, -0.053930941969156265, 0.00596873601898551, -0.0005399035289883614, -0.014262224547564983, -0.029940487816929817, 0.01280953362584114, -0.03814045339822769, 0.003546567400917411, -0.03602634370326996, -0.017632661387324333, -0.012191085144877434, 0.010742648504674435, -0.008942614309489727, -0.04272470250725746, 0.012411899864673615, -0.010062395595014095, 0.008561797440052032, -0.0038840246852487326, -0.019101830199360847, 0.05765464901924133, -0.03434368222951889, 0.018170949071645737, 0.04607841372489929, 0.004123170860111713, -0.031415313482284546, -0.03408174589276314, -0.028294354677200317, 0.02196773886680603, 0.0385834164917469, -0.021605707705020905, 0.00966059509664774, -0.01537427119910717, 0.008370933122932911, 0.039705488830804825, -0.030374621972441673, -0.015109706670045853, -0.03155342489480972, -0.04574676603078842, 0.055509328842163086, -0.004303314257413149, 0.029587313532829285, -0.0017169315833598375, -0.021450340747833252, 0.02339870110154152, 0.002706343773752451, 0.006406398955732584, -0.013402329757809639, -0.03569132089614868, -0.07725204527378082, -0.027803735807538033, 0.02736774832010269, -0.08700130134820938, 0.02319427952170372, -0.038338229060173035, 0.04192477464675903, 0.05553972348570824, 0.0009578922181390226, 0.008788518607616425, -0.019798342138528824, -0.01502959243953228, 0.016247183084487915, 0.030247388407588005, 0.004240803420543671, -0.020501967519521713, -0.009651158936321735, -0.04081360995769501, -0.045504890382289886, 0.026186993345618248, 0.02077716775238514, 0.016702262684702873]\"\n./train/Bouvier_des_Flandres/n02106382_8906.JPEG,Bouvier_des_Flandres,\"[-0.002547287382185459, -0.012301451526582241, -0.04059918224811554, 0.029854791238904, 0.017663855105638504, -0.02271731197834015, 0.07867152988910675, -0.012368474155664444, 0.03297265246510506, 0.017734477296471596, 0.011619810946285725, 0.0226497333496809, -0.030190765857696533, 0.008388818241655827, -0.007553949952125549, 0.04445584490895271, 0.07826027274131775, 0.006973139476031065, 0.02134496346116066, -0.023186227306723595, 0.006782277021557093, 0.001812877831980586, 0.04883933439850807, -0.04561956599354744, -0.022083068266510963, 0.00605465192347765, 0.025342604145407677, -0.01168813370168209, 0.0037238625809550285, -0.03833160921931267, -0.008479743264615536, 0.04322059825062752, 0.016479114070534706, 0.004241407383233309, 0.0412709042429924, 0.019871603697538376, 0.01386808417737484, -0.040509987622499466, -0.011394083499908447, 0.1365445852279663, -0.055026017129421234, 0.012574140913784504, 0.025240348652005196, -0.03243112936615944, 0.0413258895277977, -0.11884436011314392, -0.004285878036171198, 0.04099791869521141, -0.016596157103776932, -0.017971809953451157, 0.005144583061337471, 0.034640971571207047, -0.006565074436366558, 0.008845610544085503, 0.0024000408593565226, 0.002778691006824374, 0.019095169380307198, 0.03016820177435875, -0.0068438295274972916, -0.011747756972908974, 0.08911255747079849, -0.011213170364499092, 0.01913396269083023, 0.023513974621891975, -0.00947963260114193, -0.04615605250000954, 0.027738574892282486, -0.021939193829894066, -0.011371477507054806, 0.004441970959305763, 0.023521525785326958, -0.0012887583579868078, 0.003918876871466637, 0.004665756598114967, -0.014891230501234531, -0.003483414649963379, -0.024127397686243057, -0.06649380922317505, 0.013851441442966461, -0.008070627227425575, 0.04913347214460373, 0.029832011088728905, -0.01833571121096611, -0.06089206784963608, 0.014686491340398788, -0.0005461908876895905, 0.06821656227111816, -0.0473589263856411, 0.10842794179916382, -0.019005388021469116, -0.02080729976296425, -0.061094019562006, -0.6128964424133301, 0.022059600800275803, -0.010008886456489563, 0.017618894577026367, -0.02027995139360428, 0.010994615033268929, -0.050797585397958755, 0.022322511300444603, 0.023428549990057945, -0.022016773000359535, 0.03048492968082428, -0.006161041092127562, 0.043301746249198914, -0.039883654564619064, -0.0220019668340683, 0.033856894820928574, 0.0031873532570898533, 0.010239177383482456, 0.015039944089949131, -0.07940365374088287, -0.026062918826937675, -0.028211092576384544, 0.01399316918104887, 0.0123832318931818, -0.03278810903429985, -0.026842812076210976, 0.007458996493369341, 0.004894818179309368, 0.06721789389848709, -0.003419018117710948, -0.015522126108407974, -0.016244813799858093, 0.022824110463261604, -0.05728711932897568, -0.03485265374183655, 0.06359287351369858, 0.016963528469204903, 0.018929235637187958, 0.03305956721305847, -0.052529651671648026, -0.007130688522011042, 0.0799630880355835, -0.06625080853700638, -0.0002649387752171606, -0.0076303379610180855, -0.04920877888798714, -0.0009723915718495846, -0.000869273382704705, -0.00696200504899025, -0.019352206960320473, 0.040638960897922516, -0.011746338568627834, 0.011229432187974453, 0.04381703585386276, 0.03285296633839607, 0.019441576674580574, -0.031955935060977936, -0.03141627088189125, -0.0031707158777862787, 0.019601771607995033, 0.007303466089069843, -0.028089206665754318, -0.0009439633577130735, 0.04938023164868355, -0.012266037054359913, -0.034849029034376144, 0.026905199512839317, -0.005305720027536154, -0.05214680731296539, 0.012218696996569633, -0.0053718783892691135, 0.011300241574645042, 0.041087787598371506, -0.021907594054937363, 0.00486934557557106, 0.015490601770579815, 0.011508218012750149, 0.016137413680553436, -0.005212601274251938, -0.01144638005644083, -0.011550866067409515, -0.04070416837930679, -0.003354866523295641, -0.037752483040094376, 0.06126044690608978, 0.00048070892808027565, 0.055781252682209015, -0.03589559718966484, -0.03616337105631828, 0.0037317832466214895, -0.0005338535411283374, -0.02654595673084259, 0.047512974590063095, -0.018360821530222893, 0.0447721928358078, -0.022585272789001465, 0.013786882162094116, 0.005409139208495617, 0.03069240413606167, 0.0079561872407794, 0.03617910295724869, 0.015692103654146194, -0.07395241409540176, -0.010473542846739292, -0.010782614350318909, -0.0022751789074391127, -0.040822796523571014, -0.03194804489612579, -0.011484741233289242, 0.016319191083312035, 0.0017962476704269648, 0.022620312869548798, -0.029642216861248016, -0.006743719335645437, -0.05703842267394066, -0.03354346752166748, 0.035305701196193695, 0.025674784556031227, -0.03766380250453949, -0.011580239050090313, 0.002878757193684578, 0.03166547045111656, -0.023285407572984695, -0.024035315960645676, 0.01454570610076189, 0.011787871830165386, 0.15045969188213348, 0.025723546743392944, 0.06517063826322556, 0.06334588676691055, -0.018373478204011917, -0.007773620542138815, -0.028262261301279068, 0.0178829375654459, -0.03046419844031334, -0.003032329957932234, 0.023477787151932716, -0.01891159452497959, 0.016104087233543396, -0.006186327431350946, 0.003940047230571508, 0.053444597870111465, -0.015628669410943985, -0.010602795518934727, -0.02614773064851761, -0.005114928353577852, 0.00993775948882103, -0.023480847477912903, 0.011686327867209911, 0.01004910096526146, 0.04603629559278488, -0.03312419354915619, -0.024814128875732422, 0.05398862063884735, -0.011698003858327866, -0.025622140616178513, 0.007254863157868385, 0.048637617379426956, -0.006054234690964222, 0.026391109451651573, 0.040179088711738586, 0.006484552286565304, 0.030996758490800858, 0.004100830294191837, -0.020335644483566284, 0.022601433098316193, 0.08341490477323532, 0.026398418471217155, -0.02639377862215042, 0.024968747049570084, -0.006070347502827644, -0.07495898753404617, 0.013673168607056141, -0.028847631067037582, 0.030585240572690964, -0.01297791488468647, 0.018084635958075523, 0.040205419063568115, -0.02744128368794918, -0.006734087131917477, 0.06727919727563858, 0.03145354241132736, 0.004001217428594828, -0.02090323716402054, 0.005286967847496271, -0.023155340924859047, -0.024312833324074745, -0.021023161709308624, -0.015950709581375122, -0.01000223308801651, -0.053050603717565536, 0.0014972907956689596, 0.00013123742246534675, 0.043270621448755264, 0.03568080812692642, -0.012288306839764118, -0.008131764829158783, 0.007244606502354145, -0.018319422379136086, 0.010380649007856846, 0.02062215283513069, -0.02953258343040943, -0.006165570579469204, 0.021714570000767708, 0.04550286754965782, -0.021805936470627785, 0.002067571273073554, -0.010908037424087524, 0.019592823460698128, 0.013606023974716663, -0.0007623184355907142, 0.0044435602612793446, 0.010163716040551662, -0.06817492097616196, 0.009174519218504429, 0.047433190047740936, 0.08059749007225037, 0.029336174950003624, 0.0011947017628699541, 0.04968500882387161, 0.07973340153694153, -0.012163978070020676, 0.007879674434661865, 0.019493136554956436, 0.01685802824795246, 0.025691181421279907, -0.0007938090129755437, -0.08255556225776672, 0.05173007771372795, 0.10495174676179886, -0.019507471472024918, -0.013390395790338516, 0.02404065616428852, 0.023945121094584465, -0.02267390303313732, -0.005023185629397631, -0.05243051424622536, -0.01821245439350605, 0.0028706081211566925, -0.007394400425255299, 0.026060612872242928, -0.01684686914086342, -0.02934553101658821, -0.010665027424693108, 0.019411878660321236, 0.06450258940458298, -0.011983359232544899, 0.006164893042296171, 0.003745327005162835, -0.02460968866944313, -0.030771451070904732, 0.03801264241337776, 0.03373267129063606, 0.03947349637746811, 0.018739569932222366, -0.0027086858171969652, -0.03782542049884796, 0.001490438706241548, -0.03978385403752327, 0.0008010927704162896, 0.03416617959737778, 0.014175358228385448, 0.029311740770936012, 0.13262943923473358, 0.028721600770950317, -0.15098387002944946, 0.0031816812697798014, 0.02535937912762165, 0.0820562094449997, -0.02175627090036869, 0.025387458503246307, 0.008211386390030384, -0.07436145097017288, -0.0159525815397501, 0.024532515555620193, -0.04271756857633591, -0.007453401107341051, -0.006227520294487476, -0.023365648463368416, 0.017979703843593597, -0.005325761623680592, 0.02671227790415287, 0.008792062290012836, 0.001073772320523858, 0.1016431674361229, -0.0008721423801034689, -0.05838543549180031, 0.031618501991033554, 0.0010846179211512208, -0.0466587208211422, -0.004931040108203888, 0.005039777606725693, -0.008878607302904129, 0.026713285595178604, -0.023597661405801773, 0.004235240630805492, 0.05810390040278435, -0.11812110990285873, -0.0834367498755455, -0.089957095682621, -0.0019395030103623867, -0.019173288717865944, -0.008604849688708782, -0.025396669283509254, 0.005898689851164818, 0.02019072137773037, -0.029225004836916924, -0.03830026462674141, -0.026841076090931892, -0.011676364578306675, 0.0015287958085536957, 0.02573668584227562, 0.017887666821479797, 0.01469674613326788, 0.016733773052692413, -0.037000928074121475, 0.03826497495174408, -0.034560661762952805, 0.057413071393966675, -0.021131448447704315, -0.030900288373231888, 0.0547800175845623, -0.021216562017798424, 0.02207951433956623, 0.015553034842014313, -0.03632519394159317, 0.04229763150215149, -0.036754265427589417, 0.03658359870314598, -0.00547582795843482, 0.016391512006521225, -0.041209496557712555, 0.05013861507177353, -0.041834451258182526, -0.04871227592229843, 0.025160077959299088, 0.07259249687194824, -0.004941966850310564, 0.0030456818640232086, 0.020665496587753296, 0.01416358444839716, -0.009301872923970222, -0.013538786210119724, 0.0014706089859828353, -0.03890683129429817, 0.033119313418865204, 0.02072267234325409, -0.018352609127759933, 0.016432983800768852, -0.020010409876704216, -0.02502078376710415, -0.043766237795352936, 0.005196637939661741, -0.04294256493449211, -0.018384728580713272, 0.009767343290150166, -0.0039868708699941635, -0.0004960543592460454, -0.031158413738012314, -0.039900559931993484, -0.018199266865849495, 0.01836542785167694, -0.029913516715168953, -0.008557610213756561, 0.012204030528664589, -0.006283358670771122, 0.05019822716712952, 0.029250703752040863, -0.020554013550281525, 0.02238374389708042, -0.007366363890469074, -0.00490226736292243, 0.05654808506369591, 0.013932104222476482, -0.04084596037864685, -0.02471870742738247, 0.00017286081856582314, 0.019069047644734383, 0.05975537747144699, -0.01879093237221241, -0.016931112855672836, -0.007809956092387438, -0.009465230628848076, 0.01985284686088562, 0.015514486469328403, -0.004501682240515947, -0.0264004897326231, -0.02584916539490223, 0.0031077282037585974, -0.028078826144337654, -0.010366342961788177, 0.03606140986084938, -0.018192745745182037, 0.020915241912007332, 0.0013473837170749903, 0.03275309503078461, -0.011627251282334328, -0.03539026901125908, -0.061577338725328445, -6.600484630325809e-05, 0.036278851330280304, -0.06607889384031296, 0.03513624891638756, -0.010863547213375568, 0.03799000382423401, 0.03887571766972542, -0.021091697737574577, -0.006704139523208141, -0.044137898832559586, -0.007103111129254103, 0.0024361945688724518, 0.05505874380469322, 0.07842206954956055, 0.03690339997410774, -0.02311011590063572, -0.0075658769346773624, -0.009081912226974964, 0.04844661429524422, 0.02205980010330677, 0.026387805119156837]\"\n./train/Bouvier_des_Flandres/n02106382_2872.JPEG,Bouvier_des_Flandres,\"[-0.011029976420104504, 0.0196671262383461, -0.00575852720066905, -0.013818243518471718, 0.03651050850749016, -0.0635773092508316, 0.08181782811880112, 0.012794475071132183, 0.04443230479955673, 0.00954008474946022, -0.014433376491069794, 0.04075329378247261, -0.016799593344330788, -0.004183883313089609, -0.009469905868172646, 0.049728214740753174, 0.11489987373352051, -0.021464256569743156, 0.032350458204746246, 0.017772268503904343, -0.02264278382062912, 0.05527876317501068, 0.015900570899248123, -0.030835049226880074, 0.007454200182110071, 0.013083785772323608, 0.024025605991482735, -0.02694990672171116, -0.016057070344686508, -0.008266507647931576, 0.031333595514297485, 0.013317850418388844, 0.006645180284976959, -0.0311569944024086, 0.010360856540501118, -0.004887481220066547, 0.00011992136569460854, -0.04722828418016434, -0.04763172194361687, 0.17934459447860718, -0.0632442757487297, 0.0006643545930273831, 0.008524377830326557, 0.006273931358009577, 0.02438328042626381, -0.11555489152669907, -0.043720874935388565, 0.04159241169691086, 0.04105890542268753, 0.0017798260087147355, -0.003777218982577324, 0.01608947664499283, 0.010356221348047256, 0.02330983243882656, 0.01753576658666134, 0.012000461108982563, 0.018464796245098114, 0.06010102480649948, -0.018954290077090263, -0.05625063180923462, 0.09934519231319427, -0.025388451293110847, 0.020845802500844002, -0.02893274463713169, -0.006330160424113274, -0.0013334305258467793, -0.03481495752930641, 0.01124912966042757, -0.03977736085653305, 0.013996109366416931, 0.009667200036346912, -0.001776169752702117, 0.018230479210615158, -0.027746951207518578, -0.010051079094409943, -0.013376589864492416, -0.06222188472747803, -0.06675786525011063, 0.0061941142193973064, 0.0018259556964039803, 0.019239895045757294, 0.036955930292606354, -0.0009183827787637711, -0.07532636821269989, 0.025032024830579758, -0.03189697861671448, 0.0725783035159111, -0.028049062937498093, 0.02688654698431492, 0.033093955367803574, -0.033475566655397415, -0.07051291316747665, -0.6102434396743774, 0.07623286545276642, -0.02992378920316696, -0.0011876209173351526, 0.001901599345728755, 0.020985202863812447, -0.08445213735103607, 0.07316946983337402, 0.01459197886288166, -0.014502201229333878, 0.04615577310323715, -0.021966153755784035, 0.04152557626366615, 0.02352892793715, -0.03141087666153908, 0.03715656325221062, -0.0439947172999382, -0.023097960278391838, 0.030023440718650818, -0.03958119451999664, 0.009581699036061764, 0.009679478593170643, -0.01794344186782837, 0.014651290141046047, 0.0037920637987554073, -0.0678538903594017, 0.016378479078412056, -0.0047792657278478146, 0.049757327884435654, -0.05267668142914772, 0.009768625721335411, -0.018555495887994766, 0.009292800910770893, -0.02049659751355648, -0.00983340386301279, 0.02912103570997715, -0.003922468051314354, -0.0411694310605526, 0.05480552092194557, -0.05227931961417198, -0.05138709768652916, 0.08292589336633682, -0.03039349429309368, 0.00025229042512364686, 0.0549495667219162, -0.0221512783318758, 0.020828669890761375, -0.0036447267048060894, -0.001361480331979692, 0.01456049457192421, -0.023861508816480637, 0.00867821741849184, -0.06863782554864883, 0.0051157125271856785, -0.0018394187791272998, 0.030731111764907837, -0.026081852614879608, 0.001426752540282905, -0.012811942957341671, -0.003014321206137538, -0.026418745517730713, -0.0029748098459094763, -0.07134323567152023, 0.014226223342120647, -0.029291223734617233, -0.010637610219419003, -0.01936965622007847, 0.008046368137001991, -0.056543584913015366, -0.01208153273910284, -0.014980930835008621, -0.0041002328507602215, 0.028674213215708733, -0.05588779225945473, -0.015618669800460339, -0.034974604845047, 0.04000483825802803, 0.007570532616227865, 0.016192447394132614, -0.009294690564274788, -9.915274858940393e-05, -0.03614943102002144, -0.0013466618256643414, 0.0001822893973439932, 0.08451102674007416, -0.0011485717259347439, 0.022509485483169556, -0.03692379966378212, -0.0022553340531885624, 0.017606083303689957, 0.03478313982486725, 0.0018249006243422627, 0.005863710772246122, -0.03348775580525398, 0.02669374831020832, -0.033668432384729385, -0.008475330658257008, -0.011120891198515892, -0.013451043516397476, 0.0006157683674246073, 0.04295842722058296, -0.014915629290044308, -0.002934633055701852, 0.02133980020880699, 0.027737168595194817, 0.008894197642803192, -0.08463047444820404, -0.029810763895511627, -0.011243728920817375, 0.024683363735675812, 0.0017274165293201804, 0.016778413206338882, -0.053957417607307434, -0.011777067556977272, -0.02990693971514702, -0.04143882915377617, 0.009464382193982601, 0.010089248418807983, -0.05585633963346481, -0.004997649230062962, 0.004681994207203388, 0.012617102824151516, 0.006957496050745249, 0.010863147675991058, 0.009740384295582771, 0.009327558800578117, 0.08399255573749542, -0.019343188032507896, 0.08227647840976715, 0.07106110453605652, 0.019620539620518684, -0.025460487231612206, -0.02781287021934986, -0.023904865607619286, -0.038990724831819534, -0.00754014914855361, 0.016632048413157463, -0.011037059128284454, 0.036109454929828644, 0.023761220276355743, -0.0023138311225920916, 0.03826427832245827, -0.007801910862326622, 0.016107425093650818, 0.02996671199798584, -0.04143945872783661, -0.020958349108695984, -0.05939851328730583, 0.011556846089661121, -0.005460917484015226, 0.02919445000588894, 0.005630096420645714, -0.012447054497897625, 0.05064453184604645, 0.018061993643641472, -0.061116453260183334, 0.011040402576327324, 0.050989627838134766, -0.011769882403314114, 0.026585685089230537, 0.045158568769693375, -0.007609711494296789, 0.02881942316889763, 0.01689009554684162, -0.009679223410785198, -0.017507513985037804, -0.02224271558225155, -0.0449276901781559, -0.010974432341754436, 0.036614641547203064, 0.02976841665804386, -0.049534011632204056, 0.0164970550686121, 0.01181954424828291, 0.001610702951438725, -0.0005184297333471477, 0.0171752218157053, 0.030461382120847702, -0.008499030023813248, 0.003359415102750063, 0.04020635783672333, 0.02868157997727394, 0.025973305106163025, 0.027020001783967018, 0.020563215017318726, -0.01759493350982666, -0.022668803110718727, 0.004658814985305071, -0.027746889740228653, -0.017109205946326256, -0.006264749448746443, -0.05714904144406319, 0.047785885632038116, -0.007272879593074322, 0.07081017643213272, 0.01635291799902916, -0.018914418295025826, 0.006445097737014294, -0.003590428503230214, -0.012003814801573753, -0.01761709898710251, 0.010130277834832668, -0.032392021268606186, 0.043966732919216156, 0.037831585854291916, 0.0019581469241529703, -0.0015654839808121324, 0.006538181100040674, -0.027941837906837463, 0.010823388583958149, 0.015125584788620472, -0.02697032503783703, 0.005331872031092644, -0.037059884518384933, -0.019637905061244965, 0.012255148962140083, 0.04094579070806503, -0.012596883811056614, -0.014144960790872574, 0.015264724381268024, 0.08271429687738419, -0.018957527354359627, 0.0017765042139217257, -0.015602833591401577, 0.03519674763083458, 0.030059732496738434, -0.004640231840312481, -0.06311628967523575, 0.0898255780339241, 0.10788226127624512, -0.030393607914447784, -0.00893637165427208, 0.03902055323123932, 0.005303083918988705, 0.024606844410300255, 0.01347382552921772, -0.024048620834946632, 0.003922066651284695, 0.016047373414039612, -0.03715195506811142, 0.018210699781775475, -0.04110853001475334, 0.002557368716225028, -0.011638218536973, 0.007077950052917004, 0.04186250641942024, 0.03841226547956467, -0.025315916165709496, 0.03983788564801216, 0.011116907000541687, -0.0348743200302124, 0.014661611057817936, 0.008601263165473938, 0.056277085095644, 0.05173565819859505, -0.014491492882370949, 0.003658224130049348, -0.004209257196635008, 0.001650820835493505, 0.006408678833395243, 0.031225280836224556, -0.00946319941431284, 0.016805468127131462, 0.0499010868370533, -0.00978359766304493, -0.09712184965610504, 0.002689523156732321, -0.030795646831393242, 0.08875395357608795, -0.05433601513504982, -0.006916319020092487, -0.01719566248357296, -0.1291009485721588, 0.047338299453258514, 0.015660766512155533, -0.05520785599946976, -0.0281528253108263, -0.00016108201816678047, -0.024347538128495216, 0.007589244749397039, 0.009851422160863876, 0.025528941303491592, 0.0034802532754838467, -0.034768007695674896, 0.11749161779880524, 0.0023313460405915976, -0.016443319618701935, 0.01661202497780323, 0.025275204330682755, 0.011626210995018482, 0.0026573236100375652, 0.04559989273548126, -0.010101107880473137, -0.029872436076402664, -0.03815010190010071, 0.013039980083703995, 0.030952196568250656, -0.05122455954551697, -0.041930846869945526, -0.09763546288013458, 0.010328473523259163, -0.017935145646333694, 0.0002901263942476362, -0.025498680770397186, 0.004373341798782349, 0.0013202278641983867, -0.06700308620929718, -0.0656576156616211, -0.02304736338555813, 0.02372407354414463, 0.03924839198589325, 0.05389265716075897, 0.0033551612868905067, -0.02391091175377369, 0.01460866816341877, -0.03857964649796486, 0.035656705498695374, -0.04508562758564949, 0.09205102175474167, -0.020062992349267006, 0.006876256316900253, 0.014701847918331623, -0.030588114634156227, 0.021611958742141724, 0.005758393090218306, -0.02001826837658882, -0.03151078149676323, -0.0005079000839032233, 0.044384222477674484, 0.01812397874891758, -0.011228194460272789, -0.03832561522722244, 0.013284175656735897, 0.002338903257623315, -0.0019305634777992964, 0.024492407217621803, -0.019300583750009537, -0.0013343066675588489, -0.04062284529209137, 0.03845428302884102, 0.08409343659877777, -0.028614629060029984, -0.021477334201335907, -0.03091350384056568, -0.057281699031591415, 0.033668164163827896, 0.05271456018090248, -0.028369983658194542, 0.008771589957177639, -0.009695553220808506, -0.04204479232430458, -0.001409224234521389, 0.01725209504365921, -0.006756308954209089, 0.008565385825932026, 0.010303896851837635, 0.006860204506665468, 0.04162225499749184, 0.00633070757612586, 0.006361766252666712, -0.009373202919960022, -0.002881530672311783, -0.0050710514187812805, -0.004257526248693466, 0.043558306992053986, 0.03460625559091568, -0.002351202303543687, 0.011611059308052063, 0.009565710090100765, 0.04969821497797966, -0.005887807346880436, 0.02350207231938839, 0.04368580877780914, 0.013937710784375668, -0.056856658309698105, -0.02735440991818905, -0.03193998336791992, 0.002770564518868923, 0.06332547217607498, -0.0549142025411129, -0.03530186042189598, -0.053177088499069214, 0.010834462009370327, 0.001094155479222536, 0.005349035374820232, 0.00857228972017765, 0.010889684781432152, -0.01844535395503044, -0.0056176334619522095, -0.03616432473063469, 0.011944225057959557, 0.00897583644837141, 0.02007145993411541, 0.03921465575695038, 0.018879801034927368, 0.04493284597992897, 0.018320195376873016, -0.017987128347158432, -0.041490957140922546, -0.02869160659611225, 0.027175946161150932, -0.060450635850429535, 0.00322232348844409, -0.022203389555215836, 0.04128442704677582, 0.018537871539592743, 0.013224839232861996, -0.0008389930007979274, 0.00976591557264328, -0.02071436308324337, -0.014898357912898064, -0.014353684149682522, 0.028263511136174202, 0.0043078879825770855, -0.009509137831628323, -0.01693938858807087, -0.032617297023534775, 0.04622947424650192, 0.029403073713183403, -0.0057190945371985435]\"\n./train/Bouvier_des_Flandres/n02106382_6290.JPEG,Bouvier_des_Flandres,\"[-0.014855955727398396, -0.015777841210365295, -0.027891041710972786, 0.04627906158566475, 0.016026120632886887, -0.03223896771669388, 0.05861099809408188, -0.005456206388771534, 0.0751563161611557, 0.02810431271791458, -0.007441517896950245, 0.002579802181571722, 0.013311623595654964, 0.005967248696833849, 0.01559888944029808, 0.007224827539175749, 0.16012036800384521, 0.017207909375429153, 0.009292805567383766, -0.053368814289569855, 0.010059600695967674, 0.02826516702771187, 0.02868388406932354, -0.04075118899345398, -0.007263446692377329, -0.017991218715906143, 0.06463348865509033, -0.029723992571234703, -0.0018817600794136524, -0.02905455231666565, -0.00581891555339098, 0.06501954793930054, -0.0012173594441264868, -0.01718313619494438, 0.056846339255571365, 0.042460501194000244, 0.031823430210351944, -0.012117477133870125, -0.009495427832007408, 0.15535204112529755, -0.07368966937065125, -0.004679081495851278, 0.0076089282520115376, -0.027777191251516342, 0.009931960143148899, -0.13208292424678802, 0.01874765194952488, 0.021178344264626503, -0.011045566760003567, 0.02760758250951767, 0.005348143167793751, 0.05251021310687065, -0.02475172095000744, 0.02464381419122219, 0.02816508710384369, 0.016086706891655922, 0.008848495781421661, 0.006026779767125845, 0.015022275038063526, -0.007706836797297001, 0.18189920485019684, 0.016197578981518745, 0.05453503131866455, 0.0419686958193779, -0.01122954674065113, 0.007519887760281563, 0.024120528250932693, 0.02458195574581623, -0.02882533334195614, -0.00048798968782648444, 0.03995567932724953, -0.021116720512509346, 0.043977998197078705, 0.010763105005025864, -0.003023905446752906, -0.004629515577107668, -0.025822989642620087, -0.046619951725006104, -0.021729005500674248, 0.019251925870776176, 0.04406613111495972, 0.0073983813636004925, -0.06620073318481445, -0.0455428846180439, 0.023787399753928185, -0.029062870889902115, 0.02127295732498169, -0.038896311074495316, 0.02475895918905735, -0.008669501170516014, 0.010446678847074509, -0.05878010764718056, -0.5612645149230957, 0.020728174597024918, -0.03980739042162895, 0.013484002090990543, 0.025501441210508347, 0.003993934020400047, -0.0964006781578064, 0.09212402254343033, 0.020393263548612595, -0.038133420050144196, -0.011123216710984707, -0.0186855997890234, 7.595081115141511e-05, -0.016197245568037033, 0.06321606040000916, 0.010558683425188065, -0.02990141324698925, 0.01810554414987564, 0.011172342114150524, -0.08166990429162979, 0.004062208812683821, -0.04532277211546898, 0.019896725192666054, -0.04141711816191673, -0.014061486348509789, -0.012132594361901283, 0.033298149704933167, -0.017632635310292244, 0.05276622995734215, -0.033624179661273956, -0.03758096322417259, -0.020579615607857704, 0.033651843667030334, -0.05423598363995552, -0.035358887165784836, 0.044394806027412415, 0.012582394294440746, 0.012841401621699333, 0.00187101517803967, -0.045583341270685196, -0.0501413568854332, 0.07317725569009781, -0.046774622052907944, 0.007997245527803898, -0.03816838562488556, -0.06590364128351212, -0.006820749957114458, -0.0054823183454573154, -0.020045572891831398, -0.01532081700861454, 0.016299834474921227, 0.01678416319191456, -0.027044961228966713, 0.047874461859464645, 0.04154492914676666, 0.010997628793120384, -0.01352421659976244, -0.008876531384885311, 0.005561919882893562, 0.03274949640035629, -0.028601404279470444, 0.0007527486886829138, -0.016985751688480377, 0.012043284252285957, -0.009593449532985687, -0.042656317353248596, -0.013666272163391113, -0.011643105186522007, -0.05331578478217125, -0.010199464857578278, 0.00869401078671217, 0.044140007346868515, 0.015139519236981869, -0.02685791626572609, -0.017664723098278046, 0.03215482831001282, -0.008103931322693825, 0.025437723845243454, -0.013642853125929832, 0.0025062919594347477, 0.003067728830501437, -0.02605324052274227, 0.01963385008275509, -0.04171422868967056, 0.18406394124031067, -0.010732353664934635, 0.053697820752859116, -0.014839953742921352, -0.012160206213593483, -0.002857336075976491, 0.011667074635624886, 0.00358836492523551, 0.001902007614262402, -0.010232286527752876, 0.042160697281360626, -0.02861965447664261, 0.02549448050558567, 0.00012676921323873103, 0.026887856423854828, 0.003986579831689596, 0.05080561339855194, 0.016029117628932, 0.022847335785627365, 0.030033349990844727, 0.027065064758062363, -0.024205118417739868, -0.07328056544065475, -0.006922958418726921, -0.009228017181158066, 0.035439666360616684, 0.022791976109147072, -0.0017237254651263356, -0.04462171345949173, -0.027768384665250778, -0.03688668832182884, 0.005601286888122559, 0.0023757538292557, 0.032598577439785004, -0.025484934449195862, 0.009158564731478691, -0.01891055889427662, 0.03595082089304924, -0.04212197661399841, -0.032193101942539215, -0.00861441157758236, 0.02290445566177368, 0.12030276656150818, -0.01680956408381462, 0.0873996689915657, 0.02698008343577385, 0.011495784856379032, 0.01396748423576355, -0.05366695299744606, 0.018643423914909363, -0.022567128762602806, -0.007004675455391407, 0.014966396614909172, 0.00022360560251399875, 0.015114128589630127, -0.003566357307136059, 0.008149148896336555, 0.048590753227472305, -0.03942529112100601, 0.03868826851248741, -0.05159258842468262, -0.022809192538261414, -0.03930393233895302, -0.03824829310178757, -0.007148249540477991, 0.01070247869938612, 0.01080458052456379, 0.0058372956700623035, -0.02691974863409996, 0.05736612528562546, 0.031295374035835266, -0.08915513008832932, 0.030868465080857277, 0.08151870965957642, 0.040692828595638275, 0.010615003295242786, 0.004095051903277636, -0.009635723195970058, 0.041021641343832016, 0.01611226797103882, -0.012689548544585705, 0.03528286889195442, 0.030701803043484688, 0.017019910737872124, -0.002176193054765463, 0.052523110061883926, 0.0015831791097298265, -0.019647570326924324, 0.01582205481827259, -0.018278704956173897, 0.03850916400551796, -0.01403249055147171, -0.01212876196950674, 0.04849652200937271, -0.017565304413437843, 0.017886970192193985, 0.05355655774474144, 0.00913297664374113, -0.007068652659654617, -0.016297344118356705, 0.03883151337504387, -0.0020180726423859596, -0.008395728655159473, -0.022938575595617294, -0.004505066201090813, 0.0017485321732237935, -0.030593877658247948, -0.04655606299638748, -0.03131218999624252, -0.022278860211372375, 0.06739097088575363, -0.013601639308035374, -0.01702762395143509, -0.0014775360468775034, 0.008973108604550362, -0.0021556937135756016, 0.01968497782945633, -0.017157794907689095, -0.008032932877540588, 0.014700484462082386, 0.020298028364777565, 0.020371979102492332, 0.013876643031835556, 0.01195607241243124, -0.02763621136546135, -0.02269190549850464, -0.007908734492957592, 0.00787252839654684, 0.010424867272377014, -0.030506784096360207, -0.0018323709955438972, 0.03324102982878685, 0.03783732280135155, 0.008523437194526196, 0.029902499169111252, 0.059464745223522186, 0.07294333726167679, -0.017931900918483734, 0.024920674040913582, 0.008268158882856369, 0.030023735016584396, 0.02749684453010559, -0.020876815542578697, -0.04470520094037056, 0.06011457368731499, 0.050940316170454025, -0.01925969496369362, 0.010819475166499615, -0.004603451583534479, 0.06189555302262306, -0.02824045903980732, -0.009529964067041874, -0.018843375146389008, -0.03133773058652878, 0.0075177475810050964, -0.002205953700467944, 0.040025871247053146, 0.007066360209137201, -0.026180438697338104, -0.022071251645684242, 0.005704610142856836, 0.04086967557668686, -0.018497154116630554, -0.03224492073059082, 0.007829765789210796, -0.030964555218815804, -0.039005156606435776, 0.04411919042468071, 0.07499906420707703, 0.01912606880068779, 0.020036563277244568, 0.01164931058883667, 0.014512093737721443, -0.052778612822294235, -0.01439070887863636, 0.018785951659083366, 0.01789286360144615, 0.02775914967060089, 0.01756378263235092, 0.08114497363567352, 0.004341347608715296, -0.09679120779037476, 0.005003283265978098, -0.024100352078676224, 0.069707490503788, -0.035465024411678314, -0.0069784433580935, -0.004966139793395996, -0.09428434073925018, 0.011345199309289455, 0.013640213757753372, -0.03744080290198326, 0.022759463638067245, -0.0015342062106356025, -0.021642163395881653, -0.006761884316802025, 0.018706105649471283, 0.021483300253748894, -0.01019691489636898, -0.0016735675744712353, 0.1597650945186615, -0.03703448921442032, -0.06153365224599838, 0.02637004852294922, 0.011949252337217331, -0.07588118314743042, 0.01484591793268919, 0.030621226876974106, -0.021964088082313538, -0.02736259065568447, -0.00526136439293623, 0.01894567720592022, 0.062083274126052856, -0.11448352783918381, -0.07167728990316391, -0.08790285885334015, 0.008279849775135517, -0.020224183797836304, 0.019578270614147186, 0.011749697849154472, -0.001311135827563703, 0.006354151293635368, -0.020018136128783226, -0.04041551053524017, -0.018420685082674026, -0.009034759365022182, -0.012477127835154533, -0.0006399389822036028, -7.084758544806391e-05, -0.0072737024165689945, 0.001866502920165658, -0.030349157750606537, 0.05651320517063141, -0.013467317447066307, 0.09112387150526047, -0.01986248977482319, -0.010131110437214375, 0.019088556990027428, -0.018691999837756157, -0.023402683436870575, 0.020109789445996284, -0.029724320396780968, 0.024547100067138672, -0.030052749440073967, 0.04544717073440552, 0.022192107513546944, 0.01679597608745098, -0.021229250356554985, 0.05076148733496666, -0.023283589631319046, -0.013374270871281624, -0.0029049133881926537, 0.06439078599214554, 0.012122266925871372, -0.010758262127637863, 0.009113670326769352, 0.003626872319728136, -0.014567091129720211, 0.017360171303153038, -0.02627401240170002, -0.05039438605308533, 0.030057229101657867, 0.0005899920943193138, 0.005482893902808428, 0.025600461289286613, -0.01457617711275816, -0.01856864057481289, -0.052732277661561966, -0.0013830502284690738, -0.04645624756813049, -0.02771921642124653, -0.023527715355157852, -0.02496682107448578, -0.021475952118635178, -0.00032764876959845424, -0.03962411731481552, -0.01655668579041958, 0.02331780456006527, -0.00116536277346313, 0.0015300805680453777, 0.010154458694159985, 0.020434487611055374, 0.028660381212830544, 0.037259090691804886, -0.00023518827219959348, 0.04146356135606766, 0.002651255577802658, -0.02804679051041603, 0.05733168125152588, 0.027158018201589584, -0.04874458909034729, -0.010234344750642776, -0.02789127267897129, 0.03599059581756592, 0.03243926167488098, -0.025215059518814087, -0.01668565161526203, -0.02263176627457142, -0.02958774007856846, 0.04356934130191803, -0.0015102585311979055, 0.0041308957152068615, -0.010826313868165016, -0.004949817433953285, 0.03295884653925896, -0.030704034492373466, 0.030566317960619926, 0.00795308593660593, -0.022834278643131256, -0.004591120406985283, -0.009158818982541561, -0.002906834241002798, 0.022922096773982048, -0.003950517158955336, -0.08324819803237915, -0.0007551107555627823, 0.034371841698884964, -0.03889422118663788, 0.03860536217689514, -0.01731661893427372, 0.01906689815223217, 0.028112446889281273, -0.02504412829875946, -0.012597731314599514, -0.0033343161921948195, -0.011648247018456459, 0.011448070406913757, 0.030431943014264107, 0.004245550837367773, 0.013025455176830292, -0.011714923195540905, 0.004765561316162348, -0.01239315327256918, 0.0524376779794693, -0.004318115767091513, 0.002698204480111599]\"\n./train/Bouvier_des_Flandres/n02106382_6653.JPEG,Bouvier_des_Flandres,\"[0.026646660640835762, 0.0008752293069846928, -0.039263270795345306, 0.03548053652048111, 0.01938203163444996, -0.05976187810301781, 0.03382565826177597, 0.002912496216595173, 0.041559066623449326, -0.0002731116837821901, -0.008179916068911552, 0.011906187981367111, 0.011081980541348457, 0.027291923761367798, 0.027602143585681915, 0.016476379707455635, 0.10987234115600586, 0.0023790078703314066, 0.0004874039732385427, -0.0788387730717659, -0.007954197004437447, 0.037966858595609665, 0.054686471819877625, -0.041870273649692535, -0.007171145640313625, 0.03227146714925766, 0.04041992872953415, -0.03179701045155525, -0.019302384927868843, 0.010638564825057983, -0.02754557691514492, 0.03819312900304794, -0.02343636006116867, -0.009623819030821323, 0.024297118186950684, 0.03182627633213997, 0.0327254943549633, -0.020248135551810265, -0.0176413431763649, 0.13044291734695435, -0.06367769092321396, -0.0060876584611833096, 0.015794865787029266, -0.006189839914441109, 0.02973230928182602, -0.11137188971042633, 0.005086624063551426, 0.0382966510951519, -0.019027242437005043, 0.01311175525188446, 0.04233565181493759, 0.022575071081519127, 0.007768989074975252, 0.016048748046159744, 0.023692702874541283, -0.013760237023234367, 0.03081907331943512, 0.023620158433914185, 0.011463255621492863, -0.02173418365418911, 0.11335314810276031, 0.02667059190571308, 0.0383051261305809, 0.0113928047940135, -0.019161442294716835, -0.006685033440589905, 0.032170262187719345, 0.08193930983543396, -0.022752545773983, -0.008873231709003448, 0.04275106266140938, -0.00968034379184246, 0.03635779768228531, 0.0024384967982769012, 0.005865686573088169, -0.009738602675497532, 0.017227891832590103, -0.055489152669906616, -0.006325745023787022, 0.01893940009176731, -0.00033746074768714607, -0.03253254294395447, -0.0079314224421978, -0.031987037509679794, 0.026173369958996773, -0.03370760753750801, 0.07719117403030396, -0.047827500849962234, 0.031034808605909348, -0.03801213204860687, 0.0031626520212739706, -0.08379627019166946, -0.621613621711731, 0.043918102979660034, 0.012457435019314289, 0.02241034246981144, 0.025220748037099838, -0.0183279849588871, -0.0634017139673233, 0.09172460436820984, 0.03290603309869766, -0.01906820572912693, 0.022717326879501343, -0.013185080140829086, 0.03160012885928154, -0.014823629520833492, 0.026491064578294754, 0.032712146639823914, -0.012788960710167885, -0.011149325408041477, -0.0038325802888721228, -0.08625771105289459, -0.00845421850681305, -0.028424998745322227, 0.004954569973051548, -0.019195273518562317, -0.019942061975598335, -0.01856200583279133, 0.04012295976281166, -0.03570256009697914, 0.06346704810857773, -0.010564125142991543, -0.013188967481255531, 0.006058280356228352, 0.04740530997514725, -0.030575009062886238, -0.05269083008170128, 0.03268904983997345, 0.0005725760711356997, -0.018778063356876373, 0.03958143666386604, -0.0041171712800860405, -0.027662888169288635, 0.08012712001800537, -0.06285388022661209, 0.014930699951946735, -0.027482831850647926, -0.06547520309686661, 0.020682930946350098, 0.012077219784259796, 0.010218274779617786, 0.036982256919145584, -0.019364017993211746, 0.029110828414559364, -0.023312730714678764, 0.051214542239904404, 0.027230899780988693, 0.005447822622954845, -0.026812149211764336, 0.0034368522465229034, 0.005880225449800491, 0.027940746396780014, -0.008280035108327866, -0.013810456730425358, -0.029551545158028603, -0.0036334118340164423, -0.027782948687672615, -0.04093453288078308, -0.02737014926970005, 0.02498321421444416, -0.05373939126729965, -0.008478781208395958, 0.00728655606508255, 0.016759628430008888, 0.03303191810846329, -0.03353086858987808, 0.0215293075889349, 0.0546974278986454, -0.000987281440757215, 0.024025633931159973, 0.005308961030095816, 0.00030314389732666314, 0.006994954776018858, -0.02344703860580921, -0.0019014886347576976, -0.04155437648296356, 0.10744375735521317, -0.0009175705490633845, 0.055975139141082764, -0.004818751942366362, 0.007411849219352007, 0.004490523599088192, 0.002070407150313258, -0.04679618030786514, 0.012486695311963558, -0.012761087156832218, 0.04596542567014694, -0.04071319103240967, 0.014748109504580498, 0.00747779943048954, 0.033277519047260284, 0.007784961722791195, 0.01842239312827587, -0.0001628903264645487, 0.028121482580900192, -0.000924408552236855, 0.028709091246128082, -0.057194869965314865, -0.09727808833122253, -0.006745229009538889, 0.030530214309692383, 0.006652356591075659, -0.01533172931522131, 0.053574975579977036, -0.031174473464488983, -0.06010317802429199, -0.02019720897078514, -0.0014705967623740435, -0.0004766093916259706, 0.02368447557091713, -0.02516724169254303, -0.008730429224669933, -0.014594294130802155, 0.03428974375128746, -0.014900869689881802, -0.02125357836484909, -0.016463620588183403, 0.048227641731500626, 0.08555835485458374, -0.032832007855176926, 0.07559806108474731, 0.017701933160424232, -0.0016297890106216073, 0.00896582193672657, -0.0485827662050724, 0.032072022557258606, -0.03913174942135811, -0.0057081799022853374, 0.03834522143006325, 0.002464336808770895, -0.007063806522637606, 0.008102820254862309, 0.0051643275655806065, 0.03492139279842377, -0.014087075367569923, -0.02381907030940056, -0.03909827023744583, -0.005364793818444014, -0.0055048768408596516, -0.04573764279484749, -0.0024138514418154955, 0.02137630246579647, 0.007775136269629002, 0.023936185985803604, -0.0015006293542683125, 0.06782418489456177, 0.044336773455142975, -0.040783580392599106, 0.011519186198711395, 0.029659239575266838, -0.002725874772295356, 0.03301544860005379, 0.037557151168584824, 0.025757841765880585, 0.039183009415864944, 0.048076462000608444, -0.0016879907343536615, 0.039598219096660614, 0.030976446345448494, -0.013103821314871311, -0.002890518866479397, 0.032368626445531845, 0.007544851861894131, -0.07838713377714157, 0.02631043642759323, -0.018131131306290627, 0.032868579030036926, -0.012289745733141899, -0.014004579745233059, 0.038160540163517, 0.0016887492965906858, -0.004072591662406921, 0.08660735934972763, 0.012689821422100067, -0.004678598139435053, -0.006504169665277004, 0.018165897578001022, -0.04158347472548485, -0.00675842585042119, -0.01171952486038208, 0.0025710100308060646, 0.019069211557507515, -0.08300528675317764, -0.024678755551576614, -0.019928645342588425, 0.02423119731247425, -0.005311455577611923, 0.004460558295249939, -0.001316946349106729, -0.015475798398256302, -0.006068225484341383, 0.010935486294329166, -0.006959828548133373, 0.02098374255001545, -0.03252309188246727, 0.009068013168871403, 0.035203199833631516, 0.01718710921704769, 0.001677904394455254, 0.010427827015519142, 0.010429291985929012, 0.014940725639462471, -0.012986795045435429, 0.037044692784547806, 0.004719842225313187, -0.009742313995957375, 0.017663337290287018, 0.05300469696521759, 0.03831084817647934, 0.006779704708606005, -0.015106527134776115, 0.09765683114528656, 0.08004117757081985, 0.0002592308446764946, -7.634810754097998e-05, 0.018572427332401276, 0.036287821829319, 0.027620920911431313, -0.03050464391708374, -7.434750295942649e-05, 0.07030769437551498, 0.053527723997831345, -0.0371805764734745, 0.022471293807029724, 0.027947863563895226, 0.025254495441913605, -0.024772021919488907, 0.019810574129223824, -0.03195536509156227, -0.0008053038036450744, 0.011623025871813297, -0.013318939134478569, 0.03160810470581055, -0.028143908828496933, -0.014803800731897354, 0.030108490958809853, 0.007227449212223291, -0.004465969279408455, 0.013781941495835781, -0.027130743488669395, -0.002222377108410001, -0.04395921900868416, -0.007542964071035385, 0.009342711418867111, 0.07045633345842361, 0.02099410630762577, -0.010930197313427925, 0.03576366975903511, 0.03854421153664589, -0.023846663534641266, -0.06719580292701721, 0.009617004543542862, 0.017567181959748268, 0.005597418639808893, 0.005990058183670044, 0.0915290042757988, -0.020227886736392975, -0.031704872846603394, 0.0024985801428556442, 0.014614447951316833, 0.07520688325166702, -0.01213807798922062, -0.017003314569592476, 0.00859066192060709, -0.048851676285266876, 0.01342807337641716, 0.004157691728323698, -0.04537903890013695, 0.01576010137796402, -0.017201008275151253, -0.025061460211873055, 0.004972462542355061, 0.03350071609020233, 0.021053742617368698, 0.005272446665912867, -0.003042125143110752, 0.10496918857097626, -0.012965241447091103, -0.04114266112446785, 0.02541327476501465, 0.010926004499197006, -0.05708794295787811, 0.020879605785012245, 0.006724646780639887, 0.013175313360989094, -0.03083123080432415, -0.03441973403096199, -0.017792094498872757, 0.05439480021595955, -0.10755541920661926, -0.08605484664440155, -0.08288975059986115, 0.004826841410249472, -0.019797323271632195, 0.022366749122738838, 0.0023365081287920475, -0.00670208316296339, 0.010471988469362259, 0.019006120041012764, -0.03672134503722191, -0.019765622913837433, 0.02608366310596466, 0.03050949238240719, 0.022369956597685814, -0.005147530697286129, -0.02097630873322487, -0.0015161603223532438, -0.04276391491293907, 0.06965667009353638, -0.047118254005908966, 0.05398133397102356, -0.038526978343725204, -0.008835862390697002, 0.000982948113232851, -0.011178651824593544, -0.03863026574254036, 0.013073205947875977, -0.04888290911912918, 0.020853329449892044, -0.03684407100081444, 0.05275176092982292, -0.008260824717581272, -0.00910678319633007, -0.036947086453437805, 0.03804996609687805, -0.02924766205251217, -0.006129257380962372, 0.008578160777688026, 0.06740450114011765, 0.016036702319979668, -0.01580948196351528, 0.0338134840130806, 0.04166177287697792, -0.010912732221186161, 0.02184327132999897, -0.014240472577512264, -0.05064921826124191, 0.02908657118678093, 0.0002835487248376012, -0.03959266096353531, 0.0195130817592144, 0.011611143127083778, -0.03561857342720032, -0.06139150261878967, 0.04718683287501335, -0.030253298580646515, -0.0010602115653455257, -0.017908290028572083, -0.024608811363577843, -0.006151393987238407, -0.023357834666967392, -0.03374723717570305, -0.030317407101392746, 0.06275968253612518, -0.027461588382720947, -0.04548612982034683, 0.021106474101543427, 0.008608682081103325, 0.01564689539372921, 0.031672220677137375, -0.006999721750617027, 0.016208449378609657, -0.043898917734622955, -0.005824690219014883, 0.05049712583422661, 0.03183373063802719, -0.03824540600180626, -0.004069481045007706, -0.019360963255167007, 0.013514203019440174, 0.03873922675848007, -0.02553846500813961, -0.021124934777617455, -0.025298189371824265, -0.016016678884625435, 0.015425234101712704, 0.006121821701526642, 0.00046682305401191115, -0.02520987018942833, -0.0004206066660117358, 0.00768557284027338, -0.028057079762220383, 0.008525831624865532, -0.023737462237477303, -0.006159046199172735, 0.016467636451125145, 0.00859884638339281, -0.01238448079675436, 0.02527397871017456, 0.03356923907995224, -0.05298352614045143, -0.013671936467289925, 0.026417680084705353, -0.06980810314416885, 0.03106299787759781, -0.02368166111409664, 0.020041899755597115, 0.006971489638090134, -0.05375108867883682, 0.004240857902914286, -0.02921922132372856, -0.02207661047577858, -0.02857240103185177, 0.049629151821136475, 0.05172787606716156, 0.02102244272828102, -0.03884565085172653, -0.006186930928379297, -0.049769602715969086, 0.09874702990055084, -0.006112928502261639, 0.009424751624464989]\"\n"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_close.py",
    "content": "import pytest\nimport numpy as np\nfrom base.client_base import TestcaseBase\nfrom common.common_type import CaseLabel, CheckTasks\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\n\nclient_w = HighLevelApiWrapper()\nprefix = \"milvus_local_api_collection\"\ndefault_dim = ct.default_dim\ndefault_primary_key_field_name = \"id\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_vector_field_name = \"vector\"\ndefault_limit = ct.default_limit\ndefault_nb = ct.default_nb\ndefault_search_exp = \"id >= 0\"\nexp_res = \"exp_res\"\ndefault_string_field_name = ct.default_string_field_name\n\n\nclass TestMilvusLocalCloseAPI(TestcaseBase):\n    \"\"\"\n    Add milvus local unique case\n    \"\"\"\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\", \"IP\"])\n    def metric_type(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"TRIE\", \"STL_SORT\", \"AUTOINDEX\"])\n    def scalar_index(self, request):\n        yield request.param\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_local_reconnect(self, enable_milvus_local_api):\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        result = client_w.has_collection(client, collection_name)[0]\n        assert result == True\n        client.close()\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        result = client_w.has_collection(client, collection_name)[0]\n        assert result == True\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"index, params\",\n                             zip(ct.all_index_types[:7],\n                                 ct.default_index_params[:7]))\n    def test_milvus_client_index_with_params(self, enable_milvus_local_api, index, params, metric_type):\n        \"\"\"\n        target: reconnect search normal case\n        method: create connection, collection, insert, close and search\n        expected: search successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        res = client_w.list_indexes(client, collection_name)[0]\n        assert res == []\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name=\"vector\", index_type=index, params=params, metric_type=metric_type)\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 5. load collection\n        client_w.load_collection(client, collection_name)\n        client_w.release_collection(client, collection_name)\n        # 6. close and reconnect\n        client.close()\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        # 7. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusLocalCloseInvalid(TestcaseBase):\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_local_close_multiple(self, enable_milvus_local_api):\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        client_w.create_collection(client, collection_name, default_dim)\n        client.close()\n        client.close()\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        result = client_w.has_collection(client, collection_name)[0]\n        assert result == True\n        c_name = collection_name + \"_2\"\n        client_w.create_collection(client, c_name, default_dim)\n        result = client_w.has_collection(client, c_name)[0]\n        assert result == True\n\n\n\n"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_collection.py",
    "content": "import multiprocessing\nimport numbers\nimport random\nimport numpy\nimport threading\nimport pytest\nimport pandas as pd\nimport decimal\nfrom decimal import Decimal, getcontext\nfrom time import sleep\nimport heapq\nfrom pymilvus import DataType\n\nfrom base.client_base import TestcaseBase\nfrom utils.util_log import test_log as log\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.util_pymilvus import *\nfrom common.constants import *\nfrom pymilvus.orm.types import CONSISTENCY_STRONG, CONSISTENCY_BOUNDED, CONSISTENCY_SESSION, CONSISTENCY_EVENTUALLY\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nclient_w = HighLevelApiWrapper()\n\nprefix = \"milvus_client_api_collection\"\nepsilon = ct.epsilon\ndefault_nb = ct.default_nb\ndefault_nb_medium = ct.default_nb_medium\ndefault_nq = ct.default_nq\ndefault_dim = ct.default_dim\ndefault_limit = ct.default_limit\ndefault_search_exp = \"id >= 0\"\nexp_res = \"exp_res\"\ndefault_search_string_exp = \"varchar >= \\\"0\\\"\"\ndefault_search_mix_exp = \"int64 >= 0 && varchar >= \\\"0\\\"\"\ndefault_invaild_string_exp = \"varchar >= 0\"\ndefault_json_search_exp = \"json_field[\\\"number\\\"] >= 0\"\nperfix_expr = 'varchar like \"0%\"'\ndefault_search_field = ct.default_float_vec_field_name\ndefault_search_params = ct.default_search_params\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_bool_field_name = ct.default_bool_field_name\ndefault_string_field_name = ct.default_string_field_name\ndefault_int32_array_field_name = ct.default_int32_array_field_name\ndefault_string_array_field_name = ct.default_string_array_field_name\n\n\nclass TestMilvusClientCollectionInvalid(TestcaseBase):\n    \"\"\" Test case of create collection interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"collection_name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_collection_invalid_collection_name(self, enable_milvus_local_api, collection_name):\n        \"\"\"\n        target: test fast create collection with invalid collection name\n        method: create collection with invalid collection\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        # 1. create collection\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {collection_name}. the first character of a \"\n                                                f\"collection name must be an underscore or letter: invalid parameter\"}\n        client_w.create_collection(client, collection_name, default_dim,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_collection_name_over_max_length(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection with over max collection name length\n        method: create collection with over max collection name length\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        # 1. create collection\n        collection_name = \"a\".join(\"a\" for i in range(256))\n        error = {ct.err_code: 1100, ct.err_msg: f\"invalid dimension: {collection_name}. \"\n                                             f\"the length of a collection name must be less than 255 characters: \"\n                                             f\"invalid parameter\"}\n        client_w.create_collection(client, collection_name, default_dim,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_collection_name_empty(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection name with empty\n        method: create collection name with empty\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        # 1. create collection\n        collection_name = \"  \"\n        error = {ct.err_code: 0, ct.err_msg: \"collection name should not be empty: invalid parameter\"}\n        client_w.create_collection(client, collection_name, default_dim,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"dim\", [ct.min_dim-1, ct.max_dim+1])\n    def test_milvus_client_collection_invalid_dim(self, enable_milvus_local_api, dim):\n        \"\"\"\n        target: test fast create collection name with invalid dim\n        method: create collection name with invalid dim\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        error = {ct.err_code: 65535, ct.err_msg: f\"invalid dimension: {dim}. should be in range 2 ~ 32768\"}\n        client_w.create_collection(client, collection_name, dim,\n                                   check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_collection_invalid_primary_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection name with invalid primary field\n        method: create collection name with invalid primary field\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        error = {ct.err_code: 1, ct.err_msg: f\"Param id_type must be int or string\"}\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"invalid\",\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_collection_string_auto_id(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection without max_length for string primary key\n        method: create collection name with invalid primary field\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        error = {ct.err_code: 65535, ct.err_msg: f\"type param(max_length) should be specified for varChar \"\n                                                 f\"field of collection {collection_name}\"}\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"string\", auto_id=True,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_create_same_collection_different_params(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create same collection with different params\n        method: create same collection with different params\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. create collection with same params\n        client_w.create_collection(client, collection_name, default_dim)\n        # 3. create collection with same name and different params\n        error = {ct.err_code: 1, ct.err_msg: f\"create duplicate collection with different parameters, \"\n                                             f\"collection: {collection_name}\"}\n        client_w.create_collection(client, collection_name, default_dim+1,\n                                   check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"metric_type\", [1, \" \", \"invalid\"])\n    def test_milvus_client_collection_invalid_metric_type(self, enable_milvus_local_api, metric_type):\n        \"\"\"\n        target: test create same collection with invalid metric type\n        method: create same collection with invalid metric type\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        error = {ct.err_code: 65535,\n                 ct.err_msg: \"metric type not found or not supported, supported: [L2 IP COSINE HAMMING JACCARD]\"}\n        client_w.create_collection(client, collection_name, default_dim, metric_type=metric_type,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_collection_invalid_schema_field_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with invalid schema field name\n        method: create collection with invalid schema field name\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        schema = client_w.create_schema(client, enable_dynamic_field=False)[0]\n        schema.add_field(\"%$#\", DataType.VARCHAR, max_length=64,\n                         is_primary=True, auto_id = False)\n        schema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=128)\n        # 1. create collection\n        error = {ct.err_code: 65535,\n                 ct.err_msg: \"metric type not found or not supported, supported: [L2 IP COSINE HAMMING JACCARD]\"}\n        client_w.create_collection(client, collection_name, schema=schema,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestMilvusClientCollectionValid(TestcaseBase):\n    \"\"\" Test case of create collection interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\", \"IP\"])\n    def metric_type(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"int\", \"string\"])\n    def id_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L0)\n    @pytest.mark.xfail(reason=\"pymilvus issue 1871\")\n    @pytest.mark.parametrize(\"dim\", [ct.min_dim, default_dim, ct.max_dim])\n    def test_milvus_client_collection_fast_creation_default(self, enable_milvus_local_api, dim):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        client_w.using_database(client, \"default\")\n        # 1. create collection\n        client_w.create_collection(client, collection_name, dim)\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": dim,\n                                                  \"consistency_level\": 0})\n        index = client_w.list_indexes(client, collection_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        client_w.load_partitions(client, collection_name, \"_default\")\n        client_w.release_partitions(client, collection_name, \"_default\")\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"dim\", [ct.min_dim, default_dim, ct.max_dim])\n    def test_milvus_client_collection_fast_creation_all_params(self, enable_milvus_local_api, dim, metric_type, id_type, auto_id):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        max_length = 100\n        # 1. create collection\n        client_w.create_collection(client, collection_name, dim, id_type=id_type, metric_type=metric_type,\n                                   auto_id=auto_id, max_length=max_length)\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": dim,\n                                                  \"consistency_level\": 0})\n        index = client_w.list_indexes(client, collection_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        client_w.release_collection(client, collection_name)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_milvus_client_collection_self_creation_default(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        schema = client_w.create_schema(client, enable_dynamic_field=False)[0]\n        schema.add_field(\"id_string\", DataType.VARCHAR, max_length=64, is_primary=True, auto_id = False)\n        schema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=128)\n        schema.add_field(\"title\", DataType.VARCHAR, max_length=64, is_partition_key=True)\n        schema.add_field(\"array_field\", DataType.Array, max_capacity=12,\n                         element_type_params={\"type\": DataType.VARCHAR, \"max_length\": 64})\n        index_params = client_w.prepare_index_params()\n        index_params.add_index(\"embeddings\", metric_type=\"cosine\")\n        index_params.add_index(\"title\")\n        client_w.create_collection(client, collection_name, schema=schema, index_params=index_params)\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": 128,\n                                                  \"consistency_level\": 0})\n        index = client_w.list_indexes(client, collection_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_array_insert_search(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{\n            default_primary_key_field_name: i,\n            default_vector_field_name: list(rng.random((1, default_dim))[0]),\n            default_float_field_name: i * 1.0,\n            default_int32_array_field_name: [i, i+1, i+2],\n            default_string_array_field_name: [str(i), str(i + 1), str(i + 2)]\n        } for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_search_query_string(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) for string primary key\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"string\", max_length=ct.default_length)\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"auto_id\": auto_id})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: str(i), default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        client_w.flush(client, collection_name)\n        assert client_w.num_entities(client, collection_name)[0] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"limit\": default_limit})\n        # 4. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_search_different_metric_types_not_specifying_in_search_params(self, enable_milvus_local_api, metric_type, auto_id):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search successfully with limit(topK)\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, metric_type=metric_type, auto_id=auto_id,\n                                   consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        if auto_id:\n            for row in rows:\n                row.pop(default_primary_key_field_name)\n        client_w.insert(client, collection_name, rows)\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        # search_params = {\"metric_type\": metric_type}\n        client_w.search(client, collection_name, vectors_to_search, limit=default_limit,\n                        output_fields=[default_primary_key_field_name],\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"limit\": default_limit})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_search_different_metric_types_specifying_in_search_params(self, enable_milvus_local_api, metric_type, auto_id):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search successfully with limit(topK)\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, metric_type=metric_type, auto_id=auto_id,\n                                   consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        if auto_id:\n            for row in rows:\n                row.pop(default_primary_key_field_name)\n        client_w.insert(client, collection_name, rows)\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        search_params = {\"metric_type\": metric_type}\n        client_w.search(client, collection_name, vectors_to_search, limit=default_limit,\n                        search_params=search_params,\n                        output_fields=[default_primary_key_field_name],\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"limit\": default_limit})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_ids(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, ids=[i for i in range(delete_num)])\n        # 4. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 5. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_filters(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, filter=f\"id < {delete_num}\")\n        # 4. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 5. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_collection_rename_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        old_name = collection_name\n        new_name = collection_name + \"new\"\n        client_w.rename_collection(client, old_name, new_name)\n        collections = client_w.list_collections(client)[0]\n        assert new_name in collections\n        assert old_name not in collections\n        client_w.describe_collection(client, new_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": new_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        index = client_w.list_indexes(client, new_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        error = {ct.err_code: 100, ct.err_msg: f\"collection not found\"}\n        client_w.load_partitions(client, old_name, \"_default\",\n                                 check_task=CheckTasks.err_res, check_items=error)\n        client_w.load_partitions(client, new_name, \"_default\")\n        client_w.release_partitions(client, new_name, \"_default\")\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, new_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(reason=\"db not ready\")\n    def test_milvus_client_collection_rename_collection_target_db(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        db_name = \"new_db\"\n        client_w.use_database(client, db_name)\n        old_name = collection_name\n        new_name = collection_name + \"new\"\n        client_w.rename_collection(client, old_name, new_name, target_db=db_name)\n        collections = client_w.list_collections(client)[0]\n        assert new_name in collections\n        assert old_name not in collections\n        client_w.describe_collection(client, new_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": new_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        index = client_w.list_indexes(client, new_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        error = {ct.err_code: 100, ct.err_msg: f\"collection not found\"}\n        client_w.load_partitions(client, old_name, \"_default\",\n                                 check_task=CheckTasks.err_res, check_items=error)\n        client_w.load_partitions(client, new_name, \"_default\")\n        client_w.release_partitions(client, new_name, \"_default\")\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, new_name)\n\n\nclass TestMilvusClientDropCollectionInvalid(TestcaseBase):\n    \"\"\" Test case of drop collection interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_drop_collection_invalid_collection_name(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {name}. collection name can only \"\n                                                f\"contain numbers, letters and underscores: invalid parameter\"}\n        client_w.drop_collection(client, name,\n                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_drop_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(\"nonexisted\")\n        client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientReleaseCollectionInvalid(TestcaseBase):\n    \"\"\" Test case of release collection interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_release_collection_invalid_collection_name(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {name}. collection name can only \"\n                                                f\"contain numbers, letters and underscores: invalid parameter\"}\n        client_w.release_collection(client, name,\n                                    check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_release_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(\"nonexisted\")\n        error = {ct.err_code: 1100, ct.err_msg: f\"collection not found[database=default]\"\n                                                f\"[collection={collection_name}]\"}\n        client_w.release_collection(client, collection_name,\n                                    check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_release_collection_name_over_max_length(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        # 1. create collection\n        collection_name = \"a\".join(\"a\" for i in range(256))\n        error = {ct.err_code: 1100, ct.err_msg: f\"invalid dimension: {collection_name}. \"\n                                                f\"the length of a collection name must be less than 255 characters: \"\n                                                f\"invalid parameter\"}\n        client_w.release_collection(client, collection_name, default_dim,\n                                    check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestMilvusClientReleaseCollectionValid(TestcaseBase):\n    \"\"\" Test case of release collection interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\", \"IP\"])\n    def metric_type(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"int\", \"string\"])\n    def id_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_release_unloaded_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.release_collection(client, collection_name)\n        client_w.release_collection(client, collection_name)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_load_partially_loaded_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        partition_name = cf.gen_unique_str(\"partition\")\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.create_partition(client, collection_name, partition_name)\n        client_w.release_partitions(client, collection_name, [\"_default\", partition_name])\n        client_w.release_collection(client, collection_name)\n        client_w.load_collection(client, collection_name)\n        client_w.release_partitions(client, collection_name, [partition_name])\n        client_w.release_collection(client, collection_name)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientLoadCollectionInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_load_collection_invalid_collection_name(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {name}. collection name can only \"\n                                                f\"contain numbers, letters and underscores: invalid parameter\"}\n        client_w.load_collection(client, name,\n                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_load_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(\"nonexisted\")\n        error = {ct.err_code: 1100, ct.err_msg: f\"collection not found[database=default]\"\n                                                f\"[collection={collection_name}]\"}\n        client_w.load_collection(client, collection_name,\n                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_load_collection_over_max_length(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"a\".join(\"a\" for i in range(256))\n        error = {ct.err_code: 1100, ct.err_msg: f\"invalid dimension: {collection_name}. \"\n                                                f\"the length of a collection name must be less than 255 characters: \"\n                                                f\"invalid parameter\"}\n        client_w.load_collection(client, collection_name,\n                                    check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_load_collection_without_index(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        error = {ct.err_code: 700, ct.err_msg: f\"index not found[collection={collection_name}]\"}\n        client_w.load_collection(client, collection_name,\n                                 check_task=CheckTasks.err_res, check_items=error)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientLoadCollectionValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\", \"IP\"])\n    def metric_type(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"int\", \"string\"])\n    def id_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_load_loaded_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.load_collection(client, collection_name)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_load_partially_loaded_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        partition_name = cf.gen_unique_str(\"partition\")\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.create_partition(client, collection_name, partition_name)\n        client_w.release_collection(client, collection_name)\n        client_w.load_partitions(client, collection_name, [partition_name])\n        client_w.load_collection(client, collection_name)\n        client_w.release_collection(client, collection_name)\n        client_w.load_partitions(client, collection_name, [\"_default\", partition_name])\n        client_w.load_collection(client, collection_name)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientDescribeCollectionInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_describe_collection_invalid_collection_name(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {name}. collection name can only \"\n                                                f\"contain numbers, letters and underscores: invalid parameter\"}\n        client_w.describe_collection(client, name,\n                                     check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_describe_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"nonexisted\"\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not \"\n                                               f\"found[database=default][collection=nonexisted]\"}\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_describe_collection_deleted_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.drop_collection(client, collection_name)\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not \"\n                                               f\"found[database=default]\"}\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestMilvusClientHasCollectionInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_has_collection_invalid_collection_name(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {name}. collection name can only \"\n                                                f\"contain numbers, letters and underscores: invalid parameter\"}\n        client_w.has_collection(client, name,\n                                check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_has_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"nonexisted\"\n        result = client_w.has_collection(client, collection_name)[0]\n        assert result == False\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_has_collection_deleted_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.drop_collection(client, collection_name)\n        result = client_w.has_collection(client, collection_name)[0]\n        assert result == False\n\n\nclass TestMilvusClientRenameCollectionInValid(TestcaseBase):\n    \"\"\" Test case of rename collection interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_rename_collection_invalid_collection_name(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        error = {ct.err_code: 100, ct.err_msg: f\"collection not found[database=1][collection={name}]\"}\n        client_w.rename_collection(client, name, \"new_collection\",\n                                     check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_rename_collection_not_existed_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"nonexisted\"\n        error = {ct.err_code: 100, ct.err_msg: f\"collection not found[database=1][collection={collection_name}]\"}\n        client_w.rename_collection(client, collection_name, \"new_collection\",\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_rename_collection_duplicated_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        error = {ct.err_code: 65535, ct.err_msg: f\"duplicated new collection name default:{collection_name}\"\n                                                 f\"with other collection name or alias\"}\n        client_w.rename_collection(client, collection_name, collection_name,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_rename_deleted_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.drop_collection(client, collection_name)\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not \"\n                                               f\"found[database=default]\"}\n        client_w.rename_collection(client, collection_name, \"new_collection\",\n                                     check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestMilvusClientRenameCollectionValid(TestcaseBase):\n    \"\"\" Test case of rename collection interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_rename_collection_multiple_times(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 2. rename with invalid new_name\n        new_name = \"new_name_rename\"\n        client_w.create_collection(client, collection_name, default_dim)\n        times = 3\n        for _ in range(times):\n            client_w.rename_collection(client, collection_name, new_name)\n            client_w.rename_collection(client, new_name, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_rename_collection_deleted_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        another_collection_name = cf.gen_unique_str(\"another_collection\")\n        # 1. create 2 collections\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.create_collection(client, another_collection_name, default_dim)\n        # 2. drop one collection\n        client_w.drop_collection(client, another_collection_name)\n        # 3. rename to dropped collection\n        client_w.rename_collection(client, collection_name, another_collection_name)\n\n\nclass TestMilvusClientUsingDatabaseInvalid(TestcaseBase):\n    \"\"\" Test case of using database interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.xfail(reason=\"pymilvus issue 1900\")\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_using_database_invalid_db_name(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        error = {ct.err_code: 800, ct.err_msg: f\"Invalid collection name: {name}. collection name can only \"\n                                                f\"contain numbers, letters and underscores: invalid parameter\"}\n        client_w.using_database(client, name,\n                                check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_using_database_not_exist_db_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        db_name = cf.gen_unique_str(\"nonexisted\")\n        error = {ct.err_code: 800, ct.err_msg: f\"database not found[database=non-default]\"}\n        client_w.using_database(client, db_name,\n                                check_task=CheckTasks.err_res, check_items=error)[0]\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"pymilvus issue 1900\")\n    def test_milvus_client_using_database_db_name_over_max_length(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: drop successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        db_name = \"a\".join(\"a\" for i in range(256))\n        error = {ct.err_code: 1100, ct.err_msg: f\"invalid dimension: {db_name}. \"\n                                                f\"the length of a collection name must be less than 255 characters: \"\n                                                f\"invalid parameter\"}\n        client_w.using_database(client, db_name,\n                                check_task=CheckTasks.err_res, check_items=error)[0]"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_delete.py",
    "content": "import multiprocessing\nimport numbers\nimport random\nimport numpy\nimport threading\nimport pytest\nimport pandas as pd\nimport decimal\nfrom decimal import Decimal, getcontext\nfrom time import sleep\nimport heapq\n\nfrom base.client_base import TestcaseBase\nfrom utils.util_log import test_log as log\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.util_pymilvus import *\nfrom common.constants import *\nfrom pymilvus.orm.types import CONSISTENCY_STRONG, CONSISTENCY_BOUNDED, CONSISTENCY_SESSION, CONSISTENCY_EVENTUALLY\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nclient_w = HighLevelApiWrapper()\n\nprefix = \"milvus_client_api_delete\"\nepsilon = ct.epsilon\ndefault_nb = ct.default_nb\ndefault_nb_medium = ct.default_nb_medium\ndefault_nq = ct.default_nq\ndefault_dim = ct.default_dim\ndefault_limit = ct.default_limit\ndefault_search_exp = \"id >= 0\"\nexp_res = \"exp_res\"\ndefault_search_string_exp = \"varchar >= \\\"0\\\"\"\ndefault_search_mix_exp = \"int64 >= 0 && varchar >= \\\"0\\\"\"\ndefault_invaild_string_exp = \"varchar >= 0\"\ndefault_json_search_exp = \"json_field[\\\"number\\\"] >= 0\"\nperfix_expr = 'varchar like \"0%\"'\ndefault_search_field = ct.default_float_vec_field_name\ndefault_search_params = ct.default_search_params\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_bool_field_name = ct.default_bool_field_name\ndefault_string_field_name = ct.default_string_field_name\ndefault_int32_array_field_name = ct.default_int32_array_field_name\ndefault_string_array_field_name = ct.default_string_array_field_name\n\n\nclass TestMilvusClientDeleteInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_filters_and_ids(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api) with ids and filters\n        method: create connection, collection, insert, delete, and search\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, ids=[i for i in range(delete_num)], filter=f\"id < {delete_num}\",\n                        check_task=CheckTasks.err_res,\n                        check_items={\"err_code\": 1,\n                                     \"err_msg\": \"Ambiguous filter parameter, \"\n                                                \"only one deletion condition can be specified.\"})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_invalid_id_type(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. delete\n        client_w.delete(client, collection_name, ids=0,\n                        check_task=CheckTasks.err_res,\n                        check_items={\"err_code\": 1,\n                                     \"err_msg\": \"expr cannot be empty\"})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_not_all_required_params(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. delete\n        client_w.delete(client, collection_name,\n                        check_task=CheckTasks.err_res,\n                        check_items={\"err_code\": 1,\n                                     \"err_msg\": \"expr cannot be empty\"})\n\n\nclass TestMilvusClientDeleteValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_ids(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, ids=[i for i in range(delete_num)])\n        # 4. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 5. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_filters(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, filter=f\"id < {delete_num}\")\n        # 4. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 5. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_filters_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. get partition lists\n        partition_names = client_w.list_partitions(client, collection_name)\n        # 4. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, filter=f\"id < {delete_num}\", partition_names=partition_names)\n        # 5. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 6. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_index.py",
    "content": "import multiprocessing\nimport numbers\nimport random\nimport numpy\nimport threading\nimport pytest\nimport pandas as pd\nimport decimal\nfrom decimal import Decimal, getcontext\nfrom time import sleep\nimport heapq\n\nfrom base.client_base import TestcaseBase\nfrom utils.util_log import test_log as log\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.util_pymilvus import *\nfrom common.constants import *\nfrom pymilvus.orm.types import CONSISTENCY_STRONG, CONSISTENCY_BOUNDED, CONSISTENCY_SESSION, CONSISTENCY_EVENTUALLY\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nclient_w = HighLevelApiWrapper()\n\nprefix = \"milvus_client_api_index\"\nepsilon = ct.epsilon\ndefault_nb = ct.default_nb\ndefault_nb_medium = ct.default_nb_medium\ndefault_nq = ct.default_nq\ndefault_dim = ct.default_dim\ndefault_limit = ct.default_limit\ndefault_search_exp = \"id >= 0\"\nexp_res = \"exp_res\"\ndefault_search_string_exp = \"varchar >= \\\"0\\\"\"\ndefault_search_mix_exp = \"int64 >= 0 && varchar >= \\\"0\\\"\"\ndefault_invaild_string_exp = \"varchar >= 0\"\ndefault_json_search_exp = \"json_field[\\\"number\\\"] >= 0\"\nperfix_expr = 'varchar like \"0%\"'\ndefault_search_field = ct.default_float_vec_field_name\ndefault_search_params = ct.default_search_params\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_multiple_vector_field_name = \"vector_new\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_bool_field_name = ct.default_bool_field_name\ndefault_string_field_name = ct.default_string_field_name\ndefault_int32_array_field_name = ct.default_int32_array_field_name\ndefault_string_array_field_name = ct.default_string_array_field_name\n\n\nclass TestMilvusClientIndexInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_index_invalid_collection_name(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\")\n        # 3. create index\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {name}. the first character of a collection \"\n                                                f\"name must be an underscore or letter: invalid parameter\"}\n        client_w.create_index(client, name, index_params,\n                              check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"name\", [\"a\".join(\"a\" for i in range(256))])\n    def test_milvus_client_index_collection_name_over_max_length(self, enable_milvus_local_api, name):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\")\n        # 3. create index\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {name}. the length of a collection name \"\n                                                f\"must be less than 255 characters: invalid parameter\"}\n        client_w.create_index(client, name, index_params,\n                              check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_index_not_exist_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        not_existed_collection_name = cf.gen_unique_str(\"not_existed_collection\")\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\")\n        # 3. create index\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not \"\n                                               f\"found[database=default][collection=not_existed]\"}\n        client_w.create_index(client, not_existed_collection_name, index_params,\n                              check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"index\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    def test_milvus_client_index_invalid_index_type(self, enable_milvus_local_api, index):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=index)\n        # 3. create index\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not \"\n                                               f\"found[database=default][collection=not_existed]\"}\n        client_w.create_index(client, collection_name, index_params,\n                              check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"metric\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    def test_milvus_client_index_invalid_metric_type(self, enable_milvus_local_api, metric):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", metric_type = metric)\n        # 3. create index\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not \"\n                                               f\"found[database=default][collection=not_existed]\"}\n        client_w.create_index(client, collection_name, index_params,\n                              check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_index_drop_index_before_release(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        error = {ct.err_code: 65535, ct.err_msg: f\"index cannot be dropped, collection is loaded, \"\n                                                 f\"please release it first\"}\n        client_w.drop_index(client, collection_name, \"vector\",\n                            check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(reason=\"pymilvus issue 1886\")\n    def test_milvus_client_index_multiple_indexes_one_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=\"HNSW\", metric_type=\"IP\")\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name=\"vector\", index_type=\"IVF_FLAT\", metric_type=\"L2\")\n        error = {ct.err_code: 1100, ct.err_msg: f\"\"}\n        # 5. create another index\n        client_w.create_index(client, collection_name, index_params,\n                              check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(reason=\"pymilvus issue 1886\")\n    def test_milvus_client_create_diff_index_without_release(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=\"HNSW\", metric_type=\"L2\")\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientIndexValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\", \"IP\"])\n    def metric_type(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"TRIE\", \"STL_SORT\", \"AUTOINDEX\"])\n    def scalar_index(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(\"https://github.com/milvus-io/pymilvus/issues/1886\")\n    @pytest.mark.parametrize(\"index, params\",\n                             zip(ct.all_index_types[:7],\n                                 ct.default_index_params[:7]))\n    def test_milvus_client_index_default(self, enable_milvus_local_api, index, params, metric_type):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        res = client_w.list_indexes(client, collection_name)[0]\n        assert res == []\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name=\"vector\", index_type=index, metric_type=metric_type)\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. create same index twice\n        client_w.create_index(client, collection_name, index_params)\n        # 5. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 6. load collection\n        client_w.load_collection(client, collection_name)\n        # 7. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 8. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"index, params\",\n                             zip(ct.all_index_types[:5],\n                                 ct.default_index_params[:5]))\n    def test_milvus_client_index_with_params(self, enable_milvus_local_api, index, params, metric_type):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        res = client_w.list_indexes(client, collection_name)[0]\n        assert res == []\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=index, params=params,metric_type = metric_type)\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 5. load collection\n        client_w.load_collection(client, collection_name)\n        # 6. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 7. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"wait for modification\")\n    @pytest.mark.parametrize(\"index, params\",\n                             zip(ct.all_index_types[:7],\n                                 ct.default_index_params[:7]))\n    def test_milvus_client_index_after_insert(self, enable_milvus_local_api, index, params, metric_type):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=index, metric_type = metric_type)\n        # 4. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 5. load collection\n        client_w.load_collection(client, collection_name)\n        # 5. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 4. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(\"wait for modification\")\n    def test_milvus_client_index_auto_index(self, enable_milvus_local_api, scalar_index, metric_type):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        res = client_w.list_indexes(client, collection_name)[0]\n        assert res == []\n        # 2. prepare index params\n        index = \"AUTOINDEX\"\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=index, metric_type = metric_type)\n        index_params.add_index(field_name=\"id\", index_type=scalar_index, metric_type=metric_type)\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. drop index\n        client_w.drop_index(client, collection_name, \"vector\")\n        client_w.drop_index(client, collection_name, \"id\")\n        # 5. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 6. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 7. load collection\n        client_w.load_collection(client, collection_name)\n        # 8. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 9. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"wait for modification\")\n    def test_milvus_client_index_multiple_vectors(self, enable_milvus_local_api, scalar_index, metric_type):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        res = client_w.list_indexes(client, collection_name)[0]\n        assert res == []\n        # 2. prepare index params\n        index = \"AUTOINDEX\"\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=index, metric_type = metric_type)\n        index_params.add_index(field_name=\"id\", index_type=scalar_index, metric_type=metric_type)\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i),\n                 default_multiple_vector_field_name: list(rng.random((1, default_dim))[0])} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 5. load collection\n        client_w.load_collection(client, collection_name)\n        # 6. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 7. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"wait for modification\")\n    @pytest.mark.parametrize(\"index, params\",\n                             zip(ct.all_index_types[:7],\n                                 ct.default_index_params[:7]))\n    def test_milvus_client_index_drop_create_same_index(self, enable_milvus_local_api, index, params, metric_type):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        res = client_w.list_indexes(client, collection_name)[0]\n        assert res == []\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name = \"vector\", index_type=index, metric_type = metric_type)\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. drop index\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 4. create same index twice\n        client_w.create_index(client, collection_name, index_params)\n        # 5. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 6. load collection\n        client_w.load_collection(client, collection_name)\n        # 7. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 8. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"wait for modification\")\n    @pytest.mark.parametrize(\"index, params\",\n                             zip(ct.all_index_types[:7],\n                                 ct.default_index_params[:7]))\n    def test_milvus_client_index_drop_create_different_index(self, enable_milvus_local_api, index, params, metric_type):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        client_w.release_collection(client, collection_name)\n        client_w.drop_index(client, collection_name, \"vector\")\n        res = client_w.list_indexes(client, collection_name)[0]\n        assert res == []\n        # 2. prepare index params\n        index_params = client_w.prepare_index_params(client)[0]\n        index_params.add_index(field_name=\"vector\", metric_type=metric_type)\n        # 3. create index\n        client_w.create_index(client, collection_name, index_params)\n        # 4. drop index\n        client_w.drop_index(client, collection_name, \"vector\")\n        # 4. create different index\n        index_params.add_index(field_name=\"vector\", index_type=index, metric_type=metric_type)\n        client_w.create_index(client, collection_name, index_params)\n        # 5. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 6. load collection\n        client_w.load_collection(client, collection_name)\n        # 7. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 8. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_init.py",
    "content": "import pytest\nimport numpy as np\nfrom base.client_base import TestcaseBase\nfrom common.common_type import CaseLabel, CheckTasks\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\n\nclient_w = HighLevelApiWrapper()\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_dim = ct.default_dim\nprefix = \"milvus_lite_api_collection\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_string_field_name = ct.default_string_field_name\ndefault_limit = ct.default_limit\ndefault_nb = ct.default_nb\n\n\nclass TestMilvusLocalFilePath(TestcaseBase):\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"file_path\", [\"./local1.db\", \"file\", \"/root/file1.db\", \"../../file.docx\", \"/file.db\"])\n    def test_milvus_local_file_path(self, file_path):\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=file_path)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        results = client_w.insert(client, collection_name, rows)[0]\n        assert results['insert_count'] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"illegal init\")\n    @pytest.mark.parametrize(\"file_path\", [\"/\", \"/cc/cc/cc/cc.db\", \"    \", \"/dir \", 0])\n    def test_milvus_local_invalid_file_path(self, file_path):\n        self._connect(enable_milvus_client_api=True, enable_milvus_local_api=file_path)"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_insert.py",
    "content": "import multiprocessing\nimport numbers\nimport random\nimport numpy\nimport threading\nimport pytest\nimport pandas as pd\nimport decimal\nfrom decimal import Decimal, getcontext\nfrom time import sleep\nimport heapq\n\nfrom base.client_base import TestcaseBase\nfrom utils.util_log import test_log as log\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.util_pymilvus import *\nfrom common.constants import *\nfrom pymilvus.orm.types import CONSISTENCY_STRONG, CONSISTENCY_BOUNDED, CONSISTENCY_SESSION, CONSISTENCY_EVENTUALLY\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\n\nclient_w = HighLevelApiWrapper()\n\nprefix = \"milvus_client_api_insert\"\nepsilon = ct.epsilon\ndefault_nb = ct.default_nb\ndefault_nb_medium = ct.default_nb_medium\ndefault_nq = ct.default_nq\ndefault_dim = ct.default_dim\ndefault_limit = ct.default_limit\ndefault_search_exp = \"id >= 0\"\nexp_res = \"exp_res\"\ndefault_search_string_exp = \"varchar >= \\\"0\\\"\"\ndefault_search_mix_exp = \"int64 >= 0 && varchar >= \\\"0\\\"\"\ndefault_invaild_string_exp = \"varchar >= 0\"\ndefault_json_search_exp = \"json_field[\\\"number\\\"] >= 0\"\nperfix_expr = 'varchar like \"0%\"'\ndefault_search_field = ct.default_float_vec_field_name\ndefault_search_params = ct.default_search_params\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_bool_field_name = ct.default_bool_field_name\ndefault_string_field_name = ct.default_string_field_name\ndefault_int32_array_field_name = ct.default_int32_array_field_name\ndefault_string_array_field_name = ct.default_string_array_field_name\n\n\nclass TestMilvusClientInsertInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_column_data(self, enable_milvus_local_api):\n        \"\"\"\n        target: test insert column data\n        method: create connection, collection, insert and search\n        expected: raise error\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        vectors = [[random.random() for _ in range(default_dim)] for _ in range(default_nb)]\n        data = [[i for i in range(default_nb)], vectors]\n        error = {ct.err_code: 1, ct.err_msg: \"Unexpected error, message=<'list' object has no attribute 'items'\"}\n        client_w.insert(client, collection_name, data,\n                        check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_empty_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"\"\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"`collection_name` value {collection_name} is illegal\"}\n        client_w.insert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"collection_name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_insert_invalid_collection_name(self, enable_milvus_local_api, collection_name):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {collection_name}. the first character of a \"\n                                                f\"collection name must be an underscore or letter: invalid parameter\"}\n        client_w.insert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_collection_name_over_max_length(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"a\".join(\"a\" for i in range(256))\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1100, ct.err_msg: f\"invalid dimension: {collection_name}. \"\n                                                f\"the length of a collection name must be less than 255 characters: \"\n                                                f\"invalid parameter\"}\n        client_w.insert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_not_exist_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(\"insert_not_exist\")\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not found\"\n                                               f\"[database=default][collection={collection_name}]\"}\n        client_w.insert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"data\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \" \"])\n    def test_milvus_client_insert_data_invalid_type(self, enable_milvus_local_api, data):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        error = {ct.err_code: 1, ct.err_msg: f\"None rows, please provide valid row data.\"}\n        client_w.insert(client, collection_name, data,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_data_empty(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        error = {ct.err_code: 1, ct.err_msg: f\"None rows, please provide valid row data.\"}\n        client_w.insert(client, collection_name, data=\"\")\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_data_vector_field_missing(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i,\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"Field vector don't match in entities[0]\"}\n        client_w.insert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_data_id_field_missing(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"Field id don't match in entities[0]\"}\n        client_w.insert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_data_extra_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, enable_dynamic_field=False)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"Attempt to insert an unexpected field \"\n                                             f\"to collection without enabling dynamic field\"}\n        client_w.insert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_data_dim_not_match(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [\n            {default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim + 1))[0]),\n             default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 65536, ct.err_msg: f\"of float data should divide the dim({default_dim})\"}\n        client_w.insert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_not_matched_data(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert not matched data then defined\n        method: insert string to int primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [\n            {default_primary_key_field_name: str(i), default_vector_field_name: list(rng.random((1, default_dim))[0]),\n             default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"The Input data type is inconsistent with defined schema, \"\n                                             f\"please check it.\"}\n        client_w.insert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"partition_name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \" \"])\n    def test_milvus_client_insert_invalid_partition_name(self, enable_milvus_local_api, partition_name):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 65535, ct.err_msg: f\"Invalid partition name: {partition_name}. The first character of \"\n                                                 f\"a partition name must be an underscore or letter.\"}\n        client_w.insert(client, collection_name, data=rows, partition_name=partition_name,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_not_exist_partition_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        partition_name = cf.gen_unique_str(\"partition_not_exist\")\n        error = {ct.err_code: 200, ct.err_msg: f\"partition not found[partition={partition_name}]\"}\n        client_w.insert(client, collection_name, data=rows, partition_name=partition_name,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_insert_collection_partition_not_match(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        another_collection_name = cf.gen_unique_str(prefix + \"another\")\n        partition_name = cf.gen_unique_str(\"partition\")\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.create_collection(client, another_collection_name, default_dim)\n        client_w.create_partition(client, another_collection_name, partition_name)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 200, ct.err_msg: f\"partition not found[partition={partition_name}]\"}\n        client_w.insert(client, collection_name, data=rows, partition_name=partition_name,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestMilvusClientInsertValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_milvus_client_insert_default(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        results = client_w.insert(client, collection_name, rows)[0]\n        assert results['insert_count'] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 4. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.release_collection(client, collection_name)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_insert_different_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        results = client_w.insert(client, collection_name, rows)[0]\n        assert results['insert_count'] == default_nb\n        # 3. insert diff fields\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, \"new_diff_str_field\": str(i)} for i in range(default_nb)]\n        results = client_w.insert(client, collection_name, rows)[0]\n        assert results['insert_count'] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_insert_empty_data(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rows = []\n        results = client_w.insert(client, collection_name, rows)[0]\n        assert results['insert_count'] == 0\n        # 3. search\n        rng = np.random.default_rng(seed=19530)\n        vectors_to_search = rng.random((1, default_dim))\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": [],\n                                     \"limit\": 0})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        partition_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. create partition\n        client_w.create_partition(client, collection_name, partition_name)\n        partitions = client_w.list_partitions(client, collection_name)[0]\n        assert partition_name in partitions\n        index = client_w.list_indexes(client, collection_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        # 3. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        results = client_w.insert(client, collection_name, rows, partition_name=partition_name)[0]\n        assert results['insert_count'] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # partition_number = client_w.get_partition_stats(client, collection_name, \"_default\")[0]\n        # assert partition_number == default_nb\n        # partition_number = client_w.get_partition_stats(client, collection_name, partition_name)[0]\n        # assert partition_number[0]['value'] == 0\n        if client_w.has_partition(client, collection_name, partition_name)[0]:\n            client_w.release_partitions(client, collection_name, partition_name)\n            client_w.drop_partition(client, collection_name, partition_name)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientUpsertInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_column_data(self, enable_milvus_local_api):\n        \"\"\"\n        target: test insert column data\n        method: create connection, collection, insert and search\n        expected: raise error\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        vectors = [[random.random() for _ in range(default_dim)] for _ in range(default_nb)]\n        data = [[i for i in range(default_nb)], vectors]\n        error = {ct.err_code: 1, ct.err_msg: \"Unexpected error, message=<'list' object has no attribute 'items'\"}\n        client_w.upsert(client, collection_name, data,\n                        check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_empty_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"\"\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"`collection_name` value {collection_name} is illegal\"}\n        client_w.upsert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"collection_name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\"])\n    def test_milvus_client_upsert_invalid_collection_name(self, collection_name, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name: {collection_name}. the first character of a \"\n                                                f\"collection name must be an underscore or letter: invalid parameter\"}\n        client_w.upsert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_collection_name_over_max_length(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = \"a\".join(\"a\" for i in range(256))\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1100, ct.err_msg: f\"invalid dimension: {collection_name}. \"\n                                                f\"the length of a collection name must be less than 255 characters: \"\n                                                f\"invalid parameter\"}\n        client_w.upsert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_not_exist_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(\"insert_not_exist\")\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection collection not found\"\n                                               f\"[database=default][collection={collection_name}]\"}\n        client_w.upsert(client, collection_name, rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"data\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \" \"])\n    def test_milvus_client_upsert_data_invalid_type(self, data, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        error = {ct.err_code: 1, ct.err_msg: f\"None rows, please provide valid row data.\"}\n        client_w.upsert(client, collection_name, data,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_data_empty(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        error = {ct.err_code: 1, ct.err_msg: f\"None rows, please provide valid row data.\"}\n        client_w.upsert(client, collection_name, data= \"\")\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_data_vector_field_missing(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i,\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"Field vector don't match in entities[0]\"}\n        client_w.upsert(client, collection_name, data= rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_data_id_field_missing(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"Field id don't match in entities[0]\"}\n        client_w.upsert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_data_extra_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, enable_dynamic_field=False)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"Attempt to insert an unexpected field \"\n                                             f\"to collection without enabling dynamic field\"}\n        client_w.upsert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_data_dim_not_match(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [\n            {default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim + 1))[0]),\n             default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 65536, ct.err_msg: f\"of float data should divide the dim({default_dim})\"}\n        client_w.upsert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_not_matched_data(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert not matched data then defined\n        method: insert string to int primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [\n            {default_primary_key_field_name: str(i), default_vector_field_name: list(rng.random((1, default_dim))[0]),\n             default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 1, ct.err_msg: f\"The Input data type is inconsistent with defined schema, \"\n                                             f\"please check it.\"}\n        client_w.upsert(client, collection_name, data=rows,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"partition_name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \" \"])\n    def test_milvus_client_upsert_invalid_partition_name(self, partition_name):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 65535, ct.err_msg: f\"Invalid partition name: {partition_name}. The first character of \"\n                                                 f\"a partition name must be an underscore or letter.\"}\n        client_w.upsert(client, collection_name, data=rows, partition_name=partition_name,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_upsert_not_exist_partition_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        partition_name = cf.gen_unique_str(\"partition_not_exist\")\n        error = {ct.err_code: 200, ct.err_msg: f\"partition not found[partition={partition_name}]\"}\n        client_w.upsert(client, collection_name, data=rows, partition_name=partition_name,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_upsert_collection_partition_not_match(self, enable_milvus_local_api):\n        \"\"\"\n        target: test milvus client: insert extra field than schema\n        method: insert extra field than schema when enable_dynamic_field is False\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        another_collection_name = cf.gen_unique_str(prefix + \"another\")\n        partition_name = cf.gen_unique_str(\"partition\")\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        client_w.create_collection(client, another_collection_name, default_dim)\n        client_w.create_partition(client, another_collection_name, partition_name)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        error = {ct.err_code: 200, ct.err_msg: f\"partition not found[partition={partition_name}]\"}\n        client_w.upsert(client, collection_name, data=rows, partition_name=partition_name,\n                        check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestMilvusClientUpsertValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_milvus_client_upsert_default(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        results = client_w.upsert(client, collection_name, rows)[0]\n        assert results['upsert_count'] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 4. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.release_collection(client, collection_name)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_upsert_empty_data(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rows = []\n        results = client_w.upsert(client, collection_name, rows)[0]\n        assert results['upsert_count'] == 0\n        # 3. search\n        rng = np.random.default_rng(seed=19530)\n        vectors_to_search = rng.random((1, default_dim))\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": [],\n                                     \"limit\": 0})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_upsert_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        partition_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. create partition\n        client_w.create_partition(client, collection_name, partition_name)\n        partitions = client_w.list_partitions(client, collection_name)[0]\n        assert partition_name in partitions\n        index = client_w.list_indexes(client, collection_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        # 3. upsert to default partition\n        results = client_w.upsert(client, collection_name, rows, partition_name=partitions[0])[0]\n        assert results['upsert_count'] == default_nb\n        # 4. upsert to non-default partition\n        results = client_w.upsert(client, collection_name, rows, partition_name=partition_name)[0]\n        assert results['upsert_count'] == default_nb\n        # 5. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # partition_number = client_w.get_partition_stats(client, collection_name, \"_default\")[0]\n        # assert partition_number == default_nb\n        # partition_number = client_w.get_partition_stats(client, collection_name, partition_name)[0]\n        # assert partition_number[0]['value'] == 0\n        if client_w.has_partition(client, collection_name, partition_name)[0]:\n            client_w.release_partitions(client, collection_name, partition_name)\n            client_w.drop_partition(client, collection_name, partition_name)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_insert_upsert(self, enable_milvus_local_api):\n        \"\"\"\n        target: test fast create collection normal case\n        method: create collection\n        expected: create collection with default schema, index, and load successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        partition_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. create partition\n        client_w.create_partition(client, collection_name, partition_name)\n        partitions = client_w.list_partitions(client, collection_name)[0]\n        assert partition_name in partitions\n        index = client_w.list_indexes(client, collection_name)[0]\n        assert index == ['vector']\n        # load_state = client_w.get_load_state(collection_name)[0]\n        # 3. insert and upsert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        results = client_w.insert(client, collection_name, rows, partition_name=partition_name)[0]\n        assert results['insert_count'] == default_nb\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, \"new_diff_str_field\": str(i)} for i in range(default_nb)]\n        results  = client_w.upsert(client, collection_name, rows, partition_name=partition_name)[0]\n        assert results['upsert_count'] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        if client_w.has_partition(client, collection_name, partition_name)[0]:\n            client_w.release_partitions(client, collection_name, partition_name)\n            client_w.drop_partition(client, collection_name, partition_name)\n        if client_w.has_collection(client, collection_name)[0]:\n            client_w.drop_collection(client, collection_name)\n\n"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_migrate.py",
    "content": "import json\nimport random\nimport time\nfrom multiprocessing import Process\nimport numpy as np\nfrom pymilvus import (\n    connections,\n    utility,\n    FieldSchema, CollectionSchema, DataType,\n    Collection,\n)\nfrom pymilvus.client.types import LoadState\nimport pytest\nimport os\nfrom base.client_base import TestcaseBase\nfrom common.common_type import CaseLabel, CheckTasks\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nfrom common import common_type as ct\n\n\nclient_w = HighLevelApiWrapper()\nprefix = \"milvus_lite_migrate\"\ndefault_dim = ct.default_dim\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_bool_field_name = ct.default_bool_field_name\n# default_nb = ct.default_nb\ndefault_limit = ct.default_limit\ndefault_nq = ct.default_nq\ndefault_string_field_name = ct.default_string_field_name\ndefault_int32_array_field_name = ct.default_int32_array_field_name\nc_name = \"coll_migrate_1\"\nd_file = f\"local_migrate_case_test.db\"\n\n\nclass TestMilvusLiteMigrate(TestcaseBase):\n    \"\"\"\n    1. create collection for data preparation after normal search\n    2. dump to json file\n    3. verify that the key in the generated json file matches the schema\n    \"\"\"\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_lite_migrate_json_file(self):\n        num_entities, dim = 3000, 8\n        connections.connect(\"default\", uri=d_file)\n        fields = [\n            FieldSchema(name=\"random\", dtype=DataType.DOUBLE),\n            FieldSchema(name=\"pk\", dtype=DataType.VARCHAR, is_primary=True, auto_id=False, max_length=100),\n            FieldSchema(name=\"embeddings\", dtype=DataType.FLOAT_VECTOR, dim=dim)\n        ]\n        schema = CollectionSchema(fields, \"collection is the simplest demo to introduce the APIs\")\n        hello_milvus = Collection(c_name, schema)\n        rng = np.random.default_rng(seed=19530)\n        entities = [\n            # provide the pk field because `auto_id` is set to False\n            rng.random(num_entities).tolist(),  # field random, only supports list\n            [str(i) for i in range(num_entities)],\n            rng.random((num_entities, dim)),  # field embeddings, supports numpy.ndarray and list\n        ]\n        insert_result = hello_milvus.insert(entities)\n        index = {\n            \"index_type\": \"FLAT\",\n            \"metric_type\": \"L2\",\n            \"params\": {\"nlist\": 128},\n        }\n\n        hello_milvus.create_index(\"embeddings\", index)\n        hello_milvus.load()\n        assert utility.load_state(c_name) == LoadState.Loaded\n        vectors_to_search = entities[-1][-2:]\n        search_params = {\n            \"metric_type\": \"L2\",\n            \"params\": {\"nprobe\": 10},\n        }\n        result = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, output_fields=[\"random\"])\n\n        for hits in result:\n            for hit in hits:\n                print(f\"hit: {hit}, random field: {hit.entity.get('random')}\")\n\n        result = hello_milvus.query(expr=\"random > 0.5\", output_fields=[\"random\", \"embeddings\"])\n        r1 = hello_milvus.query(expr=\"random > 0.5\", limit=4, output_fields=[\"random\"])\n        r2 = hello_milvus.query(expr=\"random > 0.5\", offset=1, limit=3, output_fields=[\"random\"])\n        result = hello_milvus.search(vectors_to_search, \"embeddings\", search_params, limit=3, expr=\"random > 0.5\",\n                                     output_fields=[\"random\"])\n\n        ids = insert_result.primary_keys\n        expr = f'pk in [\"{ids[0]}\" , \"{ids[1]}\"]'\n        result = hello_milvus.query(expr=expr, output_fields=[\"random\", \"embeddings\"])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_check_json_file_key(self):\n        \"\"\"\n        pytest test_milvus_lite_migrate.py::TestMilvusLiteMigrate::test_check_json_file_key -s\n        To check whether the data export is working properly using the above command, start a new command line\n        \"\"\"\n        command = f\"milvus-lite dump -d ./{d_file} -c {c_name} -p ./data_json\"\n        os.system(command)\n        time.sleep(3)\n        dir = os.popen(\"ls data_json/\").read()\n        dir = dir.replace(\"\\n\", \"\")\n        with open(f'data_json/{dir}/1.json') as user_file:\n            file_contents = user_file.read()\n        parsed_json = json.loads(file_contents)\n        os.popen(\"rm -rf data_json\")\n        keys = parsed_json[\"rows\"][0].keys()\n        assert list(keys) == ['random', 'pk', 'embeddings']"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_query.py",
    "content": "import multiprocessing\nimport numbers\nimport random\nimport numpy\nimport threading\nimport pytest\nimport pandas as pd\nimport decimal\nfrom decimal import Decimal, getcontext\nfrom time import sleep\nimport heapq\n\nfrom base.client_base import TestcaseBase\nfrom utils.util_log import test_log as log\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.util_pymilvus import *\nfrom common.constants import *\nfrom pymilvus.orm.types import CONSISTENCY_STRONG, CONSISTENCY_BOUNDED, CONSISTENCY_SESSION, CONSISTENCY_EVENTUALLY\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nclient_w = HighLevelApiWrapper()\n\nprefix = \"milvus_client_api_query\"\nepsilon = ct.epsilon\ndefault_nb = ct.default_nb\ndefault_nb_medium = ct.default_nb_medium\ndefault_nq = ct.default_nq\ndefault_dim = ct.default_dim\ndefault_limit = ct.default_limit\ndefault_search_exp = \"id >= 0\"\nexp_res = \"exp_res\"\ndefault_search_string_exp = \"varchar >= \\\"0\\\"\"\ndefault_search_mix_exp = \"int64 >= 0 && varchar >= \\\"0\\\"\"\ndefault_invaild_string_exp = \"varchar >= 0\"\ndefault_json_search_exp = \"json_field[\\\"number\\\"] >= 0\"\nperfix_expr = 'varchar like \"0%\"'\ndefault_search_field = ct.default_float_vec_field_name\ndefault_search_params = ct.default_search_params\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_bool_field_name = ct.default_bool_field_name\ndefault_string_field_name = ct.default_string_field_name\ndefault_int32_array_field_name = ct.default_int32_array_field_name\ndefault_string_array_field_name = ct.default_string_array_field_name\n\n\nclass TestMilvusClientQueryInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_query_not_all_required_params(self, enable_milvus_local_api):\n        \"\"\"\n        target: test query (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. query using ids\n        error = {ct.err_code: 65535, ct.err_msg: f\"empty expression should be used with limit\"}\n        client_w.query(client, collection_name,\n                       check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestMilvusClientQueryValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_query_default(self, enable_milvus_local_api):\n        \"\"\"\n        target: test query (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. query using ids\n        client_w.query(client, collection_name, ids=[i for i in range(default_nb)],\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        # 4. query using filter\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_query_output_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test query (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. query using ids\n        client_w.query(client, collection_name, ids=[i for i in range(default_nb)],\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        # 4. query using filter\n        res = client_w.query(client, collection_name, filter=default_search_exp,\n                             output_fields=[default_primary_key_field_name, default_float_field_name,\n                                            default_string_field_name, default_vector_field_name],\n                             check_task=CheckTasks.check_query_results,\n                             check_items={exp_res: rows,\n                                          \"with_vec\": True,\n                                          \"primary_field\": default_primary_key_field_name})[0]\n        assert set(res[0].keys()) == {default_primary_key_field_name, default_vector_field_name,\n                                      default_float_field_name, default_string_field_name}\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_query_output_fields_all(self, enable_milvus_local_api):\n        \"\"\"\n        target: test query (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. query using ids\n        client_w.query(client, collection_name, ids=[i for i in range(default_nb)],\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        # 4. query using filter\n        res = client_w.query(client, collection_name, filter=default_search_exp,\n                             output_fields=[\"*\"],\n                             check_task=CheckTasks.check_query_results,\n                             check_items={exp_res: rows,\n                                          \"with_vec\": True,\n                                          \"primary_field\": default_primary_key_field_name})[0]\n        assert set(res[0].keys()) == {default_primary_key_field_name, default_vector_field_name,\n                                      default_float_field_name, default_string_field_name}\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_query_limit(self, enable_milvus_local_api):\n        \"\"\"\n        target: test query (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. query using ids\n        limit = 5\n        client_w.query(client, collection_name, ids=[i for i in range(default_nb)],\n                       limit=limit,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[:limit],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name[:limit]})\n        # 4. query using filter\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       limit=limit,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[:limit],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name[:limit]})[0]\n        client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientGetInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\",\n                             [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"\".join(\"a\" for i in range(ct.max_name_length + 1))])\n    def test_milvus_client_get_invalid_collection_name(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test get interface invalid cases\n        method: invalid collection name\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)[0]\n        pks = [i for i in range(default_nb)]\n        # 3. get first primary key\n        error = {ct.err_code: 1100, ct.err_msg: f\"Invalid collection name\"}\n        client_w.get(client, name, ids=pks[0:1],\n                     check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_get_not_exist_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test get interface invalid cases\n        method: invalid collection name\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)[0]\n        pks = [i for i in range(default_nb)]\n        # 3. get first primary key\n        name = \"invalid\"\n        error = {ct.err_code: 100, ct.err_msg: f\"can't find collection[database=default][collection={name}]\"}\n        client_w.get(client, name, ids=pks[0:1],\n                     check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"invalid_ids\",[\"中文\", \"%$#\"])\n    def test_milvus_client_get_invalid_ids(self, invalid_ids, enable_milvus_local_api):\n        \"\"\"\n        target: test get interface invalid cases\n        method: invalid collection name\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)[0]\n        # 3. get first primary key\n        error = {ct.err_code: 1100, ct.err_msg: f\"cannot parse expression\"}\n        client_w.get(client, collection_name, ids=invalid_ids,\n                     check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientGetValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_get_normal(self, enable_milvus_local_api):\n        \"\"\"\n        target: test get interface\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)[0]\n        pks = [i for i in range(default_nb)]\n        # 3. get first primary key\n        first_pk_data = client_w.get(client, collection_name, ids=pks[0:1])[0]\n        assert len(first_pk_data) == len(pks[0:1])\n        first_pk_data_1 = client_w.get(client, collection_name, ids=0)[0]\n        assert first_pk_data == first_pk_data_1\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_get_output_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test get interface with output fields\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)[0]\n        pks = [i for i in range(default_nb)]\n        # 3. get first primary key\n        output_fields_array = [default_primary_key_field_name, default_vector_field_name,\n                               default_float_field_name, default_string_field_name]\n        first_pk_data = client_w.get(client, collection_name, ids=pks[0:1], output_fields=output_fields_array)[0]\n        assert len(first_pk_data) == len(pks[0:1])\n        assert len(first_pk_data[0]) == len(output_fields_array)\n        first_pk_data_1 = client_w.get(client, collection_name, ids=0, output_fields=output_fields_array)[0]\n        assert first_pk_data == first_pk_data_1\n        assert len(first_pk_data_1[0]) == len(output_fields_array)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(reason=\"pymilvus issue 2056\")\n    def test_milvus_client_get_normal_string(self, enable_milvus_local_api):\n        \"\"\"\n        target: test get interface for string field\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"string\", max_length=ct.default_length)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [\n            {default_primary_key_field_name: str(i), default_vector_field_name: list(rng.random((1, default_dim))[0]),\n             default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)[0]\n        pks = [str(i) for i in range(default_nb)]\n        # 3. get first primary key\n        first_pk_data = client_w.get(client, collection_name, ids=pks[0:1])[0]\n        assert len(first_pk_data) == len(pks[0:1])\n        first_pk_data_1 = client_w.get(client, collection_name, ids=\"0\")[0]\n        assert first_pk_data == first_pk_data_1\n\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(reason=\"pymilvus issue 2056\")\n    def test_milvus_client_get_normal_string_output_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test get interface for string field\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"string\", max_length=ct.default_length)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [\n            {default_primary_key_field_name: str(i), default_vector_field_name: list(rng.random((1, default_dim))[0]),\n             default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)[0]\n        pks = [str(i) for i in range(default_nb)]\n        # 3. get first primary key\n        output_fields_array = [default_primary_key_field_name, default_vector_field_name,\n                               default_float_field_name, default_string_field_name]\n        first_pk_data = client_w.get(client, collection_name, ids=pks[0:1], output_fields=output_fields_array)[0]\n        assert len(first_pk_data) == len(pks[0:1])\n        assert len(first_pk_data[0]) == len(output_fields_array)\n        first_pk_data_1 = client_w.get(client, collection_name, ids=\"0\", output_fields=output_fields_array)[0]\n        assert first_pk_data == first_pk_data_1\n        assert len(first_pk_data_1[0]) == len(output_fields_array)\n        client_w.drop_collection(client, collection_name)"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_search.py",
    "content": "import math\nimport multiprocessing\nimport numbers\nimport random\nimport numpy\nimport threading\n\nimport numpy as np\nimport pytest\nimport pandas as pd\nimport decimal\nfrom decimal import Decimal, getcontext\nfrom time import sleep\nimport heapq\n\nfrom base.client_base import TestcaseBase\nfrom utils.util_log import test_log as log\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.util_pymilvus import *\nfrom common.constants import *\nfrom pymilvus.orm.types import CONSISTENCY_STRONG, CONSISTENCY_BOUNDED, CONSISTENCY_SESSION, CONSISTENCY_EVENTUALLY\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nfrom pymilvus import AnnSearchRequest, RRFRanker, WeightedRanker\n\n\nprefix = \"milvus_client_api_search\"\nepsilon = ct.epsilon\ndefault_nb = ct.default_nb\ndefault_nb_medium = ct.default_nb_medium\ndefault_nq = ct.default_nq\ndefault_dim = ct.default_dim\ndefault_limit = ct.default_limit\ndefault_search_exp = \"id >= 0\"\ndefault_expr = \"int64 >= 0\"\nexp_res = \"exp_res\"\ndefault_search_string_exp = \"varchar >= \\\"0\\\"\"\ndefault_search_mix_exp = \"int64 >= 0 && varchar >= \\\"0\\\"\"\ndefault_invaild_string_exp = \"varchar >= 0\"\ndefault_json_search_exp = \"json_field[\\\"number\\\"] >= 0\"\nperfix_expr = 'varchar like \"0%\"'\ndefault_search_field = ct.default_float_vec_field_name\ndefault_search_params = ct.default_search_params\ndefault_primary_key_field_name = \"id\"\ndefault_vector_field_name = \"vector\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_bool_field_name = ct.default_bool_field_name\ndefault_string_field_name = ct.default_string_field_name\ndefault_int32_array_field_name = ct.default_int32_array_field_name\ndefault_string_array_field_name = ct.default_string_array_field_name\ndefault_int64_field_name = ct.default_int64_field_name\nmax_hybrid_search_req_num = ct.max_hybrid_search_req_num\ndefault_json_field_name = ct.default_json_field_name\nhybrid_search_epsilon = 0.01\nnq = 1\nmin_dim = ct.min_dim\nmax_limit = ct.max_limit\nclient_w = HighLevelApiWrapper()\n\n\nclass TestMilvusClientSearchInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are invalid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_collection_invalid_primary_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with invalid primary field\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        error = {ct.err_code: 1, ct.err_msg: f\"Param id_type must be int or string\"}\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"invalid\",\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_collection_string_auto_id(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with auto id on string primary key\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        error = {ct.err_code: 65535, ct.err_msg: f\"type param(max_length) should be specified for varChar \"\n                                                 f\"field of collection {collection_name}\"}\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"string\", auto_id=True,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_create_same_collection_different_params(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create\n        expected: 1. Successfully to create collection with same params\n                  2. Report errors for creating collection with same name and different params\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. create collection with same params\n        client_w.create_collection(client, collection_name, default_dim)\n        # 3. create collection with same name and different params\n        error = {ct.err_code: 1, ct.err_msg: f\"create duplicate collection with different parameters, \"\n                                             f\"collection: {collection_name}\"}\n        client_w.create_collection(client, collection_name, default_dim + 1,\n                                   check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_collection_invalid_metric_type(self, enable_milvus_local_api):\n        \"\"\"\n        target: test high level api: client.create_collection\n        method: create collection with auto id on string primary key\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        error = {ct.err_code: 1100,\n                 ct.err_msg: \"metric type not found or not supported, supported: [L2 IP COSINE HAMMING JACCARD]\"}\n        client_w.create_collection(client, collection_name, default_dim, metric_type=\"invalid\",\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"https://github.com/milvus-io/milvus/issues/29880\")\n    def test_milvus_client_search_not_consistent_metric_type(self, enable_milvus_local_api, metric_type):\n        \"\"\"\n        target: test search with inconsistent metric type (default is IP) with that of index\n        method: create connection, collection, insert and search with not consistent metric type\n        expected: Raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. search\n        rng = np.random.default_rng(seed=19530)\n        vectors_to_search = rng.random((1, 8))\n        search_params = {\"metric_type\": metric_type}\n        error = {ct.err_code: 1100,\n                 ct.err_msg: f\"metric type not match: invalid parameter[expected=IP][actual={metric_type}]\"}\n        client_w.search(client, collection_name, vectors_to_search, limit=default_limit,\n                        search_params=search_params,\n                        check_task=CheckTasks.err_res, check_items=error)\n        client_w.drop_collection(client, collection_name)\n\n\nclass TestMilvusClientSearchValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_search_query_default(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        client_w.using_database(client, \"default\")\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # client_w.flush(client, collection_name)\n        # assert client_w.num_entities(client, collection_name)[0] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 4. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.release_collection(client, collection_name)\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_rename_search_query_default(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"consistency_level\": 0})\n        old_name = collection_name\n        new_name = collection_name + \"new\"\n        client_w.rename_collection(client, old_name, new_name)\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, new_name, rows)\n        # client_w.flush(client, collection_name)\n        # assert client_w.num_entities(client, collection_name)[0] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, new_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n        # 4. query\n        client_w.query(client, new_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.release_collection(client, new_name)\n        client_w.drop_collection(client, new_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_array_insert_search(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        collections = client_w.list_collections(client)[0]\n        assert collection_name in collections\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{\n            default_primary_key_field_name: i,\n            default_vector_field_name: list(rng.random((1, default_dim))[0]),\n            default_float_field_name: i * 1.0,\n            default_int32_array_field_name: [i, i + 1, i + 2],\n            default_string_array_field_name: [str(i), str(i + 1), str(i + 2)]\n        } for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_search_query_string(self, enable_milvus_local_api):\n        \"\"\"\n        target: test search (high level api) for string primary key\n        method: create connection, collection, insert and search\n        expected: search/query successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, id_type=\"string\", max_length=ct.default_length)\n        client_w.describe_collection(client, collection_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": collection_name,\n                                                  \"dim\": default_dim,\n                                                  \"auto_id\": auto_id})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [\n            {default_primary_key_field_name: str(i), default_vector_field_name: list(rng.random((1, default_dim))[0]),\n             default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        client_w.insert(client, collection_name, rows)\n        client_w.flush(client, collection_name)\n        assert client_w.num_entities(client, collection_name)[0] == default_nb\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        client_w.search(client, collection_name, vectors_to_search,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"limit\": default_limit})\n        # 4. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows,\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_search_different_metric_types_not_specifying_in_search_params(self, enable_milvus_local_api,\n                                                                                         metric_type, auto_id):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search successfully with limit(topK)\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, metric_type=metric_type, auto_id=auto_id,\n                                   consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        if auto_id:\n            for row in rows:\n                row.pop(default_primary_key_field_name)\n        client_w.insert(client, collection_name, rows)\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        # search_params = {\"metric_type\": metric_type}\n        client_w.search(client, collection_name, vectors_to_search, limit=default_limit,\n                        output_fields=[default_primary_key_field_name],\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"limit\": default_limit})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_milvus_client_search_different_metric_types_specifying_in_search_params(self, enable_milvus_local_api,\n                                                                                     metric_type, auto_id):\n        \"\"\"\n        target: test search (high level api) normal case\n        method: create connection, collection, insert and search\n        expected: search successfully with limit(topK)\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, metric_type=metric_type, auto_id=auto_id,\n                                   consistency_level=\"Strong\")\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        if auto_id:\n            for row in rows:\n                row.pop(default_primary_key_field_name)\n        client_w.insert(client, collection_name, rows)\n        # 3. search\n        vectors_to_search = rng.random((1, default_dim))\n        search_params = {\"metric_type\": metric_type}\n        client_w.search(client, collection_name, vectors_to_search, limit=default_limit,\n                        search_params=search_params,\n                        output_fields=[default_primary_key_field_name],\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"limit\": default_limit})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_ids(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, ids=[i for i in range(delete_num)])\n        # 4. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 5. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_client_delete_with_filters(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete (high level api)\n        method: create connection, collection, insert delete, and search\n        expected: search/query successfully without deleted data\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim, consistency_level=\"Strong\")\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0, default_string_field_name: str(i)} for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, filter=f\"id < {delete_num}\")\n        # 4. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 5. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)\n\n\nclass TestCollectionHybridSearchValid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=[1, 10])\n    def nq(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[default_nb_medium])\n    def nb(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[32, 128])\n    def dim(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def _async(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"JACCARD\", \"HAMMING\"])\n    def metrics(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def is_flush(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[True, False])\n    def enable_dynamic_field(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"IP\", \"COSINE\", \"L2\"])\n    def metric_type(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[True, False])\n    def random_primary_key(self, request):\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=[\"FLOAT_VECTOR\", \"FLOAT16_VECTOR\", \"BFLOAT16_VECTOR\"])\n    def vector_data_type(self, request):\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The following are valid base cases for hybrid_search\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"nq\", [16384])\n    def test_hybrid_search_normal_max_nq(self, nq, enable_milvus_local_api):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = self.init_collection_general(prefix, True)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [1]\n        vectors = cf.gen_vectors_based_on_vector_type(nq, default_dim, \"FLOAT_VECTOR\")\n        # 4. get hybrid search req list\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 5. hybrid search\n        hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": nq,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": default_limit})[0]\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(reason=\"issue 32288\")\n    @pytest.mark.parametrize(\"nq\", [0, 16385])\n    def test_hybrid_search_normal_over_max_nq(self, nq):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w = self.init_collection_general(prefix, True)[0]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [1]\n        vectors = cf.gen_vectors_based_on_vector_type(nq, default_dim, \"FLOAT_VECTOR\")\n        # 4. get hybrid search req list\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 5. hybrid search\n        err_msg = \"nq (number of search vector per search request) should be in range [1, 16384]\"\n        collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                   check_task=CheckTasks.err_res,\n                                   check_items={\"err_code\": 65535,\n                                                \"err_msg\": err_msg})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_hybrid_search_no_limit(self):\n        \"\"\"\n        target: test hybrid search with no limit\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        multiple_dim_array = [default_dim, default_dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        vectors = cf.gen_vectors_based_on_vector_type(nq, default_dim, \"FLOAT_VECTOR\")\n\n        # get hybrid search req list\n        search_param = {\n            \"data\": vectors,\n            \"anns_field\": vector_name_list[0],\n            \"param\": {\"metric_type\": \"COSINE\"},\n            \"limit\": default_limit,\n            \"expr\": \"int64 > 0\"}\n        req = AnnSearchRequest(**search_param)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_WeightedRanker_empty_reqs(self, primary_field):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, primary_field=primary_field,\n                                         multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. hybrid search with empty reqs\n        collection_w.hybrid_search([], WeightedRanker(), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": 0})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(reason=\"issue 29839\")\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_as_search(self, nq, primary_field, is_flush):\n        \"\"\"\n        target: test hybrid search to search as the original search interface\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK), and the result should be equal to search\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 3\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_flush=is_flush,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=[dim, dim])[0:5]\n\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        vectors = [[random.random() for _ in range(dim)] for _ in range(nq)]\n        for search_field in vector_name_list:\n            # 2. prepare search params\n            req_list = []\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": search_field,\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            # 3. hybrid search\n            hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(1), default_limit,\n                                                    check_task=CheckTasks.check_search_results,\n                                                    check_items={\"nq\": nq,\n                                                                 \"ids\": insert_ids,\n                                                                 \"limit\": default_limit})[0]\n            search_res = collection_w.search(vectors[:nq], search_field,\n                                             default_search_params, default_limit,\n                                             default_search_exp,\n                                             check_task=CheckTasks.check_search_results,\n                                             check_items={\"nq\": nq,\n                                                          \"ids\": insert_ids,\n                                                          \"limit\": default_limit})[0]\n            # 4. the effect of hybrid search to one field should equal to search\n            log.info(\"The distance list is:\\n\")\n            for i in range(nq):\n                log.info(hybrid_res[0].distances)\n                log.info(search_res[0].distances)\n                assert hybrid_res[i].ids == search_res[i].ids\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_different_metric_type(self, nq, primary_field, is_flush, metric_type):\n        \"\"\"\n        target: test hybrid search for fields with different metric type\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 128\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_flush=is_flush, is_index=False,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=[dim, dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for vector_name in vector_name_list:\n            search_param = {\n                \"data\": [[random.random() for _ in range(dim)] for _ in range(nq)],\n                \"anns_field\": vector_name,\n                \"param\": {\"metric_type\": metric_type, \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9, 1), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": nq,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_different_metric_type_each_field(self, nq, primary_field, is_flush, metric_type):\n        \"\"\"\n        target: test hybrid search for fields with different metric type\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 91\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_flush=is_flush, is_index=False,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=[dim, dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"L2\"}\n        collection_w.create_index(vector_name_list[0], flat_index)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"IP\"}\n        collection_w.create_index(vector_name_list[1], flat_index)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"COSINE\"}\n        collection_w.create_index(vector_name_list[2], flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        search_param = {\n            \"data\": [[random.random() for _ in range(dim)] for _ in range(nq)],\n            \"anns_field\": vector_name_list[0],\n            \"param\": {\"metric_type\": \"L2\", \"offset\": 0},\n            \"limit\": default_limit,\n            \"expr\": \"int64 > 0\"}\n        req = AnnSearchRequest(**search_param)\n        req_list.append(req)\n        search_param = {\n            \"data\": [[random.random() for _ in range(dim)] for _ in range(nq)],\n            \"anns_field\": vector_name_list[1],\n            \"param\": {\"metric_type\": \"IP\", \"offset\": 0},\n            \"limit\": default_limit,\n            \"expr\": \"int64 > 0\"}\n        req = AnnSearchRequest(**search_param)\n        req_list.append(req)\n        search_param = {\n            \"data\": [[random.random() for _ in range(dim)] for _ in range(nq)],\n            \"anns_field\": vector_name_list[2],\n            \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n            \"limit\": default_limit,\n            \"expr\": \"int64 > 0\"}\n        req = AnnSearchRequest(**search_param)\n        req_list.append(req)\n        # 4. hybrid search\n        hybrid_search = collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9, 1), default_limit,\n                                                   check_task=CheckTasks.check_search_results,\n                                                   check_items={\"nq\": nq,\n                                                                \"ids\": insert_ids,\n                                                                \"limit\": default_limit})[0]\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_different_dim(self, nq, primary_field, metric_type):\n        \"\"\"\n        target: test hybrid search for fields with different dim\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        default_limit = 100\n        # 1. initialize collection with data\n        dim = 121\n        multiple_dim_array = [dim + dim, dim - 10]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": [[random.random() for _ in range(multiple_dim_array[i])] for _ in range(nq)],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": metric_type, \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        hybrid_search_0 = collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit,\n                                                     check_task=CheckTasks.check_search_results,\n                                                     check_items={\"nq\": nq,\n                                                                  \"ids\": insert_ids,\n                                                                  \"limit\": default_limit})[0]\n        hybrid_search_1 = collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit,\n                                                     check_task=CheckTasks.check_search_results,\n                                                     check_items={\"nq\": nq,\n                                                                  \"ids\": insert_ids,\n                                                                  \"limit\": default_limit})[0]\n        for i in range(nq):\n            assert hybrid_search_0[i].ids == hybrid_search_1[i].ids\n            assert hybrid_search_0[i].distances == hybrid_search_1[i].distances\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_overall_limit_larger_sum_each_limit(self, nq, primary_field, metric_type):\n        \"\"\"\n        target: test hybrid search: overall limit which is larger than sum of each limit\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 200\n        multiple_dim_array = [dim + dim, dim - 10]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        id_list_nq = []\n        vectors = []\n        default_search_params = {\"metric_type\": metric_type, \"offset\": 0}\n        for i in range(len(vector_name_list)):\n            vectors.append([])\n        for i in range(nq):\n            id_list_nq.append([])\n        for k in range(nq):\n            for i in range(len(vector_name_list)):\n                vectors_search = [random.random() for _ in range(multiple_dim_array[i])]\n                vectors[i].append(vectors_search)\n        default_search_exp = \"int64 >= 0\"\n        # 4. search for the comparision for hybrid search\n        for i in range(len(vector_name_list)):\n            search_res = collection_w.search(vectors[i], vector_name_list[i],\n                                             default_search_params, default_limit,\n                                             default_search_exp,\n                                             check_task=CheckTasks.check_search_results,\n                                             check_items={\"nq\": nq,\n                                                          \"ids\": insert_ids,\n                                                          \"limit\": default_limit})[0]\n            for k in range(nq):\n                id_list_nq[k].extend(search_res[k].ids)\n        # 5. prepare hybrid search params\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors[i],\n                \"anns_field\": vector_name_list[i],\n                \"param\": default_search_params,\n                \"limit\": default_limit,\n                \"expr\": default_search_exp}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 6. hybrid search\n        hybrid_search = \\\n            collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit * len(req_list) + 1)[0]\n        assert len(hybrid_search) == nq\n        for i in range(nq):\n            assert len(hybrid_search[i].ids) == len(list(set(id_list_nq[i])))\n            assert set(hybrid_search[i].ids) == set(id_list_nq[i])\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_overall_different_limit(self, primary_field, metric_type):\n        \"\"\"\n        target: test hybrid search with different limit params\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 100\n        multiple_dim_array = [dim + dim, dim - 10]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": [[random.random() for _ in range(multiple_dim_array[i])] for _ in range(nq)],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": metric_type, \"offset\": 0},\n                \"limit\": default_limit - i,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": nq,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_min_limit(self, primary_field, metric_type):\n        \"\"\"\n        target: test hybrid search with minimum limit params\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 99\n        multiple_dim_array = [dim + dim, dim - 10]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        id_list = []\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(multiple_dim_array[i])] for _ in range(1)]\n            search_params = {\"metric_type\": metric_type, \"offset\": 0}\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": search_params,\n                \"limit\": min_dim,\n                \"expr\": default_expr}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            search_res = collection_w.search(vectors[:1], vector_name_list[i],\n                                             search_params, min_dim,\n                                             default_expr,\n                                             check_task=CheckTasks.check_search_results,\n                                             check_items={\"nq\": 1,\n                                                          \"ids\": insert_ids,\n                                                          \"limit\": min_dim})[0]\n            id_list.extend(search_res[0].ids)\n        # 4. hybrid search\n        hybrid_search = collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit)[0]\n        assert len(hybrid_search) == 1\n        assert len(hybrid_search[0].ids) == len(list(set(id_list)))\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_max_limit(self, primary_field, metric_type):\n        \"\"\"\n        target: test hybrid search with maximum limit params\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 66\n        multiple_dim_array = [dim + dim, dim - 10]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": [[random.random() for _ in range(multiple_dim_array[i])] for _ in range(nq)],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": metric_type},\n                \"limit\": 16384,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": nq,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_max_min_limit(self, primary_field, metric_type):\n        \"\"\"\n        target: test hybrid search with maximum and minimum limit params\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 66\n        multiple_dim_array = [dim + dim, dim - 10]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for i in range(len(vector_name_list)):\n            limit = max_limit\n            if i == 1:\n                limit = 1\n            search_param = {\n                \"data\": [[random.random() for _ in range(multiple_dim_array[i])] for _ in range(nq)],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": metric_type},\n                \"limit\": limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": nq,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_same_anns_field(self, primary_field, metric_type):\n        \"\"\"\n        target: test hybrid search: multiple search on same anns field\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 55\n        multiple_dim_array = [dim, dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": [[random.random() for _ in range(multiple_dim_array[i])] for _ in range(nq)],\n                \"anns_field\": vector_name_list[0],\n                \"param\": {\"metric_type\": metric_type, \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": nq,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_different_offset_single_field(self, primary_field, is_flush, metric_type):\n        \"\"\"\n        target: test hybrid search for fields with different offset\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 100\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, auto_id=False, dim=dim, is_flush=is_flush, is_index=False,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=[dim, dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": [[random.random() for _ in range(dim)] for _ in range(nq)],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": metric_type, \"offset\": i},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(0.1, 0.9, 1), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": nq,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_max_reqs_num(self, primary_field):\n        \"\"\"\n        target: test hybrid search with maximum reqs number\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 128\n        multiple_dim_array = [dim, dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=dim, is_index=False, primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"COSINE\"}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        reqs_max_num = max_hybrid_search_req_num\n        # 3. prepare search params\n        req_list = []\n        for i in range(reqs_max_num):\n            search_param = {\n                \"data\": [[random.random() for _ in range(dim)] for _ in range(1)],\n                \"anns_field\": default_search_field,\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        weights = [random.random() for _ in range(len(req_list))]\n        log.info(weights)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": 1,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_WeightedRanker_different_parameters(self, primary_field, is_flush, metric_type):\n        \"\"\"\n        target: test hybrid search for fields with different offset\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        dim = 63\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, auto_id=True, dim=dim, is_flush=is_flush, is_index=False,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=False, multiple_dim_array=[dim, dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": metric_type}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.load()\n        # 3. prepare search params\n        req_list = []\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": [[random.random() for _ in range(dim)] for _ in range(1)],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": metric_type, \"offset\": i},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(0.2, 0.03, 0.9), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": 1,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_hybrid_search_invalid_WeightedRanker_params(self):\n        \"\"\"\n        target: test hybrid search with invalid params type to WeightedRanker\n        method: create connection, collection, insert and search\n        expected: raise exception\n        \"\"\"\n        # 1. initialize collection with data\n        multiple_dim_array = [default_dim, default_dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=default_dim, is_index=False,\n                                         multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"COSINE\"}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        reqs_num = 2\n        # 3. prepare search params\n        req_list = []\n        for i in range(reqs_num):\n            search_param = {\n                \"data\": [[random.random() for _ in range(default_dim)] for _ in range(1)],\n                \"anns_field\": default_search_field,\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search with list in WeightedRanker\n        error = {\"err_code\": 1100, \"err_msg\": \"The type of rank param weight should be float: invalid parameter\"}\n        collection_w.hybrid_search(req_list, WeightedRanker([0.9, 0.1]), default_limit,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    # @pytest.mark.tags(CaseLabel.L2)\n    # def test_hybrid_search_over_maximum_reqs_num(self):\n    #     \"\"\"\n    #     target: test hybrid search over maximum reqs number\n    #     method: create connection, collection, insert and search\n    #     expected: raise exception\n    #     \"\"\"\n    #     # 1. initialize collection with data\n    #     multiple_dim_array = [default_dim, default_dim]\n    #     collection_w, _, _, insert_ids, time_stamp = \\\n    #         self.init_collection_general(prefix, True, dim=default_dim, is_index=False,\n    #                                      multiple_dim_array=multiple_dim_array)[0:5]\n    #     # 2. extract vector field name\n    #     vector_name_list = cf.extract_vector_field_name_list(collection_w)\n    #     flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"COSINE\"}\n    #     for vector_name in vector_name_list:\n    #         collection_w.create_index(vector_name, flat_index)\n    #     collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n    #     collection_w.load()\n    #     reqs_max_num = max_hybrid_search_req_num + 1\n    #     # 3. prepare search params\n    #     req_list = []\n    #     for i in range(reqs_max_num):\n    #         search_param = {\n    #             \"data\": [[random.random() for _ in range(default_dim)] for _ in range(1)],\n    #             \"anns_field\": default_search_field,\n    #             \"param\": {\"metric_type\": \"COSINE\"},\n    #             \"limit\": default_limit,\n    #             \"expr\": \"int64 > 0\"}\n    #         req = AnnSearchRequest(**search_param)\n    #         req_list.append(req)\n    #     weights = [random.random() for _ in range(len(req_list))]\n    #     log.info(weights)\n    #     # 4. hybrid search\n    #     collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,)\n    #                                # check_task=CheckTasks.err_res,\n    #                                # check_items={\"err_code\": 65535,\n    #                                #              \"err_msg\": 'maximum of ann search requests is 1024'})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_with_range_search(self, primary_field):\n        \"\"\"\n        target: test hybrid search with range search\n        method: create connection, collection, insert and search\n        expected: raise exception (not support yet)\n        \"\"\"\n        # 1. initialize collection with data\n        multiple_dim_array = [default_dim, default_dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=default_dim, is_index=False,\n                                         primary_field=primary_field,\n                                         multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        flat_index = {\"index_type\": \"FLAT\", \"params\": {}, \"metric_type\": \"COSINE\"}\n        for vector_name in vector_name_list:\n            collection_w.create_index(vector_name, flat_index)\n        collection_w.create_index(ct.default_float_vec_field_name, flat_index)\n        collection_w.load()\n        reqs_max_num = 2\n        # 3. prepare search params\n        req_list = []\n        for i in range(reqs_max_num):\n            search_param = {\n                \"data\": [[random.random() for _ in range(default_dim)] for _ in range(1)],\n                \"anns_field\": default_search_field,\n                \"param\": {\"metric_type\": \"COSINE\", \"params\": {\"radius\": 0, \"range_filter\": 1000}},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        weights = [random.random() for _ in range(len(req_list))]\n        log.info(weights)\n        # 4. hybrid search\n        collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": 1,\n                                                \"ids\": insert_ids,\n                                                \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_RRFRanker_default_parameter(self, primary_field):\n        \"\"\"\n        target: test hybrid search with default value to RRFRanker\n        method: create connection, collection, insert and search.\n                Note: here the result check is through comparing the score, the ids could not be compared\n                because the high probability of the same score, then the id is not fixed in the range of\n                the same score\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=default_dim, primary_field=primary_field,\n                                         multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params for each vector field\n        req_list = []\n        search_res_dict_array = []\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(default_dim)] for _ in range(1)]\n            search_res_dict = {}\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            # search for get the base line of hybrid_search\n            search_res = collection_w.search(vectors[:1], vector_name_list[i],\n                                             default_search_params, default_limit,\n                                             default_expr,\n                                             check_task=CheckTasks.check_search_results,\n                                             check_items={\"nq\": 1,\n                                                          \"ids\": insert_ids,\n                                                          \"limit\": default_limit})[0]\n            ids = search_res[0].ids\n            for j in range(len(ids)):\n                search_res_dict[ids[j]] = 1 / (j + 60 + 1)\n            search_res_dict_array.append(search_res_dict)\n        # 4. calculate hybrid search base line for RRFRanker\n        ids_answer, score_answer = cf.get_hybrid_search_base_results_rrf(search_res_dict_array)\n        # 5. hybrid search\n        hybrid_search_0 = collection_w.hybrid_search(req_list, RRFRanker(), default_limit,\n                                                     check_task=CheckTasks.check_search_results,\n                                                     check_items={\"nq\": 1,\n                                                                  \"ids\": insert_ids,\n                                                                  \"limit\": default_limit})[0]\n        # 6. compare results through the re-calculated distances\n        for i in range(len(score_answer[:default_limit])):\n            assert score_answer[i] - hybrid_search_0[0].distances[i] < hybrid_search_epsilon\n        # 7. run hybrid search with the same parameters twice, and compare the results\n        hybrid_search_1 = collection_w.hybrid_search(req_list, RRFRanker(), default_limit,\n                                                     check_task=CheckTasks.check_search_results,\n                                                     check_items={\"nq\": 1,\n                                                                  \"ids\": insert_ids,\n                                                                  \"limit\": default_limit})[0]\n\n        assert hybrid_search_0[0].ids == hybrid_search_1[0].ids\n        assert hybrid_search_0[0].distances == hybrid_search_1[0].distances\n\n    # @pytest.mark.tags(CaseLabel.L2)\n    # @pytest.mark.parametrize(\"k\", [1, 60, 1000, 16383])\n    # @pytest.mark.parametrize(\"offset\", [0, 1, 5])\n    # @pytest.mark.skip(\"https://github.com/milvus-io/milvus/issues/32650\")\n    # def test_hybrid_search_RRFRanker_different_k(self, is_flush, k, offset):\n    #     \"\"\"\n    #     target: test hybrid search normal case\n    #     method: create connection, collection, insert and search.\n    #             Note: here the result check is through comparing the score, the ids could not be compared\n    #             because the high probability of the same score, then the id is not fixed in the range of\n    #             the same score\n    #     expected: hybrid search successfully with limit(topK)\n    #     \"\"\"\n    #     # 1. initialize collection with data\n    #     dim = 200\n    #     collection_w, _, _, insert_ids, time_stamp = \\\n    #         self.init_collection_general(prefix, True, auto_id=False, dim=dim, is_flush=is_flush,\n    #                                      enable_dynamic_field=False, multiple_dim_array=[dim, dim])[0:5]\n    #     # 2. extract vector field name\n    #     vector_name_list = cf.extract_vector_field_name_list(collection_w)\n    #     vector_name_list.append(ct.default_float_vec_field_name)\n    #     # 3. prepare search params for each vector field\n    #     req_list = []\n    #     search_res_dict_array = []\n    #     for i in range(len(vector_name_list)):\n    #         vectors = [[random.random() for _ in range(dim)] for _ in range(1)]\n    #         search_res_dict = {}\n    #         search_param = {\n    #             \"data\": vectors,\n    #             \"anns_field\": vector_name_list[i],\n    #             \"param\": {\"metric_type\": \"COSINE\"},\n    #             \"limit\": default_limit,\n    #             \"expr\": \"int64 > 0\"}\n    #         req = AnnSearchRequest(**search_param)\n    #         req_list.append(req)\n    #         # search for get the baseline of hybrid_search\n    #         search_res = collection_w.search(vectors[:1], vector_name_list[i],\n    #                                          default_search_params, default_limit,\n    #                                          default_search_exp, offset=0,\n    #                                          check_task=CheckTasks.check_search_results,\n    #                                          check_items={\"nq\": 1,\n    #                                                       \"ids\": insert_ids,\n    #                                                       \"limit\": default_limit})[0]\n    #         ids = search_res[0].ids\n    #         for j in range(len(ids)):\n    #             search_res_dict[ids[j]] = 1 / (j + k + 1)\n    #         search_res_dict_array.append(search_res_dict)\n    #     # 4. calculate hybrid search baseline for RRFRanker\n    #     ids_answer, score_answer = cf.get_hybrid_search_base_results_rrf(search_res_dict_array)\n    #     # 5. hybrid search\n    #     hybrid_res = collection_w.hybrid_search(req_list, RRFRanker(k), default_limit,\n    #                                             offset=offset,\n    #                                             check_task=CheckTasks.check_search_results,\n    #                                             check_items={\"nq\": 1,\n    #                                                          \"ids\": insert_ids,\n    #                                                          \"limit\": default_limit})[0]\n    #     # 6. compare results through the re-calculated distances\n    #     for i in range(len(score_answer[:default_limit])):\n    #         assert score_answer[i] - hybrid_res[0].distances[i] < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"offset\", [0, 1, 5])\n    @pytest.mark.parametrize(\"rerank\", [RRFRanker(), WeightedRanker(0.1, 0.9, 1)])\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_offset_inside_outside_params(self, primary_field, offset, rerank):\n        \"\"\"\n        target: test hybrid search with offset inside and outside params\n        method: create connection, collection, insert and search.\n                Note: here the result check is through comparing the score, the ids could not be compared\n                because the high probability of the same score, then the id is not fixed in the range of\n                the same score\n        expected: hybrid search successfully with limit(topK), and the result should be the same\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, primary_field=primary_field,\n                                         multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        req_list = []\n        vectors_list = []\n        # 3. generate vectors\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(default_dim)] for _ in range(1)]\n            vectors_list.append(vectors)\n        # 4. prepare search params for each vector field\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors_list[i],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\", \"offset\": offset},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search with offset inside the params\n        hybrid_res_inside = collection_w.hybrid_search(req_list, rerank, default_limit,\n                                                       check_task=CheckTasks.check_search_results,\n                                                       check_items={\"nq\": 1,\n                                                                    \"ids\": insert_ids,\n                                                                    \"limit\": default_limit})[0]\n        # 5. hybrid search with offset parameter\n        req_list = []\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors_list[i],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        hybrid_res = collection_w.hybrid_search(req_list, rerank, default_limit - offset,\n                                                offset=offset,\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": 1,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": default_limit - offset})[0]\n\n        assert hybrid_res_inside[0].distances[offset:] == hybrid_res[0].distances\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_hybrid_search_RRFRanker_empty_reqs(self):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. hybrid search with empty reqs\n        collection_w.hybrid_search([], RRFRanker(), default_limit,\n                                   check_task=CheckTasks.check_search_results,\n                                   check_items={\"nq\": 0})\n\n    # @pytest.mark.tags(CaseLabel.L1)\n    # @pytest.mark.parametrize(\"k\", [0, 16385])\n    # @pytest.mark.skip(reason=\"issue #29867\")\n    # def test_hybrid_search_RRFRanker_k_out_of_range(self, k):\n    #     \"\"\"\n    #     target: test hybrid search with default value to RRFRanker\n    #     method: create connection, collection, insert and search.\n    #             Note: here the result check is through comparing the score, the ids could not be compared\n    #             because the high probability of the same score, then the id is not fixed in the range of\n    #             the same score\n    #     expected: hybrid search successfully with limit(topK)\n    #     \"\"\"\n    #     # 1. initialize collection with data\n    #     collection_w, _, _, insert_ids, time_stamp = \\\n    #         self.init_collection_general(prefix, True, dim=default_dim,\n    #                                      multiple_dim_array=[default_dim, default_dim])[0:5]\n    #     # 2. extract vector field name\n    #     vector_name_list = cf.extract_vector_field_name_list(collection_w)\n    #     vector_name_list.append(ct.default_float_vec_field_name)\n    #     # 3. prepare search params for each vector field\n    #     req_list = []\n    #     search_res_dict_array = []\n    #     for i in range(len(vector_name_list)):\n    #         vectors = [[random.random() for _ in range(default_dim)] for _ in range(1)]\n    #         search_res_dict = {}\n    #         search_param = {\n    #             \"data\": vectors,\n    #             \"anns_field\": vector_name_list[i],\n    #             \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n    #             \"limit\": default_limit,\n    #             \"expr\": \"int64 > 0\"}\n    #         req = AnnSearchRequest(**search_param)\n    #         req_list.append(req)\n    #         # search for get the base line of hybrid_search\n    #         search_res = collection_w.search(vectors[:1], vector_name_list[i],\n    #                                          default_search_params, default_limit,\n    #                                          default_search_exp,\n    #                                          check_task=CheckTasks.check_search_results,\n    #                                          check_items={\"nq\": 1,\n    #                                                       \"ids\": insert_ids,\n    #                                                       \"limit\": default_limit})[0]\n    #         ids = search_res[0].ids\n    #         for j in range(len(ids)):\n    #             search_res_dict[ids[j]] = 1 / (j + k + 1)\n    #         search_res_dict_array.append(search_res_dict)\n    #     # 4. calculate hybrid search base line for RRFRanker\n    #     ids_answer, score_answer = cf.get_hybrid_search_base_results_rrf(search_res_dict_array)\n    #     # 5. hybrid search\n    #     hybrid_res = collection_w.hybrid_search(req_list, RRFRanker(k), default_limit,\n    #                                             check_task=CheckTasks.check_search_results,\n    #                                             check_items={\"nq\": 1,\n    #                                                          \"ids\": insert_ids,\n    #                                                          \"limit\": default_limit})[0]\n    #     # 6. compare results through the re-calculated distances\n    #     for i in range(len(score_answer[:default_limit])):\n    #         delta = math.fabs(score_answer[i] - hybrid_res[0].distances[i])\n    #         assert delta < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"limit\", [1, 100, 16384])\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_different_limit_round_decimal(self, primary_field, limit):\n        \"\"\"\n        target: test hybrid search with different valid limit and round decimal\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, primary_field=primary_field,\n                                         multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        search_res_dict_array = []\n        if limit > default_nb:\n            limit = default_limit\n        metrics = []\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(default_dim)] for _ in range(1)]\n            search_res_dict = {}\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n                \"limit\": limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            metrics.append(\"COSINE\")\n            # search to get the base line of hybrid_search\n            search_res = collection_w.search(vectors[:1], vector_name_list[i],\n                                             default_search_params, limit,\n                                             default_expr,\n                                             check_task=CheckTasks.check_search_results,\n                                             check_items={\"nq\": 1,\n                                                          \"ids\": insert_ids,\n                                                          \"limit\": limit})[0]\n            ids = search_res[0].ids\n            distance_array = search_res[0].distances\n            for j in range(len(ids)):\n                search_res_dict[ids[j]] = distance_array[j]\n            search_res_dict_array.append(search_res_dict)\n        # 4. calculate hybrid search base line\n        ids_answer, score_answer = cf.get_hybrid_search_base_results(search_res_dict_array, weights, metrics)\n        # 5. hybrid search\n        hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), limit,\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": 1,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": limit})[0]\n        # 6. compare results through the re-calculated distances\n        for i in range(len(score_answer[:limit])):\n            delta = math.fabs(score_answer[i] - hybrid_res[0].distances[i])\n            assert delta < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_hybrid_search_limit_out_of_range_max(self):\n        \"\"\"\n        target: test hybrid search with over maximum limit\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(default_dim)] for _ in range(1)]\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search with over maximum limit\n        limit = 16385\n        error = {ct.err_code: 1100, ct.err_msg: \"invalid max query result window, (offset+limit) \"\n                                                 \"should be in range [1, 16384], but got %d\" % limit}\n        collection_w.hybrid_search(req_list, WeightedRanker(*weights), limit,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_hybrid_search_limit_out_of_range_min(self):\n        \"\"\"\n        target: test hybrid search with over minimum limit\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(default_dim)] for _ in range(1)]\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search with over maximum limit\n        limit = 0\n        error = {ct.err_code: 1, ct.err_msg: \"`limit` value 0 is illegal\"}\n        collection_w.hybrid_search(req_list, WeightedRanker(*weights), limit,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_with_output_fields(self, nq, dim, auto_id, is_flush, enable_dynamic_field,\n                                              primary_field, vector_data_type):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        nq = 10\n        multiple_dim_array = [dim, dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, auto_id=auto_id, dim=dim, is_flush=is_flush,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=enable_dynamic_field,\n                                         multiple_dim_array=multiple_dim_array,\n                                         vector_data_type=vector_data_type)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        metrics = []\n        search_res_dict_array = []\n        search_res_dict_array_nq = []\n        vectors = cf.gen_vectors_based_on_vector_type(nq, dim, vector_data_type)\n\n        # get hybrid search req list\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            metrics.append(\"COSINE\")\n\n        # get the result of search with the same params of the following hybrid search\n        single_search_param = {\"metric_type\": \"COSINE\", \"params\": {\"nprobe\": 10}}\n        for k in range(nq):\n            for i in range(len(vector_name_list)):\n                search_res_dict = {}\n                search_res_dict_array = []\n                vectors_search = vectors[k]\n                # 5. search to get the base line of hybrid_search\n                search_res = collection_w.search([vectors_search], vector_name_list[i],\n                                                 single_search_param, default_limit,\n                                                 default_expr,\n                                                 check_task=CheckTasks.check_search_results,\n                                                 check_items={\"nq\": 1,\n                                                              \"ids\": insert_ids,\n                                                              \"limit\": default_limit})[0]\n                ids = search_res[0].ids\n                distance_array = search_res[0].distances\n                for j in range(len(ids)):\n                    search_res_dict[ids[j]] = distance_array[j]\n                search_res_dict_array.append(search_res_dict)\n            search_res_dict_array_nq.append(search_res_dict_array)\n\n        # 6. calculate hybrid search base line\n        score_answer_nq = []\n        for k in range(nq):\n            ids_answer, score_answer = cf.get_hybrid_search_base_results(search_res_dict_array_nq[k], weights, metrics)\n            score_answer_nq.append(score_answer)\n        # 7. hybrid search\n        output_fields = [ct.default_int64_field_name]\n        hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                                output_fields=output_fields,\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": nq,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": default_limit})[0]\n        # 8. compare results through the re-calculated distances\n        for k in range(len(score_answer_nq)):\n            for i in range(len(score_answer_nq[k][:default_limit])):\n                assert score_answer_nq[k][i] - hybrid_res[k].distances[i] < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_with_output_fields_all_fields(self, nq, dim, auto_id, is_flush, enable_dynamic_field,\n                                                         primary_field, vector_data_type):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        nq = 10\n        multiple_dim_array = [dim, dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, auto_id=auto_id, dim=dim, is_flush=is_flush,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=enable_dynamic_field,\n                                         multiple_dim_array=multiple_dim_array,\n                                         vector_data_type=vector_data_type)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        metrics = []\n        search_res_dict_array = []\n        search_res_dict_array_nq = []\n        vectors = cf.gen_vectors_based_on_vector_type(nq, dim, vector_data_type)\n\n        # get hybrid search req list\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            metrics.append(\"COSINE\")\n\n        # get the result of search with the same params of the following hybrid search\n        single_search_param = {\"metric_type\": \"COSINE\", \"params\": {\"nprobe\": 10}}\n        for k in range(nq):\n            for i in range(len(vector_name_list)):\n                search_res_dict = {}\n                search_res_dict_array = []\n                vectors_search = vectors[k]\n                # 5. search to get the base line of hybrid_search\n                search_res = collection_w.search([vectors_search], vector_name_list[i],\n                                                 single_search_param, default_limit,\n                                                 default_search_exp,\n                                                 check_task=CheckTasks.check_search_results,\n                                                 check_items={\"nq\": 1,\n                                                              \"ids\": insert_ids,\n                                                              \"limit\": default_limit})[0]\n                ids = search_res[0].ids\n                distance_array = search_res[0].distances\n                for j in range(len(ids)):\n                    search_res_dict[ids[j]] = distance_array[j]\n                search_res_dict_array.append(search_res_dict)\n            search_res_dict_array_nq.append(search_res_dict_array)\n\n        # 6. calculate hybrid search base line\n        score_answer_nq = []\n        for k in range(nq):\n            ids_answer, score_answer = cf.get_hybrid_search_base_results(search_res_dict_array_nq[k], weights, metrics)\n            score_answer_nq.append(score_answer)\n        # 7. hybrid search\n        output_fields = [default_int64_field_name, default_float_field_name, default_string_field_name,\n                         default_json_field_name]\n        output_fields = output_fields + vector_name_list\n        hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                                output_fields=output_fields,\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": nq,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": default_limit})[0]\n        # 8. compare results through the re-calculated distances\n        for k in range(len(score_answer_nq)):\n            for i in range(len(score_answer_nq[k][:default_limit])):\n                assert score_answer_nq[k][i] - hybrid_res[k].distances[i] < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_with_output_fields_all_fields(self, nq, dim, auto_id, is_flush, enable_dynamic_field,\n                                                         primary_field, vector_data_type):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        nq = 10\n        multiple_dim_array = [dim, dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, auto_id=auto_id, dim=dim, is_flush=is_flush,\n                                         primary_field=primary_field,\n                                         enable_dynamic_field=enable_dynamic_field,\n                                         multiple_dim_array=multiple_dim_array,\n                                         vector_data_type=vector_data_type)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        metrics = []\n        search_res_dict_array = []\n        search_res_dict_array_nq = []\n        vectors = cf.gen_vectors_based_on_vector_type(nq, dim, vector_data_type)\n\n        # get hybrid search req list\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            metrics.append(\"COSINE\")\n\n        # get the result of search with the same params of the following hybrid search\n        single_search_param = {\"metric_type\": \"COSINE\", \"params\": {\"nprobe\": 10}}\n        for k in range(nq):\n            for i in range(len(vector_name_list)):\n                search_res_dict = {}\n                search_res_dict_array = []\n                vectors_search = vectors[k]\n                # 5. search to get the base line of hybrid_search\n                search_res = collection_w.search([vectors_search], vector_name_list[i],\n                                                 single_search_param, default_limit,\n                                                 default_search_exp,\n                                                 check_task=CheckTasks.check_search_results,\n                                                 check_items={\"nq\": 1,\n                                                              \"ids\": insert_ids,\n                                                              \"limit\": default_limit})[0]\n                ids = search_res[0].ids\n                distance_array = search_res[0].distances\n                for j in range(len(ids)):\n                    search_res_dict[ids[j]] = distance_array[j]\n                search_res_dict_array.append(search_res_dict)\n            search_res_dict_array_nq.append(search_res_dict_array)\n\n        # 6. calculate hybrid search base line\n        score_answer_nq = []\n        for k in range(nq):\n            ids_answer, score_answer = cf.get_hybrid_search_base_results(search_res_dict_array_nq[k], weights, metrics)\n            score_answer_nq.append(score_answer)\n        # 7. hybrid search\n        hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                                output_fields=[\"*\"],\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": nq,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": default_limit})[0]\n        # 8. compare results through the re-calculated distances\n        for k in range(len(score_answer_nq)):\n            for i in range(len(score_answer_nq[k][:default_limit])):\n                assert score_answer_nq[k][i] - hybrid_res[k].distances[i] < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"output_fields\",\n                             [[default_search_field], [default_search_field, default_int64_field_name]])\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_hybrid_search_with_output_fields_sync_async(self, nq, primary_field, output_fields, _async):\n        \"\"\"\n        target: test hybrid search normal case\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        # 1. initialize collection with data\n        multiple_dim_array = [default_dim, default_dim]\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, dim=default_dim,\n                                         primary_field=primary_field,\n                                         multiple_dim_array=multiple_dim_array)[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        metrics = []\n        search_res_dict_array = []\n        search_res_dict_array_nq = []\n        vectors = cf.gen_vectors_based_on_vector_type(nq, default_dim, \"FLOAT_VECTOR\")\n\n        # get hybrid search req list\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\"},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            metrics.append(\"COSINE\")\n\n        # get the result of search with the same params of the following hybrid search\n        single_search_param = {\"metric_type\": \"COSINE\", \"params\": {\"nprobe\": 10}}\n        for k in range(nq):\n            for i in range(len(vector_name_list)):\n                search_res_dict = {}\n                search_res_dict_array = []\n                vectors_search = vectors[k]\n                # 5. search to get the base line of hybrid_search\n                search_res = collection_w.search([vectors_search], vector_name_list[i],\n                                                 single_search_param, default_limit,\n                                                 default_expr, _async=_async,\n                                                 check_task=CheckTasks.check_search_results,\n                                                 check_items={\"nq\": 1,\n                                                              \"ids\": insert_ids,\n                                                              \"limit\": default_limit,\n                                                              \"_async\": _async})[0]\n                if _async:\n                    search_res.done()\n                    search_res = search_res.result()\n                ids = search_res[0].ids\n                distance_array = search_res[0].distances\n                for j in range(len(ids)):\n                    search_res_dict[ids[j]] = distance_array[j]\n                search_res_dict_array.append(search_res_dict)\n            search_res_dict_array_nq.append(search_res_dict_array)\n\n        # 6. calculate hybrid search base line\n        score_answer_nq = []\n        for k in range(nq):\n            ids_answer, score_answer = cf.get_hybrid_search_base_results(search_res_dict_array_nq[k], weights, metrics)\n            score_answer_nq.append(score_answer)\n        # 7. hybrid search\n        hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n                                                output_fields=output_fields, _async=_async,\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": nq,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": default_limit,\n                                                             \"_async\": _async})[0]\n        if _async:\n            hybrid_res.done()\n            hybrid_res = hybrid_res.result()\n        # 8. compare results through the re-calculated distances\n        for k in range(len(score_answer_nq)):\n            for i in range(len(score_answer_nq[k][:default_limit])):\n                assert score_answer_nq[k][i] - hybrid_res[k].distances[i] < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"rerank\", [RRFRanker(), WeightedRanker(0.1, 0.9, 1)])\n    def test_hybrid_search_offset_both_inside_outside_params(self, rerank):\n        \"\"\"\n        target: test hybrid search with offset inside and outside params\n        method: create connection, collection, insert and search.\n                Note: here the result check is through comparing the score, the ids could not be compared\n                because the high probability of the same score, then the id is not fixed in the range of\n                the same score\n        expected: Raise exception\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        req_list = []\n        vectors_list = []\n        # 3. generate vectors\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(default_dim)] for _ in range(1)]\n            vectors_list.append(vectors)\n        # 4. prepare search params for each vector field\n        for i in range(len(vector_name_list)):\n            search_param = {\n                \"data\": vectors_list[i],\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search with offset inside the params\n        error = {ct.err_code: 1, ct.err_msg: \"Provide offset both in kwargs and param, expect just one\"}\n        collection_w.hybrid_search(req_list, rerank, default_limit, offset=2,\n                                   check_task=CheckTasks.err_res, check_items=error)\n\n    # @pytest.mark.tags(CaseLabel.L2)\n    # @pytest.mark.parametrize(\"limit\", [1, 100, 16384])\n    # @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    # def test_hybrid_search_is_partition_key(self, nq, primary_field, limit, vector_data_type):\n    #     \"\"\"\n    #     target: test hybrid search with different valid limit and round decimal\n    #     method: create connection, collection, insert and search\n    #     expected: hybrid search successfully with limit(topK)\n    #     \"\"\"\n    #     # 1. initialize collection with data\n    #     collection_w, _, _, insert_ids, time_stamp = \\\n    #         self.init_collection_general(prefix, True, primary_field=primary_field,\n    #                                      multiple_dim_array=[default_dim, default_dim],\n    #                                      vector_data_type=vector_data_type,\n    #                                      is_partition_key=ct.default_float_field_name)[0:5]\n    #     # 2. extract vector field name\n    #     vector_name_list = cf.extract_vector_field_name_list(collection_w)\n    #     vector_name_list.append(ct.default_float_vec_field_name)\n    #     # 3. prepare search params\n    #     req_list = []\n    #     weights = [0.2, 0.3, 0.5]\n    #     metrics = []\n    #     search_res_dict_array = []\n    #     search_res_dict_array_nq = []\n    #     vectors = cf.gen_vectors_based_on_vector_type(nq, default_dim, vector_data_type)\n    #\n    #     # get hybrid search req list\n    #     for i in range(len(vector_name_list)):\n    #         search_param = {\n    #             \"data\": vectors,\n    #             \"anns_field\": vector_name_list[i],\n    #             \"param\": {\"metric_type\": \"COSINE\"},\n    #             \"limit\": default_limit,\n    #             \"expr\": \"int64 > 0\"}\n    #         req = AnnSearchRequest(**search_param)\n    #         req_list.append(req)\n    #         metrics.append(\"COSINE\")\n    #\n    #     # get the result of search with the same params of the following hybrid search\n    #     single_search_param = {\"metric_type\": \"COSINE\", \"params\": {\"nprobe\": 10}}\n    #     for k in range(nq):\n    #         for i in range(len(vector_name_list)):\n    #             search_res_dict = {}\n    #             search_res_dict_array = []\n    #             vectors_search = vectors[k]\n    #             # 5. search to get the base line of hybrid_search\n    #             search_res = collection_w.search([vectors_search], vector_name_list[i],\n    #                                              single_search_param, default_limit,\n    #                                              default_search_exp,\n    #                                              check_task=CheckTasks.check_search_results,\n    #                                              check_items={\"nq\": 1,\n    #                                                           \"ids\": insert_ids,\n    #                                                           \"limit\": default_limit})[0]\n    #             ids = search_res[0].ids\n    #             distance_array = search_res[0].distances\n    #             for j in range(len(ids)):\n    #                 search_res_dict[ids[j]] = distance_array[j]\n    #             search_res_dict_array.append(search_res_dict)\n    #         search_res_dict_array_nq.append(search_res_dict_array)\n    #\n    #     # 6. calculate hybrid search base line\n    #     score_answer_nq = []\n    #     for k in range(nq):\n    #         ids_answer, score_answer = cf.get_hybrid_search_base_results(search_res_dict_array_nq[k], weights, metrics)\n    #         score_answer_nq.append(score_answer)\n    #     # 7. hybrid search\n    #     hybrid_res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), default_limit,\n    #                                             check_task=CheckTasks.check_search_results,\n    #                                             check_items={\"nq\": nq,\n    #                                                          \"ids\": insert_ids,\n    #                                                          \"limit\": default_limit})[0]\n    #     # 8. compare results through the re-calculated distances\n    #     for k in range(len(score_answer_nq)):\n    #         for i in range(len(score_answer_nq[k][:default_limit])):\n    #             assert score_answer_nq[k][i] - hybrid_res[k].distances[i] < hybrid_search_epsilon\n\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_hybrid_search_result_order(self, nq):\n        \"\"\"\n        target: test hybrid search result having correct order for cosine distance\n        method: create connection, collection, insert and search\n        expected: hybrid search successfully and result order is correct\n        \"\"\"\n        # 1. initialize collection with data\n        collection_w, _, _, insert_ids, time_stamp = \\\n            self.init_collection_general(prefix, True, multiple_dim_array=[default_dim, default_dim])[0:5]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        vector_name_list.append(ct.default_float_vec_field_name)\n        # 3. prepare search params\n        req_list = []\n        weights = [0.2, 0.3, 0.5]\n        for i in range(len(vector_name_list)):\n            vectors = [[random.random() for _ in range(default_dim)] for _ in range(nq)]\n            search_param = {\n                \"data\": vectors,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"COSINE\", \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n        # 4. hybrid search\n        res = collection_w.hybrid_search(req_list, WeightedRanker(*weights), 10)[0]\n        is_sorted_descend = lambda lst: all(lst[i] >= lst[i + 1] for i in range(len(lst) - 1))\n        for i in range(nq):\n            assert is_sorted_descend(res[i].distances)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_hybrid_search_sparse_normal(self):\n        \"\"\"\n        target: test hybrid search after loading sparse vectors\n        method: Test hybrid search after loading sparse vectors\n        expected: hybrid search successfully with limit(topK)\n        \"\"\"\n        nb, auto_id, dim, enable_dynamic_field = 20000, False, 768, False\n        # 1. init collection\n        collection_w, insert_vectors, _, insert_ids = self.init_collection_general(prefix, True, nb=nb,\n                                                                                   multiple_dim_array=[dim, dim * 2],\n                                                                                   with_json=False,\n                                                                                   vector_data_type=\"SPARSE_FLOAT_VECTOR\")[\n                                                      0:4]\n        # 2. extract vector field name\n        vector_name_list = cf.extract_vector_field_name_list(collection_w)\n        # 3. prepare search params\n        req_list = []\n        search_res_dict_array = []\n        k = 60\n        search_params = {'params': {'nprobe': 32}}\n        for i in range(len(vector_name_list)):\n            # vector = cf.gen_sparse_vectors(1, dim)\n            vector = insert_vectors[0][i + 3][-1:]\n            search_res_dict = {}\n            search_param = {\n                \"data\": vector,\n                \"anns_field\": vector_name_list[i],\n                \"param\": {\"metric_type\": \"IP\", \"offset\": 0},\n                \"limit\": default_limit,\n                \"expr\": \"int64 > 0\"}\n            req = AnnSearchRequest(**search_param)\n            req_list.append(req)\n            # search for get the base line of hybrid_search\n            search_res = collection_w.search(vector, vector_name_list[i],\n                                             search_params, default_limit,\n                                             default_expr,\n                                             )[0]\n            ids = search_res[0].ids\n            for j in range(len(ids)):\n                search_res_dict[ids[j]] = 1 / (j + k + 1)\n            search_res_dict_array.append(search_res_dict)\n        # 4. calculate hybrid search base line for RRFRanker\n        ids_answer, score_answer = cf.get_hybrid_search_base_results_rrf(search_res_dict_array)\n        # 5. hybrid search\n        hybrid_res = collection_w.hybrid_search(req_list, RRFRanker(k), default_limit,\n                                                check_task=CheckTasks.check_search_results,\n                                                check_items={\"nq\": 1,\n                                                             \"ids\": insert_ids,\n                                                             \"limit\": default_limit})[0]\n        # 6. compare results through the re-calculated distances\n        for i in range(len(score_answer[:default_limit])):\n            delta = math.fabs(score_answer[i] - hybrid_res[0].distances[i])\n            assert delta < hybrid_search_epsilon\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_milvus_lite_delete_search(self, enable_milvus_local_api):\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        # 2. insert\n        default_nb = 1000\n        rng = np.random.default_rng(seed=19530)\n        rows = [{default_primary_key_field_name: i,\n                 default_vector_field_name: list(rng.random((1, default_dim))[0]),\n                 default_float_field_name: i * 1.0,\n                 default_string_field_name: str(i)}\n                for i in range(default_nb)]\n        pks = client_w.insert(client, collection_name, rows)[0]\n        # 3. delete\n        delete_num = 3\n        client_w.delete(client, collection_name, filter=f\"id < {delete_num}\")\n        # 4. search\n        vectors_to_search = rng.random((1, default_dim))\n        insert_ids = [i for i in range(default_nb)]\n        for insert_id in range(delete_num):\n            if insert_id in insert_ids:\n                insert_ids.remove(insert_id)\n        limit = default_nb - delete_num\n        client_w.search(client, collection_name, vectors_to_search, limit=default_nb,\n                        check_task=CheckTasks.check_search_results,\n                        check_items={\"enable_milvus_client_api\": True,\n                                     \"nq\": len(vectors_to_search),\n                                     \"ids\": insert_ids,\n                                     \"limit\": limit})\n        # 5. query\n        client_w.query(client, collection_name, filter=default_search_exp,\n                       check_task=CheckTasks.check_query_results,\n                       check_items={exp_res: rows[delete_num:],\n                                    \"with_vec\": True,\n                                    \"primary_field\": default_primary_key_field_name})\n        client_w.drop_collection(client, collection_name)"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_sparse.py",
    "content": "import time\n\nimport pytest\n\nfrom base.client_base import TestcaseBase\nfrom common.common_type import CaseLabel, CheckTasks\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\n\nclient_w = HighLevelApiWrapper()\nprefix = \"milvus_local_api_collection\"\ndefault_dim = ct.default_dim\ndefault_primary_key_field_name = \"id\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_vector_field_name = \"vector\"\ndefault_limit = ct.default_limit\ndefault_nb = ct.default_nb\ndefault_search_exp = \"id >= 0\"\nexp_res = \"exp_res\"\ndefault_nq = ct.default_nq\ndefault_string_field_name = ct.default_string_field_name\n\n\nclass TestMilvusLocalSparse(TestcaseBase):\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"index, index_params\", zip(ct.all_index_types[9:11], ct.default_index_params[9:11]))\n    def test_milvus_local_sparse_search(self, index, index_params,  enable_milvus_local_api):\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        collection_name = cf.gen_unique_str(prefix)\n        # 1. create collection\n        client_w.create_collection(client, collection_name, default_dim)\n        params = {\"index_type\": index, \"metric_type\": \"IP\", \"params\": index_params}\n        client_w.create_index(ct.default_sparse_vec_field_name, params, index_name=index)\n        data = cf.gen_default_list_sparse_data()\n        client_w.load()\n        client_w.search(data[-1][-1:], ct.default_sparse_vec_field_name,\n                            ct.default_sparse_search_params, default_limit,\n                            check_task=CheckTasks.check_search_results,\n                            check_items={\"nq\": default_nq,\n                                         \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"index, index_params\", zip(ct.all_index_types[9:11], ct.default_index_params[9:11]))\n    @pytest.mark.parametrize(\"dim\", [ct.min_sparse_vector_dim, 32768, ct.max_sparse_vector_dim])\n    def test_milvus_lcoal_sparse_index_dim(self, index, index_params, dim, enable_milvus_local_api):\n        \"\"\"\n        target: validating the sparse index in different dimensions\n        method: create connection, collection, insert and hybrid search\n        expected: search successfully\n        \"\"\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_default_sparse_schema(auto_id=False)\n        client_w.create_collection(client, c_name, schema=schema, sparse=True)\n        data = cf.gen_default_list_sparse_data(dim=dim)\n        client_w.insert(data)\n        params = {\"index_type\": index, \"metric_type\": \"IP\", \"params\": index_params}\n        client_w.create_index(ct.default_sparse_vec_field_name, params, index_name=index)\n\n        client_w.load()\n        client_w.search(data[-1][-1:], ct.default_sparse_vec_field_name,\n                            ct.default_sparse_search_params, default_limit,\n                            check_task=CheckTasks.check_search_results,\n                            check_items={\"nq\": default_nq,\n                                         \"limit\": default_limit})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"index, index_params\", zip(ct.all_index_types[9:11], ct.default_index_params[9:11]))\n    @pytest.mark.parametrize(\"dim\", [ct.min_sparse_vector_dim - 1, 0.5, ct.max_sparse_vector_dim + 2])\n    def test_sparse_index_invalid_dim(self, index, index_params, dim, enable_milvus_local_api):\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=enable_milvus_local_api)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_default_sparse_schema(auto_id=False)\n        client_w.create_collection(client, c_name, schema=schema, sparse=True)\n        data = cf.gen_default_list_sparse_data(dim=dim)\n        client_w.insert(data)\n        params = {\"index_type\": index, \"metric_type\": \"IP\", \"params\": index_params}\n        client_w.create_index(ct.default_sparse_vec_field_name, params, index_name=index)\n        client_w.load()\n        client_w.search(data[-1][-1:], ct.default_sparse_vec_field_name,\n                            ct.default_sparse_search_params, default_limit,\n                            check_task=CheckTasks.check_search_results,\n                            check_items={\"nq\": default_nq,\n                                         \"limit\": default_limit})"
  },
  {
    "path": "tests/milvus_lite/test_milvus_lite_stability.py",
    "content": "import logging\nimport random\nimport string\nimport time\nimport numpy as np\nimport pytest\n\nfrom base.client_base import TestcaseBase\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.thread_util import ConcurrencyObj\nfrom common.constants import *\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\nclient_w = HighLevelApiWrapper()\nprefix = \"milvus_local_stability\"\ndefault_dim = ct.default_dim\ndefault_primary_key_field_name = \"id\"\ndefault_nb = ct.default_nb\ndefault_search_exp = \"id in ['1','9','90', '900', '9000']\"\n# default_search_exp = \"varchar < 500.0\"\ndefault_float_field_name = ct.default_float_field_name\ndefault_vector_field_name = \"vector\"\ndefault_string_field_name = ct.default_string_field_name\ndefault_limit = ct.default_limit\nexp_res = \"exp_res\"\n\n\nclass TestMilvusLocalStability(TestcaseBase):\n\n    @pytest.mark.tags(CaseLabel.L3)\n    def test_milvus_local_stability(self):\n        timeout = 3600\n        s_name = ''.join(random.sample(string.ascii_letters + string.digits, 4))\n        file_name = \"./milvus_lite_stab\" + s_name + \".db\"\n        file = cf.gen_unique_str(file_name)\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=file)\n        c_name = cf.gen_unique_str(prefix)\n        nb, dim = 500000, 768\n        client_w.create_collection(client, c_name, dim)\n        collections = client_w.list_collections(client)[0]\n        assert c_name in collections\n        client_w.describe_collection(client, c_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": c_name,\n                                                  \"dim\": dim})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows, row = [], []\n        count, num_c = 0, 0\n        for i in range(nb):\n            r = {default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, dim))[0]),\n                        default_float_field_name: i * 1.0,\n                        default_string_field_name: str(i)}\n            row = [r]\n            count += 1\n            if count == 1000:\n                num_c += 1\n                client_w.insert(client, c_name, row)\n                count = 0\n                row.clear()\n            rows.append(r)\n        sta = time.time()\n        client_w.load_collection(client, c_name)\n        end = time.time()\n\n        def scene_search_query():\n            vectors_to_search = rng.random((1, dim))\n            client_w.search(client, c_name, vectors_to_search,\n                            check_task=CheckTasks.check_search_results,\n                            check_items={\"enable_milvus_client_api\": True,\n                                         \"nq\": len(vectors_to_search),\n                                         \"limit\": default_limit})\n            #\n            # client_w.query(client, c_name, filter=default_search_exp,\n            #                check_task=CheckTasks.check_query_results,\n            #                check_items={exp_res: rows,\n            #                             \"with_vec\": True,\n            #                             \"primary_field\": default_primary_key_field_name})\n            logging.info(f\"scene_search_query for collection={c_name}\")\n\n        current = ConcurrencyObj(func_obj=scene_search_query, interval=1)\n        current.multi_func(num=20)\n        time.sleep(timeout)\n        current.set_stop_flag()\n\n    @pytest.mark.tags(CaseLabel.L3)\n    def test_milvus_local_hnsw_serial_performance(self):\n        s_name = ''.join(random.sample(string.ascii_letters + string.digits, 4))\n        file_name = \"./milvus_lite_stab\" + s_name + \".db\"\n        client = self._connect(enable_milvus_client_api=True, enable_milvus_local_api=file_name)\n        c_name = cf.gen_unique_str(prefix)\n        nb, dim = 500000, 768\n        client_w.create_collection(client, c_name, dim)\n        collections = client_w.list_collections(client)[0]\n        assert c_name in collections\n        client_w.describe_collection(client, c_name,\n                                     check_task=CheckTasks.check_describe_collection_property,\n                                     check_items={\"collection_name\": c_name,\n                                                  \"dim\": dim})\n        # 2. insert\n        rng = np.random.default_rng(seed=19530)\n        rows, row = [], []\n        count, num_c = 0, 0\n        insert_start = time.time()\n        for i in range(nb):\n            r = {default_primary_key_field_name: i, default_vector_field_name: list(rng.random((1, dim))[0]),\n                        default_float_field_name: i * 1.0,\n                        default_string_field_name: str(i)}\n            row = [r]\n            count += 1\n            if count == 10000:\n                num_c += 1\n                client_w.insert(client, c_name, row)\n                count = 0\n                row.clear()\n            rows.append(r)\n        insert_time = round(time.time() - insert_start, 2)\n        logging.info(f\"insert done. insert time: {insert_time}\")\n        client_w.release_collection(client, c_name)\n        client_w.load_collection(client, c_name)\n        response_time = []\n        for i in range(500):\n            vectors_to_search = rng.random((1, dim))\n            # insert_ids = [i for i in range(nb)]\n            start = time.time()\n            client_w.search(client, c_name, vectors_to_search)\n            rt = time.time() - start\n            response_time.append(rt * 1000)\n            logging.info(f\"search response time : {rt} s\")\n        logging.info(\"------- end ------ \")\n        logging.info(f\"avg response time : {sum(response_time)/len(response_time)}\")\n"
  },
  {
    "path": "tests/pytest.ini",
    "content": "[pytest]\n\n\naddopts = --host localhost --html=/tmp/ci_logs/report.html --self-contained-html -v\n#  python3 -W ignore -m pytest\n\nlog_format = [%(asctime)s - %(levelname)s - %(name)s]: %(message)s (%(filename)s:%(lineno)s)\nlog_date_format = %Y-%m-%d %H:%M:%S\n\n\nfilterwarnings =\n    ignore::DeprecationWarning"
  },
  {
    "path": "tests/requirements.txt",
    "content": "--extra-index-url https://test.pypi.org/simple/\npytest-cov==2.8.1\nrequests==2.26.0\nscikit-learn==1.1.3\ntimeout_decorator==0.5.0\nujson==5.5.0\npytest==7.2.0\npytest-assume==2.4.3\npytest-timeout==1.3.3\npytest-repeat==0.8.0\nallure-pytest==2.7.0\npytest-print==0.2.1\npytest-level==0.1.1\npytest-xdist==2.5.0\npymilvus==2.4.4\npytest-rerunfailures==9.1.1\ngit+https://github.com/Projectplace/pytest-tags\nndg-httpsclient\npyopenssl\npyasn1\npytest-html==3.1.1\ndelayed-assert==0.3.5\nkubernetes==17.17.0\nPyYAML==6.0\npytest-sugar==0.9.5\npytest-parallel\npytest-random-order\n\n# for customize config test\npython-benedict==0.24.3\ntimeout-decorator==0.5.0\n\n# for bulk insert test\nminio==7.1.5\nnpy-append-array==0.9.15\nFaker==19.2.0\n\n# for benchmark\nh5py==3.8.0\n\n# for log\nloguru==0.7.0\n\n# util\npsutil==5.9.4\npandas==1.5.3\ntenacity==8.1.0\n# for standby test\netcd-sdk-python==0.0.4\ndeepdiff==6.7.1\n\n# for test result anaylszer\nprettytable==3.8.0\npyarrow==14.0.1\nfastparquet==2023.7.0\n\n# for bf16 datatype\njax==0.4.13\njaxlib==0.4.13\ntensorflow==2.13.1\n\n"
  },
  {
    "path": "tests/run.sh",
    "content": "#/bin/bash\n\n\npytest . $@"
  },
  {
    "path": "tests/test_bm25.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport unittest\nfrom pymilvus import MilvusClient, DataType, Function, FunctionType, AnnSearchRequest, RRFRanker\n\n\nclass TestBM25(unittest.TestCase):\n    def test_single_function(self):\n        collection_name = \"hello_milvus\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)        \n        if has_collection:\n            milvus_client.drop_collection(collection_name)\n        schema = milvus_client.create_schema()\n        schema.add_field(\"id\", DataType.INT64, is_primary=True, auto_id=False)\n        schema.add_field(\n            \"document_content\", DataType.VARCHAR, max_length=9000, enable_analyzer=True\n        )\n        schema.add_field(\"sparse_vector\", DataType.SPARSE_FLOAT_VECTOR)\n        \n        bm25_function = Function(\n            name=\"bm25_fn\",\n            input_field_names=[\"document_content\"],\n            output_field_names=\"sparse_vector\",\n            function_type=FunctionType.BM25,\n        )\n        schema.add_function(bm25_function)\n\n        index_params = milvus_client.prepare_index_params()\n        index_params.add_index(\n            field_name=\"sparse_vector\",\n            index_name=\"sparse_inverted_index\",\n            index_type=\"SPARSE_INVERTED_INDEX\",\n            metric_type=\"BM25\",\n            params={\"bm25_k1\": 1.2, \"bm25_b\": 0.75},\n        )\n\n        milvus_client.create_collection(\n            collection_name,\n            schema=schema,\n            index_params=index_params,\n            consistency_level=\"Strong\",\n        )\n\n        rows = [\n            {\"id\": 1, \"document_content\": \"hello world\"},\n            {\"id\": 2, \"document_content\": \"hello milvus\"},\n            {\"id\": 3, \"document_content\": \"hello zilliz\"},\n        ]\n\n        insert_result = milvus_client.insert(collection_name, rows, progress_bar=True)\n        texts_to_search = [\"hello\"]\n        search_params = {\"metric_type\": \"BM25\"}\n\n        result = milvus_client.search(\n            collection_name,\n            texts_to_search,\n            limit=3,\n            output_fields=[\"document_content\"],\n            search_params=search_params,\n        )\n        scores = [hit['distance'] for hit in result[0]]\n        self.assertAlmostEqual(scores, [0.133531391620636, 0.133531391620636, 0.133531391620636])\n\n        texts_to_search = [\"hello\", \"hello, zilliz\"]\n        search_params = {\"metric_type\": \"BM25\"}\n\n        result = milvus_client.search(\n            collection_name,\n            texts_to_search,\n            limit=3,\n            output_fields=[\"document_content\"],\n            search_params=search_params,\n        )\n        scores1 = [hit['distance'] for hit in result[0]]\n        self.assertAlmostEqual(scores1, [0.133531391620636, 0.133531391620636, 0.133531391620636])\n\n        scores2 = [hit['distance'] for hit in result[1]]\n        self.assertAlmostEqual(scores2, [1.1143605709075928, 0.133531391620636, 0.133531391620636])\n\n    def test_multi_functions(self):\n        collection_name = \"hello_milvus\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)        \n        if has_collection:\n            milvus_client.drop_collection(collection_name)\n        schema = milvus_client.create_schema()\n        schema.add_field(\"id\", DataType.INT64, is_primary=True, auto_id=False)\n        schema.add_field(\n            \"document_content\", DataType.VARCHAR, max_length=9000, enable_analyzer=True\n        )\n        schema.add_field(\"sparse_vector_1\", DataType.SPARSE_FLOAT_VECTOR)\n        schema.add_field(\"sparse_vector_2\", DataType.SPARSE_FLOAT_VECTOR)        \n        \n        f1 = Function(\n            name=\"bm25_fn\",\n            input_field_names=[\"document_content\"],\n            output_field_names=\"sparse_vector_1\",\n            function_type=FunctionType.BM25,\n        )\n        schema.add_function(f1)\n\n        f2 = Function(\n            name=\"bm25_fn\",\n            input_field_names=[\"document_content\"],\n            output_field_names=\"sparse_vector_2\",\n            function_type=FunctionType.BM25,\n        )\n        schema.add_function(f2)\n\n        index_params = milvus_client.prepare_index_params()\n        index_params.add_index(\n            field_name=\"sparse_vector_1\",\n            index_name=\"sparse_inverted_index_1\",\n            index_type=\"SPARSE_INVERTED_INDEX\",\n            metric_type=\"BM25\",\n            params={\"bm25_k1\": 1.2, \"bm25_b\": 0.75},\n        )\n        index_params.add_index(\n            field_name=\"sparse_vector_2\",\n            index_name=\"sparse_inverted_index_2\",\n            index_type=\"SPARSE_INVERTED_INDEX\",\n            metric_type=\"BM25\",\n            params={\"bm25_k1\": 1.2, \"bm25_b\": 0.75},\n        )\n\n        milvus_client.create_collection(\n            collection_name,\n            schema=schema,\n            index_params=index_params,\n            consistency_level=\"Strong\",\n        )\n\n        rows = [\n            {\"id\": 1, \"document_content\": \"hello world\"},\n            {\"id\": 2, \"document_content\": \"hello milvus\"},\n            {\"id\": 3, \"document_content\": \"hello zilliz\"},\n        ]\n\n        milvus_client.insert(collection_name, rows, progress_bar=True)\n        texts_to_search = [\"hello\"]\n        search_params = {\"metric_type\": \"BM25\"}\n\n        result = milvus_client.search(\n            collection_name,\n            texts_to_search,\n            anns_field=\"sparse_vector_1\",\n            limit=3,\n            output_fields=[\"document_content\"],\n            search_params=search_params,\n        )\n        scores = [hit['distance'] for hit in result[0]]\n        self.assertAlmostEqual(scores, [0.133531391620636, 0.133531391620636, 0.133531391620636])\n\n        texts_to_search = [\"hello\", \"hello, zilliz\"]\n        search_params = {\"metric_type\": \"BM25\"}\n\n        result = milvus_client.search(\n            collection_name,\n            texts_to_search,\n            anns_field=\"sparse_vector_2\",\n            limit=3,\n            output_fields=[\"document_content\"],\n            search_params=search_params,\n        )\n        scores1 = [hit['distance'] for hit in result[0]]\n        self.assertAlmostEqual(scores1, [0.133531391620636, 0.133531391620636, 0.133531391620636])\n\n        scores2 = [hit['distance'] for hit in result[1]]\n        self.assertAlmostEqual(scores2, [1.1143605709075928, 0.133531391620636, 0.133531391620636])\n\n    def test_bm25_hybrid_search(self):\n        collection_name = \"hello_milvus\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)        \n        if has_collection:\n            milvus_client.drop_collection(collection_name)\n        schema = milvus_client.create_schema()\n        schema.add_field(\"id\", DataType.INT64, is_primary=True, auto_id=False)\n        schema.add_field(\n            \"document_content\", DataType.VARCHAR, max_length=9000, enable_analyzer=True\n        )\n        schema.add_field(\"sparse_vector\", DataType.SPARSE_FLOAT_VECTOR)\n        schema.add_field(\"sparse_vector_2\", DataType.SPARSE_FLOAT_VECTOR)\n        \n        bm25_function = Function(\n            name=\"bm25_fn\",\n            input_field_names=[\"document_content\"],\n            output_field_names=\"sparse_vector\",\n            function_type=FunctionType.BM25,\n        )\n        schema.add_function(bm25_function)\n\n        f2 = Function(\n            name=\"bm25_fn\",\n            input_field_names=[\"document_content\"],\n            output_field_names=\"sparse_vector_2\",\n            function_type=FunctionType.BM25,\n        )\n        schema.add_function(f2)\n\n        index_params = milvus_client.prepare_index_params()\n        index_params.add_index(\n            field_name=\"sparse_vector\",\n            index_name=\"sparse_inverted_index\",\n            index_type=\"SPARSE_INVERTED_INDEX\",\n            metric_type=\"BM25\",\n            params={\"bm25_k1\": 1.2, \"bm25_b\": 0.75},\n        )\n        index_params.add_index(\n            field_name=\"sparse_vector_2\",\n            index_name=\"sparse_inverted_index_2\",\n            index_type=\"SPARSE_INVERTED_INDEX\",\n            metric_type=\"BM25\",\n            params={\"bm25_k1\": 1.2, \"bm25_b\": 0.75},\n        )\n\n        milvus_client.create_collection(\n            collection_name,\n            schema=schema,\n            index_params=index_params,\n            consistency_level=\"Strong\",\n        )\n\n        rows = [\n            {\"id\": 1, \"document_content\": \"hello world\"},\n            {\"id\": 2, \"document_content\": \"hello milvus\"},\n            {\"id\": 3, \"document_content\": \"hello zilliz\"},\n        ]\n\n        milvus_client.insert(collection_name, rows, progress_bar=True)\n\n        texts_to_search = [\"hello\"]\n        search_params = {\"metric_type\": \"BM25\"}\n\n        req1 = AnnSearchRequest(\n            texts_to_search,\n            \"sparse_vector\",\n            search_params,\n            limit=3,\n        )\n        req2 = AnnSearchRequest(\n            texts_to_search,\n            \"sparse_vector_2\",\n            search_params,\n            limit=3,\n        )\n        reqs = [req1, req2]\n        result = milvus_client.hybrid_search(collection_name, reqs, ranker=RRFRanker(), limit=3, output_fields=[\"document_content\"])\n        print(result)\n\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_delete.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport unittest\nfrom pymilvus import MilvusClient\n\n\nclass TestDefaultSearch(unittest.TestCase):\n    def test_delete_by_ids(self):\n        dim = 2\n        collection_name = 'default'\n        milvus_client = MilvusClient('./local_test.db')\n        has_collection = milvus_client.has_collection(collection_name, timeout=5)\n        if has_collection:\n            milvus_client.drop_collection(collection_name)\n        milvus_client.create_collection(collection_name, dim, id_type='string', max_length=1000)\n        \n        rows = [\n            {'id': '-xf%^@#$%^&***)(*/.', 'vector': [0.0, 1.0], 'a': 100},\n            {'id': '中文id', 'vector': [0.1, 0.9], 'a': 100},\n            {'id': 'Título', 'vector': [0.2, 0.8], 'a': 200},\n            {'id': 'Cien años de soledad', 'vector': [0.3, 0.7], 'a': 200},\n        ]\n        insert_result = milvus_client.insert(collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 4)\n\n        result = milvus_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual(result[0][0]['distance'], 1.0)\n        self.assertEqual([item['id']for item in result[0]], ['-xf%^@#$%^&***)(*/.', '中文id', 'Título'])\n\n        result = milvus_client.delete(collection_name, ids=['-xf%^@#$%^&***)(*/.', '中文id'])\n        result = milvus_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual([item['id']for item in result[0]], ['Título', 'Cien años de soledad'])\n        milvus_client.release_collection(collection_name)        \n        del milvus_client\n\n        local_client = MilvusClient('./local_test.db')\n        result = local_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual([item['id']for item in result[0]], ['Título', 'Cien años de soledad'])\n\n        result = local_client.delete(collection_name, ids=['Cien años de soledad'])\n        result = local_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual([item['id']for item in result[0]], ['Título'])\n\n        local_client.drop_collection(collection_name)\n\n    def test_delete_by_filter(self):\n        dim = 2\n        collection_name = 'hello_milvus'\n        milvus_client = MilvusClient('./local_test.db')\n        has_collection = milvus_client.has_collection(collection_name, timeout=5)\n        if has_collection:\n            milvus_client.drop_collection(collection_name)\n        milvus_client.create_collection(collection_name, dim, id_type='string', max_length=1000)\n        \n        rows = [\n            {'id': '-xf%^@#$%^&***)(*/.', 'vector': [0.0, 1.0], 'a': 100, 'b': 300},\n            {'id': '中文id', 'vector': [0.1, 0.9], 'a': 100},\n            {'id': 'Título', 'vector': [0.2, 0.8], 'b': 200},\n            {'id': 'Cien años de soledad', 'vector': [0.3, 0.7], 'b': 200},\n        ]\n        insert_result = milvus_client.insert(collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 4)\n\n        result = milvus_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual(result[0][0]['distance'], 1.0)\n        self.assertEqual([item['id']for item in result[0]], ['-xf%^@#$%^&***)(*/.', '中文id', 'Título'])\n\n        result = milvus_client.delete(collection_name, filter='(a==100) && (b==300)')\n        result = milvus_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual([item['id']for item in result[0]], ['中文id', 'Título', 'Cien años de soledad'])\n        milvus_client.release_collection(collection_name)\n        del milvus_client\n\n        local_client = MilvusClient('./local_test.db')\n        result = local_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual([item['id']for item in result[0]], ['中文id', 'Título', 'Cien años de soledad'])        \n\n        local_client.delete(collection_name, filter='(a==100) || (b==200)')\n        result = local_client.search(collection_name, [[0.0, 1.0]], limit=3)\n        self.assertEqual(result, [[]])\n\n        local_client.drop_collection(collection_name)        \n\n\nif __name__ == '__main__':\n    unittest.main()        \n"
  },
  {
    "path": "tests/test_dump_tool.py",
    "content": "# Copyright (C) 2019-2023 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\n\nimport unittest\nimport json\nimport os\nimport random\nimport pandas as pd\nimport numpy as np\nimport tempfile\n\n\nfrom pymilvus import (\n    MilvusClient,\n    FieldSchema, CollectionSchema, DataType\n)\n\n\nfrom milvus_lite.cmdline import dump_collection\n\nDIM = 512\nDATA_FILE = os.path.join(os.path.dirname(__file__), 'data', 'train_embeddings.csv')\n\ndef gen_binary_vector():\n    raw_vector = [random.randint(0, 1) for i in range(DIM)]\n    binary_vectors = np.packbits(raw_vector, axis=-1).tolist()\n    return binary_vectors\n\ndef gen_float_vector():\n    return [random.random() for _ in range(DIM)]\n\ndef all_types_data(bin_vec: bool)->list:\n    rows = []\n    count = 100\n    for i in range(count):\n        row = {\n            \"id\": i,\n            \"bool\": True if i%5 == 0 else False,\n            \"int8\": i%128,\n            \"int16\": i%1000,\n            \"int32\": i%100000,\n            \"int64\": i,\n            \"float\": i/3,\n            \"double\": i/7,\n            \"varchar\": f\"varchar_{i}\",\n            \"json\": {\"dummy\": i, \"ok\": f\"name_{i}\"},\n            \"vector\": gen_binary_vector() if bin_vec else gen_float_vector(),\n            f\"dynamic_{i}\": i,\n            # bulkinsert doesn't support import npy with array field, the below values will be stored into dynamic field\n            \"array_str\": [f\"str_{k}\" for k in range(5)],\n            \"array_int\": [k for k in range(10)],\n        }\n        rows.append(row)\n    return rows\n\n\nclass TestDumpTool(unittest.TestCase):\n    def setUp(self):\n        self.collection_name = 'hello_milvus'\n        self.milvus_client = MilvusClient('./local_test.db')\n        has_collection = self.milvus_client.has_collection(self.collection_name, timeout=5)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)\n\n    def tearDown(self):\n        # self.milvus_client.drop_collection(self.collection_name)\n        pass\n\n    @unittest.skip(\"\")\n    def test_simple_collection(self):\n        has_collection = self.milvus_client.has_collection(self.collection_name)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)\n        fields = [\n            FieldSchema(name=\"id\", dtype=DataType.INT64, is_primary=True, auto_id=True),\n            FieldSchema(name=\"path\", dtype=DataType.VARCHAR, max_length=512),\n            FieldSchema(name=\"vector\", dtype=DataType.FLOAT_VECTOR, dim=DIM),\n            FieldSchema(name=\"label\", dtype=DataType.VARCHAR, max_length=512),\n        ]\n        schema = CollectionSchema(fields=fields)\n        index_params = self.milvus_client.prepare_index_params()\n        index_params.add_index(field_name = \"vector\", metric_type=\"L2\")\n        self.milvus_client.create_collection(self.collection_name, schema=schema, index_params=index_params, consistency_level=\"Strong\")\n\n        csv_data = pd.read_csv(DATA_FILE)\n        for i in range(csv_data.shape[0]):\n            row = {}\n            for col in csv_data.columns.values:\n                if col == \"vector\":\n                    vec = json.loads(csv_data[col][i]) # convert the string format vector to List[float]\n                    row[col] = vec\n                else:\n                    row[col] = csv_data[col][i]\n            self.milvus_client.insert(self.collection_name, row)\n\n        # dump\n        with tempfile.TemporaryDirectory() as temp_dir:\n            dump_collection('./local_test.db', self.collection_name, temp_dir)\n\n    @unittest.skip(\"\")            \n    def test_all_type_collection(self):\n        has_collection = self.milvus_client.has_collection(self.collection_name)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)        \n        fields = [\n            FieldSchema(name=\"id\", dtype=DataType.INT64, is_primary=True, auto_id=False),\n            FieldSchema(name=\"bool\", dtype=DataType.BOOL),\n            FieldSchema(name=\"int8\", dtype=DataType.INT8),\n            FieldSchema(name=\"int16\", dtype=DataType.INT16),\n            FieldSchema(name=\"int32\", dtype=DataType.INT32),\n            FieldSchema(name=\"int64\", dtype=DataType.INT64),\n            FieldSchema(name=\"float\", dtype=DataType.FLOAT),\n            FieldSchema(name=\"double\", dtype=DataType.DOUBLE),\n            FieldSchema(name=\"varchar\", dtype=DataType.VARCHAR, max_length=512),\n            FieldSchema(name=\"json\", dtype=DataType.JSON),\n            FieldSchema(name=\"vector\", dtype=DataType.FLOAT_VECTOR, dim=DIM)\n        ]\n\n        fields.append(FieldSchema(name=\"array_str\", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.VARCHAR, max_length=128))\n        fields.append(FieldSchema(name=\"array_int\", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64))\n        schema = CollectionSchema(fields=fields, enable_dynamic_field=True)\n        index_params = self.milvus_client.prepare_index_params()\n        index_params.add_index(field_name = \"vector\", metric_type=\"L2\")\n        self.milvus_client.create_collection(self.collection_name, schema=schema, index_params=index_params, consistency_level=\"Strong\")\n        rows = all_types_data(False)\n        self.milvus_client.insert(self.collection_name, rows)\n        # dump\n        with tempfile.TemporaryDirectory() as temp_dir:\n            dump_collection('./local_test.db', self.collection_name, temp_dir)\n\n    def test_all_type_bin_vec_collection(self):\n        has_collection = self.milvus_client.has_collection(self.collection_name)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)                \n        fields = [\n            FieldSchema(name=\"id\", dtype=DataType.INT64, is_primary=True, auto_id=False),\n            FieldSchema(name=\"bool\", dtype=DataType.BOOL),\n            FieldSchema(name=\"int8\", dtype=DataType.INT8),\n            FieldSchema(name=\"int16\", dtype=DataType.INT16),\n            FieldSchema(name=\"int32\", dtype=DataType.INT32),\n            FieldSchema(name=\"int64\", dtype=DataType.INT64),\n            FieldSchema(name=\"float\", dtype=DataType.FLOAT),\n            FieldSchema(name=\"double\", dtype=DataType.DOUBLE),\n            FieldSchema(name=\"varchar\", dtype=DataType.VARCHAR, max_length=512),\n            FieldSchema(name=\"json\", dtype=DataType.JSON),\n            FieldSchema(name=\"vector\", dtype=DataType.BINARY_VECTOR, dim=DIM)\n        ]\n\n        fields.append(FieldSchema(name=\"array_str\", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.VARCHAR, max_length=128))\n        fields.append(FieldSchema(name=\"array_int\", dtype=DataType.ARRAY, max_capacity=100, element_type=DataType.INT64))\n        schema = CollectionSchema(fields=fields, enable_dynamic_field=True)\n        self.milvus_client.create_collection(self.collection_name, schema=schema, consistency_level=\"Strong\")\n        index_params = self.milvus_client.prepare_index_params()\n        index_params.add_index(\"vector\", \"BIN_FLAT\", metric_type=\"HAMMING\")\n        # index_params = [{\"index_type\": \"BIN_FLAT\", \"metric_type\": \"HAMMING\"}]\n        self.milvus_client.create_index(self.collection_name, index_params=index_params)\n        rows = all_types_data(True)\n        self.milvus_client.insert(self.collection_name, rows)\n        # dump\n        with tempfile.TemporaryDirectory() as temp_dir:            \n            dump_collection('./local_test.db', self.collection_name, temp_dir)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_hybrid_search.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport unittest\nimport random\nfrom pymilvus import (\n    FieldSchema, CollectionSchema, DataType, utility,\n    Collection, AnnSearchRequest, RRFRanker, connections, WeightedRanker\n)\n\nfrom pymilvus.model.sparse import BM25EmbeddingFunction\nfrom pymilvus.model.sparse.bm25.tokenizers import build_default_analyzer\n\nconnections.connect(\"default\", uri=\"milvus.db\")\nanalyzer = build_default_analyzer(language=\"en\")\nbm25_ef = BM25EmbeddingFunction(analyzer)\n\n\nclass TestHybridSearch(unittest.TestCase):\n    def test_hybrid_search(self):\n        fields = [\n            FieldSchema(name=\"pk\", dtype=DataType.VARCHAR,\n                        is_primary=True, auto_id=True, max_length=100),\n            FieldSchema(name=\"text\", dtype=DataType.VARCHAR, max_length=512),\n            FieldSchema(name=\"sparse_vector\", dtype=DataType.SPARSE_FLOAT_VECTOR),\n            FieldSchema(name=\"dense_vector\", dtype=DataType.FLOAT_VECTOR,\n                        dim=2),\n        ]\n        schema = CollectionSchema(fields, \"\")\n        col_name = 'hybrid_test'\n        utility.drop_collection(col_name)\n        col = Collection(col_name, schema, consistency_level=\"Strong\")\n        sparse_index = {\"index_type\": \"SPARSE_INVERTED_INDEX\", \"metric_type\": \"IP\"}\n        col.create_index(\"sparse_vector\", sparse_index)\n        dense_index = {\"index_type\": \"FLAT\", \"metric_type\": \"L2\"}\n        col.create_index(\"dense_vector\", dense_index)\n        col.load()\n        docs = [\n            \"Artificial intelligence was founded as an academic discipline in 1956.\",\n            \"Alan Turing was the first person to conduct substantial research in AI.\",\n            \"Born in Maida Vale, London, Turing was raised in southern England.\",\n        ]\n        query = \"Who started AI research?\"\n        bm25_ef.fit(docs)\n        docs_embeddings = bm25_ef.encode_documents(docs)\n        entities = [docs, docs_embeddings, [[0.1, 0.9], [0.0, 1.0], [1.0, 0.0]]]\n\n        k = 2\n        sparse_search_params = {\"metric_type\": \"IP\"}\n        sparse_req = AnnSearchRequest(bm25_ef.encode_queries([query]),\n                                      \"sparse_vector\", sparse_search_params, limit=k)\n        dense_search_params = {\"metric_type\": \"L2\"}\n        dense_req = AnnSearchRequest([[0.0, 0.1]],\n                                     \"dense_vector\", dense_search_params, limit=k)\n\n        # empty table\n        res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(),\n                                limit=k, output_fields=['text'])\n        self.assertEqual(res[0], [])\n\n        ################################# nq = 1 #####################\n        col.insert(entities)\n\n        k = 2\n        sparse_search_params = {\"metric_type\": \"IP\"}\n        sparse_req = AnnSearchRequest(bm25_ef.encode_queries([query]),\n                                      \"sparse_vector\", sparse_search_params, limit=k)\n        dense_search_params = {\"metric_type\": \"L2\"}\n        dense_req = AnnSearchRequest([[0.0, 0.1]],\n                                     \"dense_vector\", dense_search_params, limit=k)\n\n        res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(),\n                                limit=k, output_fields=['text'])\n        print(res)\n        self.assertEqual(len(res), 1)\n        self.assertEqual(len(res[0]), 2)\n        self.assertEqual(res[0][0].fields['text'], docs[1])\n        self.assertEqual(res[0][1].fields['text'], docs[0])\n\n        ##################### offset #########################\n        res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(),\n                                limit=k, offset=10, output_fields=['text'])\n        self.assertEqual(res[0], [])\n\n        res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(),\n                                limit=k, offset=1, output_fields=['text'])\n        self.assertEqual(len(res), 1)\n        self.assertEqual(len(res[0]), 1)\n        self.assertEqual(res[0][0].fields['text'], docs[0])\n\n        sparse_search_params = {\"metric_type\": \"IP\"}\n        sparse_req = AnnSearchRequest(bm25_ef.encode_queries([query]),\n                                      \"sparse_vector\", sparse_search_params, limit=10)\n        dense_search_params = {\"metric_type\": \"L2\"}\n        dense_req = AnnSearchRequest([[0.0, 0.1]],\n                                     \"dense_vector\", dense_search_params, limit=10)\n\n        res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(),\n                                limit=k, offset=1, output_fields=['text'])\n        self.assertEqual(len(res), 1)\n        self.assertEqual(len(res[0]), 2)\n        self.assertEqual(res[0][0].fields['text'], docs[0])\n        self.assertEqual(res[0][1].fields['text'], docs[2])\n\n        ############################### nq = 2 ###################\n        k = 3\n        dense_search_params = {\"metric_type\": \"L2\"}\n        dense_req1 = AnnSearchRequest([[0.9, 0.1], [0.1, 0.9]],\n                                     \"dense_vector\", dense_search_params, limit=k)\n\n        dense_req2 = AnnSearchRequest([[0.9, 0.1], [0.1, 0.9]],\n                                      \"dense_vector\", dense_search_params, limit=k)\n\n        res = col.hybrid_search([dense_req1, dense_req2], rerank=WeightedRanker(0.9, 0.1),\n                                limit=k, output_fields=['text'])\n        self.assertEqual(len(res), 2)\n        self.assertEqual(len(res[0]), 3)\n        self.assertEqual(len(res[1]), 3)\n        self.assertEqual(res[0][0].fields['text'], docs[2])\n        self.assertEqual(res[0][1].fields['text'], docs[0])\n        self.assertEqual(res[0][2].fields['text'], docs[1])\n\n        self.assertEqual(res[1][0].fields['text'], docs[0])\n        self.assertEqual(res[1][1].fields['text'], docs[1])\n        self.assertEqual(res[1][2].fields['text'], docs[2])\n\n        ########################## offset ####################\n\n        res = col.hybrid_search([dense_req1, dense_req2], rerank=RRFRanker(),\n                                limit=k, offset=10, output_fields=['text'])\n        self.assertEqual(res[0], [])\n\n        res = col.hybrid_search([dense_req1, dense_req2], rerank=RRFRanker(),\n                                limit=k, offset=1, output_fields=['text'])\n        self.assertEqual(len(res), 2)\n        self.assertEqual(len(res[0]), 2)\n        self.assertEqual(len(res[1]), 2)        \n        self.assertEqual(res[0][0].fields['text'], docs[0])\n        self.assertEqual(res[1][0].fields['text'], docs[1])        \n        col.drop()\n\n    def test_dynamic(self):\n        fields = [\n            FieldSchema(name=\"pk\", dtype=DataType.INT64,\n                        is_primary=True, auto_id=False),\n            FieldSchema(name=\"text\", dtype=DataType.VARCHAR, max_length=512),\n            FieldSchema(name=\"sparse_vector\", dtype=DataType.SPARSE_FLOAT_VECTOR),\n            FieldSchema(name=\"dense_vector\", dtype=DataType.FLOAT_VECTOR,\n                        dim=2)\n        ]\n        schema = CollectionSchema(fields, \"\", enable_dynamic_field=True)\n        col_name = 'hybrid_test_dynamic'\n        utility.drop_collection(col_name)\n        col = Collection(col_name, schema, consistency_level=\"Strong\")\n        sparse_index = {\"index_type\": \"SPARSE_INVERTED_INDEX\", \"metric_type\": \"IP\"}\n        col.create_index(\"sparse_vector\", sparse_index)\n        dense_index = {\"index_type\": \"FLAT\", \"metric_type\": \"L2\"}\n        col.create_index(\"dense_vector\", dense_index)\n        col.load()\n        docs = [\n            \"Artificial intelligence was founded as an academic discipline in 1956.\",\n            \"Alan Turing was the first person to conduct substantial research in AI.\",\n            \"Born in Maida Vale, London, Turing was raised in southern England.\",\n        ]\n        query = \"Who started AI research?\"\n        bm25_ef.fit(docs)\n        docs_embeddings = bm25_ef.encode_documents(docs)\n        data_rows = [\n            {\"pk\": 1, \"text\": docs[0], \"sparse_vector\": docs_embeddings[0], \"dense_vector\": [0.1, 0.9], \"a\": 1, \"c\": 2},\n            {\"pk\": 2, \"text\": docs[1], \"sparse_vector\": docs_embeddings[1], \"dense_vector\": [0.0, 1.0], \"a\": 4, \"d\": 2},\n            {\"pk\": 3, \"text\": docs[2], \"sparse_vector\": docs_embeddings[2], \"dense_vector\": [1.0, 0.0], \"d\": 1, \"c\": 4},\n        ]\n\n        k = 2\n        sparse_search_params = {\"metric_type\": \"IP\"}\n        sparse_req = AnnSearchRequest(bm25_ef.encode_queries([query]),\n                                      \"sparse_vector\", sparse_search_params, limit=k)\n        dense_search_params = {\"metric_type\": \"L2\"}\n        dense_req = AnnSearchRequest([[0.0, 0.1]],\n                                     \"dense_vector\", dense_search_params, limit=k)\n\n        # empty table\n        res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(),\n                                limit=k, output_fields=['text'])\n        self.assertEqual(res[0], [])\n\n        # nq = 1\n        col.insert(data_rows)\n        \n        k = 2\n        sparse_search_params = {\"metric_type\": \"IP\"}\n        sparse_req = AnnSearchRequest(bm25_ef.encode_queries([query]),\n                                      \"sparse_vector\", sparse_search_params, limit=k)\n        dense_search_params = {\"metric_type\": \"L2\"}\n        dense_req = AnnSearchRequest([[0.0, 0.1]],\n                                     \"dense_vector\", dense_search_params, limit=k)\n\n        res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(),\n                                limit=k, output_fields=['text', 'a'])\n\n        self.assertEqual(len(res), 1)\n        self.assertEqual(len(res[0]), 2)\n        self.assertEqual(res[0][0].fields['text'], docs[1])\n        self.assertEqual(res[0][0].fields['a'], 4)\n        self.assertEqual(res[0][1].fields['text'], docs[0])\n        self.assertEqual(res[0][1].fields['a'], 1)\n\n        # nq = 2\n        k = 10\n        dense_search_params = {\"metric_type\": \"L2\"}\n        dense_req1 = AnnSearchRequest([[0.9, 0.1], [0.1, 0.9]],\n                                     \"dense_vector\", dense_search_params, limit=k)\n\n        dense_req2 = AnnSearchRequest([[0.9, 0.1], [0.1, 0.9]],\n                                      \"dense_vector\", dense_search_params, limit=k)        \n\n        res = col.hybrid_search([dense_req1, dense_req2], rerank=WeightedRanker(0.9, 0.1),\n                                limit=k, output_fields=['text', 'c'])\n\n        self.assertEqual(len(res), 2)\n        self.assertEqual(len(res[0]), 3)\n        self.assertEqual(len(res[1]), 3)\n        self.assertEqual(res[0][0].fields['text'], docs[2])\n        self.assertEqual(res[0][0].fields['c'], 4)\n        self.assertEqual(res[0][1].fields['text'], docs[0])\n        self.assertEqual(res[0][1].fields['c'], 2)\n        self.assertEqual(res[0][2].fields['text'], docs[1])\n        self.assertEqual(res[0][2].fields.get('c'), None)\n\n        self.assertEqual(res[1][0].fields['text'], docs[0])\n        self.assertEqual(res[1][0].fields['c'], 2)\n        self.assertEqual(res[1][1].fields['text'], docs[1])\n        self.assertEqual(res[1][1].get('c'), None)\n        self.assertEqual(res[1][2].fields['text'], docs[2])\n        self.assertEqual(res[1][2].fields.get('c'), 4)\n        col.drop()\n\n    def test_dense(self):\n        fields = [\n            FieldSchema(name=\"film_id\", dtype=DataType.INT64, is_primary=True),\n            FieldSchema(name=\"filmVector\", dtype=DataType.FLOAT_VECTOR, dim=5),\n            FieldSchema(name=\"posterVector\", dtype=DataType.FLOAT_VECTOR, dim=5)]\n\n        schema = CollectionSchema(fields=fields,enable_dynamic_field=False)\n\n        collection = Collection(name=\"test_collection1\", schema=schema)\n        index_params = {\"index_type\": \"FLAT\", \"metric_type\": \"L2\"}\n        collection.create_index(\"filmVector\", index_params)\n        collection.create_index(\"posterVector\", index_params)\n\n        entities = []\n        for _ in range(1000):\n            film_id = random.randint(1, 1000)\n            film_vector = [ random.random() for _ in range(5) ]\n            poster_vector = [ random.random() for _ in range(5) ]\n\n            entity = {\n                \"film_id\": film_id,\n                \"filmVector\": film_vector,\n                \"posterVector\": poster_vector\n            }\n            entities.append(entity)\n        collection.insert(entities)\n\n        query_filmVector = [[0.8896863042430693, 0.370613100114602, 0.23779315077113428, 0.38227915951132996, 0.5997064603128835]] * 2\n        search_param_1 = {\n            \"data\": query_filmVector,\n            \"anns_field\": \"filmVector\",\n            \"param\": {\n                \"metric_type\": \"L2\",\n            },\n            \"limit\": 2\n        }\n        request_1 = AnnSearchRequest(**search_param_1)\n\n        query_posterVector = [[0.02550758562349764, 0.006085637357292062, 0.5325251250159071, 0.7676432650114147, 0.5521074424751443]] * 2\n        search_param_2 = {\n            \"data\": query_posterVector,\n            \"anns_field\": \"posterVector\",\n            \"param\": {\n                \"metric_type\": \"L2\",\n            },\n            \"limit\": 2\n        }\n        request_2 = AnnSearchRequest(**search_param_2)\n        rerank = WeightedRanker(0.8, 0.2)\n        reqs = [request_1, request_2]\n        collection.load()\n        res = collection.hybrid_search(\n            reqs,\n            rerank,\n            limit=2\n        )\n        self.assertEqual(len(res[0]), 2)\n        self.assertEqual(len(res[1]), 2)\n\n        res = collection.hybrid_search(\n            reqs,\n            rerank,\n            limit=5\n        )\n        self.assertEqual(len(res[0]), 4)\n        self.assertEqual(len(res[1]), 4)\n\n\nif __name__ == '__main__':\n    unittest.main()        \n"
  },
  {
    "path": "tests/test_query.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport unittest\nfrom pymilvus import MilvusClient, DataType\n\n\nclass TestQuery(unittest.TestCase):\n    def setUp(self):\n        self.dim = 2\n        self.collection_name = 'default'\n        self.milvus_client = MilvusClient('./local_test.db')\n        has_collection = self.milvus_client.has_collection(self.collection_name, timeout=5)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)\n        self.milvus_client.create_collection(self.collection_name, self.dim)\n\n    def tearDown(self):\n        self.milvus_client.drop_collection(self.collection_name)\n\n    def test_query_empty(self):\n        self.milvus_client.query(self.collection_name, limit=3)\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'a': 100},\n        ]\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 1)\n        self.milvus_client.delete(self.collection_name, ids=[1])\n        self.milvus_client.query(self.collection_name, limit=3)\n\n    def test_query(self):\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'a': 100},\n            {'id': 2, 'vector': [0.1, 0.9], 'b': 200},\n            {'id': 3, 'vector': [0.2, 0.8], 'c': 300},\n            {'id': 4, 'vector': [0.3, 0.7], 'd': 400},\n            {'id': 5, 'vector': [0.8, 0.2], 'e': 500},\n            {'id': 6, 'vector': [1.0, 0.0], 'f': 600},\n        ]\n\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 6)\n        result = self.milvus_client.query(self.collection_name, filter=\"\", limit=3)\n        self.assertEqual(len(result), 3)\n        self.assertEqual(result[0]['id'], 1)\n        self.assertEqual(result[1]['id'], 2)\n        self.assertEqual(result[2]['id'], 3)\n\n        result = self.milvus_client.query(self.collection_name, filter=\"\", limit=3, offset=5)\n        self.assertEqual(len(result), 1)\n        self.assertEqual(result[0]['id'], 6)\n\n        result = self.milvus_client.query(self.collection_name, filter=\"a == 100\", limit=3, offset=5)\n        self.assertEqual(len(result), 0)\n\n        result = self.milvus_client.query(self.collection_name, filter=\"a == 100\", limit=3)\n        self.assertEqual(len(result), 1)\n\n\nclass TestArray(unittest.TestCase):\n    def test_query(self):\n        self.dim = 2\n        self.collection_name = 'default'\n        self.milvus_client = MilvusClient('./local_test.db')\n        has_collection = self.milvus_client.has_collection(self.collection_name, timeout=5)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)\n        schema = self.milvus_client.create_schema(enable_dynamic_field=True)\n        schema.add_field(\"id\", DataType.INT64, is_primary=True)\n        schema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=2)\n        schema.add_field(\"array\", DataType.ARRAY, element_type=DataType.INT64, max_capacity=5)\n        self.milvus_client.create_collection(self.collection_name, self.dim)\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'array': [100, 1]},\n            {'id': 2, 'vector': [0.1, 0.9], 'array': [200, 2]},\n            {'id': 3, 'vector': [0.2, 0.8], 'array': [300, 1]},\n            {'id': 4, 'vector': [0.3, 0.7], 'array': [400, 3]},\n            {'id': 5, 'vector': [0.8, 0.2], 'array': [500]},\n            {'id': 6, 'vector': [1.0, 0.0], 'array': [600]},\n        ]\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 6)\n        result = self.milvus_client.query(\n                collection_name=\"default\",\n                filter=\"ARRAY_CONTAINS_ANY(array, [1, 2])\",\n                output_fields=[\"id\"],\n                limit=3\n            )\n        self.assertEqual(len(result), 3)\n\n        result = self.milvus_client.query(\n                collection_name=\"default\",\n                filter=\"ARRAY_CONTAINS_ALL(array, [100, 1])\",\n                output_fields=[\"id\"],\n                limit=3\n            )\n        self.assertEqual(len(result), 1)\n\n        result = self.milvus_client.query(\n                collection_name=\"default\",\n                filter=\"ARRAY_LENGTH(array) == 2\",\n                output_fields=[\"id\"],\n                limit=4\n            )\n        self.assertEqual(len(result), 4)\n        self.milvus_client.drop_collection(self.collection_name)\n\n\nif __name__ == '__main__':\n    unittest.main()        \n"
  },
  {
    "path": "tests/test_schema.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport unittest\nfrom pymilvus import MilvusClient, MilvusException, DataType\n\n\nclass TestDefaultSearch(unittest.TestCase):\n    def test_schema_field_limits(self):\n        collection_name = \"hello_milvus\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)        \n        if has_collection:\n            milvus_client.drop_collection(collection_name)        \n        schema = milvus_client.create_schema(enable_dynamic_field=True)\n        schema.add_field(\"id\", DataType.INT64, is_primary=True)\n        schema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=2)\n        for i in range(62):\n            schema.add_field('a' + str(i), DataType.INT64)\n        index_params = milvus_client.prepare_index_params()\n        index_params.add_index(field_name = \"embeddings\", metric_type=\"L2\")\n        milvus_client.create_collection(collection_name, schema=schema, index_params=index_params)\n\n    def test_schema_field_out_limits(self):\n        collection_name = \"hello_milvus\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)        \n        if has_collection:\n            milvus_client.drop_collection(collection_name)        \n        schema = milvus_client.create_schema(enable_dynamic_field=True)\n        schema.add_field(\"id\", DataType.INT64, is_primary=True)\n        schema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=2)\n        for i in range(63):\n            schema.add_field('a' + str(i), DataType.INT64)\n        index_params = milvus_client.prepare_index_params()\n        index_params.add_index(field_name = \"embeddings\", metric_type=\"L2\")\n        with self.assertRaises(MilvusException):\n            milvus_client.create_collection(collection_name, schema=schema, index_params=index_params)\n\n    def test_varchar_field_maxlen(self):\n        collection_name = \"hello_milvus\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)        \n        if has_collection:\n            milvus_client.drop_collection(collection_name)        \n        schema = milvus_client.create_schema(enable_dynamic_field=True)\n        schema.add_field(\"id\", DataType.INT64, is_primary=True)\n        schema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=2)\n        schema.add_field(\"string\", DataType.VARCHAR, max_length=65535)\n        index_params = milvus_client.prepare_index_params()\n        index_params.add_index(field_name = \"embeddings\", metric_type=\"L2\")\n        milvus_client.create_collection(collection_name, schema=schema, index_params=index_params)\n\n    def test_varchar_field_out_maxlen(self):\n        collection_name = \"hello_milvus\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)        \n        if has_collection:\n            milvus_client.drop_collection(collection_name)        \n        schema = milvus_client.create_schema(enable_dynamic_field=True)\n        schema.add_field(\"id\", DataType.INT64, is_primary=True)\n        schema.add_field(\"embeddings\", DataType.FLOAT_VECTOR, dim=2)\n        schema.add_field(\"string\", DataType.VARCHAR, max_length=65536)\n        index_params = milvus_client.prepare_index_params()\n        index_params.add_index(field_name = \"embeddings\", metric_type=\"L2\")\n        with self.assertRaises(MilvusException):\n            milvus_client.create_collection(collection_name, schema=schema, index_params=index_params)                    \n\n    def test_collection_name(self):\n        collection_name = \"test_collection_escck\"\n        milvus_client = MilvusClient(\"./local_test.db\")\n        has_collection = milvus_client.has_collection(collection_name)\n        if has_collection:\n            milvus_client.drop_collection(collection_name)\n        milvus_client.create_collection(collection_name, dimension=384)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_search.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport unittest\nfrom pymilvus import MilvusClient, MilvusException\n\n\nclass TestDefaultSearch(unittest.TestCase):\n    def setUp(self):\n        self.dim = 2\n        self.collection_name = 'default'\n        self.milvus_client = MilvusClient('./local_test.db')\n        has_collection = self.milvus_client.has_collection(self.collection_name, timeout=5)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)\n        self.milvus_client.create_collection(self.collection_name, self.dim)\n\n    def tearDown(self):\n        self.milvus_client.drop_collection(self.collection_name)\n\n    def test_index_info(self):\n        index_info = self.milvus_client.describe_index(self.collection_name, 'vector')\n        self.assertEqual(index_info['metric_type'], 'COSINE')\n        self.assertEqual(int(index_info['dim']), self.dim)\n\n    def test_error_metrics(self):\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'a': 100},\n            {'id': 2, 'vector': [0.1, 0.9], 'b': 200},\n            {'id': 3, 'vector': [0.2, 0.8], 'c': 300},\n            {'id': 4, 'vector': [0.3, 0.7], 'd': 400},\n            {'id': 5, 'vector': [0.8, 0.2], 'e': 500},\n            {'id': 6, 'vector': [1.0, 0.0], 'f': 600},\n        ]\n\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 6)\n        with self.assertRaises(MilvusException):\n            self.milvus_client.search(self.collection_name, [[0.0, 1.0]], limit=3,\n                                      search_params={'metric_type': 'IP'},\n                                      consistency_level='Strong')\n\n    def test_search(self):\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'a': 100},\n            {'id': 2, 'vector': [0.1, 0.9], 'b': 200},\n            {'id': 3, 'vector': [0.2, 0.8], 'c': 300},\n            {'id': 4, 'vector': [0.3, 0.7], 'd': 400},\n            {'id': 5, 'vector': [0.8, 0.2], 'e': 500},\n            {'id': 6, 'vector': [1.0, 0.0], 'f': 600},\n        ]\n\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 6)\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0]], limit=3,\n                                      search_params={'metric_type': 'COSINE'},\n                                      consistency_level='Strong', output_fields=['vector'])\n        self.assertEqual(len(result[0]), 3)\n        self.assertEqual(result[0][0]['distance'], 1.0)\n        self.assertEqual([item['id']for item in result[0]], [1, 2, 3])\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0]], limit=2, offset=10)\n        self.assertEqual(len(result[0]), 0)\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0]], limit=2, offset=5)\n        self.assertEqual(len(result[0]), 1)\n        self.assertEqual(result[0][0]['id'], 6)\n\n        # range search\n        result = self.milvus_client.search(\n            self.collection_name,\n            [[0.0, 1.0]],\n            limit=3,\n            search_params={\n                'metric_type': 'COSINE',\n                \"params\": {\n                    \"radius\": 0.99,\n                    \"range_filter\": 1.0\n                }\n            }\n        )\n        self.assertEqual(len(result[0]), 2)\n        self.assertTrue(0.99 <= result[0][0]['distance'] <= 1.0)\n        self.assertTrue(0.99 <= result[0][1]['distance'] <= 1.0)\n\n        # range search\n        result = self.milvus_client.search(\n            self.collection_name,\n            [[0.0, 1.0]],\n            limit=3,\n            search_params={\n                'metric_type': 'COSINE',\n                \"params\": {\n                    \"radius\": 0.9,\n                    \"range_filter\": 1.0\n                }\n            }\n        )\n        self.assertEqual(len(result[0]), 3)\n        self.assertTrue(0.9 <= result[0][0]['distance'] <= 1.0)\n        self.assertTrue(0.9 <= result[0][1]['distance'] <= 1.0)\n        self.assertTrue(0.9 <= result[0][2]['distance'] <= 1.0)\n\n\n    def test_multi_search(self):\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'a': 100},\n            {'id': 2, 'vector': [0.1, 0.9], 'b': 200},\n            {'id': 3, 'vector': [0.2, 0.8], 'c': 300},\n            {'id': 4, 'vector': [0.3, 0.7], 'd': 400},\n            {'id': 5, 'vector': [0.8, 0.2], 'e': 500},\n            {'id': 6, 'vector': [1.0, 0.0], 'f': 600},\n        ]\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 6)\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0], [1.0, 0.0]], limit=3,\n                                      search_params={'metric_type': 'COSINE'},\n                                      consistency_level='Strong')\n        self.assertEqual(len(result), 2)\n        self.assertEqual(result[0][0]['distance'], 1.0)\n        self.assertEqual([item['id']for item in result[0]], [1, 2, 3])\n        self.assertEqual(result[1][0]['distance'], 1.0)\n        self.assertEqual([item['id']for item in result[1]], [6, 5, 4])\n\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0], [1.0, 0.0]],\n                                      consistency_level='Strong')\n        self.assertEqual(len(result), 2)\n        self.assertEqual([item['id']for item in result[0]], [1, 2, 3, 4, 5, 6])\n        self.assertEqual([item['id']for item in result[1]], [6, 5, 4, 3, 2, 1])\n\n\nclass TestIndexMetric(unittest.TestCase):\n    def setUp(self):\n        self.dim = 2\n        self.collection_name = 'hello_milvus'\n        self.milvus_client = MilvusClient('./local_test.db')\n        has_collection = self.milvus_client.has_collection(self.collection_name, timeout=5)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)\n\n    def tearDown(self):\n        self.milvus_client.drop_collection(self.collection_name)\n\n    def test_L2(self):\n        self.milvus_client.create_collection(self.collection_name, self.dim, metric_type=\"L2\")\n        index_info = self.milvus_client.describe_index(self.collection_name, 'vector')\n        self.assertEqual(index_info['metric_type'], 'L2')\n        self.assertEqual(int(index_info['dim']), self.dim)\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'a': 100},\n            {'id': 2, 'vector': [0.1, 0.9], 'b': 200},\n            {'id': 3, 'vector': [0.2, 0.8], 'c': 300},\n            {'id': 4, 'vector': [0.3, 0.7], 'd': 400},\n            {'id': 5, 'vector': [0.8, 0.2], 'e': 500},\n            {'id': 6, 'vector': [1.0, 0.0], 'f': 600},\n        ]\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 6)\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0], [1.0, 0.0]], limit=3,\n                                      search_params={'metric_type': 'L2'},\n                                      consistency_level='Strong')\n        self.assertEqual(len(result), 2)\n        self.assertEqual(result[0][0]['distance'], 0.0)\n        self.assertEqual([item['id']for item in result[0]], [1, 2, 3])\n        self.assertEqual(result[1][0]['distance'], 0.0)\n        self.assertEqual([item['id']for item in result[1]], [6, 5, 4])\n\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0], [1.0, 0.0]],\n                                      consistency_level='Strong')\n        self.assertEqual(len(result), 2)\n        self.assertEqual([item['id']for item in result[0]], [1, 2, 3, 4, 5, 6])\n        self.assertEqual([item['id']for item in result[1]], [6, 5, 4, 3, 2, 1])\n\n    def test_IP(self):\n        self.milvus_client.create_collection(self.collection_name, self.dim, metric_type=\"IP\")\n        index_info = self.milvus_client.describe_index(self.collection_name, 'vector')\n        self.assertEqual(index_info['metric_type'], 'IP')\n        self.assertEqual(int(index_info['dim']), self.dim)\n        rows = [\n            {'id': 1, 'vector': [0.0, 1], 'a': 100},\n            {'id': 2, 'vector': [0.1, 0.9], 'b': 200},\n            {'id': 3, 'vector': [0.2, 0.8], 'c': 300},\n            {'id': 4, 'vector': [0.3, 0.7], 'd': 400},\n            {'id': 5, 'vector': [0.8, 0.2], 'e': 500},\n            {'id': 6, 'vector': [1.0, 0.0], 'f': 600},\n        ]\n        insert_result = self.milvus_client.insert(self.collection_name, rows)\n        self.assertEqual(insert_result['insert_count'], 6)\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0], [1.0, 0.0]], limit=3,\n                                      search_params={'metric_type': 'IP'},\n                                      consistency_level='Strong')\n        self.assertEqual(len(result), 2)\n        self.assertEqual(result[0][0]['distance'], 1.0)\n        self.assertEqual([item['id']for item in result[0]], [1, 2, 3])\n        self.assertEqual(result[1][0]['distance'], 1.0)\n        self.assertEqual([item['id']for item in result[1]], [6, 5, 4])\n\n        result = self.milvus_client.search(self.collection_name, [[0.0, 1.0], [1.0, 0.0]],\n                                      consistency_level='Strong')\n        self.assertEqual(len(result), 2)\n        self.assertEqual([item['id']for item in result[0]], [1, 2, 3, 4, 5, 6])\n        self.assertEqual([item['id']for item in result[1]], [6, 5, 4, 3, 2, 1])\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/test_sparse.py",
    "content": "# Copyright (C) 2019-2024 Zilliz. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n# in compliance with the License. You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software distributed under the License\n# is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n# or implied. See the License for the specific language governing permissions and limitations under\n# the License.\n\nimport unittest\nfrom pymilvus import MilvusClient, MilvusException, FieldSchema, CollectionSchema, DataType\nfrom pymilvus.model.sparse.bm25.tokenizers import build_default_analyzer\nfrom pymilvus.model.sparse import BM25EmbeddingFunction\n\n\ndef csr_to_dict(csr):\n    coo = csr.tocoo()\n    ret = {}\n    for i, j, v in zip(coo.row, coo.col, coo.data):\n        ret[j] = v\n    return ret\n\n\nclass TestSparse(unittest.TestCase):\n    def setUp(self):\n        self.dim = 2\n        self.collection_name = 'hello_milvus'\n        self.milvus_client = MilvusClient('./local_test.db')\n        has_collection = self.milvus_client.has_collection(self.collection_name, timeout=5)\n        if has_collection:\n            self.milvus_client.drop_collection(self.collection_name)\n        fields = [\n            FieldSchema(name=\"pk\", dtype=DataType.VARCHAR,\n                        is_primary=True, auto_id=True, max_length=100),\n            FieldSchema(name=\"num\", dtype=DataType.INT64),\n            FieldSchema(name=\"embeddings\", dtype=DataType.SPARSE_FLOAT_VECTOR),\n        ]\n        schema = CollectionSchema(\n            fields, \"demo for using sparse float vector with milvus client\")\n        index_params = self.milvus_client.prepare_index_params()\n        index_params.add_index(field_name=\"embeddings\", index_name=\"sparse_inverted_index\",\n                               index_type=\"SPARSE_INVERTED_INDEX\", metric_type=\"IP\", params={\"drop_ratio_build\": 0.2})\n        self.milvus_client.create_collection(self.collection_name, schema=schema,\n                                             index_params=index_params, timeout=5, consistency_level=\"Strong\")\n\n    def compare(self, crs, sparse_return):\n        src = csr_to_dict(crs)\n        for index, score in sparse_return.items():\n            self.assertAlmostEqual(score, src[index])    \n\n    def tearDown(self):\n        self.milvus_client.drop_collection(self.collection_name)\n\n    def test_query(self):\n        analyzer = build_default_analyzer(language=\"en\")\n        corpus = [\n            \"Artificial intelligence was founded as an academic discipline in 1956.\",\n            \"Alan Turing was the first person to conduct substantial research in AI.\",\n            \"Born in Maida Vale, London, Turing was raised in southern England. Artificial intelligence\",\n        ]\n\n        bm25_ef = BM25EmbeddingFunction(analyzer)\n        bm25_ef.fit(corpus)\n        rows = [{\"num\": i, \"embeddings\": bm25_ef.encode_documents([corpus[i]])} for i in range(len(corpus))]\n        insert_result = self.milvus_client.insert(self.collection_name, rows, progress_bar=True)\n        self.assertEqual(insert_result['insert_count'], 3)\n\n        query_results = self.milvus_client.query(self.collection_name, filter=\"num <= 1\")\n        self.assertEqual([item['num'] for item in query_results], [0, 1])\n        for i in range(len(query_results)):\n            self.compare(rows[i]['embeddings'], query_results[i]['embeddings'])\n\n        query_results = self.milvus_client.query(self.collection_name, filter=\"num <= 2\", offset=1)\n        self.assertEqual([item['num'] for item in query_results], [1, 2])\n        for i in range(len(query_results)):\n            self.compare(rows[i+1]['embeddings'], query_results[i]['embeddings'])        \n\n        query_results = self.milvus_client.query(self.collection_name, filter=\"num <= 100\")\n        self.assertEqual([item['num'] for item in query_results], [0, 1, 2])\n        for i in range(len(query_results)):\n            self.compare(rows[i]['embeddings'], query_results[i]['embeddings'])        \n\n        query_results = self.milvus_client.query(self.collection_name, filter=\"num <= 100\", offset=10)\n        self.assertEqual([item['num'] for item in query_results], [])\n\n    def test_search(self):\n        analyzer = build_default_analyzer(language=\"en\")\n        corpus = [\n            \"Artificial intelligence was founded as an academic discipline in 1956.\",\n            \"Alan Turing was the first person to conduct substantial research in AI.\",\n            \"Born in Maida Vale, London, Turing was raised in southern England. Artificial intelligence\",\n        ]\n\n        bm25_ef = BM25EmbeddingFunction(analyzer)\n        bm25_ef.fit(corpus)\n        rows = [{\"num\": i, \"embeddings\": bm25_ef.encode_documents([corpus[i]])} for i in range(len(corpus))]\n        insert_result = self.milvus_client.insert(self.collection_name, rows, progress_bar=True)\n        self.assertEqual(insert_result['insert_count'], 3)\n\n        # single search\n        vectors_to_search = bm25_ef.encode_queries([corpus[0]])\n        search_params = {\n            \"metric_type\": \"IP\",\n            \"params\": {\n                \"drop_ratio_search\": 0.0,\n            }\n        }\n        result = self.milvus_client.search(self.collection_name, vectors_to_search, limit=3, output_fields=[\n            \"pk\", \"num\", \"embeddings\"], search_params=search_params)\n        self.assertEqual(len(result[0]), 2)\n        self.assertEqual([item['entity']['num'] for item in result[0]], [0, 2])\n        self.assertEqual([item['distance'] for item in result[0]], [2.507876396179199, 0.16398896276950836])\n        result_rows = [rows[0], rows[2]]\n        for i in range(len(result[0])):\n            self.compare(result_rows[i]['embeddings'], result[0][i]['entity']['embeddings'])\n\n        # multi search\n        vectors_to_search = bm25_ef.encode_queries(corpus)\n        search_params = {\n            \"metric_type\": \"IP\",\n            \"params\": {\n                \"drop_ratio_search\": 0.0,\n            }\n        }\n        result = self.milvus_client.search(self.collection_name, vectors_to_search, limit=3, output_fields=[\n            \"pk\", \"num\", \"embeddings\"], search_params=search_params)\n\n        index = 0\n        self.assertEqual(len(result[index]), 2)\n        self.assertEqual([item['entity']['num'] for item in result[index]], [0, 2])\n        self.assertEqual([item['distance'] for item in result[index]], [2.507876396179199, 0.16398896276950836])\n        result_rows = [rows[0], rows[2]]\n        for i in range(len(result[index])):\n            self.compare(result_rows[i]['embeddings'], result[index][i]['entity']['embeddings'])\n\n        index = 1            \n        self.assertEqual(len(result[index]), 2)\n        self.assertEqual([item['entity']['num'] for item in result[index]], [1, 2])\n        self.assertEqual([item['distance'] for item in result[index]], [3.6669983863830566, 0.08199448138475418])\n        result_rows = [rows[1], rows[2]]\n        for i in range(len(result[index])):\n            self.compare(result_rows[i]['embeddings'], result[index][i]['entity']['embeddings'])\n\n        index = 2\n        self.assertEqual(len(result[index]), 3)\n        self.assertEqual([item['entity']['num'] for item in result[index]], [2, 0, 1])\n        self.assertEqual([item['distance'] for item in result[index]], [3.460167407989502, 0.20556363463401794, 0.09121885895729065])\n        result_rows = [rows[2], rows[0], rows[1]]\n        for i in range(len(result[index])):\n            self.compare(result_rows[i]['embeddings'], result[index][i]['entity']['embeddings'])\n\n        result = self.milvus_client.search(self.collection_name, vectors_to_search, limit=3, output_fields=[\n            \"pk\", \"num\", \"embeddings\"], search_params=search_params, offset=2)\n        self.assertEqual(len(result[0]), 0)\n        self.assertEqual(len(result[1]), 0)\n        index = 2\n        self.assertEqual(len(result[index]), 1)\n        self.assertEqual([item['entity']['num'] for item in result[index]], [1])\n        self.assertEqual([item['distance'] for item in result[index]], [0.09121885895729065])\n        result_rows = [rows[1]]\n        for i in range(len(result[index])):\n            self.compare(result_rows[i]['embeddings'], result[index][i]['entity']['embeddings'])\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "tests/testcases/test_collection.py",
    "content": "import random\n\nimport numpy\nimport pandas as pd\nimport pytest\n\nfrom pymilvus import DataType\nfrom base.client_base import TestcaseBase\nfrom common import common_func as cf\nfrom common import common_type as ct\nfrom common.common_type import CaseLabel, CheckTasks\nfrom utils.util_pymilvus import *\nfrom utils.util_log import test_log as log\n\nfrom base.high_level_api_wrapper import HighLevelApiWrapper\n\nprefix = \"collection\"\nexp_name = \"name\"\nexp_schema = \"schema\"\nexp_num = \"num_entities\"\nexp_primary = \"primary\"\nexp_shards_num = \"shards_num\"\ndefault_term_expr = f'{ct.default_int64_field_name} in [0, 1]'\ndefault_schema = cf.gen_default_collection_schema()\ndefault_binary_schema = cf.gen_default_binary_collection_schema()\ndefault_shards_num = 1\nuid_count = \"collection_count\"\ntag = \"collection_count_tag\"\nuid_stats = \"get_collection_stats\"\nuid_create = \"create_collection\"\nuid_describe = \"describe_collection\"\nuid_drop = \"drop_collection\"\nuid_has = \"has_collection\"\nuid_list = \"list_collections\"\nuid_load = \"load_collection\"\npartition1 = 'partition1'\npartition2 = 'partition2'\nfield_name = default_float_vec_field_name\ndefault_single_query = {\n    \"data\": gen_vectors(1, default_dim),\n    \"anns_field\": default_float_vec_field_name,\n    \"param\": {\"metric_type\": \"L2\", \"params\": {\"nprobe\": 10}},\n    \"limit\": default_top_k,\n}\n\ndefault_index_params = {\"index_type\": \"HNSW\", \"metric_type\": \"L2\", \"params\": {\"M\": 48, \"efConstruction\": 500}}\ndefault_binary_index_params = {\"index_type\": \"BIN_FLAT\", \"metric_type\": \"JACCARD\", \"params\": {\"nlist\": 64}}\ndefault_nq = ct.default_nq\ndefault_search_exp = \"int64 >= 0\"\ndefault_limit = ct.default_limit\nvectors = [[random.random() for _ in range(default_dim)] for _ in range(default_nq)]\ndefault_search_field = ct.default_float_vec_field_name\ndefault_search_params = ct.default_search_params\nmax_vector_field_num = ct.max_vector_field_num\nsparse_vector_data_type = \"SPARSE_FLOAT_VECTOR\"\nclient_w = HighLevelApiWrapper()\ndefault_dim = ct.default_dim\n\n\nclass TestCollectionParams(TestcaseBase):\n    \"\"\" Test case of collection interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=ct.get_invalid_strs)\n    def get_none_removed_invalid_strings(self, request):\n        if request.param is None:\n            pytest.skip(\"None schema is valid\")\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=ct.get_invalid_type_fields)\n    def get_invalid_type_fields(self, request):\n        if isinstance(request.param, list):\n            pytest.skip(\"list is valid fields\")\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=cf.gen_all_type_fields())\n    def get_unsupported_primary_field(self, request):\n        if request.param.dtype == DataType.INT64 or request.param.dtype == DataType.VARCHAR:\n            pytest.skip(\"int64 type is valid primary key\")\n        yield request.param\n\n    @pytest.fixture(scope=\"function\", params=ct.get_invalid_strs)\n    def get_invalid_dim(self, request):\n        if request.param == 1:\n            pytest.skip(\"1 is valid dim\")\n        yield request.param\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with default schema\n        method: create collection with default schema\n        expected: assert collection property\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        self.collection_wrap.init_collection(c_name, schema=default_schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: default_schema, exp_num: 0,\n                                                          exp_primary: ct.default_int64_field_name})\n        assert c_name in self.utility_wrap.list_collections()[0]\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_empty_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with empty name\n        method: create collection with an empty name\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_local_api=enable_milvus_local_api)\n        c_name = \"\"\n        error = {ct.err_code: 1, ct.err_msg: f'`collection_name` value is illegal'}\n        client_w.create_collection(client, c_name, default_dim, schema=default_schema,\n                                   check_task=CheckTasks.err_res,\n                                   check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\", [[], 1, [1, \"2\", 3], (1,), {1: 1}, \"qw$_o90\", \"1ns_\", None])\n    def test_collection_illegal_name(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with illegal name\n        method: create collection with illegal name\n        expected: raise exception\n        \"\"\"\n        client = self._connect(enable_milvus_local_api=enable_milvus_local_api)\n        error1 = {ct.err_code: 1, ct.err_msg: \"`collection_name` value {} is illegal\".format(name)}\n        error2 = {ct.err_code: 1100, ct.err_msg: \"Invalid collection name: 1ns_. the first character of a\"\n                                                 \" collection name must be an underscore or letter: invalid\"\n                                                 \" parameter\".format(name)}\n        error = error1 if name not in [\"1ns_\", \"qw$_o90\"] else error2\n        client_w.create_collection(client, name, default_dim, schema=default_schema, check_task=CheckTasks.err_res,\n                                             check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\", [\"_co11ection\", \"co11_ection\"])\n    def test_collection_naming_rules(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with valid name\n        method: 1. connect milvus\n                2. Create a field with a name which uses all the supported elements in the naming rules\n                3. Create a collection with a name which uses all the supported elements in the naming rules\n        expected: Collection created successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fields = [cf.gen_int64_field(), cf.gen_int64_field(\"_1nt\"), cf.gen_float_vec_field(\"f10at_\")]\n        schema = cf.gen_collection_schema(fields=fields, primary_field=ct.default_int64_field_name)\n        self.collection_wrap.init_collection(name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"\".join(\"a\" for i in range(ct.max_name_length + 1))])\n    def test_collection_invalid_name(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid name\n        method: create collection with invalid name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 1, ct.err_msg: \"Invalid collection name: {}\".format(name)}\n        self.collection_wrap.init_collection(name, schema=default_schema, check_task=CheckTasks.err_res,\n                                             check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection_dup_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name\n        method: create collection with dup name and none schema and data\n        expected: collection properties consistent\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        self.collection_wrap.init_collection(collection_w.name)\n        assert collection_w.name == self.collection_wrap.name\n        assert collection_w.schema == self.collection_wrap.schema\n        assert collection_w.num_entities == self.collection_wrap.num_entities\n        assert collection_w.name in self.utility_wrap.list_collections()[0]\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_dup_name_with_desc(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name\n        method: 1. default schema with desc 2. dup name collection\n        expected: desc consistent\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_default_collection_schema(description=ct.collection_desc)\n        collection_w = self.init_collection_wrap(name=c_name, schema=schema,\n                                                 check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: schema})\n        self.collection_wrap.init_collection(c_name,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n        assert collection_w.description == self.collection_wrap.description\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_dup_name_new_schema(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name and new schema\n        method: 1.create collection with default schema\n                2. collection with dup name and new schema\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                  check_items={exp_name: c_name, exp_schema: default_schema})\n        fields = [cf.gen_int64_field(is_primary=True)]\n        schema = cf.gen_collection_schema(fields=fields)\n        error = {ct.err_code: 0, ct.err_msg: \"The collection already exist, but the schema is not the same as the \"\n                                             \"schema passed in.\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_dup_name_new_primary(self,enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name and new primary_field schema\n        method: 1.collection with default schema\n                2. collection with same fields and new primary_field schema\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_field_one = cf.gen_int64_field()\n        int_field_two = cf.gen_int64_field(name=\"int2\")\n        fields = [int_field_one, int_field_two, cf.gen_float_vec_field()]\n        schema = cf.gen_collection_schema(fields, primary_field=int_field_one.name)\n        collection_w = self.init_collection_wrap(name=c_name, schema=schema,\n                                                 check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: schema,\n                                                              exp_primary: int_field_one.name})\n        new_schema = cf.gen_collection_schema(fields, primary_field=int_field_two.name)\n        error = {ct.err_code: 0, ct.err_msg: \"The collection already exist, but the schema is not the same as the \"\n                                             \"schema passed in.\"}\n        self.collection_wrap.init_collection(c_name, schema=new_schema, check_task=CheckTasks.err_res,\n                                             check_items=error)\n        assert collection_w.primary_field.name == int_field_one.name\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_dup_name_new_dim(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name and new dim schema\n        method: 1. default schema 2. schema with new dim\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        new_dim = 120\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        schema = cf.gen_default_collection_schema()\n        new_fields = cf.gen_float_vec_field(dim=new_dim)\n        schema.fields[-1] = new_fields\n        error = {ct.err_code: 0, ct.err_msg: \"The collection already exist, but the schema is not the same as the \"\n                                             \"schema passed in.\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n        dim = collection_w.schema.fields[-1].params['dim']\n        assert dim == ct.default_dim\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_dup_name_invalid_schema_type(self, get_none_removed_invalid_strings, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name and invalid schema\n        method: 1. default schema 2. invalid schema\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        error = {ct.err_code: 0, ct.err_msg: \"Schema type must be schema.CollectionSchema\"}\n        schema = get_none_removed_invalid_strings\n        self.collection_wrap.init_collection(collection_w.name, schema=schema,\n                                             check_task=CheckTasks.err_res, check_items=error)\n        assert collection_w.name == c_name\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_dup_name_same_schema(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name and same schema\n        method: dup name and same schema\n        expected: two collection object is available\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, schema=default_schema,\n                                                 check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        self.collection_wrap.init_collection(name=c_name, schema=default_schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: default_schema})\n        assert collection_w.name == self.collection_wrap.name\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_none_schema(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with none schema\n        method: create collection with none schema\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        error = {ct.err_code: 1, ct.err_msg: \"Collection '%s' not exist, or you can pass in schema to create one.\"}\n        self.collection_wrap.init_collection(c_name, schema=None, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_invalid_type_schema(self, get_none_removed_invalid_strings, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid schema\n        method: create collection with non-CollectionSchema type schema\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        error = {ct.err_code: 0, ct.err_msg: \"Schema type must be schema.CollectionSchema\"}\n        self.collection_wrap.init_collection(c_name, schema=get_none_removed_invalid_strings,\n                                             check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_invalid_type_fields(self, get_invalid_type_fields, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid fields type, non-list\n        method: create collection schema with non-list invalid fields\n        expected: exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fields = get_invalid_type_fields\n        error = {ct.err_code: 1, ct.err_msg: \"The fields of schema must be type list.\"}\n        self.collection_schema_wrap.init_collection_schema(fields=fields,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_with_unknown_type(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with unknown type\n        method: create with DataType.UNKNOWN\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 1, ct.err_msg: \"Field dtype must be of DataType\"}\n        self.field_schema_wrap.init_field_schema(name=\"unknown\", dtype=DataType.UNKNOWN,\n                                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\", [[], 1, (1,), {1: 1}, \"12-s\"])\n    @pytest.mark.xfail(reason=\"incorrect error code: 1701 - 1100\")\n    def test_collection_invalid_type_field(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid field name\n        method: invalid string name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        field, _ = self.field_schema_wrap.init_field_schema(name=name, dtype=5, is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        schema = cf.gen_collection_schema(fields=[field, vec_field])\n        error = {ct.err_code: 1701, ct.err_msg: f\"bad argument type for built-in\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    def test_collection_invalid_field_name(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid field name\n        method: invalid string name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        field, _ = self.field_schema_wrap.init_field_schema(name=name, dtype=DataType.INT64, is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        schema = cf.gen_collection_schema(fields=[field, vec_field])\n        error = {ct.err_code: 1, ct.err_msg: \"Invalid field name\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"incorrect error code: 1701 - 1100\")\n    def test_collection_none_field_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test field schema with None name\n        method: None field name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        field, _ = self.field_schema_wrap.init_field_schema(name=None, dtype=DataType.INT64, is_primary=True)\n        schema = cf.gen_collection_schema(fields=[field, cf.gen_float_vec_field()])\n        error = {ct.err_code: 1701, ct.err_msg: \"field name should not be empty\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"dtype\", [6, [[]], {}, (), \"\", \"a\"])\n    def test_collection_invalid_field_type(self, dtype, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid field type\n        method: invalid DataType\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 0, ct.err_msg: \"Field dtype must be of DataType\"}\n        self.field_schema_wrap.init_field_schema(name=\"test\", dtype=dtype, is_primary=True,\n                                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"incorrect error message\")\n    def test_collection_field_dtype_float_value(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with float type\n        method: create field with float type\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        field, _ = self.field_schema_wrap.init_field_schema(name=ct.default_int64_field_name, dtype=5.0,\n                                                            is_primary=True)\n        schema = cf.gen_collection_schema(fields=[field, cf.gen_float_vec_field()])\n        error = {ct.err_code: 0, ct.err_msg: \"Field type must be of DataType!\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_empty_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with empty fields\n        method: create collection with fields = []\n        expected: exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 1, ct.err_msg: \"Schema must have a primary key field.\"}\n        self.collection_schema_wrap.init_collection_schema(fields=[], primary_field=ct.default_int64_field_name,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.xfail(reason=\"incorrect error code:1100\")\n    def test_collection_dup_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup field name\n        method: Two FieldSchema have same name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        field_one = cf.gen_int64_field(is_primary=True)\n        field_two = cf.gen_int64_field()\n        schema = cf.gen_collection_schema(fields=[field_one, field_two, cf.gen_float_vec_field()])\n        error = {ct.err_code: 1, ct.err_msg: \"duplicated field name\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n        assert not self.utility_wrap.has_collection(c_name)[0]\n\n    @pytest.mark.tags(CaseLabel.L0)\n    @pytest.mark.parametrize(\"field\", [cf.gen_float_vec_field(), cf.gen_binary_vec_field()])\n    def test_collection_only_vector_field(self, field, enable_milvus_local_api):\n        \"\"\"\n        target: test collection just with vec field\n        method: create with float-vec fields\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 1, ct.err_msg: \"Schema must have a primary key field.\"}\n        self.collection_schema_wrap.init_collection_schema([field], check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_multi_float_vectors(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with multi float vectors\n        method: create collection with two float-vec fields\n        expected: Collection created successfully\n        \"\"\"\n        # 1. connect\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        # 2. create collection with multiple vectors\n        c_name = cf.gen_unique_str(prefix)\n        fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_field(),\n                  cf.gen_float_vec_field(dim=default_dim), cf.gen_float_vec_field(name=\"tmp\", dim=default_dim)]\n        schema = cf.gen_collection_schema(fields=fields)\n        self.collection_wrap.init_collection(c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_mix_vectors(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with mix vectors\n        method: create with float and binary vec\n        expected: Collection created successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_vec_field(), cf.gen_binary_vec_field()]\n        schema = cf.gen_collection_schema(fields=fields, auto_id=True)\n        self.collection_wrap.init_collection(c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection_without_vectors(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection without vectors\n        method: create collection only with int field\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_collection_schema([cf.gen_int64_field(is_primary=True)])\n        error = {ct.err_code: 0, ct.err_msg: \"No vector field is found.\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_without_primary_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection without primary field\n        method: no primary field specified in collection schema and fields\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_fields, _ = self.field_schema_wrap.init_field_schema(name=ct.default_int64_field_name, dtype=DataType.INT64)\n        vec_fields, _ = self.field_schema_wrap.init_field_schema(name=ct.default_float_vec_field_name,\n                                                                 dtype=DataType.FLOAT_VECTOR, dim=ct.default_dim)\n        error = {ct.err_code: 1, ct.err_msg: \"Schema must have a primary key field.\"}\n        self.collection_schema_wrap.init_collection_schema([int_fields, vec_fields],\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_is_primary_false(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with all is_primary false\n        method: set all fields if_primary false\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fields = [cf.gen_int64_field(is_primary=False), cf.gen_float_field(is_primary=False),\n                  cf.gen_float_vec_field(is_primary=False)]\n        error = {ct.err_code: 1, ct.err_msg: \"Schema must have a primary key field.\"}\n        self.collection_schema_wrap.init_collection_schema(fields, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"is_primary\", ct.get_invalid_strs)\n    def test_collection_invalid_is_primary(self, is_primary, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid primary\n        method: define field with is_primary=non-bool\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        name = cf.gen_unique_str(prefix)\n        error = {ct.err_code: 0, ct.err_msg: \"Param is_primary must be bool type\"}\n        self.field_schema_wrap.init_field_schema(name=name, dtype=DataType.INT64, is_primary=is_primary,\n                                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    def test_collection_invalid_primary_field(self, primary_field, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid primary_field\n        method: specify invalid string primary_field in collection schema\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fields = [cf.gen_int64_field(), cf.gen_float_vec_field()]\n        error = {ct.err_code: 1, ct.err_msg: \"Schema must have a primary key field.\"}\n        self.collection_schema_wrap.init_collection_schema(fields=fields, primary_field=primary_field,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [[], 1, [1, \"2\", 3], (1,), {1: 1}, None])\n    def test_collection_non_string_primary_field(self, primary_field, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with non-string primary_field\n        method: primary_field type is not string\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fields = [cf.gen_int64_field(), cf.gen_float_vec_field()]\n        error = {ct.err_code: 1, ct.err_msg: \"Param primary_field must be str type.\"}\n        self.collection_schema_wrap.init_collection_schema(fields, primary_field=primary_field,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_not_existed_primary_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with not exist primary field\n        method: specify not existed field as primary_field\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fake_field = cf.gen_unique_str()\n        fields = [cf.gen_int64_field(), cf.gen_float_vec_field()]\n        error = {ct.err_code: 1, ct.err_msg: \"Schema must have a primary key field.\"}\n\n        self.collection_schema_wrap.init_collection_schema(fields, primary_field=fake_field,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection_primary_in_schema(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with primary field\n        method: specify primary field in CollectionSchema\n        expected: collection.primary_field\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_default_collection_schema(primary_field=ct.default_int64_field_name)\n        self.collection_wrap.init_collection(c_name, schema=schema)\n        assert self.collection_wrap.primary_field.name == ct.default_int64_field_name\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection_primary_in_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with primary field\n        method: specify primary field in FieldSchema\n        expected: collection.primary_field\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_field(), cf.gen_float_vec_field()]\n        schema, _ = self.collection_schema_wrap.init_collection_schema(fields)\n        self.collection_wrap.init_collection(cf.gen_unique_str(prefix), schema=schema)\n        assert self.collection_wrap.primary_field.name == ct.default_int64_field_name\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_unsupported_primary_field(self, get_unsupported_primary_field, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with unsupported primary field type\n        method: specify non-int64 as primary field\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        field = get_unsupported_primary_field\n        vec_field = cf.gen_float_vec_field(name=\"vec\")\n        error = {ct.err_code: 1, ct.err_msg: \"Primary key type must be DataType.INT64 or DataType.VARCHAR.\"}\n        self.collection_schema_wrap.init_collection_schema(fields=[field, vec_field], primary_field=field.name,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_multi_primary_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with multi primary\n        method: collection with two primary fields\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field_one = cf.gen_int64_field(is_primary=True)\n        int_field_two = cf.gen_int64_field(name=\"int2\", is_primary=True)\n        error = {ct.err_code: 0, ct.err_msg: \"Expected only one primary key field\"}\n        self.collection_schema_wrap.init_collection_schema(\n            fields=[int_field_one, int_field_two, cf.gen_float_vec_field()],\n            check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_primary_inconsistent(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with different primary field setting\n        method: 1. set A field is_primary 2. set primary_field is B\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field_one = cf.gen_int64_field(is_primary=True)\n        int_field_two = cf.gen_int64_field(name=\"int2\")\n        fields = [int_field_one, int_field_two, cf.gen_float_vec_field()]\n        error = {ct.err_code: 1, ct.err_msg: \"Expected only one primary key field\"}\n        self.collection_schema_wrap.init_collection_schema(fields, primary_field=int_field_two.name,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_primary_consistent(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with both collection schema and field schema\n        method: 1. set A field is_primary 2.set primary_field is A\n        expected: verify primary field\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_field_one = cf.gen_int64_field(is_primary=True)\n        schema = cf.gen_collection_schema(fields=[int_field_one, cf.gen_float_vec_field()],\n                                          primary_field=int_field_one.name)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L0)\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    def test_collection_auto_id_in_field_schema(self, auto_id, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with auto_id in field schema\n        method: specify auto_id True in field schema\n        expected: verify schema's auto_id\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_field = cf.gen_int64_field(is_primary=True, auto_id=auto_id)\n        vec_field = cf.gen_float_vec_field(name='vec')\n        schema, _ = self.collection_schema_wrap.init_collection_schema([int_field, vec_field])\n        assert schema.auto_id == auto_id\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L0)\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    def test_collection_auto_id_in_collection_schema(self, auto_id, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with auto_id in collection schema\n        method: specify auto_id True in collection schema\n        expected: verify schema auto_id and collection schema\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field(name='vec')\n        schema, _ = self.collection_schema_wrap.init_collection_schema([int_field, vec_field], auto_id=auto_id)\n        assert schema.auto_id == auto_id\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_auto_id_non_primary_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection set auto_id in non-primary field\n        method: set auto_id=True in non-primary field\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 0, ct.err_msg: \"auto_id can only be specified on the primary key field\"}\n        self.field_schema_wrap.init_field_schema(name=ct.default_int64_field_name, dtype=DataType.INT64, auto_id=True,\n                                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_auto_id_false_non_primary(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection set auto_id in non-primary field\n        method: set auto_id=True in non-primary field\n        expected: verify schema auto_id is False\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field_one = cf.gen_int64_field(is_primary=True)\n        int_field_two = cf.gen_int64_field(name='int2', auto_id=False)\n        fields = [int_field_one, int_field_two, cf.gen_float_vec_field()]\n        schema, _ = self.collection_schema_wrap.init_collection_schema(fields)\n        assert not schema.auto_id\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_auto_id_inconsistent(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection auto_id with both collection schema and field schema\n        method: 1.set primary field auto_id=True in field schema 2.set auto_id=False in collection schema\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field = cf.gen_int64_field(is_primary=True, auto_id=True)\n        vec_field = cf.gen_float_vec_field(name='vec')\n\n        schema, _ = self.collection_schema_wrap.init_collection_schema([int_field, vec_field], auto_id=False)\n        assert schema.auto_id\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    def test_collection_auto_id_consistent(self, auto_id, enable_milvus_local_api):\n        \"\"\"\n        target: test collection auto_id with both collection schema and field schema\n        method: set auto_id=True/False both field and schema\n        expected: verify auto_id\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field = cf.gen_int64_field(is_primary=True, auto_id=auto_id)\n        vec_field = cf.gen_float_vec_field(name='vec')\n        schema, _ = self.collection_schema_wrap.init_collection_schema([int_field, vec_field], auto_id=auto_id)\n        assert schema.auto_id == auto_id\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_auto_id_none_in_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with auto_id is None\n        method: set auto_id=None\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 0, ct.err_msg: \"Param auto_id must be bool type\"}\n        self.field_schema_wrap.init_field_schema(name=ct.default_int64_field_name, dtype=DataType.INT64,\n                                                 is_primary=True,\n                                                 auto_id=None, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"auto_id\", ct.get_invalid_strs)\n    def test_collection_invalid_auto_id(self, auto_id, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid auto_id\n        method: define field with auto_id=non-bool\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field(name='vec')\n        error = {ct.err_code: 0, ct.err_msg: \"Param auto_id must be bool type\"}\n        self.collection_schema_wrap.init_collection_schema([int_field, vec_field], auto_id=auto_id,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_multi_fields_auto_id(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection auto_id with multi fields\n        method: specify auto_id=True for multi int64 fields\n        expected: todo raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 0, ct.err_msg: \"auto_id can only be specified on the primary key field\"}\n        cf.gen_int64_field(is_primary=True, auto_id=True)\n        self.field_schema_wrap.init_field_schema(name=\"int\", dtype=DataType.INT64, auto_id=True,\n                                                 check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"dtype\", [DataType.FLOAT_VECTOR, DataType.BINARY_VECTOR])\n    @pytest.mark.xfail(reason=\"incorrect error code\")\n    def test_collection_vector_without_dim(self, dtype, enable_milvus_local_api):\n        \"\"\"\n        target: test collection without dimension\n        method: define vector field without dim\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        float_vec_field, _ = self.field_schema_wrap.init_field_schema(name=\"vec\", dtype=dtype)\n        schema = cf.gen_collection_schema(fields=[cf.gen_int64_field(is_primary=True), float_vec_field])\n        error = {ct.err_code: 1, ct.err_msg: \"dimension is not defined in field type params\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"issue #29796\")\n    def test_collection_vector_invalid_dim(self, get_invalid_dim, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid dimension\n        method: define float-vec field with invalid dimension\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        float_vec_field = cf.gen_float_vec_field(dim=get_invalid_dim)\n        schema = cf.gen_collection_schema(fields=[cf.gen_int64_field(is_primary=True), float_vec_field])\n        error = {ct.err_code: 65535, ct.err_msg: \"strconv.ParseInt: parsing \\\"[]\\\": invalid syntax\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"dim\", [-1, 0, 32769])\n    @pytest.mark.xfail(reason=\"milvus lite no exception thrown\")\n    def test_collection_vector_out_bounds_dim(self, dim, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with out of bounds dim\n        method: invalid dim -1 and 32759\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        float_vec_field = cf.gen_float_vec_field(dim=dim)\n        schema = cf.gen_collection_schema(fields=[cf.gen_int64_field(is_primary=True), float_vec_field])\n        error = {ct.err_code: 65535, ct.err_msg: \"invalid dimension: {}.\".format(dim)}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_non_vector_field_dim(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dim for non-vector field\n        method: define int64 field with dim\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_field, _ = self.field_schema_wrap.init_field_schema(name=ct.default_int64_field_name, dtype=DataType.INT64,\n                                                                dim=ct.default_dim)\n        float_vec_field = cf.gen_float_vec_field()\n        schema = cf.gen_collection_schema(fields=[int_field, float_vec_field],\n                                          primary_field=ct.default_int64_field_name)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_desc(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with description\n        method: create with description\n        expected: assert default description\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_default_collection_schema(description=ct.collection_desc)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_none_desc(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with none description\n        method: create with none description\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_default_collection_schema(description=None)\n        error = {ct.err_code: 1, ct.err_msg: \"None has type NoneType, but expected one of: bytes, unicode\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_long_desc(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with long desc\n        method: create with long desc\n        expected:\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        desc = \"a\".join(\"a\" for _ in range(256))\n        schema = cf.gen_default_collection_schema(description=desc)\n        self.collection_wrap.init_collection(c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection_binary(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with binary-vec\n        method: create collection with binary field\n        expected: assert binary field\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        self.collection_wrap.init_collection(c_name, schema=default_binary_schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: default_binary_schema})\n        assert c_name in self.utility_wrap.list_collections()[0]\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection_shards_num_with_default_value(self, enable_milvus_local_api):\n        \"\"\"\n        target:test collection with shards_num\n        method:create collection with shards_num\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        self.collection_wrap.init_collection(c_name, schema=default_schema, shards_num=default_shards_num,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_shards_num: default_shards_num})\n        assert c_name in self.utility_wrap.list_collections()[0]\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"shards_num\", [-256, 0, ct.max_shards_num // 2, ct.max_shards_num])\n    def test_collection_shards_num_with_not_default_value(self, shards_num, enable_milvus_local_api):\n        \"\"\"\n        target:test collection with shards_num\n        method:create collection with not default shards_num\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        self.collection_wrap.init_collection(c_name, schema=default_schema, shards_num=shards_num,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_shards_num: shards_num})\n        assert c_name in self.utility_wrap.list_collections()[0]\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"shards_num\", [ct.max_shards_num + 1, 257])\n    def test_collection_shards_num_invalid(self, shards_num, enable_milvus_local_api):\n        \"\"\"\n        target:test collection with invalid shards_num\n        method:create collection with shards_num out of [1, 16]\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        error = {ct.err_code: 1, ct.err_msg: f\"maximum shards's number should be limited to {ct.max_shards_num}\"}\n        self.collection_wrap.init_collection(c_name, schema=default_schema, shards_num=shards_num,\n                                             check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"error_type_shards_num\", [1.0, \"2\"])\n    @pytest.mark.xfail(reason=\"milvus lite no exception thrown\")\n    def test_collection_shards_num_with_error_type(self, error_type_shards_num, enable_milvus_local_api):\n        \"\"\"\n        target:test collection with error type shards_num\n        method:create collection with error type shards_num\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        error = {ct.err_code: 1, ct.err_msg: f\"expected one of: int, long\"}\n        self.collection_wrap.init_collection(c_name, schema=default_schema, shards_num=error_type_shards_num,\n                                             check_task=CheckTasks.err_res,\n                                             check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_create_collection_maximum_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with maximum fields\n        method: create collection with maximum field number\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        limit_num = ct.max_field_num - 2\n        for i in range(limit_num):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_float_vec_field())\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_create_collection_maximum_vector_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: Test create collection with the maximum vector fields (default is 4)\n        method: create collection with the maximum vector field number\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        limit_num = max_vector_field_num\n        for i in range(limit_num):\n            vector_field_name = cf.gen_unique_str(\"vector_field_name\")\n            field = cf.gen_float_vec_field(name=vector_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_key\", [cf.gen_int64_field(is_primary=True), cf.gen_string_field(is_primary=True)])\n    def test_create_collection_multiple_vector_and_maximum_fields(self, primary_key, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields and maximum fields\n        method: create collection with multiple vector fields and maximum fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        vector_limit_num = max_vector_field_num - 2\n        limit_num = ct.max_field_num - 2\n        # add maximum vector fields\n        for i in range(vector_limit_num):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        # add other vector fields to maximum fields num\n        for i in range(limit_num - 2):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_float_vec_field())\n        int_fields.append(primary_key)\n        schema = cf.gen_collection_schema(fields=int_fields)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_key\", [cf.gen_int64_field(is_primary=True), cf.gen_string_field(is_primary=True)])\n    def test_create_collection_maximum_vector_and_all_fields(self, primary_key, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with maximum vector fields and maximum fields\n        method: create collection with maximum vector fields and maximum fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        vector_limit_num = max_vector_field_num\n        limit_num = ct.max_field_num - 2\n        # add maximum vector fields\n        for i in range(vector_limit_num):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        # add other vector fields to maximum fields num\n        for i in range(limit_num - 4):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_float_vec_field())\n        int_fields.append(primary_key)\n        schema = cf.gen_collection_schema(fields=int_fields)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_create_collection_over_maximum_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: Test create collection with more than the maximum fields\n        method: create collection with more than the maximum field number\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        limit_num = ct.max_field_num\n        for i in range(limit_num):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_float_vec_field())\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 1, ct.err_msg: \"maximum field's number should be limited to 64\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite no exception thrown\")\n    def test_create_collection_over_maximum_vector_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: Test create collection with more than the maximum vector fields (default is 4)\n        method: create collection with more than the maximum vector field number\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        limit_num = max_vector_field_num\n        for i in range(limit_num + 1):\n            vector_field_name = cf.gen_unique_str(\"vector_field_name\")\n            field = cf.gen_float_vec_field(name=vector_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 65535, ct.err_msg: \"maximum vector field's number should be limited to 4\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_create_collection_multiple_vector_and_over_maximum_all_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields and over maximum fields\n        method: create collection with multiple vector fields and over maximum fields\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        vector_limit_num = max_vector_field_num - 2\n        limit_num = ct.max_field_num\n        # add multiple vector fields\n        for i in range(vector_limit_num):\n            vector_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_float_vec_field(name=vector_field_name)\n            int_fields.append(field)\n        # add other vector fields to maximum fields num\n        for i in range(limit_num):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        log.debug(len(int_fields))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 65535, ct.err_msg: \"maximum field's number should be limited to 64\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite no exception thrown\")\n    def test_create_collection_over_maximum_vector_and_all_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with over maximum vector fields and maximum fields\n        method: create collection with over maximum vector fields and maximum fields\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        vector_limit_num = max_vector_field_num\n        limit_num = ct.max_field_num - 2\n        # add maximum vector fields\n        for i in range(vector_limit_num + 1):\n            vector_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_float_vec_field(name=vector_field_name)\n            int_fields.append(field)\n        # add other vector fields to maximum fields num\n        for i in range(limit_num - 4):\n            int_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_int64_field(name=int_field_name)\n            int_fields.append(field)\n        int_fields.append(cf.gen_float_vec_field())\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 65535, ct.err_msg: \"maximum field's number should be limited to 64\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_multi_sparse_vectors(self, enable_milvus_local_api):\n        \"\"\"\n        target: Test multiple sparse vectors in a collection\n        method: create 2 sparse vectors in a collection\n        expected: successful creation of a collection\n        \"\"\"\n        # 1. connect\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        # 2. create collection with multiple vectors\n        c_name = cf.gen_unique_str(prefix)\n        fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_field(),\n                  cf.gen_float_vec_field(vector_data_type=sparse_vector_data_type), cf.gen_float_vec_field(name=\"tmp\", vector_data_type=sparse_vector_data_type)]\n        schema = cf.gen_collection_schema(fields=fields)\n        self.collection_wrap.init_collection(c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n\nclass TestCollectionOperation(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test collection interface operations\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_without_connection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection without connection\n        method: 1.create collection after connection removed\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        self.connection_wrap.remove_connection(ct.default_alias)\n        res_list, _ = self.connection_wrap.list_connections()\n        assert ct.default_alias not in res_list\n        error = {ct.err_code: 1, ct.err_msg: 'should create connect first'}\n        self.collection_wrap.init_collection(c_name, schema=default_schema,\n                                             check_task=CheckTasks.err_res, check_items=error)\n        assert self.collection_wrap.collection is None\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_multi_create_drop(self, enable_milvus_local_api):\n        \"\"\"\n        target: test cycle creation and deletion of multiple collections\n        method: in a loop, collections are created and deleted sequentially\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_num = 20\n        for _ in range(c_num):\n            c_name = cf.gen_unique_str(prefix)\n            self.collection_wrap.init_collection(c_name, schema=default_schema,\n                                                 check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n            self.collection_wrap.drop()\n            assert c_name not in self.utility_wrap.list_collections()[0]\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.xfail(reason=\"incorrect error msg\")\n    def test_collection_dup_name_drop(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name, and drop\n        method: 1. two dup name collection object\n                2. one object drop collection\n        expected: collection dropped\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        self.collection_wrap.init_collection(c_name, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: default_schema})\n        self.collection_wrap.drop()\n        assert not self.utility_wrap.has_collection(c_name)[0]\n        error = {ct.err_code: 4, ct.err_msg: 'collection not found'}\n        collection_w.has_partition(\"p\", check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_after_drop(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection after create and drop\n        method: 1. create a 2. drop a 3, re-create a\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        collection_w.drop()\n        assert not self.utility_wrap.has_collection(collection_w.name)[0]\n        self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                  check_items={exp_name: c_name, exp_schema: default_schema})\n        assert self.utility_wrap.has_collection(c_name)[0]\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_all_datatype_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with all dataType fields\n        method: create collection with all dataType schema\n        expected: create successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        fields = []\n        for k, v in DataType.__members__.items():\n            if v and v != DataType.UNKNOWN and v != DataType.STRING \\\n                    and v != DataType.VARCHAR and v != DataType.FLOAT_VECTOR \\\n                    and v != DataType.BINARY_VECTOR and v != DataType.ARRAY \\\n                    and v != DataType.FLOAT16_VECTOR and v != DataType.BFLOAT16_VECTOR:\n                field, _ = self.field_schema_wrap.init_field_schema(name=k.lower(), dtype=v)\n                fields.append(field)\n        fields.append(cf.gen_float_vec_field())\n        schema, _ = self.collection_schema_wrap.init_collection_schema(fields,\n                                                                       primary_field=ct.default_int64_field_name)\n        log.info(schema)\n        c_name = cf.gen_unique_str(prefix)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support partition\")\n    def test_load_collection_after_load_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release the partition after load collection\n        method: load collection and load the partition\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n        partition_w1 = self.init_partition_wrap(collection_w)\n        partition_w1.insert(cf.gen_default_list_data())\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load()\n        partition_w1.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support partition\")\n    def test_load_collection_release_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release the partition after load collection\n        method: load collection and release the partition\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n        partition_w1 = self.init_partition_wrap(collection_w)\n        partition_w1.insert(cf.gen_default_list_data())\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load()\n        partition_w1.release()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_collection_after_release_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release the collection after load collection\n        method: load collection and release the collection\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        # nb = 2000 fail , nb = 1000 success\n        collection_w.insert(cf.gen_default_list_data(nb=1000))\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load()\n        collection_w.release()\n\n\nclass TestCollectionDataframe(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test construct_from_dataframe\n    ******************************************************************\n    \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=ct.get_invalid_strs)\n    def get_non_df(self, request):\n        if request.param is None:\n            pytest.skip(\"skip None\")\n        yield request.param\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_construct_from_dataframe(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dataframe data\n        method: create collection and insert with dataframe\n        expected: collection num entities equal to nb\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = cf.gen_default_dataframe_data(ct.default_nb)\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      check_task=CheckTasks.check_collection_property,\n                                                      check_items={exp_name: c_name, exp_schema: default_schema})\n        # flush\n        assert self.collection_wrap.num_entities == ct.default_nb\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_construct_from_binary_dataframe(self, enable_milvus_local_api):\n        \"\"\"\n        target: test binary collection with dataframe\n        method: create binary collection with dataframe\n        expected: collection num entities equal to nb\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df, _ = cf.gen_default_binary_dataframe_data(nb=ct.default_nb)\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      check_task=CheckTasks.check_collection_property,\n                                                      check_items={exp_name: c_name, exp_schema: default_binary_schema})\n        assert self.collection_wrap.num_entities == ct.default_nb\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_from_none_dataframe(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection by empty dataframe\n        method: invalid dataframe type create collection\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        error = {ct.err_code: 1, ct.err_msg: \"Dataframe can not be None.\"}\n        self.collection_wrap.construct_from_dataframe(c_name, None, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_from_dataframe_only_column(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dataframe only columns\n        method: dataframe only has columns\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = pd.DataFrame(columns=[ct.default_int64_field_name, ct.default_float_vec_field_name])\n        error = {ct.err_code: 0, ct.err_msg: \"Cannot infer schema from empty dataframe\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_from_inconsistent_dataframe(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with data inconsistent\n        method: create and insert with inconsistent data\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        # one field different type df\n        mix_data = [(1, 2., [0.1, 0.2]), (2, 3., 4)]\n        df = pd.DataFrame(data=mix_data, columns=list(\"ABC\"))\n        error = {ct.err_code: 1,\n                 ct.err_msg: \"The Input data type is inconsistent with defined schema, please check it.\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field='A', check_task=CheckTasks.err_res,\n                                                      check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_from_non_dataframe(self, get_non_df, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection by invalid dataframe\n        method: non-dataframe type create collection\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        error = {ct.err_code: 0, ct.err_msg: \"Data type must be pandas.DataFrame.\"}\n        df = get_non_df\n        self.collection_wrap.construct_from_dataframe(c_name, df, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_from_data_type_dataframe(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid dataframe\n        method: create with invalid dataframe\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = pd.DataFrame({\"date\": pd.date_range('20210101', periods=3), ct.default_int64_field_name: [1, 2, 3]})\n        error = {ct.err_code: 0, ct.err_msg: \"Cannot infer schema from empty dataframe.\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_from_invalid_field_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with invalid field name\n        method: create with invalid field name dataframe\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = pd.DataFrame({'%$#': cf.gen_vectors(3, 2), ct.default_int64_field_name: [1, 2, 3]})\n        error = {ct.err_code: 1, ct.err_msg: \"Invalid field name\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_none_primary_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with none primary field\n        method: primary_field is none\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = cf.gen_default_dataframe_data(ct.default_nb)\n        error = {ct.err_code: 0, ct.err_msg: \"Schema must have a primary key field.\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=None,\n                                                      check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_not_existed_primary_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with not existed primary field\n        method: primary field not existed\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = cf.gen_default_dataframe_data(ct.default_nb)\n        error = {ct.err_code: 0, ct.err_msg: \"Primary field must in dataframe.\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=c_name,\n                                                      check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_with_none_auto_id(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with non-int64 as primary field\n        method: non-int64 as primary field\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = cf.gen_default_dataframe_data(ct.default_nb)\n        error = {ct.err_code: 0, ct.err_msg: \"Param auto_id must be bool type\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      auto_id=None, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_construct_auto_id_true_insert(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with true auto_id\n        method: auto_id=True and insert values\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = cf.gen_default_dataframe_data(nb=100)\n        error = {ct.err_code: 0, ct.err_msg: \"Auto_id is True, primary field should not have data.\"}\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      auto_id=True, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_construct_auto_id_true_no_insert(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with true auto_id\n        method: auto_id=True and not insert ids(primary fields all values are None)\n        expected: verify num entities\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = cf.gen_default_dataframe_data()\n        # df.drop(ct.default_int64_field_name, axis=1, inplace=True)\n        df[ct.default_int64_field_name] = None\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      auto_id=True)\n        assert self.collection_wrap.num_entities == ct.default_nb\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_none_value_auto_id_true(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with none value, auto_id\n        method: df primary field with none value, auto_id=true\n        expected: todo\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        nb = 100\n        df = cf.gen_default_dataframe_data(nb)\n        df.iloc[:, 0] = numpy.NaN\n        res, _ = self.collection_wrap.construct_from_dataframe(cf.gen_unique_str(prefix), df,\n                                                               primary_field=ct.default_int64_field_name, auto_id=True)\n        mutation_res = res[1]\n        assert cf._check_primary_keys(mutation_res.primary_keys, 100)\n        assert self.collection_wrap.num_entities == nb\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_construct_auto_id_false(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with false auto_id\n        method: auto_id=False, primary_field correct\n        expected: verify auto_id\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        df = cf.gen_default_dataframe_data(ct.default_nb)\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      auto_id=False)\n        assert not self.collection_wrap.schema.auto_id\n        assert self.collection_wrap.num_entities == ct.default_nb\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_construct_none_value_auto_id_false(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with none value, auto_id\n        method: df primary field with none value, auto_id=false\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        nb = 100\n        df = cf.gen_default_dataframe_data(nb)\n        df.iloc[:, 0] = numpy.NaN\n        error = {ct.err_code: 0, ct.err_msg: \"Primary key type must be DataType.INT64\"}\n        self.collection_wrap.construct_from_dataframe(cf.gen_unique_str(prefix), df,\n                                                      primary_field=ct.default_int64_field_name, auto_id=False,\n                                                      check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_construct_auto_id_false_same_values(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with false auto_id and same value\n        method: auto_id=False, primary field same values\n        expected: verify num entities\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        nb = 100\n        df = cf.gen_default_dataframe_data(nb)\n        df.iloc[1:, 0] = 1\n        res, _ = self.collection_wrap.construct_from_dataframe(cf.gen_unique_str(prefix), df,\n                                                               primary_field=ct.default_int64_field_name, auto_id=False)\n        collection_w = res[0]\n        collection_w.flush()\n        assert collection_w.num_entities == nb\n        mutation_res = res[1]\n        assert mutation_res.primary_keys == df[ct.default_int64_field_name].values.tolist()\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_construct_auto_id_false_negative_values(self, enable_milvus_local_api):\n        \"\"\"\n        target: test construct with negative values\n        method: auto_id=False, primary field values is negative\n        expected: verify num entities\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        nb = 100\n        df = cf.gen_default_dataframe_data(nb)\n        new_values = pd.Series(data=[i for i in range(0, -nb, -1)])\n        df[ct.default_int64_field_name] = new_values\n        self.collection_wrap.construct_from_dataframe(cf.gen_unique_str(prefix), df,\n                                                      primary_field=ct.default_int64_field_name, auto_id=False)\n        assert self.collection_wrap.num_entities == nb\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_construct_from_dataframe_dup_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection with dup name and insert dataframe\n        method: create collection with dup name, none schema, dataframe\n        expected: two collection object is correct\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, primary_field=ct.default_int64_field_name,\n                                                 check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_name: c_name, exp_schema: default_schema})\n        df = cf.gen_default_dataframe_data(ct.default_nb)\n        self.collection_wrap.construct_from_dataframe(c_name, df, primary_field=ct.default_int64_field_name,\n                                                      check_task=CheckTasks.check_collection_property,\n                                                      check_items={exp_name: c_name, exp_schema: default_schema})\n        # flush\n        assert collection_w.num_entities == ct.default_nb\n        assert collection_w.num_entities == self.collection_wrap.num_entities\n\n\nclass TestCollectionCount(TestcaseBase):\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_count_no_vectors(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection rows_count is correct or not, if collection is empty\n        method: create collection and no vectors in it,\n                assert the value returned by num_entities attribute is equal to 0\n        expected: the count is equal to 0\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n        assert collection_w.num_entities == 0\n\n\nclass TestCollectionCountIP(TestcaseBase):\n    \"\"\"\n    params means different nb, the nb value may trigger merge, or not\n    \"\"\"\n\n    @pytest.fixture(\n        scope=\"function\",\n        params=[\n            1,\n            1000\n        ],\n    )\n    def insert_count(self, request):\n        yield request.param\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_count_after_index_created(self, insert_count, enable_milvus_local_api):\n        \"\"\"\n        target: test count_entities, after index have been created\n        method: add vectors in db, and create index, then calling num_entities with correct params\n        expected: count_entities raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n\n        data = cf.gen_default_list_data(insert_count, ct.default_dim)\n        collection_w.insert(data)\n\n        collection_w.create_index(ct.default_float_vec_field_name, default_index_params,\n                                  index_name=ct.default_index_name)\n        assert collection_w.num_entities == insert_count\n\n\nclass TestCollectionCountBinary(TestcaseBase):\n    \"\"\"\n    params means different nb, the nb value may trigger merge, or not\n    \"\"\"\n\n    @pytest.fixture(\n        scope=\"function\",\n        params=[\n            8,\n            1000,\n            2001\n        ],\n    )\n    def insert_count(self, request):\n        yield request.param\n\n    # TODO: need to update and enable\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_count_after_index_created_binary(self, insert_count, enable_milvus_local_api):\n        \"\"\"\n        target: test num_entities, after index have been created\n        method: add vectors in db, and create binary index, then calling num_entities with correct params\n        expected: num_entities equals entities count just inserted\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, schema=default_binary_schema)\n        df, _ = cf.gen_default_binary_dataframe_data(insert_count)\n        mutation_res, _ = collection_w.insert(data=df)\n        collection_w.create_index(ct.default_binary_vec_field_name, default_binary_index_params)\n        assert collection_w.num_entities == insert_count\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    @pytest.mark.xfail(reason=\"incorrect error code: 2000\")\n    def test_binary_collection_with_min_dim(self, auto_id, enable_milvus_local_api):\n        \"\"\"\n        target: test binary collection when dim=1\n        method: creat collection and set dim=1\n        expected: check error message successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        dim = ct.min_dim\n        c_schema = cf.gen_default_binary_collection_schema(auto_id=auto_id, dim=dim)\n        collection_w = self.init_collection_wrap(schema=c_schema,\n                                                 check_task=CheckTasks.err_res,\n                                                 check_items={\"err_code\": 1,\n                                                              \"err_msg\": f\"invalid dimension: {dim}. binary vector dimension should be multiple of 8.\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_count_no_entities(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection num_entities is correct or not, if collection is empty\n        method: create collection and no vectors in it,\n                assert the value returned by num_entities method is equal to 0\n        expected: the count is equal to 0\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, schema=default_binary_schema)\n        assert collection_w.num_entities == 0\n\n\nclass TestCollectionMultiCollections(TestcaseBase):\n    \"\"\"\n    params means different nb, the nb value may trigger merge, or not\n    \"\"\"\n\n    @pytest.fixture(\n        scope=\"function\",\n        params=[\n            1,\n            1000,\n            2001\n        ],\n    )\n    def insert_count(self, request):\n        yield request.param\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_collection_count_multi_collections_l2(self, insert_count, enable_milvus_local_api):\n        \"\"\"\n        target: test collection rows_count is correct or not with multiple collections of L2\n        method: create collection and add entities in it,\n                assert the value returned by num_entities is equal to length of entities\n        expected: the count is equal to the length of entities\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        data = cf.gen_default_list_data(insert_count)\n        collection_list = []\n        collection_num = 10\n        for i in range(collection_num):\n            collection_name = gen_unique_str(uid_count)\n            collection_w = self.init_collection_wrap(name=collection_name)\n            collection_w.insert(data)\n            collection_list.append(collection_name)\n        for i in range(collection_num):\n            res, _ = self.collection_wrap.init_collection(collection_list[i])\n            assert self.collection_wrap.num_entities == insert_count\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_count_multi_collections_binary(self, insert_count, enable_milvus_local_api):\n        \"\"\"\n        target: test collection rows_count is correct or not with multiple collections of JACCARD\n        method: create collection and add entities in it,\n                assert the value returned by count_entities method is equal to length of entities\n        expected: the count is equal to the length of entities\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        df, _ = cf.gen_default_binary_dataframe_data(insert_count)\n        collection_list = []\n        collection_num = 20\n        for i in range(collection_num):\n            c_name = cf.gen_unique_str(prefix)\n            collection_w = self.init_collection_wrap(name=c_name, schema=default_binary_schema)\n            mutation_res, _ = collection_w.insert(data=df)\n            collection_list.append(c_name)\n        for i in range(collection_num):\n            res, _ = self.collection_wrap.init_collection(collection_list[i])\n            assert self.collection_wrap.num_entities == insert_count\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_count_multi_collections_mix(self, enable_milvus_local_api):\n        \"\"\"\n        target: test collection rows_count is correct or not with multiple collections of\n        method: create collection and add entities in it,\n                assert the value returned by count_entities method is equal to length of entities\n        expected: the count is equal to the length of entities\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_list = []\n        collection_num = 20\n        data = cf.gen_default_list_data()\n        df, _ = cf.gen_default_binary_dataframe_data(ct.default_nb)\n        for i in range(0, int(collection_num / 2)):\n            collection_name = gen_unique_str(uid_count)\n            collection_w = self.init_collection_wrap(name=collection_name)\n            collection_w.insert(data)\n            collection_list.append(collection_name)\n        for i in range(int(collection_num / 2), collection_num):\n            c_name = cf.gen_unique_str(prefix)\n            collection_w = self.init_collection_wrap(name=c_name, schema=default_binary_schema)\n            mutation_res, _ = collection_w.insert(data=df)\n            collection_list.append(c_name)\n        for i in range(collection_num):\n            res, _ = self.collection_wrap.init_collection(collection_list[i])\n            assert self.collection_wrap.num_entities == ct.default_nb\n\n\nclass TestCreateCollection(TestcaseBase):\n\n    @pytest.fixture(scope=\"function\", params=[False, True])\n    def auto_id(self, request):\n        yield request.param\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_create_collection_multithread(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multi-thread\n        method: create collection using multi-thread,\n        expected: collections are created\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        threads_num = 8\n        threads = []\n        collection_names = []\n\n        def create():\n            collection_name = gen_unique_str(uid_create)\n            collection_names.append(collection_name)\n            self.init_collection_wrap(name=collection_name)\n\n        for i in range(threads_num):\n            t = MyThread(target=create, args=())\n            threads.append(t)\n            t.start()\n            time.sleep(0.2)\n        for t in threads:\n            t.join()\n\n        for item in collection_names:\n            assert item in self.utility_wrap.list_collections()[0]\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(\"not support default_value now\")\n    def test_create_collection_using_default_value(self, auto_id):\n        \"\"\"\n        target: test create collection with default_value\n        method: create a schema with all fields using default value\n        expected: collections are created\n        \"\"\"\n        fields = [\n            cf.gen_int64_field(name='pk', is_primary=True),\n            cf.gen_float_vec_field(),\n            cf.gen_int8_field(default_value=numpy.int8(8)),\n            cf.gen_int16_field(default_value=numpy.int16(16)),\n            cf.gen_int32_field(default_value=numpy.int32(32)),\n            cf.gen_int64_field(default_value=numpy.int64(64)),\n            cf.gen_float_field(default_value=numpy.float32(3.14)),\n            cf.gen_double_field(default_value=numpy.double(3.1415)),\n            cf.gen_bool_field(default_value=False),\n            cf.gen_string_field(default_value=\"abc\")\n        ]\n        schema = cf.gen_collection_schema(fields, auto_id=auto_id)\n        self.init_collection_wrap(schema=schema,\n                                  check_task=CheckTasks.check_collection_property,\n                                  check_items={\"schema\": schema})\n\n\nclass TestCreateCollectionInvalid(TestcaseBase):\n    \"\"\"\n    Test creating collections with invalid params\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite no exception thrown\")\n    def test_create_collection_limit_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with maximum fields\n        method: create collection with maximum field number\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        limit_num = ct.max_field_num\n        field_schema_list = []\n        field_pr = cf.gen_int64_field(ct.default_int64_field_name, is_primary=True)\n        field_v = cf.gen_float_vec_field(ct.default_float_vec_field_name)\n        field_schema_list.append(field_pr)\n        field_schema_list.append(field_v)\n\n        for i in range(limit_num):\n            field_name_tmp = gen_unique_str(\"field_name\")\n            field_schema_temp = cf.gen_int64_field(field_name_tmp)\n            field_schema_list.append(field_schema_temp)\n        error = {ct.err_code: 65535, ct.err_msg: \"maximum field's number should be limited to 64\"}\n        schema, _ = self.collection_schema_wrap.init_collection_schema(fields=field_schema_list)\n        self.init_collection_wrap(name=c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"invalid_name\", [\"中文\", \"español\", \"عربي\", \"हिंदी\", \"Русский\"])\n    def test_create_schema_with_different_language(self, invalid_name):\n        \"\"\"\n        target: test create collection with maximum fields\n        method: create collection with maximum field number\n        expected: raise exception\n        \"\"\"\n        fields = [cf.gen_int64_field(is_primary=True), cf.gen_float_vec_field(),\n                  cf.gen_string_field(name=invalid_name)]\n        schema = cf.gen_collection_schema(fields)\n        self.init_collection_wrap(schema=schema,\n                                  check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 1701,\n                                               ct.err_msg: \"Invalid field name: %s\" % invalid_name})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"invalid_name\", [\"中文\", \"español\", \"عربي\", \"हिंदी\", \"Русский\"])\n    @pytest.mark.xfail(reason=\"error msg\")\n    def test_create_collection_with_different_language(self, invalid_name):\n        \"\"\"\n        target: test create collection with maximum fields\n        method: create collection with maximum field number\n        expected: raise exception\n        \"\"\"\n        schema = cf.gen_default_collection_schema()\n        self.init_collection_wrap(name=invalid_name, schema=schema,\n                                  check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 1100,\n                                               ct.err_msg: \"Invalid collection name: %s\" % invalid_name})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"default_value\", [\"abc\"])\n    @pytest.mark.skip(reason=\"issue #24634\")\n    def test_create_collection_with_invalid_default_value_string(self, default_value):\n        \"\"\"\n        target: test create collection with maximum fields\n        method: create collection with maximum field number\n        expected: raise exception\n        \"\"\"\n        fields = [\n            cf.gen_int64_field(name='pk', is_primary=True),\n            cf.gen_float_vec_field(),\n            cf.gen_string_field(max_length=2, default_value=default_value)\n        ]\n        schema = cf.gen_collection_schema(fields)\n        self.init_collection_wrap(schema=schema,\n                                  check_task=CheckTasks.check_collection_property,\n                                  check_items={\"schema\": schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"not support default_value now\")\n    @pytest.mark.parametrize(\"default_value\", [\"abc\", 9.09, 1, False])\n    def test_create_collection_with_invalid_default_value_float(self, default_value):\n        \"\"\"\n        target: test create collection with maximum fields\n        method: create collection with maximum field number\n        expected: raise exception\n        \"\"\"\n        fields = [\n            cf.gen_int64_field(name='pk', is_primary=True),\n            cf.gen_float_vec_field(),\n            cf.gen_float_field(default_value=default_value)\n        ]\n        schema = cf.gen_collection_schema(fields)\n        self.init_collection_wrap(schema=schema, check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 1,\n                                               ct.err_msg: \"default value type mismatches field schema type\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"not support default_value now\")\n    @pytest.mark.parametrize(\"default_value\", [\"abc\", 9.09, 1, False])\n    def test_create_collection_with_invalid_default_value_int8(self, default_value):\n        \"\"\"\n        target: test create collection with maximum fields\n        method: create collection with maximum field number\n        expected: raise exception\n        \"\"\"\n        fields = [\n            cf.gen_int64_field(name='pk', is_primary=True),\n            cf.gen_float_vec_field(),\n            cf.gen_int8_field(default_value=default_value)\n        ]\n        schema = cf.gen_collection_schema(fields)\n        self.init_collection_wrap(schema=schema, check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 1,\n                                               ct.err_msg: \"default value type mismatches field schema type\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"not support default_value now\")\n    def test_create_collection_with_pk_field_using_default_value(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with pk field using default value\n        method: create a pk field and set default value\n        expected: report error\n        \"\"\"\n        # 1. pk int64\n        fields = [\n            cf.gen_int64_field(name='pk', is_primary=True, default_value=np.int64(1)),\n            cf.gen_float_vec_field(), cf.gen_string_field(max_length=2)\n        ]\n        schema = cf.gen_collection_schema(fields)\n        collection_w = self.init_collection_wrap(schema=schema)\n        collection_w.insert([[], [vectors[0]], [\"a\"]],\n                            check_task=CheckTasks.err_res,\n                            check_items={ct.err_code: 1,\n                                         ct.err_msg: \"pk field schema can not set default value\"})\n        # 2. pk string\n        fields = [\n            cf.gen_string_field(name='pk', is_primary=True, default_value=\"a\"),\n            cf.gen_float_vec_field(), cf.gen_string_field(max_length=2)\n        ]\n        schema = cf.gen_collection_schema(fields)\n        collection_w = self.init_collection_wrap(schema=schema)\n        collection_w.insert([[], [vectors[0]], [\"a\"]],\n                            check_task=CheckTasks.err_res,\n                            check_items={ct.err_code: 1,\n                                         ct.err_msg: \"pk field schema can not set default value\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"not support default_value now\")\n    def test_create_collection_with_json_field_using_default_value(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with json field using default value\n        method: create a json field and set default value\n        expected: report error\n        \"\"\"\n        json_default_value = {\"number\": 1, \"float\": 2.0, \"string\": \"abc\", \"bool\": True,\n                              \"list\": [i for i in range(5)]}\n        cf.gen_json_field(default_value=json_default_value,\n                          check_task=CheckTasks.err_res,\n                          check_items={ct.err_code: 1,\n                                       ct.err_msg: \"Default value unsupported data type: 999\"})\n\n\nclass TestDropCollection(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test `drop_collection` function\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_drop_collection_A(self, enable_milvus_local_api):\n        \"\"\"\n        target: test delete collection created with correct params\n        method: create collection and then delete,\n                assert the value returned by delete method\n        expected: status ok, and no collection in collections\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.drop()\n        assert not self.utility_wrap.has_collection(c_name)[0]\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_drop_collection_without_connection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test describe collection, without connection\n        method: drop collection with correct params, with a disconnected instance\n        expected: drop raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_wr = self.init_collection_wrap(c_name)\n        self.connection_wrap.remove_connection(ct.default_alias)\n        res_list, _ = self.connection_wrap.list_connections()\n        assert ct.default_alias not in res_list\n        error = {ct.err_code: 1, ct.err_msg: 'should create connect first'}\n        collection_wr.drop(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_drop_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test if collection not created\n        method: random a collection name, which not existed in db,\n                assert the exception raised returned by drp_collection method\n        expected: False\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        self.init_collection_wrap(name=c_name)\n        c_name_2 = cf.gen_unique_str()\n        # error = {ct.err_code: 0, ct.err_msg: 'DescribeCollection failed: collection not found: %s' % c_name_2}\n        # self.utility_wrap.drop_collection(c_name_2, check_task=CheckTasks.err_res, check_items=error)\n        # @longjiquan: dropping collection should be idempotent.\n        self.utility_wrap.drop_collection(c_name_2)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_create_drop_collection_multithread(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create and drop collection with multi-thread\n        method: create and drop collection using multi-thread,\n        expected: collections are created, and dropped\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        threads_num = 8\n        threads = []\n        collection_names = []\n\n        def create():\n            c_name = cf.gen_unique_str()\n            collection_names.append(c_name)\n            collection_wr = self.init_collection_wrap(name=c_name)\n            collection_wr.drop()\n\n        for i in range(threads_num):\n            t = MyThread(target=create, args=())\n            threads.append(t)\n            t.start()\n            time.sleep(0.2)\n        for t in threads:\n            t.join()\n\n        for item in collection_names:\n            assert not self.utility_wrap.has_collection(item)[0]\n\n\nclass TestDropCollectionInvalid(TestcaseBase):\n    \"\"\"\n    Test drop collection with invalid params\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    def test_drop_collection_with_invalid_collection_name(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test drop invalid collection\n        method: drop collection with invalid collection name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 1, ct.err_msg: \"Invalid collection name: {}\".format(name)}\n        self.utility_wrap.drop_collection(name, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_drop_collection_with_empty_or_None_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test drop invalid collection\n        method: drop collection with empty or None collection name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: -1, ct.err_msg: '`collection_name` value  is illegal'}\n        self.utility_wrap.drop_collection('', check_task=CheckTasks.err_res, check_items=error)\n        error_none = {ct.err_code: -1, ct.err_msg: '`collection_name` value None is illegal'}\n        self.utility_wrap.drop_collection(None, check_task=CheckTasks.err_res, check_items=error_none)\n\n\nclass TestHasCollection(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test `has_collection` function\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_has_collection_without_connection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test has collection, without connection\n        method: calling has collection with correct params, with a disconnected instance\n        expected: has collection raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        self.init_collection_wrap(c_name)\n        self.connection_wrap.remove_connection(ct.default_alias)\n        res_list, _ = self.connection_wrap.list_connections()\n        assert ct.default_alias not in res_list\n        error = {ct.err_code: 1, ct.err_msg: 'should create connect first'}\n        self.utility_wrap.has_collection(c_name, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_has_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test if collection not created\n        method: random a collection name, create this collection then drop it,\n                assert the value returned by has_collection method\n        expected: False\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.drop()\n        assert not self.utility_wrap.has_collection(c_name)[0]\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_has_collection_multithread(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multi-thread\n        method: create collection using multi-thread,\n        expected: collections are created\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        threads_num = 4\n        threads = []\n        c_name = cf.gen_unique_str()\n        self.init_collection_wrap(name=c_name)\n\n        def has():\n            assert self.utility_wrap.has_collection(c_name)\n            # assert not assert_collection(connect, collection_name)\n\n        for i in range(threads_num):\n            t = MyThread(target=has, args=())\n            threads.append(t)\n            t.start()\n            time.sleep(0.2)\n        for t in threads:\n            t.join()\n\n\nclass TestHasCollectionInvalid(TestcaseBase):\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    def test_has_collection_with_invalid_collection_name(self, name, enable_milvus_local_api):\n        \"\"\"\n        target: test list collections with invalid scenario\n        method: show collection with invalid collection name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: 1, ct.err_msg: \"Invalid collection name: {}\".format(name)}\n        self.utility_wrap.has_collection(name, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_has_collection_with_empty_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test list collections with invalid scenario\n        method: show collection with empty collection name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: -1, ct.err_msg: '`collection_name` value  is illegal'}\n        self.utility_wrap.has_collection('', check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_has_collection_with_none_collection_name(self, enable_milvus_local_api):\n        \"\"\"\n        target: test list collections with invalid scenario\n        method: show collection with no collection name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        error = {ct.err_code: -1, ct.err_msg: '`collection_name` value None is illegal'}\n        self.utility_wrap.has_collection(None, check_task=CheckTasks.err_res, check_items=error)\n\n\nclass TestListCollections(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test `utility.list_collections()` function\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_list_collections_multi_collections(self, enable_milvus_local_api):\n        \"\"\"\n        target: test list collections\n        method: create collection, assert the value returned by list_collections method\n        expected: True\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_num = 50\n        collection_names = []\n        for i in range(collection_num):\n            collection_name = cf.gen_unique_str()\n            collection_names.append(collection_name)\n            self.init_collection_wrap(name=collection_name)\n        for i in range(collection_num):\n            assert collection_names[i] in self.utility_wrap.list_collections()[0]\n            self.utility_wrap.drop_collection(collection_names[i])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_list_collections_without_connection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test list collections, without connection\n        method: calling list collections with correct params, with a disconnected instance\n        expected: list collections raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        self.connection_wrap.remove_connection(ct.default_alias)\n        res_list, _ = self.connection_wrap.list_connections()\n        assert ct.default_alias not in res_list\n        error = {ct.err_code: 1, ct.err_msg: 'should create connect first'}\n        self.utility_wrap.list_collections(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_list_collections_multithread(self, enable_milvus_local_api):\n        \"\"\"\n        target: test list collection with multi-threads\n        method: list collection using multi-threads\n        expected: list collections correctly\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        threads_num = 10\n        threads = []\n        collection_name = cf.gen_unique_str()\n        self.init_collection_wrap(name=collection_name)\n\n        def _list():\n            assert collection_name in self.utility_wrap.list_collections()[0]\n\n        for i in range(threads_num):\n            t = MyThread(target=_list)\n            threads.append(t)\n            t.start()\n            time.sleep(0.2)\n        for t in threads:\n            t.join()\n\n\nclass TestLoadCollection(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test `collection.load()` function\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_load_collection_after_index(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection, after index created\n        method: insert and create index, load collection with correct params\n        expected: no error raised\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n        data = cf.gen_default_list_data(nb=1000)\n        collection_w.insert(data)\n        collection_w.create_index(ct.default_float_vec_field_name, default_index_params,\n                                  index_name=ct.default_index_name)\n        collection_w.load()\n        collection_w.release()\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_load_collection_after_index_binary(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load binary_collection, after index created\n        method: insert and create index, load binary_collection with correct params\n        expected: no error raised\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name, schema=default_binary_schema)\n        df, _ = cf.gen_default_binary_dataframe_data(ct.default_nb)\n        mutation_res, _ = collection_w.insert(data=df)\n        collection_w.create_index(ct.default_binary_vec_field_name, default_binary_index_params)\n        collection_w.load()\n        collection_w.release()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_empty_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load an empty collection with no data inserted\n        method: no entities in collection, load and release the collection\n        expected: load and release successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load()\n        collection_w.release()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_collection_dis_connect(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection, without connection\n        method: load collection with correct params, with a disconnected instance\n        expected: load raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_wr = self.init_collection_wrap(c_name)\n        self.connection_wrap.remove_connection(ct.default_alias)\n        res_list, _ = self.connection_wrap.list_connections()\n        assert ct.default_alias not in res_list\n        error = {ct.err_code: 1, ct.err_msg: 'should create connect first'}\n        collection_wr.load(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_release_collection_dis_connect(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release collection, without connection\n        method: release collection with correct params, with a disconnected instance\n        expected: release raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_wr = self.init_collection_wrap(c_name)\n        self.connection_wrap.remove_connection(ct.default_alias)\n        res_list, _ = self.connection_wrap.list_connections()\n        assert ct.default_alias not in res_list\n        error = {ct.err_code: 1, ct.err_msg: 'should create connect first'}\n        collection_wr.release(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load invalid collection\n        method: load not existed collection\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.drop()\n        error = {ct.err_code: 100,\n                 ct.err_msg: \"collection= : collection not found\"}\n        collection_wr.load(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"incorrect error code: 1100\")\n    def test_release_collection_not_existed(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release a not existed collection\n        method: release with a not existed collection name\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.drop()\n        error = {ct.err_code: 100,\n                 ct.err_msg: \"collection= : collection not found\"}\n        collection_wr.release(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_release_collection_not_load(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release collection without load\n        method: release collection without load\n        expected: release successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.release()\n\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_load_collection_after_load_release(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after load and release\n        method: 1.load and release collection after entities flushed\n                2.re-load collection\n        expected: No exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n        insert_data = cf.gen_default_list_data()\n        collection_w.insert(data=insert_data)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load()\n        collection_w.release()\n        collection_w.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_collection_repeatedly(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection repeatedly\n        method: load collection twice\n        expected: No exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap()\n        insert_data = cf.gen_default_list_data(nb=1000)\n        collection_w.insert(data=insert_data)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load()\n        collection_w.load()\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_load_partitions_after_load_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load partitions after load collection\n        method: 1. load collection\n                2. load partitions\n                3. search on one partition\n        expected: No exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_general(prefix)[0]\n        self.init_partition_wrap(collection_w, partition1)\n        self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        collection_w.load(partition_names=[partition1, partition2])\n        res = collection_w.search(vectors, default_search_field, default_search_params,\n                                  default_limit, partition_names=[partition1])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_partitions_after_load_release_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load partitions after load release collection\n        method: 1. load collection\n                2. release collection\n                3. load partitions\n                4. search on one partition\n        expected: No exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_general(prefix)[0]\n        self.init_partition_wrap(collection_w, partition1)\n        self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        collection_w.release()\n        collection_w.load(partition_names=[partition1, partition2])\n        collection_w.search(vectors, default_search_field, default_search_params,\n                            default_limit, partition_names=[partition1])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_collection_after_release_collection_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after release collection and partition\n        method: 1. load collection\n                2. release collection\n                3. release one partition\n                4. load collection\n                5. search on the partition\n        expected: No exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w = self.init_partition_wrap(collection_w, partition1)\n        self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        collection_w.release()\n        partition_w.release()\n        collection_w.load()\n        collection_w.search(vectors, default_search_field, default_search_params,\n                            default_limit, partition_names=[partition1])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_partitions_after_release_collection_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load partitions after release collection and partition\n        method: 1. load collection\n                2. release collection\n                3. release partition\n                4. search on the partition and report error\n                5. load partitions\n                6. search on the partition\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        collection_w.release()\n        partition_w1.release()\n        collection_w.search(vectors, default_search_field, default_search_params,\n                            default_limit, partition_names=[partition1],\n                            check_task=CheckTasks.err_res,\n                            check_items={ct.err_code: 1,\n                                         ct.err_msg: \"not loaded\"})\n        partition_w1.load()\n        partition_w2.load()\n        collection_w.search(vectors, default_search_field, default_search_params,\n                            default_limit, partition_names=[partition1])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_collection_after_release_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after load collection and release partition\n        method: 1. load collection\n                2. release one partition\n                3. search on the released partition and report error\n                4. search on the non-released partition and raise no exception\n                3. load collection\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        collection_w.search(vectors, default_search_field, default_search_params,\n                            default_limit, partition_names=[partition1],\n                            check_task=CheckTasks.err_res,\n                            check_items={ct.err_code: 1,\n                                         ct.err_msg: \"not loaded\"})\n        collection_w.search(vectors, default_search_field, default_search_params,\n                            default_limit, partition_names=[partition2])\n        collection_w.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_partitions_after_release_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after release partition and load partitions\n        method: 1. load collection\n                2. release partition\n                3. search on the released partition and report error\n                4. load partitions\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        collection_w.search(vectors, default_search_field, default_search_params,\n                            default_limit, partition_names=[partition1],\n                            check_task=CheckTasks.err_res,\n                            check_items={ct.err_code: 1,\n                                         ct.err_msg: \"not loaded\"})\n        partition_w1.load()\n        partition_w2.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_collection_after_release_partition_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after release partition and collection\n        method: 1. load collection\n                2. release partition\n                3. query on the released partition and report error\n                3. release collection\n                4. load collection\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w = self.init_partition_wrap(collection_w, partition1)\n        self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w.release()\n        error = {ct.err_code: 65538, ct.err_msg: 'partition not loaded'}\n        collection_w.query(default_term_expr, partition_names=[partition1],\n                           check_task=CheckTasks.err_res, check_items=error)\n        collection_w.release()\n        collection_w.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_partitions_after_release_partition_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load partitions after release partition and collection\n        method: 1. load collection\n                2. release partition\n                3. release collection\n                4. load one partition\n                5. query on the other partition and raise error\n                6. load the other partition\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        collection_w.release()\n        partition_w1.load()\n        error = {ct.err_code: 65538, ct.err_msg: 'partition not loaded'}\n        collection_w.query(default_term_expr, partition_names=[partition2],\n                           check_task=CheckTasks.err_res, check_items=error)\n        partition_w2.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_collection_after_release_partitions(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after release partitions\n        method: 1. load collection\n                2. release partitions\n                3. load collection\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        partition_w2.release()\n        collection_w.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_partitions_after_release_partitions(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load partitions after release partitions\n        method: 1. load collection\n                2. release partitions\n                3. load partitions\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        partition_w2.release()\n        partition_w1.load()\n        partition_w2.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_collection_after_drop_partition_and_release_another(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after drop a partition and release another\n        method: 1. load collection\n                2. drop a partition\n                3. release left partition\n                4. query on the left partition\n                5. load collection\n        expected: No exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        partition_w1.drop()\n        partition_w2.release()\n        error = {ct.err_code: 65538, ct.err_msg: 'partition not loaded'}\n        collection_w.query(default_term_expr, partition_names=[partition2],\n                           check_task=CheckTasks.err_res, check_items=error)\n        collection_w.load()\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_partition_after_drop_partition_and_release_another(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load partition after drop a partition and release another\n        method: 1. load collection\n                2. drop a partition\n                3. release left partition\n                4. load partition\n                5. query on the partition\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        partition_w1.drop()\n        partition_w2.release()\n        partition_w2.load()\n        collection_w.query(default_term_expr, partition_names=[partition2])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_another_partition_after_drop_one_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load another partition after drop a partition\n        method: 1. load collection\n                2. drop a partition\n                3. load another partition\n                4. query on the partition\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        partition_w1.drop()\n        partition_w2.load()\n        collection_w.query(default_term_expr, partition_names=[partition2])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_collection_after_drop_one_partition(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load collection after drop a partition\n        method: 1. load collection\n                2. drop a partition\n                3. load collection\n                4. query on the partition\n        expected: No exception\n        \"\"\"\n        collection_w = self.init_collection_general(prefix)[0]\n        partition_w1 = self.init_partition_wrap(collection_w, partition1)\n        partition_w2 = self.init_partition_wrap(collection_w, partition2)\n        collection_w.load()\n        partition_w1.release()\n        partition_w1.drop()\n        collection_w.load()\n        collection_w.query(default_term_expr, partition_names=[partition2])\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_release_collection(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load, release non-exist collection\n        method: 1. load, release and drop collection\n                2. load and release dropped collection\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_wr.load()\n        collection_wr.release()\n        collection_wr.drop()\n        error = {ct.err_code: 100, ct.err_msg: \"collection not found\"}\n        collection_wr.load(check_task=CheckTasks.err_res, check_items=error)\n        collection_wr.release(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_release_collection_after_drop(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release collection after drop\n        method: insert and flush, then release collection after load and drop\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_wr.load()\n        collection_wr.drop()\n        error = {ct.err_code: 100, ct.err_msg: \"collection not found\"}\n        collection_wr.release(check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.xfail(reason=\"milvus lite not support\")\n    def test_load_partition_names_empty(self, enable_milvus_local_api):\n        \"\"\"\n        target: test query another partition\n        method: 1. insert entities into two partitions\n                2.query on one partition and query result empty\n        expected: query result is empty\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_wrap(name=cf.gen_unique_str(prefix))\n        partition_w = self.init_partition_wrap(collection_wrap=collection_w)\n\n        # insert [0, half) into partition_w\n        half = ct.default_nb // 2\n        df_partition = cf.gen_default_dataframe_data(nb=half)\n        partition_w.insert(df_partition)\n        # insert [half, nb) into _default\n        df_default = cf.gen_default_dataframe_data(nb=half, start=half)\n        collection_w.insert(df_default)\n        # flush\n        collection_w.num_entities\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        # load\n        error = {ct.err_code: 0, ct.err_msg: \"due to no partition specified\"}\n        collection_w.load(partition_names=[], check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.fixture(scope=\"function\", params=ct.get_invalid_strs)\n    def get_non_number_replicas(self, request):\n        if request.param == 1:\n            pytest.skip(\"1 is valid replica number\")\n        if request.param is None:\n            pytest.skip(\"None is valid replica number\")\n        yield request.param\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_replica_non_number(self, get_non_number_replicas):\n        \"\"\"\n        target: test load collection with non-number replicas\n        method: load with non-number replicas\n        expected: raise exceptions\n        \"\"\"\n        # create, insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data()\n        insert_res, _ = collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        # load with non-number replicas\n        error = {ct.err_code: 0, ct.err_msg: f\"but expected one of: int, long\"}\n        collection_w.load(replica_number=get_non_number_replicas, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"replicas\", [-1, 0])\n    @pytest.mark.xfail(reason=\"milvus lite not support partition\")\n    def test_load_replica_invalid_number(self, replicas):\n        \"\"\"\n        target: test load partition with invalid replica number\n        method: load with invalid replica number\n        expected: load successfully as replica = 1\n        \"\"\"\n        # create, insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data()\n        insert_res, _ = collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        collection_w.load(replica_number=replicas)\n        replicas = collection_w.get_replicas()[0]\n        groups = replicas.groups\n        assert len(groups) == 1\n        assert len(groups[0].shards) == 1\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"replicas\", [None])\n    def test_load_replica_number_none(self, replicas):\n        \"\"\"\n        target: test load partition with replica number none\n        method: load with replica number=None\n        expected: raise exceptions\n        \"\"\"\n        # create, insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data(nb=1000)\n        insert_res, _ = collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        collection_w.load(replica_number=replicas,\n                          check_task=CheckTasks.err_res,\n                          check_items={\"err_code\": 1,\n                                       \"err_msg\": \"`replica_number` value None is illegal\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_load_replica_greater_than_querynodes(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load with replicas that greater than querynodes\n        method: load with 3 replicas (2 querynode)\n        expected: Raise exception\n        \"\"\"\n        # create, insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data()\n        insert_res, _ = collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        error = {ct.err_code: 65535,\n                 ct.err_msg: \"failed to load collection: failed to spawn replica for collection: nodes not enough\"}\n        collection_w.load(replica_number=3, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.ClusterOnly)\n    def test_load_replica_change(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load replica change\n        method: 1.load with replica 1\n                2.load with a new replica number\n                3.release collection\n                4.load with a new replica\n                5.create index is a must because get_query_segment_info could\n                  only return indexed and loaded segment\n        expected: The second time successfully loaded with a new replica number\n        \"\"\"\n        # create, insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data()\n        insert_res, _ = collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, ct.default_index)\n        collection_w.load(replica_number=1)\n        for seg in self.utility_wrap.get_query_segment_info(collection_w.name)[0]:\n            assert len(seg.nodeIds) == 1\n\n        collection_w.query(expr=f\"{ct.default_int64_field_name} in [0]\")\n        loading_progress, _ = self.utility_wrap.loading_progress(collection_w.name)\n        assert loading_progress == {'loading_progress': '100%'}\n\n        # verify load different replicas thrown an exception\n        error = {ct.err_code: 1100, ct.err_msg: \"failed to load collection: can't change the replica number for \"\n                                                \"loaded collection: expected=1, actual=2: invalid parameter\"}\n        collection_w.load(replica_number=2, check_task=CheckTasks.err_res, check_items=error)\n        one_replica, _ = collection_w.get_replicas()\n        assert len(one_replica.groups) == 1\n\n        collection_w.release()\n        collection_w.load(replica_number=2)\n        # replicas is not yet reflected in loading progress\n        loading_progress, _ = self.utility_wrap.loading_progress(collection_w.name)\n        assert loading_progress == {'loading_progress': '100%'}\n        two_replicas, _ = collection_w.get_replicas()\n        assert len(two_replicas.groups) == 2\n        collection_w.query(expr=f\"{ct.default_int64_field_name} in [0]\", check_task=CheckTasks.check_query_results,\n                           check_items={'exp_res': [{'int64': 0}]})\n\n        # verify loaded segments included 2 replicas and twice num entities\n        seg_info = self.utility_wrap.get_query_segment_info(collection_w.name)[0]\n        num_entities = 0\n        for seg in seg_info:\n            assert len(seg.nodeIds) == 2\n            num_entities += seg.num_rows\n        assert num_entities == ct.default_nb\n\n    @pytest.mark.tags(CaseLabel.ClusterOnly)\n    def test_load_replica_multi(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load with multiple replicas\n        method: 1.create collection with one shards\n                2.insert multiple segments\n                3.load with multiple replicas\n                4.query and search\n        expected: Query and search successfully\n        \"\"\"\n        # create, insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix), shards_num=1)\n        tmp_nb = 1000\n        replica_number = 2\n        for i in range(replica_number):\n            df = cf.gen_default_dataframe_data(nb=tmp_nb, start=i * tmp_nb)\n            insert_res, _ = collection_w.insert(df)\n            assert collection_w.num_entities == (i + 1) * tmp_nb\n\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load(replica_number=replica_number)\n        replicas = collection_w.get_replicas()[0]\n        assert len(replicas.groups) == replica_number\n\n        for seg in self.utility_wrap.get_query_segment_info(collection_w.name)[0]:\n            assert len(seg.nodeIds) == replica_number\n\n        query_res, _ = collection_w.query(expr=f\"{ct.default_int64_field_name} in [0, {tmp_nb}]\")\n        assert len(query_res) == 2\n        search_res, _ = collection_w.search(vectors, default_search_field, default_search_params, default_limit)\n        assert len(search_res[0]) == ct.default_limit\n\n    @pytest.mark.tags(CaseLabel.ClusterOnly)\n    def test_load_replica_partitions(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load replica with partitions\n        method: 1.Create collection and one partition\n                2.Insert data into collection and partition\n                3.Load multi replicas with partition\n                4.Query\n        expected: Verify query result\n        \"\"\"\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix))\n        df_1 = cf.gen_default_dataframe_data(nb=ct.default_nb)\n        df_2 = cf.gen_default_dataframe_data(nb=ct.default_nb, start=ct.default_nb)\n\n        collection_w.insert(df_1)\n        partition_w = self.init_partition_wrap(collection_w, ct.default_tag)\n        partition_w.insert(df_2)\n        assert collection_w.num_entities == ct.default_nb * 2\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        collection_w.load([partition_w.name], replica_number=2)\n        for seg in self.utility_wrap.get_query_segment_info(collection_w.name)[0]:\n            assert len(seg.nodeIds) == 2\n        # default tag query 0 empty\n        collection_w.query(expr=f\"{ct.default_int64_field_name} in [0]\", partition_names=[ct.default_tag],\n                           check_tasks=CheckTasks.check_query_empty)\n        # default query 0 empty\n        collection_w.query(expr=f\"{ct.default_int64_field_name} in [2000]\",\n                           check_task=CheckTasks.check_query_results,\n                           check_items={'exp_res': df_2.iloc[:1, :1].to_dict('records')})\n\n        error = {ct.err_code: 65538, ct.err_msg: \"partition not loaded\"}\n        collection_w.query(expr=f\"{ct.default_int64_field_name} in [0]\",\n                           partition_names=[ct.default_partition_name, ct.default_tag],\n                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L3)\n    def test_load_replica_non_shard_leader(self, enable_milvus_local_api):\n        \"\"\"\n        target: test replica groups which one of QN is not shard leader\n        method: 1.deploy cluster with 5 QNs\n                2.create collection with 2 shards\n                3.insert and flush\n                4.load with 2 replica number\n                5.insert growing data\n                6.search and query\n        expected: Verify search and query results\n        \"\"\"\n        # create and insert entities\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix), shards_num=2)\n        df = cf.gen_default_dataframe_data()\n        collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        # load with multi replica and insert growing data\n        collection_w.load(replica_number=2)\n        df_growing = cf.gen_default_dataframe_data(100, start=ct.default_nb)\n        collection_w.insert(df_growing)\n\n        replicas = collection_w.get_replicas()[0]\n        # verify there are 2 groups (2 replicas)\n        assert len(replicas.groups) == 2\n        log.debug(replicas)\n        all_group_nodes = []\n        for group in replicas.groups:\n            # verify each group have 3 shards\n            assert len(group.shards) == 2\n            all_group_nodes.extend(group.group_nodes)\n        # verify all groups has 5 querynodes\n        assert len(all_group_nodes) == 5\n\n        # Verify 2 replicas segments loaded\n        seg_info, _ = self.utility_wrap.get_query_segment_info(collection_w.name)\n        for seg in seg_info:\n            assert len(seg.nodeIds) == 2\n\n        # verify search successfully\n        res, _ = collection_w.search(vectors, default_search_field, default_search_params, default_limit)\n        assert len(res[0]) == ct.default_limit\n\n        # verify query sealed and growing data successfully\n        collection_w.query(expr=f\"{ct.default_int64_field_name} in [0, {ct.default_nb}]\",\n                           check_task=CheckTasks.check_query_results,\n                           check_items={'exp_res': [{'int64': 0}, {'int64': 3000}]})\n\n    @pytest.mark.tags(CaseLabel.L3)\n    def test_load_replica_multiple_shard_leader(self, enable_milvus_local_api):\n        \"\"\"\n        target: test replica groups which one of QN is shard leader of multiple shards\n        method: 1.deploy cluster with 5 QNs\n                2.create collection with 3 shards\n                3.insert and flush\n                4.load with 2 replica number\n                5.insert growng data\n                6.search and query\n        expected: Verify search and query results\n        \"\"\"\n        # craete and insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix), shards_num=3)\n        df = cf.gen_default_dataframe_data()\n        collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        # load with multi replicas and insert growing data\n        collection_w.load(replica_number=2)\n        df_growing = cf.gen_default_dataframe_data(100, start=ct.default_nb)\n        collection_w.insert(df_growing)\n\n        # verify replica infos\n        replicas, _ = collection_w.get_replicas()\n        log.debug(replicas)\n        assert len(replicas.groups) == 2\n        all_group_nodes = []\n        for group in replicas.groups:\n            # verify each group have 3 shards\n            assert len(group.shards) == 3\n            all_group_nodes.extend(group.group_nodes)\n        # verify all groups has 5 querynodes\n        assert len(all_group_nodes) == 5\n\n        # Verify 2 replicas segments loaded\n        seg_info, _ = self.utility_wrap.get_query_segment_info(collection_w.name)\n        for seg in seg_info:\n            assert len(seg.nodeIds) == 2\n\n        # Verify search successfully\n        res, _ = collection_w.search(vectors, default_search_field, default_search_params, default_limit)\n        assert len(res[0]) == ct.default_limit\n\n        # Verify query sealed and growing entities successfully\n        collection_w.query(expr=f\"{ct.default_int64_field_name} in [0, {ct.default_nb}]\",\n                           check_task=CheckTasks.check_query_results,\n                           check_items={'exp_res': [{'int64': 0}, {'int64': 3000}]})\n\n    @pytest.mark.tags(CaseLabel.L3)\n    def test_load_replica_sq_count_balance(self, enable_milvus_local_api):\n        \"\"\"\n        target: test load with multi replicas, and sq request load balance cross replicas\n        method: 1.Deploy milvus with multi querynodes\n                2.Insert entities and load with replicas\n                3.Do query req many times\n                4.Verify the querynode sq_req_count metrics\n        expected: Infer whether the query request is load balanced.\n        \"\"\"\n        from utils.util_k8s import get_metrics_querynode_sq_req_count\n        collection_w = self.init_collection_wrap(name=cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data(nb=5000)\n        mutation_res, _ = collection_w.insert(df)\n        assert collection_w.num_entities == 5000\n        total_sq_count = 20\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n\n        collection_w.load(replica_number=3)\n        for i in range(total_sq_count):\n            ids = [random.randint(0, 100) for _ in range(5)]\n            collection_w.query(f\"{ct.default_int64_field_name} in {ids}\")\n\n        replicas, _ = collection_w.get_replicas()\n        log.debug(replicas)\n        sq_req_count = get_metrics_querynode_sq_req_count()\n        for group in replicas.groups:\n            group_nodes = group.group_nodes\n            group_sq_req_count = 0\n            for node in group_nodes:\n                group_sq_req_count += sq_req_count[node]\n            log.debug(f\"Group nodes {group_nodes} with total sq_req_count {group_sq_req_count}\")\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_get_collection_replicas_not_loaded(self, enable_milvus_local_api):\n        \"\"\"\n        target: test get replicas of not loaded collection\n        method: not loaded collection and get replicas\n        expected: raise an exception\n        \"\"\"\n        # create, insert\n        collection_w = self.init_collection_wrap(cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data()\n        insert_res, _ = collection_w.insert(df)\n        assert collection_w.num_entities == ct.default_nb\n\n        res, _ = collection_w.get_replicas()\n        assert len(res.groups) == 0\n\n    @pytest.mark.tags(CaseLabel.L3)\n    def test_count_multi_replicas(self, enable_milvus_local_api):\n        \"\"\"\n        target: test count multi replicas\n        method: 1. load data with multi replicas\n                2. count\n        expected: verify count\n        \"\"\"\n        # create -> insert -> flush\n        collection_w = self.init_collection_wrap(name=cf.gen_unique_str(prefix))\n        df = cf.gen_default_dataframe_data()\n        collection_w.insert(df)\n        collection_w.flush()\n\n        # index -> load replicas\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_w.load(replica_number=2)\n\n        # count\n        collection_w.query(expr=f'{ct.default_int64_field_name} >= 0', output_fields=[ct.default_count_output],\n                           check_task=CheckTasks.check_query_results,\n                           check_items={'exp_res': [{\"count(*)\": ct.default_nb}]})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_load_collection_without_creating_index(self, enable_milvus_local_api):\n        \"\"\"\n        target: test drop index after load without release\n        method: create a collection without index, then load\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        collection_w = self.init_collection_general(prefix, True, is_index=False)[0]\n        collection_w.load(check_task=CheckTasks.err_res,\n                          check_items={\"err_code\": 1,\n                                       \"err_msg\": \"index not found\"})\n\n\nclass TestDescribeCollection(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test `collection.describe` function\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support partition > partition number \")\n    def test_collection_describe(self, enable_milvus_local_api):\n        \"\"\"\n        target: test describe collection\n        method: create a collection and check its information when describe\n        expected: return correct information\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        collection_w = self.init_collection_wrap(name=c_name)\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        description = \\\n            {'collection_name': c_name, 'auto_id': False, 'num_shards': ct.default_shards_num, 'description': '',\n             'fields': [\n                 {'field_id': 100, 'name': 'int64', 'description': '', 'type': 5, 'params': {}, 'is_primary': True},\n                 {'field_id': 101, 'name': 'float', 'description': '', 'type': 10, 'params': {}},\n                 {'field_id': 102, 'name': 'varchar', 'description': '', 'type': 21, 'params': {'max_length': 65535}},\n                 {'field_id': 103, 'name': 'json_field', 'description': '', 'type': 23, 'params': {}},\n                 {'field_id': 104, 'name': 'float_vector', 'description': '', 'type': 101, 'params': {'dim': 128}}\n             ],\n             'aliases': [], 'consistency_level': 0, 'properties': {}, 'num_partitions': 1, 'enable_dynamic_field': False}\n        res = collection_w.describe()[0]\n        del res['collection_id']\n        log.info(res)\n        assert description == res\n\n\nclass TestReleaseAdvanced(TestcaseBase):\n    @pytest.mark.tags(CaseLabel.L0)\n    def test_release_collection_during_searching(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release collection during searching\n        method: insert entities into collection, flush and load collection, release collection during searching\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        data = cf.gen_default_list_data()\n        c_name = cf.gen_unique_str()\n        collection_wr = self.init_collection_wrap(name=c_name)\n        collection_wr.insert(data=data)\n        assert collection_wr.num_entities == ct.default_nb\n        collection_wr.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        collection_wr.load()\n        search_res, _ = collection_wr.search(vectors, default_search_field, default_search_params,\n                                             default_limit, _async=True)\n        collection_wr.release()\n        error = {ct.err_code: 65535, ct.err_msg: \"collection not loaded\"}\n        collection_wr.search(vectors, default_search_field, default_search_params, default_limit,\n                             check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.xfail(reason=\"milvus lite not support partition\")\n    def test_release_partition_during_searching(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release partition during searching\n        method: insert entities into partition, flush and load partition, release partition during searching\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        partition_num = 1\n        collection_w = self.init_collection_general(prefix, True, 10, partition_num, is_index=False)[0]\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        par = collection_w.partitions\n        par_name = par[partition_num].name\n        par[partition_num].load()\n        limit = 10\n        collection_w.search(vectors, default_search_field,\n                            default_search_params, limit, default_search_exp,\n                            [par_name])\n        par[partition_num].release()\n        collection_w.search(vectors, default_search_field,\n                            default_search_params, limit, default_search_exp,\n                            [par_name],\n                            check_task=CheckTasks.err_res,\n                            check_items={\"err_code\": 65535,\n                                         \"err_msg\": \"collection not loaded\"})\n\n    @pytest.mark.tags(CaseLabel.L0)\n    @pytest.mark.xfail(reason=\"milvus lite not support partition\")\n    def test_release_indexed_collection_during_searching(self, enable_milvus_local_api):\n        \"\"\"\n        target: test release indexed collection during searching\n        method: insert entities into partition, flush and load partition, release collection during searching\n        expected: raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        partition_num = 1\n        collection_w = self.init_collection_general(prefix, True, 10, partition_num, is_index=False)[0]\n        collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n        par = collection_w.partitions\n        par_name = par[partition_num].name\n        par[partition_num].load()\n        limit = 10\n        collection_w.search(vectors, default_search_field,\n                            default_search_params, limit, default_search_exp,\n                            [par_name], _async=True)\n        collection_w.release()\n        error = {ct.err_code: 65535, ct.err_msg: \"collection not loaded\"}\n        collection_w.search(vectors, default_search_field,\n                            default_search_params, limit, default_search_exp,\n                            [par_name],\n                            check_task=CheckTasks.err_res,\n                            check_items=error)\n\n\n# class TestLoadPartition(TestcaseBase):\n#     \"\"\"\n#     ******************************************************************\n#       The following cases are used to test `load_collection` function\n#     ******************************************************************\n#     \"\"\"\n#\n#     @pytest.fixture(\n#         scope=\"function\",\n#         params=gen_simple_index()\n#     )\n#     def get_simple_index(self, request, connect):\n#         return request.param\n#\n#     @pytest.fixture(\n#         scope=\"function\",\n#         params=gen_binary_index()\n#     )\n#     def get_binary_index(self, request):\n#         log.info(request.param)\n#         if request.param[\"index_type\"] in ct.binary_support:\n#             return request.param\n#         else:\n#             pytest.skip(\"Skip index Temporary\")\n#\n#     @pytest.mark.tags(CaseLabel.L0)\n#     @pytest.mark.parametrize('binary_index', gen_binary_index())\n#     @pytest.mark.parametrize('metric_type', ct.binary_metrics)\n#     def test_load_partition_after_index_binary(self, binary_index, metric_type, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load binary_collection, after index created\n#         method: insert and create index, load binary_collection with correct params\n#         expected: no error raised\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         partition_num = 1\n#         collection_w = self.init_collection_general(prefix, True, ct.default_nb, partition_num,\n#                                                     is_binary=True, is_index=False)[0]\n#\n#         # for metric_type in ct.binary_metrics:\n#         binary_index[\"metric_type\"] = metric_type\n#         if binary_index[\"index_type\"] == \"BIN_IVF_FLAT\" and metric_type in ct.structure_metrics:\n#             error = {ct.err_code: 65535,\n#                      ct.err_msg: f\"metric type {metric_type} not found or not supported, supported: [HAMMING JACCARD]\"}\n#             collection_w.create_index(ct.default_binary_vec_field_name, binary_index,\n#                                       check_task=CheckTasks.err_res, check_items=error)\n#             collection_w.create_index(ct.default_binary_vec_field_name, ct.default_bin_flat_index)\n#         else:\n#             collection_w.create_index(ct.default_binary_vec_field_name, binary_index)\n#         par = collection_w.partitions\n#         par[partition_num].load()\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_partition_dis_connect(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partition, without connection\n#         method: load partition with correct params, with a disconnected instance\n#         expected: load raise exception\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         collection_w = self.init_collection_wrap()\n#         partition_name = cf.gen_unique_str(prefix)\n#         description = cf.gen_unique_str(\"desc_\")\n#         partition_w = self.init_partition_wrap(collection_w, partition_name,\n#                                                description=description,\n#                                                check_task=CheckTasks.check_partition_property,\n#                                                check_items={\"name\": partition_name, \"description\": description,\n#                                                             \"is_empty\": True, \"num_entities\": 0}\n#                                                )\n#         collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n#         partition_w.load()\n#         self.connection_wrap.remove_connection(ct.default_alias)\n#         res_list, _ = self.connection_wrap.list_connections()\n#         assert ct.default_alias not in res_list\n#         error = {ct.err_code: 1, ct.err_msg: 'should create connect first.'}\n#         partition_w.load(check_task=CheckTasks.err_res, check_items=error)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_release_partition_dis_connect(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release collection, without connection\n#         method: release collection with correct params, with a disconnected instance\n#         expected: release raise exception\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         collection_w = self.init_collection_wrap()\n#         partition_name = cf.gen_unique_str(prefix)\n#         description = cf.gen_unique_str(\"desc_\")\n#         partition_w = self.init_partition_wrap(collection_w, partition_name,\n#                                                description=description,\n#                                                check_task=CheckTasks.check_partition_property,\n#                                                check_items={\"name\": partition_name, \"description\": description,\n#                                                             \"is_empty\": True, \"num_entities\": 0}\n#                                                )\n#         collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n#         partition_w.load()\n#         self.connection_wrap.remove_connection(ct.default_alias)\n#         res_list, _ = self.connection_wrap.list_connections()\n#         assert ct.default_alias not in res_list\n#         error = {ct.err_code: 1, ct.err_msg: 'should create connect first.'}\n#         partition_w.release(check_task=CheckTasks.err_res, check_items=error)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_partition_not_existed(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partition for invalid scenario\n#         method: load not existed partition\n#         expected: raise exception and report the error\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         collection_w = self.init_collection_wrap()\n#         partition_name = cf.gen_unique_str(prefix)\n#         description = cf.gen_unique_str(\"desc_\")\n#         partition_w = self.init_partition_wrap(collection_w, partition_name,\n#                                                description=description,\n#                                                check_task=CheckTasks.check_partition_property,\n#                                                check_items={\"name\": partition_name, \"description\": description,\n#                                                             \"is_empty\": True, \"num_entities\": 0})\n#         collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index)\n#         partition_w.drop()\n#         error = {ct.err_code: 200, ct.err_msg: 'partition not found[partition=%s]' % partition_name}\n#         partition_w.load(check_task=CheckTasks.err_res, check_items=error)\n#\n#     @pytest.mark.tags(CaseLabel.L0)\n#     def test_release_partition_not_load(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release partition without load\n#         method: release partition without load\n#         expected: release success\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         collection_w = self.init_collection_wrap()\n#         partition_name = cf.gen_unique_str(prefix)\n#         description = cf.gen_unique_str(\"desc_\")\n#         partition_w = self.init_partition_wrap(collection_w, partition_name,\n#                                                description=description,\n#                                                check_task=CheckTasks.check_partition_property,\n#                                                check_items={\"name\": partition_name, \"description\": description,\n#                                                             \"is_empty\": True, \"num_entities\": 0})\n#         partition_w.release()\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_release_after_drop(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load and release partition after drop\n#         method: drop partition and then load and release it\n#         expected: raise exception\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         collection_w = self.init_collection_wrap()\n#         partition_name = cf.gen_unique_str(prefix)\n#         description = cf.gen_unique_str(\"desc_\")\n#         partition_w = self.init_partition_wrap(collection_w, partition_name,\n#                                                description=description,\n#                                                check_task=CheckTasks.check_partition_property,\n#                                                check_items={\"name\": partition_name, \"description\": description,\n#                                                             \"is_empty\": True, \"num_entities\": 0})\n#         partition_w.drop()\n#         collection_w.create_index(ct.default_float_vec_field_name)\n#         error = {ct.err_code: 200, ct.err_msg: 'partition not found[partition=%s]' % partition_name}\n#         partition_w.load(check_task=CheckTasks.err_res, check_items=error)\n#         partition_w.release(check_task=CheckTasks.err_res, check_items=error)\n#\n#     @pytest.mark.tags(CaseLabel.L0)\n#     def test_release_partition_after_drop(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release collection after drop\n#         method: insert and flush, then release collection after load and drop\n#         expected: raise exception\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         collection_w = self.init_collection_wrap()\n#         partition_name = cf.gen_unique_str(prefix)\n#         description = cf.gen_unique_str(\"desc_\")\n#         partition_w = self.init_partition_wrap(collection_w, partition_name,\n#                                                description=description,\n#                                                check_task=CheckTasks.check_partition_property,\n#                                                check_items={\"name\": partition_name, \"description\": description,\n#                                                             \"is_empty\": True, \"num_entities\": 0})\n#         partition_w.drop()\n#         error = {ct.err_code: 200, ct.err_msg: 'partition not found[partition=%s]' % partition_name}\n#         partition_w.release(check_task=CheckTasks.err_res, check_items=error)\n#\n#     @pytest.mark.tags(CaseLabel.L0)\n#     def test_load_release_after_collection_drop(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release collection after drop\n#         method: insert and flush, then release collection after load and drop\n#         expected: raise exception\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         collection_w = self.init_collection_wrap()\n#         name = collection_w.name\n#         partition_name = cf.gen_unique_str(prefix)\n#         description = cf.gen_unique_str(\"desc_\")\n#         partition_w = self.init_partition_wrap(collection_w, partition_name,\n#                                                description=description,\n#                                                check_task=CheckTasks.check_partition_property,\n#                                                check_items={\"name\": partition_name, \"description\": description,\n#                                                             \"is_empty\": True, \"num_entities\": 0})\n#         collection_w.drop()\n#         error = {ct.err_code: 0, ct.err_msg: \"collection not found\"}\n#         partition_w.load(check_task=CheckTasks.err_res, check_items=error)\n#         partition_w.release(check_task=CheckTasks.err_res, check_items=error)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_collection_after_load_loaded_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partition after load partition\n#         method: 1. load partition\n#                 2. load the partition again\n#                 3. query on the non-loaded partition\n#                 4. load collection\n#         expected: No exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.load()\n#         error = {ct.err_code: 65538, ct.err_msg: 'partition not loaded'}\n#         collection_w.query(default_term_expr, partition_names=[partition2],\n#                            check_task=CheckTasks.err_res, check_items=error)\n#         collection_w.load()\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_collection_after_load_unloaded_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partition after load an unloaded partition\n#         method: 1. load partition\n#                 2. load another partition\n#                 3. query on the collection\n#                 4. load collection\n#         expected: No exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w2.load()\n#         collection_w.query(default_term_expr)\n#         collection_w.load()\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_collection_after_load_one_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partition after load partition\n#         method: 1. load partition\n#                 2. load collection\n#                 3. query on the partitions\n#         expected: No exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         collection_w.load()\n#         collection_w.query(default_term_expr, partition_names=[partition1, partition2])\n#\n#     @pytest.mark.tags(CaseLabel.L0)\n#     def test_load_partitions_release_collection(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release collection after load partitions\n#         method: 1. load partition\n#                 2. release collection\n#                 3. query on the partition\n#                 4. load partitions\n#                 5. query on the collection\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         collection_w.release()\n#         error = {ct.err_code: 65535, ct.err_msg: \"collection not loaded\"}\n#         collection_w.query(default_term_expr, partition_names=[partition1],\n#                            check_task=CheckTasks.err_res, check_items=error)\n#         partition_w1.load()\n#         partition_w2.load()\n#         collection_w.query(default_term_expr)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_collection_release_collection(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load collection after load partitions\n#         method: 1. load partition\n#                 2. release collection\n#                 3. load collection\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         collection_w.release()\n#         collection_w.load()\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_partitions_after_load_release_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partitions after load and release partition\n#         method: 1. load partition\n#                 2. release partition\n#                 3. query on the partition\n#                 4. load partitions(include released partition and non-released partition)\n#                 5. query on the collection\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         error = {ct.err_code: 65535,\n#                  ct.err_msg: 'collection not loaded'}\n#         collection_w.query(default_term_expr, partition_names=[partition1],\n#                            check_task=CheckTasks.err_res, check_items=error)\n#         partition_w1.load()\n#         partition_w2.load()\n#         collection_w.query(default_term_expr)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_collection_after_load_release_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load collection after load and release partition\n#         method: 1. load partition\n#                 2. release partition\n#                 3. load collection\n#                 4. search on the collection\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         collection_w.load()\n#         collection_w.search(vectors, default_search_field, default_search_params,\n#                             default_limit, partition_names=[partition1, partition2])\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_partitions_after_load_partition_release_partitions(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partitions after load partition and release partitions\n#         method: 1. load partition\n#                 2. release partitions\n#                 3. load partitions\n#                 4. query on the partitions\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         partition_w2.release()\n#         partition_w1.load()\n#         partition_w2.load()\n#         collection_w.query(default_term_expr, partition_names=[partition1, partition2])\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_collection_after_load_partition_release_partitions(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load collection after load partition and release partitions\n#         method: 1. load partition\n#                 2. release partitions\n#                 3. query on the partitions\n#                 4. load collection\n#                 5. query on the partitions\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         partition_w2.release()\n#         error = {ct.err_code: 65535, ct.err_msg: 'collection not loaded'}\n#         collection_w.query(default_term_expr, partition_names=[partition1, partition2],\n#                            check_task=CheckTasks.err_res, check_items=error)\n#         collection_w.load()\n#         collection_w.query(default_term_expr, partition_names=[partition1, partition2])\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_partition_after_load_drop_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load partition after load and drop partition\n#         method: 1. load partition\n#                 2. drop the loaded partition\n#                 3. load the left partition\n#                 4. query on the partition\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         partition_w1.drop()\n#         partition_w2.load()\n#         collection_w.query(default_term_expr, partition_names=[partition2])\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_collection_after_load_drop_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load collection after load and drop partition\n#         method: 1. load partition\n#                 2. drop the loaded partition\n#                 3. query on the partition\n#                 4. drop another partition\n#                 5. load collection\n#                 6. query on the collection\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         partition_w1.drop()\n#         error = {ct.err_code: 65535, ct.err_msg: f'partition name {partition1} not found'}\n#         collection_w.query(default_term_expr, partition_names=[partition1, partition2],\n#                            check_task=CheckTasks.err_res, check_items=error)\n#         partition_w2.drop()\n#         collection_w.load()\n#         collection_w.query(default_term_expr)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_release_load_partition_after_load_drop_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release load partition after load and drop partition\n#         method: 1. load partition\n#                 2. drop the loaded partition\n#                 3. release another partition\n#                 4. load the partition\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         partition_w1.drop()\n#         partition_w2.release()\n#         partition_w2.load()\n#         collection_w.query(default_term_expr, partition_names=[partition2])\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_release_load_collection_after_load_drop_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release load partition after load and drop partition\n#         method: 1. load partition\n#                 2. drop the loaded partition\n#                 3. release another partition\n#                 4. load collection\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w1.release()\n#         partition_w1.drop()\n#         partition_w2.release()\n#         collection_w.load()\n#         collection_w.query(default_term_expr)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_load_another_partition_after_load_drop_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load another collection after load and drop one partition\n#         method: 1. load partition\n#                 2. drop the unloaded partition\n#                 3. load the partition again\n#                 4. query on the partition\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w2.drop()\n#         partition_w1.load()\n#         collection_w.query(default_term_expr, partition_names=[partition1])\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_release_load_partition_after_load_partition_drop_another(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release load partition after load and drop partition\n#         method: 1. load partition\n#                 2. drop the unloaded partition\n#                 3. release the loaded partition\n#                 4. query on the released partition\n#                 5. reload the partition\n#                 6. query on the partition\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w2.drop()\n#         partition_w1.release()\n#         error = {ct.err_code: 65535,\n#                  ct.err_msg: 'collection not loaded'}\n#         collection_w.query(default_term_expr, partition_names=[partition1],\n#                            check_task=CheckTasks.err_res, check_items=error)\n#         partition_w1.load()\n#         collection_w.query(default_term_expr, partition_names=[partition1])\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_release_load_collection_after_load_partition_drop_another(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test release load partition after load and drop partition\n#         method: 1. load partition\n#                 2. drop the unloaded partition\n#                 3. release the loaded partition\n#                 4. load collection\n#                 5. query on the collection\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w2.drop()\n#         partition_w1.release()\n#         collection_w.load()\n#         collection_w.query(default_term_expr)\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_release_unloaded_partition(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: test load collection after load and drop partition\n#         method: 1. load partition\n#                 2. release the other partition\n#                 3. query on the first partition\n#         expected: no exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, is_index=False)[0]\n#         collection_w.create_index(default_search_field)\n#         partition_w1 = self.init_partition_wrap(collection_w, partition1)\n#         partition_w2 = self.init_partition_wrap(collection_w, partition2)\n#         partition_w1.load()\n#         partition_w2.release()\n#         collection_w.query(default_term_expr, partition_names=[partition1])\n\n\nclass TestCollectionString(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test about string \n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_string_field_is_primary(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with string field\n        method: 1. create collection with string field and vector field\n                2. set string fields is_primary=True\n        expected: Create collection successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_string_pk_default_collection_schema()\n        self.collection_wrap.init_collection(name=c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_with_muti_string_fields(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with muti string fields\n        method: 1. create collection with primary string field and not primary string field\n                2. string fields is_primary=True\n        expected: Create collection successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_field = cf.gen_int64_field()\n        vec_field = cf.gen_float_vec_field()\n        string_field_1 = cf.gen_string_field(is_primary=True)\n        string_field_2 = cf.gen_string_field(name=c_name)\n        schema = cf.gen_collection_schema(fields=[int_field, string_field_1, string_field_2, vec_field])\n        self.collection_wrap.init_collection(name=c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_only_string_field(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with one string field\n        method: create collection with only string field\n        expected: Raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        string_field = cf.gen_string_field(is_primary=True)\n        schema = cf.gen_collection_schema([string_field])\n        error = {ct.err_code: 0, ct.err_msg: \"No vector field is found\"}\n        self.collection_wrap.init_collection(name=cf.gen_unique_str(prefix), schema=schema,\n                                             check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_string_field_with_exceed_max_len(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with string field\n        method: 1. create collection with string field\n                2. String field max_length exceeds maximum\n        expected: Raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        max_length = 100000\n        string_field = cf.gen_string_field(max_length=max_length)\n        schema = cf.gen_collection_schema([int_field, string_field, vec_field])\n        error = {ct.err_code: 65535, ct.err_msg: \"the maximum length specified for a VarChar should be in (0, 65535]\"}\n        self.collection_wrap.init_collection(name=c_name, schema=schema,\n                                             check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.xfail(reason=\"incorrect error code: 2000\")\n    def test_collection_invalid_string_field_dtype(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with string field\n        method: create collection with string field, the string field datatype is invaild\n        expected: Raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        string_field = self.field_schema_wrap.init_field_schema(name=\"string\", dtype=DataType.STRING)[0]\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        schema = cf.gen_collection_schema(fields=[int_field, string_field, vec_field])\n        error = {ct.err_code: 0, ct.err_msg: \"string data type not supported yet, please use VarChar type instead\"}\n        self.collection_wrap.init_collection(name=cf.gen_unique_str(prefix), schema=schema,\n                                             check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    def test_collection_string_field_is_primary_and_auto_id(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with string field \n        method: create collection with string field, the string field primary and auto id are true\n        expected: Create collection successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field = cf.gen_int64_field()\n        vec_field = cf.gen_float_vec_field()\n        string_field = cf.gen_string_field(is_primary=True, auto_id=True)\n        fields = [int_field, string_field, vec_field]\n        schema = self.collection_schema_wrap.init_collection_schema(fields=fields)[0]\n        self.init_collection_wrap(schema=schema, check_task=CheckTasks.check_collection_property,\n                                  check_items={\"schema\": schema, \"primary\": ct.default_string_field_name})\n\n\nclass TestCollectionJSON(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test about json\n    ******************************************************************\n    \"\"\"\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    def test_collection_json_field_as_primary_key(self, auto_id, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with JSON field as primary key\n        method: 1. create collection with one JSON field, and vector field\n                2. set json field is_primary=true\n                3. set auto_id as true\n        expected: Raise exception (not supported)\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        int_field = cf.gen_int64_field()\n        vec_field = cf.gen_float_vec_field()\n        string_field = cf.gen_string_field()\n        # 1. create json field as primary key through field schema api\n        error = {ct.err_code: 1, ct.err_msg: \"Primary key type must be DataType.INT64 or DataType.VARCHAR\"}\n        json_field = cf.gen_json_field(is_primary=True, auto_id=auto_id)\n        fields = [int_field, string_field, json_field, vec_field]\n        self.collection_schema_wrap.init_collection_schema(fields=fields,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n        # 2. create json field as primary key through collection schema api\n        json_field = cf.gen_json_field()\n        fields = [int_field, string_field, json_field, vec_field]\n        self.collection_schema_wrap.init_collection_schema(fields=fields, primary_field=ct.default_json_field_name,\n                                                           check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_float_field_name, ct.default_json_field_name])\n    def test_collection_json_field_partition_key(self, primary_field, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple JSON fields\n        method: 1. create collection with multiple JSON fields, primary key field and vector field\n                2. set json field is_primary=false\n        expected: Raise exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        cf.gen_unique_str(prefix)\n        error = {ct.err_code: 1, ct.err_msg: \"Partition key field type must be DataType.INT64 or DataType.VARCHAR.\"}\n        cf.gen_json_default_collection_schema(primary_field=primary_field, is_partition_key=True,\n                                              check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L0)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_collection_json_field_supported_primary_key(self, primary_field, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with one JSON field\n        method: 1. create collection with one JSON field, primary key field and vector field\n                2. set json field is_primary=false\n        expected: Create collection successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_json_default_collection_schema(primary_field=primary_field)\n        self.collection_wrap.init_collection(name=c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n        \n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_collection_multiple_json_fields_supported_primary_key(self, primary_field, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple JSON fields\n        method: 1. create collection with multiple JSON fields, primary key field and vector field\n                2. set json field is_primary=false\n        expected: Create collection successfully\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_multiple_json_default_collection_schema(primary_field=primary_field)\n        self.collection_wrap.init_collection(name=c_name, schema=schema,\n                                             check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n\nclass TestCollectionARRAY(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n      The following cases are used to test about array\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_array_field_element_type_not_exist(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with ARRAY field without element type\n        method: create collection with one array field without element type\n        expected: Raise exception\n        \"\"\"\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        array_field = cf.gen_array_field(element_type=None)\n        array_schema = cf.gen_collection_schema([int_field, vec_field, array_field])\n        self.init_collection_wrap(schema=array_schema, check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 65535, ct.err_msg: \"element data type None is not valid\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    # @pytest.mark.skip(\"issue #27522\")\n    @pytest.mark.parametrize(\"element_type\", [1001, 'a', [], (), {1}, DataType.BINARY_VECTOR,\n                                              DataType.FLOAT_VECTOR, DataType.JSON, DataType.ARRAY])\n    def test_collection_array_field_element_type_invalid(self, element_type):\n        \"\"\"\n        target: Create a field with invalid element_type\n        method: Create a field with invalid element_type\n                1. Type not in DataType: 1, 'a', ...\n                2. Type in DataType: binary_vector, float_vector, json_field, array_field\n        expected: Raise exception\n        \"\"\"\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        array_field = cf.gen_array_field(element_type=element_type)\n        array_schema = cf.gen_collection_schema([int_field, vec_field, array_field])\n        error = {ct.err_code: 65535, ct.err_msg: \"element data type None is not valid\"}\n        if element_type in ['a', {1}]:\n            error = {ct.err_code: 1, ct.err_msg: \"Unexpected error\"}\n        self.init_collection_wrap(schema=array_schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"https://github.com/milvus-io/pymilvus/issues/2041\")\n    def test_collection_array_field_no_capacity(self, enable_milvus_local_api):\n        \"\"\"\n        target: Create a field without giving max_capacity\n        method: Create a field without giving max_capacity\n        expected: Raise exception\n        \"\"\"\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        array_field = cf.gen_array_field(max_capacity=None)\n        array_schema = cf.gen_collection_schema([int_field, vec_field, array_field])\n        self.init_collection_wrap(schema=array_schema, check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 65535,\n                                               ct.err_msg: \"the value of max_capacity must be an integer\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"https://github.com/milvus-io/pymilvus/issues/2041\")\n    @pytest.mark.parametrize(\"max_capacity\", [[], 'a', (), -1, 4097])\n    def test_collection_array_field_invalid_capacity(self, max_capacity):\n        \"\"\"\n        target: Create a field with invalid max_capacity\n        method: Create a field with invalid max_capacity\n                1. Type invalid: [], 'a', ()\n                2. Value invalid: <0, >max_capacity(4096)\n        expected: Raise exception\n        \"\"\"\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        array_field = cf.gen_array_field(max_capacity=max_capacity)\n        array_schema = cf.gen_collection_schema([int_field, vec_field, array_field])\n        self.init_collection_wrap(schema=array_schema, check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 65535,\n                                               ct.err_msg: \"the maximum capacity specified for a \"\n                                                           \"Array should be in (0, 4096]\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_string_array_without_max_length(self, enable_milvus_local_api):\n        \"\"\"\n        target: Create string array without giving max length\n        method: Create string array without giving max length\n        expected: Raise exception\n        \"\"\"\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        array_field = cf.gen_array_field(element_type=DataType.VARCHAR)\n        array_schema = cf.gen_collection_schema([int_field, vec_field, array_field])\n        self.init_collection_wrap(schema=array_schema, check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 65535,\n                                               ct.err_msg: \"type param(max_length) should be specified for \"\n                                                           \"varChar field of collection\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.skip(\"https://github.com/milvus-io/pymilvus/issues/2041\")\n    @pytest.mark.parametrize(\"max_length\", [[], 'a', (), -1, 65536])\n    def test_collection_string_array_max_length_invalid(self, max_length):\n        \"\"\"\n        target: Create string array with invalid max length\n        method: Create string array with invalid max length\n                1. Type invalid: [], 'a', ()\n                2. Value invalid: <0, >max_length(65535)\n        expected: Raise exception\n        \"\"\"\n        int_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        array_field = cf.gen_array_field(element_type=DataType.VARCHAR, max_length=max_length)\n        array_schema = cf.gen_collection_schema([int_field, vec_field, array_field])\n        self.init_collection_wrap(schema=array_schema, check_task=CheckTasks.err_res,\n                                  check_items={ct.err_code: 65535,\n                                               ct.err_msg: \"the maximum length specified for a VarChar \"\n                                                           \"should be in (0, 65535]\"})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    def test_collection_array_field_all_datatype(self, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with ARRAY field all data type\n        method: 1. Create field respectively: int8, int16, int32, int64, varchar, bool, float, double\n                2. Insert data respectively: int8, int16, int32, int64, varchar, bool, float, double\n        expected: Raise exception\n        \"\"\"\n        # Create field respectively\n        nb = ct.default_nb\n        pk_field = cf.gen_int64_field(is_primary=True)\n        vec_field = cf.gen_float_vec_field()\n        int8_array = cf.gen_array_field(name=\"int8_array\", element_type=DataType.INT8, max_capacity=nb)\n        int16_array = cf.gen_array_field(name=\"int16_array\", element_type=DataType.INT16, max_capacity=nb)\n        int32_array = cf.gen_array_field(name=\"int32_array\", element_type=DataType.INT32, max_capacity=nb)\n        int64_array = cf.gen_array_field(name=\"int64_array\", element_type=DataType.INT64, max_capacity=nb)\n        bool_array = cf.gen_array_field(name=\"bool_array\", element_type=DataType.BOOL, max_capacity=nb)\n        float_array = cf.gen_array_field(name=\"float_array\", element_type=DataType.FLOAT, max_capacity=nb)\n        double_array = cf.gen_array_field(name=\"double_array\", element_type=DataType.DOUBLE, max_capacity=nb)\n        string_array = cf.gen_array_field(name=\"string_array\", element_type=DataType.VARCHAR, max_capacity=nb,\n                                          max_length=100)\n        array_schema = cf.gen_collection_schema([pk_field, vec_field, int8_array, int16_array, int32_array,\n                                                 int64_array, bool_array, float_array, double_array, string_array])\n        collection_w = self.init_collection_wrap(schema=array_schema,\n                                                 check_task=CheckTasks.check_collection_property,\n                                                 check_items={exp_schema: array_schema})\n\n        # check array in collection.describe()\n        res = collection_w.describe()[0]\n        log.info(res)\n        fields = [\n            {\"field_id\": 100, \"name\": \"int64\", \"description\": \"\", \"type\": 5, \"params\": {},\n             \"element_type\": 0, \"is_primary\": True},\n            {\"field_id\": 101, \"name\": \"float_vector\", \"description\": \"\", \"type\": 101,\n             \"params\": {\"dim\": ct.default_dim}, \"element_type\": 0},\n            {\"field_id\": 102, \"name\": \"int8_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_capacity\": 2000}, \"element_type\": 2},\n            {\"field_id\": 103, \"name\": \"int16_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_capacity\": 2000}, \"element_type\": 3},\n            {\"field_id\": 104, \"name\": \"int32_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_capacity\": 2000}, \"element_type\": 4},\n            {\"field_id\": 105, \"name\": \"int64_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_capacity\": 2000}, \"element_type\": 5},\n            {\"field_id\": 106, \"name\": \"bool_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_capacity\": 2000}, \"element_type\": 1},\n            {\"field_id\": 107, \"name\": \"float_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_capacity\": 2000}, \"element_type\": 10},\n            {\"field_id\": 108, \"name\": \"double_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_capacity\": 2000}, \"element_type\": 11},\n            {\"field_id\": 109, \"name\": \"string_array\", \"description\": \"\", \"type\": 22,\n             \"params\": {\"max_length\": 100, \"max_capacity\": 2000}, \"element_type\": 21}\n        ]\n        # assert res[\"fields\"] == fields\n\n        # Insert data respectively\n        nb = 10\n        pk_values = [i for i in range(nb)]\n        float_vec = cf.gen_vectors(nb, ct.default_dim)\n        int8_values = [[numpy.int8(j) for j in range(nb)] for i in range(nb)]\n        int16_values = [[numpy.int16(j) for j in range(nb)] for i in range(nb)]\n        int32_values = [[numpy.int32(j) for j in range(nb)] for i in range(nb)]\n        int64_values = [[numpy.int64(j) for j in range(nb)] for i in range(nb)]\n        bool_values = [[numpy.bool_(j) for j in range(nb)] for i in range(nb)]\n        float_values = [[numpy.float32(j) for j in range(nb)] for i in range(nb)]\n        double_values = [[numpy.double(j) for j in range(nb)] for i in range(nb)]\n        string_values = [[str(j) for j in range(nb)] for i in range(nb)]\n        data = [pk_values, float_vec, int8_values, int16_values, int32_values, int64_values,\n                bool_values, float_values, double_values, string_values]\n        collection_w.insert(data)\n\n        # check insert successfully\n        collection_w.flush()\n        collection_w.num_entities == nb\n\n\nclass TestCollectionMultipleVectorValid(TestcaseBase):\n    \"\"\"\n    ******************************************************************\n    #  The followings are valid cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"primary_key\", [cf.gen_int64_field(is_primary=True), cf.gen_string_field(is_primary=True)])\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    @pytest.mark.parametrize(\"shards_num\", [1, 3])\n    def test_create_collection_multiple_vectors_all_supported_field_type(self, primary_key, auto_id, shards_num, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        vector_limit_num = max_vector_field_num - 2\n        # add multiple vector fields\n        for i in range(vector_limit_num):\n            vector_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_float_vec_field(name=vector_field_name)\n            int_fields.append(field)\n        # add other vector fields to maximum fields num\n        int_fields.append(cf.gen_int8_field())\n        int_fields.append(cf.gen_int16_field())\n        int_fields.append(cf.gen_int32_field())\n        int_fields.append(cf.gen_float_field())\n        int_fields.append(cf.gen_double_field())\n        int_fields.append(cf.gen_string_field(cf.gen_unique_str(\"vchar_field_name\")))\n        int_fields.append(cf.gen_json_field())\n        int_fields.append(cf.gen_bool_field())\n        int_fields.append(cf.gen_array_field())\n        int_fields.append(cf.gen_binary_vec_field())\n        int_fields.append(primary_key)\n        schema = cf.gen_collection_schema(fields=int_fields, auto_id=auto_id, shards_num=shards_num)\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_key\", [ct.default_int64_field_name, ct.default_string_field_name])\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    @pytest.mark.parametrize(\"enable_dynamic_field\", [True, False])\n    def test_create_collection_multiple_vectors_different_dim(self, primary_key, auto_id, enable_dynamic_field, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields (different dim)\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        another_dim = ct.min_dim\n        schema = cf.gen_default_collection_schema(primary_field=primary_key, auto_id=auto_id, dim=ct.max_dim,\n                                                  enable_dynamic_field=enable_dynamic_field,\n                                                  multiple_dim_array=[another_dim])\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_key\", [ct.default_int64_field_name, ct.default_string_field_name])\n    def test_create_collection_multiple_vectors_maximum_dim(self, primary_key, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        schema = cf.gen_default_collection_schema(primary_field=primary_key, dim=ct.max_dim,\n                                                  multiple_dim_array=[ct.max_dim])\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})\n\n    @pytest.mark.tags(CaseLabel.L2)\n    @pytest.mark.parametrize(\"primary_key\", [cf.gen_int64_field(is_primary=True), cf.gen_string_field(is_primary=True)])\n    @pytest.mark.parametrize(\"auto_id\", [True, False])\n    @pytest.mark.parametrize(\"par_key_field\", [ct.default_int64_field_name, ct.default_string_field_name])\n    @pytest.mark.xfail(reason=\"milvus lite not support partition\")\n    def test_create_collection_multiple_vectors_partition_key(self, primary_key, auto_id, par_key_field, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        vector_limit_num = max_vector_field_num - 2\n        # add multiple vector fields\n        for i in range(vector_limit_num):\n            vector_field_name = cf.gen_unique_str(\"field_name\")\n            field = cf.gen_float_vec_field(name=vector_field_name)\n            int_fields.append(field)\n        # add other vector fields to maximum fields num\n        int_fields.append(cf.gen_int8_field())\n        int_fields.append(cf.gen_int16_field())\n        int_fields.append(cf.gen_int32_field())\n        int_fields.append(cf.gen_int64_field(cf.gen_unique_str(\"int_field_name\"),\n                                             is_partition_key=(par_key_field == ct.default_int64_field_name)))\n        int_fields.append(cf.gen_float_field())\n        int_fields.append(cf.gen_double_field())\n        int_fields.append(cf.gen_string_field(cf.gen_unique_str(\"vchar_field_name\"),\n                                              is_partition_key=(par_key_field == ct.default_string_field_name)))\n        int_fields.append(cf.gen_json_field())\n        int_fields.append(cf.gen_bool_field())\n        int_fields.append(cf.gen_array_field())\n        int_fields.append(cf.gen_binary_vec_field())\n        int_fields.append(primary_key)\n        schema = cf.gen_collection_schema(fields=int_fields, auto_id=auto_id)\n        collection_w = \\\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.check_collection_property,\n                                             check_items={exp_name: c_name, exp_schema: schema})[0]\n        assert len(collection_w.partitions) == ct.default_partition_num\n\n\nclass TestCollectionMultipleVectorInvalid(TestcaseBase):\n    \"\"\" Test case of search interface \"\"\"\n\n    @pytest.fixture(scope=\"function\", params=ct.get_invalid_strs)\n    def get_invalid_dim(self, request):\n        if request.param == 1:\n            pytest.skip(\"1 is valid dim\")\n        yield request.param\n\n    \"\"\"\n    ******************************************************************\n    #  The followings are invalid cases\n    ******************************************************************\n    \"\"\"\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"primary_key\", [cf.gen_int64_field(is_primary=True), cf.gen_string_field(is_primary=True)])\n    def test_create_collection_multiple_vectors_same_vector_field_name(self, primary_key, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        vector_limit_num = max_vector_field_num - 2\n        # add multiple vector fields\n        for i in range(vector_limit_num):\n            field = cf.gen_float_vec_field()\n            int_fields.append(field)\n        # add other vector fields to maximum fields num\n        int_fields.append(cf.gen_int8_field())\n        int_fields.append(cf.gen_int16_field())\n        int_fields.append(cf.gen_int32_field())\n        int_fields.append(cf.gen_float_field())\n        int_fields.append(cf.gen_double_field())\n        int_fields.append(cf.gen_string_field(cf.gen_unique_str(\"vchar_field_name\")))\n        int_fields.append(cf.gen_json_field())\n        int_fields.append(cf.gen_bool_field())\n        int_fields.append(cf.gen_array_field())\n        int_fields.append(cf.gen_binary_vec_field())\n        int_fields.append(primary_key)\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 65535, ct.err_msg: \"duplicated field name\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"invalid_vector_name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    @pytest.mark.xfail(reason=\"milvus lite not support partition\")\n    def test_create_collection_multiple_vectors_invalid_part_vector_field_name(self, invalid_vector_name, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        # add multiple vector fields\n        vector_field_1 = cf.gen_float_vec_field(name=invalid_vector_name)\n        int_fields.append(vector_field_1)\n        vector_field_2 = cf.gen_float_vec_field(name=\"valid_field_name\")\n        int_fields.append(vector_field_2)\n        # add other vector fields to maximum fields num\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 1701, ct.err_msg: \"Invalid field name: %s\" % invalid_vector_name}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.parametrize(\"invalid_vector_name\", [\"12-s\", \"12 s\", \"(mn)\", \"中文\", \"%$#\", \"a\".join(\"a\" for i in range(256))])\n    @pytest.mark.xfail(reason=\"incorrect error code: 1100\")\n    def test_create_collection_multiple_vectors_invalid_all_vector_field_name(self, invalid_vector_name, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        # add multiple vector fields\n        vector_field_1 = cf.gen_float_vec_field(name=invalid_vector_name)\n        int_fields.append(vector_field_1)\n        vector_field_2 = cf.gen_float_vec_field(name=invalid_vector_name + \" \")\n        int_fields.append(vector_field_2)\n        # add other vector fields to maximum fields num\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 1701, ct.err_msg: \"Invalid field name: %s\" % invalid_vector_name}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n    @pytest.mark.tags(CaseLabel.L1)\n    @pytest.mark.skip(reason=\"issue #29796\")\n    def test_create_collection_multiple_vectors_invalid_dim(self, get_invalid_dim, enable_milvus_local_api):\n        \"\"\"\n        target: test create collection with multiple vector fields\n        method: create collection with multiple vector fields\n        expected: no exception\n        \"\"\"\n        self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n        c_name = cf.gen_unique_str(prefix)\n        int_fields = []\n        # add multiple vector fields\n        vector_field_1 = cf.gen_float_vec_field(dim=get_invalid_dim)\n        int_fields.append(vector_field_1)\n        vector_field_2 = cf.gen_float_vec_field(name=\"float_vec_field\")\n        int_fields.append(vector_field_2)\n        # add other vector fields to maximum fields num\n        int_fields.append(cf.gen_int64_field(is_primary=True))\n        schema = cf.gen_collection_schema(fields=int_fields)\n        error = {ct.err_code: 65535, ct.err_msg: \"Invalid dim\"}\n        self.collection_wrap.init_collection(c_name, schema=schema, check_task=CheckTasks.err_res, check_items=error)\n\n\n# class TestCollectionMmap(TestcaseBase):\n#     @pytest.mark.tags(CaseLabel.L1)\n#     def test_describe_collection_mmap(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: enable or disable mmap in the collection\n#         method: enable or disable mmap in the collection\n#         expected: description information contains mmap\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         c_name = cf.gen_unique_str(prefix)\n#         collection_w, _ = self.collection_wrap.init_collection(c_name, schema=default_schema)\n#         collection_w.set_properties({'mmap.enabled': True})\n#         pro = collection_w.describe().get(\"properties\")\n#         assert \"mmap.enabled\" in pro.keys()\n#         assert pro[\"mmap.enabled\"] == 'True'\n#         collection_w.set_properties({'mmap.enabled': False})\n#         pro = collection_w.describe().get(\"properties\")\n#         assert pro[\"mmap.enabled\"] == 'False'\n#         collection_w.set_properties({'mmap.enabled': True})\n#         pro = collection_w.describe().get(\"properties\")\n#         assert pro[\"mmap.enabled\"] == 'True'\n#\n#     @pytest.mark.tags(CaseLabel.L1)\n#     def test_load_mmap_collection(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: after loading, enable mmap for the collection\n#         method: 1. data preparation and create index\n#         2. load collection\n#         3. enable mmap on collection\n#         expected: raise exception\n#         \"\"\"\n#         c_name = cf.gen_unique_str(prefix)\n#         collection_w = self.init_collection_wrap(c_name, schema=default_schema)\n#         collection_w.insert(cf.gen_default_list_data())\n#         collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index,\n#                                   index_name=ct.default_index_name)\n#         collection_w.set_properties({'mmap.enabled': True})\n#         pro = collection_w.describe()[0].get(\"properties\")\n#         assert pro[\"mmap.enabled\"] == 'True'\n#         collection_w.load()\n#         collection_w.set_properties({'mmap.enabled': True},\n#                                     check_task=CheckTasks.err_res,\n#                                     check_items={ct.err_code: 104,\n#                                     ct.err_msg: f\"collection already loaded\"})\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_drop_mmap_collection(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: set mmap on collection\n#         method: 1. set mmap on collection\n#         2. drop collection\n#         3. describe collection\n#         expected: description information contains mmap\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         c_name = \"coll_rand\"\n#         collection_w, _ = self.collection_wrap.init_collection(c_name, schema=default_schema)\n#         collection_w.set_properties({'mmap.enabled': True})\n#         collection_w.drop()\n#         collection_w, _ = self.collection_wrap.init_collection(c_name, schema=default_schema)\n#         pro = collection_w.describe().get(\"properties\")\n#         assert \"mmap.enabled\" not in pro.keys()\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_multiple_collections_enable_mmap(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: enabling mmap for multiple collections in a single instance\n#         method: enabling mmap for multiple collections in a single instance\n#         expected: the collection description message for mmap is normal\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         c_name = \"coll_1\"\n#         c_name2 = \"coll_2\"\n#         c_name3 = \"coll_3\"\n#         collection_w, _ = self.collection_wrap.init_collection(c_name, schema=default_schema)\n#         collection_w2, _ = self.collection_wrap.init_collection(c_name2, schema=default_schema)\n#         collection_w3, _ = self.collection_wrap.init_collection(c_name3, schema=default_schema)\n#         collection_w.set_properties({'mmap.enabled': True})\n#         collection_w2.set_properties({'mmap.enabled': True})\n#         pro = collection_w.describe().get(\"properties\")\n#         pro2 = collection_w2.describe().get(\"properties\")\n#         assert pro[\"mmap.enabled\"] == 'True'\n#         assert pro2[\"mmap.enabled\"] == 'True'\n#         collection_w3.set_properties({'mmap.enabled': True})\n#         pro3 = collection_w3.describe().get(\"properties\")\n#         assert pro3[\"mmap.enabled\"] == 'True'\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_flush_collection_mmap(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: after flush, collection enables mmap\n#         method: after flush, collection enables mmap\n#         expected: the collection description message for mmap is normal\n#         \"\"\"\n#         self._connect(enable_milvus_local_api=enable_milvus_local_api, init_collection=True)\n#         c_name = cf.gen_unique_str(prefix)\n#         collection_w, _ = self.collection_wrap.init_collection(c_name, schema=default_schema)\n#         collection_w.insert(cf.gen_default_list_data())\n#         collection_w.create_index(ct.default_float_vec_field_name, index_params=ct.default_flat_index,\n#                                   index_name=ct.default_index_name)\n#         collection_w.alter_index(ct.default_index_name, {'mmap.enabled': False})\n#         collection_w.flush()\n#         collection_w.set_properties({'mmap.enabled': True})\n#         pro = collection_w.describe().get(\"properties\")\n#         assert pro[\"mmap.enabled\"] == 'True'\n#         collection_w.alter_index(ct.default_index_name, {'mmap.enabled': True})\n#         collection_w.load()\n#         vectors = [[random.random() for _ in range(default_dim)] for _ in range(default_nq)]\n#         collection_w.search(vectors[:default_nq], default_search_field,\n#                             default_search_params, default_limit,\n#                             default_search_exp,\n#                             check_task=CheckTasks.check_search_results,\n#                             check_items={\"nq\": default_nq,\n#                                          \"limit\": default_limit})\n#\n#     @pytest.mark.tags(CaseLabel.L2)\n#     def test_enable_mmap_after_drop_collection(self, enable_milvus_local_api):\n#         \"\"\"\n#         target: enable mmap after deleting a collection\n#         method: enable mmap after deleting a collection\n#         expected: raise exception\n#         \"\"\"\n#         collection_w = self.init_collection_general(prefix, True, is_binary=True, is_index=False)[0]\n#         collection_w.drop()\n#         collection_w.set_properties({'mmap.enabled': True}, check_task=CheckTasks.err_res,\n#                                     check_items={ct.err_code: 100,\n#                                               ct.err_msg: f\"collection not found\"})"
  },
  {
    "path": "tests/utils/api_request.py",
    "content": "import traceback\nimport copy\nimport os\nfrom utils.util_log import test_log as log\n\n# enable_traceback = os.getenv('ENABLE_TRACEBACK', \"True\")\n# log.info(f\"enable_traceback:{enable_traceback}\")\n\n\nclass Error:\n    def __init__(self, error):\n        self.code = getattr(error, 'code', -1)\n        self.message = getattr(error, 'message', str(error))\n\n    def __str__(self):\n        return f\"Error(code={self.code}, message={self.message})\"\n\n    def __repr__(self):\n        return f\"Error(code={self.code}, message={self.message})\"\n\n\nlog_row_length = 300\n\n\ndef api_request_catch():\n    def wrapper(func):\n        def inner_wrapper(*args, **kwargs):\n            try:\n                _kwargs = copy.deepcopy(kwargs)\n                if \"enable_traceback\" in _kwargs:\n                    del _kwargs[\"enable_traceback\"]\n                res = func(*args, **_kwargs)\n                # if enable_traceback == \"True\":\n                if kwargs.get(\"enable_traceback\", True):\n                    res_str = str(res)\n                    log_res = res_str[0:log_row_length] + '......' if len(res_str) > log_row_length else res_str\n                    log.debug(\"(api_response) : %s \" % log_res)\n\n                return res, True\n            except Exception as e:\n                e_str = str(e)\n                log_e = e_str[0:log_row_length] + '......' if len(e_str) > log_row_length else e_str\n                # if enable_traceback == \"True\":\n                if kwargs.get(\"enable_traceback\", True):\n                    log.error(traceback.format_exc())\n                    log.error(\"(api_response) : %s\" % log_e)\n                return Error(e), False\n        return inner_wrapper\n    return wrapper\n\n\n@api_request_catch()\ndef api_request(_list, **kwargs):\n    if isinstance(_list, list):\n        func = _list[0]\n        if callable(func):\n            arg = _list[1:]\n            arg_str = str(arg)\n            log_arg = arg_str[0:log_row_length] + '......' if len(arg_str) > log_row_length else arg_str\n            # if enable_traceback == \"True\":\n            if kwargs.get(\"enable_traceback\", True):\n                log.debug(\"(api_request)  : [%s] args: %s, kwargs: %s\" % (func.__qualname__, log_arg, str(kwargs)))\n            return func(*arg, **kwargs)\n    return False, False\n"
  },
  {
    "path": "tests/utils/thread_util.py",
    "content": "import logging\nimport threading\nfrom typing import Callable\n\n\nclass ConcurrencyObj:\n    def __init__(self, func_obj: Callable, interval=0, stop_flag=False):\n        self.func_obj = func_obj\n        self.interval = interval\n        self.stop_flag = stop_flag\n\n    def set_stop_flag(self, flag=True):\n        self.stop_flag = flag\n\n    def thread_func(self, *args, **kwargs):\n        self.func_obj(*args, **kwargs)\n        if self.stop_flag is False:\n            t = threading.Timer(interval=self.interval, function=self.thread_func, args=args, kwargs=kwargs)\n            t.start()\n\n    def multi_func(self, num, *args, **kwargs):\n        logging.info(f\"multi_func start \")\n        for i in range(num):\n            logging.info(\"thread number: {}\".format(i))\n            self.thread_func(*args, **kwargs)\n\n"
  },
  {
    "path": "tests/utils/util_common.py",
    "content": "import glob\nimport time\nfrom yaml import full_load\nimport json\nimport pandas as pd\nfrom utils.util_log import test_log as log\n\ndef gen_experiment_config(yaml):\n    \"\"\"load the yaml file of chaos experiment\"\"\"\n    with open(yaml) as f:\n        _config = full_load(f)\n        f.close()\n    return _config\n\n\ndef findkeys(node, kv):\n    # refer to https://stackoverflow.com/questions/9807634/find-all-occurrences-of-a-key-in-nested-dictionaries-and-lists\n    if isinstance(node, list):\n        for i in node:\n            for x in findkeys(i, kv):\n               yield x\n    elif isinstance(node, dict):\n        if kv in node:\n            yield node[kv]\n        for j in node.values():\n            for x in findkeys(j, kv):\n                yield x\n\n\ndef update_key_value(node, modify_k, modify_v):\n    # update the value of modify_k to modify_v\n    if isinstance(node, list):\n        for i in node:\n            update_key_value(i, modify_k, modify_v)\n    elif isinstance(node, dict):\n        if modify_k in node:\n            node[modify_k] = modify_v\n        for j in node.values():\n            update_key_value(j, modify_k, modify_v)\n    return node\n\n\ndef update_key_name(node, modify_k, modify_k_new):\n    # update the name of modify_k to modify_k_new\n    if isinstance(node, list):\n        for i in node:\n            update_key_name(i, modify_k, modify_k_new)\n    elif isinstance(node, dict):\n        if modify_k in node:\n            value_backup = node[modify_k]\n            del node[modify_k]\n            node[modify_k_new] = value_backup\n        for j in node.values():\n            update_key_name(j, modify_k, modify_k_new)\n    return node\n\n\ndef get_collections(file_name=\"all_collections.json\"):\n    try:\n        with open(f\"/tmp/ci_logs/{file_name}\", \"r\") as f:\n            data = json.load(f)\n            collections = data[\"all\"]\n    except Exception as e:\n        log.error(f\"get_all_collections error: {e}\")\n        return []\n    return collections\n\n\ndef get_deploy_test_collections():\n    try:\n        with open(\"/tmp/ci_logs/deploy_test_all_collections.json\", \"r\") as f:\n            data = json.load(f)\n            collections = data[\"all\"]\n    except Exception as e:\n        log.error(f\"get_all_collections error: {e}\")\n        return []\n    return collections\n\n\ndef get_chaos_test_collections():\n    try:\n        with open(\"/tmp/ci_logs/chaos_test_all_collections.json\", \"r\") as f:\n            data = json.load(f)\n            collections = data[\"all\"]\n    except Exception as e:\n        log.error(f\"get_all_collections error: {e}\")\n        return []\n    return collections\n\n\ndef wait_signal_to_apply_chaos():\n    all_db_file = glob.glob(\"/tmp/ci_logs/event_records*.parquet\")\n    log.info(f\"all files {all_db_file}\")\n    ready_apply_chaos = True\n    timeout = 15*60\n    t0 = time.time()\n    for f in all_db_file:\n        while True and (time.time() - t0 < timeout):\n            try:\n                df = pd.read_parquet(f)\n                log.debug(f\"read {f}:result\\n {df}\")\n                result = df[(df['event_name'] == 'init_chaos') & (df['event_status'] == 'ready')]\n                if len(result) > 0:\n                    log.info(f\"{f}: {result}\")\n                    ready_apply_chaos = True\n                    break\n                else:\n                    ready_apply_chaos = False\n            except Exception as e:\n                log.error(f\"read_parquet error: {e}\")\n                ready_apply_chaos = False\n            time.sleep(10)\n\n    return ready_apply_chaos\n\n\nif __name__ == \"__main__\":\n    d = { \"id\" : \"abcde\",\n        \"key1\" : \"blah\",\n        \"key2\" : \"blah blah\",\n        \"nestedlist\" : [\n        { \"id\" : \"qwerty\",\n            \"nestednestedlist\" : [\n            { \"id\" : \"xyz\", \"keyA\" : \"blah blah blah\" },\n            { \"id\" : \"fghi\", \"keyZ\" : \"blah blah blah\" }],\n            \"anothernestednestedlist\" : [\n            { \"id\" : \"asdf\", \"keyQ\" : \"blah blah\" },\n            { \"id\" : \"yuiop\", \"keyW\" : \"blah\" }] } ] }\n    print(list(findkeys(d, 'id')))\n    update_key_value(d, \"none_id\", \"ccc\")\n    print(d)\n"
  },
  {
    "path": "tests/utils/util_k8s.py",
    "content": "import json\nimport os.path\nimport time\nimport pyetcd\nimport requests\nfrom pymilvus import connections\nfrom kubernetes import client, config\nfrom kubernetes.client.rest import ApiException\nfrom common.milvus_sys import MilvusSys\nfrom utils.util_log import test_log as log\nfrom common.common_type import in_cluster_env\n\n\ndef init_k8s_client_config():\n    \"\"\"\n    init kubernetes client config\n    \"\"\"\n    try:\n        in_cluster = os.getenv(in_cluster_env, default='False')\n        # log.debug(f\"env variable IN_CLUSTER: {in_cluster}\")\n        if in_cluster.lower() == 'true':\n            config.load_incluster_config()\n        else:\n            config.load_kube_config()\n    except Exception as e:\n        raise Exception(e)\n\n\ndef get_current_namespace():\n    init_k8s_client_config()\n    ns = config.list_kube_config_contexts()[1][\"context\"][\"namespace\"]\n    return ns\n\n\ndef wait_pods_ready(namespace, label_selector, expected_num=None, timeout=360):\n    \"\"\"\n    wait pods with label selector all ready\n\n    :param namespace: the namespace where the release\n    :type namespace: str\n\n    :param label_selector: labels to restrict which pods are waiting to be ready\n    :type label_selector: str\n\n    :param expected_num: expected the minimum number of pods to be ready if not None\n    :type expected_num: int\n\n    :param timeout: limits the duration of the call\n    :type timeout: int\n\n    :example:\n            >>> wait_pods_ready(\"default\", \"app.kubernetes.io/instance=scale-query\", expected_num=9)\n    \"\"\"\n    init_k8s_client_config()\n    api_instance = client.CoreV1Api()\n    try:\n        all_pos_ready_flag = False\n        t0 = time.time()\n        while not all_pos_ready_flag and time.time() - t0 < timeout:\n            api_response = api_instance.list_namespaced_pod(namespace=namespace, label_selector=label_selector)\n            all_pos_ready_flag = True\n            if expected_num is not None and len(api_response.items) < expected_num:\n                all_pos_ready_flag = False\n            else:\n                for item in api_response.items:\n                    if item.status.phase != 'Running':\n                        all_pos_ready_flag = False\n                        break\n                    for c in item.status.container_statuses:\n                        log.debug(f\"{c.name} status is {c.ready}\")\n                        if c.ready is False:\n                            all_pos_ready_flag = False\n                            break\n            if not all_pos_ready_flag:\n                log.debug(\"all pods are not ready, please wait\")\n                time.sleep(5)\n        if all_pos_ready_flag:\n            log.info(f\"all pods in namespace {namespace} with label {label_selector} are ready\")\n        else:\n            log.info(f\"timeout for waiting all pods in namespace {namespace} with label {label_selector} ready\")\n    except ApiException as e:\n        log.error(\"Exception when calling CoreV1Api->list_namespaced_pod: %s\\n\" % e)\n        raise Exception(str(e))\n\n    return all_pos_ready_flag\n\n\ndef get_pod_list(namespace, label_selector):\n    \"\"\"\n    get pod list with label selector\n\n    :param namespace: the namespace where the release\n    :type namespace: str\n\n    :param label_selector: labels to restrict which pods to list\n    :type label_selector: str\n\n    :example:\n            >>> get_pod_list(\"chaos-testing\", \"app.kubernetes.io/instance=test-proxy-pod-failure, component=proxy\")\n    \"\"\"\n    init_k8s_client_config()\n    api_instance = client.CoreV1Api()\n    try:\n        api_response = api_instance.list_namespaced_pod(namespace=namespace, label_selector=label_selector)\n        return api_response.items\n    except ApiException as e:\n        log.error(\"Exception when calling CoreV1Api->list_namespaced_pod: %s\\n\" % e)\n        raise Exception(str(e))\n\n\ndef get_pod_ip_name_pairs(namespace, label_selector):\n    \"\"\"\n    get pod ip name pairs with label selector\n\n    :param namespace: the namespace where the release\n    :type namespace: str\n\n    :param label_selector: labels to restrict which pods to list\n    :type label_selector: str\n\n    :example:\n            >>> get_pod_ip_name_pairs(\"chaos-testing\", \"app.kubernetes.io/instance=test-proxy-pod-failure, component=querynode\")\n    \"\"\"\n    m = dict()\n    items = get_pod_list(namespace, label_selector)\n    for item in items:\n        ip = item.status.pod_ip\n        name = item.metadata.name\n        m[ip] = name\n    return m\n\n\ndef get_querynode_id_pod_pairs(namespace, label_selector):\n    \"\"\"\n    get milvus node id and corresponding pod name pairs with label selector\n\n    :param namespace: the namespace where the release\n    :type namespace: str\n\n    :param label_selector: labels to restrict which pods to list\n    :type label_selector: str\n\n    :example:\n            >>> querynode_id_pod_pair = get_querynode_id_pod_pairs(\"chaos-testing\", \"app.kubernetes.io/instance=milvus-multi-querynode, component=querynode\")\n            {\n             5: 'milvus-multi-querynode-querynode-7b8f4b5c5-4pn42',\n             9: 'milvus-multi-querynode-querynode-7b8f4b5c5-99tx7',\n             1: 'milvus-multi-querynode-querynode-7b8f4b5c5-w9sk8',\n             3: 'milvus-multi-querynode-querynode-7b8f4b5c5-xx84j',\n             6: 'milvus-multi-querynode-querynode-7b8f4b5c5-x95dp'\n            }\n    \"\"\"\n    # TODO: extend this function to other worker nodes, not only querynode\n    querynode_ip_pod_pair = get_pod_ip_name_pairs(namespace, label_selector)\n    querynode_id_pod_pair = {}\n    ms = MilvusSys()\n    for node in ms.query_nodes:\n        ip = node[\"infos\"]['hardware_infos'][\"ip\"].split(\":\")[0]\n        querynode_id_pod_pair[node[\"identifier\"]] = querynode_ip_pod_pair[ip]\n    return querynode_id_pod_pair\n\n\ndef get_milvus_instance_name(namespace, host=\"127.0.0.1\", port=\"19530\", milvus_sys=None):\n    \"\"\"\n    get milvus instance name after connection\n\n    :param namespace: the namespace where the release\n    :type namespace: str\n\n    :param host: milvus host ip\n    :type host: str\n\n    :param port: milvus port\n    :type port: str\n    :example:\n            >>> milvus_instance_name = get_milvus_instance_name(\"chaos-testing\", \"10.96.250.111\")\n            \"milvus-multi-querynode\"\n\n    \"\"\"\n    if milvus_sys is None:\n        connections.add_connection(_default={\"host\": host, \"port\": port})\n        connections.connect(alias='_default')\n        ms = MilvusSys()\n    else:\n        ms = milvus_sys\n    query_node_ip = ms.query_nodes[0][\"infos\"]['hardware_infos'][\"ip\"].split(\":\")[0]\n    ip_name_pairs = get_pod_ip_name_pairs(namespace, \"app.kubernetes.io/name=milvus\")\n    pod_name = ip_name_pairs[query_node_ip]\n\n    init_k8s_client_config()\n    api_instance = client.CoreV1Api()\n    try:\n        api_response = api_instance.read_namespaced_pod(namespace=namespace, name=pod_name)\n    except ApiException as e:\n        log.error(\"Exception when calling CoreV1Api->list_namespaced_pod: %s\\n\" % e)\n        raise Exception(str(e))\n    milvus_instance_name = api_response.metadata.labels[\"app.kubernetes.io/instance\"]\n    return milvus_instance_name\n\n\ndef get_milvus_deploy_tool(namespace, milvus_sys):\n    \"\"\"\n    get milvus instance name after connection\n    :param namespace: the namespace where the release\n    :type namespace: str\n    :param milvus_sys: milvus_sys\n    :type namespace: MilvusSys\n    :example:\n            >>> deploy_tool = get_milvus_deploy_tool(\"chaos-testing\", milvus_sys)\n            \"helm\"\n    \"\"\"\n    ms = milvus_sys\n    query_node_ip = ms.query_nodes[0][\"infos\"]['hardware_infos'][\"ip\"].split(\":\")[0]\n    ip_name_pairs = get_pod_ip_name_pairs(namespace, \"app.kubernetes.io/name=milvus\")\n    pod_name = ip_name_pairs[query_node_ip]\n    init_k8s_client_config()\n    api_instance = client.CoreV1Api()\n    try:\n        api_response = api_instance.read_namespaced_pod(namespace=namespace, name=pod_name)\n    except ApiException as e:\n        log.error(\"Exception when calling CoreV1Api->list_namespaced_pod: %s\\n\" % e)\n        raise Exception(str(e))\n    if (\"app.kubernetes.io/managed-by\" in api_response.metadata.labels and\n            api_response.metadata.labels[\"app.kubernetes.io/managed-by\"] == \"milvus-operator\"):\n        deploy_tool = \"milvus-operator\"\n    else:\n        deploy_tool = \"helm\"\n    return deploy_tool\n\n\ndef export_pod_logs(namespace, label_selector, release_name=None):\n    \"\"\"\n    export pod logs with label selector to '/tmp/milvus'\n\n    :param namespace: the namespace where the release\n    :type namespace: str\n\n    :param label_selector: labels to restrict which pods logs to export\n    :type label_selector: str\n\n    :param release_name: use the release name as server logs director name\n    :type label_selector: str\n\n    :example:\n            >>> export_pod_logs(\"chaos-testing\", \"app.kubernetes.io/instance=mic-milvus\")\n    \"\"\"\n    if isinstance(release_name, str):\n        if len(release_name.strip()) == 0:\n            raise ValueError(\"Got an unexpected space release_name\")\n    else:\n        raise TypeError(\"Got an unexpected non-string release_name\")\n    pod_log_path = '/tmp/milvus_logs' if release_name is None else f'/tmp/milvus_logs/{release_name}'\n\n    if not os.path.isdir(pod_log_path):\n        os.makedirs(pod_log_path)\n\n    # get pods and export logs\n    items = get_pod_list(namespace, label_selector=label_selector)\n    try:\n        for item in items:\n            pod_name = item.metadata.name\n            os.system(f'kubectl logs {pod_name} > {pod_log_path}/{pod_name}.log 2>&1')\n    except Exception as e:\n        log.error(f\"Exception when export pod {pod_name} logs: %s\\n\" % e)\n        raise Exception(str(e))\n\n\ndef read_pod_log(namespace, label_selector, release_name):\n    init_k8s_client_config()\n    items = get_pod_list(namespace, label_selector=label_selector)\n\n    try:\n        # export log to /tmp/release_name path\n        pod_log_path = f'/tmp/milvus_logs/{release_name}'\n        if not os.path.isdir(pod_log_path):\n            os.makedirs(pod_log_path)\n\n        api_instance = client.CoreV1Api()\n\n        for item in items:\n            pod = item.metadata.name\n            log.debug(f'Start to read {pod} log')\n            logs = api_instance.read_namespaced_pod_log(name=pod, namespace=namespace, async_req=True)\n            with open(f'{pod_log_path}/{pod}.log', \"w\") as f:\n                f.write(logs.get())\n\n    except ApiException as e:\n        log.error(f\"Exception when read pod {pod} logs: %s\\n\" % e)\n        raise Exception(str(e))\n\n\ndef get_metrics_querynode_sq_req_count():\n    \"\"\" get metric milvus_querynode_collection_num from prometheus\"\"\"\n\n    PROMETHEUS = 'http://10.96.7.6:9090'\n    query_str = 'milvus_querynode_sq_req_count{app_kubernetes_io_instance=\"mic-replica\",' \\\n                'app_kubernetes_io_name=\"milvus\",namespace=\"chaos-testing\"}'\n\n    response = requests.get(PROMETHEUS + '/api/v1/query', params={'query': query_str})\n    if response.status_code == 200:\n        results = response.json()[\"data\"]['result']\n        # print(results)\n        # print(type(results))\n        log.debug(json.dumps(results, indent=4))\n        milvus_querynode_sq_req_count = {}\n        for res in results:\n            if res[\"metric\"][\"status\"] == \"total\":\n                querynode_id = res[\"metric\"][\"node_id\"]\n                # pod = res[\"metric\"][\"pod\"]\n                value = res[\"value\"][-1]\n                milvus_querynode_sq_req_count[int(querynode_id)] = int(value)\n        # log.debug(milvus_querynode_sq_req_count)\n        return milvus_querynode_sq_req_count\n    else:\n        raise Exception(-1, f\"Failed to get metrics with status code {response.status_code}\")\n\n\ndef get_svc_ip(namespace, label_selector):\n    \"\"\" get svc ip from svc list \"\"\"\n    init_k8s_client_config()\n    api_instance = client.CoreV1Api()\n    try:\n        api_response = api_instance.list_namespaced_service(namespace=namespace, label_selector=label_selector)\n    except ApiException as e:\n        log.error(\"Exception when calling CoreV1Api->list_namespaced_service: %s\\n\" % e)\n        raise Exception(str(e))\n    svc_ip = api_response.items[0].spec.cluster_ip\n    return svc_ip\n\n\ndef parse_etcdctl_table_output(output):\n    \"\"\" parse etcdctl table output \"\"\"\n    output = output.split(\"\\n\")\n    title = []\n    data = []\n    for line in output:\n        if \"ENDPOINT\" in line:\n            title = [x.strip(\" \") for x in line.strip(\"|\").split(\"|\")]\n        if \":\" in line:\n            data.append([x.strip(\" \") for x in line.strip(\"|\").split(\"|\")])\n    return title, data\n\n\ndef get_etcd_leader(release_name, deploy_tool=\"helm\"):\n    \"\"\" get etcd leader by etcdctl \"\"\"\n    pod_list = []\n    if deploy_tool == \"helm\":\n        label_selector = f\"app.kubernetes.io/instance={release_name}-etcd, app.kubernetes.io/name=etcd\"\n        pod_list = get_pod_list(\"chaos-testing\", label_selector)\n        if len(pod_list) == 0:\n            label_selector = f\"app.kubernetes.io/instance={release_name}, app.kubernetes.io/name=etcd\"\n            pod_list = get_pod_list(\"chaos-testing\", label_selector)\n    if deploy_tool == \"operator\":\n        label_selector = f\"app.kubernetes.io/instance={release_name}, app.kubernetes.io/name=etcd\"\n        pod_list = get_pod_list(\"chaos-testing\", label_selector)\n    leader = None\n    for pod in pod_list:\n        endpoint = f\"{pod.status.pod_ip}:2379\"\n        cmd = f\"etcdctl --endpoints={endpoint} endpoint status -w table\"\n        output = os.popen(cmd).read()\n        log.info(f\"etcdctl output: {output}\")\n        title, data = parse_etcdctl_table_output(output)\n        idx = title.index(\"IS LEADER\")\n        if data[0][idx] == \"true\":\n            leader = pod.metadata.name\n    log.info(f\"etcd leader is {leader}\")\n    return leader\n\n\ndef get_etcd_followers(release_name, deploy_tool=\"helm\"):\n    \"\"\" get etcd follower by etcdctl \"\"\"\n    pod_list = []\n    if deploy_tool == \"helm\":\n        label_selector = f\"app.kubernetes.io/instance={release_name}-etcd, app.kubernetes.io/name=etcd\"\n        pod_list = get_pod_list(\"chaos-testing\", label_selector)\n        if len(pod_list) == 0:\n            label_selector = f\"app.kubernetes.io/instance={release_name}, app.kubernetes.io/name=etcd\"\n            pod_list = get_pod_list(\"chaos-testing\", label_selector)\n    if deploy_tool == \"operator\":\n        label_selector = f\"app.kubernetes.io/instance={release_name}, app.kubernetes.io/name=etcd\"\n        pod_list = get_pod_list(\"chaos-testing\", label_selector)\n    followers = []\n    for pod in pod_list:\n        endpoint = f\"{pod.status.pod_ip}:2379\"\n        cmd = f\"etcdctl --endpoints={endpoint} endpoint status -w table\"\n        output = os.popen(cmd).read()\n        log.info(f\"etcdctl output: {output}\")\n        title, data = parse_etcdctl_table_output(output)\n        idx = title.index(\"IS LEADER\")\n        if data[0][idx] == \"false\":\n            followers.append(pod.metadata.name)\n    log.info(f\"etcd followers are {followers}\")\n    return followers\n\n\ndef find_activate_standby_coord_pod(namespace, release_name, coord_type):\n    init_k8s_client_config()\n    api_instance = client.CoreV1Api()\n    etcd_service_name = release_name + \"-etcd\"\n    service = api_instance.read_namespaced_service(name=etcd_service_name, namespace=namespace)\n    etcd_cluster_ip = service.spec.cluster_ip\n    etcd_port = service.spec.ports[0].port\n    etcd = pyetcd.client(host=etcd_cluster_ip, port=etcd_port)\n    v = etcd.get(f'by-dev/meta/session/{coord_type}')\n    log.info(f\"coord_type: {coord_type}, etcd session value: {v}\")\n    activated_pod_ip = json.loads(v[0])[\"Address\"].split(\":\")[0]\n    label_selector = f'app.kubernetes.io/instance={release_name}, component={coord_type}'\n    items = get_pod_list(namespace, label_selector=label_selector)\n    all_pod_list = []\n    for item in items:\n        pod_name = item.metadata.name\n        all_pod_list.append(pod_name)\n    activate_pod_list = []\n    standby_pod_list = []\n    for item in items:\n        pod_name = item.metadata.name\n        ip = item.status.pod_ip\n        if ip == activated_pod_ip:\n            activate_pod_list.append(pod_name)\n    standby_pod_list = list(set(all_pod_list) - set(activate_pod_list))\n    return activate_pod_list, standby_pod_list\n\n\ndef record_time_when_standby_activated(namespace, release_name, coord_type, timeout=360):\n    activate_pod_list_before, standby_pod_list_before = find_activate_standby_coord_pod(namespace, release_name,\n                                                                                        coord_type)\n    log.info(f\"check standby switch: activate_pod_list_before {activate_pod_list_before}, \"\n             f\"standby_pod_list_before {standby_pod_list_before}\")\n    standby_activated = False\n    activate_pod_list_after, standby_pod_list_after = find_activate_standby_coord_pod(namespace, release_name,\n                                                                                      coord_type)\n    start_time = time.time()\n    end_time = time.time()\n    while not standby_activated and end_time - start_time < timeout:\n        try:\n            activate_pod_list_after, standby_pod_list_after = find_activate_standby_coord_pod(namespace, release_name,\n                                                                                              coord_type)\n            if activate_pod_list_after[0] in standby_pod_list_before:\n                standby_activated = True\n                log.info(f\"Standby {coord_type} pod {activate_pod_list_after[0]} activated\")\n                log.info(f\"check standby switch: activate_pod_list_after {activate_pod_list_after}, \"\n                         f\"standby_pod_list_after {standby_pod_list_after}\")\n                break\n        except Exception as e:\n            log.error(f\"Exception when check standby switch: {e}\")\n        time.sleep(1)\n        end_time = time.time()\n    if standby_activated:\n        log.info(f\"Standby {coord_type} pod {activate_pod_list_after[0]} activated\")\n    else:\n        log.info(f\"Standby {coord_type} pod does not switch standby mode\")\n\n\nif __name__ == '__main__':\n    label = \"app.kubernetes.io/name=milvus, component=querynode\"\n    instance_name = get_milvus_instance_name(\"chaos-testing\", \"10.96.250.111\")\n    res = get_pod_list(\"chaos-testing\", label_selector=label)\n    m = get_pod_ip_name_pairs(\"chaos-testing\", label_selector=label)\n    export_pod_logs(namespace='chaos-testing', label_selector=label)\n"
  },
  {
    "path": "tests/utils/util_log.py",
    "content": "import logging\nimport sys\n\nfrom config.log_config import log_config\n\n\nclass TestLog:\n    def __init__(self, logger, log_debug, log_file, log_err, log_worker):\n        self.logger = logger\n        self.log_debug = log_debug\n        self.log_file = log_file\n        self.log_err = log_err\n        self.log_worker = log_worker\n\n        self.log = logging.getLogger(self.logger)\n        self.log.setLevel(logging.DEBUG)\n\n        try:\n            formatter = logging.Formatter(\"[%(asctime)s - %(levelname)s - %(name)s]: \"\n                                          \"%(message)s (%(filename)s:%(lineno)s)\")\n            # [%(process)s] process NO.\n            dh = logging.FileHandler(self.log_debug)\n            dh.setLevel(logging.DEBUG)\n            dh.setFormatter(formatter)\n            self.log.addHandler(dh)\n\n            fh = logging.FileHandler(self.log_file)\n            fh.setLevel(logging.INFO)\n            fh.setFormatter(formatter)\n            self.log.addHandler(fh)\n\n            eh = logging.FileHandler(self.log_err)\n            eh.setLevel(logging.ERROR)\n            eh.setFormatter(formatter)\n            self.log.addHandler(eh)\n\n            if self.log_worker != \"\":\n                wh = logging.FileHandler(self.log_worker)\n                wh.setLevel(logging.DEBUG)\n                wh.setFormatter(formatter)\n                self.log.addHandler(wh)\n\n            ch = logging.StreamHandler(sys.stdout)\n            ch.setLevel(logging.DEBUG)\n            ch.setFormatter(formatter)\n            # self.log.addHandler(ch)\n\n        except Exception as e:\n            print(\"Can not use %s or %s or %s to log. error : %s\" % (log_debug, log_file, log_err, str(e)))\n\n\n\"\"\"All modules share this unified log\"\"\"\nlog_debug = log_config.log_debug\nlog_info = log_config.log_info\nlog_err = log_config.log_err\nlog_worker = log_config.log_worker\ntest_log = TestLog('ci_test', log_debug, log_info, log_err, log_worker).log\n"
  },
  {
    "path": "tests/utils/util_pymilvus.py",
    "content": "import json\nimport random\nimport string\nimport threading\nimport traceback\nimport time\nimport copy\nimport numpy as np\nimport requests\nfrom sklearn import preprocessing\nfrom pymilvus import Milvus, DataType\nfrom utils.util_log import test_log as log\nfrom utils.util_k8s import init_k8s_client_config\n\nport = 19530\nepsilon = 0.000001\nnamespace = \"milvus\"\n\ndefault_flush_interval = 1\nbig_flush_interval = 1000\ndefault_drop_interval = 3\ndefault_dim = 128\ndefault_nb = 3000\ndefault_top_k = 10\nmax_top_k = 16384\nmax_partition_num = 4096\ndefault_segment_row_limit = 1000\ndefault_server_segment_row_limit = 1024 * 512\ndefault_float_vec_field_name = \"float_vector\"\ndefault_binary_vec_field_name = \"binary_vector\"\ndefault_partition_name = \"_default\"\ndefault_tag = \"1970_01_01\"\nrow_count = \"row_count\"\n\n# TODO:\nall_index_types = [\n    \"FLAT\",\n    \"IVF_FLAT\",\n    \"IVF_SQ8\",\n    \"IVF_PQ\",\n    \"HNSW\",\n    \"BIN_FLAT\",\n    \"BIN_IVF_FLAT\"\n]\n\ndefault_index_params = [\n    {\"nlist\": 128},\n    {\"nlist\": 128},\n    {\"nlist\": 128},\n    {\"nlist\": 128, \"m\": 16, \"nbits\": 8},\n    {\"M\": 48, \"efConstruction\": 500},\n    {\"nlist\": 128},\n    {\"nlist\": 128}\n]\n\n\ndef create_target_index(index, field_name):\n    index[\"field_name\"] = field_name\n\n\ndef binary_support():\n    return [\"BIN_FLAT\", \"BIN_IVF_FLAT\"]\n\n\ndef binary_metrics():\n    return [\"JACCARD\", \"HAMMING\", \"SUBSTRUCTURE\", \"SUPERSTRUCTURE\"]\n\n\ndef structure_metrics():\n    return [\"SUBSTRUCTURE\", \"SUPERSTRUCTURE\"]\n\n\ndef l2(x, y):\n    return np.linalg.norm(np.array(x) - np.array(y))\n\n\ndef ip(x, y):\n    return np.inner(np.array(x), np.array(y))\n\n\ndef jaccard(x, y):\n    x = np.asarray(x, np.bool)\n    y = np.asarray(y, np.bool)\n    return 1 - np.double(np.bitwise_and(x, y).sum()) / np.double(np.bitwise_or(x, y).sum())\n\n\ndef hamming(x, y):\n    x = np.asarray(x, np.bool)\n    y = np.asarray(y, np.bool)\n    return np.bitwise_xor(x, y).sum()\n\n\ndef tanimoto(x, y):\n    x = np.asarray(x, np.bool)\n    y = np.asarray(y, np.bool)\n    return -np.log2(np.double(np.bitwise_and(x, y).sum()) / np.double(np.bitwise_or(x, y).sum()))\n\n\ndef substructure(x, y):\n    x = np.asarray(x, np.bool)\n    y = np.asarray(y, np.bool)\n    return 1 - np.double(np.bitwise_and(x, y).sum()) / np.count_nonzero(y)\n\n\ndef superstructure(x, y):\n    x = np.asarray(x, np.bool)\n    y = np.asarray(y, np.bool)\n    return 1 - np.double(np.bitwise_and(x, y).sum()) / np.count_nonzero(x)\n\n\ndef get_milvus(host, port, uri=None, handler=None, **kwargs):\n    if handler is None:\n        handler = \"GRPC\"\n    try_connect = kwargs.get(\"try_connect\", True)\n    if uri is not None:\n        milvus = Milvus(uri=uri, handler=handler, try_connect=try_connect)\n    else:\n        milvus = Milvus(host=host, port=port, handler=handler, try_connect=try_connect)\n    return milvus\n\n\ndef reset_build_index_threshold(connect):\n    connect.set_config(\"engine\", \"build_index_threshold\", 1024)\n\n\ndef disable_flush(connect):\n    connect.set_config(\"storage\", \"auto_flush_interval\", big_flush_interval)\n\n\ndef enable_flush(connect):\n    # reset auto_flush_interval=1\n    connect.set_config(\"storage\", \"auto_flush_interval\", default_flush_interval)\n    config_value = connect.get_config(\"storage\", \"auto_flush_interval\")\n    assert config_value == str(default_flush_interval)\n\n\ndef gen_inaccuracy(num):\n    return num / 255.0\n\n\ndef gen_vectors(num, dim, is_normal=True):\n    vectors = [[random.random() for _ in range(dim)] for _ in range(num)]\n    vectors = preprocessing.normalize(vectors, axis=1, norm='l2')\n    return vectors.tolist()\n\n\n# def gen_vectors(num, dim, seed=np.random.RandomState(1234), is_normal=False):\n#     xb = seed.rand(num, dim).astype(\"float32\")\n#     xb = preprocessing.normalize(xb, axis=1, norm='l2')\n#     return xb.tolist()\n\n\ndef gen_binary_vectors(num, dim):\n    raw_vectors = []\n    binary_vectors = []\n    for i in range(num):\n        raw_vector = [random.randint(0, 1) for i in range(dim)]\n        raw_vectors.append(raw_vector)\n        binary_vectors.append(bytes(np.packbits(raw_vector, axis=-1).tolist()))\n    return raw_vectors, binary_vectors\n\n\ndef gen_binary_sub_vectors(vectors, length):\n    raw_vectors = []\n    binary_vectors = []\n    dim = len(vectors[0])\n    for i in range(length):\n        raw_vector = [0 for i in range(dim)]\n        vector = vectors[i]\n        for index, j in enumerate(vector):\n            if j == 1:\n                raw_vector[index] = 1\n        raw_vectors.append(raw_vector)\n        binary_vectors.append(bytes(np.packbits(raw_vector, axis=-1).tolist()))\n    return raw_vectors, binary_vectors\n\n\ndef gen_binary_super_vectors(vectors, length):\n    raw_vectors = []\n    binary_vectors = []\n    dim = len(vectors[0])\n    for i in range(length):\n        cnt_1 = np.count_nonzero(vectors[i])\n        # raw_vector = [0 for i in range(dim)] ???\n        raw_vector = [1 for i in range(dim)]\n        raw_vectors.append(raw_vector)\n        binary_vectors.append(bytes(np.packbits(raw_vector, axis=-1).tolist()))\n    return raw_vectors, binary_vectors\n\n\ndef gen_int_attr(row_num):\n    return [random.randint(0, 255) for _ in range(row_num)]\n\n\ndef gen_float_attr(row_num):\n    return [random.uniform(0, 255) for _ in range(row_num)]\n\n\ndef gen_unique_str(str_value=None):\n    prefix = \"\".join(random.choice(string.ascii_letters + string.digits) for _ in range(8))\n    return \"test_\" + prefix if str_value is None else str_value + \"_\" + prefix\n\n\ndef gen_primary_field():\n    return {\"name\": gen_unique_str(), \"type\": DataType.INT64, \"is_primary\": True}\n\n\ndef gen_single_filter_fields():\n    fields = []\n    for data_type in DataType:\n        if data_type in [DataType.INT32, DataType.INT64, DataType.FLOAT, DataType.DOUBLE]:\n            fields.append({\"name\": data_type.name, \"type\": data_type})\n    return fields\n\n\ndef gen_single_vector_fields():\n    fields = []\n    for data_type in [DataType.FLOAT_VECTOR, DataType.BINARY_VECTOR]:\n        field = {\"name\": data_type.name, \"type\": data_type, \"params\": {\"dim\": default_dim}}\n        fields.append(field)\n    return fields\n\n\ndef gen_default_fields(auto_id=True):\n    default_fields = {\n        \"fields\": [\n            {\"name\": \"int64\", \"type\": DataType.INT64, \"is_primary\": True},\n            {\"name\": \"float\", \"type\": DataType.FLOAT},\n            {\"name\": default_float_vec_field_name, \"type\": DataType.FLOAT_VECTOR, \"params\": {\"dim\": default_dim}},\n        ],\n        \"segment_row_limit\": default_segment_row_limit,\n    }\n    return default_fields\n\n\ndef gen_binary_default_fields(auto_id=True):\n    default_fields = {\n        \"fields\": [\n            {\"name\": \"int64\", \"type\": DataType.INT64, \"is_primary\": True},\n            {\"name\": \"float\", \"type\": DataType.FLOAT},\n            {\"name\": default_binary_vec_field_name, \"type\": DataType.BINARY_VECTOR, \"params\": {\"dim\": default_dim}}\n        ],\n        \"segment_row_limit\": default_segment_row_limit,\n        \"auto_id\": auto_id\n    }\n    return default_fields\n\n\ndef gen_entities(nb, start=0, is_normal=False):\n    vectors = gen_vectors(nb, default_dim, is_normal)\n    entities = [\n        {\"name\": \"int64\", \"type\": DataType.INT64, \"values\": [i for i in range(start, nb+start)]},\n        {\"name\": \"float\", \"type\": DataType.FLOAT, \"values\": [float(i) for i in range(nb)]},\n        {\"name\": default_float_vec_field_name, \"type\": DataType.FLOAT_VECTOR, \"values\": vectors}\n    ]\n    return entities\n\n\ndef gen_entities_new(nb, is_normal=False):\n    vectors = gen_vectors(nb, default_dim, is_normal)\n    entities = [\n        {\"name\": \"int64\", \"values\": [i for i in range(nb)]},\n        {\"name\": \"float\", \"values\": [float(i) for i in range(nb)]},\n        {\"name\": default_float_vec_field_name, \"values\": vectors}\n    ]\n    return entities\n\n\ndef gen_entities_rows(nb, is_normal=False, _id=True):\n    vectors = gen_vectors(nb, default_dim, is_normal)\n    entities = []\n    if not _id:\n        for i in range(nb):\n            entity = {\n                \"_id\": i,\n                \"int64\": i,\n                \"float\": float(i),\n                default_float_vec_field_name: vectors[i]\n            }\n            entities.append(entity)\n    else:\n        for i in range(nb):\n            entity = {\n                \"int64\": i,\n                \"float\": float(i),\n                default_float_vec_field_name: vectors[i]\n            }\n            entities.append(entity)\n    return entities\n\n\ndef gen_binary_entities(nb):\n    raw_vectors, vectors = gen_binary_vectors(nb, default_dim)\n    entities = [\n        {\"name\": \"int64\", \"type\": DataType.INT64, \"values\": [i for i in range(nb)]},\n        {\"name\": \"float\", \"type\": DataType.FLOAT, \"values\": [float(i) for i in range(nb)]},\n        {\"name\": default_binary_vec_field_name, \"type\": DataType.BINARY_VECTOR, \"values\": vectors}\n    ]\n    return raw_vectors, entities\n\n\ndef gen_binary_entities_new(nb):\n    raw_vectors, vectors = gen_binary_vectors(nb, default_dim)\n    entities = [\n        {\"name\": \"int64\", \"values\": [i for i in range(nb)]},\n        {\"name\": \"float\", \"values\": [float(i) for i in range(nb)]},\n        {\"name\": default_binary_vec_field_name, \"values\": vectors}\n    ]\n    return raw_vectors, entities\n\n\ndef gen_binary_entities_rows(nb, _id=True):\n    raw_vectors, vectors = gen_binary_vectors(nb, default_dim)\n    entities = []\n    if not _id:\n        for i in range(nb):\n            entity = {\n                \"_id\": i,\n                \"int64\": i,\n                \"float\": float(i),\n                default_binary_vec_field_name: vectors[i]\n            }\n            entities.append(entity)\n    else:\n        for i in range(nb):\n            entity = {\n                \"int64\": i,\n                \"float\": float(i),\n                default_binary_vec_field_name: vectors[i]\n            }\n            entities.append(entity)\n    return raw_vectors, entities\n\n\ndef gen_entities_by_fields(fields, nb, dim, ids=None):\n    entities = []\n    for field in fields:\n        if field.get(\"is_primary\", False) and ids:\n            field_value = ids\n        elif field[\"type\"] in [DataType.INT32, DataType.INT64]:\n            field_value = [1 for i in range(nb)]\n        elif field[\"type\"] in [DataType.FLOAT, DataType.DOUBLE]:\n            field_value = [3.0 for i in range(nb)]\n        elif field[\"type\"] == DataType.BINARY_VECTOR:\n            field_value = gen_binary_vectors(nb, dim)[1]\n        elif field[\"type\"] == DataType.FLOAT_VECTOR:\n            field_value = gen_vectors(nb, dim)\n        field.update({\"values\": field_value})\n        entities.append(field)\n    return entities\n\n\ndef assert_equal_entity(a, b):\n    pass\n\n\ndef gen_search_vectors_params(field_name, entities, top_k, nq, search_params={\"nprobe\": 10}, rand_vector=False,\n                              metric_type=\"L2\", replace_vecs=None):\n    if rand_vector is True:\n        dimension = len(entities[-1][\"values\"][0])\n        query_vectors = gen_vectors(nq, dimension)\n    else:\n        query_vectors = entities[-1][\"values\"][:nq]\n    if replace_vecs:\n        query_vectors = replace_vecs\n\n    search_params[\"metric_type\"] = metric_type\n    _params = {\n        \"data\": query_vectors,\n        \"anns_field\": field_name,\n        \"param\": copy.deepcopy(search_params),\n        \"limit\": top_k,\n    }\n    return _params, query_vectors\n\n\ndef update_query_expr(src_query, keep_old=True, expr=None):\n    tmp_query = copy.deepcopy(src_query)\n    if expr is not None:\n        tmp_query[\"bool\"].update(expr)\n    if keep_old is not True:\n        tmp_query[\"bool\"].pop(\"must\")\n    return tmp_query\n\n\ndef gen_default_vector_expr(default_query):\n    return default_query[\"bool\"][\"must\"][0]\n\n\ndef gen_default_term_expr(keyword=\"term\", field=\"int64\", values=None):\n    if values is None:\n        values = [i for i in range(default_nb // 2)]\n    expr = {keyword: {field: {\"values\": values}}}\n    return expr\n\n\ndef update_term_expr(src_term, terms):\n    tmp_term = copy.deepcopy(src_term)\n    for term in terms:\n        tmp_term[\"term\"].update(term)\n    return tmp_term\n\n\ndef gen_default_range_expr(keyword=\"range\", field=\"int64\", ranges=None):\n    if ranges is None:\n        ranges = {\"GT\": 1, \"LT\": default_nb // 2}\n    expr = {keyword: {field: ranges}}\n    return expr\n\n\ndef update_range_expr(src_range, ranges):\n    tmp_range = copy.deepcopy(src_range)\n    for range in ranges:\n        tmp_range[\"range\"].update(range)\n    return tmp_range\n\n\ndef gen_invalid_range():\n    range = [\n        {\"range\": 1},\n        {\"range\": {}},\n        {\"range\": []},\n        {\"range\": {\"range\": {\"int64\": {\"GT\": 0, \"LT\": default_nb // 2}}}}\n    ]\n    return range\n\n\ndef gen_valid_ranges():\n    ranges = [\n        {\"GT\": 0, \"LT\": default_nb // 2},\n        {\"GT\": default_nb // 2, \"LT\": default_nb * 2},\n        {\"GT\": 0},\n        {\"LT\": default_nb},\n        {\"GT\": -1, \"LT\": default_top_k},\n    ]\n    return ranges\n\n\ndef gen_invalid_term():\n    terms = [\n        {\"term\": 1},\n        {\"term\": []},\n        {\"term\": {}},\n        {\"term\": {\"term\": {\"int64\": {\"values\": [i for i in range(default_nb // 2)]}}}}\n    ]\n    return terms\n\n\ndef add_field_default(default_fields, type=DataType.INT64, field_name=None):\n    tmp_fields = copy.deepcopy(default_fields)\n    if field_name is None:\n        field_name = gen_unique_str()\n    field = {\n        \"name\": field_name,\n        \"type\": type\n    }\n    tmp_fields[\"fields\"].append(field)\n    return tmp_fields\n\n\ndef add_field(entities, field_name=None):\n    nb = len(entities[0][\"values\"])\n    tmp_entities = copy.deepcopy(entities)\n    if field_name is None:\n        field_name = gen_unique_str()\n    field = {\n        \"name\": field_name,\n        \"type\": DataType.INT64,\n        \"values\": [i for i in range(nb)]\n    }\n    tmp_entities.append(field)\n    return tmp_entities\n\n\ndef add_vector_field(entities, is_normal=False):\n    nb = len(entities[0][\"values\"])\n    vectors = gen_vectors(nb, default_dim, is_normal)\n    field = {\n        \"name\": gen_unique_str(),\n        \"type\": DataType.FLOAT_VECTOR,\n        \"values\": vectors\n    }\n    entities.append(field)\n    return entities\n\n\n# def update_fields_metric_type(fields, metric_type):\n#     tmp_fields = copy.deepcopy(fields)\n#     if metric_type in [\"L2\", \"IP\"]:\n#         tmp_fields[\"fields\"][-1][\"type\"] = DataType.FLOAT_VECTOR\n#     else:\n#         tmp_fields[\"fields\"][-1][\"type\"] = DataType.BINARY_VECTOR\n#     tmp_fields[\"fields\"][-1][\"params\"][\"metric_type\"] = metric_type\n#     return tmp_fields\n\n\ndef remove_field(entities):\n    del entities[0]\n    return entities\n\n\ndef remove_vector_field(entities):\n    del entities[-1]\n    return entities\n\n\ndef update_field_name(entities, old_name, new_name):\n    tmp_entities = copy.deepcopy(entities)\n    for item in tmp_entities:\n        if item[\"name\"] == old_name:\n            item[\"name\"] = new_name\n    return tmp_entities\n\n\ndef update_field_type(entities, old_name, new_name):\n    tmp_entities = copy.deepcopy(entities)\n    for item in tmp_entities:\n        if item[\"name\"] == old_name:\n            item[\"type\"] = new_name\n    return tmp_entities\n\n\ndef update_field_value(entities, old_type, new_value):\n    tmp_entities = copy.deepcopy(entities)\n    for item in tmp_entities:\n        if item[\"type\"] == old_type:\n            for index, value in enumerate(item[\"values\"]):\n                item[\"values\"][index] = new_value\n    return tmp_entities\n\n\ndef update_field_name_row(entities, old_name, new_name):\n    tmp_entities = copy.deepcopy(entities)\n    for item in tmp_entities:\n        if old_name in item:\n            item[new_name] = item[old_name]\n            item.pop(old_name)\n        else:\n            raise Exception(\"Field %s not in field\" % old_name)\n    return tmp_entities\n\n\ndef update_field_type_row(entities, old_name, new_name):\n    tmp_entities = copy.deepcopy(entities)\n    for item in tmp_entities:\n        if old_name in item:\n            item[\"type\"] = new_name\n    return tmp_entities\n\n\ndef add_vector_field(nb, dimension=default_dim):\n    field_name = gen_unique_str()\n    field = {\n        \"name\": field_name,\n        \"type\": DataType.FLOAT_VECTOR,\n        \"values\": gen_vectors(nb, dimension)\n    }\n    return field_name\n\n\ndef gen_segment_row_limits():\n    sizes = [\n        1024,\n        4096\n    ]\n    return sizes\n\n\ndef gen_invalid_ips():\n    ips = [\n        # \"255.0.0.0\",\n        # \"255.255.0.0\",\n        # \"255.255.255.0\",\n        # \"255.255.255.255\",\n        \"127.0.0\",\n        # \"123.0.0.2\",\n        \"12-s\",\n        \" \",\n        \"12 s\",\n        \"BB。A\",\n        \" siede \",\n        \"(mn)\",\n        \"中文\",\n        \"a\".join(\"a\" for _ in range(256))\n    ]\n    return ips\n\n\ndef gen_invalid_uris():\n    ip = None\n    uris = [\n        \" \",\n        \"中文\",\n        # invalid protocol\n        # \"tc://%s:%s\" % (ip, port),\n        # \"tcp%s:%s\" % (ip, port),\n\n        # # invalid port\n        # \"tcp://%s:100000\" % ip,\n        # \"tcp://%s: \" % ip,\n        # \"tcp://%s:19540\" % ip,\n        # \"tcp://%s:-1\" % ip,\n        # \"tcp://%s:string\" % ip,\n\n        # invalid ip\n        \"tcp:// :19530\",\n        # \"tcp://123.0.0.1:%s\" % port,\n        \"tcp://127.0.0:19530\",\n        # \"tcp://255.0.0.0:%s\" % port,\n        # \"tcp://255.255.0.0:%s\" % port,\n        # \"tcp://255.255.255.0:%s\" % port,\n        # \"tcp://255.255.255.255:%s\" % port,\n        \"tcp://\\n:19530\",\n    ]\n    return uris\n\n\ndef gen_invalid_strs():\n    strings = [\n        1,\n        [1],\n        None,\n        \"12-s\",\n        # \" \",\n        # \"\",\n        # None,\n        \"12 s\",\n        \"(mn)\",\n        \"中文\",\n        \"a\".join(\"a\" for i in range(256))\n    ]\n    return strings\n\n\ndef gen_invalid_field_types():\n    field_types = [\n        # 1,\n        \"=c\",\n        # 0,\n        None,\n        \"\",\n        \"a\".join(\"a\" for i in range(256))\n    ]\n    return field_types\n\n\ndef gen_invalid_metric_types():\n    metric_types = [\n        1,\n        \"=c\",\n        0,\n        None,\n        \"\",\n        \"a\".join(\"a\" for i in range(256))\n    ]\n    return metric_types\n\n\n# TODO:\ndef gen_invalid_ints():\n    int_values = [\n        # 1.0,\n        None,\n        [1, 2, 3],\n        \" \",\n        \"\",\n        -1,\n        \"String\",\n        \"=c\",\n        \"中文\",\n        \"a\".join(\"a\" for i in range(256))\n    ]\n    return int_values\n\n\ndef gen_invalid_params():\n    params = [\n        9999999999,\n        -1,\n        # None,\n        [1, 2, 3],\n        \" \",\n        \"\",\n        \"String\",\n        \"中文\"\n    ]\n    return params\n\n\ndef gen_invalid_vectors():\n    invalid_vectors = [\n        \"1*2\",\n        [],\n        [1],\n        [1, 2],\n        [\" \"],\n        ['a'],\n        [None],\n        None,\n        (1, 2),\n        {\"a\": 1},\n        \" \",\n        \"\",\n        \"String\",\n        \" siede \",\n        \"中文\",\n        \"a\".join(\"a\" for i in range(256))\n    ]\n    return invalid_vectors\n\n\ndef gen_invalid_index():\n    index_params = []\n    for index_type in gen_invalid_strs():\n        index_param = {\"index_type\": index_type, \"params\": {\"nlist\": 1024}}\n        index_params.append(index_param)\n    for nlist in gen_invalid_params():\n        index_param = {\"index_type\": \"IVF_FLAT\", \"params\": {\"nlist\": nlist}}\n        index_params.append(index_param)\n    for M in gen_invalid_params():\n        index_param = {\"index_type\": \"HNSW\", \"params\": {\"M\": M, \"efConstruction\": 100}}\n        index_params.append(index_param)\n    for efConstruction in gen_invalid_params():\n        index_param = {\"index_type\": \"HNSW\", \"params\": {\"M\": 16, \"efConstruction\": efConstruction}}\n        index_params.append(index_param)\n    index_params.append({\"index_type\": \"IVF_FLAT\", \"params\": {\"invalid_key\": 1024}})\n    index_params.append({\"index_type\": \"HNSW\", \"params\": {\"invalid_key\": 16, \"efConstruction\": 100}})\n    for invalid_n_trees in gen_invalid_params():\n        index_params.append({\"index_type\": \"ANNOY\", \"params\": {\"n_trees\": invalid_n_trees}})\n\n    return index_params\n\n\ndef gen_index():\n    nlists = [1, 1024, 16384]\n    pq_ms = [128, 64, 32, 16, 8, 4]\n    Ms = [5, 24, 48]\n    efConstructions = [100, 300, 500]\n\n    index_params = []\n    for index_type in all_index_types:\n        if index_type in [\"FLAT\", \"BIN_FLAT\", \"BIN_IVF_FLAT\"]:\n            index_params.append({\"index_type\": index_type, \"index_param\": {\"nlist\": 1024}})\n        elif index_type in [\"IVF_FLAT\", \"IVF_SQ8\"]:\n            ivf_params = [{\"index_type\": index_type, \"index_param\": {\"nlist\": nlist}} \\\n                          for nlist in nlists]\n            index_params.extend(ivf_params)\n        elif index_type == \"IVF_PQ\":\n            IVFPQ_params = [{\"index_type\": index_type, \"index_param\": {\"nlist\": nlist, \"m\": m}} \\\n                            for nlist in nlists \\\n                            for m in pq_ms]\n            index_params.extend(IVFPQ_params)\n        elif index_type in [\"HNSW\"]:\n            hnsw_params = [{\"index_type\": index_type, \"index_param\": {\"M\": M, \"efConstruction\": efConstruction}} \\\n                           for M in Ms \\\n                           for efConstruction in efConstructions]\n            index_params.extend(hnsw_params)\n\n    return index_params\n\n\ndef gen_simple_index():\n    index_params = []\n    for i in range(len(all_index_types)):\n        if all_index_types[i] in binary_support():\n            continue\n        dic = {\"index_type\": all_index_types[i], \"metric_type\": \"L2\"}\n        dic.update({\"params\": default_index_params[i]})\n        index_params.append(dic)\n    return index_params\n\n\ndef gen_binary_index():\n    index_params = []\n    for i in range(len(all_index_types)):\n        if all_index_types[i] in binary_support():\n            dic = {\"index_type\": all_index_types[i]}\n            dic.update({\"params\": default_index_params[i]})\n            index_params.append(dic)\n    return index_params\n\n\ndef gen_normal_expressions():\n    expressions = [\n        \"int64 > 0\",\n        \"int64 > 0 && int64 < 2021\",  # range\n        \"int64 == 0 || int64 == 1 || int64 == 2 || int64 == 3\",  # term\n    ]\n    return expressions\n\n\ndef assert_equal_vector(v1, v2):\n    if len(v1) != len(v2):\n        assert False\n    for i in range(len(v1)):\n        assert abs(v1[i] - v2[i]) < epsilon\n\n\ndef restart_server(helm_release_name):\n    res = True\n    timeout = 120\n    from kubernetes import client, config\n    client.rest.logger.setLevel(log.WARNING)\n\n    # service_name = \"%s.%s.svc.cluster.local\" % (helm_release_name, namespace)\n    init_k8s_client_config()\n    v1 = client.CoreV1Api()\n    pod_name = None\n    # config_map_names = v1.list_namespaced_config_map(namespace, pretty='true')\n    # body = {\"replicas\": 0}\n    pods = v1.list_namespaced_pod(namespace)\n    for i in pods.items:\n        if i.metadata.name.find(helm_release_name) != -1:\n            pod_name = i.metadata.name\n            break\n            # v1.patch_namespaced_config_map(config_map_name, namespace, body, pretty='true')\n    # status_res = v1.read_namespaced_service_status(helm_release_name, namespace, pretty='true')\n    log.debug(\"Pod name: %s\" % pod_name)\n    if pod_name is not None:\n        try:\n            v1.delete_namespaced_pod(pod_name, namespace)\n        except Exception as e:\n            log.error(str(e))\n            log.error(\"Exception when calling CoreV1Api->delete_namespaced_pod\")\n            res = False\n            return res\n        log.error(\"Sleep 10s after pod deleted\")\n        time.sleep(10)\n        # check if restart successfully\n        pods = v1.list_namespaced_pod(namespace)\n        for i in pods.items:\n            pod_name_tmp = i.metadata.name\n            log.error(pod_name_tmp)\n            if pod_name_tmp == pod_name:\n                continue\n            elif pod_name_tmp.find(helm_release_name) == -1:\n                continue\n            else:\n                status_res = v1.read_namespaced_pod_status(pod_name_tmp, namespace, pretty='true')\n                log.error(status_res.status.phase)\n                start_time = time.time()\n                ready_break = False\n                while time.time() - start_time <= timeout:\n                    log.error(time.time())\n                    status_res = v1.read_namespaced_pod_status(pod_name_tmp, namespace, pretty='true')\n                    if status_res.status.phase == \"Running\":\n                        log.error(\"Already running\")\n                        ready_break = True\n                        time.sleep(10)\n                        break\n                    else:\n                        time.sleep(1)\n                if time.time() - start_time > timeout:\n                    log.error(\"Restart pod: %s timeout\" % pod_name_tmp)\n                    res = False\n                    return res\n                if ready_break:\n                    break\n    else:\n        raise Exception(\"Pod: %s not found\" % pod_name)\n    follow = True\n    pretty = True\n    previous = True  # bool | Return previous terminated container logs. Defaults to false. (optional)\n    since_seconds = 56  # int | A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified. (optional)\n    timestamps = True  # bool | If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false. (optional)\n    container = \"milvus\"\n    # start_time = time.time()\n    # while time.time() - start_time <= timeout:\n    #     try:\n    #         api_response = v1.read_namespaced_pod_log(pod_name_tmp, namespace, container=container, follow=follow,\n    #                                                 pretty=pretty, previous=previous, since_seconds=since_seconds,\n    #                                                 timestamps=timestamps)\n    #         log.error(api_response)\n    #         return res\n    #     except Exception as e:\n    #         log.error(\"Exception when calling CoreV1Api->read_namespaced_pod_log: %s\\n\" % e)\n    #         # waiting for server start\n    #         time.sleep(5)\n    #         # res = False\n    #         # return res\n    # if time.time() - start_time > timeout:\n    #     log.error(\"Restart pod: %s timeout\" % pod_name_tmp)\n    #     res = False\n    return res\n\n\ndef compare_list_elements(_first, _second):\n    if not isinstance(_first, list) or not isinstance(_second, list) or len(_first) != len(_second):\n        return False\n\n    for ele in _first:\n        if ele not in _second:\n            return False\n\n    return True\n\n\ndef get_token(url):\n    rep = requests.get(url)\n    data = json.loads(rep.text)\n    if 'token' in data:\n        token = data['token']\n    else:\n        token = ''\n        print(\"Can not get token.\")\n    return token\n\n\ndef get_tags(url, token):\n    headers = {'Content-type': \"application/json\",\n               \"charset\": \"UTF-8\",\n               \"Accept\": \"application/vnd.docker.distribution.manifest.v2+json\",\n               \"Authorization\": \"Bearer %s\" % token}\n    try:\n        rep = requests.get(url, headers=headers)\n        data = json.loads(rep.text)\n\n        tags = []\n        if 'tags' in data:\n            tags = data[\"tags\"]\n        else:\n            print(\"Can not get the tag list\")\n        return tags\n    except:\n        print(\"Can not get the tag list\")\n        return []\n\n\ndef get_master_tags(tags_list, tag_prefix=\"master\", tag_latest=\"master-latest\"):\n    _list = []\n\n    if not isinstance(tags_list, list):\n        print(\"tags_list is not a list.\")\n        return _list\n\n    for tag in tags_list:\n        if tag_prefix in tag and tag != tag_latest:\n            _list.append(tag)\n    return _list\n\n\ndef get_config_digest(url, token):\n    headers = {'Content-type': \"application/json\",\n               \"charset\": \"UTF-8\",\n               \"Accept\": \"application/vnd.docker.distribution.manifest.v2+json\",\n               \"Authorization\": \"Bearer %s\" % token}\n    try:\n        rep = requests.get(url, headers=headers)\n        data = json.loads(rep.text)\n\n        digest = ''\n        if 'config' in data and 'digest' in data[\"config\"]:\n            digest = data[\"config\"][\"digest\"]\n        else:\n            print(\"Can not get the digest\")\n        return digest\n    except:\n        print(\"Can not get the digest\")\n        return \"\"\n\n\ndef get_latest_tag(limit=100, tag_prefix=\"master\", tag_latest=\"master-latest\"):\n    service = \"registry.docker.io\"\n    repository = \"milvusdb/milvus\"\n\n    auth_url = \"https://auth.docker.io/token?service=%s&scope=repository:%s:pull\" % (service, repository)\n    tags_url = \"https://index.docker.io/v2/%s/tags/list\" % repository\n    tag_url = \"https://index.docker.io/v2/milvusdb/milvus/manifests/\"\n\n    master_latest_digest = get_config_digest(tag_url + tag_latest, get_token(auth_url))\n    tags = get_tags(tags_url, get_token(auth_url))\n    tag_list = get_master_tags(tags, tag_prefix=tag_prefix, tag_latest=tag_latest)\n\n    latest_tag = \"\"\n    for i in range(1, len(tag_list) + 1):\n        tag_name = str(tag_list[-i])\n        tag_digest = get_config_digest(tag_url + tag_name, get_token(auth_url))\n        if tag_digest == master_latest_digest:\n            latest_tag = tag_name\n            break\n        if i > limit:\n            break\n\n    if latest_tag == \"\":\n        latest_tag = tag_latest\n        print(\"Can't find the latest image name\")\n    print(\"The image name used is %s\" % str(latest_tag))\n    return latest_tag\n\n\nclass MyThread(threading.Thread):\n    def __init__(self, target, args=()):\n        threading.Thread.__init__(self, target=target, args=args)\n\n    def run(self):\n        self.exc = None\n        try:\n            super(MyThread, self).run()\n        except BaseException as e:\n            self.exc = e\n            log.error(traceback.format_exc())\n\n    def join(self):\n        super(MyThread, self).join()\n        if self.exc:\n            raise self.exc\n"
  },
  {
    "path": "tests/utils/wrapper.py",
    "content": "import time\nfrom datetime import datetime\nimport functools\nfrom utils.util_log import test_log as log\n\nDEFAULT_FMT = '[{start_time}] [{elapsed:0.8f}s] {collection_name} {func_name} -> {res!r}'\n\n\ndef trace(fmt=DEFAULT_FMT, prefix='test', flag=True):\n    def decorate(func):\n        @functools.wraps(func)\n        def inner_wrapper(*args, **kwargs):\n            # args[0] is an instance of ApiCollectionWrapper class\n            flag = args[0].active_trace\n            if flag:\n                start_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')\n                t0 = time.perf_counter()\n                res, result = func(*args, **kwargs)\n                elapsed = time.perf_counter() - t0\n                end_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')\n                func_name = func.__name__\n                collection_name = args[0].collection.name\n                # arg_lst = [repr(arg) for arg in args[1:]][:100]\n                # arg_lst.extend(f'{k}={v!r}' for k, v in kwargs.items())\n                # arg_str = ', '.join(arg_lst)[:200]\n\n                log_str = f\"[{prefix}]\" + fmt.format(**locals())\n                # TODO: add report function in this place, like uploading to influxdb\n                # it is better a async way to do this, in case of blocking the request processing\n                log.info(log_str)\n                return res, result\n            else:\n                res, result = func(*args, **kwargs)\n                return res, result\n\n        return inner_wrapper\n\n    return decorate\n\n\ndef counter(func):\n    \"\"\" count func succ rate \"\"\"\n    def inner_wrapper(*args, **kwargs):\n        \"\"\" inner wrapper \"\"\"\n        result, is_succ = func(*args, **kwargs)\n        inner_wrapper.total += 1\n        if is_succ:\n            inner_wrapper.succ += 1\n        else:\n            inner_wrapper.fail += 1\n        return result, is_succ\n\n    inner_wrapper.name = func.__name__\n    inner_wrapper.total = 0\n    inner_wrapper.succ = 0\n    inner_wrapper.fail = 0\n    return inner_wrapper\n\n\nif __name__ == '__main__':\n    @trace()\n    def snooze(seconds, name='snooze'):\n        time.sleep(seconds)\n        return name\n        # print(f\"name: {name}\")\n\n\n    for i in range(3):\n        res = snooze(.123, name=i)\n        print(\"res:\", res)\n"
  },
  {
    "path": "thirdparty/knowhere-android.patch",
    "content": "diff --git a/CMakeLists.txt b/CMakeLists.txt\nindex bd495fcd..a46918b0 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -97,7 +97,7 @@ find_package(nlohmann_json REQUIRED)\n find_package(glog REQUIRED)\n find_package(prometheus-cpp REQUIRED)\n find_package(fmt REQUIRED)\n-find_package(opentelemetry-cpp REQUIRED)\n+# find_package(opentelemetry-cpp REQUIRED)\n \n set(CMAKE_CXX_STANDARD 17)\n set(CMAKE_OSX_DEPLOYMENT_TARGET\n@@ -171,17 +171,17 @@ if(NOT WITH_LIGHT)\n endif()\n list(APPEND KNOWHERE_LINKER_LIBS fmt::fmt-header-only)\n list(APPEND KNOWHERE_LINKER_LIBS Folly::folly)\n-if(NOT WITH_LIGHT)\n-  list(APPEND KNOWHERE_LINKER_LIBS opentelemetry-cpp::opentelemetry_trace)\n-  list(APPEND KNOWHERE_LINKER_LIBS\n-       opentelemetry-cpp::opentelemetry_exporter_ostream_span)\n-  list(APPEND KNOWHERE_LINKER_LIBS\n-       opentelemetry-cpp::opentelemetry_exporter_jaeger_trace)\n-  list(APPEND KNOWHERE_LINKER_LIBS\n-       opentelemetry-cpp::opentelemetry_exporter_otlp_grpc)\n-  list(APPEND KNOWHERE_LINKER_LIBS\n-       opentelemetry-cpp::opentelemetry_exporter_otlp_http)\n-endif()\n+# if(NOT WITH_LIGHT)\n+#   list(APPEND KNOWHERE_LINKER_LIBS opentelemetry-cpp::opentelemetry_trace)\n+#   list(APPEND KNOWHERE_LINKER_LIBS\n+#        opentelemetry-cpp::opentelemetry_exporter_ostream_span)\n+#   list(APPEND KNOWHERE_LINKER_LIBS\n+#        opentelemetry-cpp::opentelemetry_exporter_jaeger_trace)\n+#   list(APPEND KNOWHERE_LINKER_LIBS\n+#        opentelemetry-cpp::opentelemetry_exporter_otlp_grpc)\n+#   list(APPEND KNOWHERE_LINKER_LIBS\n+#        opentelemetry-cpp::opentelemetry_exporter_otlp_http)\n+# endif()\n \n add_library(knowhere SHARED ${KNOWHERE_SRCS})\n add_dependencies(knowhere ${KNOWHERE_LINKER_LIBS})\ndiff --git a/cmake/libs/libfaiss.cmake b/cmake/libs/libfaiss.cmake\nindex 8b77c606..9873a72a 100644\n--- a/cmake/libs/libfaiss.cmake\n+++ b/cmake/libs/libfaiss.cmake\n@@ -67,9 +67,8 @@ if(APPLE)\n   set(BLA_VENDOR Apple)\n endif()\n \n-find_package(BLAS REQUIRED)\n+find_package(OpenBLAS REQUIRED)\n \n-find_package(LAPACK REQUIRED)\n \n if(__X86_64)\n   list(REMOVE_ITEM FAISS_SRCS ${FAISS_AVX2_SRCS})\n@@ -127,7 +126,7 @@ if(__AARCH64)\n             -Wno-strict-aliasing>)\n \n   add_dependencies(faiss knowhere_utils)\n-  target_link_libraries(faiss PUBLIC OpenMP::OpenMP_CXX ${BLAS_LIBRARIES}\n+  target_link_libraries(faiss PUBLIC OpenMP::OpenMP_CXX OpenBLAS::OpenBLAS\n                                      ${LAPACK_LIBRARIES} knowhere_utils)\n   target_compile_definitions(faiss PRIVATE FINTEGER=int)\n endif()\ndiff --git a/cmake/utils/platform_check.cmake b/cmake/utils/platform_check.cmake\nindex afc41d07..21119186 100644\n--- a/cmake/utils/platform_check.cmake\n+++ b/cmake/utils/platform_check.cmake\n@@ -1,9 +1,10 @@\n include(CheckSymbolExists)\n \n macro(detect_target_arch)\n-  check_symbol_exists(__aarch64__ \"\" __AARCH64)\n-  check_symbol_exists(__x86_64__ \"\" __X86_64)\n-  check_symbol_exists(__powerpc64__ \"\" __PPC64)\n+    #check_symbol_exists(__aarch64__ \"\" __AARCH64)\n+    #check_symbol_exists(__x86_64__ \"\" __X86_64)\n+    #check_symbol_exists(__powerpc64__ \"\" __PPC64)\n+    set(__AARCH64 1)\n \n   if(NOT __AARCH64\n      AND NOT __X86_64\ndiff --git a/include/knowhere/comp/thread_pool.h b/include/knowhere/comp/thread_pool.h\nindex b39bde99..6fd699f0 100644\n--- a/include/knowhere/comp/thread_pool.h\n+++ b/include/knowhere/comp/thread_pool.h\n@@ -223,7 +223,7 @@ class ThreadPool {\n     static std::shared_ptr<ThreadPool>\n     GetGlobalSearchThreadPool() {\n         if (search_pool_ == nullptr) {\n-            InitGlobalSearchThreadPool(std::thread::hardware_concurrency());\n+            InitGlobalSearchThreadPool(4);\n         }\n         return search_pool_;\n     }\ndiff --git a/include/knowhere/tracer.h b/include/knowhere/tracer.h\nindex 11d5681b..4065bb13 100644\n--- a/include/knowhere/tracer.h\n+++ b/include/knowhere/tracer.h\n@@ -11,16 +11,42 @@\n \n #pragma once\n \n+#include <any>\n #include <memory>\n #include <string>\n \n #include \"knowhere/config.h\"\n+#ifndef MILVUS_LITE\n #include \"opentelemetry/trace/provider.h\"\n+#endif\n \n #define TRACE_SERVICE_KNOWHERE \"knowhere\"\n \n namespace knowhere::tracer {\n \n+#ifdef MILVUS_LITE\n+\n+namespace trace {\n+class Span {\n+ public:\n+    void\n+    End() {\n+    }\n+    void\n+    SetAttribute(const char* a, std::any b) {\n+    }\n+};\n+class Tracer {\n+ public:\n+    static int\n+    WithActiveSpan(std::shared_ptr<Span>& span) noexcept {\n+        return 0;\n+    }\n+};\n+\n+};  // namespace trace\n+#endif\n+\n struct TraceConfig {\n     std::string exporter;\n     float sampleFraction;\n@@ -36,7 +62,10 @@ struct TraceContext {\n     const uint8_t* spanID = nullptr;\n     uint8_t traceFlags = 0;\n };\n+\n+#ifndef MILVUS_LITE\n namespace trace = opentelemetry::trace;\n+#endif\n \n void\n initTelemetry(const TraceConfig& cfg);\ndiff --git a/src/common/comp/brute_force.cc b/src/common/comp/brute_force.cc\nindex f168a2b3..a34908c4 100644\n--- a/src/common/comp/brute_force.cc\n+++ b/src/common/comp/brute_force.cc\n@@ -160,7 +160,6 @@ BruteForce::Search(const DataSetPtr base_dataset, const DataSetPtr query_dataset\n         span->End();\n     }\n #endif\n-\n     return res;\n }\n \n@@ -168,6 +167,7 @@ template <typename DataType>\n Status\n BruteForce::SearchWithBuf(const DataSetPtr base_dataset, const DataSetPtr query_dataset, int64_t* ids, float* dis,\n                           const Json& config, const BitsetView& bitset) {\n+    LOG_KNOWHERE_INFO_ << \"KNOWHERE BF SEARCH START\";\n     DataSetPtr base(base_dataset);\n     DataSetPtr query(query_dataset);\n     if constexpr (!std::is_same_v<DataType, typename MockData<DataType>::type>) {\n@@ -280,6 +280,7 @@ BruteForce::SearchWithBuf(const DataSetPtr base_dataset, const DataSetPtr query_\n     }\n #endif\n \n+    LOG_KNOWHERE_INFO_ << \"KNOWHERE BF SEARCH END\";\n     return Status::success;\n }\n \ndiff --git a/src/common/tracer.cc b/src/common/tracer.cc\nindex 99daf00a..9864e62d 100644\n--- a/src/common/tracer.cc\n+++ b/src/common/tracer.cc\n@@ -13,10 +13,13 @@\n \n #include <iomanip>\n #include <iostream>\n+#include <memory>\n #include <sstream>\n #include <utility>\n \n #include \"knowhere/log.h\"\n+\n+#ifndef MILVUS_LITE\n #include \"opentelemetry/exporters/jaeger/jaeger_exporter_factory.h\"\n #include \"opentelemetry/exporters/ostream/span_exporter_factory.h\"\n #include \"opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h\"\n@@ -29,9 +32,12 @@\n #include \"opentelemetry/sdk/version/version.h\"\n #include \"opentelemetry/trace/span_context.h\"\n #include \"opentelemetry/trace/span_metadata.h\"\n+#endif\n \n namespace knowhere::tracer {\n \n+#ifndef MILVUS_LITE\n+\n namespace trace = opentelemetry::trace;\n namespace nostd = opentelemetry::nostd;\n \n@@ -143,6 +149,65 @@ EmptySpanID(const TraceContext* ctx) {\n     return isEmptyID(ctx->spanID, trace::SpanId::kSize);\n }\n \n+tracer::TraceContext\n+GetTraceCtxFromCfg(const BaseConfig* cfg) {\n+    auto trace_id = cfg->trace_id.value();\n+    auto span_id = cfg->span_id.value();\n+    auto trace_flags = cfg->trace_flags.value();\n+    return tracer::TraceContext{trace_id.data(), span_id.data(), (uint8_t)trace_flags};\n+}\n+#endif\n+\n+#ifdef MILVUS_LITE\n+void\n+initTelemetry(const TraceConfig& cfg) {\n+}\n+\n+std::shared_ptr<trace::Tracer>\n+GetTracer() {\n+    return std::make_shared<trace::Tracer>();\n+}\n+\n+std::shared_ptr<trace::Span>\n+StartSpan(const std::string& name, TraceContext* parentCtx) {\n+    return std::make_shared<trace::Span>();\n+}\n+\n+thread_local std::shared_ptr<trace::Span> local_span;\n+void\n+SetRootSpan(std::shared_ptr<trace::Span> span) {\n+}\n+\n+void\n+CloseRootSpan() {\n+}\n+\n+void\n+AddEvent(const std::string& event_label) {\n+}\n+\n+bool\n+isEmptyID(const uint8_t* id, int length) {\n+    if (id != nullptr) {\n+        for (int i = 0; i < length; i++) {\n+            if (id[i] != 0) {\n+                return false;\n+            }\n+        }\n+    }\n+    return true;\n+}\n+\n+bool\n+EmptyTraceID(const TraceContext* ctx) {\n+    return true;\n+}\n+\n+bool\n+EmptySpanID(const TraceContext* ctx) {\n+    return true;\n+}\n+\n tracer::TraceContext\n GetTraceCtxFromCfg(const BaseConfig* cfg) {\n     auto trace_id = cfg->trace_id.value();\n@@ -151,4 +216,5 @@ GetTraceCtxFromCfg(const BaseConfig* cfg) {\n     return tracer::TraceContext{trace_id.data(), span_id.data(), (uint8_t)trace_flags};\n }\n \n+#endif\n }  // namespace knowhere::tracer\ndiff --git a/src/simd/distances_neon.cc b/src/simd/distances_neon.cc\nindex eb90c9ae..0b600673 100644\n--- a/src/simd/distances_neon.cc\n+++ b/src/simd/distances_neon.cc\n@@ -14,14 +14,110 @@\n \n #include <arm_neon.h>\n #include <math.h>\n+\n+#include \"simd_util.h\"\n namespace faiss {\n+\n+// The main goal is to reduce the original precision of floats to maintain consistency with the distance result\n+// precision of the cardinal index.\n+__attribute__((always_inline)) inline float32x4_t\n+bf16_float_neon(float32x4_t f) {\n+    // Convert float to integer bits\n+    uint32x4_t bits = vreinterpretq_u32_f32(f);\n+\n+    // Add rounding constant\n+    uint32x4_t rounded_bits = vaddq_u32(bits, vdupq_n_u32(0x8000));\n+\n+    // Mask to retain only the upper 16 bits (for BF16 representation)\n+    rounded_bits = vandq_u32(rounded_bits, vdupq_n_u32(0xFFFF0000));\n+\n+    // Convert back to float\n+    return vreinterpretq_f32_u32(rounded_bits);\n+}\n+\n float\n fvec_inner_product_neon(const float* x, const float* y, size_t d) {\n-    float32x4_t sum_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t sum_ = vdupq_n_f32(0.0f);\n+    auto dim = d;\n+    while (d >= 16) {\n+        float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n+        float32x4x4_t b = vld1q_f32_x4(y + dim - d);\n+        float32x4x4_t c;\n+        c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+        c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+        c.val[2] = vmulq_f32(a.val[2], b.val[2]);\n+        c.val[3] = vmulq_f32(a.val[3], b.val[3]);\n+\n+        c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+        c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+        c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+        sum_ = vaddq_f32(sum_, c.val[0]);\n+\n+        d -= 16;\n+    }\n+\n+    if (d >= 8) {\n+        float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n+        float32x4x2_t b = vld1q_f32_x2(y + dim - d);\n+        float32x4x2_t c;\n+        c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+        c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+        c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+        sum_ = vaddq_f32(sum_, c.val[0]);\n+        d -= 8;\n+    }\n+    if (d >= 4) {\n+        float32x4_t a = vld1q_f32(x + dim - d);\n+        float32x4_t b = vld1q_f32(y + dim - d);\n+        float32x4_t c;\n+        c = vmulq_f32(a, b);\n+        sum_ = vaddq_f32(sum_, c);\n+        d -= 4;\n+    }\n+\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4_t res_y = vdupq_n_f32(0.0f);\n+    if (d >= 3) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n+        res_y = vld1q_lane_f32(y + dim - d, res_y, 2);\n+        d -= 1;\n+    }\n+\n+    if (d >= 2) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 1);\n+        res_y = vld1q_lane_f32(y + dim - d, res_y, 1);\n+        d -= 1;\n+    }\n+\n+    if (d >= 1) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 0);\n+        res_y = vld1q_lane_f32(y + dim - d, res_y, 0);\n+        d -= 1;\n+    }\n+\n+    sum_ = vaddq_f32(sum_, vmulq_f32(res_x, res_y));\n+\n+    return vaddvq_f32(sum_);\n+}\n+\n+float\n+fvec_inner_product_neon_bf16_patch(const float* x, const float* y, size_t d) {\n+    float32x4_t sum_ = vdupq_n_f32(0.0f);\n     auto dim = d;\n     while (d >= 16) {\n         float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n         float32x4x4_t b = vld1q_f32_x4(y + dim - d);\n+\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+        a.val[2] = bf16_float_neon(a.val[2]);\n+        a.val[3] = bf16_float_neon(a.val[3]);\n+\n+        b.val[0] = bf16_float_neon(b.val[0]);\n+        b.val[1] = bf16_float_neon(b.val[1]);\n+        b.val[2] = bf16_float_neon(b.val[2]);\n+        b.val[3] = bf16_float_neon(b.val[3]);\n         float32x4x4_t c;\n         c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n         c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n@@ -40,6 +136,13 @@ fvec_inner_product_neon(const float* x, const float* y, size_t d) {\n     if (d >= 8) {\n         float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n         float32x4x2_t b = vld1q_f32_x2(y + dim - d);\n+\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+\n+        b.val[0] = bf16_float_neon(b.val[0]);\n+        b.val[1] = bf16_float_neon(b.val[1]);\n+\n         float32x4x2_t c;\n         c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n         c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n@@ -50,14 +153,16 @@ fvec_inner_product_neon(const float* x, const float* y, size_t d) {\n     if (d >= 4) {\n         float32x4_t a = vld1q_f32(x + dim - d);\n         float32x4_t b = vld1q_f32(y + dim - d);\n+        a = bf16_float_neon(a);\n+        b = bf16_float_neon(b);\n         float32x4_t c;\n         c = vmulq_f32(a, b);\n         sum_ = vaddq_f32(sum_, c);\n         d -= 4;\n     }\n \n-    float32x4_t res_x = {0.0f, 0.0f, 0.0f, 0.0f};\n-    float32x4_t res_y = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4_t res_y = vdupq_n_f32(0.0f);\n     if (d >= 3) {\n         res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n         res_y = vld1q_lane_f32(y + dim - d, res_y, 2);\n@@ -75,20 +180,235 @@ fvec_inner_product_neon(const float* x, const float* y, size_t d) {\n         res_y = vld1q_lane_f32(y + dim - d, res_y, 0);\n         d -= 1;\n     }\n+    res_x = bf16_float_neon(res_x);\n+    res_y = bf16_float_neon(res_y);\n \n     sum_ = vaddq_f32(sum_, vmulq_f32(res_x, res_y));\n \n     return vaddvq_f32(sum_);\n }\n \n+float\n+fp16_vec_inner_product_neon(const knowhere::fp16* x, const knowhere::fp16* y, size_t d) {\n+    float32x4x4_t res = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    while (d >= 16) {\n+        float32x4x4_t a = vcvt4_f32_f16(vld4_f16((const __fp16*)x));\n+        float32x4x4_t b = vcvt4_f32_f16(vld4_f16((const __fp16*)y));\n+\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], b.val[0]);\n+        res.val[1] = vmlaq_f32(res.val[1], a.val[1], b.val[1]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[2], b.val[2]);\n+        res.val[3] = vmlaq_f32(res.val[3], a.val[3], b.val[3]);\n+        d -= 16;\n+        x += 16;\n+        y += 16;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[1]);\n+    res.val[2] = vaddq_f32(res.val[2], res.val[3]);\n+    if (d >= 8) {\n+        float32x4x2_t a = vcvt2_f32_f16(vld2_f16((const __fp16*)x));\n+        float32x4x2_t b = vcvt2_f32_f16(vld2_f16((const __fp16*)y));\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], b.val[0]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[1], b.val[1]);\n+        d -= 8;\n+        x += 8;\n+        y += 8;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[2]);\n+    if (d >= 4) {\n+        float32x4_t a = vcvt_f32_f16(vld1_f16((const __fp16*)x));\n+        float32x4_t b = vcvt_f32_f16(vld1_f16((const __fp16*)y));\n+        res.val[0] = vmlaq_f32(res.val[0], a, b);\n+        d -= 4;\n+        x += 4;\n+        y += 4;\n+    }\n+    if (d >= 0) {\n+        float16x4_t res_x = {0.0f, 0.0f, 0.0f, 0.0f};\n+        float16x4_t res_y = {0.0f, 0.0f, 0.0f, 0.0f};\n+        switch (d) {\n+            case 3:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 2);\n+                res_y = vld1_lane_f16((const __fp16*)y, res_y, 2);\n+                x++;\n+                y++;\n+                d--;\n+            case 2:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 1);\n+                res_y = vld1_lane_f16((const __fp16*)y, res_y, 1);\n+                x++;\n+                y++;\n+                d--;\n+            case 1:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 0);\n+                res_y = vld1_lane_f16((const __fp16*)y, res_y, 0);\n+                x++;\n+                y++;\n+                d--;\n+        }\n+        res.val[0] = vmlaq_f32(res.val[0], vcvt_f32_f16(res_x), vcvt_f32_f16(res_y));\n+    }\n+    return vaddvq_f32(res.val[0]);\n+}\n+\n+float\n+bf16_vec_inner_product_neon(const knowhere::bf16* x, const knowhere::bf16* y, size_t d) {\n+    float32x4x4_t res = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    while (d >= 16) {\n+        float32x4x4_t a = vcvt4_f32_half(vld4_u16((const uint16_t*)x));\n+        float32x4x4_t b = vcvt4_f32_half(vld4_u16((const uint16_t*)y));\n+\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], b.val[0]);\n+        res.val[1] = vmlaq_f32(res.val[1], a.val[1], b.val[1]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[2], b.val[2]);\n+        res.val[3] = vmlaq_f32(res.val[3], a.val[3], b.val[3]);\n+        d -= 16;\n+        x += 16;\n+        y += 16;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[1]);\n+    res.val[2] = vaddq_f32(res.val[2], res.val[3]);\n+    if (d >= 8) {\n+        float32x4x2_t a = vcvt2_f32_half(vld2_u16((const uint16_t*)x));\n+        float32x4x2_t b = vcvt2_f32_half(vld2_u16((const uint16_t*)y));\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], b.val[0]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[1], b.val[1]);\n+        d -= 8;\n+        x += 8;\n+        y += 8;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[2]);\n+    if (d >= 4) {\n+        float32x4_t a = vcvt_f32_half(vld1_u16((const uint16_t*)x));\n+        float32x4_t b = vcvt_f32_half(vld1_u16((const uint16_t*)y));\n+        res.val[0] = vmlaq_f32(res.val[0], a, b);\n+        d -= 4;\n+        x += 4;\n+        y += 4;\n+    }\n+    if (d >= 0) {\n+        uint16x4_t res_x = {0, 0, 0, 0};\n+        uint16x4_t res_y = {0, 0, 0, 0};\n+        switch (d) {\n+            case 3:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 2);\n+                res_y = vld1_lane_u16((const uint16_t*)y, res_y, 2);\n+                x++;\n+                y++;\n+                d--;\n+            case 2:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 1);\n+                res_y = vld1_lane_u16((const uint16_t*)y, res_y, 1);\n+                x++;\n+                y++;\n+                d--;\n+            case 1:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 0);\n+                res_y = vld1_lane_u16((const uint16_t*)y, res_y, 0);\n+                x++;\n+                y++;\n+                d--;\n+        }\n+        res.val[0] = vmlaq_f32(res.val[0], vcvt_f32_half(res_x), vcvt_f32_half(res_y));\n+    }\n+    return vaddvq_f32(res.val[0]);\n+}\n+\n float\n fvec_L2sqr_neon(const float* x, const float* y, size_t d) {\n-    float32x4_t sum_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t sum_ = vdupq_n_f32(0.0f);\n+    auto dim = d;\n+    while (d >= 16) {\n+        float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n+        float32x4x4_t b = vld1q_f32_x4(y + dim - d);\n+        float32x4x4_t c;\n+\n+        c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+        c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+        c.val[2] = vsubq_f32(a.val[2], b.val[2]);\n+        c.val[3] = vsubq_f32(a.val[3], b.val[3]);\n+\n+        c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+        c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+        c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+        c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+        c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+        c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+        c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+        sum_ = vaddq_f32(sum_, c.val[0]);\n+\n+        d -= 16;\n+    }\n \n+    if (d >= 8) {\n+        float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n+        float32x4x2_t b = vld1q_f32_x2(y + dim - d);\n+        float32x4x2_t c;\n+        c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+        c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+\n+        c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+        c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+        c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+        sum_ = vaddq_f32(sum_, c.val[0]);\n+        d -= 8;\n+    }\n+    if (d >= 4) {\n+        float32x4_t a = vld1q_f32(x + dim - d);\n+        float32x4_t b = vld1q_f32(y + dim - d);\n+        float32x4_t c;\n+        c = vsubq_f32(a, b);\n+        c = vmulq_f32(c, c);\n+\n+        sum_ = vaddq_f32(sum_, c);\n+        d -= 4;\n+    }\n+\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4_t res_y = vdupq_n_f32(0.0f);\n+    if (d >= 3) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n+        res_y = vld1q_lane_f32(y + dim - d, res_y, 2);\n+        d -= 1;\n+    }\n+\n+    if (d >= 2) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 1);\n+        res_y = vld1q_lane_f32(y + dim - d, res_y, 1);\n+        d -= 1;\n+    }\n+\n+    if (d >= 1) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 0);\n+        res_y = vld1q_lane_f32(y + dim - d, res_y, 0);\n+        d -= 1;\n+    }\n+\n+    sum_ = vaddq_f32(sum_, vmulq_f32(vsubq_f32(res_x, res_y), vsubq_f32(res_x, res_y)));\n+\n+    return vaddvq_f32(sum_);\n+}\n+\n+float\n+fvec_L2sqr_neon_bf16_patch(const float* x, const float* y, size_t d) {\n+    float32x4_t sum_ = vdupq_n_f32(0.0f);\n     auto dim = d;\n     while (d >= 16) {\n         float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n         float32x4x4_t b = vld1q_f32_x4(y + dim - d);\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+        a.val[2] = bf16_float_neon(a.val[2]);\n+        a.val[3] = bf16_float_neon(a.val[3]);\n+\n+        b.val[0] = bf16_float_neon(b.val[0]);\n+        b.val[1] = bf16_float_neon(b.val[1]);\n+        b.val[2] = bf16_float_neon(b.val[2]);\n+        b.val[3] = bf16_float_neon(b.val[3]);\n+\n         float32x4x4_t c;\n \n         c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n@@ -113,6 +433,13 @@ fvec_L2sqr_neon(const float* x, const float* y, size_t d) {\n     if (d >= 8) {\n         float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n         float32x4x2_t b = vld1q_f32_x2(y + dim - d);\n+\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+\n+        b.val[0] = bf16_float_neon(b.val[0]);\n+        b.val[1] = bf16_float_neon(b.val[1]);\n+\n         float32x4x2_t c;\n         c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n         c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n@@ -127,6 +454,8 @@ fvec_L2sqr_neon(const float* x, const float* y, size_t d) {\n     if (d >= 4) {\n         float32x4_t a = vld1q_f32(x + dim - d);\n         float32x4_t b = vld1q_f32(y + dim - d);\n+        a = bf16_float_neon(a);\n+        b = bf16_float_neon(b);\n         float32x4_t c;\n         c = vsubq_f32(a, b);\n         c = vmulq_f32(c, c);\n@@ -135,8 +464,8 @@ fvec_L2sqr_neon(const float* x, const float* y, size_t d) {\n         d -= 4;\n     }\n \n-    float32x4_t res_x = {0.0f, 0.0f, 0.0f, 0.0f};\n-    float32x4_t res_y = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4_t res_y = vdupq_n_f32(0.0f);\n     if (d >= 3) {\n         res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n         res_y = vld1q_lane_f32(y + dim - d, res_y, 2);\n@@ -155,11 +484,159 @@ fvec_L2sqr_neon(const float* x, const float* y, size_t d) {\n         d -= 1;\n     }\n \n+    res_x = bf16_float_neon(res_x);\n+    res_y = bf16_float_neon(res_y);\n+\n     sum_ = vaddq_f32(sum_, vmulq_f32(vsubq_f32(res_x, res_y), vsubq_f32(res_x, res_y)));\n \n     return vaddvq_f32(sum_);\n }\n \n+float\n+fp16_vec_L2sqr_neon(const knowhere::fp16* x, const knowhere::fp16* y, size_t d) {\n+    float32x4x4_t res = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    while (d >= 16) {\n+        float32x4x4_t a = vcvt4_f32_f16(vld4_f16((const __fp16*)x));\n+        float32x4x4_t b = vcvt4_f32_f16(vld4_f16((const __fp16*)y));\n+        a.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+        a.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+        a.val[2] = vsubq_f32(a.val[2], b.val[2]);\n+        a.val[3] = vsubq_f32(a.val[3], b.val[3]);\n+\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[1] = vmlaq_f32(res.val[1], a.val[1], a.val[1]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[2], a.val[2]);\n+        res.val[3] = vmlaq_f32(res.val[3], a.val[3], a.val[3]);\n+        d -= 16;\n+        x += 16;\n+        y += 16;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[1]);\n+    res.val[2] = vaddq_f32(res.val[2], res.val[3]);\n+    if (d >= 8) {\n+        float32x4x2_t a = vcvt2_f32_f16(vld2_f16((const __fp16*)x));\n+        float32x4x2_t b = vcvt2_f32_f16(vld2_f16((const __fp16*)y));\n+        a.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+        a.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[1], a.val[1]);\n+        d -= 8;\n+        x += 8;\n+        y += 8;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[2]);\n+    if (d >= 4) {\n+        float32x4_t a = vcvt_f32_f16(vld1_f16((const __fp16*)x));\n+        float32x4_t b = vcvt_f32_f16(vld1_f16((const __fp16*)y));\n+        a = vsubq_f32(a, b);\n+        res.val[0] = vmlaq_f32(res.val[0], a, a);\n+        d -= 4;\n+        x += 4;\n+        y += 4;\n+    }\n+    if (d >= 0) {\n+        float16x4_t res_x = vdup_n_f16(0.0f);\n+        float16x4_t res_y = vdup_n_f16(0.0f);\n+        switch (d) {\n+            case 3:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 2);\n+                res_y = vld1_lane_f16((const __fp16*)y, res_y, 2);\n+                x++;\n+                y++;\n+                d--;\n+            case 2:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 1);\n+                res_y = vld1_lane_f16((const __fp16*)y, res_y, 1);\n+                x++;\n+                y++;\n+                d--;\n+            case 1:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 0);\n+                res_y = vld1_lane_f16((const __fp16*)y, res_y, 0);\n+                x++;\n+                y++;\n+                d--;\n+        }\n+        float32x4_t diff = vsubq_f32(vcvt_f32_f16(res_x), vcvt_f32_f16(res_y));\n+\n+        res.val[0] = vmlaq_f32(res.val[0], diff, diff);\n+    }\n+    return vaddvq_f32(res.val[0]);\n+}\n+\n+float\n+bf16_vec_L2sqr_neon(const knowhere::bf16* x, const knowhere::bf16* y, size_t d) {\n+    float32x4x4_t res = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    while (d >= 16) {\n+        float32x4x4_t a = vcvt4_f32_half(vld4_u16((const uint16_t*)x));\n+        float32x4x4_t b = vcvt4_f32_half(vld4_u16((const uint16_t*)y));\n+        a.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+        a.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+        a.val[2] = vsubq_f32(a.val[2], b.val[2]);\n+        a.val[3] = vsubq_f32(a.val[3], b.val[3]);\n+\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[1] = vmlaq_f32(res.val[1], a.val[1], a.val[1]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[2], a.val[2]);\n+        res.val[3] = vmlaq_f32(res.val[3], a.val[3], a.val[3]);\n+        d -= 16;\n+        x += 16;\n+        y += 16;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[1]);\n+    res.val[2] = vaddq_f32(res.val[2], res.val[3]);\n+    if (d >= 8) {\n+        float32x4x2_t a = vcvt2_f32_half(vld2_u16((const uint16_t*)x));\n+        float32x4x2_t b = vcvt2_f32_half(vld2_u16((const uint16_t*)y));\n+        a.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+        a.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[1], a.val[1]);\n+        d -= 8;\n+        x += 8;\n+        y += 8;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[2]);\n+    if (d >= 4) {\n+        float32x4_t a = vcvt_f32_half(vld1_u16((const uint16_t*)x));\n+        float32x4_t b = vcvt_f32_half(vld1_u16((const uint16_t*)y));\n+        a = vsubq_f32(a, b);\n+        res.val[0] = vmlaq_f32(res.val[0], a, a);\n+        d -= 4;\n+        x += 4;\n+        y += 4;\n+    }\n+    if (d >= 0) {\n+        uint16x4_t res_x = vdup_n_u16(0);\n+        uint16x4_t res_y = vdup_n_u16(0);\n+        switch (d) {\n+            case 3:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 2);\n+                res_y = vld1_lane_u16((const uint16_t*)y, res_y, 2);\n+                x++;\n+                y++;\n+                d--;\n+            case 2:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 1);\n+                res_y = vld1_lane_u16((const uint16_t*)y, res_y, 1);\n+                x++;\n+                y++;\n+                d--;\n+            case 1:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 0);\n+                res_y = vld1_lane_u16((const uint16_t*)y, res_y, 0);\n+                x++;\n+                y++;\n+                d--;\n+        }\n+\n+        float32x4_t diff = vsubq_f32(vcvt_f32_half(res_x), vcvt_f32_half(res_y));\n+\n+        res.val[0] = vmlaq_f32(res.val[0], diff, diff);\n+    }\n+    return vaddvq_f32(res.val[0]);\n+}\n+\n float\n fvec_L1_neon(const float* x, const float* y, size_t d) {\n     float32x4_t sum_ = {0.f};\n@@ -214,8 +691,8 @@ fvec_L1_neon(const float* x, const float* y, size_t d) {\n         d -= 4;\n     }\n \n-    float32x4_t res_x = {0.0f, 0.0f, 0.0f, 0.0f};\n-    float32x4_t res_y = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4_t res_y = vdupq_n_f32(0.0f);\n     if (d >= 3) {\n         res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n         res_y = vld1q_lane_f32(y + dim - d, res_y, 2);\n@@ -241,7 +718,7 @@ fvec_L1_neon(const float* x, const float* y, size_t d) {\n \n float\n fvec_Linf_neon(const float* x, const float* y, size_t d) {\n-    float32x4_t sum_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t sum_ = vdupq_n_f32(0.0f);\n \n     auto dim = d;\n     while (d >= 16) {\n@@ -293,8 +770,8 @@ fvec_Linf_neon(const float* x, const float* y, size_t d) {\n         d -= 4;\n     }\n \n-    float32x4_t res_x = {0.0f, 0.0f, 0.0f, 0.0f};\n-    float32x4_t res_y = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4_t res_y = vdupq_n_f32(0.0f);\n     if (d >= 3) {\n         res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n         res_y = vld1q_lane_f32(y + dim - d, res_y, 2);\n@@ -320,7 +797,7 @@ fvec_Linf_neon(const float* x, const float* y, size_t d) {\n \n float\n fvec_norm_L2sqr_neon(const float* x, size_t d) {\n-    float32x4_t sum_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t sum_ = vdupq_n_f32(0.0f);\n     auto dim = d;\n     while (d >= 16) {\n         float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n@@ -356,7 +833,7 @@ fvec_norm_L2sqr_neon(const float* x, size_t d) {\n         d -= 4;\n     }\n \n-    float32x4_t res_x = {0.0f, 0.0f, 0.0f, 0.0f};\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n     if (d >= 3) {\n         res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n         d -= 1;\n@@ -377,6 +854,108 @@ fvec_norm_L2sqr_neon(const float* x, size_t d) {\n     return vaddvq_f32(sum_);\n }\n \n+float\n+fp16_vec_norm_L2sqr_neon(const knowhere::fp16* x, size_t d) {\n+    float32x4x4_t res = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    while (d >= 16) {\n+        float32x4x4_t a = vcvt4_f32_f16(vld4_f16((const __fp16*)x));\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[1] = vmlaq_f32(res.val[1], a.val[1], a.val[1]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[2], a.val[2]);\n+        res.val[3] = vmlaq_f32(res.val[3], a.val[3], a.val[3]);\n+        d -= 16;\n+        x += 16;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[1]);\n+    res.val[2] = vaddq_f32(res.val[2], res.val[3]);\n+    if (d >= 8) {\n+        float32x4x2_t a = vcvt2_f32_f16(vld2_f16((const __fp16*)x));\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[1], a.val[1]);\n+        d -= 8;\n+        x += 8;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[2]);\n+    if (d >= 4) {\n+        float32x4_t a = vcvt_f32_f16(vld1_f16((const __fp16*)x));\n+        res.val[0] = vmlaq_f32(res.val[0], a, a);\n+        d -= 4;\n+        x += 4;\n+    }\n+    if (d >= 0) {\n+        float16x4_t res_x = vdup_n_f16(0.0f);\n+        switch (d) {\n+            case 3:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 2);\n+                x++;\n+                d--;\n+            case 2:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 1);\n+                x++;\n+                d--;\n+            case 1:\n+                res_x = vld1_lane_f16((const __fp16*)x, res_x, 0);\n+                x++;\n+                d--;\n+        }\n+        float32x4_t x_f32 = vcvt_f32_f16(res_x);\n+        res.val[0] = vmlaq_f32(res.val[0], x_f32, x_f32);\n+    }\n+    return vaddvq_f32(res.val[0]);\n+}\n+\n+float\n+bf16_vec_norm_L2sqr_neon(const knowhere::bf16* x, size_t d) {\n+    float32x4x4_t res = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    while (d >= 16) {\n+        float32x4x4_t a = vcvt4_f32_half(vld4_u16((const uint16_t*)x));\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[1] = vmlaq_f32(res.val[1], a.val[1], a.val[1]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[2], a.val[2]);\n+        res.val[3] = vmlaq_f32(res.val[3], a.val[3], a.val[3]);\n+        d -= 16;\n+        x += 16;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[1]);\n+    res.val[2] = vaddq_f32(res.val[2], res.val[3]);\n+    if (d >= 8) {\n+        float32x4x2_t a = vcvt2_f32_half(vld2_u16((const uint16_t*)x));\n+        res.val[0] = vmlaq_f32(res.val[0], a.val[0], a.val[0]);\n+        res.val[2] = vmlaq_f32(res.val[2], a.val[1], a.val[1]);\n+        d -= 8;\n+        x += 8;\n+    }\n+    res.val[0] = vaddq_f32(res.val[0], res.val[2]);\n+    if (d >= 4) {\n+        float32x4_t a = vcvt_f32_half(vld1_u16((const uint16_t*)x));\n+        res.val[0] = vmlaq_f32(res.val[0], a, a);\n+        d -= 4;\n+        x += 4;\n+    }\n+    if (d >= 0) {\n+        uint16x4_t res_x = vdup_n_u16(0);\n+        switch (d) {\n+            case 3:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 2);\n+                x++;\n+                d--;\n+            case 2:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 1);\n+                x++;\n+                d--;\n+            case 1:\n+                res_x = vld1_lane_u16((const uint16_t*)x, res_x, 0);\n+                x++;\n+                d--;\n+        }\n+\n+        float32x4_t x_fp32 = vcvt_f32_half(res_x);\n+\n+        res.val[0] = vmlaq_f32(res.val[0], x_fp32, x_fp32);\n+    }\n+    return vaddvq_f32(res.val[0]);\n+}\n+\n void\n fvec_L2sqr_ny_neon(float* dis, const float* x, const float* y, size_t d, size_t ny) {\n     for (size_t i = 0; i < ny; i++) {\n@@ -434,8 +1013,8 @@ fvec_madd_neon(size_t n, const float* a, float bf, const float* b, float* c) {\n     }\n \n     if (n == 3) {\n-        float32x4_t a_ = {0.0f, 0.0f, 0.0f, 0.0f};\n-        float32x4_t b_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+        float32x4_t a_ = vdupq_n_f32(0.0f);\n+        float32x4_t b_ = vdupq_n_f32(0.0f);\n \n         a_ = vld1q_lane_f32(a + len - n + 2, a_, 2);\n         a_ = vld1q_lane_f32(a + len - n + 1, a_, 1);\n@@ -450,8 +1029,8 @@ fvec_madd_neon(size_t n, const float* a, float bf, const float* b, float* c) {\n         vst1q_lane_f32(c + len - n, c_, 0);\n     }\n     if (n == 2) {\n-        float32x4_t a_ = {0.0f, 0.0f, 0.0f, 0.0f};\n-        float32x4_t b_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+        float32x4_t a_ = vdupq_n_f32(0.0f);\n+        float32x4_t b_ = vdupq_n_f32(0.0f);\n \n         a_ = vld1q_lane_f32(a + len - n + 1, a_, 1);\n         a_ = vld1q_lane_f32(a + len - n, a_, 0);\n@@ -463,8 +1042,8 @@ fvec_madd_neon(size_t n, const float* a, float bf, const float* b, float* c) {\n         vst1q_lane_f32(c + len - n, c_, 0);\n     }\n     if (n == 1) {\n-        float32x4_t a_ = {0.0f, 0.0f, 0.0f, 0.0f};\n-        float32x4_t b_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+        float32x4_t a_ = vdupq_n_f32(0.0f);\n+        float32x4_t b_ = vdupq_n_f32(0.0f);\n \n         a_ = vld1q_lane_f32(a + len - n, a_, 0);\n         b_ = vld1q_lane_f32(b + len - n, b_, 0);\n@@ -477,13 +1056,8 @@ fvec_madd_neon(size_t n, const float* a, float bf, const float* b, float* c) {\n int\n fvec_madd_and_argmin_neon(size_t n, const float* a, float bf, const float* b, float* c) {\n     size_t len = n;\n-    uint32x4_t ids = {0, 0, 0, 0};\n-    float32x4_t val = {\n-        INFINITY,\n-        INFINITY,\n-        INFINITY,\n-        INFINITY,\n-    };\n+    uint32x4_t ids = vdupq_n_u32(0);\n+    float32x4_t val = vdupq_n_f32(INFINITY);\n     while (n >= 16) {\n         auto a_ = vld1q_f32_x4(a + len - n);\n         auto b_ = vld1q_f32_x4(b + len - n);\n@@ -566,8 +1140,8 @@ fvec_madd_and_argmin_neon(size_t n, const float* a, float bf, const float* b, fl\n     }\n \n     if (n == 3) {\n-        float32x4_t a_ = {0.0f, 0.0f, 0.0f, 0.0f};\n-        float32x4_t b_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+        float32x4_t a_ = vdupq_n_f32(0.0f);\n+        float32x4_t b_ = vdupq_n_f32(0.0f);\n \n         a_ = vld1q_lane_f32(a + len - n + 2, a_, 2);\n         a_ = vld1q_lane_f32(a + len - n + 1, a_, 1);\n@@ -586,8 +1160,8 @@ fvec_madd_and_argmin_neon(size_t n, const float* a, float bf, const float* b, fl\n         ids = vbslq_u32(cmp, vaddq_u32(uint32x4_t{0, 1, 2, 3}, vld1q_dup_u32(&loc)), ids);\n     }\n     if (n == 2) {\n-        float32x4_t a_ = {0.0f, 0.0f, 0.0f, 0.0f};\n-        float32x4_t b_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+        float32x4_t a_ = vdupq_n_f32(0.0f);\n+        float32x4_t b_ = vdupq_n_f32(0.0f);\n \n         a_ = vld1q_lane_f32(a + len - n + 1, a_, 1);\n         a_ = vld1q_lane_f32(a + len - n, a_, 0);\n@@ -604,8 +1178,8 @@ fvec_madd_and_argmin_neon(size_t n, const float* a, float bf, const float* b, fl\n         ids = vbslq_u32(cmp, vaddq_u32(uint32x4_t{0, 1, 2, 3}, vld1q_dup_u32(&loc)), ids);\n     }\n     if (n == 1) {\n-        float32x4_t a_ = {0.0f, 0.0f, 0.0f, 0.0f};\n-        float32x4_t b_ = {0.0f, 0.0f, 0.0f, 0.0f};\n+        float32x4_t a_ = vdupq_n_f32(0.0f);\n+        float32x4_t b_ = vdupq_n_f32(0.0f);\n \n         a_ = vld1q_lane_f32(a + len - n, a_, 0);\n         b_ = vld1q_lane_f32(b + len - n, b_, 0);\n@@ -658,5 +1232,863 @@ ivec_L2sqr_neon(const int8_t* x, const int8_t* y, size_t d) {\n     return res;\n }\n \n+void\n+fvec_inner_product_batch_4_neon(const float* x, const float* y0, const float* y1, const float* y2, const float* y3,\n+                                const size_t dim, float& dis0, float& dis1, float& dis2, float& dis3) {\n+    float32x4x4_t sum_ = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    auto d = dim;\n+\n+    while (d >= 16) {\n+        float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y0 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vmulq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vmulq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y1 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vmulq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vmulq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y2 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vmulq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vmulq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y3 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vmulq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vmulq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 16;\n+    }\n+\n+    if (d >= 8) {\n+        float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n+\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y0 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y1 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y2 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y3 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vmulq_f32(a.val[1], b.val[1]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 8;\n+    }\n+    if (d >= 4) {\n+        float32x4_t a = vld1q_f32(x + dim - d);\n+        {\n+            float32x4_t b = vld1q_f32(y0 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, b);\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y1 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, b);\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y2 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, b);\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c);\n+        }\n+        {\n+            float32x4_t b = vld1q_f32(y3 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, b);\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c);\n+        }\n+\n+        d -= 4;\n+    }\n+\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4x4_t res_y = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    if (d >= 3) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 2);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 2);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 2);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 2);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 2) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 1);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 1);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 1);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 1);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 1);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 1) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 0);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 0);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 0);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 0);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 0);\n+\n+        d -= 1;\n+    }\n+\n+    sum_.val[0] = vaddq_f32(sum_.val[0], vmulq_f32(res_x, res_y.val[0]));\n+    sum_.val[1] = vaddq_f32(sum_.val[1], vmulq_f32(res_x, res_y.val[1]));\n+    sum_.val[2] = vaddq_f32(sum_.val[2], vmulq_f32(res_x, res_y.val[2]));\n+    sum_.val[3] = vaddq_f32(sum_.val[3], vmulq_f32(res_x, res_y.val[3]));\n+\n+    dis0 = vaddvq_f32(sum_.val[0]);\n+    dis1 = vaddvq_f32(sum_.val[1]);\n+    dis2 = vaddvq_f32(sum_.val[2]);\n+    dis3 = vaddvq_f32(sum_.val[3]);\n+}\n+\n+void\n+fvec_L2sqr_batch_4_neon(const float* x, const float* y0, const float* y1, const float* y2, const float* y3,\n+                        const size_t dim, float& dis0, float& dis1, float& dis2, float& dis3) {\n+    float32x4x4_t sum_ = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    auto d = dim;\n+    while (d >= 16) {\n+        float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y0 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vsubq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vsubq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y1 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vsubq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vsubq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y2 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vsubq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vsubq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y3 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+            c.val[2] = vsubq_f32(a.val[2], b.val[2]);\n+            c.val[3] = vsubq_f32(a.val[3], b.val[3]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 16;\n+    }\n+\n+    if (d >= 8) {\n+        float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n+\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y0 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y1 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y2 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y3 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], b.val[0]);\n+            c.val[1] = vsubq_f32(a.val[1], b.val[1]);\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 8;\n+    }\n+    if (d >= 4) {\n+        float32x4_t a = vld1q_f32(x + dim - d);\n+        {\n+            float32x4_t b = vld1q_f32(y0 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, b);\n+            c = vmulq_f32(c, c);\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y1 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, b);\n+            c = vmulq_f32(c, c);\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y2 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, b);\n+            c = vmulq_f32(c, c);\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c);\n+        }\n+        {\n+            float32x4_t b = vld1q_f32(y3 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, b);\n+            c = vmulq_f32(c, c);\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c);\n+        }\n+\n+        d -= 4;\n+    }\n+\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4x4_t res_y = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    if (d >= 3) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 2);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 2);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 2);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 2);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 2) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 1);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 1);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 1);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 1);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 1);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 1) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 0);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 0);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 0);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 0);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 0);\n+\n+        d -= 1;\n+    }\n+\n+    sum_.val[0] = vaddq_f32(sum_.val[0], vmulq_f32(vsubq_f32(res_x, res_y.val[0]), vsubq_f32(res_x, res_y.val[0])));\n+    sum_.val[1] = vaddq_f32(sum_.val[1], vmulq_f32(vsubq_f32(res_x, res_y.val[1]), vsubq_f32(res_x, res_y.val[1])));\n+    sum_.val[2] = vaddq_f32(sum_.val[2], vmulq_f32(vsubq_f32(res_x, res_y.val[2]), vsubq_f32(res_x, res_y.val[2])));\n+    sum_.val[3] = vaddq_f32(sum_.val[3], vmulq_f32(vsubq_f32(res_x, res_y.val[3]), vsubq_f32(res_x, res_y.val[3])));\n+\n+    dis0 = vaddvq_f32(sum_.val[0]);\n+    dis1 = vaddvq_f32(sum_.val[1]);\n+    dis2 = vaddvq_f32(sum_.val[2]);\n+    dis3 = vaddvq_f32(sum_.val[3]);\n+}\n+\n+void\n+fvec_inner_product_batch_4_neon_bf16_patch(const float* x, const float* y0, const float* y1, const float* y2,\n+                                           const float* y3, const size_t dim, float& dis0, float& dis1, float& dis2,\n+                                           float& dis3) {\n+    float32x4x4_t sum_ = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    auto d = dim;\n+    while (d >= 16) {\n+        float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n+\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+        a.val[2] = bf16_float_neon(a.val[2]);\n+        a.val[3] = bf16_float_neon(a.val[3]);\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y0 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vmulq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vmulq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y1 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vmulq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vmulq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y2 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vmulq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vmulq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y3 + dim - d);\n+            float32x4x4_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vmulq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vmulq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 16;\n+    }\n+\n+    if (d >= 8) {\n+        float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y0 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y1 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y2 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y3 + dim - d);\n+            float32x4x2_t c;\n+            c.val[0] = vmulq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vmulq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 8;\n+    }\n+    if (d >= 4) {\n+        float32x4_t a = vld1q_f32(x + dim - d);\n+        a = bf16_float_neon(a);\n+        {\n+            float32x4_t b = vld1q_f32(y0 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, bf16_float_neon(b));\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y1 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, bf16_float_neon(b));\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y2 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, bf16_float_neon(b));\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c);\n+        }\n+        {\n+            float32x4_t b = vld1q_f32(y3 + dim - d);\n+            float32x4_t c;\n+            c = vmulq_f32(a, bf16_float_neon(b));\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c);\n+        }\n+\n+        d -= 4;\n+    }\n+\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4x4_t res_y = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    if (d >= 3) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 2);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 2);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 2);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 2);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 2) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 1);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 1);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 1);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 1);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 1);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 1) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 0);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 0);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 0);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 0);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 0);\n+\n+        d -= 1;\n+    }\n+\n+    res_x = bf16_float_neon(res_x);\n+    res_y.val[0] = bf16_float_neon(res_y.val[0]);\n+    res_y.val[1] = bf16_float_neon(res_y.val[1]);\n+    res_y.val[2] = bf16_float_neon(res_y.val[2]);\n+    res_y.val[3] = bf16_float_neon(res_y.val[3]);\n+\n+    sum_.val[0] = vaddq_f32(sum_.val[0], vmulq_f32(res_x, res_y.val[0]));\n+    sum_.val[1] = vaddq_f32(sum_.val[1], vmulq_f32(res_x, res_y.val[1]));\n+    sum_.val[2] = vaddq_f32(sum_.val[2], vmulq_f32(res_x, res_y.val[2]));\n+    sum_.val[3] = vaddq_f32(sum_.val[3], vmulq_f32(res_x, res_y.val[3]));\n+\n+    dis0 = vaddvq_f32(sum_.val[0]);\n+    dis1 = vaddvq_f32(sum_.val[1]);\n+    dis2 = vaddvq_f32(sum_.val[2]);\n+    dis3 = vaddvq_f32(sum_.val[3]);\n+}\n+\n+void\n+fvec_L2sqr_batch_4_neon_bf16_patch(const float* x, const float* y0, const float* y1, const float* y2, const float* y3,\n+                                   const size_t dim, float& dis0, float& dis1, float& dis2, float& dis3) {\n+    float32x4x4_t sum_ = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    auto d = dim;\n+    while (d >= 16) {\n+        float32x4x4_t a = vld1q_f32_x4(x + dim - d);\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+        a.val[2] = bf16_float_neon(a.val[2]);\n+        a.val[3] = bf16_float_neon(a.val[3]);\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y0 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vsubq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vsubq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y1 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vsubq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vsubq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y2 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vsubq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vsubq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+\n+        {\n+            float32x4x4_t b = vld1q_f32_x4(y3 + dim - d);\n+            float32x4x4_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+            c.val[2] = vsubq_f32(a.val[2], bf16_float_neon(b.val[2]));\n+            c.val[3] = vsubq_f32(a.val[3], bf16_float_neon(b.val[3]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+            c.val[2] = vmulq_f32(c.val[2], c.val[2]);\n+            c.val[3] = vmulq_f32(c.val[3], c.val[3]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            c.val[2] = vaddq_f32(c.val[2], c.val[3]);\n+            c.val[0] = vaddq_f32(c.val[0], c.val[2]);\n+\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 16;\n+    }\n+\n+    if (d >= 8) {\n+        float32x4x2_t a = vld1q_f32_x2(x + dim - d);\n+        a.val[0] = bf16_float_neon(a.val[0]);\n+        a.val[1] = bf16_float_neon(a.val[1]);\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y0 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y1 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y2 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c.val[0]);\n+        }\n+        {\n+            float32x4x2_t b = vld1q_f32_x2(y3 + dim - d);\n+            float32x4x2_t c;\n+\n+            c.val[0] = vsubq_f32(a.val[0], bf16_float_neon(b.val[0]));\n+            c.val[1] = vsubq_f32(a.val[1], bf16_float_neon(b.val[1]));\n+\n+            c.val[0] = vmulq_f32(c.val[0], c.val[0]);\n+            c.val[1] = vmulq_f32(c.val[1], c.val[1]);\n+\n+            c.val[0] = vaddq_f32(c.val[0], c.val[1]);\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c.val[0]);\n+        }\n+\n+        d -= 8;\n+    }\n+    if (d >= 4) {\n+        float32x4_t a = vld1q_f32(x + dim - d);\n+        a = bf16_float_neon(a);\n+        {\n+            float32x4_t b = vld1q_f32(y0 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, bf16_float_neon(b));\n+            c = vmulq_f32(c, c);\n+            sum_.val[0] = vaddq_f32(sum_.val[0], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y1 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, bf16_float_neon(b));\n+            c = vmulq_f32(c, c);\n+            sum_.val[1] = vaddq_f32(sum_.val[1], c);\n+        }\n+\n+        {\n+            float32x4_t b = vld1q_f32(y2 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, bf16_float_neon(b));\n+            c = vmulq_f32(c, c);\n+            sum_.val[2] = vaddq_f32(sum_.val[2], c);\n+        }\n+        {\n+            float32x4_t b = vld1q_f32(y3 + dim - d);\n+            float32x4_t c;\n+            c = vsubq_f32(a, bf16_float_neon(b));\n+            c = vmulq_f32(c, c);\n+            sum_.val[3] = vaddq_f32(sum_.val[3], c);\n+        }\n+\n+        d -= 4;\n+    }\n+\n+    float32x4_t res_x = vdupq_n_f32(0.0f);\n+    float32x4x4_t res_y = {vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f), vdupq_n_f32(0.0f)};\n+    if (d >= 3) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 2);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 2);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 2);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 2);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 2);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 2) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 1);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 1);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 1);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 1);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 1);\n+\n+        d -= 1;\n+    }\n+\n+    if (d >= 1) {\n+        res_x = vld1q_lane_f32(x + dim - d, res_x, 0);\n+        res_y.val[0] = vld1q_lane_f32(y0 + dim - d, res_y.val[0], 0);\n+        res_y.val[1] = vld1q_lane_f32(y1 + dim - d, res_y.val[1], 0);\n+        res_y.val[2] = vld1q_lane_f32(y2 + dim - d, res_y.val[2], 0);\n+        res_y.val[3] = vld1q_lane_f32(y3 + dim - d, res_y.val[3], 0);\n+\n+        d -= 1;\n+    }\n+\n+    res_x = bf16_float_neon(res_x);\n+    res_y.val[0] = bf16_float_neon(res_y.val[0]);\n+    res_y.val[1] = bf16_float_neon(res_y.val[1]);\n+    res_y.val[2] = bf16_float_neon(res_y.val[2]);\n+    res_y.val[3] = bf16_float_neon(res_y.val[3]);\n+\n+    sum_.val[0] = vaddq_f32(sum_.val[0], vmulq_f32(vsubq_f32(res_x, res_y.val[0]), vsubq_f32(res_x, res_y.val[0])));\n+    sum_.val[1] = vaddq_f32(sum_.val[1], vmulq_f32(vsubq_f32(res_x, res_y.val[1]), vsubq_f32(res_x, res_y.val[1])));\n+    sum_.val[2] = vaddq_f32(sum_.val[2], vmulq_f32(vsubq_f32(res_x, res_y.val[2]), vsubq_f32(res_x, res_y.val[2])));\n+    sum_.val[3] = vaddq_f32(sum_.val[3], vmulq_f32(vsubq_f32(res_x, res_y.val[3]), vsubq_f32(res_x, res_y.val[3])));\n+\n+    dis0 = vaddvq_f32(sum_.val[0]);\n+    dis1 = vaddvq_f32(sum_.val[1]);\n+    dis2 = vaddvq_f32(sum_.val[2]);\n+    dis3 = vaddvq_f32(sum_.val[3]);\n+}\n+\n }  // namespace faiss\n #endif\ndiff --git a/src/simd/distances_neon.h b/src/simd/distances_neon.h\nindex c3150d16..bb4fd542 100644\n--- a/src/simd/distances_neon.h\n+++ b/src/simd/distances_neon.h\n@@ -15,15 +15,33 @@\n #include <cstdint>\n #include <cstdio>\n \n+#include \"knowhere/operands.h\"\n+\n namespace faiss {\n \n /// Squared L2 distance between two vectors\n float\n fvec_L2sqr_neon(const float* x, const float* y, size_t d);\n+float\n+fvec_L2sqr_neon_bf16_patch(const float* x, const float* y, size_t d);\n+\n+float\n+fp16_vec_L2sqr_neon(const knowhere::fp16* x, const knowhere::fp16* y, size_t d);\n+\n+float\n+bf16_vec_L2sqr_neon(const knowhere::bf16* x, const knowhere::bf16* y, size_t d);\n \n /// inner product\n float\n fvec_inner_product_neon(const float* x, const float* y, size_t d);\n+float\n+fvec_inner_product_neon_bf16_patch(const float* x, const float* y, size_t d);\n+\n+float\n+fp16_vec_inner_product_neon(const knowhere::fp16* x, const knowhere::fp16* y, size_t d);\n+\n+float\n+bf16_vec_inner_product_neon(const knowhere::bf16* x, const knowhere::bf16* y, size_t d);\n \n /// L1 distance\n float\n@@ -37,6 +55,12 @@ fvec_Linf_neon(const float* x, const float* y, size_t d);\n float\n fvec_norm_L2sqr_neon(const float* x, size_t d);\n \n+float\n+fp16_vec_norm_L2sqr_neon(const knowhere::fp16* x, size_t d);\n+\n+float\n+bf16_vec_norm_L2sqr_neon(const knowhere::bf16* x, size_t d);\n+\n /// compute ny square L2 distance between x and a set of contiguous y vectors\n void\n fvec_L2sqr_ny_neon(float* dis, const float* x, const float* y, size_t d, size_t ny);\n@@ -57,6 +81,27 @@ ivec_inner_product_neon(const int8_t* x, const int8_t* y, size_t d);\n int32_t\n ivec_L2sqr_neon(const int8_t* x, const int8_t* y, size_t d);\n \n+/// Special version of inner product that computes 4 distances\n+/// between x and yi, which is performance oriented.\n+void\n+fvec_inner_product_batch_4_neon(const float* x, const float* y0, const float* y1, const float* y2, const float* y3,\n+                                const size_t dim, float& dis0, float& dis1, float& dis2, float& dis3);\n+\n+void\n+fvec_inner_product_batch_4_neon_bf16_patch(const float* x, const float* y0, const float* y1, const float* y2,\n+                                           const float* y3, const size_t dim, float& dis0, float& dis1, float& dis2,\n+                                           float& dis3);\n+\n+/// Special version of L2sqr that computes 4 distances\n+/// between x and yi, which is performance oriented.\n+void\n+fvec_L2sqr_batch_4_neon(const float* x, const float* y0, const float* y1, const float* y2, const float* y3,\n+                        const size_t dim, float& dis0, float& dis1, float& dis2, float& dis3);\n+\n+void\n+fvec_L2sqr_batch_4_neon_bf16_patch(const float* x, const float* y0, const float* y1, const float* y2, const float* y3,\n+                                   const size_t dim, float& dis0, float& dis1, float& dis2, float& dis3);\n+\n }  // namespace faiss\n \n #endif /* DISTANCES_NEON_H */\ndiff --git a/src/simd/hook.cc b/src/simd/hook.cc\nindex 5e40b3f0..48ef2c43 100644\n--- a/src/simd/hook.cc\n+++ b/src/simd/hook.cc\n@@ -185,6 +185,9 @@ fvec_hook(std::string& simd_type) {\n     ivec_inner_product = ivec_inner_product_neon;\n     ivec_L2sqr = ivec_L2sqr_neon;\n \n+    fvec_inner_product_batch_4 = fvec_inner_product_batch_4_neon;\n+    fvec_L2sqr_batch_4 = fvec_L2sqr_batch_4_neon;\n+\n     simd_type = \"NEON\";\n     support_pq_fast_scan = true;\n \ndiff --git a/src/simd/simd_util.h b/src/simd/simd_util.h\nnew file mode 100644\nindex 00000000..4aeb4d87\n--- /dev/null\n+++ b/src/simd/simd_util.h\n@@ -0,0 +1,123 @@\n+// Copyright (C) 2019-2023 Zilliz. All rights reserved.\n+//\n+// Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance\n+// with the License. You may obtain a copy of the License at\n+//\n+// http://www.apache.org/licenses/LICENSE-2.0\n+//\n+// Unless required by applicable law or agreed to in writing, software distributed under the License\n+// is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n+// or implied. See the License for the specific language governing permissions and limitations under the License.\n+\n+#ifndef SIMD_UTIL_H\n+#define SIMD_UTIL_H\n+#include <cassert>\n+\n+#include \"knowhere/operands.h\"\n+#if defined(__ARM_NEON)\n+#include <arm_neon.h>\n+#endif\n+\n+#if defined(__x86_64__)\n+#include <immintrin.h>\n+#endif\n+namespace faiss {\n+#if defined(__x86_64__)\n+#define ALIGNED(x) __attribute__((aligned(x)))\n+\n+static inline __m128\n+_mm_bf16_to_fp32(const __m128i& a) {\n+    auto o = _mm_slli_epi32(_mm_cvtepu16_epi32(a), 16);\n+    return _mm_castsi128_ps(o);\n+}\n+\n+static inline __m256\n+_mm256_bf16_to_fp32(const __m128i& a) {\n+    __m256i o = _mm256_slli_epi32(_mm256_cvtepu16_epi32(a), 16);\n+    return _mm256_castsi256_ps(o);\n+}\n+\n+static inline __m512\n+_mm512_bf16_to_fp32(const __m256i& x) {\n+    return _mm512_castsi512_ps(_mm512_slli_epi32(_mm512_cvtepu16_epi32(x), 16));\n+}\n+\n+static inline __m128i\n+mm_masked_read_short(int d, const uint16_t* x) {\n+    assert(0 <= d && d < 8);\n+    ALIGNED(16) uint16_t buf[8] = {0, 0, 0, 0, 0, 0, 0, 0};\n+    switch (d) {\n+        case 7:\n+            buf[6] = x[6];\n+        case 6:\n+            buf[5] = x[5];\n+        case 5:\n+            buf[4] = x[4];\n+        case 4:\n+            buf[3] = x[3];\n+        case 3:\n+            buf[2] = x[2];\n+        case 2:\n+            buf[1] = x[1];\n+        case 1:\n+            buf[0] = x[0];\n+    }\n+    return _mm_loadu_si128((__m128i*)buf);\n+}\n+\n+static inline float\n+_mm256_reduce_add_ps(const __m256 res) {\n+    const __m128 sum = _mm_add_ps(_mm256_castps256_ps128(res), _mm256_extractf128_ps(res, 1));\n+    const __m128 v0 = _mm_shuffle_ps(sum, sum, _MM_SHUFFLE(0, 0, 3, 2));\n+    const __m128 v1 = _mm_add_ps(sum, v0);\n+    __m128 v2 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(0, 0, 0, 1));\n+    const __m128 v3 = _mm_add_ps(v1, v2);\n+    return _mm_cvtss_f32(v3);\n+}\n+#endif\n+\n+#if defined(__ARM_NEON)\n+static inline float32x4x4_t\n+vcvt4_f32_f16(const float16x4x4_t a) {\n+    float32x4x4_t c;\n+    c.val[0] = vcvt_f32_f16(a.val[0]);\n+    c.val[1] = vcvt_f32_f16(a.val[1]);\n+    c.val[2] = vcvt_f32_f16(a.val[2]);\n+    c.val[3] = vcvt_f32_f16(a.val[3]);\n+    return c;\n+}\n+\n+static inline float32x4x2_t\n+vcvt2_f32_f16(const float16x4x2_t a) {\n+    float32x4x2_t c;\n+    c.val[0] = vcvt_f32_f16(a.val[0]);\n+    c.val[1] = vcvt_f32_f16(a.val[1]);\n+    return c;\n+}\n+\n+static inline float32x4x4_t\n+vcvt4_f32_half(const uint16x4x4_t x) {\n+    float32x4x4_t c;\n+    c.val[0] = vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(x.val[0]), 16));\n+    c.val[1] = vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(x.val[1]), 16));\n+    c.val[2] = vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(x.val[2]), 16));\n+    c.val[3] = vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(x.val[3]), 16));\n+    return c;\n+}\n+\n+static inline float32x4x2_t\n+vcvt2_f32_half(const uint16x4x2_t x) {\n+    float32x4x2_t c;\n+    c.val[0] = vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(x.val[0]), 16));\n+    c.val[1] = vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(x.val[1]), 16));\n+    return c;\n+}\n+\n+static inline float32x4_t\n+vcvt_f32_half(const uint16x4_t x) {\n+    return vreinterpretq_f32_u32(vshlq_n_u32(vmovl_u16(x), 16));\n+}\n+\n+#endif\n+}  // namespace faiss\n+#endif /* SIMD_UTIL_H */\n"
  },
  {
    "path": "thirdparty/knowhere.patch",
    "content": "diff --git a/CMakeLists.txt b/CMakeLists.txt\nindex b7870adf..0d8fc16c 100644\n--- a/CMakeLists.txt\n+++ b/CMakeLists.txt\n@@ -139,7 +139,8 @@ if(WITH_LIGHT)\n     GLOB_RECURSE\n     KNOWHERE_SRCS\n     src/common/*.cc\n-    src/index/ivf/ivf.cc\n+    src/index/ivf/*.cc\n+    src/index/refine/*.cc\n     src/index/index_node_data_mock_wrapper.cc\n     src/index/index_static.cc\n     src/index/index.cc\ndiff --git a/cmake/libs/libfaiss.cmake b/cmake/libs/libfaiss.cmake\nindex 2756fb57..635358a3 100644\n--- a/cmake/libs/libfaiss.cmake\n+++ b/cmake/libs/libfaiss.cmake\n@@ -113,6 +113,7 @@ endif()\n \n if(LINUX)\n   set(BLA_VENDOR OpenBLAS)\n+  find_path(BLAS_INCLUDE_DIRS cblas.h PATH_SUFFIXES openblas)\n endif()\n \n if(APPLE)\n@@ -168,6 +169,7 @@ if(__X86_64)\n     faiss PUBLIC OpenMP::OpenMP_CXX ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}\n                  faiss_avx2 faiss_avx512 knowhere_utils)\n   target_compile_definitions(faiss PRIVATE FINTEGER=int)\n+  target_include_directories(faiss PUBLIC ${BLAS_INCLUDE_DIRS})\n endif()\n \n if(__AARCH64)\n@@ -190,6 +192,7 @@ if(__AARCH64)\n   target_link_libraries(faiss PUBLIC OpenMP::OpenMP_CXX ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}\n                                      knowhere_utils)\n   target_compile_definitions(faiss PRIVATE FINTEGER=int)\n+  target_include_directories(faiss PUBLIC ${BLAS_INCLUDE_DIRS})\n endif()\n \n if(__PPC64)\n@@ -217,4 +220,5 @@ if(__PPC64)\n   target_link_libraries(faiss PUBLIC OpenMP::OpenMP_CXX ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}\n                                       knowhere_utils)\n   target_compile_definitions(faiss PRIVATE FINTEGER=int)\n+  target_include_directories(faiss PUBLIC ${BLAS_INCLUDE_DIRS})\n endif()\n"
  },
  {
    "path": "thirdparty/milvus.patch",
    "content": "diff --git a/internal/core/cmake/Utils.cmake b/internal/core/cmake/Utils.cmake\nindex 8facf7cccd..f0d75bf8be 100644\n--- a/internal/core/cmake/Utils.cmake\n+++ b/internal/core/cmake/Utils.cmake\n@@ -101,12 +101,32 @@ macro(create_library)\n     target_compile_definitions(${L_TARGET} PRIVATE ${L_DEFS})\n endmacro()\n \n+macro(add_source_at_current_directory)\n+    file(GLOB SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} \"*.cc\" \"*.cpp\" \"*.c\" \"*.cxx\")\n+    message(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}  add new source files at current directory: ${SOURCE_FILES}\")\n+endmacro()\n+\n+macro(add_source_at_current_directory_with_exclude)\n+    file(GLOB SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} \"*.cc\" \"*.cpp\" \"*.c\" \"*.cxx\")\n+    # Exclude files matching patterns\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_test\\\\.cc$\")\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_test\\\\.cpp$\")\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_mock\\\\.cc$\")\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_mock\\\\.cpp$\")\n+    message(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}  add new source files at current directory: ${SOURCE_FILES}\")\n+endmacro()\n+\n macro(add_source_at_current_directory_recursively)\n     file(GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} \"*.cc\" \"*.cpp\" \"*.c\" \"*.cxx\")\n     message(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}  add new source files at current directory recursively: ${SOURCE_FILES}\")\n endmacro()\n \n-macro(add_source_at_current_directory)\n-    file(GLOB SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} \"*.cc\" \"*.cpp\" \"*.c\" \"*.cxx\")\n-    message(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}  add new source files at current directory: ${SOURCE_FILES}\")\n+macro(add_source_at_current_directory_recursively_with_exclude)\n+    file(GLOB_RECURSE SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} \"*.cc\" \"*.cpp\" \"*.c\" \"*.cxx\")\n+    # Exclude files matching patterns\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_test\\\\.cc$\")\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_test\\\\.cpp$\")\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_mock\\\\.cc$\")\n+    list(FILTER SOURCE_FILES EXCLUDE REGEX \".*_mock\\\\.cpp$\")\n+    message(STATUS \"${CMAKE_CURRENT_SOURCE_DIR}  add new source files at current directory recursively: ${SOURCE_FILES}\")\n endmacro()\ndiff --git a/internal/core/src/common/Tracer.cpp b/internal/core/src/common/Tracer.cpp\nindex c60f8ad3cb..c2ea1316d6 100644\n--- a/internal/core/src/common/Tracer.cpp\n+++ b/internal/core/src/common/Tracer.cpp\n@@ -10,8 +10,11 @@\n // or implied. See the License for the specific language governing permissions and limitations under the License\n \n #include \"Tracer.h\"\n+#ifndef MILVUS_LITE\n #include <opentelemetry/exporters/otlp/otlp_http_exporter_factory.h>\n #include <opentelemetry/exporters/otlp/otlp_http_exporter_options.h>\n+#endif\n+\n #include \"log/Log.h\"\n \n #include <atomic>\n@@ -20,6 +23,7 @@\n #include <iostream>\n #include <utility>\n \n+#ifndef MILVUS_LITE\n #include \"opentelemetry/exporters/jaeger/jaeger_exporter_factory.h\"\n #include \"opentelemetry/exporters/ostream/span_exporter_factory.h\"\n #include \"opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h\"\n@@ -34,7 +38,6 @@\n #include \"opentelemetry/trace/span_metadata.h\"\n \n namespace milvus::tracer {\n-\n namespace trace = opentelemetry::trace;\n namespace nostd = opentelemetry::nostd;\n \n@@ -276,5 +279,126 @@ AutoSpan::~AutoSpan() {\n         CloseRootSpan();\n     }\n }\n+#endif\n+\n+#ifdef MILVUS_LITE\n+namespace milvus::tracer {\n+static std::atomic<bool> enable_trace = true;\n+void\n+initTelemetry(const TraceConfig& cfg) {\n+}\n+\n+std::string\n+GetTraceID() {\n+    return std::string();\n+}\n+\n+std::string\n+GetTraceIDAsHexStr(const TraceContext* ctx) {\n+    return std::string();\n+}\n+\n+std::shared_ptr<trace::Tracer>\n+GetTracer() {\n+    return std::make_shared<trace::Tracer>();\n+}\n+\n+std::shared_ptr<trace::Span>\n+StartSpan(const std::string& name, TraceContext* parentCtx) {\n+    return std::make_shared<trace::Span>();\n+}\n+\n+std::shared_ptr<trace::Span>\n+StartSpan(const std::string& name, const std::shared_ptr<trace::Span>& span) {\n+    return std::make_shared<trace::Span>();\n+}\n+\n+thread_local std::shared_ptr<trace::Span> local_span;\n+void\n+SetRootSpan(std::shared_ptr<trace::Span> span) {\n+}\n+\n+void\n+CloseRootSpan() {\n+}\n+\n+std::shared_ptr<trace::Span>\n+GetRootSpan() {\n+    if (enable_trace) {\n+        return local_span;\n+    }\n+    return nullptr;\n+}\n+\n+std::string\n+GetSpanIDAsHexStr(const TraceContext* ctx) {\n+    return std::string();\n+}\n+\n+void\n+AddEvent(const std::string& event_label) {\n+}\n+\n+bool\n+isEmptyID(const uint8_t* id, int length) {\n+    if (id != nullptr) {\n+        for (int i = 0; i < length; i++) {\n+            if (id[i] != 0) {\n+                return false;\n+            }\n+        }\n+    }\n+    return true;\n+}\n+\n+bool\n+EmptyTraceID(const TraceContext* ctx) {\n+    return true;\n+}\n+\n+bool\n+EmptySpanID(const TraceContext* ctx) {\n+    return true;\n+}\n+\n+std::vector<uint8_t>\n+GetTraceIDAsVector(const TraceContext* ctx) {\n+    return {};\n+}\n+\n+std::vector<uint8_t>\n+GetSpanIDAsVector(const TraceContext* ctx) {\n+    return {};\n+}\n+\n+AutoSpan::AutoSpan(const std::string& name,\n+                   TraceContext* ctx,\n+                   bool is_root_span)\n+    : is_root_span_(is_root_span) {\n+    span_ = StartSpan(name, ctx);\n+    if (is_root_span) {\n+        SetRootSpan(span_);\n+    }\n+}\n+\n+AutoSpan::AutoSpan(const std::string& name,\n+                   const std::shared_ptr<trace::Span>& span)\n+    : is_root_span_(false) {\n+    span_ = StartSpan(name, span);\n+}\n \n+std::shared_ptr<trace::Span>\n+AutoSpan::GetSpan() {\n+    return span_;\n+}\n+\n+AutoSpan::~AutoSpan() {\n+    if (span_ != nullptr) {\n+        span_->End();\n+    }\n+    if (is_root_span_) {\n+        CloseRootSpan();\n+    }\n+}\n }  // namespace milvus::tracer\n+#endif\n\\ No newline at end of file\ndiff --git a/internal/core/src/common/Tracer.h b/internal/core/src/common/Tracer.h\nindex fce14d393b..6ee06daa2b 100644\n--- a/internal/core/src/common/Tracer.h\n+++ b/internal/core/src/common/Tracer.h\n@@ -14,10 +14,32 @@\n #include <memory>\n #include <string>\n \n+#ifndef MILVUS_LITE\n #include \"opentelemetry/trace/provider.h\"\n+#endif\n \n #define TRACE_SERVICE_SEGCORE \"segcore\"\n \n+namespace trace {\n+\n+#ifdef MILVUS_LITE\n+class Span {\n+ public:\n+    void\n+    End() {\n+    }\n+};\n+class Tracer {\n+ public:\n+    static int\n+    WithActiveSpan(std::shared_ptr<Span>& span) noexcept {\n+        return 0;\n+    }\n+};\n+\n+};  // namespace trace\n+#endif\n+\n namespace milvus::tracer {\n \n struct TraceConfig {\n@@ -36,7 +58,10 @@ struct TraceContext {\n     const uint8_t* spanID = nullptr;\n     uint8_t traceFlags = 0;\n };\n+\n+#ifndef MILVUS_LITE\n namespace trace = opentelemetry::trace;\n+#endif\n \n void\n initTelemetry(const TraceConfig& cfg);\ndiff --git a/internal/core/src/storage/CMakeLists.txt b/internal/core/src/storage/CMakeLists.txt\nindex b88211bb87..a158becd37 100644\n--- a/internal/core/src/storage/CMakeLists.txt\n+++ b/internal/core/src/storage/CMakeLists.txt\n@@ -16,6 +16,14 @@\n \n add_source_at_current_directory()\n \n+# Exclude specific files\n+list(FILTER SOURCE_FILES EXCLUDE REGEX \"^Aliyun.*\\\\.cpp$\")\n+list(FILTER SOURCE_FILES EXCLUDE REGEX \"^Minio.*\\\\.cpp$\")\n+list(FILTER SOURCE_FILES EXCLUDE REGEX \"^ChunkManager.cpp$\")\n+list(FILTER SOURCE_FILES EXCLUDE REGEX \"^TencentCloud.*\\\\.cpp$\")\n+\n+message(\"SOURCE_FILES: ${SOURCE_FILES}\")\n+\n if (ENABLE_GCP_NATIVE)\n     add_definitions(-DENABLE_GCP_NATIVE)\n     add_subdirectory(gcp-native-storage)\ndiff --git a/internal/core/src/storage/ChunkManager.cpp b/internal/core/src/storage/ChunkManager.cpp\nindex c6d8908625..c60bc74c6b 100644\n--- a/internal/core/src/storage/ChunkManager.cpp\n+++ b/internal/core/src/storage/ChunkManager.cpp\n@@ -15,6 +15,7 @@\n // limitations under the License.\n \n #include <fstream>\n+#ifndef MILVUS_LITE\n #include <aws/core/auth/AWSCredentials.h>\n #include <aws/core/auth/AWSCredentialsProviderChain.h>\n #include <aws/core/auth/STSCredentialsProvider.h>\n@@ -28,11 +29,13 @@\n #include <aws/s3/model/ListObjectsRequest.h>\n #include <aws/s3/model/PutObjectRequest.h>\n \n+\n #include \"storage/MinioChunkManager.h\"\n #include \"storage/AliyunSTSClient.h\"\n #include \"storage/TencentCloudSTSClient.h\"\n #include \"storage/AliyunCredentialsProvider.h\"\n #include \"storage/TencentCloudCredentialsProvider.h\"\n+#endif\n #include \"common/Consts.h\"\n #include \"common/EasyAssert.h\"\n #include \"log/Log.h\"\ndiff --git a/internal/core/src/storage/LocalChunkManager.cpp b/internal/core/src/storage/LocalChunkManager.cpp\nindex be97ee000b..57e4c77dcb 100644\n--- a/internal/core/src/storage/LocalChunkManager.cpp\n+++ b/internal/core/src/storage/LocalChunkManager.cpp\n@@ -23,6 +23,7 @@\n #include <boost/system/error_code.hpp>\n #include <fstream>\n #include <sstream>\n+#include <thread>\n \n #include \"common/EasyAssert.h\"\n #include \"common/Exception.h\"\ndiff --git a/internal/core/src/storage/Util.cpp b/internal/core/src/storage/Util.cpp\nindex 85ec72152c..f0dbee476c 100644\n--- a/internal/core/src/storage/Util.cpp\n+++ b/internal/core/src/storage/Util.cpp\n@@ -37,7 +37,9 @@\n #include \"storage/InsertData.h\"\n #include \"storage/LocalChunkManager.h\"\n #include \"storage/MemFileManagerImpl.h\"\n+#ifndef MILVUS_LITE\n #include \"storage/MinioChunkManager.h\"\n+#endif\n #ifdef USE_OPENDAL\n #include \"storage/opendal/OpenDALChunkManager.h\"\n #endif\n@@ -750,6 +752,7 @@ CreateChunkManager(const StorageConfig& storage_config) {\n             return std::make_shared<LocalChunkManager>(\n                 storage_config.root_path);\n         }\n+#ifndef MILVUS_LITE\n         case ChunkManagerType::Minio: {\n             return std::make_shared<MinioChunkManager>(storage_config);\n         }\n@@ -770,22 +773,19 @@ CreateChunkManager(const StorageConfig& storage_config) {\n                     return std::make_shared<TencentCloudChunkManager>(\n                         storage_config);\n                 }\n-#ifdef AZURE_BUILD_DIR\n                 case CloudProviderType::AZURE: {\n                     return std::make_shared<AzureChunkManager>(storage_config);\n                 }\n-#endif\n-#ifdef ENABLE_GCP_NATIVE\n                 case CloudProviderType::GCPNATIVE: {\n                     return std::make_shared<GcpNativeChunkManager>(\n                         storage_config);\n                 }\n-#endif\n                 default: {\n                     return std::make_shared<MinioChunkManager>(storage_config);\n                 }\n             }\n         }\n+#endif\n #ifdef USE_OPENDAL\n         case ChunkManagerType::OpenDAL: {\n             return std::make_shared<OpenDALChunkManager>(storage_config);\ndiff --git a/internal/core/thirdparty/knowhere/CMakeLists.txt b/internal/core/thirdparty/knowhere/CMakeLists.txt\nindex f06d350ed9..858d01874f 100644\n--- a/internal/core/thirdparty/knowhere/CMakeLists.txt\n+++ b/internal/core/thirdparty/knowhere/CMakeLists.txt\n@@ -22,6 +22,8 @@ message(STATUS \"Knowhere version: ${KNOWHERE_VERSION}\")\n message(STATUS \"Building knowhere-${KNOWHERE_SOURCE_VER} from source\")\n message(STATUS ${CMAKE_BUILD_TYPE})\n \n+set(WITH_LIGHT ON )\n+\n if ( BUILD_DISK_ANN STREQUAL \"ON\" )\n     set(WITH_DISKANN ON CACHE BOOL \"\" FORCE )\n else ()\n@@ -45,12 +47,35 @@ FetchContent_Declare(\n         GIT_TAG         ${KNOWHERE_VERSION}\n         SOURCE_DIR      ${CMAKE_CURRENT_BINARY_DIR}/knowhere-src\n         BINARY_DIR      ${CMAKE_CURRENT_BINARY_DIR}/knowhere-build\n-        DOWNLOAD_DIR    ${THIRDPARTY_DOWNLOAD_PATH} )\n+        DOWNLOAD_DIR    ${THIRDPARTY_DOWNLOAD_PATH}\n+      )\n \n FetchContent_GetProperties( knowhere )\n if ( NOT knowhere_POPULATED )\n     FetchContent_Populate( knowhere )\n \n+    execute_process(COMMAND git diff --quiet\n+      WORKING_DIRECTORY  ${CMAKE_CURRENT_BINARY_DIR}/knowhere-src\n+      RESULT_VARIABLE KNOWHERE_CHECK_RESULT\n+    )\n+\n+    if(${KNOWHERE_CHECK_RESULT} EQUAL 0)\n+      if(CMAKE_SYSTEM_NAME STREQUAL \"Android\" AND CMAKE_SYSTEM_PROCESSOR STREQUAL\n+          \"aarch64\")\n+        message(\"Apply knowhere android patch...\")\n+        execute_process(COMMAND git apply ${CMAKE_SOURCE_DIR}/thirdparty/knowhere-android.patch\n+          WORKING_DIRECTORY  ${CMAKE_CURRENT_BINARY_DIR}/knowhere-src\n+          OUTPUT_VARIABLE result\n+        )\n+      else()\n+        message(\"Apply knowhere patch...\")\n+        execute_process(COMMAND git apply ${CMAKE_SOURCE_DIR}/thirdparty/knowhere.patch\n+          WORKING_DIRECTORY  ${CMAKE_CURRENT_BINARY_DIR}/knowhere-src\n+          OUTPUT_VARIABLE result\n+        )\n+      endif()\n+    endif()\n+\n     # Adding the following target:\n     # knowhere\n     add_subdirectory( ${knowhere_SOURCE_DIR}\ndiff --git a/internal/core/thirdparty/tantivy/tokenizer.h b/internal/core/thirdparty/tantivy/tokenizer.h\nindex c4be0ee314..79536f1c7d 100644\n--- a/internal/core/thirdparty/tantivy/tokenizer.h\n+++ b/internal/core/thirdparty/tantivy/tokenizer.h\n@@ -5,6 +5,7 @@\n #include \"rust-hashmap.h\"\n #include \"tantivy/rust-array.h\"\n #include \"token-stream.h\"\n+#include \"common/EasyAssert.h\"\n \n namespace milvus::tantivy {\n \n"
  }
]